Skip to content

FxLayout 布局骨架

后台管理 layout 的纯 UI 骨架。grid 驱动 7 种布局模式grid-template-areas 纯函数 buildGridDef 产出),slot 注入业务内容。不依赖 router/store;断点感知不上收(isMobile 由 BasicLayout 层算好传入)。内置三增强:header 滚动隐藏 / 侧栏拖拽调宽 / 移动端抽屉。

布局模式

layoutMode形态区域特征
verticalsidebar-navsidebar 全高,header 从 side 右侧开始
two-columnsidebar-mixed-nav侧区拆 icon + extra 双列(sidebar 全高)
horizontalheader-nav无侧栏,header 横贯
sidebar-navheader-sidebar-navheader 横贯全宽
mixed-verticalmixed-navheader 横贯全宽(sidebar 从 header 下开始)
mixed-two-columnheader-mixed-navheader 横贯 + 双列侧栏
fullscreenfull-content单格全内容

showHeader / showTabs / showFooter 动态增删 grid 行;maximized 瞬态 / isMobile 一律单列全内容。

基础用法

切换模式 / collapsed / 各行显隐 / headerMode,观察 grid 区域变化;vertical 系模式下拖动 sidebar 右缘可调宽(180~320,sidebarResize 事件回传)。

vue
<FxLayout
  :layout-mode="setting.layoutMode"
  :collapsed="collapsed"
  :maximized="maximized"
  :sidebar-width="setting.sidebarWidth"
  :show-header="setting.showHeader"
  :show-tabs="setting.showTabs"
  :show-footer="setting.showFooter"
  :header-mode="setting.headerMode"
  :sidebar-draggable="setting.sidebarDraggable"
  :is-mobile="isMobile"
  @sidebar-resize="onResize"
  @mask-click="onMaskClick"
  @sidebar-mouse-leave="onSideLeave"
>
  <template #icon><FxIconColumn /></template>
  <template #extra><FxLayoutExtraMenu /></template>
  <template #sidebar><MySidebar /></template>
  <template #header><MyHeader /></template>
  <template #tabs><MyTabs /></template>
  <template #content><router-view /></template>
  <template #footer><MyFooter /></template>
</FxLayout>

Attributes

参数说明类型默认值
layoutMode布局模式(7 种,见上表)LayoutMode"vertical"
collapsed侧边栏是否折叠booleanfalse
maximized是否最大化(单格全内容)booleanfalse
sidebarWidth主侧栏宽度(拖拽实时变化)number220
sidebarCollapsedWidth侧边栏折叠宽度(px)number64
iconColumnWidth双列:icon 列宽(px)number64
extraMenuWidth双列:extra 列宽(px,collapsed 时收为 0)number180
contentPadding内容区内边距(px)number20
contentWidth内容宽度:fluid 流式 / fixed 定宽居中(max 1200px)"fluid" | "fixed""fluid"
showHeader是否显示顶栏行booleantrue
showTabs是否显示标签页行booleantrue
showFooter是否显示页脚行(同时控制 content paddingBottom)booleanfalse
headerModefixed 常驻 / auto 向下滚动隐藏(滚动方向判定)"fixed" | "auto""fixed"
sidebarDraggable侧栏拖拽手柄开关(仅 vertical 系主侧栏 + 展开 + 桌面端)booleantrue
showExtra双列:extra 列是否显示(激活一级无子菜单时收起,列宽归 0)booleantrue
isMobile移动端形态(侧栏变 fixed 抽屉 + 遮罩 + 单列)booleanfalse

Events

事件名说明回调参数
sidebarResize拖拽调宽结束(消费方写回 store 持久化)(width: number)
maskClick移动端遮罩点击(收起侧栏抽屉)
sidebarMouseLeave鼠标移出侧区(接 useExtraMenu().handleSideMouseLeave 回落)

Slots

名称说明
icon双列第一列图标栏(仅 dual 模式渲染)
extra双列第二列常驻子菜单(仅 dual 模式渲染)
sidebar主侧栏(非 dual 模式渲染;移动端走抽屉容器)
header顶栏(maximized 时不渲染;滚动隐藏收 max-height)
tabs标签页
content主内容区
footer页脚(showFooter 控制显隐,底部独立行)

注意事项

  • 业务状态(collapsed / sidebarWidth / headerMode…)由消费方持有(如 store setting),FxLayout 只接收 props
  • 拖拽 clamp 范围 180~320(SIDEBAR_MIN_WIDTH / SIDEBAR_MAX_WIDTH
  • 滚动隐藏监听挂在 content 滚动容器上(组件内部 useHeaderScroll,无需消费方接线)