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

4.6 KiB
Raw Blame History

对象视图 / 数据集视图 交互操作 — 进度 · 问题 · 下步计划

依据:D:\Projects\GEOPRO\Geopro3.0 菜单.xlsx「客户端」页签(对象列表 / 数据集列表 交互规则)。 约定:二维/三维视图相关交互先占位;其余尽量接真实后端。 配套API 实地研究见 ../specs/2026-06-13-batch2-object-dataset-dialogs.md


一、已完成(已编译 + 单测通过;写操作待真实提交验证)

Batch 1 — 交互骨架 + 读联动 + 删除 + 筛选(已并入本分支)

  • ApiClient:补 putJsonAsync / deleteAsync
  • 删除(真实 DELETEdeleteObjectAsync(GS/TM) / deleteDatasetAsync;控制器 deleteObject/deleteDataset + mutationSucceeded/Failed,成功后刷新结构 / 数据集列表。
  • 对象树右键菜单9 项):属性、异常详情(showObjectExceptionsGS→收集其下 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 + parseStructNode.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 路由分包中数据管理组件的保存处理逻辑。