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

5.9 KiB
Raw Permalink Blame History

对象视图 / 数据集视图 交互操作 — 实现计划

依据:D:\Projects\GEOPRO\Geopro3.0 菜单.xlsx「客户端」页签(菜单/交互规格,权威)。 后端提交体:见 ../specs/2026-06-13-batch2-object-dataset-dialogs.md§B 提交体 / §E 源码补全,均已由线上压缩源码确证)。 约定:二维/三维相关交互先占位;插件机制暂缓(待与用户深入讨论)。


一、已完成(已编译 + 单测通过)

Batch 1 — 交互骨架 + 读联动 + 删除 + 筛选

  • ApiClient putJsonAsync/deleteAsync删除真实GS/TM/DS+ 控制器 mutationSucceeded/Failed + 刷新。
  • 对象树右键菜单9 项):属性/异常详情/删除 真实;显示隐藏/定位=占位。
  • 数据集右键菜单:详情/属性/删除 真实。
  • 快速筛选器(对象树、数据集);数据集单击 tooltip手势修复 #1复选框命中判定

Batch 2 — 动态表单引擎 + 编辑/新建(⚠️ 提交体字段需修正,见下)

  • DynamicFormEditor(按 getDynamicForm 渲染)、ObjectFormDialog(拉 schema→渲染→校验→提交
  • 编辑保存 PUT、新建 TM POST、插件列出 model/list(点击占位)。
  • 数据层 DTO/parse/repo/controller 齐备。

⚠️ Batch 2 的提交体字段是早期错误版本typeId/type/structParentId/structParentConfType 与源码确证的真实字段不符,须按下方 P0 修正后才能真正保存成功。


二、关键认知2026-06-15源码已确证

  • 提交体以 bundle 源码为准线上前端真实请求构造OpenAPI 为有误的生成文档)。详见 spec §B / §E。
  • 菜单规格以 xlsx 为准(现有菜单结构已对齐,勿按原型删减)。
  • 已确证GS/TM 提交体字段、properties.<fieldCode> 嵌套、displayComponentType 全集映射、 requiredType1=必填 / 2=只读 / 其他=可选)、导出 body。
  • 唯一开放点:插件机制web 无"ds→插件"交互xlsx 为客户端原创设计)→ 暂缓,待讨论。

三、实现计划(不含插件;每步带验证)

优先 任务 验证
P0 修提交体字段ObjectFormDialog.onConfirmGS→{gsTypeId, parentId(仅新建), name, responsiblePersonName, properties}TM→{tmTypeId, parentId, parentType:"1", name, properties}(+编辑 id)。删除 typeId/type/structParentId/structParentConfType 字段比对 spec §B真实保存成功写操作留用户实测
P0 DynamicFormEditor 按 §E.1 全集重写控件映射1/5文本·2只读·3复选·4下拉·6日期·7时间·8日期时间·9多行·10数字·11树选·默认步进数字requiredType 2=只读禁用。 各 comp 类型渲染正确、只读字段禁用
P0 顶层固定字段GS 加 gsTypeId 下拉(来源 GET /business/project/gsList/{projectId}[{name,gsTypeId}]) + responsiblePersonName + nameTM 新建加 tmTypeId 下拉(来源 queryTmType?projectId=&gsId=) + name 新建表单含这些项;编辑态正确预填/禁用
P1 项目根节点按 GS 处理:可右键「新增检测对象(GS)/新增方法对象(TM)/属性」;parentId=根 id。 根节点弹菜单、新建走对应对话框
P1 新建 GS 打通右键新建GS → getDynamicForm(type=1,无id) → 表单 → POST /gsObject 弹表单、提交(写操作留用户实测)
P1 新建 TM 修正:方法类型 queryTmType;提交体随 P0父对象=右键节点。 弹表单、提交
P2 导入 DS 向导TM 右键「导入DS(1..n)」→ 选类型 → getDynamicForm(type=6 脚本参数) → 选文件 → checkImportimport(multipart {file,dsTypeId,projectId,structParentConfType,structParentId,scriptCode,scriptParamListJsonStr})。 流程走通、文件上传
P2 导出对话框:数据集右键「导出」→ 选模板 → POST /templateExport/export {dsObjectIdList:[该ds],templateId};模板来源 localStorage template.fileTemplateList / queryFileType 导出触发

三补、其余"可做但未做"的编辑操作2026-06-15 盘点)

优先 任务 来源/接口 状态
P1 #1 数据集描述编辑保存(原版"数据集属性可编辑"实为富文本描述/备注编辑) 加载 GET /dsObject/getDetail/{id}.attachedParameters.deltaContent保存 PUT /dsObject/updateDsObject/ {dsObjectId, description, attachedParameters:{deltaContent}}(源码确证) 本轮做:客户端无 Quill简化为纯文本/富文本 QTextEditdeltaContent 用最小 delta 承载
P1 #3 面板级「添加+」按钮对象列表→新建GS/TM数据集列表→导入 纯前端,复用现有 newGs/newTm/import 入口 本轮做
P2 #4 异常→异常体 拖拽合并(对象异常面板) exception/*(合并接口待查) 未做
P2 #5 数据集任务:新增处理任务/保存处理结果 与模型/插件流程耦合 未做(随插件)
P3 #2 属性面板内联编辑 + 实时跳转(属性指向另一 ds 时点击跳转新建详情页) 未做
P3 #6 数据详情处理类编辑(异常标注/色阶/白化/滤波/另存为) 与渲染耦合 未做(随 2D/3D 或专项)

四、暂缓 / 排除

  • 插件机制spec §E.3web 无对应交互,需产品/后端决策(客户端反查 model/list+各模型 dsObjectList,或后端加"按 ds 列模型"接口)。待与用户深入讨论后再实现。
  • 2D/3D 相关:显示/隐藏、定位、双击地图获焦 —— 占位,随 2D/3D 批次。
  • GS 勾选三态语义(屏蔽不改状态、可恢复)、项目根勾选 —— 随 2D/3D 批次。
  • 动态表单只读规则细节:以 §E.1 的 displayComponentType=2 / requiredType=2 为准。