docs: PRD §12 多项目分栏框架设计定案(openSplit 声明式多栏,代码待实现)
This commit is contained in:
+59
-2
@@ -1,6 +1,6 @@
|
||||
# dsh-worktable(工作台)PRD
|
||||
|
||||
> 版本:v0.2 草案 · 日期:2026-08-16 · 状态:v1 原型已上线;§10 待设计内容已定案并实现(v2,代码完成、待重启后 GUI 验收)
|
||||
> 版本:v0.2 草案 · 日期:2026-08-16 · 状态:v2 已实现并验收;§12 多项目分栏框架(v3)设计定案、待新项目开工时实现
|
||||
> 关联项目:dsh-travelatlas(第一个入驻项目)、上游参考 dsh-reminder(文件夹结构)
|
||||
|
||||
## 1. 项目定位
|
||||
@@ -227,6 +227,63 @@ ctx.slots.register({
|
||||
| 侧边栏区块 + 三按钮 + ≡ 拖动 | ✅ v1 已实现 | `01_content/src/client/` |
|
||||
| 项目子座位协议 + travelatlas 入驻 | ✅ v1 已实现 | 同上 + dsh-travelatlas/src/client |
|
||||
| 服务端健康路由 | ✅ 已实现 | `01_content/src/index.ts` |
|
||||
| 视图菜单去分组、编辑模式、添加面板、快捷方式、埋点、i18n | ✅ 本窗口(v2)已实现并构建,待重启后 GUI 验收 | `01_content/src/client/`(§5.3–§5.7) |
|
||||
| 视图菜单去分组、编辑模式、添加面板、快捷方式、埋点、i18n | ✅ 本窗口(v2)已实现并验收 | `01_content/src/client/`(§5.3–§5.7) |
|
||||
| travelatlas 卡片协议 v2 | ✅ 本窗口已实现并构建(并行重写覆盖后已重新应用) | `dsh-travelatlas/src/client/index.tsx` |
|
||||
| 多项目分栏框架(openSplit 声明式多栏) | 📝 设计定案(§12),代码待新项目开工时实现 | PRD §12 |
|
||||
|
||||
## 12. 多项目分栏框架(v3 设计,已定案、待实现)
|
||||
|
||||
> 状态:设计定案(2026-08-16 与用户讨论确认)。代码待第一个新项目(如建筑审图)开工时实现,
|
||||
> travelatlas 可顺带迁入验证。本节为设计规格,不属于 v2 已实现范围。
|
||||
|
||||
### 12.1 背景与目标
|
||||
|
||||
- 用户后续项目(建筑审图 / 网页动画生成 / 机器人工作台等)都将以「内容栏并置 + 右侧对话」的
|
||||
形式入驻工作台,栏数 1..n 各异(审图 3 栏、动画 4+ 栏、机器人 2 栏);
|
||||
- 把 travelatlas 的分栏几何逻辑抽为工作台统一能力:**框架管几何,项目管声明**;
|
||||
- 目标:新项目接入成本 ≈ 声明一个 SplitSpec(约 20 行),不复制任何几何代码。
|
||||
|
||||
### 12.2 openSplit 协议(owner props 扩展,向后兼容)
|
||||
|
||||
- owner props v2 增加可选回调 `openSplit(spec: SplitSpec)`(引用稳定);
|
||||
- 项目卡片 onClick 时调用(与 `reportUsed(id)` 并列);
|
||||
- 不调用 openSplit 的项目不受框架约束(路线 A 逃生舱):可自行注册 `shell.overlay`
|
||||
实现任意自定义布局(travelatlas 现行分栏即属此类)。两条路线并存,互不排斥。
|
||||
|
||||
### 12.3 SplitSpec 声明
|
||||
|
||||
```ts
|
||||
type SplitSpec = {
|
||||
id: string // 项目 id(用于宽度持久化)
|
||||
title: string // 分栏标题(左上角)
|
||||
panes: SplitPane[] // 内容栏,从左到右 1..n
|
||||
}
|
||||
|
||||
type SplitPane = {
|
||||
id: string
|
||||
title: string
|
||||
width: { default: number; min: number; max: number }
|
||||
content:
|
||||
| { kind: 'iframe'; url: string } // 主推:同源站点路由(/xxx/site/)
|
||||
| { kind: 'component'; component: any } // 预留:项目打包的 React 组件(实现时验证跨插件引用可行性)
|
||||
}
|
||||
```
|
||||
|
||||
示例(建筑审图 3 栏):`panes: [图纸, 规范]` + 自动对话栏。
|
||||
|
||||
### 12.4 框架职责
|
||||
|
||||
- 几何:查找会话根(`[data-phase]` 探测 + 结构化甄别,与 travelatlas 现行 hack 一致,
|
||||
集中一处维护)、marginLeft 右挤对话区、分隔线拖宽(逐栏 width 约束)、Esc/✕ 退出、
|
||||
会话关闭或结构变化自动退出;
|
||||
- 对话栏:固定最右,宽度 240–480 可拖;
|
||||
- 持久化:`dsh.worktable.split.v1` = `{ [projectId]: { [paneId]: width, chat: width } }`;
|
||||
- iframe 内容:同源路由约定 `/<project>/site/`(项目服务端自行托管,travelatlas 模式),
|
||||
URL 校验 http/https,新标签打开入口同 travelatlas;
|
||||
- 内容形式:`iframe` 为主;`component` 预留位,待深度交互项目出现时验证并实现。
|
||||
|
||||
### 12.5 实施时机
|
||||
|
||||
- 待第一个新项目开工时在本窗口实现;travelatlas 迁入(改为声明式)作为验证用例;
|
||||
- 实现不改动 §5.3 卡片协议既有字段,仅新增 openSplit;v2 卡片与老项目不受影响。
|
||||
|
||||
|
||||
@@ -154,3 +154,25 @@
|
||||
- 备注 3(验证教训):esbuild 默认 ascii charset,非 ASCII 字符在 bundle 里以 \u{...} 转义
|
||||
输出,且 pwsh Get-Content/IWR 按 ANSI 解码 UTF-8——校验 emoji 需用 read 工具读 UTF-8
|
||||
或直接查转义序列(如 1F30F)。
|
||||
|
||||
## 补记(checkpoint + GitHub 推送)
|
||||
|
||||
- 用户确认效果稳定,执行 checkpoint:dsh-worktable 建 git 仓库(branch main),
|
||||
本地身份 Aisland <eechaoserebus@gmail.com>,首次提交 d58cbc5(20 文件;
|
||||
node_modules/lib/03_local/日志按根 .gitignore 排除);README「当前状态」段同步为 v2。
|
||||
- 推送到 GitHub 私有仓库 https://github.com/Aisland-SJL/dsh-worktable:
|
||||
安装 gh CLI(winget,v2.97.0);设备授权流程首次因网络超时失败——根因为系统代理
|
||||
(127.0.0.1:7890)只作用于 WinINET,gh CLI 需显式 HTTPS_PROXY 环境变量;
|
||||
带上代理重试成功,账号为 Aisland-SJL,创建私有仓库并推送 main=d58cbc5,已验证同步。
|
||||
- 遗留:lib/ 未入库(clone 后需 npm install && npm run build);
|
||||
01_content 内缺 README.md/LICENSE(开源独立发布前补);版本号仍 0.1.0(开源前升 0.2.0)。
|
||||
|
||||
## 补记(多项目分栏框架设计定案)
|
||||
|
||||
- 用户规划后续项目:建筑审图工作台(图纸+规范+对话 3 栏)、网页动画生成工作台(4+ 栏)、
|
||||
机器人工作台(2 栏)等,均以「内容栏并置 + 右侧对话」形式入驻工作台。
|
||||
- 讨论结论(用户确认):路线 B——工作台内置「声明式多栏」分栏框架(openSplit(spec) 回调),
|
||||
框架管几何(会话根探测/挤右栏/拖分隔线/Esc/宽度持久化),项目管声明(panes 数组 + iframe URL
|
||||
为主、component 预留位);路线 A(项目自带 overlay)作为逃生舱并存。
|
||||
- 落地:PRD §12 写入设计规格(SplitSpec/框架职责/实施时机),代码待第一个新项目开工时实现;
|
||||
§11 状态表同步;本窗口暂不写代码(用户选择「先落设计」)。
|
||||
|
||||
Reference in New Issue
Block a user