@agile-team/wl-skills-ui 1.10.1 → 1.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +23 -8
  3. package/docs/ag-grid-empty-state.md +89 -0
  4. package/docs/composite-component-contracts.md +2 -1
  5. package/docs/governance-long-term.md +1 -1
  6. package/docs/split-grid-resize.md +10 -4
  7. package/docs/visual-regression.md +2 -0
  8. package/es/auto.js +1 -1
  9. package/es/{chunk-DFLSWJA3.js → chunk-D5EPTQY5.js} +39 -5
  10. package/es/{chunk-QLPJLXY6.js → chunk-KR4MHMFO.js} +422 -1
  11. package/es/common-preset.d.ts +2 -2
  12. package/es/common-preset.js +3 -3
  13. package/es/index.d.ts +24 -4
  14. package/es/index.js +3 -3
  15. package/es/presets/security.d.ts +1 -1
  16. package/es/presets/security.js +1 -1
  17. package/es/{renderers-DKcXOFnF.d.ts → renderers-BNvL--Ho.d.ts} +9 -2
  18. package/es/{types-DtmxwMWV.d.ts → types-CDUjHdDP.d.ts} +1 -0
  19. package/package.json +3 -2
  20. package/scanner/rules/button.mjs +29 -1
  21. package/skills/element/el-dialog/SKILL.md +2 -2
  22. package/skills/layouts/detail-page/SKILL.md +1 -1
  23. package/skills/layouts/form-dialog/SKILL.md +2 -1
  24. package/skills/layouts/list-page/SKILL.md +5 -4
  25. package/standards/component-structures.json +1 -1
  26. package/standards/rules.json +12 -0
  27. package/standards/ui/01-table.md +5 -1
  28. package/standards/ui/02-button.md +12 -6
  29. package/standards/ui/03-form.md +2 -0
  30. package/styles/element/_dialog.scss +26 -2
  31. package/styles/vendors/_ag-grid.scss +115 -0
  32. package/styles/vendors/_jh-ui.scss +3 -0
  33. package/templates/form-dialog/TPL-FORM-DIALOG.md +2 -1
  34. package/templates/list-page/TPL-LIST.md +3 -3
  35. package/templates/tree-list/TPL-TREE-LIST.md +3 -2
package/CHANGELOG.md CHANGED
@@ -4,6 +4,36 @@ All notable changes to **@agile-team/wl-skills-ui** will be documented in this f
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
+ ## [1.10.3] - 2026-08-16
8
+
9
+ ### Added
10
+
11
+ - 新增 R041 按钮尺寸扫描规则:`el-button` / `ElButton` / `BaseToolbar` 无显式 `size` 时报告 warning,默认建议 `small`;不自动修改,不覆盖显式其他或动态尺寸。
12
+ - 新增 `runtime/ag-grid-empty-state`:测量 AG Grid 真实数据区并为完整空态保留 160px;支持上下/左右分屏受控撑高、动态挂载、Resize 合并、豁免区和卸载清理。
13
+ - 新增完整空态 Node 行为测试与浏览器视觉基准,覆盖单层/分组表头、上下双空表滚动、数据区中心误差和数据恢复清理。
14
+
15
+ ### Fixed
16
+
17
+ - 精准修正旧新 Element Plus MessageBox 状态图标定位差异,仅命中容器直属状态图标结构。
18
+ - `jh-input-number` 内层文本起始位恢复 11px 间距,不改右侧步进按钮、单位和对齐配置。
19
+ - AG Grid 编辑单元格仅退出普通文本 padding;列 `align/headerAlign` 改为函数式 `cellStyle/cellClass` 桥接,合并业务已有配置并使表头与内容共轴。
20
+ - AG Grid 空态不再相对整张 Grid 居中或依赖 `top:36px/72px` 猜表头;插图、主文案和辅助说明始终完整同规格,低高度多表格不再压盖表头。
21
+
22
+ ## [1.10.2] - 2026-08-15
23
+
24
+ ### Fixed
25
+
26
+ - `AUTO_STATUS_RULES` 匹配纪律收紧(语义正确性,零性能开销):
27
+ - 单字词锚定——`^待` / `^(?:无|否|未)$`,业务文案「招待费」「无票运输」「未税」不再被误判为状态 Tag;
28
+ - 「未X」词表先行拦截(未通过=danger / 未完成·未启用等=info),防止 success 组的 完成/通过/启用/达标 子串反向误命中「未完成/未通过」;
29
+ - 刻意不使用后行断言(旧 Safari 解析期报错,库代码不可引入)。
30
+ - `docs/governance-long-term.md` 修正 `.wl-exempt.example.json` 陈旧根路径为实际发布路径 `examples/`。
31
+
32
+ ### Added
33
+
34
+ - `npm run test:coverage`:Node 内建 `--experimental-test-coverage` 覆盖率报告(零新增依赖,仅报告不设门禁)。
35
+ - `publish.yml` 发布工作流(GitHub Release 触发:tag-版本一致性校验 + verify + pack 预检 + npm publish);视觉回归因快照基线为 win32 平台专属暂不入 Linux 发布路径,跨平台基线补齐后再追加。
36
+
7
37
  ## [1.10.1] - 2026-08-15
