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