mirror of
https://github.com/cool-team-official/cool-admin-vue.git
synced 2025-12-15 15:42:50 +00:00
155 lines
3.3 KiB
TypeScript
155 lines
3.3 KiB
TypeScript
import { ElMessage } from "element-plus";
|
||
import storage from "store";
|
||
import store from "/@/store";
|
||
import router from "/@/router";
|
||
import { deepTree, revDeepTree, isArray, isEmpty } from "/@/cool/utils";
|
||
import { menuList } from "/@/config/env";
|
||
import { revisePath } from "../utils";
|
||
import { MenuItem } from "../types";
|
||
import { usePermission } from "/@/cool";
|
||
|
||
const state = {
|
||
// 视图路由,type=1
|
||
routes: storage.get("viewRoutes") || [],
|
||
// 树形菜单
|
||
group: storage.get("menuGroup") || [],
|
||
// showAMenu 模式下,顶级菜单的序号
|
||
index: 0,
|
||
// 左侧菜单
|
||
menu: [],
|
||
// 权限列表
|
||
permission: storage.get("permission") || []
|
||
};
|
||
|
||
const getters = {
|
||
// 树形菜单列表
|
||
menuGroup: (state: any) => state.group,
|
||
// 左侧菜单
|
||
menuList: (state: any) => state.menu,
|
||
// 视图路由
|
||
routes: (state: any) => state.routes,
|
||
// 权限列表
|
||
permission: (state: any) => state.permission
|
||
};
|
||
|
||
const actions = {
|
||
// 设置菜单、权限
|
||
permMenu({ commit, state, getters }: any) {
|
||
return new Promise((resolve, reject) => {
|
||
const next = (res: any) => {
|
||
if (!isArray(res.menus)) {
|
||
res.menus = [];
|
||
}
|
||
|
||
if (!isArray(res.perms)) {
|
||
res.perms = [];
|
||
}
|
||
|
||
const routes = res.menus
|
||
.filter((e: MenuItem) => e.type != 2)
|
||
.map((e: MenuItem) => {
|
||
return {
|
||
id: e.id,
|
||
parentId: e.parentId,
|
||
path: revisePath(e.router || String(e.id)),
|
||
viewPath: e.viewPath,
|
||
type: e.type,
|
||
name: e.name,
|
||
icon: e.icon,
|
||
orderNum: e.orderNum,
|
||
isShow: isEmpty(e.isShow) ? true : e.isShow,
|
||
meta: {
|
||
label: e.name,
|
||
keepAlive: e.keepAlive
|
||
},
|
||
children: []
|
||
};
|
||
});
|
||
|
||
// 转成树形菜单
|
||
const menuGroup = deepTree(routes);
|
||
|
||
// 设置权限
|
||
commit("SET_PERMIESSION", res.perms);
|
||
// 设置菜单组
|
||
commit("SET_MENU_GROUP", menuGroup);
|
||
// 设置视图路由
|
||
commit(
|
||
"SET_VIEW_ROUTES",
|
||
routes.filter((e: MenuItem) => e.type == 1)
|
||
);
|
||
// 设置菜单
|
||
commit("SET_MENU_LIST", state.index);
|
||
|
||
resolve(menuGroup);
|
||
};
|
||
|
||
// 监测自定义菜单
|
||
if (!getters.app.conf.customMenu) {
|
||
store.service.base.common
|
||
.permMenu()
|
||
.then((res: any) => {
|
||
next(res);
|
||
})
|
||
.catch((err: string) => {
|
||
ElMessage.error("菜单加载异常");
|
||
console.error(err);
|
||
reject(err);
|
||
});
|
||
} else {
|
||
next({
|
||
menus: revDeepTree(menuList)
|
||
});
|
||
}
|
||
});
|
||
}
|
||
};
|
||
|
||
const mutations = {
|
||
// 设置树形菜单列表
|
||
SET_MENU_GROUP(state: any, list: MenuItem[]) {
|
||
state.group = list;
|
||
storage.set("menuGroup", list);
|
||
},
|
||
|
||
// 设置视图路由
|
||
SET_VIEW_ROUTES(state: any, list: MenuItem[]) {
|
||
router.$plugin?.addViews(list);
|
||
|
||
state.routes = list;
|
||
storage.set("viewRoutes", list);
|
||
},
|
||
|
||
// 设置左侧菜单
|
||
SET_MENU_LIST(state: any, index: number) {
|
||
const { showAMenu } = store.getters.app.conf;
|
||
|
||
if (isEmpty(index)) {
|
||
index = state.index;
|
||
}
|
||
|
||
if (showAMenu) {
|
||
const { children = [] } = state.group[index] || {};
|
||
|
||
state.index = index;
|
||
state.menu = children;
|
||
} else {
|
||
state.menu = state.group;
|
||
}
|
||
},
|
||
|
||
// 设置权限
|
||
SET_PERMIESSION(state: any, list: Array<any>) {
|
||
state.permission = list;
|
||
storage.set("permission", list);
|
||
usePermission(list);
|
||
}
|
||
};
|
||
|
||
export default {
|
||
state,
|
||
getters,
|
||
actions,
|
||
mutations
|
||
};
|