8
38
 
9
39
  ### Fixed
package/README.md CHANGED
@@ -104,9 +104,10 @@ wl-skills-ui/
104
104
  │ │ ├── common.ts # 通用业务预设(enable/audit/verify + 起步包)
105
105
  │ │ └── index.ts
106
106
  │ ├── auto.ts # Skin/老项目包级保护自动入口
107
- │ ├── guards.ts # 主题锁 + 长文本 + 分屏表格尺寸保护聚合
107
+ │ ├── guards.ts # 主题锁 + 长文本 + 分屏/空态表格保护聚合
108
108
  │ ├── overflow-tooltip.ts # 普通表格真实溢出 Tooltip 兜底
109
109
  │ ├── split-grid-resize.ts # jh-drag-row 内 AG Grid Resize/高度链守护
110
+ │ ├── ag-grid-empty-state.ts # AG Grid 完整空态定位与受控撑高
110
111
  │ └── index.ts # 公共 API 入口
111
112
  │
112
113
  ├── scanner/ # 自动化扫描 / 修复
@@ -115,7 +116,7 @@ wl-skills-ui/
115
116
  │ │ ├── _shared.mjs # 公共工具 + inferMeta(layer/vendor)
116
117
  │ │ ├── table.mjs # R001 R002 R003 R014 R039
117
118
  │ │ ├── form.mjs # R006 R007 R008
118
- │ │ ├── button.mjs # R004 R005 R015 R038
119
+ │ │ ├── button.mjs # R004 R005 R015 R038 R041
119
120
  │ │ ├── componentStructure.mjs # R040 复合结构登记审查
120
121
  │ │ ├── tag.mjs # R009 R010 R012
121
122
  │ │ ├── dialog.mjs # R011
@@ -227,7 +228,19 @@ yarn add @agile-team/wl-skills-ui
227
228
 
228
229
  ## 版本亮点
229
230
 
230
- 当前 v1.10.1:
231
+ 当前 v1.10.3:
232
+
233
+ - **复合结构精准修复**:仅在 MessageBox 容器直接含状态图标时统一图标与文字布局;`jh-input-number` 仅给内层文本 wrapper 补 11px 左间距,不改步进按钮、单位后缀和对齐语义。
234
+ - **AG Grid 编辑与对齐闭环**:仅对已标记编辑态的单元格退出普通文本 padding;`align/headerAlign` 桥接为共享适配层可执行的函数配置,表头与内容使用同一对齐轴,并合并保留业务 `cellStyle/cellClass` 返回值。
235
+ - **AG Grid 完整空态闭环**:按真实 `.ag-body-viewport` 定位,数据区统一保留 160px;插图、主文案和辅助说明始终完整同规格。上下/左右多表格空间不足时由最近分屏受控滚动,数据恢复后自动清理全部标记。
236
+ - **按钮尺寸可重现**:新增 R041,只报告未显式声明 `size` 的 `el-button` / `ElButton` / `BaseToolbar`;默认建议 `small`,已设置其他或动态尺寸的业务代码不受影响。
237
+
238
+ 上一版 v1.10.2:
239
+
240
+ - **判色纪律收紧**:单字状态词锚定(`待`/`无`/`否`/`未` 仅按词头或整词命中),「招待费」「无票运输」类业务文案不再误判;「未X」先行拦截,`未完成/未通过` 不再被子串反向误命中;不使用后行断言(旧 Safari 兼容)。
241
+ - **工程闭环补强(零运行时开销)**:`test:coverage` 内建覆盖率报告(零依赖);`publish.yml` Release 触发的自动发布(tag 校验 + verify 门禁)。
242
+
243
+ 上一版 v1.10.1:
231
244
 
