5.9 KiB
5.9 KiB
对象视图 / 数据集视图 交互操作 — 实现计划
依据: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 全集映射、 requiredType(1=必填 / 2=只读 / 其他=可选)、导出 body。 - 唯一开放点:插件机制(web 无"ds→插件"交互,xlsx 为客户端原创设计)→ 暂缓,待讨论。
三、实现计划(不含插件;每步带验证)
| 优先 | 任务 | 验证 |
|---|---|---|
| P0 | 修提交体字段(ObjectFormDialog.onConfirm):GS→{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 + name;TM 新建加 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 脚本参数) → 选文件 → checkImport → import(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,简化为纯文本/富文本 QTextEdit,deltaContent 用最小 delta 承载 |
| P1 | #3 面板级「添加+」按钮(对象列表→新建GS/TM;数据集列表→导入) | 纯前端,复用现有 newGs/newTm/import 入口 | 本轮做 |
| P2 | #4 异常→异常体 拖拽合并(对象异常面板) | exception/*(合并接口待查) |
未做 |
| P2 | #5 数据集任务:新增处理任务/保存处理结果 | 与模型/插件流程耦合 | 未做(随插件) |
| P3 | #2 属性面板内联编辑 + 实时跳转(属性指向另一 ds 时点击跳转新建详情页) | — | 未做 |
| P3 | #6 数据详情处理类编辑(异常标注/色阶/白化/滤波/另存为) | 与渲染耦合 | 未做(随 2D/3D 或专项) |
四、暂缓 / 排除
- 插件机制(spec §E.3):web 无对应交互,需产品/后端决策(客户端反查
model/list+各模型dsObjectList,或后端加"按 ds 列模型"接口)。待与用户深入讨论后再实现。 - 2D/3D 相关:显示/隐藏、定位、双击地图获焦 —— 占位,随 2D/3D 批次。
- GS 勾选三态语义(屏蔽不改状态、可恢复)、项目根勾选 —— 随 2D/3D 批次。
- 动态表单只读规则细节:以 §E.1 的
displayComponentType=2/requiredType=2为准。