项目正在快速迭代中,API 与视觉细节可能随版本调整,请勿用于生产环境。

EtWorkbench · 工作台布局运行时 ​

工作台骨架门面:区域槽 + 面板树 + 持久化 + 损坏降级,是布局树唯一的写树处。

工作台演示
报表.xlsx
文件
  • 文件 1
  • 文件 2
画布
日志
  • 日志 1
  • 日志 2
100%

API ​

import { EtWorkbench } from '@wil-works/evoke-tools-ui'公共工具壳功能块

Props

名称类型默认说明
layoutObjectnull布局树(v-model:本组件是唯一的写树处)
defaultLayoutObjectnull默认布局(重置用;挂载读盘失败时的降级目标)
persistKeyString''持久化键('' = 不持久化;非空时 localStorage 读写在挂载/变更时发生)

Emits

事件载荷说明
update:layoutnext, loaded.tree, normalizedv-model(layout)的写入
reset—「重置布局」被触发(产品也可主动调 resetLayout());本件已落回默认树
layout-corruptedlist入参或读回的布局树判为损坏并已降落默认树;载荷 = 错误清单(坏档只提示一次)

Slots

槽吃什么作用域
#titlebar顶带:EtTitleBar(窗口控制位由它按平台渲染)—
#documents文档标签带:EtDocumentTabs / EtSheetTabs—
#toolbar工具区:EtRibbonBar(或自绘命令条)—
#left左停靠区:EtDock—
#panel面板内容:作用域给 { panel },按 panel.id 渲染对应内容{ panel, dock }
#right右停靠区:EtDock—
#bottom底停靠区:EtDock—
#tabbar内容页签带(办公形态放 EtSheetTabs;与 #documents 对称,可同时用)—
#statusbar底带:EtStatusBar(缩放等工具位由它渲染)—
default画布位(中间内容;办公产品放 EtSheetCanvasHost)

键盘 · 可访问名 · 密度

键盘不接管按键
可访问名 无 ARIA 属性(原生语义)
密度--et-chrome-bg--et-chrome-separator--et-chrome-statusbar-height--et-chrome-tabstrip-height--et-chrome-titlebar-height--et-density-base-font--et-density-line-height--et-toolbtn-fg

办公整页装配(v1.4) ​

五条带各就各位即可拼出办公整页,不需要额外写布局 CSS:

vue
<et-workbench :layout="layout" :default-layout="DEFAULT" persist-key="app">
  <template #titlebar><et-title-bar title="季度报表" doc-title="报表.xlsx" /></template>
  <template #documents><et-document-tabs v-model="doc" :documents="docs" /></template>
  <template #toolbar>
    <et-ribbon-bar v-model="tab" :schema="schema" :registry="registry" />
    <et-formula-bar v-model="formula" :reference="reference" @submit="apply" />
  </template>

  <et-sheet-canvas-host label="工作表" @scroll="onScroll"><my-grid /></et-sheet-canvas-host>

  <template #tabbar><et-sheet-tabs v-model="sheet" :tabs="sheets" /></template>
  <template #statusbar><et-status-bar :items="items" zoom="100%" /></template>
</et-workbench>

带高全部走令牌:标题栏 32 / 工具区(tab 26 + 组行 72)/ 公式栏 26 / 页签 26 / 状态栏 24。

行为 ​

  • 持久化:挂载 loadLayout 读回;变更 saveLayout,写前 layoutEquals 比对,无变更不写,异常静默。
  • 损坏降级:一律降级到 defaultLayout 渲染(不白屏);修好的树覆写存储,损坏只提示一次。
  • 空 defaultLayout 也合法:空树 = 只有画布的工作台(仍可交互、可重置)。
  • 只有画布的初始布局:传 createLayoutTree({ docks: [] })(显式空树,合法形态),之后可用 addDock 运行时长出停靠——办公单画布页就这一档。
  • 首次打开不被默认布局顶掉:没有持久化档时不发生"恢复",传入的 layout 原样生效; 有档(含坏档降级)才走读回路径。
  • 全屏:树里 maximized 非空 → 对应停靠整幅、其它区域让位(纯 CSS grid 重排)。
  • 关闭 = 隐藏(hidden 是显式状态:重置布局 / 显示面板都找得回来)。
  • 暴露 resetLayout() / saveNow() / getLayout()。

令牌与门禁 ​

  • chrome 各带高度走 --et-chrome-*,区域用 grid 轨道,rail 列 auto = 停靠声明宽。
  • 布局树契约(dock/panel/序列化/损坏降级)是 runtime/layout 纯函数面,详见工作台布局。
  • M2 出口:1280×800 与 1920×1080 下无页面级横向溢出。