232
245
  - **存量改造债务清偿**:新增 `runtime/__tests__`(25 个用例覆盖默认对齐与自动判色,`npm test` 统一纳管);`verify:package` 增加 `dist/tokens.css` 与 `design/tokens/base.css` 逐字节同步守卫;补 GitHub Actions CI(Ubuntu 22/24 + Windows 24 矩阵跑 `pnpm verify`);清理仓库残留 tgz 与空目录,`mcp/README.md` 声明 server.js 冻结状态。
233
246
  - **分组列对齐语义修正**:`ensureDefaultAlignment` 对声明式分组列只递归子列、不补自身 `align`(分组行无叶子单元格)。
@@ -271,7 +284,7 @@ yarn add @agile-team/wl-skills-ui
271
284
 
272
285
  - **输入附加段不再割裂**:`el-input-group` 由组合根统一 26px 高度、6px 外圆角和 default/hover/focus/error/disabled 描边;左侧 prefix、右侧 append 图标统一 14px,纯图标附加段 32px,文字/单位/按钮仍按内容宽度。
273
286
  - **新旧 DOM 同时覆盖**:兼容 jh-ui 配套旧版 input 直挂结构和新版 `.el-input__wrapper` 结构,内部输入不再重复描边;普通 input、普通按钮、登录页和显式豁免区保持原行为。
274
- - **分屏表格真正重布局**:`runtime/auto` 只观察 `jh-drag-row` 内真实 AG Grid pane,补齐可收缩高度链并按帧派发局部重布局事件;AG Grid 自身 ResizeObserver 生成内部滚动条,不给外层加滚动条、不广播全局 resize、不访问 Vue 私有实例。
287
+ - **分屏表格真正重布局**:有数据时,`runtime/auto` 只观察 `jh-drag-row` 内真实 AG Grid pane,补齐可收缩高度链并由 AG Grid 自身生成内部滚动条;只有完整空态确实放不下时,最近分屏根才临时承担一个纵向滚动条,数据恢复后撤销。
275
288
  - **回归边界闭环**:结构清单新增 input-group 新旧 DOM 与 drag-row/AG Grid 契约;Node 行为测试覆盖动态挂载、批量 Resize、豁免区,真实浏览器验证附加段计算样式及 220px→120px 收缩后的内部滚动。
276
289
 
277
290
  上一版 v1.9.12:
@@ -394,7 +407,7 @@ yarn add @agile-team/wl-skills-ui
394
407
  - `standards/architecture/01-layer-boundaries.md` 固化 tokens、Element Plus、Project Vendors、layouts、runtime、scanner、skills 的扩展边界,明确 `Base*` / `jh-*` / `C_*` / AG Grid 是当前项目集群必覆盖层
395
408
  - `vendors/jh-components` 使用 `<jh-*>` 全量通配治理,当前只维护代表性基线和专项覆盖准入,避免遗漏新增 jh 封装
396
409
  - `npm run docs:check` 校验旧命名、旧命令、版本文案和编辑器配置,防止规则文档回退
397
- - 表格空状态改为对应表格区域内自适应居中,避免嵌套表格靠固定高度猜效果
410
+ - 表格空状态按真实数据区居中;AG Grid 空间不足时受控撑高,完整插图与文案保持一致
398
411
  - 查询区/工具栏按钮补齐 token fallback,禁用按钮独立保留清晰禁用态
399
412
  - 表单控件圆角统一使用 `--wk-form-control-radius`,覆盖 input/select/date/textarea/upload 等控件家族
