17 KiB
智绘微刻小程序全量 UI 换肤实施计划
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 按 design.md 将 Taro 微信小程序的全局样式、主题配置、自定义 TabBar、通用组件和全部页面 UI 从旧手账风格迁移到新的克制现代风格。
Architecture: 以 src/app.scss 的 CSS Token 为单一视觉源;先建立新 token 和公共组件类,再把同名 .btn-gradient/.btn-outline/.dashed-card/.star-badge 逐页替换为 --accent-primary 等新语义;最后更新图标、主题配置并跑 build:weapp 验证。
Tech Stack: Taro 3 + React + TypeScript + Sass,微信小程序,自定义 TabBar,CSS variables,rpx 为主单位。
Global Constraints
- 遵守
/Users/broccoli/Project/wechat_wc/design.md的全部 token、组件、间距、圆角、毛玻璃和动效规范。 - 浅色主背景
#faf7f2,深色主背景#191919;主色#d96c6a/ 深色#f09198;辅助色#6c7bdb/ 深色#8e97e8。 - 删除
3px dashed卡片与star-badge星星贴纸装饰;所有卡片改为1rpx solid var(--border)+--shadow-card。 - 自定义 TabBar 和底部操作栏使用毛玻璃:浅色
rgba(255,255,255,.55),深色rgba(25,25,25,.55),backdrop-filter: blur(32px) saturate(1.2)+-webkit-backdrop-filter。 - 可滚动页面底部保留足够空白,避免浮动底栏遮挡内容;全局
.safe-bottom-placeholder高度调整为 200px。 - 尺寸以 750rpx 设计稿为准;主要触控目标不小于 88rpx。
- 不使用 optional chaining、nullish coalescing;JS 中避免
?.与??。 - 不直接修改
dist/;只改src/,构建产物由npm run build:weapp重新生成。 - 图标继续使用项目本地 SVG/PNG,不新增 emoji 图标;SVG 中旧粉色
#ff9a9e统一换为#d96c6a。
Task 1: 全局 Token 与基础样式
Files:
- Modify:
src/app.scss - Modify:
src/theme.json - Modify:
src/app.config.ts
Interfaces:
-
Consumes:
design.md的 token 表。 -
Produces: 新的全局 CSS 变量名与公共类名,供后续所有页面使用。
-
Step 1: 替换
src/app.scss的.theme-lighttoken 把浅色 token 更新为:
--bg-page: #faf7f2;
--bg-card: #ffffff;
--bg-muted: #f3eee7;
--bg-input: #f5f1eb;
--text-primary: #2e2622;
--text-secondary: #8a7e76;
--text-muted: #b3a89e;
--accent-primary: #d96c6a;
--accent-primary-strong: #c75b59;
--accent-primary-soft: #f6e0dc;
--accent-secondary: #6c7bdb;
--accent-secondary-soft: rgba(108, 123, 219, 0.12);
--success: #4fa477;
--warning: #d99a4e;
--danger: #d85d5d;
--border: #ede5dc;
--border-strong: #e0d5c8;
--glass: rgba(255, 255, 255, 0.72);
--glass-line: rgba(255, 255, 255, 0.55);
--shadow-card: 0 8rpx 24rpx rgba(46, 38, 34, 0.08);
--shadow-elevated: 0 12rpx 40rpx rgba(46, 38, 34, 0.12);
保留旧 token 作为过渡别名,指向新值,供尚未迁移的页面继续使用;最后一轮统一清理:
--line-card: 1rpx solid var(--border);
--line-star: var(--border);
--accent-pink: var(--accent-primary);
--accent-blue: var(--accent-secondary);
- Step 2: 替换
src/app.scss的.theme-darktoken 深色 token 更新为:
--bg-page: #191919;
--bg-card: #23201d;
--bg-muted: #2b2622;
--bg-input: #2b2622;
--text-primary: #f5efe8;
--text-secondary: #b3a79c;
--text-muted: #82766c;
--accent-primary: #f09198;
--accent-primary-strong: #ffa7ad;
--accent-primary-soft: rgba(240, 145, 152, 0.14);
--accent-secondary: #8e97e8;
--accent-secondary-soft: rgba(142, 151, 232, 0.14);
--success: #67c58e;
--warning: #e0ad68;
--danger: #ef7a7a;
--border: #37312c;
--border-strong: #463e37;
--glass: rgba(25, 25, 25, 0.72);
--glass-line: rgba(255, 255, 255, 0.14);
--shadow-card: 0 8rpx 24rpx rgba(0, 0, 0, 0.32);
--shadow-elevated: 0 12rpx 40rpx rgba(0, 0, 0, 0.48);
- Step 3: 删除旧装饰类
删除
.dashed-card、.star-badge的旧视觉实现,删除.btn-gradient旧渐变属性、.btn-outline旧虚线属性,改为设计系统类:
.surface-card {
background: var(--bg-card);
border: 1rpx solid var(--border);
border-radius: 24rpx;
box-shadow: var(--shadow-card);
}
.btn-primary {
background: var(--accent-primary);
color: #fff;
border-radius: 999rpx;
}
.btn-secondary {
background: var(--bg-card);
color: var(--text-primary);
border: 1rpx solid var(--border-strong);
border-radius: 999rpx;
}
.btn-ghost {
background: transparent;
color: var(--accent-primary);
}
.btn-danger {
background: var(--danger);
color: #fff;
border-radius: 999rpx;
}
.action-bar {
background: rgba(255, 255, 255, 0.55);
backdrop-filter: blur(32px) saturate(1.2);
-webkit-backdrop-filter: blur(32px) saturate(1.2);
border-top: 1rpx solid var(--glass-line);
}
为兼容旧页面中的类名,保留两个按钮过渡别名:
.btn-gradient { @extend .btn-primary; }
.btn-outline { @extend .btn-secondary; }
同时保留 .badge/.badge-* 基础结构,但颜色改为新 token:--success、--warning、--danger、--accent-primary-soft。
-
Step 4: 更新
.safe-bottom-placeholder将height: 160px改为height: 200px。 -
Step 5: 更新
src/theme.json浅色bgColor/navBgColor/bgColorTop/bgColorBottom/tabBarBgColor改为#faf7f2;tabBarColor改为#8a7e76;tabBarSelectedColor改为#d96c6a。 深色tabBarColor改为#b3a79c;tabBarSelectedColor改为#f09198。 -
Step 6: 更新
src/app.config.tswindow.navigationBarBackgroundColor、backgroundColor、backgroundColorTop、backgroundColorBottom改为#faf7f2。 -
Step 7: 提交
git add src/app.scss src/theme.json src/app.config.ts
git commit -m "feat: update global tokens and remove legacy decorations"
Task 2: 主题背景与自定义导航
Files:
- Modify:
src/utils/themeBackground.ts - Modify:
src/components/ThemedPageMeta/index.tsx - Modify:
src/hooks/useStatusBar.ts
Interfaces:
-
Consumes: Task 1 的浅色/深色背景 token。
-
Produces: 所有页面顶部状态栏、胶囊区、背景始终同步
#faf7f2/#191919。 -
Step 1: 将
themePageColor('light')由'#ffffff'改为'#faf7f2'。 -
Step 2:
ThemedPageMeta中bg由浅色'#ffffff'改为'#faf7f2',深色保持'#191919'。 -
Step 3:
useStatusBar中浅色backgroundColor改为'#faf7f2'。 -
Step 4: 跑
npm run build:weapp确认无编译错误后提交。
git add src/utils/themeBackground.ts src/components/ThemedPageMeta/index.tsx src/hooks/useStatusBar.ts
git commit -m "feat: sync theme background tokens"
Task 3: 自定义 TabBar 毛玻璃
Files:
- Modify:
src/custom-tab-bar/index.scss - Modify:
src/custom-tab-bar/index.tsx - Modify:
src/icon/*.svg(默认色值批量替换)
Interfaces:
-
Consumes: 自定义 TabBar 现有的 5 个 tab 配置和图标。
-
Produces: 悬浮毛玻璃 TabBar,选中态使用新主色。
-
Step 1: 重写
src/custom-tab-bar/index.scss- 容器改为
left: 12px; right: 12px; bottom: 12px;,border-radius: 24px,height: calc(96px + env(safe-area-inset-bottom))。 - 浅色背景
rgba(255, 255, 255, 0.55),深色背景rgba(25, 25, 25, 0.55),两者都加backdrop-filter: blur(32px) saturate(1.2)和-webkit-backdrop-filter。 - 文字普通态
#8a7e76,选中态#d96c6a;深色普通态#b3a79c,选中态#f09198。 - 图标尺寸沿用 40rpx,选中态
transform: scale(1.08)。
- 容器改为
-
Step 2: 批量更新 SVG 图标默认颜色
perl -pi -e 's/#ff9a9e/#d96c6a/g; s/#b08d8d/#8a7e76/g' src/icon/*.svg
只替换纯文本 SVG 颜色;PNG 图标保持不变。
- Step 3: 提交
git add src/custom-tab-bar src/icon
git commit -m "feat: frosted floating tab bar and updated icon colors"
Task 4: 通用组件登录与主题按钮
Files:
- Modify:
src/components/LoginModal/index.scss - Modify:
src/components/LoginModal/index.tsx - Modify:
src/components/LoginGuard/index.scss - Modify:
src/components/LoginGuard/index.tsx - Modify:
src/components/ThemeToggle/index.scss
Interfaces:
-
Consumes: Task 1 的
.surface-card、.btn-primary、.btn-secondary。 -
Produces: 登录弹窗、登录守卫、主题按钮使用新视觉。
-
Step 1:
LoginModal/index.tsx中把login-card dashed-card改为surface-card login-card,删除star-badge。 -
Step 2:
LoginModal/index.tsx中把btn-outline替换为btn-secondary,btn-gradient替换为btn-primary。 -
Step 3:
LoginModal/index.scss删除3px dashed var(--line-star);avatar-btn、.nickname-input改1rpx solid var(--border),聚焦/错误按设计规范补--accent-primary。 -
Step 4:
LoginGuard/index.tsx中btn-gradient替换为btn-primary,index.scss更新 token 引用。 -
Step 5:
ThemeToggle/index.scss圆角保持 50%,背景改为rgba(25, 25, 25, 0.42),文字仍简短保留。 -
Step 6: 跑
npm run build:weapp后提交。
git add src/components src/custom-tab-bar
git commit -m "feat: refresh login components"
Task 5: 首页与商品列表
Files:
-
Modify:
src/pages/index/index.scss -
Modify:
src/pages/index/index.tsx -
Modify:
src/pages/shop/index.scss -
Modify:
src/pages/shop/index.tsxInterfaces: -
Consumes: Task 1 的 public classes 与 token。
-
Produces: 首页、商品列表页无旧虚线/星星,且主题、间距、卡片符合
design.md。 -
Step 1: 在
index.tsx删除所有star-badge,将所有dashed-card改为surface-card,btn-gradient改btn-primary,btn-outline改btn-secondary。 -
Step 2:
index.scss中#f8f9fa、--accent-pink、--line-star全部替换为新 token;轮播 indicator 颜色改#d96c6a/#e0d5c8。 -
Step 3:
shop/index.tsx底部height: 160px改为200px;shop-card-price颜色改var(--accent-primary)。 -
Step 4:
shop/index.scss的#ff9a9e改var(--accent-primary),删除任何虚线和旧色硬编码。 -
Step 5: 跑构建并提交。
git add src/pages/index src/pages/shop
git commit -m "feat: refresh home and shop pages"
Task 6: 商品详情与定制流程
Files:
- Modify:
src/pages/product/index.scss - Modify:
src/pages/product/index.tsx - Modify:
src/pages/shop/detail/index.scss - Modify:
src/pages/shop/detail/index.tsx - Modify:
src/pages/diy/index.scss - Modify:
src/pages/diy/index.tsx - Modify:
src/pages/diy/stickerEdit/index.scss - Modify:
src/pages/diy/stickerEdit/index.tsx - Modify:
src/pages/checkout/index.scss - Modify:
src/pages/checkout/index.tsx
Interfaces:
-
Consumes: 全局毛玻璃
.action-bar、.surface-card、.btn-primary。 -
Produces: 商品详情、定制工作台、贴纸编辑、结算页统一为毛玻璃底部操作 + 新 token。
-
Step 1: 在所有 TSX 中删除
star-badge,把dashed-card改为surface-card,把btn-gradient/btn-outline改为btn-primary/btn-secondary。 -
Step 2:
product/index.scss顶部padding-bottom: calc(24px + 160px)改为calc(24px + 200px);.action-bar借用全局毛玻璃样式。 -
Step 3:
checkout/index.scss与orderDetail/index.scss中addr-picker-add、虚线边框全部改为1rpx solid var(--border-strong)或var(--border)。 -
Step 4:
shop/detail/index.scss删除#ff9a9e、#fecfef渐变,改成新 token 和新毛玻璃/卡片阴影。 -
Step 5:
diy与stickerEdit的虚线边框、--accent-blue、--accent-pink全部替换为新 token;底部操作栏使用.action-bar毛玻璃规则。 -
Step 6: 跑构建并提交。
git add src/pages/product src/pages/shop/detail src/pages/diy src/pages/checkout
git commit -m "feat: refresh product and customization flows"
Task 7: 设计清单、订单、订单详情
Files:
- Modify:
src/pages/designList/index.scss - Modify:
src/pages/designList/index.tsx - Modify:
src/pages/orders/index.scss - Modify:
src/pages/orders/index.tsx - Modify:
src/pages/orderDetail/index.scss - Modify:
src/pages/orderDetail/index.tsx
Interfaces:
-
Consumes:
.surface-card、.btn-primary、.btn-secondary、新 token。 -
Produces: 设计清单、订单列表、订单详情页符合设计规范。
-
Step 1: 删除所有
star-badge与dashed-card,改用.surface-card。 -
Step 2: 所有 TSX 的
btn-gradient/btn-outline改btn-primary/btn-secondary。 -
Step 3:
orders/index.scss删除#b08d8d、#ff9a9e、#5c3a3a,改 token。 -
Step 4:
orderDetail/index.scss中虚线边框、.addr-picker-*、状态按钮颜色改为新 token 与毛玻璃规则。 -
Step 5: 跑构建并提交。
git add src/pages/designList src/pages/orders src/pages/orderDetail
git commit -m "feat: refresh design list and order pages"
Task 8: 个人中心与入口页
Files:
- Modify:
src/pages/profile/index.scss - Modify:
src/pages/profile/index.tsx - Modify:
src/pages/settings/index.scss - Modify:
src/pages/settings/index.tsx - Modify:
src/pages/address/index.scss - Modify:
src/pages/address/index.tsx - Modify:
src/pages/agreement/index.scss - Modify:
src/pages/agreement/index.tsx
Interfaces:
-
Consumes: Task 1 全局类。
-
Produces: 个人中心、设置、地址、协议页去掉旧装饰。
-
Step 1: 删除各 TSX 中
star-badge,dashed-card改surface-card,按钮类名更新。 -
Step 2:
profile/index.scss线性渐变背景只保留中性--bg-card/--bg-muted或极淡辅助色,不继续使用旧粉色/蓝色大渐变。 -
Step 3:
settings/index.scss、address/index.scss中--accent-pink/--accent-blue全部替换。 -
Step 4:
agreement/index.scss只更新 token 与间距,无装饰元素可保留。 -
Step 5: 跑构建并提交。
git add src/pages/profile src/pages/settings src/pages/address src/pages/agreement
git commit -m "feat: refresh profile and settings pages"
Task 9: 客服、词云、用户数据库
Files:
- Modify:
src/pages/service/index.scss - Modify:
src/pages/service/index.tsx - Modify:
src/pages/wordcloud/index.scss - Modify:
src/pages/wordcloud/index.tsx - Modify:
src/pages/userDatabase/index.scss - Modify:
src/pages/userDatabase/index.tsx
Interfaces:
-
Consumes: Task 1 全局类。
-
Produces: 客服、词云、用户数据库页无旧装饰。
-
Step 1: 删除
star-badge,dashed-card改surface-card,按钮更新为.btn-primary/.btn-secondary。 -
Step 2:
wordcloud/index.scss中.upload-area、.input-section、结果图容器改为1rpx solid var(--border)+ 24rpx 圆角。 -
Step 3:
userDatabase/index.scss中旧.btn-gradient/--accent-blue全部替换。 -
Step 4: 跑构建并提交。
git add src/pages/service src/pages/wordcloud src/pages/userDatabase
git commit -m "feat: refresh service and tool pages"
Task 10: 构建验证与残留清理
Files:
- All
src/**/*.scss,src/**/*.tsx
Interfaces:
-
Consumes: 前序任务成果。
-
Produces: 一个可构建、无旧风格残留的代码库。
-
Step 1: 全局搜索确认不再出现旧风格残留(
--accent-pink/--accent-blue的过渡别名在此时移除后允许为 0 命中):
rg -n "star-badge|dashed-card|accent-pink|accent-blue|btn-gradient|btn-outline|#ff9a9e|#fecfef|#b08d8d|#5c3a3a|--line-card|--line-star" src --glob '!**/*.png'
如仍有残留,修复到没有命中(除 Task 3 已批量替换外)。
-
Step 2: 删除
src/app.scss中的过渡别名--line-card、--line-star、--accent-pink、--accent-blue,并移除.btn-gradient/.btn-outline的@extend别名;把页面中残留的这两个类名改为.btn-primary/.btn-secondary。 -
Step 3: 构建:
cd /Users/broccoli/Project/wechat_wc && npm run build:weapp
预期成功且无 TS/Sass 错误。
- Step 4: 检查
dist/重新生成,若需要提交则加入提交;如用户未要求则不手动覆盖 dist。
Completion
全部任务完成后执行 superpowers:requesting-code-review 做最终代码审查;确认无阻塞问题后用 superpowers:finishing-a-development-branch 收尾。