16 KiB
数据集详情视图 · 交互 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/getDynamicFormbody{projectId, type:6, typeId} - 提交反演
POST /business/outerInversion/submitInversionTaskbody{dsId, properties, ...} - 生成视电阻率
POST /business/dd/ert/measurement/createVisualResistivityDatabody{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. 建议执行顺序(分阶段)
- 阶段 A · 共享基础设施
- InversionFormDialog(模型列表+动态表单+提交)→ 一次解锁 M9/M10/G1。
- SaveAs 弹窗(measurement + inversion 两形态)。
- 色阶配置接入散点(复用 ColorScaleConfigDialog)→ M8/O2。
- 阶段 B · measurement 主交互
- M1/M2 可见性持久化、M11 另存为、M12 导出、M6 V值重载、M7 值类型、M3 数据过滤。
- M13/M14 信息/框选(交互重,最后)。
- 阶段 C · inversion 写操作
- I1/O1 网格化向导、I15/O3 另存为。
- I9~I13 异常 CRUD + 自动标注。
- I3 白化、I4 滤波。
- I7 tooltip、I8 简化容差真生效、I14 描述保存复核。
- 阶段 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 收尾 6 项 —— 已全部接通(2026-06-23,commit ec4a7e8)
§6.4 原列的 6 项后置/降级项已全部实现,build app + test 全绿(318/318)。
| 项 | 状态 | 实现 / 残留边界 |
|---|---|---|
| M2 行级可见性 switch | ✅ | DataTableView 载荷驱动可交互开关列(toggleInteractive+rowIds,仅 measurement 置位),行级 popconfirm → saveDisplayStatus |
| M3 过滤直方图 | ✅ | 新增自绘 ScatterHistogramView(20 箱,选区高亮 + min/max 输入联动);拖拽刷选未做(原版用输入/滑块,非画布 brush) |
| M14 框选/点选模式 | ✅ | ScatterMarqueePicker 橡皮筋矩形 → ScatterPlotItem 选中红边高亮;显示/隐藏对选中子集操作(无选区回退全部)。复刻 box-select 变体;原版单击逐点选未做 |
| I9 异常图上绘形 | ✅ | ContourDrawTool 在等值面交互绘制 点/线/面/文字(先弹窗填类型/名称→图上绘制→newException);坐标表保留为兜底。文字类型无原版独立富文本样式编辑器 |
| I14 Quill 富文本 | ✅(降级可用) | DescriptionPanel 升级富文本(粗体/斜体/下划线/字色/字号/标题/列表)+ QuillDelta 与 Quill Delta 常见格式往返。Qt 无 Quill,不可字节级 1:1:未知 attributes/嵌入对象容错降级(保文本、丢样式、不崩) |
| I3 白化 tmObjectId | ✅(待联调验证) | openWhitening 经 getDsObjectDetail(dsId) 取 structParentId 作 tmObjectId。存疑:未实证 getDetail 响应含 structParentId,若不含需转方案 B(经 openDataset 链路透传) |
6.5 命名冲突修复
ScatterHistogram 名冲突(M3 widget 类 vs ScatterDataOps 分箱 struct)导致 desktop 目标曾无法链接(build.bat test 只建测试目标未暴露)→ widget 改名 ScatterHistogramView。教训:详情视图改动须 build.bat all 验证 app 链接,不能只 build.bat test。