修改菜单逻辑.

This commit is contained in:
lijiahang
2023-08-02 17:08:40 +08:00
parent 4322f01354
commit 7915198be4
16 changed files with 230 additions and 94 deletions

View File

@@ -2,11 +2,15 @@ import { defineStore } from 'pinia';
import { Notification } from '@arco-design/web-vue';
import type { RouteRecordNormalized } from 'vue-router';
import defaultSettings from '@/config/settings.json';
import { getMenuList } from '@/api/user';
import { getMenuList } from '@/api/user/auth';
import { AppState } from './types';
import router from '@/router';
const useAppStore = defineStore('app', {
state: (): AppState => ({ ...defaultSettings }),
state: (): AppState => ({
...defaultSettings,
menuFetched: false,
}),
getters: {
appCurrentSetting(state: AppState): AppState {
@@ -62,7 +66,54 @@ const useAppStore = defineStore('app', {
async fetchMenuConfig() {
try {
const { data } = await getMenuList();
this.serverMenu = data;
// @ts-ignore
this.serverMenu = (data as Array<any>).map(s => {
// 转换
const convert = (item: any) => {
// 设置路由属性
const meta = {
locale: item.name,
icon: item.icon,
order: item.sort,
hideInMenu: item.visible === 0,
hideChildrenInMenu: item.visible === 0,
noAffix: item.visible === 0,
ignoreCache: item.cache === 0,
};
// 获取 router
const route = router.getRoutes().find(r => {
return r.name === item.component;
});
// 设置 router meta
if (route) {
// 路由配置覆盖菜单配置
route.meta = { ...meta, ...route.meta };
}
// 返回
return {
name: item.component,
path: item.path,
meta: meta,
children: undefined as unknown
};
};
// 构建父目录
const menu = convert(s);
// 构建子目录
if (s.children) {
menu.children = (s.children as Array<any>).map(convert);
}
return menu;
});
// 是否已加载过
this.menuFetched = true;
// 未配置菜单
if (this.serverMenu.length === 0) {
Notification.error({
content: '该用户未配置菜单, 请先配置',
closable: true,
});
}
} catch (error) {
Notification.error({
content: '加载菜单失败',
@@ -76,6 +127,7 @@ const useAppStore = defineStore('app', {
*/
clearMenu() {
this.serverMenu = [];
this.menuFetched = false;
},
},
});

View File

@@ -1,6 +1,6 @@
import type { RouteLocationNormalized } from 'vue-router';
import { defineStore } from 'pinia';
import { DEFAULT_TAB, DEFAULT_ROUTE_NAME, BAN_TAB_LIST, routerToTag } from '@/router/constants';
import { DEFAULT_TAB, DEFAULT_ROUTE_NAME, routerToTag } from '@/router/constants';
import { isString } from '@/utils/is';
import { TabBarState, TagProps } from './types';
@@ -24,7 +24,6 @@ const useTabBarStore = defineStore('tabBar', {
* 添加 tab
*/
updateTabList(route: RouteLocationNormalized) {
if (BAN_TAB_LIST.includes(route.name as string)) return;
this.tagList.push(routerToTag(route));
if (!route.meta.ignoreCache) {
this.cacheTabList.add(route.name as string);

View File

@@ -1,6 +1,5 @@
import { defineStore } from 'pinia';
import { getUserInfo } from '@/api/user';
import { login as userLogin, LoginRequest, logout as userLogout, } from '@/api/user/auth';
import { getUserPermission, login as userLogin, LoginRequest, logout as userLogout } from '@/api/user/auth';
import { clearToken, setToken } from '@/utils/auth';
import { md5 } from '@/utils';
import { removeRouteListener } from '@/utils/route-listener';
@@ -13,8 +12,8 @@ const useUserStore = defineStore('user', {
username: undefined,
nickname: undefined,
avatar: undefined,
permission: undefined,
roles: undefined,
permission: undefined,
}),
getters: {
@@ -35,13 +34,14 @@ const useUserStore = defineStore('user', {
* 获取用户信息
*/
async info() {
const res = await getUserInfo();
const { data } = await getUserPermission();
this.setInfo({
id: 1,
username: 'admin',
nickname: '管理员',
permission: ['*'],
roles: ['admin'],
id: data.user.id,
username: data.user.username,
nickname: data.user.nickname,
avatar: data.user.avatar,
roles: data.roles,
permission: data.permissions,
});
},
@@ -54,7 +54,9 @@ const useUserStore = defineStore('user', {
username: loginForm.username,
password: md5(loginForm.password),
};
// 执行登陆
const res = await userLogin(loginRequest);
// 设置登陆 token
setToken(res.data.token);
} catch (err) {
clearToken();
@@ -69,6 +71,7 @@ const useUserStore = defineStore('user', {
try {
await userLogout();
} finally {
// 登出回调
this.logoutCallBack();
}
},