create-chuntianxiaozhu
Version:
春天小猪模板工具
107 lines (99 loc) • 2.29 kB
text/typescript
/**
* 格式化菜单
* @param list
* @param idStr
* @returns
*/
export function formatMenuList(list, idStr) {
const arr =
list &&
list.map((item) => {
if (idStr) {
item.id = `${idStr}-${item.id}`;
}
if (item.children) {
const childrenArr = formatMenuList(item.children, item.id);
item.children = [...childrenArr];
}
item.key = item.id;
item.value = item.id;
item.title = item.name;
return item;
});
return arr || [];
}
/**
* 生成菜单项
* @param menus
* @param parentPath
* @returns
*/
const loopMenuItem = (menus, parentPath) => {
return menus.map(({ icon, children, ...item }) => {
const currentPath = `${parentPath}${item.path}`;
return {
...item,
path: currentPath,
icon: icon || null,
children: children && loopMenuItem(children, currentPath),
};
});
};
/**
* 生成不同端的路由配置
* @param location
* @param routes
* @returns
*/
export function identifyRoute(routes: any[]) {
const item = routes.find(({ path }) => path == "/") || { children: [] };
return loopMenuItem(item.children || [], "");
}
/**
* 过滤出有权限的路由
* @param menus
* @param marks
* @returns
*/
const filterMenu = (menus: any[], marks: any[]) => {
const menuList: any[] = [];
menus.forEach((item: any) => {
const { mark, children = [] } = item;
if (Array.isArray(children)) {
item.children = filterMenu(children, marks);
}
if (mark) {
if (marks?.includes(mark)) {
menuList.push(item);
}
} else {
menuList.push(item);
}
});
return menuList;
};
const transformTreeToArray = (tree) => {
const array: any[] = [];
tree.forEach((item: any) => {
if (item && item.code) array.push(item.code);
if (item.children) {
array.push(...transformTreeToArray(item.children));
}
});
return array;
};
export function getRouteByMarks(menus, marks) {
return filterMenu(menus, transformTreeToArray(marks));
}
/**
* 操作术语
*/
export const OperateMap = {
add: "添加",
edit: "编辑",
detail: "",
};
// 格式
export const DATE_TIME_FORMAT = "YYYY-MM-DD HH:mm";
export const DATE_MONTH_FORMAT = "YYYY-MM";
export const DATE_MONTH_DATE = "YYYY-MM-DD";