Browse Source

feat: 刷新token重新运行api

test2
xuesinan 4 years ago
parent
commit
02fb4bf5e3
  1. 3
      CHANGELOG.md
  2. 6
      apis/tall.js
  3. 33
      components/Upload/Upload.vue
  4. 9
      pages.json
  5. 54
      pages/business/business.vue
  6. 2
      pages/guide/adv.vue
  7. 2
      store/index.js
  8. 64
      utils/request.js

3
CHANGELOG.md

@ -1,4 +1,4 @@
# 1.0.0 (2022-01-18) # 1.0.0 (2022-01-19)
### 🌟 新功能 ### 🌟 新功能
范围|描述|commitId 范围|描述|commitId
@ -26,6 +26,7 @@
- | 项目操作面板 | [3beb05e](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/3beb05e) - | 项目操作面板 | [3beb05e](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/3beb05e)
- | 项目列表 | [a52e6d5](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/a52e6d5) - | 项目列表 | [a52e6d5](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/a52e6d5)
- | 项目列表新 | [88cf48d](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/88cf48d) - | 项目列表新 | [88cf48d](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/88cf48d)
- | 引导页、广告页 | [4aa76ff](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/4aa76ff)
- | 账户名密码登录 | [ebf456e](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/ebf456e) - | 账户名密码登录 | [ebf456e](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/ebf456e)
- | 主体颜色 | [bb5c0e3](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/bb5c0e3) - | 主体颜色 | [bb5c0e3](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/bb5c0e3)
- | 注册、用户协议 | [68e9189](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/68e9189) - | 注册、用户协议 | [68e9189](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/68e9189)

6
apis/tall.js

