# 共享工具栏偏好持久化与失败恢复补漏 状态:本次具体缺口已实现,未验证。属于原任务 `operator-gap-tux-persistent-toolbars-enabled-startup`,不新增孤立任务。 ## 源码差异与修改 桌面依据:`freecad-source/src/Mod/Tux/InitGui.py` 以 `Tux/PersistentToolbars/Enabled` 原生 Bool 决定是否加载持久工具栏,缺省为 true。 原 Web 实现虽然在 restoreToolbars/saveToolbars 中读取 Enabled,但 `toolbarParameters` 只导出/恢复 User 子组。此前任务记录声称快照已携带根 Bool,与本轮读取到的代码不一致。只有偏好开关读写路由,无法保证关闭后重载仍关闭。 本次在 `web/src/toolbar-preferences.ts` 集中修复: - 共同保存根 Enabled 和原生 User FCParam 内容。内部快照带 schema,保存为 `Std_DlgParameter-PersistentToolbars.json`,继续使用现有 OPFS saved/persist 和广播通道,不向用户暴露 JSON 操作。 - 首次恢复优先读新快照,兼容已有 `Std_DlgParameter-PersistentToolbars.FCParam`;旧 User-only 快照不覆盖当前原生 Enabled。开关缺省、显式 false/0 均按原生语义处理。 - 导入、保存失败时恢复 User 和 Enabled。快照不导出 System/addTop/addLeft/addRight/addBottom,因此这些原生会话预设保留。 - 仅快照真正变化时落盘/广播。关闭持久化后临时调整布局不会写入保存布局,也不再触发一次无意义的广播刷新将临时排列立刻恢复。 - 原生请求仍使用 requestOwnerParameters;保存、参数面板和恢复共享同一串行参数入口。 在 `web/src/persistent-toolbar-workspace.tsx` 补齐同一工作流: - 偏好恢复失败后提供 Retry toolbar preferences,避免按钮一直 disabled 且只能刷新页面。 - 每次恢复清除旧错误,沿用 revision 防止旧异步回调覆盖新文档/工作台。 - 排列面板打开时聚焦首个控件;Cancel/Escape 返回 Arrange toolbars 按钮。 - 旧工作台保存失败不覆盖当前工作台反馈。 ## 复用与边界 复用包: 1. 既有原生 Enabled 默认值和布局排序/Break 逻辑,记录 `docs/current/operator-gap-tux-persistent-toolbars-enabled-startup-20260921/README.md`。 2. 既有 `view-navigation-preferences.ts::requestOwnerParameters`、OPFS saved/persist 及工具栏广播通道。 3. 既有 `persistent-toolbar-workspace.tsx` 的宿主、revision 和布局预览;不改变建模文档、任务草稿或历史。 路由:Std_DlgParameter → requestToolbarParameters → toolbarParameters → requestOwnerParameters → 已有 DocumentProbe/PartBox 原生参数接口。这里只处理 UI 偏好,无几何算法/OCCT/Three.js 计算变更。 ## 本轮构建和接续 - 修改位置:上述两个 Web 源文件。无原生源码修改,无需原生构建。 - 必要前端构建:项目目录执行 `python3 tools/build_web_frontend.py`;使用现有 web 配置、依赖与快速链接产物。 - 日志:`docs/current/desktop-ui-toolbar-preferences-repair-20260923/build.log`;退出码 0;built in 1.63s,保留已有 chunk 大小提示。 - 未执行测试、类型检查、烟测、浏览器、截图或验收;不以构建成功宣称全部 UI 对标完成。 - 无本轮遗留构建进程。原单一调度器第 10783 轮继续处理 Part 当前文档 New Sketch,未启动第二调度器,未修改其正在开发的 project-shell 或原生源码。 - 本范围后续直接复用;剩余整体验收等待用户明确授权,不能自动启动。后续功能按原调度器队列继续。 处理模块 | 对标项 | 源码落点 | 路由入口 | OCCT 边界 | 状态 | 结论 --- | --- | --- | --- | --- | --- | --- 共享工具栏/Tux | Enabled 与布局保存、失败回滚、重试与焦点 | toolbar-preferences.ts;persistent-toolbar-workspace.tsx | Std_DlgParameter 与既有 toolbarParameters | 仅原生参数;无几何变更 | 已补漏(未验证) | 保留