import { MyIcons, MyIconsType, PermissionsType, useMyState } from '@/common'; import AvatarProps from '@/common/components/layout/AvatarProps'; import { BellOutlined, SettingOutlined, TabletOutlined, } from '@ant-design/icons'; import { Link, RuntimeConfig, history, useNavigate } from '@umijs/max'; import { AutoComplete, Button, Image, Input, Menu, MenuProps, Popover, Space, } from 'antd'; import { useState } from 'react'; import './allConfig.scss'; import ImgCustomerWxApp from './customer_wx_app.jpg'; import ImgEmployeeWxApp from './employee_wx_app.jpg'; // 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 { 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 [stateOpenKeys, setStateOpenKeys] = useState(['2', '23']); const getLevelKeys: any = (items1: LevelKeysProps[]) => { const key: Record = {}; const func = (items2: LevelKeysProps[], level = 1) => { console.log(items2, 'level'); items2?.forEach((item) => { if (item.key) { key[item.key] = level; } if (item.children) { func(item.children, level + 1); } }); }; func(items1); return key; }; return { title: '', // 首页 logo logo: (
{/* */}
), layout: 'mix', siderWidth: 180, colorPrimary: '#1890ff', pure: history.location.pathname === '/login', avatarProps: { render: () => , }, headerContentRender: () => (
常用功能: {quickLinks.map((q) => ( history.push(q.path)} className="quick_link" > {q.label} ))}
员工端
客户端
} >
), //水印设置 waterMarkProps: { content: snap.session.user?.username, }, defaultCollapsed: true, collapsedButtonRender: false, token: { bgLayout: '#f6f6f6', // header: { // colorBgHeader: '#1B1F3B', // colorHeaderTitle: '#f8f8f8', // colorTextRightActionsItem: '#FFF', // heightLayoutHeader: 50, // }, //菜单背景色 sider: { colorMenuBackground: '#fff', colorTextMenuSelected: '#1890ff', // 菜单激活项字体颜色设置为蓝色 }, }, // 上下菜单 menuItemRender: (item, dom) => {dom}, //点击目录,收起其他菜单 menuCollapse: true, // //左右菜单 menuRender: () => { let objjs: any = []; snap.session.permissions?.forEach((res: any) => { objjs.push(res); }); let data = objjs.sort((a: any, b: any) => { return a._lft - b._lft; }); const menus = loopMenu(data); const levelKeys: any = getLevelKeys(menus as LevelKeysProps[]); const onOpenChange: MenuProps['onOpenChange'] = (openKeys) => { const currentOpenKey = openKeys.find( (key) => !stateOpenKeys.includes(key), ); // open if (currentOpenKey !== undefined) { const repeatIndex = openKeys .filter((key) => key !== currentOpenKey) .findIndex((key) => levelKeys[key] === levelKeys[currentOpenKey]); setStateOpenKeys( openKeys // remove repeat key .filter((_, index) => index !== repeatIndex) // remove current level all child .filter((key) => levelKeys[key] <= levelKeys[currentOpenKey]), ); } else { // close setStateOpenKeys(openKeys); } }; return (
{ sessionStorage.setItem('breadcrumbs', ''); navigate(key); console.log(key, 'key2'); }} onSelect={({ key }) => { console.log(key, 'key'); }} />
); }, menuMode: 'inline', menu: { params: snap.session.permissions, mode: 'inline', request: async () => { let objjs: any = []; snap.session.permissions?.forEach((res: any) => { objjs.push(res); }); let data = objjs.sort((a: any, b: any) => { return a._lft - b._lft; }); const menus = loopMenu(data); return Promise.resolve(menus); }, }, // unAccessible:
unAccessible
, }; }; const HeaderSearch = ({ permissionsList }: { permissionsList: any[] }) => { const [value, setValue] = useState(''); return ( (option?.label as string) ?.toLowerCase() .includes(inputValue.toLowerCase()) } onChange={(v) => setValue(v)} onSelect={(v) => { setValue(''); history.push(v as string); }} > 搜索: ); };