4.6 KiB
4.6 KiB
对象视图 / 数据集视图 交互操作 — 进度 · 问题 · 下步计划
依据: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/ModelInfoDTO + parse;StructNode.typeId; repoloadEditableFormAsync/queryTmTypesAsync/submitObjectAsync/listModelsAsync; controllercurrentProjectId()。
二、已知问题 / 风险
-
保存/新建请求体为推断(最高优先级风险)
- OpenAPI 未文档化 POST/PUT body;原版前端在 Vue 组件动态拼装,压缩代码难 100% 还原。
- 当前发送
{typeId,id,type,projectId,properties:{fieldCode:值}}(新建另带父上下文)。 - 需用户真实提交验证:失败时对话框回显后端 msg;用户提供浏览器 Network 真实 body 后定版。
-
动态表单只读规则未定:原版禁用了"测量值"字段(名称/电极数/间距/线长,落在 properties)。 无显式 disabled 标志可依,当前一律可编辑(不发请求时无害);接保存后需确认规则。
-
菜单文档与实现的不一致(用户已知,暂不改):
- 项目根("也是一个 GS")当前为不可选中/勾选的纯容器。
- GS 勾选用 Qt 自动三态,会改写子 TM 勾选态;文档 rule4 要求"屏蔽不改状态、可恢复"(随 2D/3D 做)。
- GS 选中是否返回其下全部 ds,未实测后端。
-
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路由分包中数据管理组件的保存处理逻辑。