@ -12,11 +12,11 @@ export function setupTall(app) {
// 注册 // 注册
// uni.$u.api.signup = params => uni.$u.http.post(`${tall}/users/signup`, params); // uni.$u.api.signup = params => uni.$u.http.post(`${tall}/users/signup`, params);
// 获取图片验证码 // 获取图片验证码
uni.$u.api.getImageCode = () => uni.$u.get(`${tall}/users/code`); uni.$u.api.getImageCode = () => uni.$u.http.get(`${tall}/users/code`);
// 获取短信验证码 // 获取短信验证码
uni.$u.api.getSmsCode = params => uni.$u.get(`${tall}/users/smscode`, params); uni.$u.api.getSmsCode = params => uni.$u.http.get(`${tall}/users/smscode`, params);
// 根据refreshToken重新获取token // 根据refreshToken重新获取token
uni.$u.api.getNewToken = refreshToken => uni.$u.get(`${tall}/users/refreshToken`, { refreshToken }); uni.$u.api.getNewToken = refreshToken => uni.$u.http.get(`${tall}/users/refreshToken`, { refreshToken });
// 根据userId获取token // 根据userId获取token
uni.$u.api.getToken = userId => uni.$u.get(`${tall}/users/userId`, { userId }); uni.$u.api.getToken = userId => uni.$u.get(`${tall}/users/userId`, { userId });
// 绑定手机号 // 绑定手机号

33
components/Upload/Upload.vue

@ -16,21 +16,24 @@ const userId = computed(() => store.getters['user/userId']);
// wbs // wbs
const handleUpload = async cur => { const handleUpload = async cur => {
try { uni.navigateTo({
const res = await uni.$u.api.import(); url: '/pages/business/business'
// WBS })
// // try {
emit('success'); // const res = await uni.$u.api.import();
const { apiUrl } = Config; // // WBS
const defaultwbs = `${apiUrl}/defaultwbs`; // //
res.url && (defaultwbs = res.url); // emit('success');
setTimeout(() => { // const { apiUrl } = Config;
uni.navigateTo({ url: `/pages/project/project?u=${userId.value}&p=${res.id}&pname=${res.pname}&url=${res.url}` }); // const defaultwbs = `${apiUrl}/defaultwbs`;
}, 2000); // res.url && (defaultwbs = res.url);
} catch (error) { // setTimeout(() => {
console.error('error: ', error); // uni.navigateTo({ url: `/pages/project/project?u=${userId.value}&p=${res.id}&pname=${res.pname}&url=${res.url}` });
emit('error', error); // }, 2000);
} // } catch (error) {
// console.error('error: ', error);
// emit('error', error);
// }
}; };
</script> </script>

9
pages.json

@ -1,7 +1,7 @@
{ {
"pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages "pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages
{ {
"path": "pages/init/init", "path": "pages/guide/adv",
"style": { "style": {
"navigationBarText": "TALL", "navigationBarText": "TALL",
"navigationStyle": "custom" "navigationStyle": "custom"
@ -21,6 +21,13 @@
"navigationStyle": "custom" "navigationStyle": "custom"
} }
}, },
{
"path": "pages/business/business",
"style": {
"navigationBarText": "业务列表",
"navigationStyle": "custom"
}
},
{ {
"path": "pages/project/project", "path": "pages/project/project",
"style": { "style": {

54
pages/business/business.vue

@ -0,0 +1,54 @@
<template>
<view class="business-box">
<view class="business-wrap" v-for="(item, index) in 15" :key="index" @click="toUpload">
<view class="name">业务{{item}}</view>
<view class="desc">业务{{item}}</view>
</view>
</view>
</template>
<script setup>
async function toUpload() {
try {
const res = await uni.$u.api.import();
// WBS
//
// emit('success');
uni.$ui.showToast('导入成功,即将打开新项目', 3000);
const { apiUrl } = Config;
const defaultwbs = `${apiUrl}/defaultwbs`;
res.url && (defaultwbs = res.url);
setTimeout(() => {
uni.navigateTo({
url: `/pages/project/project?u=${userId.value}&p=${res.id}&pname=${res.pname}&url=${res.url}`
});
}, 2000);
} catch (error) {
console.error('error: ', error);
// emit('error', error);
uni.$ui.showToast('导入失败', 6000);
}
}
</script>
<style lang="scss" scoped>
.business-box {
padding: 0 16px;
}
.business-wrap {
padding: 10px 20px;
border-bottom: 1px solid #eeeeee;
width: 100%;
box-sizing: border-box;
.name {
line-height: 36px;
}
.desc {
font-size: 12px;
color: #999;
}
}
</style>

2
pages/init/init.vue → pages/guide/adv.vue

@ -1,5 +1,5 @@
<template> <template>
启动 广告
</template> </template>
<script setup> <script setup>

2
store/index.js

@ -11,7 +11,7 @@ const state = {
networkConnected: true, // 网络是否连接 networkConnected: true, // 网络是否连接
forceUseStorage: true, // 强制启用storage forceUseStorage: true, // 强制启用storage
systemInfo: null, // 系统设备信息 systemInfo: null, // 系统设备信息
count: 2, // 后台出错,多次返回错误的token信息导致的死循环,用count来阻止死循环 count: 3, // 后台出错,多次返回错误的token信息导致的死循环,用count来阻止死循环
}; };
const getters = { const getters = {

64
utils/request.js

@ -42,23 +42,18 @@ export function setupHttp(app) {
// 这里对res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到 // 这里对res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到
// 如果配置了originalData为true,请留意这里的返回值 // 如果配置了originalData为true,请留意这里的返回值
if (res.code === 200) { if (res.code === 200) {
if (res.tokenObj.token) { if (res.tokenObj && res.tokenObj.token) {
store.commit('user/setToken', res.tokenObj.token);
storage.setStorageSync('anyringToken', res.tokenObj.token || ''); storage.setStorageSync('anyringToken', res.tokenObj.token || '');
storage.setStorageSync('refreshToken', res.tokenObj.refreshToken || ''); storage.setStorageSync('refreshToken', res.tokenObj.refreshToken || '');
store.commit('user/setToken', res.tokenObj.token);
} }
return res.data; return res.data;
} else if (res.code === 400) { // deviceId为空 } else if (res.code === 400) { // deviceId为空
ui.showToast(res.msg); ui.showToast(res.msg);
return false; return false;
} else if (res.code === 49) { // token过期 } else if (res.code === 49) { // token过期
store.commit('setCount', store.state.count - 1); store.commit('setCount', store.state.count - 1);
return 49;
let refreshToken = storage.getStorageSync('refreshToken');
await store.dispatch('user/getTokenByRefreshToken', refreshToken);
return false;
} else if (res.code === 401) { // refreshToken过期 } else if (res.code === 401) { // refreshToken过期
// 假设201为token失效,这里跳转登录 // 假设201为token失效,这里跳转登录
// ui.showToast('验证失败,请重新登录'); // ui.showToast('验证失败,请重新登录');
@ -82,8 +77,38 @@ export function setupHttp(app) {
} }
}; };
app.config.globalProperties.$u.post = (url, param = {}, header = {}) => { app.config.globalProperties.$u.post = async (url, param = {}, header = {}) => {
return app.config.globalProperties.$u.http.request({ let res = await app.config.globalProperties.$u.http.request({
url,
method: 'POST',
header,
data: {
param
},
});
if (res === 49) {
const refreshToken = storage.getStorageSync('refreshToken');
await store.dispatch('user/getTokenByRefreshToken', refreshToken);
res = await app.config.globalProperties.$u.http.request({
url,
method: 'POST',
header,
data: {
param
},
});
if (res.code === 200) {
store.commit('setCount', 3);
}
return res;
}
return res;
};
app.config.globalProperties.$u.get = async (url, param = {}, header = {}) => {
let res = await app.config.globalProperties.$u.http.request({
url, url,
method: 'POST', method: 'POST',
header, header,
@ -91,5 +116,24 @@ export function setupHttp(app) {
param param
}, },
}); });
if (res === 49) {
const refreshToken = storage.getStorageSync('refreshToken');
await store.dispatch('user/getTokenByRefreshToken', refreshToken);
res = await app.config.globalProperties.$u.http.request({
url,
method: 'POST',
header,
data: {
param
},
});
if (res.code === 200) {
store.commit('setCount', 3);
}
return res;
}
return res;
}; };
} }

Loading…
Cancel
Save