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>
This commit is contained in:
1 parent
106ace1ea9
commit
d3de3f5c45
1 file changed
+37
-1
@@ -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
|
||||
}
|
||||
})
|
||||
Reference in new issue
Block a user