pay-admin/src/common/libs/umi/layoutConfig.tsx

143 lines
4.6 KiB
TypeScript
Raw Normal View History

2026-01-27 15:21:02 +08:00
// import Logo from '@/assets/bitcoin.webp';
2025-06-27 16:42:11 +08:00
import { MyIcons, MyIconsType, PermissionsType, useMyState } from '@/common';
2026-03-31 16:45:08 +08:00
import { AvatarProps, CustomLogo } from '@/common/components/layout';
2025-06-27 16:42:11 +08:00
import { Link, RuntimeConfig, history } from '@umijs/max';
2026-03-31 16:45:08 +08:00
import MyLoGo from './logo.jpeg';
2025-06-27 16:42:11 +08:00
const loopMenu = (permissions: PermissionsType[] | undefined) => {
let tree: PermissionsType[] = [];
let map: Record<number, PermissionsType> = {};
permissions?.forEach((permission) => {
map[permission.id] = {
path: permission.type === 'Button' ? 'null' : permission.path,
name: permission.name,
icon: permission.icon && MyIcons[permission.icon as MyIconsType],
children: [],
hideInMenu: permission.type === 'Button',
};
});
permissions?.forEach((permission) => {
let node = map[permission.id];
if (permission.parent_id !== null) {
map[permission.parent_id].children.push(node);
} else {
tree.push(node);
}
});
return tree?.[0]?.children;
};
export const LayoutConfig: RuntimeConfig['layout'] = () => {
const { snap } = useMyState();
return {
2026-03-31 16:45:08 +08:00
title: '物业管理平台',
logo: MyLoGo, // 禁用默认logo使用自定义
layout: 'mix', // 从 'mix' 改为 'side'
2025-06-27 16:42:11 +08:00
colorPrimary: '#1890ff',
siderWidth: 220,
2026-03-31 16:45:08 +08:00
prefixCls: 'my-prefix',
2025-06-27 16:42:11 +08:00
pure: history.location.pathname === '/login',
// 禁用顶部导航栏的菜单
2026-03-31 16:45:08 +08:00
// 确保header显示 - 强制始终显示header禁用响应式隐藏
header: true,
2026-03-31 16:45:08 +08:00
// 禁用响应式侧边栏确保header始终显示
responsive: false,
// siderMenuType: 'inline',
// 隐藏面包屑导航
breadcrumb: { props: { style: { display: 'none' } } },
2026-03-31 16:45:08 +08:00
avatarProps: {
// src: 'https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg',
// size: 'small',
// title: snap?.session?.user?.username ?? '-',
render: (props, dom) => {
return <AvatarProps user={snap.session.user} />;
// return (
// <Dropdown
// menu={{
// items: [
// {
// key: 'logout',
// icon: <LogoutOutlined />,
// label: '退出登录',
// },
// ],
// }}
// >
// {dom}
// </Dropdown>
// );
},
},
2026-03-31 16:45:08 +08:00
// 自定义Header渲染 - 右侧显示用户信息
// headerRender: (props, defaultDom) => {
// return (
// <div
// style={{
// display: 'flex',
// justifyContent: 'space-between',
// alignItems: 'center',
// width: '100%',
// paddingRight: 24,
// paddingLeft: 24,
// height: '100%',
// }}
// >
// {/* 左侧可以为空 */}
// <div style={{ flex: 1 }}></div>
// {/* 右侧添加用户信息 */}
// <div style={{ display: 'flex', alignItems: 'center' }}>
// <AvatarProps user={snap.session.user} />
// </div>
// </div>
// );
// },
// 新增自定义Logo渲染
logoRenderer: (collapsed: boolean) => {
return <CustomLogo collapsed={collapsed} />;
},
2025-10-10 17:55:46 +08:00
//水印设置
// waterMarkProps: {
// content: snap.session.user?.username,
// },
2025-06-27 16:42:11 +08:00
collapsedButtonRender: false,
// 禁用底部的版权信息等
footerRender: false,
2025-06-27 16:42:11 +08:00
token: {
bgLayout: '#f5f5f5', // 浅灰布局背景
2025-06-27 16:42:11 +08:00
header: {
colorBgHeader: '#ffffff', // 白色header背景
colorHeaderTitle: '#262626', // 深色标题文字
colorTextRightActionsItem: '#595959', // 深色操作文字
heightLayoutHeader: 64, // Header高度64px
2025-06-27 16:42:11 +08:00
},
sider: {
colorMenuBackground: '#ffffff', // 白色菜单背景
colorMenuText: '#595959', // 深色菜单文字
colorMenuTextSelected: '#1890ff', // 激活菜单文字蓝色
colorMenuItemBgSelected: '#e6f7ff', // 激活菜单背景浅蓝
colorMenuDivider: '#f0f0f0', // 分割线颜色
2025-06-27 16:42:11 +08:00
},
},
menuItemRender: (item, dom) => <Link to={item.path || '/'}>{dom}</Link>,
menu: {
params: snap.session.permissions,
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: <div>unAccessible</div>,
};
};