geopro/docs/superpowers/plans/2026-06-13-object-dataset-i...

67 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 对象视图 / 数据集视图 交互操作 — 进度 · 问题 · 下步计划
依据:`D:\Projects\GEOPRO\Geopro3.0 菜单.xlsx`「客户端」页签(对象列表 / 数据集列表 交互规则)。
约定:二维/三维视图相关交互**先占位**;其余尽量接真实后端。
配套API 实地研究见 `../specs/2026-06-13-batch2-object-dataset-dialogs.md`
---
## 一、已完成(已编译 + 单测通过;写操作待真实提交验证)
### Batch 1 — 交互骨架 + 读联动 + 删除 + 筛选(已并入本分支)
- **ApiClient**:补 `putJsonAsync` / `deleteAsync`
- **删除**(真实 DELETE`deleteObjectAsync`(GS/TM) / `deleteDatasetAsync`;控制器 `deleteObject`/`deleteDataset` + `mutationSucceeded/Failed`,成功后刷新结构 / 数据集列表。
- **对象树右键菜单**9 项):属性、异常详情(`showObjectExceptions`GS→收集其下 TM 复用 setCheckedTms真实接现有面板删除真实显示隐藏/定位=2D/3D 占位。
- **数据集右键菜单**:数据集详情、属性 真实;删除真实。
- **快速筛选器**:对象树(全选测线/取消/反选);数据集(类型多选 + 创建日期,客户端隐藏不匹配行)。
- **数据集单击 tooltip**:名称/类型/创建时间。
- **手势修复 #1**:点对象树复选框只切勾选、不再触发"选中"重载viewport 事件过滤 + 复选框命中判定)。
### Batch 2本轮— 动态表单引擎 + 编辑保存 + 新建 TM + 插件列表
- **动态表单引擎** `DynamicFormEditor`:按 `project/getDynamicForm` 字段元信息渲染
comp1=文本(dtype2/3 数字+范围校验) / comp4=下拉(optionsObject) / comp6=日期 / comp7=日期时间 /
comp8=多行;必填(requiredType==1)标红 *;编辑态用 properties 预填。
- **ObjectFormDialog**:拉真实 schema → 渲染 → 校验 → 提交。
- **编辑保存**:右键编辑 → PUT `/business/{gs|tm}Object` → 成功刷新结构,失败回显后端 msg。
- **新建 TM**:右键 GS → `queryTmType` 选型 → 空表单 → POST带 structParentId/structParentConfType
- **插件子菜单**:数据集右键「插件」列出真实 `model/list`(启动缓存);点击=占位 toast。
- 数据层:`EditableForm`/`TmTypeOption`/`ModelInfo` DTO + parse`StructNode.typeId`
repo `loadEditableFormAsync`/`queryTmTypesAsync`/`submitObjectAsync`/`listModelsAsync`
controller `currentProjectId()`
---
## 二、已知问题 / 风险
1. **保存/新建请求体为推断**(最高优先级风险)
- OpenAPI 未文档化 POST/PUT body原版前端在 Vue 组件动态拼装,压缩代码难 100% 还原。
- 当前发送 `{typeId,id,type,projectId,properties:{fieldCode:值}}`(新建另带父上下文)。
- **需用户真实提交验证**:失败时对话框回显后端 msg用户提供浏览器 Network 真实 body 后定版。
2. **动态表单只读规则未定**:原版禁用了"测量值"字段(名称/电极数/间距/线长,落在 properties
无显式 disabled 标志可依,当前一律可编辑(不发请求时无害);接保存后需确认规则。
3. **菜单文档与实现的不一致**(用户已知,暂不改):
- 项目根("也是一个 GS")当前为不可选中/勾选的纯容器。
- GS 勾选用 Qt 自动三态,会改写子 TM 勾选态;文档 rule4 要求"屏蔽不改状态、可恢复"(随 2D/3D 做)。
- GS 选中是否返回其下全部 ds未实测后端。
4. **2D/3D 相关交互**:显示/隐藏、定位、双击地图获焦 — 按约定占位。
---
## 三、下一步计划
| 优先 | 任务 | 前置 |
|---|---|---|
| P0 | 用户实测 编辑保存 / 新建TM / 删除;据真实 body 定版字段 | 用户测试 |
| P1 | 新建 GSGS 类型来源:研究原版「项目结构\添加」,疑似需 gsTypeId | Playwright |
| P1 | 导入 DS 向导TM.dsList 选类型 → query/script → 文件 → checkImport → import含 multipart 上传) | 抓 import 细节 |
| P2 | 导出对话框queryExportObject 选对象 + 模板 → templateExport/export | 抓 export body |
| P2 | 插件「关联过滤 + 调用」(某 ds 适用哪些模型 + 模型任务流) | 研究原版 |
| P3 | 动态表单只读规则、GS 三态语义(与 2D/3D 批次合并)、项目根可选中 | — |
### 提交体捕获方法(不动生产数据的前提下尽量做)
- 优先:用户在原系统真实操作一次,复制 Network 请求体。
- 备选:继续分析 `index-*.js` 路由分包中数据管理组件的保存处理逻辑。