沙钢智慧能源系统前端代码
houzhongjian
2024-10-09 314507f8ddadd9c66e98d260c3b2a5dad1a04015
提交 | 用户 | 时间
314507 1 import { store } from '@/store'
H 2 import { defineStore } from 'pinia'
3 import { getAccessToken, removeToken } from '@/utils/auth'
4 import { CACHE_KEY, useCache, deleteUserCache } from '@/hooks/web/useCache'
5 import { getInfo, loginOut } from '@/api/login'
6
7 const { wsCache } = useCache()
8
9 interface UserVO {
10   id: number
11   avatar: string
12   nickname: string
13   deptId: number
14 }
15
16 interface UserInfoVO {
17   // USER 缓存
18   permissions: string[]
19   roles: string[]
20   isSetUser: boolean
21   user: UserVO
22 }
23
24 export const useUserStore = defineStore('admin-user', {
25   state: (): UserInfoVO => ({
26     permissions: [],
27     roles: [],
28     isSetUser: false,
29     user: {
30       id: 0,
31       avatar: '',
32       nickname: '',
33       deptId: 0
34     }
35   }),
36   getters: {
37     getPermissions(): string[] {
38       return this.permissions
39     },
40     getRoles(): string[] {
41       return this.roles
42     },
43     getIsSetUser(): boolean {
44       return this.isSetUser
45     },
46     getUser(): UserVO {
47       return this.user
48     }
49   },
50   actions: {
51     async setUserInfoAction() {
52       if (!getAccessToken()) {
53         this.resetState()
54         return null
55       }
56       let userInfo = wsCache.get(CACHE_KEY.USER)
57       if (!userInfo) {
58         userInfo = await getInfo()
59       }
60       this.permissions = userInfo.permissions
61       this.roles = userInfo.roles
62       this.user = userInfo.user
63       this.isSetUser = true
64       wsCache.set(CACHE_KEY.USER, userInfo)
65       wsCache.set(CACHE_KEY.ROLE_ROUTERS, userInfo.menus)
66     },
67     async setUserAvatarAction(avatar: string) {
68       const userInfo = wsCache.get(CACHE_KEY.USER)
69       // NOTE: 是否需要像`setUserInfoAction`一样判断`userInfo != null`
70       this.user.avatar = avatar
71       userInfo.user.avatar = avatar
72       wsCache.set(CACHE_KEY.USER, userInfo)
73     },
74     async setUserNicknameAction(nickname: string) {
75       const userInfo = wsCache.get(CACHE_KEY.USER)
76       // NOTE: 是否需要像`setUserInfoAction`一样判断`userInfo != null`
77       this.user.nickname = nickname
78       userInfo.user.nickname = nickname
79       wsCache.set(CACHE_KEY.USER, userInfo)
80     },
81     async loginOut() {
82       await loginOut()
83       removeToken()
84       deleteUserCache() // 删除用户缓存
85       this.resetState()
86     },
87     resetState() {
88       this.permissions = []
89       this.roles = []
90       this.isSetUser = false
91       this.user = {
92         id: 0,
93         avatar: '',
94         nickname: '',
95         deptId: 0
96       }
97     }
98   }
99 })
100
101 export const useUserStoreWithOut = () => {
102   return useUserStore(store)
103 }