import { AvatarDropdown, AvatarName, Question, SelectLang } from '@/components'; import { current } from '@/services/matrix/admin'; import { LinkOutlined } from '@ant-design/icons'; import { MenuDataItem, SettingDrawer } from '@ant-design/pro-components'; import { Link, history } from '@umijs/max'; import { appList } from '@/services/matrix/admin'; import type { Settings as LayoutSettings } from '@ant-design/pro-components'; import type { RunTimeLayoutConfig } from '@umijs/max'; import { JSXElementConstructor, ReactElement, ReactNode, ReactPortal } from 'react'; import defaultSettings from '../config/defaultSettings'; import access from './access'; import { errorConfig } from './requestErrorConfig'; const isDev = process.env.NODE_ENV === 'development'; const loginPath = '/user/login'; /** * @see https://umijs.org/zh-CN/plugins/plugin-initial-state * */ export async function getInitialState(): Promise<{ settings?: Partial; currentUser?: API.MatrixAdmin; loading?: boolean; fetchUserInfo?: () => Promise; }> { const fetchUserInfo = async () => { try { const msg = await current({ skipErrorHandler: true, }); return msg.data; } catch (error) { history.push(loginPath); } return undefined; }; // 如果不是登录页面,执行 const { location } = history; if (location.pathname !== loginPath) { const currentUser = await fetchUserInfo(); return { fetchUserInfo, currentUser, settings: defaultSettings as Partial, }; } return { fetchUserInfo, settings: defaultSettings as Partial, }; } const matrixMenu = (app: API.MatrixAppBo): MenuDataItem => { if (!app.enableCash) { return { path: '/advList/' + app.code, name: app.name, access: 'canAdmin', component: './AdvRecordList', }; } return { name: app.name, access: 'canAdmin', children: [ { name: '广告数据', path: '/advListV2/' + app.code, access: 'canAdmin', component: './AdvRecordListV2', }, { name: '用户管理', path: '/user/' + app.code, access: 'canAdmin', component: './UserManagement', }, { name: '提现管理', path: '/money/' + app.code, access: 'canAdmin', component: './MoneyManagement', }, ], }; }; // ProLayout 支持的api https://procomponents.ant.design/components/layout export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => { return { menu: { // 每当 initialState?.currentUser?.userid 发生修改时重新执行 request params: { userId: initialState?.currentUser?.id, }, request: async () => { const apps = await appList(); const menuData: MenuDataItem[] = []; const role = initialState?.currentUser?.role || 100; apps.data?.forEach((x: any) => { if (x.hide === 1 && role <= 2) { } else { menuData.push(matrixMenu(x)); } if (role === 4) { menuData.push({ path: '/app/' + x.code, name: x.name, access: 'canDeviceOwner', component: './DeviceOwnerApp', }); } }); menuData.push({ path: '/adminList', name: '人员管理', access: 'canAdmin', }); menuData.push({ path: '/bind', name: '绑定设备', access: 'canDeviceOwner', }); menuData.push({ path: '/appList', name: '应用列表', access: 'canAdmin', }); menuData.push({ path: '/super', name: '魔法之地', access: 'superAdmin', }); return menuData; }, }, // 添加权限校验逻辑 menuDataRender: (menuData: MenuDataItem[]) => menuData.map((item) => { const val = item.access; if (!val) { return item; } const accessData: { [key: string]: boolean | 0 | undefined } = access(initialState); if (!accessData[val]) { return { ...item, hideInMenu: true, }; } return item; }), actionsRender: () => [, ], avatarProps: { // src: initialState?.currentUser?.avatar, title: , render: ( _: any, avatarChildren: | string | number | boolean | ReactElement> | Iterable | ReactPortal | null | undefined, ) => { return {avatarChildren}; }, }, // waterMarkProps: { // content: initialState?.currentUser?.name, // }, // footerRender: () =>