import { shallowRef } from 'vue'
|
// API
|
import { GetPermission } from "@a/account";
|
// utils
|
import { formatTree } from "@/utils/format";
|
import axios from "axios";
|
/** 格式化菜单数据生成路由 */
|
const formatRouterMenu = (data) => {
|
// 检测数据是否存在
|
if (data && (!Array.isArray(data) || data.length === 0)) {
|
return false;
|
}
|
|
data.map((item) => {
|
if (item.component) {
|
item.component = shallowRef(require(`@/views/${item.component}`).default)
|
}
|
|
if (item.children) {
|
formatRouterMenu(item.children)
|
}
|
return item
|
})
|
return data
|
// 监听存储数据
|
// const router = [];
|
// 遍历菜单
|
// data.forEach((item) => {
|
// const router_obj = {};
|
// // id
|
// router_obj.id = item.id;
|
|
// // path
|
// router_obj.path = item.path;
|
// // name
|
// router_obj.name = item.router;
|
// // hidden
|
// if (item.hidden === "1") {
|
// router_obj.hidden = true;
|
// }
|
// // redirect
|
// if (item.redirect) {
|
// router_obj.redirect = item.redirect;
|
// }
|
// router_obj.parent_id = item.parent_id;
|
// if (item.children) {
|
// router_obj.children = item.children;
|
// }
|
|
// // meta
|
// router_obj.meta = {
|
// // 菜单名称
|
// title: item.name,
|
// // 菜单图标
|
// icon: item.icon,
|
// // 是否缓存页面
|
// keepAlive: item.keep === "1" ? true : false,
|
// };
|
// // component
|
// router_obj.component = shallowRef(require(`@/${item.component}`).default);
|
|
// 添加至router数组
|
// router.push(router_obj);
|
// });
|
// 树状格式化
|
// const tree_data = formatTree(router, "id", "parent_id", "children", 0);
|
// 返回数据
|
// return tree_data;
|
};
|
|
const state = {
|
async_router: [],
|
elem: "",
|
user_type: "",
|
};
|
const getters = {
|
async_router: (state) => state.async_router,
|
elem: (state) => state.elem,
|
user_type: (state) => state.user_type,
|
};
|
const mutations = {
|
SET_ROUTER(state, value) {
|
state.async_router = value;
|
},
|
SET_ELEM(state, value) {
|
state.elem = value;
|
},
|
SET_USERTYPE(state, value) {
|
state.user_type = value;
|
},
|
};
|
const actions = {
|
getRouterAction(context) {
|
return new Promise((resolve, reject) => {
|
GetPermission()
|
.then((response) => {
|
const data = response.result.menu;
|
let menuData = data.filter(item => {
|
return item.route === '1'
|
});
|
// 格式化菜单数据生成路由
|
const menu = formatRouterMenu(menuData);
|
// 存储路由
|
context.commit("SET_ROUTER", menu);
|
// 存储元素权限
|
// context.commit("SET_ELEM", response.data.elem_data);
|
// 更新用户类型
|
// context.commit("SET_USERTYPE", response.data.user);
|
resolve(response);
|
})
|
.catch((error) => {
|
reject(error);
|
});
|
});
|
},
|
};
|
export default {
|
namespaced: true,
|
state,
|
getters,
|
mutations,
|
actions,
|
};
|