@agile-team/wl-skills-ui 1.9.0 → 1.9.2

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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,24 @@ 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.9.2] - 2026-07-21
8
+
9
+ ### Fixed
10
+
11
+ - 新增客户品牌主题锁:L0 的品牌色、功能色和圆角 token 使用 `!important`,运行时再监听 `html/body` 的主题变量改写,阻止平台 `/system/theme/list` 动态主题把包值改回旧亮色。
12
+ - `installCommonPreset()` / `installSecurityPreset()` 自动安装主题锁;同时公开 `installBrandThemeLock()`,纯 runtime 接入也可显式启用。
13
+ - 恢复按钮、输入框等基础控件的 `6px` 圆角,保留圆形、胶囊和按钮组的语义圆角,不再被 jh-ui 的 `2px` 基础值压平。
14
+ - 功能按钮锁定克制的成功 `#2BB268`、警告 `#EA9A13`、危险 `#BB2D3F`,并把彩色发光阴影收敛为轻量中性阴影,保持语义辨识但降低突兀感。
15
+
16
+ ## [1.9.1] - 2026-07-20
17
+
18
+ ### Fixed
19
+
20
+ - 按《烟台华新数智化信息化改造项目 UI 规范 v1》纠正主色色阶:常规 `#002A8F`、悬停 `#1A3F9A`、点击 `#002681`、禁用 `#B2BFDD`,不再把 PPT 元数据中的 `#2254F4` 当作业务按钮主色。
21
+ - 新增 Element Plus 主按钮四态强覆盖;BaseQuery/BaseToolbar 查询与主操作按钮的 hover 从旧 `primary-light-3` 改为客户规范 `primary-light-1`。
22
+ - 所有 vendor 半透明主色效果统一读取 `--el-color-primary-rgb`,清除 SCSS 中旧亮蓝 RGB 和 fallback,避免 token 已改但阴影、选中态仍有色差。
23
+ - 同步颜色规范、Design Token Skill、README 和发布产物;发布校验新增客户主色色阶与旧亮蓝残留检查。
24
+
7
25
  ## [1.9.0] - 2026-07-18
8
26
 
9
27
  ### Added
package/README.md CHANGED
@@ -62,6 +62,7 @@ wl-skills-ui/
62
62
  ├── styles/ # L1+L2+L3 SCSS 实现
63
63
  │ ├── tokens/ # SCSS 变量映射层($wk-* → CSS 变量)
64
64
  │ ├── element/ # L1 Element Plus 控件对齐
65
+ │ │ ├── _button.scss # 主按钮四态强覆盖(设计规范色阶)
65
66
  │ │ ├── _table.scss
66
67
  │ │ ├── _form.scss
67
68
  │ │ ├── _dialog.scss
@@ -199,7 +200,7 @@ yarn add @agile-team/wl-skills-ui
199
200
  |---|---|---|
200
201
  | `element-plus` | **`2.2.6-prod.3`** | 集团 jh- 定制版;EP 2.3.0 起引入 `.el-input__wrapper`,与 jh-ui 3.x 不兼容 |
201
202
  | `@jhlc/jh-ui` | **`3.1.0`** | SCSS 皮肤包,`.com-text` label 包裹 + `.has-colon` 冒号注入(wl-skills-ui 已统一屏蔽表单冒号) |
202
- | `@agile-team/wl-skills-ui` | `^1.9.0` | 已对齐上述组合的 DOM 假设 |
203
+ | `@agile-team/wl-skills-ui` | `^1.9.2` | 已对齐上述组合的 DOM 假设、客户主题锁与圆角契约 |
203
204
 
204
205
  三种识别方式,任选其一:
205
206
 
@@ -213,7 +214,19 @@ yarn add @agile-team/wl-skills-ui
213
214
 
214
215
  ## 版本亮点
215
216
 
216
- 当前 v1.9.0
217
+ 当前 v1.9.2
218
+
219
+ - **动态主题不可反覆盖**:品牌色、功能色和圆角使用 CSS `!important` + runtime `MutationObserver` 双保险;平台登录后写入 `document.body.style` 也会立即恢复为包内规范值。
220
+ - **圆角契约恢复**:按钮、输入框等基础控件统一 `6px`,不再回退到 jh-ui 的 `2px`;圆形、胶囊、按钮组仍保留各自语义。
221
+ - **语义色降噪**:成功 `#2BB268`、警告 `#EA9A13`、危险 `#BB2D3F` 均被主题锁保护,按钮彩色强阴影调整为轻量中性阴影,整体更稳重。
222
+
223
+ 上一版 v1.9.1:
224
+
225
+ - **客户主色纠偏**:严格按《烟台华新数智化信息化改造项目 UI 规范 v1》统一主色为 `#002A8F`,并同步完整深浅色阶。
226
+ - **按钮四态强覆盖**:主按钮常规 `#002A8F`、悬停 `#1A3F9A`、点击 `#002681`、禁用 `#B2BFDD`;`html body` 高特异性和填充按钮 `!important` 抵御 Element Plus、jh-ui 与旧业务皮肤覆盖。
227
+ - **单源防漂移**:主色半透明场景统一读取 `--el-color-primary-rgb`,发布校验会阻断 token、SCSS、按钮状态或文档重新漂移到旧亮蓝。
228
+
229
+ 上一版 v1.9.0:
217
230
 
