67 lines
4.6 KiB
Markdown
67 lines
4.6 KiB
Markdown
# 对象视图 / 数据集视图 交互操作 — 进度 · 问题 · 下步计划
|
||
|
||
依据:`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 | 新建 GS(GS 类型来源:研究原版「项目结构\添加」,疑似需 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` 路由分包中数据管理组件的保存处理逻辑。
|