layout布局参数参考 ProLayout
https://procomponents.ant.design/components/layout/#prolayout

  • umi默认的布局配置在 defaultSettings.ts里面,删除 defualtSettings.ts关于布局的配置
  • 新建一个 layout.ts单独管理 layout布局配置,然后再 config.ts引入 layout.ts
  • ProLayout的布局配置如下
    1. const layout = {
    2. name: '管理系统', // 网站名字
    3. navTheme: 'light', // 浅色主题
    4. // 模式, side: 左侧导航 top: 顶部导航 mix: 混合式导航
    5. layout: 'mix', // side, top, mix
    6. splitMenus: true, // 切割菜单,只在 mix下有效
    7. headerHeight: 48, // 菜单栏的宽度
    8. headerTheme: 'light',
    9. contentWidth: 'Fluid',
    10. fixedHeader: false,
    11. fixSiderbar: true,
    12. colorWeak: false,
    13. siderWidth: 200,
    14. logo: 'https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg',
    15. iconfontUrl: '',
    16. // footerRender: false, // 是否显示页脚
    17. // headerRender: false, // 不展示顶栏
    18. // target: '_blank', // 新页面打开
    19. // menuRender: false, // 不展示菜单
    20. // menuHeaderRender: false, // 不展示菜单顶栏
    21. // access: 'canRead', // 权限配置,需要与plugin-access插件配合使用
    22. // hideChildrenInMenu: true,// 隐藏子菜单
    23. // hideInMenu: true, // 隐藏自己和子菜单
    24. // hideInBreadcrumb: true, // 在面包屑中隐藏
    25. // flatMenu: true, // 子项往上提,仍旧展示,
    26. };
    27. export default layout;

配置的页面布局如下
image.png

plugin-layout

plugin-layout文档 https://v3.umijs.org/zh-CN/plugins/plugin-layout
默认为 Ant Design 的 Layout @ant-design/pro-layout,支持 pro-layout的全部配置项

UmiJS 默认的脚手架内置了 @umijs/preset-react 插件集,其中的一个插件是 plugin-layout
通过 plugin-layout可以使用 Ant Design 提供的 ProLayout
使用 ProLayout 布局,编辑 .umirc.ts 配置 layout: {},并且需要确保 @ant-design/pro-layout 已经安装

layout: ‘mix’

layout的菜单模式。side:右侧导航,top:顶部导航,mix: 混合菜单

  1. layout: 'side' | 'top' | 'mix';

layout: mix

image.png

layout: top

layout-top.png

layout: side 默认值

image.png

splitMenus

  1. layout: 'mix', // 菜单模式
  2. splitMenus: true, // 切割菜单,只在mix模式下生效

splitMenus.png

导航条颜色

  1. .ant-pro-global-header-layout-mix {
  2. background-color: #001528;
  3. }

左侧菜单

image.png

app.tsx 设置左侧的导航菜单

由于涉及到 DOM 无法配置在 .umirc.ts 中。需要在运行时配置,在 src/app.tsx 中做如下配置
src/app.tsx

  1. export function layout() {
  2. return {
  3. menuDataRender: () => [ //此功能可以实现动态路由,用来渲染访问路由
  4. {
  5. path: '/',
  6. name: '控制台',
  7. },
  8. {
  9. path: '/portfolio',
  10. name: '作品',
  11. children: [
  12. { path: '/portfolio/datav', name: '数据大屏' },
  13. { path: '/portfolio/cli', name: '前端工程化' },
  14. ],
  15. },
  16. ],
  17. };
  18. }

menuDataRender

实现动态路由,用来渲染访问路由

image.png