Files
weihai_erp/docs/多维表格(MDT)_改动纪要.md
T
xiaojibeier f3726f0810 first
2026-07-06 03:36:46 +08:00

8.2 KiB
Executable File
Raw Blame History

多维表格(MDT)改动纪要

面向产品/联调:本节为多维表与 配置保存 → 多维表衍生回写 的技术长文。按日变更摘录以仓库根目录 PROJECT_OVERVIEW.md →「8. showtime_weihai」 为准(与 src/data/appChangelog.js 对齐);本文件写实现细节与沿革,避免与总览表格完全重复。


1. 数据源 listed 与请求策略

说明
共用模块 src/views/material/mdt/dsListedApi.js:白名单映射 oa_bankoa_configoa_ledledger)等,未命中时 oa_<x>/api/<x>/listed 回退。
主视图 MultiDimensionalTable.vuegetListedApiForDsTable 从上述模块导入,避免与各处的 listed 路由分叉。
去重 POST /api/excel/dynamic/data_source/listed 成功后记 dataSourcesListedLoaded,并用 inflight Promise 合并并发调用。
并行 关联列 / 数据源列的 runRefreshLinkDisplayMap 内对 fetchLinkDisplayfetchDsDisplay 使用 Promise.all
预取 prefetchSideSheetCaches 对侧表预取并行;ensureLookupTable 对同一 target 用 Map 合并进行中的请求。

2. LinkPicker(关联记录 / 数据源选择弹窗)

说明
解析模块 src/views/material/mdt/pickerFieldResolve.jsresolvePickerDynLabel 等对动态表 cells 按列类型递归解析(查找引用、关联、数据源、单多选等),与主表网格侧语义对齐。
预热 warmupPickerResolveContext:对列中出现的 table: / ds: 及直接查表目标做 BFS,并合并各层列定义中出现的 数据源 以拉 listed 构建 dsMapsByTarget
动态表判定 linkTarget 规范化(如 Table:table:);仅凭「行内有 cells + 已有列定义」也会走格子解析路径,避免误用扁平行而退化为 row.id
可读标题兜底 配置列解析结果为内部 id 时,尝试扫描同类列推断可读文案;占位行号 #1#2 等兜底。
加载 UX element-loading-text="正在加载可选记录…"
刷新 pickerViewEpoch + 列表 :key,预热完成后强制刷新列表与已选 chips。
写回常量不出现在候选列表(2026-05-10) 目标为 oa_config 时,合并 listed 后 filter desc 命中 isOaConfigDescFromMdtWriteback 的行(与多维表 formatOaConstWriteDesc 文案一致:来自多维表格「…」· 列「…」),防止「表写回的常量」在弹窗再次被关联。实现:oaConfigListedMerge.jsOA_CONFIG_DESC_FROM_MDT_SUFFIX_RE)、LinkPicker.vue

3. 查找引用与关联列的体验与样式

说明
查找引用占位 无解析结果时:「—」+ 「无引用数据」(小字);整格占位使用 cell-lookup-placeholder-row(深灰、font-style: normal,与默认浅灰斜体计算列区分)。
悬停说明 buildLookupFailureExplanation / getLookupCellTooltip 用词改为白话(避免「对方表」「该行无录入」等偏开发措辞)。
关联列 标签可带 title;有 PK 但尚未解析出可读 tag 时的加载/失败提示文案。

4. 涉及文件一览(数据源于传播与多维表 UX 的早期迭代)

  • src/views/material/MultiDimensionalTable.vue
  • src/views/material/mdt/LinkPicker.vue
  • src/views/material/mdt/pickerFieldResolve.js(新增)
  • src/views/material/mdt/dsListedApi.js(新增)

5. 衍生常量传播 · 上游索引(减轻全表 view)

保存配置项或多维表格子写回常量后,oaConstWritePropagation.js 会按合并后的 oa_config listed 去多维表里找「漂移」并调用 /api/config/set冷启动仍会逐表 view,之后便依赖客户端缓存尽量 少 view

