import { MyIcons, MyIconsType, PermissionsType, useMyState } from '@/common'; import AvatarProps from '@/common/components/layout/AvatarProps'; import { Apis } from '@/gen/Apis'; import { Link, RuntimeConfig, history, useNavigate } from '@umijs/max'; import { AutoComplete, Input, Menu, MenuProps, Select, Space } from 'antd'; import { useEffect, useState } from 'react'; import './allConfig.scss'; // import Logo from './logo.png'; interface LevelKeysProps { key?: string; children?: LevelKeysProps[]; } const loopMenu = (permissions: PermissionsType[] | undefined) => { let tree: PermissionsType[] = []; let map: Record = {}; // 过滤掉Button和Tab类型的权限,这些不应该显示在菜单中 const menuPermissions = permissions?.filter( (p) => p.type !== 'Button' && p.type !== 'Tab', ); menuPermissions?.forEach((permission) => { map[permission.id] = { path: permission.path, name: permission.name, icon: permission.icon && MyIcons[permission.icon as MyIconsType], label: permission.name, key: permission.path || permission.id.toString(), hideInMenu: false, // 已经过滤过类型,这里可以设置为false }; }); menuPermissions?.forEach((permission) => { let node = map[permission.id]; const parentId = permission?.parent_id; if (parentId !== null && parentId !== undefined) { const parentNode = map[parentId]; if (parentNode) { // 初始化 children 如果不存在 if (!Array.isArray(parentNode.children)) { parentNode.children = []; } parentNode.children.push(node); } else { // 父节点不存在,作为根节点处理 console.warn( `Parent node with id ${parentId} not found for permission ${permission.id}`, ); tree.push(node); } } else { tree.push(node); } }); return tree?.[0]?.children; }; export const LayoutConfig: RuntimeConfig['layout'] = () => { const [getSelectProject, setSelectProject] = useState([]); const { snap } = useMyState(); const navigate = useNavigate(); const permissionsList = (snap.session.permissions || []) .filter((p: any) => p.type !== 'Button' && p.path) .sort((a: any, b: any) => a._lft - b._lft) .map((p: any) => ({ value: p.path, label: p.name })); const quickLinks = [ { label: '工单Bi', path: '/work_order/work_bi' }, { label: '合同Bi', path: '/contract/contracts_bi' }, { label: '收费Bi', path: '/charge/charge_bi' }, { label: '项目Bi', path: '/asset/asset_bi' }, ]; const handleLoadProject = async () => { let res = await Apis.Common.Auth.GetProjects(); setSelectProject( res?.data?.map((item) => ({ value: item.id, label: item.name, })), ); }; const [stateOpenKeys, setStateOpenKeys] = useState(['2', '23']); const getLevelKeys: any = (items1: LevelKeysProps[]) => { const key: Record = {}; const func = (items2: LevelKeysProps[], level = 1) => { items2?.forEach((item) => { if (item.key) { key[item.key] = level; } if (item.children) { func(item.children, level + 1); } }); }; func(items1); return key; }; useEffect(() => { handleLoadProject(''); }, []); return { title: '', // 首页 logo logo: (
), layout: 'mix', siderWidth: 180, colorPrimary: '#1890ff', pure: history.location.pathname === '/login', avatarProps: { render: () => , }, headerContentRender: () => (
{/*