aqsc-mobile-com
Version:
基于uni-ui实现的二次封装
183 lines (181 loc) • 4.99 kB
JavaScript
import { defineStore } from 'pinia'
import {
loginApi,
autoLoginApi,
getUserInfoApi,
getUserPermissionApi,
getUserMenuApi,
} from '@/api/login'
export const useUserStore = defineStore('user', {
state: () => {
return {
token: '', // 请求token
userInfo: {}, // 用户信息
permission: [], // 权限列表
menu: [], // 路由菜单
}
},
actions: {
setToken(val) {
this.token = val
uni.setStorageSync('token', val)
},
setUserInfo(val) {
this.userInfo = val
uni.setStorageSync('userid', val.code)
},
setPermission(val) {
this.permission = val
},
setMenu(val) {
this.menu = val
},
setUserName(val) {
this.userInfo.name = val
},
clearProfile() {
this.token = ''
this.userInfo = {}
this.permission = []
this.menu = []
},
login(formData) {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
try {
await this.getToken(formData)
await this.getUserInfo()
await this.getPermission()
await this.getMenu()
resolve()
} catch (error) {
reject(error)
}
})
},
loginByToken(token) {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
try {
console.log(token)
this.setToken(token)
await this.getUserInfo()
await this.getPermission()
await this.getMenu()
resolve()
} catch (error) {
reject(error)
uni.reLaunch({ url: '/pages/main/login/404' })
}
})
},
autoLogin(data) {
// eslint-disable-next-line no-async-promise-executor
return new Promise((resolve, reject) => {
try {
const back = this.getAutoToken(data)
resolve(back)
} catch (err) {
uni.reLaunch({ url: '/pages/main/login/404' }) // 获取token异常,直接跳转单独错误页面
}
})
},
// 重新获取用户信息,角色权限菜单信息
freshUserInfo() {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
try {
await this.getUserInfo()
await this.getPermission()
await this.getMenu()
resolve()
} catch (error) {
reject(error)
uni.reLaunch({ url: '/pages/main/login/404' }) // 重新获取用户信息,角色权限菜单信息异常,直接跳转单独错误页面
}
})
},
// 根据用户ID获取token
freshToken(userid) {
return new Promise((resolve, reject) => {
try {
this.getAutoToken({ userid: userid })
resolve()
} catch (error) {
reject(error)
}
})
},
logout() {
return new Promise((resolve, reject) => {
this.clearProfile()
resolve()
})
},
getToken(formData) {
return new Promise((resolve, reject) => {
loginApi(formData)
.then((res) => {
this.setToken(res.id_token)
resolve()
})
.catch((error) => {
reject(error)
})
})
},
// ihn+根据code获取用户及token
getAutoToken(data) {
return new Promise((resolve, reject) => {
autoLoginApi(data)
.then(async (res) => {
const data = res.data
this.setToken(data.id_token)
uni.setStorageSync('userid', data.userid)
uni.setStorageSync('failure_time', new Date().getTime() + 1000 * 60 * 30)
resolve(data)
})
.catch((error) => {
reject(error)
})
})
},
getUserInfo() {
return new Promise((resolve, reject) => {
getUserInfoApi()
.then((res) => {
this.setUserInfo(res.dataset.datas[0])
resolve()
})
.catch((error) => {
reject(error)
})
})
},
getPermission() {
return new Promise((resolve, reject) => {
getUserPermissionApi()
.then((res) => {
this.setPermission(res.vars.data)
resolve()
})
.catch((error) => {
reject(error)
})
})
},
getMenu() {
return new Promise((resolve, reject) => {
getUserMenuApi()
.then((res) => {
this.setMenu(res.dataset.datas)
resolve()
})
.catch((error) => {
reject(error)
})
})
},
},
unistorage: true, // 开启后对 state 的数据读写都将持久化
})