mirror of
https://gitee.com/niucloud-team/niucloud-admin.git
synced 2025-12-14 19:52:48 +00:00
113 lines
4.0 KiB
TypeScript
113 lines
4.0 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { getToken, setToken, removeToken, getAppType } from '@/utils/common'
|
|
import { login, getAuthMenus } from '@/app/api/auth'
|
|
import storage from '@/utils/storage'
|
|
import router from '@/router'
|
|
import { getApply } from '@/app/api/apply'
|
|
import { formatRouters, findFirstValidRoute } from '@/router/routers'
|
|
|
|
interface User {
|
|
token: string,
|
|
userInfo: object,
|
|
routers: any[],
|
|
addonIndexRoute: Record<string, symbol>,
|
|
rules: any[],
|
|
appMenuList: any[],
|
|
globalAppKey: string
|
|
}
|
|
|
|
const useUserStore = defineStore('user', {
|
|
state: (): User => {
|
|
return {
|
|
token: getToken() || '',
|
|
userInfo: storage.get('userinfo') || {},
|
|
routers: [],
|
|
addonIndexRoute: {},
|
|
rules: [],
|
|
globalAppKey: '',
|
|
appMenuList: storage.get('appMenuList' + (storage.get('userinfo') ? storage.get('userinfo').username : '')) || []
|
|
}
|
|
},
|
|
actions: {
|
|
login(form: object) {
|
|
return new Promise((resolve, reject) => {
|
|
login(form)
|
|
.then((res) => {
|
|
this.token = res.data.token
|
|
this.userInfo = res.data.userinfo
|
|
setToken(res.data.token)
|
|
storage.set({ key: 'userinfo', data: res.data.userinfo })
|
|
resolve(res)
|
|
})
|
|
.catch((error) => {
|
|
reject(error)
|
|
})
|
|
})
|
|
},
|
|
clearRouters() {
|
|
this.routers = []
|
|
},
|
|
logout() {
|
|
this.token = ''
|
|
this.userInfo = {}
|
|
removeToken()
|
|
storage.remove(['userinfo'])
|
|
this.routers = []
|
|
router.push('/login')
|
|
},
|
|
getAuthMenus() {
|
|
return new Promise((resolve, reject) => {
|
|
getAuthMenus()
|
|
.then((res) => {
|
|
this.routers = formatRouters(res.data)
|
|
// 获取插件的首个菜单
|
|
this.routers.forEach((item, index) => {
|
|
if (item.meta.app !== '') {
|
|
if (item.children && item.children.length) {
|
|
this.addonIndexRoute[item.meta.app] = findFirstValidRoute(item.children)
|
|
} else {
|
|
this.addonIndexRoute[item.meta.app] = item.name
|
|
}
|
|
}
|
|
})
|
|
resolve(res)
|
|
})
|
|
.catch((error) => {
|
|
reject(error)
|
|
})
|
|
})
|
|
},
|
|
setAppMenuList(data: any) {
|
|
this.appMenuList = data
|
|
storage.set({ key: 'appMenuList' + (this.userInfo.username ? this.userInfo.username : ''), data })
|
|
},
|
|
getAppList() {
|
|
let applyList = [];
|
|
let applyTypeList = [];
|
|
let appKey = storage.get('menuAppStorage');
|
|
return new Promise((resolve, reject) => {
|
|
getApply()
|
|
.then((res) => {
|
|
applyList = applyList.concat(res.data);
|
|
applyList.forEach((item, index) => {
|
|
if (item.type == 'app') { applyTypeList.push(item.key) }
|
|
});
|
|
// 用于插件的卸载或安装
|
|
if (!applyList.length) {
|
|
this.globalAppKey = '';
|
|
}
|
|
if (applyList.length && !appKey) {
|
|
this.globalAppKey = applyTypeList[0];
|
|
}
|
|
resolve(res)
|
|
})
|
|
.catch((error) => {
|
|
reject(error)
|
|
})
|
|
})
|
|
}
|
|
}
|
|
})
|
|
|
|
export default useUserStore
|