218
231
  - **独立闭环**:不依赖 kit/design/bd 即可安装、审计、修复、复检、快照和回退;存在 kit 的 page-spec 时只复用页面模式与组件命名约定,不形成运行时硬依赖。
219
232
  - **CLI 真实一致**:统一入口正式支持 `audit/drift/exempt/snapshot`,未知命令非零退出,`audit --refresh-baseline` 可维护增量治理基线。
@@ -230,8 +243,8 @@ yarn add @agile-team/wl-skills-ui
230
243
 
231
244
  上一版 v1.8.15:
232
245
 
233
- - **jh-drag-row 上下分栏手柄覆盖**:新增 `styles/vendors/_jh-drag-row.scss`,补齐此前缺失的 `jh-drag-row`(上下/主从表)手柄覆盖,与 `_jh-drag-col.scss`(左右)同源风格。以本包主色 `#2254f4` 为准,用 `!important` 确定性层叠压过 common-core 组件 Props 默认值
234
- - **平台包职责澄清**:`@jhlc/jh-ui` 是纯 SCSS 包(零组件),所有 `jh-*`/`Base*`/`C_*` 组件来自 `@jhlc/common-core`。本包作为化妆层精准层叠覆盖二者视觉,不改平台层源码——L0 token 用 `:root body` 压过 jh-ui 编译产物的 `:root`(`#2254f4` > jh-ui `#4368ff`),L2 直接写目标属性 + `!important` 绕过组件 `var()` 引用。**项目装了本包后,一切以本包为准**
246
+ - **jh-drag-row 上下分栏手柄覆盖**:新增 `styles/vendors/_jh-drag-row.scss`,补齐此前缺失的 `jh-drag-row`(上下/主从表)手柄覆盖,与 `_jh-drag-col.scss`(左右)同源风格。手柄颜色统一跟随 `--el-color-primary`,不再保留独立色值
247
+ - **平台包职责澄清**:`@jhlc/jh-ui` 是纯 SCSS 包(零组件),所有 `jh-*`/`Base*`/`C_*` 组件来自 `@jhlc/common-core`。本包作为化妆层精准层叠覆盖二者视觉,不改平台层源码——L0 token 用 `:root body` 压过 jh-ui 编译产物的 `:root`,L2 直接写目标属性 + `!important` 绕过组件 `var()` 引用。**项目装了本包后,一切以本包为准**
235
248
 
236
249
  上一版 v1.8.14:
237
250
 