400
413
  - `wl-ui init/update` 会安装 Skill、触发提示、MCP 配置和 manifest 清单
@@ -451,7 +464,7 @@ npx wl-ui init --mode native
451
464
  // 4. src/main.ts
452
465
  import { installCommonPreset } from "@agile-team/wl-skills-ui/runtime/common-preset";
453
466
  installCommonPreset();
454
- // 已包含主题锁、普通表格长文本和分屏 AG Grid 尺寸保护,无需重复引入 runtime/auto。
467
+ // 已包含主题锁、普通表格长文本、分屏尺寸和完整空态保护,无需重复引入 runtime/auto。
455
468
  ```
456
469
 
457
470
  ```vue
@@ -780,7 +793,7 @@ export const myRules = [
780
793
 
781
794
  ## 规范清单
782
795
 
783
- ### UI 规则(R001-R040,按 layer 自动分组)
796
+ ### UI 规则(R001-R041,按 layer 自动分组)
784
797
 
785
798
  | Rule | Layer | Vendor | 说明 |
786
799
  | ---- | ----- | --------- | ------------------------------------ |
@@ -814,6 +827,7 @@ export const myRules = [
814
827
  | R038 | L1 | element | 创建类主按钮缺 primary 填充主题色 |
815
828
  | R039 | L1 | element | 普通数据列缺省略与悬停完整提示 |
816
829
  | R040 | L2 | common-core | 未登记复合控件结构需人工评审 |
830
+ | R041 | L1 | element | 按钮未显式 size,默认应使用 small |
817
831
 
818
832
  ### 维护者防回归
819
833
 
@@ -835,7 +849,8 @@ pnpm test:visual:update
835
849
  pnpm release:check
836
850
  ```
837
851
 
838
- 机制与准入细则见 [复合控件结构契约](docs/composite-component-contracts.md) 和
852
+ 机制与准入细则见 [复合控件结构契约](docs/composite-component-contracts.md)、
853
+ [AG Grid 完整空状态](docs/ag-grid-empty-state.md) 和
839
854
  [浏览器视觉回归](docs/visual-regression.md)。视觉基准依赖字体、浏览器与操作系统渲染,
840
855
  必须在相同环境中比较;当前项目基准由 Windows Edge Chromium 生成。
841
856
 
@@ -0,0 +1,89 @@
1
+ # AG Grid 完整空状态布局
2
+
3
+ ## 目标
4
+
5
+ 所有接入 `wl-skills-ui` 的 BaseTable/AG Grid 在无数据时始终显示同一套完整空态:
6
+
7
+ - 100×84px 插图;
8
+ - 主文案“暂无数据”;
9
+ - 辅助说明“未找到匹配数据,请调整筛选条件后重试”;
10
+ - 相同字号、间距和视觉中心。
11
+
12
+ 不会因普通单表、上下分屏、左右分屏、单层表头或分组表头而缩小插图、隐藏文案或改变
13
+ 构图。空间不足时通过受控撑高和最近布局容器滚动解决。
14
+
15
+ ## 根因与禁止方案
16
+
17
+ AG Grid 的 no-rows overlay 在不同版本中可能覆盖整张 Grid。直接使用 `inset:0` 会把表头
18
+ 计入居中区域;固定写 `top:36px` 或分组表头 `top:72px` 又依赖表头层数和固定行高,无法
19
+ 适配动态表头、滚动设施和分屏拖动。
20
+
21
+ 禁止:
22
+
23
+ - 在业务项目硬编码 `.ag-overlay-no-rows-wrapper { top:36px/72px }`;
24
+ - 按高度缩小插图、隐藏辅助说明或切换成文字版;
25
+ - 给所有 pane 永久增加 `overflow:auto`;
26
+ - 修改 common-core 或访问 Vue 私有实例、猜测 `gridApi`。
27
+
28
+ ## 包内机制
29
+
30
+ `runtime/ag-grid-empty-state.ts` 随 `runtime/auto` 或 `installCommonPreset()` 安装:
31
+
32
+ 1. 只识别当前可见的 `.ag-overlay-no-rows-wrapper`。
33
+ 2. 优先读取 `.ag-body-viewport` 的真实矩形,兼容 AG Grid 29/32;缺少 viewport 时才回退
34
+ `.ag-body`。
35
+ 3. 把 overlay 的 `top/height` 对齐真实数据区,不计算固定表头高度。
36
+ 4. 数据区小于 160px 时,为 grid host 添加包内最小高度标记,保证完整空态可容纳。
37
+ 5. 上下分屏保留进入空态前两个 pane 的高度基线;空间不足时仅让 `.drager_row` 承担
38
+ 纵向滚动。
39
+ 6. 左右分屏把两个 pane 撑到同一最小高度,仅让 `.drag-col-container` 承担纵向滚动。
40
+ 7. 弹窗内独立空表由 `.el-dialog__body` 承担滚动,不突破弹窗可视边界。
41
+ 8. 数据恢复、路由卸载或手动卸载守护时,包添加的属性和 CSS 变量全部清理。
42
+
43
+ 运行时只写 `data-wl-ui-empty-*` 和 `--wl-ui-empty-*` 私有标记,不修改行高、列配置、
44
+ 分屏比例或有数据时的 AG Grid 内部滚动。
45
+
46
+ 以下区域保持原定制样式:
47
+
48
+ - `.lp-root`
49
+ - `.session-login`
50
+ - `.wl-ui-skin-exempt`
51
+ - `[data-wl-ui-skin="off"]`
52
+
53
+ ## 接入
54
+
55
+ Skin 项目:
56
+
57
+ ```scss
58
+ @use "@agile-team/wl-skills-ui/styles/presets/skin" as *;
59
+ ```
60
+
61
+ ```ts
62
+ import "@agile-team/wl-skills-ui/runtime/auto";
63
+ ```
64
+
65
+ Native 项目调用一次 `installCommonPreset()`,无需重复引入 `runtime/auto`。
66
+
67
+ 常规场景不需要业务代码。特殊宿主主动变更尺寸后如需立即同步,可调用:
68
+
69
+ ```ts
70
+ import { refreshAgGridEmptyStateLayout } from "@agile-team/wl-skills-ui/runtime";
71
+
72
+ refreshAgGridEmptyStateLayout();
73
+ ```
74
+
75
+ ## 升级清理
76
+
77
+ 升级后删除业务项目中针对 `.ag-overlay-no-rows-wrapper` 的固定 `top`、`height`、
78
+ `transform` 和插图缩放补丁,避免形成两套定位逻辑。不要新增业务侧 `!important` 覆盖。
79
+
80
+ ## 验收
81
+
82
+ - 单层表头和分组表头的 overlay 顶部都从真实数据区开始;
83
+ - 数据区高度不低于 160px,插图、主文案、辅助说明均完整显示;
84
+ - 上下双空表出现一个分屏根滚动条,两个 pane 不互相压盖;
85
+ - 左右空表保持同高;
86
+ - overlay 中心与数据区中心误差不超过 1px;
87
+ - 数据恢复后无 `data-wl-ui-empty-*` 和最小高度残留;
88
+ - 登录页和显式豁免区域无新增标记;
89
+ - `npm test` 与 `npm run test:visual` 全部通过。
@@ -51,4 +51,5 @@ wrapper 时,应先按上述流程确认,不能直接扩大全局 Element 选
51
51
 
52
52
  input-group 附加段保留文字、单位、按钮的内容驱动宽度,只有“直接子节点为唯一
53
53
  `.el-icon`”时才使用 32px 紧凑宽度;普通 input、普通按钮和非 input-group 不命中。
54
- 分屏重布局的运行机制与接入方式见 `docs/split-grid-resize.md`。
54
+ 分屏重布局的运行机制与接入方式见 `docs/split-grid-resize.md`;多表格无数据时的完整
55
+ 空态定位、受控撑高与滚动边界见 `docs/ag-grid-empty-state.md`。
@@ -172,7 +172,7 @@ npx wl-ui audit --target src --refresh-baseline
172
172
  git add .wl-baseline.json
173
173
 
174
174
  # 4. 豁免(如有)
175
- cp node_modules/@agile-team/wl-skills-ui/.wl-exempt.example.json .wl-exempt.json
175
+ cp node_modules/@agile-team/wl-skills-ui/examples/wl-exempt.example.json .wl-exempt.json
176
176
  # 编辑为本项目实际豁免路径
177
177
 
178
178
  # 5. CI 加 PR gate
@@ -29,9 +29,14 @@
29
29
  5. 同一动画帧内的连续 Resize 会合并,并在 grid host 上派发局部
30
30
  `wl-ui:split-grid-resize` 事件,供特殊平台封装按需调用公开 grid API。
31
31
 
32
- 本实现不会给 `.drager_top/.drager_bottom` 增加 `overflow:auto`,不会访问 Vue 私有实例,
33
- 不会遍历或猜测 `gridApi`,也不会广播全局 `window.resize`。卸载守护时,本包增加的结构
34
- 标记会一并清理。
32
+ 有数据时,本实现不会给 `.drager_top/.drager_bottom` 或 `.drager_row` 增加
33
+ `overflow:auto`。唯一例外是完整空状态:当 160px 数据区在当前上下分屏中放不下时,
34
+ `runtime/ag-grid-empty-state` 会保留两个 pane 的高度基线,并让最近的 `.drager_row`
35
+ 临时承担一个纵向滚动条;数据恢复后立即撤销。pane 自身仍不滚动。
36
+
37
+ 两套守护都不会访问 Vue 私有实例,不会遍历或猜测 `gridApi`,也不会广播全局
38
+ `window.resize`。卸载时,本包增加的结构标记会一并清理。完整机制见
39
+ `docs/ag-grid-empty-state.md`。
35
40
 
36
41
  ## 接入
37
42
 
@@ -60,7 +65,8 @@ gridHost.addEventListener("wl-ui:split-grid-resize", () => {
60
65
 
61
66
  ## 验收
62
67
 
63
- - 拖动前后 `.drager_top/.drager_bottom` 仍为 `overflow:hidden`。
68
+ - 有数据时,拖动前后 `.drager_top/.drager_bottom` 仍为 `overflow:hidden`;完整空态不足
69
+ 160px 时仅 `.drager_row` 临时纵向滚动。
64
70
  - `.ag-grid-table` 的实际高度随 pane 收缩,并带
65
71
  `data-wl-ui-split-grid-host`。
66
72
  - `.ag-body-viewport` 的 `scrollHeight > clientHeight` 时出现内部纵向滚动条。
@@ -15,6 +15,8 @@
15
15
  - common-core 复合多标签外壳自然增高、内层无双描边。
16
16
  - input-group 输入主体、前后附加段、左右图标的统一高度/尺寸/圆角与 focus 描边。
17
17
  - jh-drag-row 收缩后 AG Grid host 跟随变高,纵向滚动只发生在内部 viewport。
18
+ - AG Grid 单层/分组表头下的完整空态均以真实数据区居中;上下双空表空间不足时由
19
+ 分屏根统一滚动,插图和两行文案不缩小、不隐藏。
18
20
  - Element Table 长文本真实溢出、省略号与按需完整提示。
19
21
  - 表格选中行柔和状态色、BaseToolbar 分裂按钮与定制区域豁免。
20
22
  - common-core `jh-input-number` 与普通表单控件同高,保留 `textAlign` 和 controls,且只有
package/es/auto.js CHANGED
@@ -1,4 +1,4 @@
1
- import { installUiRuntimeGuards } from './chunk-QLPJLXY6.js';
1
+ import { installUiRuntimeGuards } from './chunk-KR4MHMFO.js';
2
2
  import './chunk-Q3N5QNRZ.js';
3
3
 
4
4
  // runtime/auto.ts
@@ -8,21 +8,53 @@ var HEADER_ALIGNMENT_CLASS = {
8
8
  center: "wl-ui-table-header-align--center",
9
9
  right: "wl-ui-table-header-align--right"
10
10
  };
11
+ var CELL_ALIGNMENT_CLASS = {
12
+ left: "wl-ui-table-cell-align--left",
13
+ center: "wl-ui-table-cell-align--center",
14
+ right: "wl-ui-table-cell-align--right"
15
+ };
11
16
  function isColumnAlignment(value) {
12
17
  return value === "left" || value === "center" || value === "right";
13
18
  }
19
+ function mergeCellClass(current, alignmentClass, params) {
20
+ const value = typeof current === "function" ? current(params) : current;
21
+ if (value === void 0 || value === null || value === "") {
22
+ return alignmentClass;
23
+ }
24
+ return Array.isArray(value) ? [...value, alignmentClass] : [value, alignmentClass];
25
+ }
26
+ function mergeCellStyle(current, align, params) {
27
+ const value = typeof current === "function" ? current(params) : current;
28
+ return {
29
+ textAlign: align,
30
+ ...value ?? {}
31
+ };
32
+ }
14
33
  function normalizeColumnAlignment(column) {
15
34
  const normalizedChildren = Array.isArray(column.children) ? normalizeColumnAlignments(column.children) : column.children;
16
35
  const align = isColumnAlignment(column.align) ? column.align : void 0;
17
36
  const headerAlign = isColumnAlignment(column.headerAlign) ? column.headerAlign : align;
18
37
  const needsChildren = normalizedChildren !== column.children;
19
- const needsCellStyle = Boolean(align) && column.cellStyle === void 0;
38
+ const needsCellStyle = Boolean(align);
39
+ const needsCellClass = Boolean(align) && column.cellStyle === void 0;
20
40
  const needsHeaderClass = Boolean(headerAlign) && column.headerClass === void 0;
21
- if (!needsChildren && !needsCellStyle && !needsHeaderClass) return column;
41
+ if (!needsChildren && !needsCellStyle && !needsCellClass && !needsHeaderClass)
42
+ return column;
22
43
  return {
23
44
  ...column,
24
45
  ...needsChildren ? { children: normalizedChildren } : {},
25
- ...needsCellStyle ? { cellStyle: { textAlign: align } } : {},
46
+ // common-core 3.x 的 AG 适配层只调用函数型 cellStyle/cellClass;函数形态同时
47
+ // 也是 AG Grid 原生合法配置,避免对象型样式被兼容层静默丢弃。
48
+ ...needsCellStyle ? {
49
+ cellStyle: (params) => mergeCellStyle(column.cellStyle, align, params)
50
+ } : {},
51
+ ...needsCellClass ? {
52
+ cellClass: (params) => mergeCellClass(
53
+ column.cellClass,
54
+ CELL_ALIGNMENT_CLASS[align],
55
+ params
56
+ )
57
+ } : {},
26
58
  ...needsHeaderClass ? { headerClass: HEADER_ALIGNMENT_CLASS[headerAlign] } : {}
27
59
  };
28
60
  }
@@ -168,10 +200,12 @@ function renderDictClassifyTag(value, dictKey, typeColorMap) {
168
200
  );
169
201
  }
170
202
  var AUTO_STATUS_RULES = [
203
+ [/未通过|未达标|未合格/, "danger"],
204
+ [/未启用|未激活|未完成|未处理|未审批|未核实|未提交|未确认|未支付|未领用/, "info"],
171
205
  [/驳回|拒绝|停用|作废|报废|超标|异常|超期|逾期|不合格|失效|无效|惩罚|隐患/, "danger"],
172
206
  [/已完成|已结束|完成|正常|有效|启用|合格|达标|通过|已处置|已确认|已审批|在用|使用中|奖励/, "success"],
173
- [/待|进行中|审批中|整改中|处置中|评估中|调查|预警|管控|注意/, "warning"],
174
- [/新建|未开始|草稿|暂存|历史|撤回|无|否|未/, "info"]
207
+ [/^待|进行中|审批中|整改中|处置中|评估中|调查|预警|管控|注意/, "warning"],
208
+ [/新建|未开始|草稿|暂存|历史|撤回|^(?:无|否|未)$/, "info"]
175
209
  ];
176
210
  var AUTO_CLASSIFY_RULES = [
177
211
  [/危废|危险|惩罚|事故|气态/, "danger"],