VI 整改纪律与 token 迁移 SOP

依据:刘总 2026-09-18 令「两项全做」——样板页标杆先行 + 全量 token 迁移纪律 + 3 类动效全铺
配套:VI 落地四件 docs/delivery/evidence/vi/VI落地四件-v1.md、动效规范 miniprogram-v2/docs/动效规范-v1.0.md

一、铁律(即日生效,违反视为不合格交付)

  1. 新代码禁止裸 hex / 裸 rgb(a) 色值,一律走 var(--color-*)(全局 app.wxss 已定义)或 vi-tokens.wxss 补全令牌。
  2. 功能性半透明底色(毛玻璃、水印)允许 rgba(),但色值必须取规范色(#F5F1E8/#2B2620/#6B6259 等),不得用非规范色。
  3. 禁止引用不存在的 token。原 hotel-booking 的 --red: var(--color-primary) 中 --color-primary 全局未定义,已修正为 var(--color-gold)。新增别名前先 grep 确认全局存在。
  4. 动效只接 motion.wxss 已定义的类(全局已 @import),不得自造 .press/.bh 之外的按压类(规范按压统一 mo-press;主按钮吸附 motion-magnetic)。
  5. 每席每次最多领 20 个文件做 token 迁移,提交前须 grep 本文件裸色值归零。

二、token 映射表(存量迁移查此表)

旧局部别名 / 裸值应改为说明
--red / var(--color-primary)var(--color-gold)主色=金;--color-primary 全局不存在(已修 bug)
--accent(新增)var(--color-accent)藏红重音(vi-tokens 新增,占比≤10%)
--goldvar(--color-gold) #C9A96E
--papervar(--color-bg) #F5F1E8
--inkvar(--color-text-primary) #2B2620
--mutedvar(--color-text-secondary) #6B6259
--whitevar(--color-surface) #FFFFFF原 #FFFDF8 非规范
--linevar(--color-border) #E8E2D6原 rgba(43,38,32,.24)
--softvar(--color-fill) #F5F0E6
--greenvar(--color-success) #4A7C59
--warnvar(--color-warning) #C9862B
--dangervar(--color-danger) #B3261E
--infovar(--color-info) #5B7A99
--lake #4A7C8Fvar(--color-info) #5B7A99🔴 原非规范色
裸 #FFFDF8#FFFFFF / var(--color-surface)🔴 非规范
裸 #565656var(--color-text-disabled) #C4BBAF🔴 非规范(按压态)
裸 rgba(107,107,107,.06)rgba(107,98,89,.06)🔴 非规范灰(藏文水印)
裸 rgba(255,253,248,.55)rgba(255,255,255,.55)🔴 非规范白(卡片底)

三、全量迁移分批方案(1362 处 / 94 文件)

按文件名字母序切 5 批,每席领一批(≤20 文件/批):

批文件范围(首字母)预估文件数建议席位
B1a–c(address/agreement/category-*)~20小冈
B2c–h(certificates…/hotel-booking 除外)~20一号
B3h–o(home/local-scene…/orders)~20阿仁
B4o–s(order-* / package-* / profile / scene-*)~18波波
B5s–w(settings/share-* / verify / wish-*)~16小齐(验收)
迁移顺序:先改文件顶部 page{...} 局部 token 块为全局引用(见样板 hotel-booking.wxss 第 2–16 行改法),再消除散落裸 hex,最后 `grep -nE '#[0-9a-fA-F]{3,6}|rgba\(' 本文件确认归零(功能性 rgba 须色值合规)。

四、3 类动效接入速查(规范第 6 类零落地件)

类WXML 接法触发TS
motion-magnetic<button class="submit motion-magnetic" hover-class="is-pressed">小程序 hover-class 按下自动加 is-pressed无需 JS
mo-sheet<view class="confirm-sheet mo-sheet {{open?'is-open':''}}"> + 遮罩 .confirm-mask.is-opensetData({open:true/false})openConfirm/closeConfirm
motion-skeleton<view wx:else class="motion-skeleton motion-skeleton-card">数据未到时 wx:if 切骨架skeletonDelay(this,600)(>600ms 才闪)
mo-fade(轻量淡入)已被 mo-toast(含 is-show/is-leaving/is-yielding 状态机)覆盖,浮层统一用 mo-toastsetData({toastShow:true})notify()
降级:低端机 utils/motion.ts 的 reducedMotion() 自动给 page 加 .mo-reduced,所有动效退化为立即可见(不白屏)。

五、样板页(hotel-booking)已落地示范