@@ -642,7 +655,7 @@ export const myRules = [
642
655
  | 字号 | [design/spec/typography.md](design/spec/typography.md) |
643
656
  | 间距 | [design/spec/spacing.md](design/spec/spacing.md) |
644
657
 
645
- 主色:`#4368ff` → `--el-color-primary`(与 Element Plus 默认蓝对齐)
658
+ 客户规范主色:`#002a8f` → `--el-color-primary`;业务代码只引用 token,不直接硬编码色值。
646
659
 
647
660
  ---
648
661
 
package/SKILL.md CHANGED
@@ -282,7 +282,7 @@ npx wl-ui check --project [项目根目录]
282
282
  - background: #fb2323;
283
283
  + background: var(--el-color-danger);
284
284
  ```
285
- **已覆盖颜色**:`#409eff/#3a7afe/#4368ff`→primary,`#fb2323/#f56c6c`→danger,`#0cc859/#67c23a`→success,`#ffaf27/#e6a23c`→warning,`#ecf5ff`→primary-light-9
285
+ **已覆盖颜色**:`#409eff/#3a7afe/#4368ff/#2254f4/#002a8f`→primary,`#fb2323/#f56c6c/#bb2d3f`→danger,`#0cc859/#67c23a/#2bb268`→success,`#ffaf27/#e6a23c/#ea9a13`→warning,`#ecf5ff/#e5eaf4`→primary-light-9
286
286
 
287
287
  #### R017 — 编号/工号/证件号列缺少 renderBadge【高危】
288
288
  **检测**:`columnsDef()` / `columns` 数组中,label 含“编号”“工号”“证件号”但没有 `renderBadge` / `defaultSlot`(脚本式列定义)
@@ -2,14 +2,31 @@
2
2
 
3
3
  ## 品牌色系
4
4
 
5
- | Token | 值 | 用途 |
6
- | ---------------------------- | --------- | -------------------------- |
7
- | `--el-color-primary` | `#4368ff` | 主色调:按钮、链接、激活态 |
8
- | `--el-color-primary-light-9` | `#f0f3ff` | 主色浅底:Tag 背景 |
9
- | `--el-color-success` | `#0cc859` | 成功/正常/启用状态 |
10
- | `--el-color-warning` | `#ffaf27` | 警告/待处理状态 |
11
- | `--el-color-danger` | `#FB2323` | 危险/失败/停用状态 |
12
- | `--el-color-info` | `#909399` | 中性/辅助信息 |
5
+ > 单一依据:《烟台华新数智化信息化改造项目 UI 规范 v1》“颜色-主色/功能色”页。
6
+
7
+ | Token | | 用途 |
8
+ | ----------------------------- | --------------- | ---------------------------- |
9
+ | `--el-color-primary` | `#002a8f` | 主按钮常规、链接、选中态 |
10
+ | `--el-color-primary-rgb` | `0, 42, 143` | 主色透明背景、阴影和选中底色 |
11
+ | `--el-color-primary-light-1` | `#1a3f9a` | 主按钮悬停 |
12
+ | `--el-color-primary-light-2` | `#3355a5` | 柔和主题蓝 |
13
+ | `--el-color-primary-light-3` | `#4d6ab1` | 辅助高亮 |
14
+ | `--el-color-primary-light-4` | `#667fbc` | 辅助高亮 |
15
+ | `--el-color-primary-light-5` | `#8094c7` | 主色边框 |
16
+ | `--el-color-primary-light-6` | `#99aad2` | 浅色辅助 |
17
+ | `--el-color-primary-light-7` | `#b2bfdd` | 主按钮禁用 |
18
+ | `--el-color-primary-light-8` | `#ccd4e9` | 浅色辅助 |
19
+ | `--el-color-primary-light-9` | `#e5eaf4` | 浅色/白底悬浮 |
20
+ | `--el-color-primary-dark-1` | `#002681` | 主按钮点击 |
21
+ | `--el-color-primary-dark-2` | `#002272` | 深色辅助 |
22
+ | `--el-color-primary-dark-3` | `#001d64` | 深色辅助 |
23
+ | `--el-color-primary-dark-4` | `#001956` | 最深品牌蓝 |
24
+ | `--el-color-success` | `#2bb268` | 成功/正常/启用状态 |
25
+ | `--el-color-warning` | `#ea9a13` | 警告/待处理状态 |
26
+ | `--el-color-danger` | `#bb2d3f` | 危险/失败/停用状态 |
27
+ | `--el-color-info` | `#909399` | 中性/辅助信息 |
28
+
29
+ 品牌色及成功、警告、危险色阶属于客户固定主题契约。样式层以 `!important` 抵御平台普通内联主题,调用 `installCommonPreset()`、`installSecurityPreset()` 或 `installBrandThemeLock()` 后,运行时还会监测并恢复 `html/body` 上的动态改写。
13
30
 
14
31
  ## 文本色系
15
32
 
@@ -23,6 +23,6 @@
23
23
  | 场景 | 值 |
24
24
  | ---------------------- | ------------------- |
25
25
  | 输入框/选择框/日期选择 | `6px`(已全局设置) |
26
- | 按钮 | `4px`(EP 默认) |
26
+ | 按钮 | `6px`(统一基础圆角) |
27
27
  | Tag | `4px`(EP 默认) |
28
28
  | 弹窗 | `8px`(EP 默认) |
@@ -1,74 +1,76 @@
1
1
  :root body {
2
- --el-color-primary: #2254f4;
3
- --el-color-primary-light-1: #3865f5;
4
- --el-color-primary-light-2: #5178f6;
5
- --el-color-primary-light-3: #7a98f8;
6
- --el-color-primary-light-4: #91aaf9;
7
- --el-color-primary-light-5: #a8bbfa;
8
- --el-color-primary-light-6: #bfccfc;
9
- --el-color-primary-light-7: #d3ddfd;
10
- --el-color-primary-light-8: #e6ebfe;
11
- --el-color-primary-light-9: #f2f5ff;
12
- --el-color-primary-dark-1: #1b43c3;
13
- --el-color-primary-dark-2: #1738a3;
14
- --el-color-primary-dark-3: #102873;
15
- --el-color-primary-dark-4: #0a1a4d;
16
- --el-color-success: #2bb268;
17
- --el-color-success-light-1: #40ba77;
18
- --el-color-success-light-2: #55c286;
19
- --el-color-success-light-3: #6bcb95;
20
- --el-color-success-light-4: #80d3a4;
21
- --el-color-success-light-5: #95dbb4;
22
- --el-color-success-light-6: #aae3c3;
23
- --el-color-success-light-7: #bfebd2;
24
- --el-color-success-light-8: #d5f4e1;
25
- --el-color-success-light-9: #eaf9f0;
26
- --el-color-success-dark-1: #229051;
27
- --el-color-success-dark-2: #1b733f;
28
- --el-color-success-dark-3: #14562f;
29
- --el-color-success-dark-4: #0d3a20;
30
- --el-color-warning: #ea9a13;
31
- --el-color-warning-light-1: #eca42b;
32
- --el-color-warning-light-2: #efae42;
33
- --el-color-warning-light-3: #f1b85a;
34
- --el-color-warning-light-4: #f3c171;
35
- --el-color-warning-light-5: #f5cb89;
36
- --el-color-warning-light-6: #f7d5a1;
37
- --el-color-warning-light-7: #f9dfb8;
38
- --el-color-warning-light-8: #fce8d0;
39
- --el-color-warning-light-9: #fef2e7;
40
- --el-color-warning-dark-1: #c47f0e;
41
- --el-color-warning-dark-2: #9d650a;
42
- --el-color-warning-dark-3: #754a07;
43
- --el-color-warning-dark-4: #4e3004;
44
- --el-color-danger: #bb2d3f;
45
- --el-color-danger-light-1: #c34253;
46
- --el-color-danger-light-2: #ca5766;
47
- --el-color-danger-light-3: #d16b78;
48
- --el-color-danger-light-4: #d8808b;
49
- --el-color-danger-light-5: #dd969f;
50
- --el-color-danger-light-6: #e4abb2;
51
- --el-color-danger-light-7: #e8c0c5;
52
- --el-color-danger-light-8: #f0d5d9;
53
- --el-color-danger-light-9: #f7eaec;
54
- --el-color-danger-dark-1: #962433;
55
- --el-color-danger-dark-2: #711b26;
56
- --el-color-danger-dark-3: #4b1219;
57
- --el-color-danger-dark-4: #26090d;
58
- --el-color-error: #bb2d3f;
59
- --el-color-error-light-1: #c34253;
60
- --el-color-error-light-2: #ca5766;
61
- --el-color-error-light-3: #d16b78;
62
- --el-color-error-light-4: #d8808b;
63
- --el-color-error-light-5: #dd969f;
64
- --el-color-error-light-6: #e4abb2;
65
- --el-color-error-light-7: #e8c0c5;
66
- --el-color-error-light-8: #f0d5d9;
67
- --el-color-error-light-9: #f7eaec;
68
- --el-color-error-dark-1: #962433;
69
- --el-color-error-dark-2: #711b26;
70
- --el-color-error-dark-3: #4b1219;
71
- --el-color-error-dark-4: #26090d;
2
+ /* 客户主题契约:防止平台运行时 body 内联主题覆盖。 */
3
+ --el-color-primary: #002a8f !important;
4
+ --el-color-primary-rgb: 0, 42, 143 !important;
5
+ --el-color-primary-light-1: #1a3f9a !important;
6
+ --el-color-primary-light-2: #3355a5 !important;
7
+ --el-color-primary-light-3: #4d6ab1 !important;
8
+ --el-color-primary-light-4: #667fbc !important;
9
+ --el-color-primary-light-5: #8094c7 !important;
10
+ --el-color-primary-light-6: #99aad2 !important;
11
+ --el-color-primary-light-7: #b2bfdd !important;
12
+ --el-color-primary-light-8: #ccd4e9 !important;
13
+ --el-color-primary-light-9: #e5eaf4 !important;
14
+ --el-color-primary-dark-1: #002681 !important;
15
+ --el-color-primary-dark-2: #002272 !important;
16
+ --el-color-primary-dark-3: #001d64 !important;
17
+ --el-color-primary-dark-4: #001956 !important;
18
+ --el-color-success: #2bb268 !important;
19
+ --el-color-success-light-1: #40ba77 !important;
20
+ --el-color-success-light-2: #55c286 !important;
21
+ --el-color-success-light-3: #6bcb95 !important;
22
+ --el-color-success-light-4: #80d3a4 !important;
23
+ --el-color-success-light-5: #95dbb4 !important;
24
+ --el-color-success-light-6: #aae3c3 !important;
25
+ --el-color-success-light-7: #bfebd2 !important;
26
+ --el-color-success-light-8: #d5f4e1 !important;
27
+ --el-color-success-light-9: #eaf9f0 !important;
28
+ --el-color-success-dark-1: #229051 !important;
29
+ --el-color-success-dark-2: #1b733f !important;
30
+ --el-color-success-dark-3: #14562f !important;
31
+ --el-color-success-dark-4: #0d3a20 !important;
32
+ --el-color-warning: #ea9a13 !important;
33
+ --el-color-warning-light-1: #eca42b !important;
34
+ --el-color-warning-light-2: #efae42 !important;
35
+ --el-color-warning-light-3: #f1b85a !important;
36
+ --el-color-warning-light-4: #f3c171 !important;
37
+ --el-color-warning-light-5: #f5cb89 !important;
38
+ --el-color-warning-light-6: #f7d5a1 !important;
39
+ --el-color-warning-light-7: #f9dfb8 !important;
40
+ --el-color-warning-light-8: #fce8d0 !important;
41
+ --el-color-warning-light-9: #fef2e7 !important;
42
+ --el-color-warning-dark-1: #c47f0e !important;
43
+ --el-color-warning-dark-2: #9d650a !important;
44
+ --el-color-warning-dark-3: #754a07 !important;
45
+ --el-color-warning-dark-4: #4e3004 !important;
46
+ --el-color-danger: #bb2d3f !important;
47
+ --el-color-danger-light-1: #c34253 !important;
48
+ --el-color-danger-light-2: #ca5766 !important;
49
+ --el-color-danger-light-3: #d16b78 !important;
50
+ --el-color-danger-light-4: #d8808b !important;
51
+ --el-color-danger-light-5: #dd969f !important;
52
+ --el-color-danger-light-6: #e4abb2 !important;
53
+ --el-color-danger-light-7: #e8c0c5 !important;
54
+ --el-color-danger-light-8: #f0d5d9 !important;
55
+ --el-color-danger-light-9: #f7eaec !important;
56
+ --el-color-danger-dark-1: #962433 !important;
57
+ --el-color-danger-dark-2: #711b26 !important;
58
+ --el-color-danger-dark-3: #4b1219 !important;
59
+ --el-color-danger-dark-4: #26090d !important;
60
+ --el-color-error: #bb2d3f !important;
61
+ --el-color-error-light-1: #c34253 !important;
62
+ --el-color-error-light-2: #ca5766 !important;
63
+ --el-color-error-light-3: #d16b78 !important;
64
+ --el-color-error-light-4: #d8808b !important;
65
+ --el-color-error-light-5: #dd969f !important;
66
+ --el-color-error-light-6: #e4abb2 !important;
67
+ --el-color-error-light-7: #e8c0c5 !important;
68
+ --el-color-error-light-8: #f0d5d9 !important;
69
+ --el-color-error-light-9: #f7eaec !important;
70
+ --el-color-error-dark-1: #962433 !important;
71
+ --el-color-error-dark-2: #711b26 !important;
72
+ --el-color-error-dark-3: #4b1219 !important;
73
+ --el-color-error-dark-4: #26090d !important;
72
74
  --el-color-info: #909399;
73
75
  --el-color-info-light-1: #9b9ea3;
74
76
  --el-color-info-light-2: #a7a9ae;
@@ -117,10 +119,10 @@
117
119
  --el-box-shadow-light: 0px 4px 10px 0px rgba(0, 0, 0, 0.1);
118
120
  --el-box-shadow-lighter: 0px 6px 12px 0px rgba(0, 0, 0, 0.12);
119
121
  --el-box-shadow-dark: 0px 16px 48px 16px rgba(0, 0, 0, 0.08), 0px 12px 32px rgba(0, 0, 0, 0.12), 0px 8px 16px -8px rgba(0, 0, 0, 0.16);
120
- --el-border-radius-base: 6px;
121
- --el-border-radius-small: 2px;
122
- --el-border-radius-round: 20px;
123
- --el-border-radius-circle: 100%;
122
+ --el-border-radius-base: 6px !important;
123
+ --el-border-radius-small: 2px !important;
124
+ --el-border-radius-round: 20px !important;
125
+ --el-border-radius-circle: 100% !important;
124
126
  --el-line-height-1: 20px;
125
127
  --el-line-height-2: 20px;
126
128
  --el-line-height-3: 20px;
package/dist/tokens.css CHANGED
@@ -1,74 +1,76 @@
1
1
  :root body {
2
- --el-color-primary: #2254f4;
3
- --el-color-primary-light-1: #3865f5;
4
- --el-color-primary-light-2: #5178f6;
5
- --el-color-primary-light-3: #7a98f8;
6
- --el-color-primary-light-4: #91aaf9;
7
- --el-color-primary-light-5: #a8bbfa;
8
- --el-color-primary-light-6: #bfccfc;
9
- --el-color-primary-light-7: #d3ddfd;
10
- --el-color-primary-light-8: #e6ebfe;
11
- --el-color-primary-light-9: #f2f5ff;
12
- --el-color-primary-dark-1: #1b43c3;
13
- --el-color-primary-dark-2: #1738a3;
14
- --el-color-primary-dark-3: #102873;
15
- --el-color-primary-dark-4: #0a1a4d;
16
- --el-color-success: #2bb268;
17
- --el-color-success-light-1: #40ba77;
18
- --el-color-success-light-2: #55c286;
19
- --el-color-success-light-3: #6bcb95;
20
- --el-color-success-light-4: #80d3a4;
21
- --el-color-success-light-5: #95dbb4;
22
- --el-color-success-light-6: #aae3c3;
23
- --el-color-success-light-7: #bfebd2;
24
- --el-color-success-light-8: #d5f4e1;
25
- --el-color-success-light-9: #eaf9f0;
26
- --el-color-success-dark-1: #229051;
27
- --el-color-success-dark-2: #1b733f;
28
- --el-color-success-dark-3: #14562f;
29
- --el-color-success-dark-4: #0d3a20;
30
- --el-color-warning: #ea9a13;
31
- --el-color-warning-light-1: #eca42b;
32
- --el-color-warning-light-2: #efae42;
33
- --el-color-warning-light-3: #f1b85a;
34
- --el-color-warning-light-4: #f3c171;
35
- --el-color-warning-light-5: #f5cb89;
36
- --el-color-warning-light-6: #f7d5a1;
37
- --el-color-warning-light-7: #f9dfb8;
38
- --el-color-warning-light-8: #fce8d0;
39
- --el-color-warning-light-9: #fef2e7;
40
- --el-color-warning-dark-1: #c47f0e;
41
- --el-color-warning-dark-2: #9d650a;
42
- --el-color-warning-dark-3: #754a07;
43
- --el-color-warning-dark-4: #4e3004;
44
- --el-color-danger: #bb2d3f;
45
- --el-color-danger-light-1: #c34253;
46
- --el-color-danger-light-2: #ca5766;
47
- --el-color-danger-light-3: #d16b78;
48
- --el-color-danger-light-4: #d8808b;
49
- --el-color-danger-light-5: #dd969f;
50
- --el-color-danger-light-6: #e4abb2;
51
- --el-color-danger-light-7: #e8c0c5;
52
- --el-color-danger-light-8: #f0d5d9;
53
- --el-color-danger-light-9: #f7eaec;
54
- --el-color-danger-dark-1: #962433;
55
- --el-color-danger-dark-2: #711b26;
56
- --el-color-danger-dark-3: #4b1219;
57
- --el-color-danger-dark-4: #26090d;
58
- --el-color-error: #bb2d3f;
59
- --el-color-error-light-1: #c34253;
60
- --el-color-error-light-2: #ca5766;
61
- --el-color-error-light-3: #d16b78;
62
- --el-color-error-light-4: #d8808b;
63
- --el-color-error-light-5: #dd969f;
64
- --el-color-error-light-6: #e4abb2;
65
- --el-color-error-light-7: #e8c0c5;
66
- --el-color-error-light-8: #f0d5d9;
67
- --el-color-error-light-9: #f7eaec;
68
- --el-color-error-dark-1: #962433;
69
- --el-color-error-dark-2: #711b26;
70
- --el-color-error-dark-3: #4b1219;
71
- --el-color-error-dark-4: #26090d;
2
+ /* 客户主题契约:防止平台运行时 body 内联主题覆盖。 */
3
+ --el-color-primary: #002a8f !important;
4
+ --el-color-primary-rgb: 0, 42, 143 !important;
5
+ --el-color-primary-light-1: #1a3f9a !important;
6
+ --el-color-primary-light-2: #3355a5 !important;
7
+ --el-color-primary-light-3: #4d6ab1 !important;
8
+ --el-color-primary-light-4: #667fbc !important;
9
+ --el-color-primary-light-5: #8094c7 !important;
10
+ --el-color-primary-light-6: #99aad2 !important;
11
+ --el-color-primary-light-7: #b2bfdd !important;
12
+ --el-color-primary-light-8: #ccd4e9 !important;
13
+ --el-color-primary-light-9: #e5eaf4 !important;
14
+ --el-color-primary-dark-1: #002681 !important;
15
+ --el-color-primary-dark-2: #002272 !important;
16
+ --el-color-primary-dark-3: #001d64 !important;
17
+ --el-color-primary-dark-4: #001956 !important;
18
+ --el-color-success: #2bb268 !important;
19
+ --el-color-success-light-1: #40ba77 !important;
20
+ --el-color-success-light-2: #55c286 !important;
21
+ --el-color-success-light-3: #6bcb95 !important;
22
+ --el-color-success-light-4: #80d3a4 !important;
23
+ --el-color-success-light-5: #95dbb4 !important;
24
+ --el-color-success-light-6: #aae3c3 !important;
25
+ --el-color-success-light-7: #bfebd2 !important;
26
+ --el-color-success-light-8: #d5f4e1 !important;
27
+ --el-color-success-light-9: #eaf9f0 !important;
28
+ --el-color-success-dark-1: #229051 !important;
29
+ --el-color-success-dark-2: #1b733f !important;
30
+ --el-color-success-dark-3: #14562f !important;
31
+ --el-color-success-dark-4: #0d3a20 !important;
32
+ --el-color-warning: #ea9a13 !important;
33
+ --el-color-warning-light-1: #eca42b !important;
34
+ --el-color-warning-light-2: #efae42 !important;
35
+ --el-color-warning-light-3: #f1b85a !important;
36
+ --el-color-warning-light-4: #f3c171 !important;
37
+ --el-color-warning-light-5: #f5cb89 !important;
38
+ --el-color-warning-light-6: #f7d5a1 !important;
39
+ --el-color-warning-light-7: #f9dfb8 !important;
40
+ --el-color-warning-light-8: #fce8d0 !important;
41
+ --el-color-warning-light-9: #fef2e7 !important;
42
+ --el-color-warning-dark-1: #c47f0e !important;
43
+ --el-color-warning-dark-2: #9d650a !important;
44
+ --el-color-warning-dark-3: #754a07 !important;
45
+ --el-color-warning-dark-4: #4e3004 !important;
46
+ --el-color-danger: #bb2d3f !important;
47
+ --el-color-danger-light-1: #c34253 !important;
48
+ --el-color-danger-light-2: #ca5766 !important;
49
+ --el-color-danger-light-3: #d16b78 !important;
50
+ --el-color-danger-light-4: #d8808b !important;
51
+ --el-color-danger-light-5: #dd969f !important;
52
+ --el-color-danger-light-6: #e4abb2 !important;
53
+ --el-color-danger-light-7: #e8c0c5 !important;
54
+ --el-color-danger-light-8: #f0d5d9 !important;
55
+ --el-color-danger-light-9: #f7eaec !important;
56
+ --el-color-danger-dark-1: #962433 !important;
57
+ --el-color-danger-dark-2: #711b26 !important;
58
+ --el-color-danger-dark-3: #4b1219 !important;
59
+ --el-color-danger-dark-4: #26090d !important;
60
+ --el-color-error: #bb2d3f !important;
61
+ --el-color-error-light-1: #c34253 !important;
62
+ --el-color-error-light-2: #ca5766 !important;
63
+ --el-color-error-light-3: #d16b78 !important;
64
+ --el-color-error-light-4: #d8808b !important;
65
+ --el-color-error-light-5: #dd969f !important;
66
+ --el-color-error-light-6: #e4abb2 !important;
67
+ --el-color-error-light-7: #e8c0c5 !important;
68
+ --el-color-error-light-8: #f0d5d9 !important;
69
+ --el-color-error-light-9: #f7eaec !important;
70
+ --el-color-error-dark-1: #962433 !important;
71
+ --el-color-error-dark-2: #711b26 !important;
72
+ --el-color-error-dark-3: #4b1219 !important;
73
+ --el-color-error-dark-4: #26090d !important;
72
74
  --el-color-info: #909399;
73
75
  --el-color-info-light-1: #9b9ea3;
74
76
  --el-color-info-light-2: #a7a9ae;
@@ -117,10 +119,10 @@
117
119
  --el-box-shadow-light: 0px 4px 10px 0px rgba(0, 0, 0, 0.1);
118
120
  --el-box-shadow-lighter: 0px 6px 12px 0px rgba(0, 0, 0, 0.12);
119
121
  --el-box-shadow-dark: 0px 16px 48px 16px rgba(0, 0, 0, 0.08), 0px 12px 32px rgba(0, 0, 0, 0.12), 0px 8px 16px -8px rgba(0, 0, 0, 0.16);
120
- --el-border-radius-base: 6px;
121
- --el-border-radius-small: 2px;
122
- --el-border-radius-round: 20px;
123
- --el-border-radius-circle: 100%;
122
+ --el-border-radius-base: 6px !important;
123
+ --el-border-radius-small: 2px !important;
124
+ --el-border-radius-round: 20px !important;
125
+ --el-border-radius-circle: 100% !important;
124
126
  --el-line-height-1: 20px;
125
127
  --el-line-height-2: 20px;
126
128
  --el-line-height-3: 20px;
@@ -11,7 +11,7 @@
11
11
  | `element-plus` | **`2.2.6-prod.3`** | 集团 jh- 定制版,搭配 `@jhlc/jh-ui` 使用,DOM 仍为 `.el-input > .el-input__inner` 直挂结构(**EP 2.3.0 起才引入 `.el-input__wrapper`**) |
12
12
  | `@jhlc/jh-ui` | **`3.1.0`** | SCSS 皮肤包,`.com-text` label 包裹、`.has-colon ::after` 冒号注入、`.el-form-item--default { margin-bottom: 24px }` 等强约束 |
13
13
  | `@jhlc/common-core` | `3.1.0` 或 `3.1.0-prod.x` | 基础 util/types,`@jhlc/jh-ui` 间接依赖 |
14
- | `@agile-team/wl-skills-ui` | `^1.9.0` | 已对齐 jh-ui 3.1.0 + EP 2.2.6-prod.3 的 DOM 假设 |
14
+ | `@agile-team/wl-skills-ui` | `^1.9.2` | 已对齐 jh-ui 3.1.0 + EP 2.2.6-prod.3 的 DOM 假设、客户主题锁与 6px 基础圆角 |
15
15
 
16
16
  ## 项目集群当前实测
17
17
 
@@ -35,7 +35,7 @@
35
35
 
36
36
  ## 适配建议
37
37
 
38
- - 集团内项目:**统一锚定 `element-plus@2.2.6-prod.3` + `@jhlc/jh-ui@3.1.0`**,与 wl-skills-ui v1.7.0 三方对齐。
38
+ - 集团内项目:**统一锚定 `element-plus@2.2.6-prod.3` + `@jhlc/jh-ui@3.1.0`**,与 wl-skills-ui v1.9.2 三方对齐。
39
39
  - 升级 `element-plus` 到 2.3+ 前,必须同步升级 `@jhlc/jh-ui` 到对应支持版本,否则 `.com-text` / `.el-input__inner` DOM 与 EP `__wrapper` 体系不兼容。
40
40
  - 新项目接入:见 README 「快速接入」章节,默认会按本表声明 peerDependency 范围。
41
41
 
@@ -315,4 +315,132 @@ registerColumnAutoMaps({
315
315
  }
316
316
  });
317
317
 
318
- export { AUDIT_STATUS_MAP, ENABLE_STATUS_MAP, RATING_LEVEL_COLORS, VERIFY_STATUS_MAP, clearColumnAutoMap, defineColumns, getColumnAutoMap, registerColumnAutoMap, registerColumnAutoMaps, registerDictColorMap, registerDictColorMaps, renderAuditStatus, renderBadge, renderClassifyTag, renderCountBadge, renderDangerText, renderDictClassifyTag, renderEnableStatus, renderOps, renderRatingLevel, renderTagNode, renderTagSlot, renderVerifyStatus, setDictResolver };
318
+ // runtime/theme-lock.ts
319
+ var BRAND_THEME_TOKENS = Object.freeze({
320
+ "--el-color-primary": "#002a8f",
321
+ "--el-color-primary-rgb": "0, 42, 143",
322
+ "--el-color-primary-light-1": "#1a3f9a",
323
+ "--el-color-primary-light-2": "#3355a5",
324
+ "--el-color-primary-light-3": "#4d6ab1",
325
+ "--el-color-primary-light-4": "#667fbc",
326
+ "--el-color-primary-light-5": "#8094c7",
327
+ "--el-color-primary-light-6": "#99aad2",
328
+ "--el-color-primary-light-7": "#b2bfdd",
329
+ "--el-color-primary-light-8": "#ccd4e9",
330
+ "--el-color-primary-light-9": "#e5eaf4",
331
+ "--el-color-primary-dark-1": "#002681",
332
+ "--el-color-primary-dark-2": "#002272",
333
+ "--el-color-primary-dark-3": "#001d64",
334
+ "--el-color-primary-dark-4": "#001956",
335
+ "--el-color-success": "#2bb268",
336
+ "--el-color-success-light-1": "#40ba77",
337
+ "--el-color-success-light-2": "#55c286",
338
+ "--el-color-success-light-3": "#6bcb95",
339
+ "--el-color-success-light-4": "#80d3a4",
340
+ "--el-color-success-light-5": "#95dbb4",
341
+ "--el-color-success-light-6": "#aae3c3",
342
+ "--el-color-success-light-7": "#bfebd2",
343
+ "--el-color-success-light-8": "#d5f4e1",
344
+ "--el-color-success-light-9": "#eaf9f0",
345
+ "--el-color-success-dark-1": "#229051",
346
+ "--el-color-success-dark-2": "#1b733f",
347
+ "--el-color-success-dark-3": "#14562f",
348
+ "--el-color-success-dark-4": "#0d3a20",
349
+ "--el-color-warning": "#ea9a13",
350
+ "--el-color-warning-light-1": "#eca42b",
351
+ "--el-color-warning-light-2": "#efae42",
352
+ "--el-color-warning-light-3": "#f1b85a",
353
+ "--el-color-warning-light-4": "#f3c171",
354
+ "--el-color-warning-light-5": "#f5cb89",
355
+ "--el-color-warning-light-6": "#f7d5a1",
356
+ "--el-color-warning-light-7": "#f9dfb8",
357
+ "--el-color-warning-light-8": "#fce8d0",
358
+ "--el-color-warning-light-9": "#fef2e7",
359
+ "--el-color-warning-dark-1": "#c47f0e",
360
+ "--el-color-warning-dark-2": "#9d650a",
361
+ "--el-color-warning-dark-3": "#754a07",
362
+ "--el-color-warning-dark-4": "#4e3004",
363
+ "--el-color-danger": "#bb2d3f",
364
+ "--el-color-danger-light-1": "#c34253",
365
+ "--el-color-danger-light-2": "#ca5766",
366
+ "--el-color-danger-light-3": "#d16b78",
367
+ "--el-color-danger-light-4": "#d8808b",
368
+ "--el-color-danger-light-5": "#dd969f",
369
+ "--el-color-danger-light-6": "#e4abb2",
370
+ "--el-color-danger-light-7": "#e8c0c5",
371
+ "--el-color-danger-light-8": "#f0d5d9",
372
+ "--el-color-danger-light-9": "#f7eaec",
373
+ "--el-color-danger-dark-1": "#962433",
374
+ "--el-color-danger-dark-2": "#711b26",
375
+ "--el-color-danger-dark-3": "#4b1219",
376
+ "--el-color-danger-dark-4": "#26090d",
377
+ "--el-color-error": "#bb2d3f",
378
+ "--el-color-error-light-1": "#c34253",
379
+ "--el-color-error-light-2": "#ca5766",
380
+ "--el-color-error-light-3": "#d16b78",
381
+ "--el-color-error-light-4": "#d8808b",
382
+ "--el-color-error-light-5": "#dd969f",
383
+ "--el-color-error-light-6": "#e4abb2",
384
+ "--el-color-error-light-7": "#e8c0c5",
385
+ "--el-color-error-light-8": "#f0d5d9",
386
+ "--el-color-error-light-9": "#f7eaec",
387
+ "--el-color-error-dark-1": "#962433",
388
+ "--el-color-error-dark-2": "#711b26",
389
+ "--el-color-error-dark-3": "#4b1219",
390
+ "--el-color-error-dark-4": "#26090d",
391
+ "--el-border-radius-base": "6px",
392
+ "--el-border-radius-small": "2px",
393
+ "--el-border-radius-round": "20px",
394
+ "--el-border-radius-circle": "100%"
395
+ });
396
+ var observer;
397
+ var waitingForBody = false;
398
+ function enforceOn(target) {
399
+ if (!target) return;
400
+ for (const [name, value] of Object.entries(BRAND_THEME_TOKENS)) {
401
+ if (target.style.getPropertyValue(name).trim().toLowerCase() !== value || target.style.getPropertyPriority(name) !== "important") {
402
+ target.style.setProperty(name, value, "important");
403
+ }
404
+ }
405
+ }
406
+ function bindObserver() {
407
+ if (typeof document === "undefined") return;
408
+ enforceOn(document.documentElement);
409
+ enforceOn(document.body);
410
+ if (typeof MutationObserver === "undefined") return;
411
+ observer ?? (observer = new MutationObserver((mutations) => {
412
+ const bodyChanged = mutations.some((mutation) => mutation.type === "childList");
413
+ enforceOn(document.documentElement);
414
+ enforceOn(document.body);
415
+ if (bodyChanged) bindObserver();
416
+ }));
417
+ observer.disconnect();
418
+ observer.observe(document.documentElement, {
419
+ attributes: true,
420
+ attributeFilter: ["style"],
421
+ childList: true
422
+ });
423
+ if (document.body) {
424
+ observer.observe(document.body, {
425
+ attributes: true,
426
+ attributeFilter: ["style"]
427
+ });
428
+ }
429
+ }
430
+ function installBrandThemeLock() {
431
+ if (typeof document === "undefined") return;
432
+ bindObserver();
433
+ if (!document.body && !waitingForBody) {
434
+ waitingForBody = true;
435
+ document.addEventListener(
436
+ "DOMContentLoaded",
437
+ () => {
438
+ waitingForBody = false;
439
+ bindObserver();
440
+ },
441
+ { once: true }
442
+ );
443
+ }
444
+ }
445
+
446
+ export { AUDIT_STATUS_MAP, BRAND_THEME_TOKENS, ENABLE_STATUS_MAP, RATING_LEVEL_COLORS, VERIFY_STATUS_MAP, clearColumnAutoMap, defineColumns, getColumnAutoMap, installBrandThemeLock, registerColumnAutoMap, registerColumnAutoMaps, registerDictColorMap, registerDictColorMaps, renderAuditStatus, renderBadge, renderClassifyTag, renderCountBadge, renderDangerText, renderDictClassifyTag, renderEnableStatus, renderOps, renderRatingLevel, renderTagNode, renderTagSlot, renderVerifyStatus, setDictResolver };