geopro/docs/superpowers/specs/2026-06-22-dataset-detail-i...

16 KiB
Raw Blame History

数据集详情视图 · 交互 100% 复刻台账

目标详情视图datasetInfo逐交互 1:1 复刻原版 webD:\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=3inversion 原数据 type=1、网格 type=2。散点上色用 colorSvc_,编辑后需重建并重绘散点。

1.3 另存为对话框SaveAs

  • 复用于measurement 另存为、inversion 另存为。
  • measurementPOST /business/dd/ert/measurement/saveRawData {dsId, operationType(1新增/0覆盖), name?}(含新增/覆盖单选)
  • inversionPOST /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→改单点 同 M1ids=[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 已通(复用 ColorScaleConfigDialogproperties 含 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 色阶配置 散点色阶(type1businessCode 空) 已通openInversionColorScaleproperties 含 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再接 UIUI 视觉对照原版。


6. 复刻收尾状态2026-06-22

三份审查后的修正项已落地build 通过 + 测试全过285/285

6.1 已 100% 接通项

  • measurementM1~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 审查修正项(本轮)

  • 重复 connectM13/M14:删除 btnInfo/btnMarquee 残留的 clicked→showNotImplemented消除信息按钮多弹「暂未实现」、框选按钮单击弹两次btnInfo 保留 checkable+toggled信息模式btnMarquee 保留单条占位提示。
  • 异常详情更新字段I11:原版 contourPage.vue onOkPUT /business/exception 局部更新,仅发 {id, exceptionName, remark}(线样式是另一条独立 PUT且抽屉样式控件 disabled。客户端 ExceptionDetailDialog::onConfirm 已对齐:不再附带/覆盖 legend
  • 色阶 properties 补齐M8/O2:原版散点路径 newLvlColorLevelpropertiescolorBar + lineConfig{showLines,color,lineType} + labelConfig{showLabels,color}battery/scatters 仅这三块,不含等值面专属的 lvlSchemeType/logLinesCount/equalAreaLayerCount。客户端两处散点保存已补齐这三块新增 buildColorScaleProperties 复用 dlg.lineConfig())。templateId 原版非必需,客户端按原版处理。

6.3 self-check 结论(无需改)

  • #4 视电阻率模型锁定InversionFormDialog::ApparentResistivitymodelCombo_->setEnabled(false) 且锁定 code==script_visual_resistivity_data 的项——与原版 InversionDialog.vue(静态 disabled + 锁脚本)一致。
  • #5 网格 xsize/ysize 绑点数GridWizardDialogxSize_/ySize_ 是「X/Y点数」1~300默认 100buildGridToBody 映射 xsize←xSize、间距走独立 xSpacing←xSpacing_——与原版 GridDialog.vue toGridTheDataxsize:xPointsxSpacing:xInterval)一致。

6.4 明确后置 / 降级项(本次不实现,重型或 Qt 受限)

原因 后续所需
M14 框选/点选模式 Qwt 橡皮筋框选 + 选区联动隐藏成本高,原版 enter/exitSelectMode 交互重 接入 QwtPlotPickerRubberBand 矩形)+ 选区命中→批量 saveDisplayStatus保留占位提示
M2 行级可见性 switch DataTableView 需新增可选开关列 + 行级 popconfirm 交互 给 measurement 列表加 optional 开关列,复用 saveDisplayStatusids=[record.id]status 取反)
M3 过滤直方图 过滤范围已通,仅缺直方图绘制(须取 getDataFilterConfig 分桶并渲染) 在 ScatterFilterDialog 加直方图视图(分桶 + min/max 区间叠加)
I9 异常图上绘形 表单已通;图上交互绘制多边形/折线/点(橡皮筋 + 顶点编辑)属重型 Qwt 交互 接入图上绘制工具(绘形→坐标回填 location与表单提交合流
I14 Quill 富文本 原版 attachedParameters.deltaContent 为 Quill DeltaQt 暂降级为纯文本 引入富文本编辑器QTextEdit 富文本 ↔ Delta 互转)或保持纯文本兜底
I3 白化 tmObjectId 透传 客户端视图未透传 structParentId(白化模板列表用),现兜底空串 上游改造:数据集列表把 structParentId 接进视图(属上游数据流改造)