修改菜单问题

This commit is contained in:
浅念
2025-07-14 10:09:10 +08:00
parent 2ad479b006
commit 812e3c4b0c
10 changed files with 170 additions and 37 deletions
+19 -5
View File
@@ -11,23 +11,37 @@ export const menuService = {
async getMenuList(delay = 300): Promise<MenuResponse> {
try {
const userStore = useUserStore()
// 验证用户登录状态
if (!userStore.isLogin) {
throw new Error('用户未登录')
}
// 模拟接口返回的菜单数据
const menuData = userStore.info.menu
if(menuData.length==0){
// 验证菜单数据
if (!menuData || !Array.isArray(menuData) || menuData.length === 0) {
ElMessage.error('暂无系统菜单权限')
return { menuList: [] }
}
const menuData1 = asyncRoutes
// 处理菜单数据
// const menuList1 = menuData1.map((route) => menuDataToRouter(route))
const menuList = menuData.map((route: any) => menuDataToRouter(route))
// console.log(menuList1)
// console.log(menuList)
// 验证处理后的菜单列表
if (!menuList || menuList.length === 0) {
ElMessage.error('菜单数据处理失败')
return { menuList: [] }
}
// 模拟接口延迟
await new Promise((resolve) => setTimeout(resolve, delay))
return { menuList }
} catch (error) {
console.error('获取菜单失败:', error)
throw error instanceof Error ? error : new Error('获取菜单失败')
}
}
+41 -5
View File
@@ -197,7 +197,22 @@ async function registerAndStoreMenu(
*/
function handleMenuError(error: unknown): void {
console.error('菜单处理失败:', error)
useUserStore().logOut()
// 清理所有状态
const userStore = useUserStore()
const menuStore = useMenuStore()
const worktabStore = useWorktabStore()
// 清空菜单和工作台
menuStore.clearMenuList()
worktabStore.clearAll()
// 重置路由注册状态
isRouteRegistered.value = false
// 登出用户
userStore.logOut()
throw error instanceof Error ? error : new Error('获取菜单列表失败,请重新登录')
}
@@ -233,13 +248,34 @@ function isValidMenuList(menuList: AppRouteRecord[]): boolean {
*/
export function resetRouterState(router: Router): void {
isRouteRegistered.value = false
// 清理动态注册的路由
// 清理所有动态注册的路由(不仅仅是带有dynamic标记的)
const routesToRemove: string[] = []
router.getRoutes().forEach((route) => {
if (route.meta?.dynamic) {
router.removeRoute(route.name as string)
// 排除静态路由和登录页面
if (route.name &&
route.name !== 'Login' &&
route.name !== 'Exception404' &&
route.name !== 'Exception500' &&
!route.path.startsWith('/exception/')) {
routesToRemove.push(route.name as string)
}
})
// 移除动态路由
routesToRemove.forEach((routeName) => {
try {
router.removeRoute(routeName)
} catch (error) {
console.warn(`移除路由失败: ${routeName}`, error)
}
})
// 清空菜单数据
const menuStore = useMenuStore()
menuStore.setMenuList([])
menuStore.clearMenuList()
// 清空工作台标签页
const worktabStore = useWorktabStore()
worktabStore.clearAll()
}
+7 -1
View File
@@ -10,11 +10,17 @@ export const useMenuStore = defineStore('menuStore', () => {
const setMenuList = (list: AppRouteRecord[]) => (menuList.value = list)
const setMenuWidth = (width: string) => (menuWidth.value = width)
const clearMenuList = () => {
menuList.value = []
menuWidth.value = ''
}
return {
menuList,
menuWidth,
setMenuList,
setMenuWidth
setMenuWidth,
clearMenuList
}
})
+10 -1
View File
@@ -110,9 +110,18 @@ export const useUserStore = defineStore(
accessToken.value = ''
refreshToken.value = ''
if (refreshTimeout) clearTimeout(refreshTimeout) // 清理定时器
useWorktabStore().opened = []
// 清理工作台标签页
useWorktabStore().clearAll()
// 清理sessionStorage中的用户信息缓存
sessionStorage.removeItem('lastUserInfo')
sessionStorage.removeItem('iframeRoutes')
// 重置路由状态
resetRouterState(router)
// 跳转到登录页
router.push(RoutesAlias.Login)
}
+9 -2
View File
@@ -81,8 +81,15 @@ axiosInstance.interceptors.response.use(
}
},
(error) => {
return Promise.reject(handleError(error))
const { code, msg } = error.response.data
switch (code) {
case ApiStatus.unauthorized:
logOut()
throw new HttpError(msg || $t('httpMsg.unauthorized'), ApiStatus.unauthorized)
default:
throw new HttpError(msg || $t('httpMsg.requestFailed'), code)
}
// return Promise.reject(handleError(error))
}
)
+1 -20
View File
@@ -1,21 +1,2 @@
// ANSI 转义码生成网站 https://patorjk.com/software/taag/#p=display&f=Big&t=ABB%0A
const asciiArt = `
\x1b[32m✨ 你好!欢迎使用 Art Design Pro!
\x1b[0m
\x1b[36m💡 如果您觉得项目对您有帮助,请点击下面的链接为我点个 ★Star 支持一下!祝您使用愉快!
\x1b[0m
\x1b[33m🌟 GitHub: https://github.com/Daymychen/art-design-pro
\x1b[0m
\x1b[31m✨ 技术支持(QQ群): 821834289,如果你有任何问题,请加入QQ群,我们会在第一时间为你解答!
\x1b[0m
\x1b[36m _ _______ _________ ______ ________ ______ _____ ______ ____ _____ _______ _______ ___
\x1b[36m / \\ |_ __ \\ | _ _ | |_ _ \`.|_ __ |.' ____ \\ |_ _|.' ___ ||_ \\|_ _| |_ __ \\|_ __ \\ .' \`.
\x1b[36m / _ \\ | |__) ||_/ | | \\_| | | \`. \\ | |_ \\_|| (___ \\_| | | / .' \\_| | \\ | | | |__) | | |__) | / .-. \\
\x1b[36m / ___ \\ | __ / | | | | | | | _| _ _.____\`. | | | | ____ | |\\ \\| | | ___/ | __ / | | | |
\x1b[36m _/ / \\ \\_ _| | \\ \\_ _| |_ _| |_.' /_| |__/ || \\____) | _| |_\\ \`.___] |_| |_\\ |_ _| |_ _| | \\ \\_\\ \`-' /
\x1b[36m|____| |____||____| |___||_____| |______.'|________| \\______.'|_____|\\\`._____.'|_____|\\____| |_____| |____| |___|\\\`.___.'
\x1b[0m
`
console.log(asciiArt)
console.log('')