# 数据集详情视图 · 交互 100% 复刻台账 > 目标:详情视图(datasetInfo)逐交互 1:1 复刻原版 web(`D:\Git\lanbingtech\commercial-admin`)。 > 原则:对照原版源码找全差距;凡已实现的视图,其后端接口均已具备(客户端只需新增对应调用)。 > 范围:仅**已实现的 5 个 ddCode 视图**。雷达/GPR/电磁/3D 模型家族(客户端将重构、需求未定)整体搁置。 > 日期:2026-06-22 立账。 ## 0. 总览结论 | 视图 (ddCode) | 客户端类 | 复刻完成度 | 差距集中点 | |---|---|---|---| | 电极轨迹 dd_trajectory_data | TrajectoryStrategy / TrajectoryMapView 等 | ✅ **无差距** | 地图/列表/高程齐全;原版「导出」按钮原版自身亦未实现 | | 接地电阻 dd_ert_measurement_gr_data | GrMeasurementStrategy / BarChartView | ✅ **无差距** | 柱状图/列表齐全;原版地面信息/模型/脚本/导出按钮原版自身亦未实现 | | ERT 原始数据 dd_ert_measurement_data | MeasurementStrategy / RawDataChartView | ✅ **基本接通** | 工具条 1:1,写操作全接;仅 M14 框选后置(重型,已登记) | | 反演等值面 dd_inversion_data | ErtInversionStrategy / RawDataChartView(原数据) + GridDataChartView(网格) | ✅ **基本接通** | 网格/白化/滤波/异常CRUD/自动标注/另存为/色阶均接;仅 I9 图上绘制、I14 富文本、I3 tmObjectId 透传后置 | | 网格白化 dd_grid | GridStrategy / DataTableView | ✅ **已通** | 分页列表 + 「反演」功能按钮(载荷 functionList 驱动,复用 InversionFormDialog) | **架构事实**:客户端 `ApiDatasetRepository` 当前只有 load(读)操作,无写操作。所有反演/保存/过滤/白化/滤波/异常写接口需新增客户端调用,沿用 `ApiClient(get/postJsonAsync) → ApiBatch → ApiDetailLoad` 模式(或为写操作引入独立的 command 调用路径)。 > ⚠️ 实现前务必直接读原版 `src/apis/datasetInfo/index.js` 与对应 `.vue` 复核请求体字段名(本台账 API 字段来自探查 agent 摘录,端点/方法可信,个别字段名以源码为准)。 --- ## 1. 共享基础设施(先建,多视图复用) 这些组件被多个交互复用,应优先抽象,避免各视图各写一份。 ### 1.1 反演动态表单对话框(InversionForm) - **复用于**:measurement「反演运算」「生成视电阻率」、grid「反演」。 - **流程**:① 查模型列表 → ② 选模型 → ③ 按 typeId 拉动态表单字段 → ④ 填参 → ⑤ 提交。 - **API**: - 模型列表 `GET /business/outerInversion/query/script?dsObjectId=`(measurement/grid 通用) - 动态表单 `POST /business/project/getDynamicForm` body `{projectId, type:6, typeId}` - 提交反演 `POST /business/outerInversion/submitInversionTask` body `{dsId, properties, ...}` - 生成视电阻率 `POST /business/dd/ert/measurement/createVisualResistivityData` body `{dsObjectId, scriptId, scriptParamListJsonStr}` - **客户端现状**:无。需建 `InversionFormDialog`(动态字段渲染:分组卡片 + Select 为主)。 ### 1.2 色阶配置编辑器(已存在,复用) - **已有**:`ColorScaleConfigDialog`(被 GridDataChartView 使用,且与三维体右键色阶共用)。 - **复用目标**:measurement 散点「色阶配置」、inversion 原数据散点「色阶配置」。 - **API**:查 `POST /business/lvl/colorGradation/getDetail`,存 `POST /business/lvl/colorGradation`。 - **注意**:measurement 走 `businessCode=R0, type=3`;inversion 原数据 `type=1`、网格 `type=2`。散点上色用 `colorSvc_`,编辑后需重建并重绘散点。 ### 1.3 另存为对话框(SaveAs) - **复用于**:measurement 另存为、inversion 另存为。 - **measurement**:`POST /business/dd/ert/measurement/saveRawData` `{dsId, operationType(1新增/0覆盖), name?}`(含新增/覆盖单选) - **inversion**:`POST /business/dd/ert/inversion/saveAsData` `{dsObjectId, name}`(仅名称) --- ## 2. ERT 原始数据(measurement / RawDataChartView) 客户端 measurement 工具条已 1:1 建出(`buildMeasurementToolbar`)。逐控件差距: | # | 控件 | 原版行为 | 原版 API | 客户端现状 | 实现要点 | |---|---|---|---|---|---| | M1 | 显示/隐藏 | popconfirm→改全部点可见性(持久化) | `POST /business/dd/ert/measurement/saveDisplayStatus` `{dsObjectId, ids[], status}` | ✅ **已通**(onShowHide:确认→调接口→本地切换) | — | | M2 | 表格行可见性 switch | 行级 popconfirm→改单点 | 同 M1(ids=[record.id],status 取反) | 🔸 **后置**(DataTableView 行级开关列交互重,源 saveDisplayStatus 已具备) | 见 §6 | | M3 | 数据过滤 | 弹窗(直方图+min/max)→生成过滤后数据集 | 查 `GET /business/scatterPlotDataFilter/getDataFilterConfig?dsObjectId&vFieldCode`;应用 `POST /business/scatterPlotDataFilter` `{sourceDsObjectId, sourceVFieldCode, min, max}` | ✅ **已通**(ScatterFilterDialog:范围 min/max + 应用);直方图绘制后置 | 直方图见 §6 | | M4 | X 轴下拉(平距/斜距) | 本地换列重绘 | 无 | ✅ 已通(replotForAxis) | — | | M5 | Y 轴下拉(伪深度/+高程/层数) | 本地换列重绘 | 无 | ✅ 已通 | 层数为 no-op(原版亦无数据) | | M6 | V 值下拉 | 重新请求散点+色阶 | `GET .../scatter/graph?vFieldCode=` + `POST .../getDetail{businessCode=新V}` | ✅ **已通**(reloadForVValue 带 vFieldCode 重载) | — | | M7 | 值类型下拉(线性/倒数/对数) | 本地换显示 | 无 | ✅ **已通**(applyValueType 本地变换重上色) | — | | M8 | 色阶配置 | 弹窗编辑+保存 | getDetail/colorGradation(见 1.2) | ✅ **已通**(复用 ColorScaleConfigDialog;properties 含 colorBar+lineConfig+labelConfig) | — | | M9 | 生成视电阻率 | 反演弹窗(模型锁定视电阻率脚本) | createVisualResistivityData(见 1.1) | ✅ **已通**(InversionFormDialog::ApparentResistivity:下拉 disabled+锁 `script_visual_resistivity_data`,对齐原版) | — | | M10 | 反演运算 | 反演弹窗 | submitInversionTask(见 1.1) | ✅ **已通**(InversionFormDialog::Inversion) | — | | M11 | 另存为 | 新增/覆盖弹窗 | saveRawData(见 1.3) | ✅ **已通**(SaveAsDialog::RawData) | — | | M12 | 导出 DAT | 下载 base64 | `GET /business/dd/ert/measurement/rs2d/export?dsId&electrodePosition=2&ipDataMark=0&typeMeasurement=0` | ✅ **已通**(exportDat,参数对齐原版) | — | | M13 | [i] 信息 | 点选看 A/B/M/N/Pseu/Row | 无(本地) | ✅ **已通**(toggleInfoMode:信息模式点选散点看属性) | — | | M14 | 框选/点选模式 | enter/exitSelectMode | 无(本地) | 🔸 **后置**(Qwt 橡皮筋框选+选区联动隐藏成本高,保留占位提示) | 见 §6 | --- ## 3. 反演等值面(inversion) ### 3.1 网格视图(GridDataChartView) | # | 控件 | 原版行为 | 原版 API | 客户端现状 | 实现要点 | |---|---|---|---|---|---| | I1 | 网格(化) | 2步向导(选算法+参数)→网格化 | `GET .../queryAlgorithmModel/{ds}`;`GET .../getRawData/{ds}`;`POST /business/dd/ert/inversion/grid`(actionCode,x/y min/max,**xsize/ysize=点数**,xSpacing/ySpacing=间距,vmin/vmax,saveDataValueType) | ✅ **已通**(GridWizardDialog 2步;xsize=点数 xPoints/ySize=yPoints,间距走 xSpacing/ySpacing,对齐原版 toGridTheData) | — | | I2 | 色阶配置 | 弹窗 | getDetail/colorGradation | ✅ **已通**(本地生效;网格视图色阶不持久化到后端,与原版网格路径一致) | — | | I3 | 白化 | 弹窗(3种方式) | `POST /business/dd/ert/inversion/whitenedData`;文件列表 `POST /business/dsObject/queryWhitenedDataList` | ✅ **已通**(白化弹窗+提交);`tmObjectId` 暂兜底空串 | tmObjectId 透传见 §6 | | I4 | 滤波处理 | 弹窗(滤波器树+矩阵) | 列表 `GET /business/filter/queryFilter`;增 `POST /business/filter`;删 `DELETE /business/filter/delete/{id}`;应用 `POST /business/dd/ert/inversion/filterData` | ✅ **已通**(滤波弹窗含滤波器 CRUD+应用) | — | | I5 | 显示异常 | 本地显隐 | 无 | ✅ 已通 | — | | I6 | 显示等值线标注 | 本地显隐 | 无 | ✅ 已通 | — | | I7 | 显示等值线提示 tooltip | 本地显隐 | 无 | ✅ **已通**(chkContourTip 接 hover tooltip 显隐) | — | | I8 | 简化容差滑块 | 防抖本地重算等值线(0~2,步0.1) | 无 | ✅ **已通**(防抖 applySimplify→setSimplifyTolerance 真生效) | — | | I9 | 异常 创建 | 弹窗(类型/名称/备注)+图上绘形 | 类型 `GET .../queryExceptionTypeByProjectIdAndType/{pid}/{type}`;名建议 `POST /business/exception/getExceptionName`;新增 `POST /business/exception` | ✅ **表单已通**(ExceptionDialog:类型/名建议/备注+提交);🔸 **图上绘形后置** | 图上绘制见 §6 | | I10 | 异常 删除 | 表格行删 | `DELETE /business/exception/{id}` | ✅ **已通**(AnomalyTablePanel deleteRequested) | — | | I11 | 异常 详情/编辑 | 抽屉(名称/备注/样式) | `PUT /business/exception` | ✅ **已通**(ExceptionDetailDialog;只发 `{id, exceptionName, remark}`,对齐原版局部更新) | — | | I12 | 异常 定位 | 本地高亮+缩放(防抖) | 无 | ✅ **已通**(AnomalyTablePanel locateRequested→图上定位) | — | | I13 | 自动标注 | 弹窗(规则+预览) | 预演 `POST /business/exception/exception-mark/execute`;批量存 `POST /business/exception/batch/create` | ✅ **已通**(openAutoAnnotation 自动标注弹窗) | — | | I14 | 富文本描述保存 | Quill→保存 | 存 `PUT /business/dsObject/updateDsObject/`;取 `GET /business/dsObject/getDetail/{ds}` | ✅ **保存链路已通**(DescriptionPanel saveRequested→saveDescription,取/存均通);🔸 **富文本降级为纯文本** | Quill 富文本见 §6 | | I15 | 另存为 | 弹窗(名称) | `POST /business/dd/ert/inversion/saveAsData` | ✅ **已通**(SaveAsDialog) | — | ### 3.2 原数据散点视图(RawDataChartView 默认工具条) | # | 控件 | 原版行为 | 客户端现状 | 实现要点 | |---|---|---|---|---| | O1 | 网格 | 同 I1 网格化向导 | ✅ **已通**(复用 GridWizardDialog) | — | | O2 | 色阶配置 | 散点色阶(type1,businessCode 空) | ✅ **已通**(openInversionColorScale;properties 含 colorBar+lineConfig+labelConfig) | — | | O3 | 另存为 | 同 I15 | ✅ **已通**(SaveAsDialog::Inversion) | — | | O4 | 图形格式下拉 | 散点↔2D直方图等值线(原版 disabled) | ✅ 不做(原版自身禁用) | — | --- ## 4. 网格白化数据(grid / DataTableView) | # | 控件 | 原版行为 | 原版 API | 客户端现状 | 实现要点 | |---|---|---|---|---|---| | G1 | 反演 | 反演弹窗 | submitInversionTask(见 1.1) | ✅ 已接 | DataTableView 顶部功能按钮行(载荷 functionList 驱动,仅 dd_grid 非空),点 inversion → 复用 InversionFormDialog(Mode::Inversion) | | G2 | 分页 | 服务端分页 | grid/rows pageNo/pageSize | ✅ 已通 | — | --- ## 5. 建议执行顺序(分阶段) 1. **阶段 A · 共享基础设施** - InversionFormDialog(模型列表+动态表单+提交)→ 一次解锁 M9/M10/G1。 - SaveAs 弹窗(measurement + inversion 两形态)。 - 色阶配置接入散点(复用 ColorScaleConfigDialog)→ M8/O2。 2. **阶段 B · measurement 主交互** - M1/M2 可见性持久化、M11 另存为、M12 导出、M6 V值重载、M7 值类型、M3 数据过滤。 - M13/M14 信息/框选(交互重,最后)。 3. **阶段 C · inversion 写操作** - I1/O1 网格化向导、I15/O3 另存为。 - I9~I13 异常 CRUD + 自动标注。 - I3 白化、I4 滤波。 - I7 tooltip、I8 简化容差真生效、I14 描述保存复核。 4. **阶段 D · grid** - G1 反演按钮(阶段 A 完成后顺带)。 > 每个交互按 TDD:先对 repository 写方法/解析写测试(mock ApiClient),再接 UI;UI 视觉对照原版。 --- ## 6. 复刻收尾状态(2026-06-22) 三份审查后的修正项已落地,build 通过 + 测试全过(285/285)。 ### 6.1 已 100% 接通项 - **measurement(M1~M13)**:显隐持久化、数据过滤(范围)、X/Y/V/值类型下拉、色阶配置、生成视电阻率(下拉锁 `script_visual_resistivity_data`)、反演运算、另存为、导出 DAT、[i] 信息点选——全部接通并对齐原版。 - **inversion 网格(I1~I8、I10~I13、I15)**:网格化向导(xsize/ysize=点数,对齐 toGridTheData)、色阶、白化、滤波(含滤波器 CRUD)、显示异常/标注/tooltip、简化容差真生效、异常删除/详情编辑/定位、自动标注、另存为——全部接通。 - **inversion 原数据散点(O1~O3)**:网格化、色阶(type1)、另存为——全部接通;O4 原版自身禁用,不做。 - **grid 白化(G1/G2)**:反演按钮(functionList 驱动)、分页——已通。 ### 6.2 审查修正项(本轮) - **重复 connect(M13/M14)**:删除 `btnInfo`/`btnMarquee` 残留的 `clicked→showNotImplemented`,消除信息按钮多弹「暂未实现」、框选按钮单击弹两次;btnInfo 保留 checkable+toggled(信息模式),btnMarquee 保留单条占位提示。 - **异常详情更新字段(I11)**:原版 `contourPage.vue onOk` 走 `PUT /business/exception` 局部更新,**仅发 `{id, exceptionName, remark}`**(线样式是另一条独立 PUT,且抽屉样式控件 disabled)。客户端 `ExceptionDetailDialog::onConfirm` 已对齐:不再附带/覆盖 `legend`。 - **色阶 properties 补齐(M8/O2)**:原版散点路径 `newLvlColorLevel` 的 `properties` 含 `colorBar` + `lineConfig{showLines,color,lineType}` + `labelConfig{showLabels,color}`(battery/scatters 仅这三块,不含等值面专属的 lvlSchemeType/logLinesCount/equalAreaLayerCount)。客户端两处散点保存已补齐这三块(新增 `buildColorScaleProperties` 复用 `dlg.lineConfig()`)。`templateId` 原版非必需,客户端按原版处理。 ### 6.3 self-check 结论(无需改) - **#4 视电阻率模型锁定**:`InversionFormDialog::ApparentResistivity` 已 `modelCombo_->setEnabled(false)` 且锁定 `code==script_visual_resistivity_data` 的项——与原版 `InversionDialog.vue`(静态 `disabled` + 锁脚本)一致。 - **#5 网格 xsize/ysize 绑点数**:`GridWizardDialog` 的 `xSize_/ySize_` 是「X/Y点数」(1~300,默认 100),`buildGridToBody` 映射 `xsize←xSize`、间距走独立 `xSpacing←xSpacing_`——与原版 `GridDialog.vue toGridTheData`(`xsize:xPoints`、`xSpacing:xInterval`)一致。 ### 6.4 明确后置 / 降级项(本次不实现,重型或 Qt 受限) | 项 | 原因 | 后续所需 | |---|---|---| | **M14 框选/点选模式** | Qwt 橡皮筋框选 + 选区联动隐藏成本高,原版 enter/exitSelectMode 交互重 | 接入 QwtPlotPicker(RubberBand 矩形)+ 选区命中→批量 saveDisplayStatus;保留占位提示 | | **M2 行级可见性 switch** | DataTableView 需新增可选开关列 + 行级 popconfirm 交互 | 给 measurement 列表加 optional 开关列,复用 saveDisplayStatus(ids=[record.id],status 取反) | | **M3 过滤直方图** | 过滤范围已通,仅缺直方图绘制(须取 getDataFilterConfig 分桶并渲染) | 在 ScatterFilterDialog 加直方图视图(分桶 + min/max 区间叠加) | | **I9 异常图上绘形** | 表单已通;图上交互绘制多边形/折线/点(橡皮筋 + 顶点编辑)属重型 Qwt 交互 | 接入图上绘制工具(绘形→坐标回填 location),与表单提交合流 | | **I14 Quill 富文本** | 原版 attachedParameters.deltaContent 为 Quill Delta;Qt 暂降级为纯文本 | 引入富文本编辑器(QTextEdit 富文本 ↔ Delta 互转)或保持纯文本兜底 | | **I3 白化 tmObjectId 透传** | 客户端视图未透传 `structParentId`(白化模板列表用),现兜底空串 | 上游改造:数据集列表把 `structParentId` 接进视图(属上游数据流改造) |