mirror of
https://github.com/cool-team-official/cool-admin-vue.git
synced 2024-11-02 06:33:40 +08:00
153 lines
3.3 KiB
JavaScript
153 lines
3.3 KiB
JavaScript
import store from "store";
|
||
import { Message } from "element-ui";
|
||
import { deepTree, revDeepTree, isArray, isEmpty } from "cl-admin/utils";
|
||
import { revisePath } from "cool/components/base/utils";
|
||
import router from "@/router";
|
||
import { menuList } from "@/config/env";
|
||
|
||
export default {
|
||
state: {
|
||
// 视图路由,type=1
|
||
routes: store.get("viewRoutes") || [],
|
||
// 树形菜单
|
||
group: store.get("menuGroup") || [],
|
||
// showAMenu 模式下,顶级菜单的序号
|
||
index: 0,
|
||
// 左侧菜单
|
||
menu: [],
|
||
// 权限列表
|
||
permission: []
|
||
},
|
||
getters: {
|
||
// 树形菜单列表
|
||
menuGroup: (state) => state.group,
|
||
// 左侧菜单
|
||
menuList: (state) => state.menu,
|
||
// 视图路由
|
||
routes: (state) => state.routes,
|
||
// 权限列表
|
||
permission: (state) => state.permission
|
||
},
|
||
actions: {
|
||
// 设置菜单、权限
|
||
permMenu({ commit, state, getters }) {
|
||
return new Promise((resolve, reject) => {
|
||
const next = (res) => {
|
||
if (!isArray(res.menus)) {
|
||
res.menus = [];
|
||
}
|
||
|
||
if (!isArray(res.perms)) {
|
||
res.perms = [];
|
||
}
|
||
|
||
const routes = res.menus
|
||
.filter((e) => e.type != 2)
|
||
.map((e) => {
|
||
let r = {
|
||
moduleName:
|
||
e.moduleName || (e.router || "").substr(1).replace(/\//g, "-"),
|
||
id: e.id,
|
||
parentId: e.parentId,
|
||
path: revisePath(e.router || 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: []
|
||
};
|
||
|
||
// 匹配存储的组件模块
|
||
let m = getters.componentModules.find(
|
||
(m) => m.moduleName === r.moduleName
|
||
);
|
||
|
||
if (m) {
|
||
// 注册组件实例
|
||
r.component = m.component;
|
||
}
|
||
|
||
return r;
|
||
});
|
||
|
||
// 转成树形菜单
|
||
const menuGroup = deepTree(routes);
|
||
|
||
// 设置权限
|
||
commit("SET_PERMIESSION", res.perms);
|
||
// 设置菜单组
|
||
commit("SET_MENU_GROUP", menuGroup);
|
||
// 设置视图路由
|
||
commit(
|
||
"SET_VIEW_ROUTES",
|
||
routes.filter((e) => e.type == 1)
|
||
);
|
||
// 设置菜单
|
||
commit("SET_MENU_LIST", state.index);
|
||
|
||
resolve(menuGroup);
|
||
};
|
||
|
||
// 监测自定义菜单
|
||
if (!getters.conf.customMenu) {
|
||
this.$service.common
|
||
.permMenu()
|
||
.then((res) => {
|
||
next(res);
|
||
})
|
||
.catch((err) => {
|
||
Message.error("菜单加载异常");
|
||
console.error(err);
|
||
reject(err);
|
||
});
|
||
} else {
|
||
next({
|
||
menus: revDeepTree(menuList)
|
||
});
|
||
}
|
||
});
|
||
}
|
||
},
|
||
mutations: {
|
||
// 设置树形菜单列表
|
||
SET_MENU_GROUP(state, list) {
|
||
state.group = list;
|
||
store.set("menuGroup", list);
|
||
},
|
||
|
||
// 设置视图路由
|
||
SET_VIEW_ROUTES(state, list) {
|
||
router.$plugin.addViews(list);
|
||
|
||
state.routes = list;
|
||
store.set("viewRoutes", list);
|
||
},
|
||
|
||
// 设置左侧菜单
|
||
SET_MENU_LIST(state, index) {
|
||
const { showAMenu } = this.getters.conf;
|
||
|
||
if (showAMenu) {
|
||
const { children = [] } = state.group[index] || {};
|
||
|
||
state.index = index;
|
||
state.menu = children;
|
||
} else {
|
||
state.menu = state.group;
|
||
}
|
||
},
|
||
|
||
// 设置权限
|
||
SET_PERMIESSION(state, list) {
|
||
state.permission = list;
|
||
store.set("permission", list);
|
||
}
|
||
}
|
||
};
|