Просмотр исходного кода

docs(plan)+chore(tasks): UI 令牌收敛第二批任务分解 U3-U6(待派发)+ U7/U8(blocked 需先出方案)

- 任务书追加第二批章节:U3 小程序圆角收敛 4 档(P0)/ U4 30rpx 归并(P1)
  / U5 后台品牌色残余收口(P1)/ U6 后台间距令牌引用率提升(P2)
- U7 大字号+字重收口、U8 超长页面拆分 标记 blocked,需先出方案经主理人确认
- tasks_backlog.json 新增 U3-U8 条目,U3-U6 status=pending 可被巡检派发
Agnes Agent 2 недель назад
Родитель
Сommit
4cc6ac5ab0

+ 82 - 0
docs/superpowers/plans/2026-10-26-ui-token-convergence-tasks.md

@@ -142,6 +142,88 @@ cfc-web 改完必须:`cd cfc-web && npm run lint`(如有)或至少 `npx vu
 
 ---
 
+# 第二批任务(2026-10-26 分解,U3–U6)
+
+> U1/U2 已于 2026-10-26 合并入 cfclub(merge commit `ea43a6c79`)。本章承接审查报告中**未被 U1/U2 覆盖**的剩余项,按优先级分解为 4 个可派发批次。
+> 本批次同样遵守「全局纪律」第 1–6 条。
+
+## U3 小程序圆角收敛为 4 档(cfc-frontend,P0)
+
+**背景**:审查报告判定为「圆角一致性 30 分」。uni.scss 已有 radius 令牌,但页面实际用了 **10 种值**——`40rpx` 与 `44rpx` 只差 4rpx 却并存,`6rpx` 与 `8rpx` 并存,是"看起来差不多但不一致"的典型堆积产物。**这是报告排第一的 P0 项,U1 批次明确未做,本批补上。**
+
+**目标**:收敛为 **4 档 + 全圆角**:
+
+| 档位 | 值 | 语义 |
+|---|---|---|
+| `$uni-radius-sm` | 8rpx | 标签、小元素 |
+| `$uni-radius-md` | 16rpx | 按钮、输入框 |
+| `$uni-radius-lg` | 24rpx | 卡片 |
+| `$uni-radius-full` | 999rpx | 胶囊、头像 |
+
+**规则**:
+- 先在 uni.scss 检查是否已有 `$uni-radius-*` 令牌;**没有才按上表追加**(只追加,不改既有值)
+- 归并映射:`4rpx→8rpx`(若确为极细边框圆角则保留并报告)、`6rpx→8rpx`、`10rpx→8rpx`、`12rpx→16rpx`、`16rpx` 保留、`20rpx→24rpx`、`24rpx` 保留、`40rpx→24rpx`、`44rpx→24rpx`
+- 半圆角/局部圆角写法(如 `border-radius: 0 0 24rpx 24rpx`、`border-radius: 8rpx 0 0 8rpx`)只替换数字部分,保留方位结构
+- 已有 `999rpx` / `50%` / `circle` 保留
+- 只动 `<style>` 段的 CSS 声明;JS 里的圆角字符串跳过并报告
+
+**验证**:`grep -rhoE "border-radius: *[0-9]+rpx" cfc-frontend/pages/ cfc-frontend/components/ | sort | uniq -c | sort -rn` —— 值种类收敛到 **≤ 4 种**;报告替换前后各档命中数
+
+## U4 小程序 30rpx 归并(cfc-frontend,P1)
+
+**背景**:`30rpx` 一个值 **492 处**(`padding: 30rpx` 262 次 + `margin-bottom: 30rpx` 155 次为两大来源),既非 4 的倍数也非 8 的倍数(30 = 6×5)。30rpx 是**页面左右安全边距**的主值。U1-4 已在 uni.scss 定义 `$uni-space-page: 30rpx` 保留安全边距语义。
+
+**规则**(区分两种 30rpx,分开处理):
+- **页面安全边距**(页面根容器 / `.page` / `padding: 30rpx` 四向一致 / `padding-left+right: 30rpx` 对称)→ 改用 `$uni-space-page`,**值不变**,只是补上令牌语义
+- **内部间距**(子元素的 `margin-top/bottom/left/right: 30rpx`、`gap: 30rpx`、卡片内 margin)→ 就近归并:默认 `$uni-space-lg`(24rpx);若视觉上明显是区块大间距则 `$uni-space-xl`(32rpx)
+- **本批只处理 30rpx 这一种值**,不扩散到 26rpx/22rpx/18rpx/80rpx 等其他裸值(那是后续批次的范围)
+- 不做像素级视觉微调——归并后若某页视觉明显塌陷,在报告中列出该文件供人工复核,**不要为救视觉而保留裸值**
+
+**验证**:`grep -rho "30rpx" cfc-frontend/pages/ cfc-frontend/components/ | wc -l` 从 492 降;剩余部分应**几乎全为**页面安全边距的语义保留,逐条说明
+
+## U5 后台品牌色残余收口(cfc-web,P1)
+
+**背景**:U2-1 已把 CSS 声明里的 `#1677FF` → `var(--adm-primary)`,剩余 **16 处** 落在 JS 数据对象 / canvas 图表配置 / `el-tag` 的 color prop / 注释中,U2 按"只改 CSS 声明"纪律跳过。这 16 处使品牌色在后台仍以硬编码形式散落。
+
+**规则**:
+- 新建 `cfc-web/src/utils/colorTokens.js`,把**五维色彩映射**(`身#FF8C42 / 智#1677FF / 富#F59E0B / 行#10B981 / 心#FF6B9D`)收敛为**单一出口**,页面引用它而不是各自重复定义
+- 需收敛的重复定义点(grep 到的):`components/DimensionWeightPicker.vue`、`views/admin/Dashboard.vue`、`views/admin/EnergyBehaviorConfig.vue`、`views/admin/EnergySandbox.vue`、`views/admin/org/Dashboard.vue`、`views/admin/ProfileManagement.vue`、`views/teacher/TeacherTeam.vue`、`views/MbtiProfiles.vue`
+- `el-tag color="#1677FF"` prop → 改为 class 绑定(如 `class="tag-primary"`)走 CSS 变量;el-tag 不支持 CSS 变量时可用 `:color="adminColor('primary')"`
+- **canvas / echarts 图表配置**(`itemStyle.color`、`color: [...]` 数组)→ 用 `getComputedStyle(document.documentElement).getPropertyValue('--adm-primary').trim()` 读取,封装为 `adminColor('primary')`;canvas 不解析 CSS var,必须走此封装
+- **注释里的色值不动**(`Login.vue:397` 是品牌色说明注释,改注释无意义)
+- `admin-tokens.css` 令牌定义本身**不动**
+
+**验证**:`grep -rni "#1677ff" cfc-web/src/views/ cfc-web/src/components/` 从 16 降到**只剩注释与令牌定义**;报告 colorTokens.js 的导出清单与全部调用点
+
+## U6 后台间距令牌引用率提升(cfc-web,P2)
+
+**背景**:审查报告实测——`var(--space-*)` 引用 723 次 vs 裸写 px **2585 次**,令牌引用率仅 **21.9%**。admin-tokens.css 令牌齐全却只用两成,是两端最刺眼的落差。
+
+**规则**(控制批次规模,避免一次性全库替换):
+- 本批**只做 3 个高频模块**:`src/views/teacher/` 全目录、`src/views/admin/OrderManage.vue`、`src/views/admin/Dashboard.vue`
+- 把 padding/margin 的裸写 px 值归并到 `var(--space-*)` 对应令牌(按 8/12/16/20/24/32px 就近匹配,**优先 24px** 对齐既有规范方向)
+- **不改** `border-radius` / `font-size` / `width` / `height` / `line-height` / `top/left` 等非间距属性
+- **不改** `admin-tokens.css`
+- 本批完成后报告全库新的引用率,作为后续批次的基线
+
+**验证**:`grep -rhoE "(padding|margin)(-[a-z]+)? *: *[0-9]+px" src/views/teacher/ src/views/admin/OrderManage.vue src/views/admin/Dashboard.vue | wc -l` 前后对比;报告全库 `var(--` / 裸写 px 的新引用率
+
+## U7 大字号段与字重收口(cfc-frontend,P3,需真机目检后再派)
+
+**背景**:40~120rpx 之间有 **13 种裸值**(40/42/48/52/56/60/64/72/80/88/96/100/120),标题、数字、大按钮全在裸写;另有 `font-weight: 800` ×19 + `900` ×3 超出 uni.scss 令牌上限(只到 700),中文系统字体在 20-30rpx 小字号下 800/900 会糊字。
+
+**为何 P3**:大字号归并**必然改变视觉重量**,字重降低影响醒目度,二者都需要真机确认后再动,不适合盲派批量替换。
+
+**规则**:先出方案(值→令牌的完整映射表 + 视觉影响评估),**主理人确认后再派**。
+
+## U8 超长页面拆分(cfc-frontend,P3,需先出方案)
+
+**背景**:16 个文件 >800 行,最重 `index-home/index.vue` 3057 行。属**工程结构重构**,与 UI 令牌收敛不同域,风险高(涉及模板/数据/方法拆分与路由、组件引用链)。
+
+**规则**:先按「组件抽取清单 + 拆分顺序 + 每步回归范围」出方案,**主理人确认后再派**,按页面逐个拆,禁止一次性批量拆分。
+
+---
+
 # 报告要求(会话完成时随 commit 一并说明)
 
 每个会话按以下格式回报:

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
tools/xaf_agent_hub/tasks_backlog.json


Некоторые файлы не были показаны из-за большого количества измененных файлов