沙钢智慧能源系统前端代码
dengzedong
2024-12-06 d0db810c9b1c67b8eed03c7f7be6eb4a34a8dbc7
提交 | 用户 | 时间
314507 1 import { store } from '@/store'
H 2 import { defineStore } from 'pinia'
3 import { getAccessToken, removeToken } from '@/utils/auth'
f5c803 4 import {
H 5   CACHE_KEY,
6   useCache,
7   deleteUserCache,
8   useSessionCache,
9   deleteUserSessionCache
10 } from '@/hooks/web/useCache'
11 import {getAppInfo, getInfo, loginOut} from '@/api/login'
12 import * as AppApi from '@/api/system/app'
314507 13
H 14 const { wsCache } = useCache()
f5c803 15 const { wsSessionCache } = useSessionCache()
314507 16
H 17 interface UserVO {
18   id: number
19   avatar: string
20   nickname: string
21   deptId: number
22 }
23
24 interface UserInfoVO {
25   // USER 缓存
26   permissions: string[]
27   roles: string[]
28   isSetUser: boolean
29   user: UserVO
30 }
31
32 export const useUserStore = defineStore('admin-user', {
33   state: (): UserInfoVO => ({
34     permissions: [],
35     roles: [],
36     isSetUser: false,
37     user: {
38       id: 0,
39       avatar: '',
40       nickname: '',
41       deptId: 0
42     }
43   }),
44   getters: {
45     getPermissions(): string[] {
46       return this.permissions
47     },
48     getRoles(): string[] {
49       return this.roles
50     },
51     getIsSetUser(): boolean {
52       return this.isSetUser
53     },
54     getUser(): UserVO {
55       return this.user
56     }
57   },
58   actions: {
59     async setUserInfoAction() {
60       if (!getAccessToken()) {
61         this.resetState()
62         return null
63       }
f5c803 64       const userInfo = await getInfo()
H 65       const appInfo = await getAppInfo()
d0db81 66       this.permissions = userInfo.permissions.concat(appInfo.permissions)
D 67       userInfo.permissions = userInfo.permissions.concat(appInfo.permissions)
314507 68       this.roles = userInfo.roles
H 69       this.user = userInfo.user
70       this.isSetUser = true
71       wsCache.set(CACHE_KEY.USER, userInfo)
f5c803 72       //如果localStorage中有应用code,说明是从平台点击应用跳转过来
H 73       const appId = localStorage.getItem(import.meta.env.VITE_APP_CODE)
74       if(appId) {
75         const data = await AppApi.getAppMenuList(appId)
76         wsSessionCache.set(CACHE_KEY.ROLE_ROUTERS, data)
77       } else {
78         wsSessionCache.set(CACHE_KEY.ROLE_ROUTERS, appInfo.menus)
79       }
314507 80     },
H 81     async setUserAvatarAction(avatar: string) {
82       const userInfo = wsCache.get(CACHE_KEY.USER)
83       // NOTE: 是否需要像`setUserInfoAction`一样判断`userInfo != null`
84       this.user.avatar = avatar
85       userInfo.user.avatar = avatar
86       wsCache.set(CACHE_KEY.USER, userInfo)
87     },
88     async setUserNicknameAction(nickname: string) {
89       const userInfo = wsCache.get(CACHE_KEY.USER)
90       // NOTE: 是否需要像`setUserInfoAction`一样判断`userInfo != null`
91       this.user.nickname = nickname
92       userInfo.user.nickname = nickname
93       wsCache.set(CACHE_KEY.USER, userInfo)
94     },
95     async loginOut() {
96       await loginOut()
97       removeToken()
98       deleteUserCache() // 删除用户缓存
f5c803 99       deleteUserSessionCache()
H 100       localStorage.clear()
314507 101       this.resetState()
H 102     },
103     resetState() {
104       this.permissions = []
105       this.roles = []
106       this.isSetUser = false
107       this.user = {
108         id: 0,
109         avatar: '',
110         nickname: '',
111         deptId: 0
112       }
113     }
114   }
115 })
116
117 export const useUserStoreWithOut = () => {
118   return useUserStore(store)
119 }