Files
wechat_wc/docs/superpowers/plans/2026-08-07-miniprogram-ui-refresh.md
T

429 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 智绘微刻小程序全量 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,微信小程序,自定义 TabBarCSS 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 coalescingJS 中避免 `?.``??`
- 不直接修改 `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-light` token**
把浅色 token 更新为:
```scss
--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 作为过渡别名,指向新值,供尚未迁移的页面继续使用;最后一轮统一清理:
```scss
--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-dark` token**
深色 token 更新为:
```scss
--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` 旧虚线属性,改为设计系统类:
```scss
.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);
}
```
为兼容旧页面中的类名,保留两个按钮过渡别名:
```scss
.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.ts`**
`window.navigationBarBackgroundColor``backgroundColor``backgroundColorTop``backgroundColorBottom` 改为 `#faf7f2`
- [ ] **Step 7: 提交**
```bash
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` 确认无编译错误后提交。
```bash
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 图标默认颜色
```bash
perl -pi -e 's/#ff9a9e/#d96c6a/g; s/#b08d8d/#8a7e76/g' src/icon/*.svg
```
只替换纯文本 SVG 颜色;PNG 图标保持不变。
- [ ] **Step 3:** 提交
```bash
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` 后提交。
```bash
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.tsx`
**Interfaces:**
- 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:** 跑构建并提交。
```bash
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:** 跑构建并提交。
```bash
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:** 跑构建并提交。
```bash
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:** 跑构建并提交。
```bash
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:** 跑构建并提交。
```bash
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 命中):
```bash
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:** 构建:
```bash
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` 收尾。