123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import { store } from '@/store'
- import { defineStore } from 'pinia'
- import { getAccessToken, removeToken } from '@/utils/auth'
- import { CACHE_KEY, useCache, deleteUserCache } from '@/hooks/web/useCache'
- import { getInfo, loginOut } from '@/api/login'
- const { wsCache } = useCache()
- interface UserVO {
- id: number
- avatar: string
- nickname: string
- deptId: number
- }
- interface UserInfoVO {
- // USER 缓存
- permissions: string[]
- roles: string[]
- isSetUser: boolean
- user: UserVO
- }
- export const useUserStore = defineStore('admin-user', {
- state: (): UserInfoVO => ({
- permissions: [],
- roles: [],
- isSetUser: false,
- user: {
- id: 0,
- avatar: '',
- nickname: '',
- deptId: 0
- }
- }),
- getters: {
- getPermissions(): string[] {
- return this.permissions
- },
- getRoles(): string[] {
- return this.roles
- },
- getIsSetUser(): boolean {
- return this.isSetUser
- },
- getUser(): UserVO {
- return this.user
- }
- },
- actions: {
- async setUserInfoAction() {
- if (!getAccessToken()) {
- this.resetState()
- return null
- }
- let userInfo = wsCache.get(CACHE_KEY.USER)
- if (!userInfo) {
- userInfo = await getInfo()
- }
- this.permissions = userInfo.permissions
- this.roles = userInfo.roles
- this.user = userInfo.user
- this.isSetUser = true
- wsCache.set(CACHE_KEY.USER, userInfo)
- wsCache.set(CACHE_KEY.ROLE_ROUTERS, userInfo.menus)
- },
- async setUserAvatarAction(avatar: string) {
- const userInfo = wsCache.get(CACHE_KEY.USER)
- // NOTE: 是否需要像`setUserInfoAction`一样判断`userInfo != null`
- this.user.avatar = avatar
- userInfo.user.avatar = avatar
- wsCache.set(CACHE_KEY.USER, userInfo)
- },
- async setUserNicknameAction(nickname: string) {
- const userInfo = wsCache.get(CACHE_KEY.USER)
- // NOTE: 是否需要像`setUserInfoAction`一样判断`userInfo != null`
- this.user.nickname = nickname
- userInfo.user.nickname = nickname
- wsCache.set(CACHE_KEY.USER, userInfo)
- },
- async loginOut() {
- await loginOut()
- removeToken()
- deleteUserCache() // 删除用户缓存
- this.resetState()
- },
- resetState() {
- this.permissions = []
- this.roles = []
- this.isSetUser = false
- this.user = {
- id: 0,
- avatar: '',
- nickname: '',
- deptId: 0
- }
- }
- }
- })
- export const useUserStoreWithOut = () => {
- return useUserStore(store)
- }
|