Signed-off-by: chy <chy@163.com>
This commit is contained in:
130
src/store/modules/user.ts
Normal file
130
src/store/modules/user.ts
Normal file
@@ -0,0 +1,130 @@
|
||||
import { store } from '../index'
|
||||
import { defineStore } from 'pinia'
|
||||
import { getAccessToken, removeToken } from '@/utils/auth'
|
||||
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
||||
import { getInfo, loginOut } from '@/api/login'
|
||||
|
||||
const { wsCache } = useCache()
|
||||
|
||||
interface UserVO {
|
||||
id: number
|
||||
avatar: string
|
||||
nickname: string
|
||||
deptId: number
|
||||
loginDeptId?: number
|
||||
loginRoleId?: number
|
||||
supAdmin?: boolean
|
||||
tenantAdmin?: boolean
|
||||
supAdminToken?: boolean
|
||||
}
|
||||
|
||||
interface DicVO {
|
||||
id: number
|
||||
name: string
|
||||
}
|
||||
interface DeptVO {
|
||||
deptId: number
|
||||
deptName: string
|
||||
dutyInfoList: DicVO[]
|
||||
positionInfoList: DicVO[]
|
||||
postInfoList: DicVO[]
|
||||
roleInfoList: DicVO[]
|
||||
}
|
||||
|
||||
interface UserInfoVO {
|
||||
permissions: object
|
||||
lideeYunjipermissions: object
|
||||
roles: string[]
|
||||
isSetUser: boolean
|
||||
user: UserVO
|
||||
deptInfo: DeptVO[]
|
||||
}
|
||||
|
||||
export const useUserStore = defineStore('admin-user', {
|
||||
state: (): UserInfoVO => ({
|
||||
permissions: {},
|
||||
lideeYunjipermissions: {},
|
||||
roles: [],
|
||||
isSetUser: false,
|
||||
user: {
|
||||
id: 0,
|
||||
avatar: '',
|
||||
nickname: '',
|
||||
deptId: 0,
|
||||
},
|
||||
deptInfo: [],
|
||||
}),
|
||||
getters: {
|
||||
getPermissions(): object {
|
||||
return this.permissions
|
||||
},
|
||||
getLideeYunjipermissions(): object {
|
||||
return this.lideeYunjipermissions
|
||||
},
|
||||
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.lideeYunjipermissions = userInfo.lideeYunjipermissions
|
||||
this.roles = userInfo.roles
|
||||
this.user = userInfo.user
|
||||
this.deptInfo = userInfo.deptInfoList
|
||||
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()
|
||||
wsCache.clear()
|
||||
this.resetState()
|
||||
},
|
||||
resetState() {
|
||||
this.permissions = {}
|
||||
this.lideeYunjipermissions = {}
|
||||
this.roles = []
|
||||
this.isSetUser = false
|
||||
this.user = {
|
||||
id: 0,
|
||||
avatar: '',
|
||||
nickname: '',
|
||||
deptId: 0
|
||||
}
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
export const useUserStoreWithOut = () => {
|
||||
return useUserStore(store)
|
||||
}
|
||||
Reference in New Issue
Block a user