Files
ttstd-infinite-canvas/docs/plans/ui-kit-consumption-audit.md
2026-09-14 01:11:56 +08:00

14 KiB
Raw Blame History

UI-kit 消费一致性审计报告(页面 × 管理后台)

审计时间:2026-09-06 | 审计范围:web/src(660 个 ts/tsx 文件全量静态扫描;其中 pages/ 树 146 个文件按页面域逐一核对) 审计方法:按文件解析对 antd 与 @/components/ui/* 的 import,做"同角色残留对比"——即 ui 组件库已提供对标族的控件(Switch / Checkbox / Segmented / Select / Tooltip / Empty / Alert / Badge / 状态 Tag),页面仍直接 import 原生 antd 同款控件的,判为样式不一致风险点。 判定依据:docs/adr/0008-ui-component-layer-antd-replacement.md、docs/plans/ui-kit-rollout-plan.mdx(B1–B5 批次与 2026-09-05 执行状态)、web/src/components/ui/README.md。文档声明均与本次代码扫描结果交叉核对。

一、结论速览

  1. 文档声明的归零项属实:antd Empty(0 处)、Badge(0 处)、状态语义 Tag(已清零)、Alert(全库仅剩 1 处 = pages/projects/detail.tsx 的项目已归档 banner,与 rollout 日志"唯一保留 detail.tsx 归档 banner"完全一致)。ui kit 的 EmptyState / Callout / StatusBadge 确实接过了这些角色。
  2. 页面与后台确实存在"未统一消费"的同角色双观感,集中在 5 个族,按风险排序:
    • Select:全库 53 个文件仍用 antd Select(后台 19、主界面页面 17、画布组件 10、共享组件 7),而 ui select 仅被 1 个文件消费;
    • Tooltip:全库 29 个文件仍用 antd Tooltip(画布组件 16 为主),ui tooltip 仅 3 个文件消费;
    • Segmented:画布组件 11 处 antd Segmented,与设置页/后台已铺开的 ui SegmentedControl(14 文件)并存;
    • Switch:画布浮层/节点面板 8 处 + 图片/视频设置面板 2 处仍是 antd Switch,与 ui switch(29 文件,主要分布在设置页与后台)并存;
    • Checkbox:canvas-script-node.tsx 1 处 antd Checkbox.Group(列显隐选择器),ui checkbox 已在后台 2 个文件消费。
  3. 主界面页面区(main/*)与后台区(admin/*)都有页面完全零消费 ui,其中部分零消费且零同角色残留(如登录注册 auth/),是通过 antd 全局 token 主题统一观感的;部分则存在可直接迁移的同角色残留(如 create/ 的 antd Tooltip、canvas/index.tsx 的朴素 Select)。
  4. 结构性判断(与 rollout 计划一致):剩余 16 处 Tag 全部为分类 chip/彩标(无状态徽章语义),属有意保留,不判为不一致;Spin 4 处无 ui 对标,仅记录。ui kit 尚未提供的 Modal/Form/Table/Drawer/Input 等原生控件不在本次同角色判定范围。

二、判定映射表

antd 控件 对标 ui 族 现状(全库 import 文件数)
Switch ui/base/switch antd 10 处 vs ui 29 文件
Checkbox(+Group) ui/base/checkbox antd 1 处 vs ui 2 文件
Segmented ui/base/segmented-control antd 11 处 vs ui 14 文件
Select ui/base/select(单选壳;搜索/多选未覆盖) antd 53 处 vs ui 1 文件
Tooltip ui/base/tooltip antd 29 处 vs ui 3 文件
Empty ui/product/empty-state antd 0 处 vs ui 11 文件(已归零 ✓)
Alert ui/product/callout antd 1 处(detail.tsx 归档 banner,有意保留)vs ui 9 文件
Badge ui/base/badges(StatusBadge) antd 0 处 vs ui 13 文件(已归零 ✓)
Tag(状态语义) ui/base/badges 状态场景已清零;剩余 16 处均为分类 chips(有意保留)
Spin (无 ui 对标) 4 处,仅信息项

三、页面域 × ui 消费矩阵(pages 树,146 文件)

图例:ui= 直接 import ui 族的文件数;ui族 该区用到的 ui 族;残留 该区 antd 同角色 import 计数("—"=无)。

主界面页面区(main/*,106 文件)

页面域 文件 ui ui 族 同角色残留
auth(登录/注册) 4 0 — —
assets(素材库) 4 2 IconButton/ToolButton, StatusBadge Select×2, Tag×1(chip)
canvas(创作画布页) 43 3 Kbd, fx Select×1(朴素), Tag×2(chip)
create(新建) 4 0 — Tooltip×1, Spin×1
dev 2 1 StatusBadge, Switch —
not-found / route-error 2 2 fx —
plugins(插件中心) 5 2 EmptyState, IconButton/ToolButton, Switch Select×1, Tag×1(chip), Spin×1
projects(项目管理) 20 5 Callout, EmptyState, SegmentedControl, StatusBadge Select×4, Tooltip×3, Alert×1(有意保留)
settings(用户设置) 9 6 Callout, SegmentedControl, Select, StatusBadge, Switch Select×5, Tooltip×1, Tag×2(chip)
skills(技能中心) 5 3 SegmentedControl, Switch Select×3, Tooltip×2
tasks(任务中心) 6 4 IconButton/ToolButton, SegmentedControl, Switch, Tooltip Select×1
wallet(钱包) 1 1 SegmentedControl Tag×1(chip)
test-voice-recording 1 0 — —

管理后台区(admin/*,40 文件)

页面域 文件 ui ui 族 同角色残留
channels(渠道管理) 1 1 Switch Select×1
components(后台共享面板) 15 8 Checkbox, EmptyState, IconButton/ToolButton, SegmentedControl, StatusBadge, Switch, fx Select×8, Tooltip×2, Tag×1(chip)
logical-models(逻辑模型) 2 2 Callout, StatusBadge, Switch Select×2, Tag×1(chip)
logs(操作日志) 1 1 IconButton/ToolButton Select×1
payments(账单) 1 1 Callout, Switch Select×1
plugins(后台插件) 1 1 Switch Select×1
redemption-codes(兑换码) 1 0 — —
settings(后台设置,9 文件) 9 6 IconButton/ToolButton, SegmentedControl, Switch, Tooltip Select×2
storyboard-prompts 1 1 Callout, StatusBadge Select×1
users(用户管理) 4 1 Checkbox Select×2
非页面文件(context/route-pages/index/lib) 4 0 — —

零消费 ui 的页面(需重点关注)

页面 说明 风险
main/auth(登录/注册/找回) 0 ui、0 残留 低:表单/命令类控件 ui 未提供对标,靠 antd token 主题统一
main/create 0 ui,残留 antd Tooltip×1 中:ui tooltip 已可用,直接可迁移
admin/redemption-codes 文件本身 0 ui 0 残留 低:实际 UI 由 admin/components/*(8/15 文件消费 ui)渲染,属间接继承
main/canvas/index.tsx 残留朴素 Select×1 中:画布主工作区大量 UI 在 components/canvas/*,见下

四、同角色残留明细(含组件树,供整改引用)

1. Select — 53 处(ui select 仅 1 文件消费)

  • 分布:后台页 19、主界面页面 17、画布组件 10、共享组件 7。
  • 用法分类(pages 树 36 处):24 处带 mode=multiple/tags 或 showSearch(ui 单选壳不覆盖,属已知能力缺口,需 ComboBox/多选落地后才能替换);12 处为朴素单选,是可直接评估切换 ui select 的候选: admin/components/email-settings-panel.tsx、admin/settings/components/skin-theme-editor.tsx、admin/settings/storage-settings-page.tsx、admin/users/users-drawer.tsx、pages/canvas/index.tsx、pages/projects/detail/canvases.tsx、pages/projects/detail/settings.tsx、pages/settings/diagnostics-panel.tsx、pages/settings/index.tsx、pages/settings/prompt-preferences-pane.tsx、pages/skills/skill-editor-drawer.tsx、pages/skills/skill-install-modal.tsx
  • 其余代表性文件:pages/admin/components/analytics-panel.tsx、admin/users/users-panel.tsx、pages/settings/channel-settings-pane.tsx(mode 多选)、pages/tasks/index.tsx(showSearch)等。

2. Tooltip — 29 处(ui tooltip 仅 3 文件消费)

  • 画布组件 16:components/canvas/canvas-cloud-agent-chat-ui.tsx、canvas-config-node-panel.tsx、canvas-toolbar.tsx 系列、director/* 等;
  • 主界面页面 7:pages/create/index.tsx、pages/projects/detail.tsx、pages/projects/detail/canvases.tsx、pages/projects/detail/chapters.tsx、pages/settings/channel-settings-pane.tsx、pages/skills/index.tsx、pages/skills/skill-detail-drawer.tsx;
  • 共享组件 4:channel-headers-editor.tsx、conversation/voice-recording-*.tsx×2、workflow-field-mapping-editor.tsx;
  • 后台 2:pages/admin/components/admin-shell.tsx、analytics-panel.tsx。
  • 结论:ui tooltip 已可覆盖 help/说明类场景,属最高性价比迁移项。

3. Segmented — 11 处,全部在画布组件树

canvas-appearance-controls.tsx、canvas-cloud-agent-panel.tsx、canvas-config-node-panel.tsx、canvas-node-angle-dialog.tsx、canvas-node-upscale-dialog.tsx、canvas-script-node.tsx、canvas-subtitle-dialog.tsx、canvas-video-segment-dialog.tsx、style-profile-editor-modal.tsx。

  • 同一角色:用户设置页与后台已用 ui SegmentedControl(14 文件)。画布面板控件是"两套分段控件观感"最集中的区域。

4. Switch — 10 处,全部在 pages 树外

画布 6:canvas-config-node-panel.tsx、canvas-subtitle-dialog.tsx、canvas-toolbar.tsx、director/canvas-director-workbench.tsx、style-asset-binding-modal.tsx、toolbars/toolbar-settings-modal.tsx; 共享 2:components/image-settings-panel.tsx、components/video-settings-panel.tsx。

  • 同一角色:ui switch 已消费 29 文件(后台 15、主界面 8、共享 6)。开关控件同页面混用观感差异集中在画布浮层/设置面板。

5. Checkbox — 1 处

components/canvas/canvas-script-node.tsx 的 Checkbox.Group(脚本列显隐选择)。ui checkbox 已在后台 2 个文件消费,ui 侧含 CheckboxGroup 时可直接迁移。

6. 有意保留 / 信息项(不判为不一致)

  • Tag×16(含画布 import 对话框、设置项、后台面板等):抽查均为分类 chip/彩标,无状态语义;
  • Spin×4:pages/create/index.tsx、pages/plugins/eagle.tsx、components/canvas/canvas-share-modal.tsx、components/conversation/voice-recording-inline.tsx——ui 暂无 loading 对标(loading-state 若立项需同步处理);
  • Alert×1:pages/projects/detail.tsx 归档 banner(有意保留)。

五、与 rollout 计划执行状态的一致性核对

rollout 日志声明(2026-09-05) 本次扫描结果 一致
AntD Empty 全量归零(12 处) 全库 0 处 ✓
Alert → Callout 全量归零(18 处,唯一保留 detail.tsx 归档 banner) 全库仅 detail.tsx 1 处(已核实为"项目已归档"banner) ✓
Tag 状态徽章 → StatusBadge 清零(22 处) 剩余 16 处均为 chips ✓
Badge 全库零使用 0 处 ✓
Segmented 结构性保留 11 处全在画布组件;但 ui SegmentedControl 已 14 文件在用 ⚠ 双实现并存,需决策
B3(Switch/Tooltip RAC 化)待推进 ui switch/tooltip 已建成且部分页面提前接线,但 antd 版本残留 10/29 处 ⚠ 与"待推进"一致
ui select 仅单选壳 53 处 antd Select 中 24 处需搜索/多选能力,尚未可替换 ✓(覆盖缺口)

六、整改建议(按优先级)

P0 — 同角色直接替换(ui 能力已具备,改动面小)

  1. Tooltip 迁移(29 处):ui tooltip 已覆盖 help 场景,按"共享组件 → 画布 → 页面"顺序替换,含 admin-shell.tsx、pages/projects/detail*.tsx、pages/skills/* 等。
  2. 画布浮层 Switch 迁移(10 处):canvas-toolbar.tsx、canvas-config-node-panel.tsx 等 8 + 2 处换 ui switch,与设置/后台观感统一。
  3. 朴素单选 Select 迁移(12 处):上列候选文件逐个评估语义后切 ui select(含 pages/canvas/index.tsx、pages/settings/index.tsx 等高频页面)。
  4. Checkbox.Group(1 处):ui checkbox 具备 Group 能力后迁移 canvas-script-node.tsx。

P1 — 画布结构性决策(需产品/视觉确认)

  1. Segmented 双实现统一:画布 11 处 antd Segmented vs 设置/后台 ui SegmentedControl。若统一到 ui,需先比对两者在画布高密度工具条中的尺寸/键盘行为差异,建议以画布外观控件为试点做视觉回归。
  2. Select 能力缺口补齐:为 ui select 族补齐搜索(ComboBox)与多选模式,再批量替换剩余 24+ 处;在此之前后台 19 处与画布 10 处的搜索/多选下拉保持 antd 是合理降级,建议在 rollout 计划中显式标注"已知缺口",避免被误判为回退。

P2 — 一致性基建

  1. 补 loading 对标:Spin 4 处若 ui 立项 loading-state,同步替换。
  2. 规则化防回退:建议在 lint 层(如 eslint no-restricted-imports)禁止 pages/components 新代码直接 import antd 的 Switch/Segmented/Tooltip/Checkbox/Empty/Alert/Badge,防止归零项反弹。
  3. 计划文档同步:将本报告的分布数据与上述缺口标注回填 docs/plans/ui-kit-rollout-plan.mdx 的 B3/B4 批次范围。

附录:范围说明

  • 本报告为 import 级静态审计,判定的是"页面是否直接继承 ui 族控件";组合渲染路径(如 admin 页面经 admin/components/* 面板间接继承 ui)已在矩阵中单列说明。
  • 视觉差异的最终确认仍需浏览器回归(antd 主题 token 与 ui 族同为 token 驱动,但控件结构/交互细节不同,如 RAC 的 Switch 与 antd Switch 的轨道尺寸与焦点态)。
  • 审计脚本存放于 .local/audit-ui-kit/(git 忽略,可复跑);仅本报告文件纳入版本库。