修改菜单逻辑.
This commit is contained in:
@@ -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;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user