说明
静态依赖 mdtConstUpstreamDeps.jscomputeMdtUpstreamScanHint(columns, rows)oaConstWrite / oa_const_write 绑定列推断:公式链上的 ds:oa_config 格内 PK → Pinia 同款 sig;数字列写回 / 链上出现 lookup·link → 该表 scanAll(保守);无任何绑定 → noDeps
持久化索引 mdtUpstreamIndexCache.jslocalStorage mdt_const_upstream_idx_v1upsert / shouldScanTableForConfigPatch(excel_code, patchSig)。传播循环里:无索引或应扫时才 view;每次 view 后对应该表 upsert hint
表格侧回填 MultiDimensionalTable.vue:换表 loadContent保存成功 后对本表 upsert,保证用户在 MDT 里改绑定/公式后索引不陈旧。从未在本机打开过的表只能靠传播首轮 view 写入索引。
补丁 sig configConstantSig(classify_code, key)patchSig 空时仍可依赖索引 跳过 noDeps,避免无写回表的无效请求。
演进 未做服务端依赖索引;日后订单/长连接可替换或补强。

涉及文件oaConstWritePropagation.jsmdtConstUpstreamDeps.jsmdtUpstreamIndexCache.jsMultiDimensionalTable.vue


6. 配置项管理:loadCfg 时机与进行中提示(ConfigManage.vue

说明
二次拉列表 保存:/api/config/set 成功 → 第一次 loadCfgpropagateMdtDependentConstants(可能二次 config/set)→ 再一次 loadCfg,避免首拉早于衍生落库。
橘色常驻提示 第一次 loadCfg 后到传播结束前:ElMessage.warningduration: 0(口语文案,示意「顺带算多维表里绑定的」);finallyclose,再出现绿色的「已按多维表公式同步 N 项…」。

7. 已知产品差异(尚未在本迭代落地)

常量 / 「常量信息」数据源(oa_config

  • 接口 POST /api/excel/dynamic/data_source/listedtable: oa_config,下拉展示一般为 「常量信息」
  • 「配置项管理」(ConfigManage.vue / 菜单「常量管理」)业务流程为:一级分类 → 子分类 → /api/config/listed(带 classify_code)→ 每条配置的 key / value / desc
  • 当前多维表「数据源选择」对 oa_config 仍走通用 扁平 listed +「展示字段」,与后台分类层级 不完全同构;若要「先分类再选常量」,需单独产品方案与前端交互(及部分存盘结构设计,例如 classify_code + key),记入本文档备忘,后续专项做

8. 配置项管理卡片:多维表 desc 分行与阴影

  • 多维表写回常量时 desc 形态为 来自多维表格「表名」· 列「列标题」(见 MultiDimensionalTable.vueformatOaConstWriteDesc)。
  • ConfigManage.vue 若匹配该形态,将 表来源· 列「列名」 拆成两行,放在 Key/Value 与底栏之间的 flex 伸展区内:同行卡片 栅格 stretch 等高;多维表两行用 justify-content: space-between 把列名行贴在底栏分割线上方,不依赖再堆一行撑高整卡;单行 desc 仍在区顶,余下空白由 flex 填充。栅格显式 column-gap / row-gap,子卡 勿设 width:100% 顶破轨道 以免叠层。

9. 删除常量/删列确认与格内失效展示(2026-05-10)

说明
配置项删除 ConfigManage.vue:删除前明示页签/物料/多维表可能仍引用、不自动修改引用;取消单独捕获。多维表写回的占位项仍禁止在此删除(既有逻辑)。
删除列 MultiDimensionalTable.vuecolumnDeleteTouchesOaConst——列为 ds:oa_config,或数字/公式列且存在 oaConstWrite 绑定——删列确认追加文案。
后台已删常量、格内 PK 仍在 resolveDsCell 无记录时返回 空串;格内仍有 PK 时常 仍渲染数据源外壳、主展示区为空

10. 维护说明

  • 按日摘录:根目录 PROJECT_OVERVIEW.md「8. showtime_weihai」;应用内弹出层 src/data/appChangelog.js 与总览对齐。
  • 修改本纪要、changelog 或总览后,生产环境需重新 build 方可生效。