Files
orange-admin/OrangeFormsOpen-VUE3/src/store/utils/index.ts

110 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { UserInfo } from '@/types/upms/user';
import { MenuItem } from '@/types/upms/menu';
import { SysMenuBindType } from '@/common/staticDict';
function processMenu(item: MenuItem): void {
if (item == null) return;
if (item.extraData != null && item.extraData !== '') {
const extraData = JSON.parse(item.extraData);
delete item.extraData;
item.bindType = extraData.bindType || item.bindType;
item.onlineFormId = extraData.onlineFormId || item.onlineFormId;
item.onlineFlowEntryId = extraData.onlineFlowEntryId || item.onlineFlowEntryId;
item.reportPageId = extraData.reportPageId || item.reportPageId;
item.formRouterName = extraData.formRouterName || item.formRouterName;
item.targetUrl = extraData.targetUrl;
}
if (item.bindType == null) {
if (item.onlineFlowEntryId != null) {
item.bindType = SysMenuBindType.WORK_ORDER;
} else if (item.reportPageId != null) {
item.bindType = SysMenuBindType.REPORT;
} else if (item.targetUrl != null) {
item.bindType = SysMenuBindType.THRID_URL;
} else {
item.bindType =
item.onlineFormId == null ? SysMenuBindType.ROUTER : SysMenuBindType.ONLINE_FORM;
}
}
if (item.children && item.children.length > 0) {
item.children.forEach(item => {
processMenu(item);
});
}
}
/**
* 从给定的数据中找到ID对应的菜单
*
* @param id 目标ID
* @param menuList 源数据列表
* @returns 目标对象ID相同
*/
function findMenuItemById(id: string, menuList: Array<MenuItem>): MenuItem | null {
if (menuList != null && menuList.length > 0) {
for (const menu of menuList) {
if (menu.menuId == id) {
return menu;
} else if (menu.children != null) {
const item = findMenuItemById(id, menu.children);
if (item != null) {
return item;
}
}
}
}
return null;
}
/**
* 寻找目标菜单,压入全路径
*
* @param menuItem 父级菜单
* @param menuId 目标ID
* @param path 父子菜单集合(全路径)
* @returns 目标菜单
*/
function findMenuItem(menuItem: MenuItem, menuId: string, path: MenuItem[]): MenuItem | null {
path.push(menuItem);
if (menuItem.menuId == menuId) {
return menuItem;
}
let findItem: MenuItem | null = null;
if (Array.isArray(menuItem.children)) {
for (let i = 0; i < menuItem.children.length; i++) {
findItem = findMenuItem(menuItem.children[i], menuId, path);
if (findItem != null) {
break;
}
}
}
// 没有找到目标,弹出之前压入的菜单
if (findItem == null) {
path.pop();
}
return findItem;
}
function initUserInfo(userInfo: UserInfo) {
if (userInfo != null && userInfo.headImageUrl != null && userInfo.headImageUrl !== '') {
try {
userInfo.headImageUrl = JSON.parse(userInfo.headImageUrl);
if (Array.isArray(userInfo.headImageUrl)) {
userInfo.headImageUrl = userInfo.headImageUrl[0];
} else {
userInfo.headImageUrl = null;
}
} catch (e) {
console.error('解析头像数据失败!', e);
userInfo.headImageUrl = null;
}
} else {
if (userInfo) userInfo.headImageUrl = null;
}
return userInfo;
}
export { processMenu, findMenuItem, initUserInfo, findMenuItemById };