瀏覽代碼

feat(miniprogram): load menu-codes into user store.

Cache menuAll and menuCodes from /web/auth/menu-codes for workbench filtering.

Co-authored-by: Cursor <cursoragent@cursor.com>
wuzilong 1 月之前
父節點
當前提交
d3de3f5c45
共有 1 個文件被更改,包括 37 次插入 和 1 次删除
  1. 37 1
      miniprogram/stores/user.js

+ 37 - 1
miniprogram/stores/user.js

@@ -9,6 +9,8 @@ export const useUserStore = defineStore('user', () => {
   const refreshToken = ref('')
   const userInfo = ref(null)
   const isLoading = ref(false)
+  const menuAll = ref(false)
+  const menuCodes = ref([])
 
   function normalizeUserInfo(raw) {
     if (!raw || typeof raw !== 'object') return raw || null
@@ -68,6 +70,34 @@ export const useUserStore = defineStore('user', () => {
     uni.setStorageSync(USER_INFO_KEY, userInfo.value)
   }
 
+  async function fetchMenuCodes() {
+    if (!token.value || !String(token.value).trim()) {
+      menuAll.value = false
+      menuCodes.value = []
+      return
+    }
+    try {
+      const res = await request({
+        url: AUTH_API.MENU_CODES,
+        method: 'GET'
+      })
+      const result = parseResponseJson(res)
+      if (!result || result.code !== 200 || !result.data) {
+        menuAll.value = false
+        menuCodes.value = []
+        return
+      }
+      const data = result.data
+      menuAll.value = !!(data.all || data.isSuperAdmin)
+      menuCodes.value = Array.isArray(data.menuCodes)
+        ? data.menuCodes.map((c) => String(c || '').trim()).filter(Boolean)
+        : []
+    } catch {
+      menuAll.value = false
+      menuCodes.value = []
+    }
+  }
+
   async function login(params) {
     isLoading.value = true
     try {
@@ -84,6 +114,7 @@ export const useUserStore = defineStore('user', () => {
           refreshToken: result.data.refreshToken,
           userInfo: result.data.userInfo
         })
+        await fetchMenuCodes()
         return true
       }
       uni.showToast({ title: (result && result.message) || '登录失败', icon: 'none' })
@@ -106,6 +137,8 @@ export const useUserStore = defineStore('user', () => {
     uni.removeStorageSync(TOKEN_KEY)
     uni.removeStorageSync(REFRESH_TOKEN_KEY)
     uni.removeStorageSync(USER_INFO_KEY)
+    menuAll.value = false
+    menuCodes.value = []
   }
 
   async function logout() {
@@ -158,6 +191,8 @@ export const useUserStore = defineStore('user', () => {
     refreshToken,
     userInfo,
     isLoading,
+    menuAll,
+    menuCodes,
     isLoggedIn,
     userRole,
     homePath,
@@ -167,6 +202,7 @@ export const useUserStore = defineStore('user', () => {
     clearLoginInfo,
     navigateToHome,
     updateUserInfo,
-    refreshUserInfo
+    refreshUserInfo,
+    fetchMenuCodes
   }
 })