# Hox 光子美容仪项目 — 当前进度交接 更新时间:2026-04-28 ## 当前项目概况 项目当前由三部分组成: - 微信原生小程序:`miniprogram/` - 管理后台 H5:`admin-console/`,uniapp + Vue 3 - 腾讯云 HTTP 后端:`server/`,SCF HTTP Function + TencentDB MySQL + COS 旧的微信云开发云函数和 MQTT 客户端已经从活动架构中移除。当前主链路是: ```text 小程序/后台 -> HTTPS API -> 腾讯云 HTTP 函数 -> TencentDB MySQL / COS 设备 <-> 小程序 BLE ``` ## 当前部署状态 - SCF 函数名:`jw-beauty-api` - 函数类型:HTTP 函数 - 启动文件:`server/scf_bootstrap` - 服务端口:`9000` - 测试 API:`https://1426323813-ilxkhlxf4p.ap-guangzhou.tencentscf.com` - 数据库:TencentDB MySQL,schema 在 `server/sql/schema.sql` - COS Bucket:用于固件文件、后台 H5 构建产物和部署包 - 后台 H5 已支持上传到 COS 的 `admin/` 前缀 ## 已完成 ### 后端 - 新增 `server/` Node.js 后端。 - 实现 HTTP 路由、JWT 鉴权、管理员鉴权、MySQL 连接池、COS 签名 URL、微信 `code2Session`。 - 支持 Tencent Cloud HTTP Function 部署,根目录 `scf_bootstrap` 启动 `scripts/local-server.js`。 - 已初始化并验证 TencentDB MySQL 表结构。 - 云函数已绑定数据库所在 VPC/Subnet,并验证后台接口可访问。 - 已实现核心接口: - `/api/v1/auth/login` - `/api/v1/user/profile` - `/api/v1/user/phone` - `/api/v1/device/bind` - `/api/v1/device/bind/confirm` - `/api/v1/device/unbind` - `/api/v1/device/list` - `/api/v1/device/command/pending` - `/api/v1/device/command/result` - `/api/v1/subscription` - `/api/v1/treatment/history` - `/api/v1/treatment/sync` - `/api/v1/firmware/latest` - `/api/v1/admin/*` ### 数据库 已设计并创建: - `users` - `devices` - `bindings` - `subscriptions` - `treatment_records` - `device_events` - `device_commands` - `operation_logs` - `admin_accounts` - `system_settings` - `firmware_files` ### 小程序 - 移除 `wx.cloud` 依赖,改为 HTTPS API。 - API base 配置在 `miniprogram/config/env.js`。 - 当前 `ENV = 'test'`,指向测试云函数域名。 - 登录流程: - `wx.getUserProfile()` 触发微信官方用户资料授权弹窗。 - `wx.login()` 获取 code。 - 后端换取 openid 并签发 JWT。 - 如微信返回昵称/头像,则保存到用户资料。 - 若返回 `微信用户` 或默认头像,这是微信平台策略,不是后端问题。 - 手机号授权已预留:隐藏的 `open-type="getPhoneNumber"` 按钮 + `/api/v1/user/phone`。 - 扫码绑定已改为两阶段: - 后端创建 pending bind token。 - 小程序进入 BLE 连接。 - 设备返回绑定成功后小程序确认后端绑定。 - BLE 校验修正为对 header/length/type/payload 做 XOR。 - 新增 BLE frame 测试脚本:`miniprogram/scripts/test-ble-frame.js`。 - 普通模式固定 10 分钟、默认全脸、护理区域灰色不可调。 - 智能模式保留扫描流程和一次性下发参数。 - 小程序可拉取后台 `device_commands` 并执行 BLE 指令。 ### 管理后台 - 请求层已接真实 API,配置在 `admin-console/src/config/env.js`。 - 当前 `ENV = 'test'`。 - 临时后台账号仍为 `admin/admin`,生产必须替换。 - 支持后台页面:dashboard、设备、用户、订阅、护理记录、操作日志、系统设置等。 - 新增 CSV 导出工具。 - 新增 H5 构建 manifest。 - 新增 COS 部署脚本:`admin-console/scripts/deploy-cos.js`。 - 构建上传命令:`npm run deploy:cos`。 ### 文档与部署 - 新增腾讯云部署文档:`docs/deploy/tencent-cloud.md`。 - 新增生产环境变量模板:`server/.env.production.example`。 - `.gitignore` 已忽略真实 `.env`、构建产物、node_modules。 ## 已验证 - 云函数 `/health` 返回成功。 - 后台登录 `/api/v1/admin/login` 成功。 - 后台 dashboard 返回云数据库统计。 - 后台设备列表返回预生成设备。 - 后台设备命令队列写入 `device_commands`。 - 后台 H5 构建成功并上传到 COS `admin/` 前缀。 - `node miniprogram/scripts/test-ble-frame.js` 通过。 ## 当前注意事项 - `wx.getUserProfile()` 可能返回 `微信用户` 和默认头像,这是微信隐私策略导致。 - 如果必须可靠获取昵称头像,需要改用 `chooseAvatar` + `input type="nickname"`,但当前按产品要求使用官方授权弹窗。 - 真机小程序请求云函数测试域名,需要微信公众平台配置 `request 合法域名`。 - 云函数使用 TencentDB 内网地址时必须保持 VPC/Subnet 配置。 - 不要提交 `server/.env`、COS 签名 URL、数据库密码、微信密钥或腾讯云密钥。 ## 待继续 高优先级: - 真机验证微信登录、扫码绑定、BLE 连接、设备绑定确认全流程。 - 护理完成页调用 `/api/v1/treatment/sync`,确保后台能看到护理记录。 - 后台设备详情接入命令历史和用户绑定详情。 中优先级: - 后台固件管理 UI 接入 `/api/v1/admin/firmware`。 - COS 静态网站或自定义域名配置后台长期访问地址。 - OTA 升级流程完善。 低优先级: - 替换临时管理员密码。 - 接入真实微信支付。 - 增加更完整的自动化测试和部署脚本。