UNPKG

aqsc-mobile-com

Version:

基于uni-ui实现的二次封装

183 lines (181 loc) 4.99 kB
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 的数据读写都将持久化 })