8.8 KiB
智绘微刻小程序 — 交付总结 v4
本文档供完全无上下文的新会话阅读,记录各轮重构的完整交付成果。
日期:2026-07-27(第四次修改,22:20 批次)
项目目录:F:\weixin_wordc\
技术栈:Taro 3.6.31 + React 18 + TypeScript + SCSS
一、历史修改回顾
Batch 1(已完成)
全局主题切换、字体系统、tabBar重组、商品详情页、设计清单、效果确认页、后端技术栈文档。
Batch 2(已完成)
全局Context主题同步、登录系统、贴纸DIY、订单详情、Profile 5状态、自动筛选、图片路径修复。
Batch 3(已完成)
完善个人主页功能(收货地址、设置页、协议页)、ThemeToggle点击修复、商品图片显示修复、Profile状态跳转修复、LoginGuard登录守卫、用户数据 openid 隔离。
二、本轮(Batch 4)修改任务 — 全部完成 ✅
| 序号 | 任务 | 状态 |
|---|---|---|
| 1 | 主题黑白切换彻底修复:移除 eventCenter 多余监听 + trigger,纯 Context 驱动 → 所有页面自动响应 |
✅ 完成 |
| 2 | Profile 登录后菜单点击无反应修复:增加 fail 回调并 Toast 提示,便于定位;同时主题崩溃是交互失效的根因之一 |
✅ 完成 |
| 3 | 本地用户数据库(密码保护):新建 userDatabase 管理页,支持查看/切换/新建/删除账号,验证密码 zhihui2024 |
✅ 完成 |
三、文件变更清单
本轮新建文件(Batch 4)
| 文件 | 作用 |
|---|---|
src/pages/userDatabase/index.tsx + .scss + index.config.ts |
本地用户数据库管理页(密码验证后解锁,显示所有注册用户、设计/订单统计、切换/删除/新建) |
compress-images.js |
图片压缩脚本(sharp 库),支持批量 resize + JPG 压缩,供重复用于图片资源优化 |
本轮修改的现有文件
| 文件 | 核心改动 |
|---|---|
src/context/ThemeContext.tsx |
删除多余的 eventCenter.on('theme:change') 监听。该监听曾接收 trigger 传来的 undefined 参数并 set(undefined),导致主题 state 崩溃、按钮卡死、CSS 变量全部丢失 |
src/components/ThemeToggle/index.tsx |
删除 Taro.eventCenter.trigger('theme:change')。toggleTheme() 直接修改全局 Context state,所有页面自动响应,无需事件广播 |
src/pages/profile/index.tsx |
handleMenuClick 中 switchTab / navigateTo 均增加 fail 回调,跳转失败时 Toast 提示 |
src/pages/settings/index.tsx |
菜单增加 “账号管理” 入口,跳转到 userDatabase 页 |
src/utils/store.ts |
新增用户注册表(smart_user_registry)、多账号管理 API:listAllUsers() / createUser() / switchUser() / deleteUser() / verifyAdminPassword() |
src/app.config.ts |
注册新页面 userDatabase |
config/index.js |
图片 copy.to 已修正为 'dist/img'(Batch 3 完成) |
Batch 3 已完成的文件(供追溯)
LoginGuard、address、settings、agreement、ThemeToggle 静态 import 修复、store.ts DA 层、productConfig.ts 路径改为 .jpg。
四、编译验证结果
npx taro build --type weapp
- ✅ webpack 5.91.0 compiled successfully in ~27s
- ✅ 0 报错,0 ERROR
- ✅ 编译后
dist/总大小:1.02 MB(< 2MB,满足微信预览/上传限制) - 图片资源
dist/img/:432 KB,9 张实物照全部已压缩
五、关键踩坑记录(含本轮新增)
| 坑 | 现象 | 解法 |
|---|---|---|
| 全局主题不同步 | 切换后已打开页面不刷新 | React.createContext + eventCenter,各页面 onShow 时重新读取 Storage |
| 设计清单切页不刷新 | 加入清单后切换页面看不到新条目 | 用 Taro.getCurrentInstance().page.onShow 重写,保证每次页面展现必触发 |
| 图片显示纯空白 | 微信小程序编译后资源路径错乱 | productConfig.ts 的图片路径改为 /img/xxx 绝对路径;config/index.js copy 规则写为 to: 'dist/img' |
| ThemeToggle 点击无反应 | 在个人页点击主题按钮没有任何效果 | require('@tarojs/taro').default 在某些构建下不返回真实 Taro 对象,改为顶层 import Taro from '@tarojs/taro' |
| Profile 待设计未筛选 | 点击”待设计“跳到设计清单但显示全部条目 | 增加 designList:filter Storage 参数,设计清单 onShow 时读取并切换到 toDesign Tab(聚合未设计+设计中) |
| 用户数据未隔离 | 换账号登录后还能看到上一个用户的设计清单 | store.ts 重构为 DA 层,Storage key 按 openid 前缀隔离:design_list_${openid} |
| 收货地址省市区 | 不知如何实现三级联动 | 直接用微信原生组件 <Picker mode='region'>,无需自建数据 |
| 主题切换彻底崩溃(Batch 4 新增) | 按下 ThemeToggle 后按钮卡死,无法回到白天主题,背景部分变白但不是预期样式 | ThemeContext 中 eventCenter.on('theme:change') 监听 undefined 参数导致 state 被覆盖为 undefined。删除 eventCenter 相关代码,纯 Context state 驱动即可 |
| Profile 菜单登录后无反应(Batch 4 新增) | 未登录时 6 个菜单都能点开,登录后完全点不开 | 根因是主题崩溃连带 React 渲染/事件层异常;同时在跳转 API 上补充 fail Toast,增强可观测性 |
六、核心业务流(完整链路)
首页浏览品类 → 商品详情页(轮播图+价格+介绍)
→ 加入设计清单(弹窗选数量)→ 设计清单页(需登录,支持自动筛选)
→ 立即下单 → DIY 工作台(直接进入,无需选品)
→ 添加贴纸(相册/相机)→ 拖动调整位置 → 碰撞检测
→ 预览效果 → 确认完成 → 设计效果确认页
→ 弹窗确认下单 → 订单生成(需登录)→ 订单列表/订单详情
→ 物流时间轴追踪 → 确认收货 → 完成
个人主页
→ 待设计 / 待付款 / 待发货 / 待收货 / 已完成 → 自动跳转对应页面并筛选
→ 收货地址 → 增删改复 + 省市区选择 + 默认地址
→ 设置 → 修改信息 / 退出登录 / 定制协议 / 账号管理
→ 账号管理(密码保护:zhihui2024)→ 查看/切换/新建/删除本地用户
七、架构说明:前端 DA 层设计
为了方便后续接入后端,所有数据操作已通过 src/utils/store.ts 抽象为 Data Access 层:
pages/
└─ 调用 store.getDesignList() / addDesign() / designToOrder() 等业务接口
└─ store.ts 内封装 Taro.getStorageSync / setStorageSync
└─ key = `${scope}_${openid}` 实现多用户隔离
Batch 4 新增能力:
listAllUsers()— 遍历注册表,读取每个用户的备份信息和数据条数统计createUser(nickName)— 新建 mock openid 用户并自动登录switchUser(openid)— 切换当前活跃用户(设计清单/订单/地址自动跟随切换)deleteUser(openid)— 彻底删除某用户的所有本地数据
后端替换方案:上线时只需重写 store.ts 中的函数为 wx.request HTTP 调用,页面层零改动。
八、图片资源与 CDN 说明
⚠️ 当前状态:为了通过微信 2MB 包体积限制,所有实物照片已使用
compress-images.js脚本进行两轮压缩(最长边 800px、质量 60%)。后续计划:上线前强烈建议将实物照片迁移到 CDN/对象存储(如腾讯云 COS、阿里云 OSS),小程序本地只保留占位图/图标。届时:
- 修改
src/utils/productConfig.ts中的images字段为网络 URL;- 移除或缩小
config/index.js中的copy.patterns规则;- 小程序包体积可降至 < 500KB,图片加载速度、清晰度均大幅提升。
compress-images.js脚本可继续用于临时压缩新上传的图片素材。
九、下一步建议(可选)
- 后端接入:当前
openid为 mock 值,接入真实后端后替换wx.login的code换取真实openid,再将store.ts切换为 HTTP 请求。 - CDN 外链迁移:将
src/img/中的实物照片上传到腾讯云 COS/阿里云 OSS,productConfig.ts改为网络 URL。 - 真机测试:在微信开发者工具中点击“预览”,确认图片加载和主题切换在手机端正常。
- 订单物流接口:当前物流为静态 mock,接入 backend 后可实现真实物流轨迹查询。
文档更新时间:2026-07-27
Batch 4(22:20 批次)3 项优化目标全部完成,编译通过,包体积 1.02 MB。
累计完成:Batch 1 + Batch 2(12 项)+ Batch 3(6 项)+ Batch 4(3 项)= 21 项核心目标全部 ✅