接口调试、全局请求参数、数据状态缓存 处理

This commit is contained in:
aihe 2024-02-28 17:40:22 +08:00
parent 32bf71d7fe
commit 873ecb949b
14 changed files with 167 additions and 25 deletions

View File

@ -6,12 +6,18 @@
version version
} from './package.json' } from './package.json'
import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update'; import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update';
import { getSessionXToken } from "@/session"
import { USERKEY } from "@/store/actionKey"
export default { export default {
globalData: { globalData: {
}, },
onLaunch: function() { onLaunch: function() {
const xToken = getSessionXToken()
// 登录认证
this.$store.dispatch(USERKEY.GETUSERINFO)
// #ifdef H5 // #ifdef H5
console.log( console.log(
`%c hello uniapp %c v${version} `, `%c hello uniapp %c v${version} `,

7
common/api/index.js Normal file
View File

@ -0,0 +1,7 @@
import apiUrls, { host } from "./url"
export * from "./user"
export {
apiUrls,
host
}

View File

@ -5,3 +5,4 @@ export default {
loginByApp: `/loginByApp`, loginByApp: `/loginByApp`,
getInfoByApp: `/getInfoByApp` getInfoByApp: `/getInfoByApp`
} }

10
common/api/user.js Normal file
View File

@ -0,0 +1,10 @@
import { corePost } from '@/common/request'
import url from "./url"
export const loginByApp = (data = {})=> {
return corePost(url.loginByApp, data)
}
export const getInfoByApp = (data = {})=> {
return corePost(url.getInfoByApp, data, {}, 'GET')
}

View File

@ -7,9 +7,10 @@ import {
import { import {
host host
} from "./api" } from "./api"
const corePostBase = (url, reqParams, options = {}) => { import { getSessionXToken } from "@/session"
const corePostBase = (url, reqParams, options = {}, methodType = "POST") => {
const xToken = getSessionXToken()
const xToken = ""
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
uni.request({ uni.request({
url: `${host}${url}`, url: `${host}${url}`,
@ -18,7 +19,7 @@ const corePostBase = (url, reqParams, options = {}) => {
"X-Token": xToken, "X-Token": xToken,
...options ...options
}, },
method: 'POST', method: methodType,
success: (res) => { success: (res) => {
resolve(res) resolve(res)
}, },
@ -31,14 +32,14 @@ const corePostBase = (url, reqParams, options = {}) => {
const BaseParam = {} const BaseParam = {}
// 请求处理 // 请求处理
let corePost = function(url, params = {}, options = {}) { let corePost = function(url, params = {}, options = {}, methodType) {
// 统一把emo转unicode // 统一把emo转unicode
// emoUnicode(params) // emoUnicode(params)
const reqParams = { const reqParams = {
...BaseParam, ...BaseParam,
...params, ...params,
} }
return dealRequest(corePostBase(url, reqParams, options)).then(res => { return dealRequest(corePostBase(url, reqParams, options, methodType)).then(res => {
// 解析unicode // 解析unicode
// emoUnicode(res, 2) // emoUnicode(res, 2)
return res return res

View File

@ -62,6 +62,10 @@ const showLoading = ()=> {
}); });
} }
const hideLoading = ()=> {
uni.hideLoading();
}
const scanCode = ()=> { const scanCode = ()=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
uni.scanCode({ uni.scanCode({
@ -106,6 +110,7 @@ export {
setClipboardData, setClipboardData,
confirmModal, confirmModal,
showLoading, showLoading,
hideLoading,
showToast, showToast,
scanCode, scanCode,
makePhoneCall, makePhoneCall,

View File

@ -1,5 +1,5 @@
import { handleResponse } from './manageServer.js' import { handleResponse } from './manageServer.js'
import apiConfig from './api.js' //接口配置 import { apiUrls } from './api' //接口配置
import { showToast } from "./untool" import { showToast } from "./untool"
@ -33,7 +33,7 @@ const chooseFile = function (action = 'chooseImage', opt = {}) {
const doRequest = function (file) { const doRequest = function (file) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
uni.uploadFile({ uni.uploadFile({
url: `${apiConfig.uploadFile}`, url: `${apiUrls.uploadFile}`,
fileType: 'image', // TODO fileType: 'image', // TODO
filePath: file, filePath: file,
name: 'file', name: 'file',

View File

@ -42,7 +42,9 @@
<script> <script>
import getCdnUrl from "@/common/getCdnUrl" import getCdnUrl from "@/common/getCdnUrl"
import { corePost } from "@/common/request" import { corePost } from "@/common/request"
import apiUrl from "@/common/api" import { USERKEY } from "@/store/actionKey"
import { goto, showLoading, hideLoading } from "@/common/untool"
export default { export default {
props: { props: {
}, },
@ -66,10 +68,14 @@
const { remberPassport, submitParams } = this const { remberPassport, submitParams } = this
if(remberPassport[0]) { if(remberPassport[0]) {
} }
const res1 = await corePost(apiUrl.loginByApp, submitParams) showLoading()
if(res1.token) { try{
const res2 = await corePost(apiUrl.getInfoByApp, {}) await this.$store.dispatch(USERKEY.LOGIN, submitParams)
await this.$store.dispatch(USERKEY.GETUSERINFO)
goto("tabBar/home/home")
}catch(e){
} }
hideLoading()
} }
} }
} }

View File

@ -9,14 +9,14 @@
<view class="com-jianju" style="margin-top: 10rpx;"> <view class="com-jianju" style="margin-top: 10rpx;">
<u-row align="center" > <u-row align="center" >
<u-col @click="goto(`login/login`)" span="11"> <u-col @click="goto(`tabBar/mine/mine`)" span="11">
<u-row> <u-row>
<u-avatar size="66"></u-avatar> <u-avatar size="66"></u-avatar>
<u-text margin="0 0 0 16rpx" text="快递专员01" color="#fff" size="24"></u-text> <u-text margin="0 0 0 16rpx" :text="userInfo.nickName" color="#fff" size="24"></u-text>
</u-row> </u-row>
</u-col> </u-col>
<u-col span="1" align="end"> <u-col span="1" align="end">
<image style="height: 36rpx;width: 44rpx;" :src="getCdnUrl(`home/saoma.png`)"/> <image style="height: 36rpx;width: 44rpx;" :src="userInfo.avatar"/>
</u-col> </u-col>
</u-row> </u-row>
</view> </view>
@ -94,6 +94,11 @@
import getCdnUrl from "@/common/getCdnUrl" import getCdnUrl from "@/common/getCdnUrl"
import { goto } from "@/common/untool" import { goto } from "@/common/untool"
export default { export default {
computed: {
userInfo() {
return this.$store.getters.userInfo
}
},
props: { props: {
// hasLeftWin: { // hasLeftWin: {
// type: Boolean // type: Boolean
@ -132,6 +137,9 @@
// title: '', // title: '',
// path: 'TODO' // path: 'TODO'
} }
},
onLoad() {
}, },
methods: { methods: {
getCdnUrl, getCdnUrl,

View File

@ -12,15 +12,15 @@
<u-row align="center" justify="between"> <u-row align="center" justify="between">
<view> <view>
<u-row> <u-row>
<u-avatar size="120"></u-avatar> <u-avatar size="120" :src="userInfo.avatar"></u-avatar>
<view class="pl-30"> <view class="pl-30">
<u-row> <u-row>
<u-text text="张三" color="#fff" size="32" bold="true"></u-text> <u-text :text="userInfo.nickName" color="#fff" size="32" bold="true"></u-text>
<view class="ml-20 clr-wht font-24 pos-rlt" style="padding: 8rpx 12rpx;">南京网点 <view class="ml-20 clr-wht font-24 pos-rlt" style="padding: 8rpx 12rpx;">南京网点
<view class="pos-abt-all" style="z-index: 0;background: #FFFFFF;opacity: 0.2;border-radius: 20rpx;"></view> <view class="pos-abt-all" style="z-index: 0;background: #FFFFFF;opacity: 0.2;border-radius: 20rpx;"></view>
</view> </view>
</u-row> </u-row>
<view class="mt-20 clr-wht font-24">13712345678</view> <view class="mt-20 clr-wht font-24">{{userInfo.phonenumber}}</view>
</view> </view>
</u-row> </u-row>
</view> </view>
@ -107,7 +107,7 @@
</view> </view>
<view class="pt-40 pb-40"> <view class="pt-40 pb-40">
<u-button @click="goto(`login/login`)" type="primary" size="large" shape="circle" <u-button @click="handleUnlogin" type="primary" size="large" shape="circle"
custom-style="height:86rpx;font-size: 32rpx;border-radius: 20rpx;" custom-style="height:86rpx;font-size: 32rpx;border-radius: 20rpx;"
>退出登录</u-button> >退出登录</u-button>
</view> </view>
@ -119,7 +119,13 @@
<script> <script>
import getCdnUrl from "@/common/getCdnUrl" import getCdnUrl from "@/common/getCdnUrl"
import { goto } from "@/common/untool" import { goto } from "@/common/untool"
import { USERKEY } from "@/store/actionKey"
export default { export default {
computed: {
userInfo() {
return this.$store.getters.userInfo
}
},
props: { props: {
// hasLeftWin: { // hasLeftWin: {
// type: Boolean // type: Boolean
@ -146,6 +152,10 @@
methods: { methods: {
getCdnUrl, getCdnUrl,
goto, goto,
async handleUnlogin() {
await this.$store.dispatch(USERKEY.LOGOUT)
goto(`login/login`)
}
} }
} }
</script> </script>

View File

@ -5,13 +5,13 @@ export const setSessionXToken = (val = '')=> {
} }
export const getSessionXToken = ()=> { export const getSessionXToken = ()=> {
uni.getStorageSync(XTOKEN_KEY) return uni.getStorageSync(XTOKEN_KEY) || ''
} }
export const setSessionUserInfo = (val = {})=> { export const setSessionUserInfo = (val = {})=> {
uni.setStorageSync(USERINFO_KEY, val) uni.setStorageSync(USERINFO_KEY, val)
} }
export const getSessionXToken = ()=> { export const getSessionUserInfo = ()=> {
uni.getStorageSync(USERINFO_KEY,) return uni.getStorageSync(USERINFO_KEY) || {}
} }

5
store/actionKey.js Normal file
View File

@ -0,0 +1,5 @@
export const USERKEY = {
LOGIN: "LOGIN",
GETUSERINFO: "GETUSERINFO",
LOGOUT: "LOGOUT",
}

View File

@ -74,8 +74,8 @@ const store = createStore({
} }
}, },
getters: { getters: {
currentColor(state) { userInfo: (state)=> {
return state.colorList[state.colorIndex] return state.user?.info || {}
} }
}, },
actions: { actions: {

83
store/modules/user.js Normal file
View File

@ -0,0 +1,83 @@
import { USERKEY } from "../actionKey"
import {
setSessionXToken,
getSessionXToken,
setSessionUserInfo,
getSessionUserInfo
} from "@/session"
import { loginByApp, getInfoByApp } from "@/common/api"
import { goto } from "@/common/untool"
export default {
state: {
info: getSessionUserInfo(),
token: getSessionXToken(),
},
mutations: {
[USERKEY.LOGIN](state, provider) {
const {
token,
info
} = provider
state.token = provider
},
[USERKEY.GETUSERINFO](state, provider) {
state.info = provider
},
[USERKEY.LOGOUT](state) {
state.token = '';
state.info = {}
},
},
getters: {
// packInfo(state) {
// return state.user
// }
},
actions: {
async [USERKEY.LOGIN]({
dispatch,
commit,
state,
rootState
}, options) {
let token = state.token
const resLgn = await loginByApp(options)
token = resLgn.token
setSessionXToken(token)
commit(USERKEY.LOGIN, token)
},
async [USERKEY.LOGOUT]({
dispatch,
commit,
state,
rootState
}, options) {
setSessionUserInfo({})
setSessionXToken('')
commit(USERKEY.LOGOUT)
},
async [USERKEY.GETUSERINFO]({
dispatch,
commit,
state,
rootState
}, options) {
if(!state.token) {
goto("login/login", 1)
throw new Error('缺少token')
}
const resInfo = await getInfoByApp()
const info = {
...resInfo.user,
roles: resInfo.user,
permissions: resInfo.permissions
}
commit(USERKEY.GETUSERINFO, info)
},
}
}