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

69 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 对象视图 / 数据集视图 交互操作 — 实现计划
依据:`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.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简化为纯文本/富文本 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` 为准。