fix: 修复切换普通用户登录时,左侧菜单没有同步更新的bug

pull/229/head
xiaojunnuo 2024-10-20 01:54:49 +08:00
parent 682cb6b71c
commit 12116a89f4
11 changed files with 53 additions and 49 deletions

View File

@ -47,8 +47,8 @@ provide("fn:router.reload", reload);
provide("fn:locale.changed", localeChanged);
//
const resourceStore = useResourceStore();
resourceStore.init();
// const resourceStore = useResourceStore();
// resourceStore.init();
const pageStore = usePageStore();
pageStore.init();
const settingStore = useSettingStore();

View File

@ -2,7 +2,6 @@ import Validator from "async-validator";
import { DomainsVerifyPlanInput } from "./type";
function checkCnameVerifyPlan(rule, value: DomainsVerifyPlanInput) {
debugger;
if (value == null) {
return true;
}

View File

@ -131,7 +131,7 @@ export default defineComponent({
open(sub.path);
}
}
slots.push(<a-sub-menu key={sub.index} v-slots={subSlots} onTitleClick={onTitleClick} />);
slots.push(<a-sub-menu key={sub.path} v-slots={subSlots} onTitleClick={onTitleClick} />);
} else {
slots.push(
<a-menu-item key={sub.path} title={sub.title}>

View File

@ -6,10 +6,17 @@ import { env } from "/@/utils/util.env";
//监听注销事件
mitter.on("app.logout", () => {
debugger;
const permissionStore = usePermissionStore();
permissionStore.clear();
});
mitter.on("app.login", () => {
const permissionStore = useResourceStore();
permissionStore.clear();
permissionStore.init();
});
interface PermissionState {
permissions: [];
inited: boolean;
@ -73,6 +80,7 @@ export const usePermissionStore = defineStore({
resourceStore.filterByPermission(permissions);
},
async loadFromRemote() {
debugger;
let permissionTree = [];
if (env.PM_ENABLED === "false") {
console.warn("当前权限模块未开启,权限列表为空");

View File

@ -22,6 +22,8 @@ router.beforeEach(async (to, from, next) => {
NProgress.start();
const settingStore = useSettingStore();
await settingStore.initOnce();
const resourceStore = useResourceStore();
resourceStore.init();
// 修复三级以上路由页面无法缓存的问题
if (to.matched && to.matched.length > 2) {
to.matched.splice(1, to.matched.length - 2);
@ -37,11 +39,11 @@ router.beforeEach(async (to, from, next) => {
// 请根据自身业务需要修改
const token = userStore.getToken;
if (token) {
await userStore.init();
next();
} else {
// 没有登录的时候跳转到登录界面
// 携带上登陆成功之后需要跳转的页面完整路径
resourceStore.clear();
next({
name: "login",
query: {
@ -73,7 +75,7 @@ router.afterEach((to: any) => {
const matched = to.matched;
if (matched.length > 0) {
const resourceStore = useResourceStore();
resourceStore.setAsideMenuByCurrentRoute(matched);
resourceStore.setCurrentTopMenuByCurrentRoute(matched);
}
});
export default router;

View File

@ -10,7 +10,7 @@ export const sysResources = [
component: LayoutPass,
meta: {
icon: "ion:settings-outline",
permission: "sys"
permission: "sys:settings:view"
},
children: [
{

View File

@ -4,46 +4,56 @@ import { frameworkMenus, headerMenus, filterMenus, findMenus } from "/src/router
import _ from "lodash-es";
import { mitter } from "/src/utils/util.mitt";
//监听注销事件
mitter.on("app.logout", () => {
const resourceStore = useResourceStore();
resourceStore.clear();
});
// mitter.on("app.logout", () => {
// debugger;
// const resourceStore = useResourceStore();
// resourceStore.clear();
// });
//
// mitter.on("app.login", () => {
// const resourceStore = useResourceStore();
// resourceStore.clear();
// resourceStore.init();
// });
interface ResourceState {
frameworkMenus: Array<any>;
topMenus: Array<any>;
authedTopMenus: Array<any>;
headerMenus: Array<any>;
asideMenus: Array<any>;
fixedAsideMenus: Array<any>;
inited: boolean;
currentAsidePath: string;
currentTopMenu?: string;
currentAsidePath?: string;
}
export const useResourceStore = defineStore({
id: "app.resource",
state: (): ResourceState => ({
// user info
frameworkMenus: [],
topMenus: [],
authedTopMenus: [],
headerMenus: [],
asideMenus: [],
fixedAsideMenus: [],
inited: false,
currentAsidePath: ""
currentTopMenu: undefined,
currentAsidePath: undefined
}),
getters: {
// @ts-ignore
getAsideMenus() {
// @ts-ignore
return this.asideMenus;
let topMenu = this.currentTopMenu;
if (!topMenu && this.authedTopMenus.length > 0) {
topMenu = this.authedTopMenus[0];
}
let asideMenus = topMenu?.children || [];
asideMenus = [...this.fixedAsideMenus, ...asideMenus];
return asideMenus;
},
// @ts-ignore
getHeaderMenus() {
// @ts-ignore
return this.headerMenus;
},
// @ts-ignore
getFrameworkMenus() {
// @ts-ignore
return this.frameworkMenus;
return this.authedTopMenus;
}
} as any,
actions: {
@ -59,28 +69,26 @@ export const useResourceStore = defineStore({
}
this.inited = true;
const showMenus = _.cloneDeep(frameworkMenus[0].children);
this.frameworkMenus = filterMenus(showMenus, (item: any) => {
const allMenus = _.cloneDeep(frameworkMenus[0].children);
this.topMenus = filterMenus(allMenus, (item: any) => {
return item?.meta?.showOnHeader !== false;
});
this.fixedAsideMenus = findMenus(showMenus, (item: any) => {
this.fixedAsideMenus = findMenus(allMenus, (item: any) => {
return item?.meta?.fixedAside === true;
});
this.headerMenus = headerMenus;
this.setAsideMenu();
},
setAsideMenu(topMenu?: any) {
setCurrentTopMenu(topMenu?: any) {
if (this.frameworkMenus.length === 0) {
return;
}
if (topMenu == null) {
topMenu = this.frameworkMenus[0];
}
const asideMenus = topMenu?.children || [];
this.asideMenus = [...this.fixedAsideMenus, ...asideMenus];
this.currentTopMenu = topMenu;
},
setAsideMenuByCurrentRoute(matched: any) {
setCurrentTopMenuByCurrentRoute(matched: any) {
const menuHeader = this.frameworkMenus;
if (matched?.length <= 1) {
return;
@ -109,11 +117,11 @@ export const useResourceStore = defineStore({
return;
}
this.currentAsidePath = _side[0];
this.setAsideMenu(_side[0]);
this.setCurrentTopMenu(_side[0]);
}
},
filterByPermission(permissions: any) {
this.frameworkMenus = this.filterChildrenByPermission(this.frameworkMenus, permissions);
this.authedTopMenus = this.filterChildrenByPermission(this.topMenus, permissions);
},
filterChildrenByPermission(list: any, permissions: any) {
const menus = list.filter((item: any) => {

View File

@ -15,7 +15,6 @@ import { mitter } from "/src/utils/util.mitt";
interface UserState {
userInfo: Nullable<UserInfoRes>;
token?: string;
inited: boolean;
}
const USER_INFO_KEY = "USER_INFO";
@ -26,8 +25,7 @@ export const useUserStore = defineStore({
// user info
userInfo: null,
// token
token: undefined,
inited: false
token: undefined
}),
getters: {
getUserInfo(): UserInfoRes {
@ -114,16 +112,6 @@ export const useUserStore = defineStore({
await this.logout(true);
}
});
},
async init() {
if (this.inited) {
return;
}
this.inited = true;
},
async reInit() {
this.inited = false;
await this.init();
}
}
});

View File

@ -76,7 +76,6 @@ export default function (certPluginGroup: PluginGroup, formWrapperRef: any): Cre
},
valueChange: {
handle: async ({ form, value }) => {
debugger;
const config = await api.GetPluginConfig({
name: value,
type: "builtIn"

View File

@ -256,7 +256,6 @@ export default {
}
}
//
debugger;
const pluginSysConfig = await pluginApi.GetPluginConfig({ name: pluginDefine.name, type: "builtIn" });
if (pluginSysConfig.sysSetting?.input) {
for (const key in pluginSysConfig.sysSetting?.input) {

View File

@ -130,6 +130,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
component: {
name: "access-selector",
vModel: "modelValue",
from: "sys",
type: compute(({ form }) => {
return form.dnsProviderType;
})