From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/store/modules/user.ts | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 108 insertions(+), 0 deletions(-)
diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts
new file mode 100644
index 0000000..aea2eda
--- /dev/null
+++ b/src/store/modules/user.ts
@@ -0,0 +1,108 @@
+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: Set<string>
+ roles: string[]
+ isSetUser: boolean
+ user: UserVO
+}
+
+export const useUserStore = defineStore('admin-user', {
+ state: (): UserInfoVO => ({
+ permissions: new Set<string>(),
+ roles: [],
+ isSetUser: false,
+ user: {
+ id: 0,
+ avatar: '',
+ nickname: '',
+ deptId: 0
+ }
+ }),
+ getters: {
+ getPermissions(): Set<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()
+ } else {
+ // 鐗规畩锛氬湪鏈夌紦瀛樼殑鎯呭喌涓嬶紝杩涜鍔犺浇銆備絾鏄嵆浣垮姞杞藉け璐ワ紝涔熶笉褰卞搷鍚庣画鐨勬搷浣滐紝淇濊瘉鍙互杩涘叆绯荤粺
+ try {
+ userInfo = await getInfo()
+ } catch (error) {}
+ }
+ this.permissions = new Set(userInfo.permissions || []) // 鍏滃簳涓� [] https://t.zsxq.com/xCJew
+ 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 = new Set<string>()
+ this.roles = []
+ this.isSetUser = false
+ this.user = {
+ id: 0,
+ avatar: '',
+ nickname: '',
+ deptId: 0
+ }
+ }
+ }
+})
+
+export const useUserStoreWithOut = () => {
+ return useUserStore(store)
+}
--
Gitblit v1.8.0