# 宫中有喜 — 微客宝小程序设计 ## 一、概述 | 项 | 值 | |---|---| | 产品名称 | 宫中有喜·微客宝 | | 类型 | 微信小程序 | | 框架 | uni-app (Vue 3) | | 目标用户 | 在住/潜在客户(产妇及家属) | | 核心功能 | 服务商城、月子餐、共伴成长、月嫂预约、学堂社区 | ## 二、页面架构 ### 2.1 Tab 导航(底部 5 Tab) ``` ┌──────────────────────────────────┐ │ 微客宝小程序 │ ├────┬────┬────┬────┬────┤ │ 首页 │ 服务 │ 成长 │ 学堂 │ 我的 │ └────┴────┴────┴────┴────┘ ``` ### 2.2 完整页面树 ``` pages/ ├── index/ # Tab1: 首页 │ └── index.vue # 轮播 + 快捷入口 + 推荐 + 活动 │ ├── service/ # Tab2: 服务 │ ├── index.vue # 服务分类列表 │ ├── detail.vue # 服务/套餐详情 │ ├── booking.vue # 预约下单 │ ├── nanny/ │ │ ├── list.vue # 月嫂列表 │ │ ├── detail.vue # 月嫂详情 │ │ └── order.vue # 月嫂预约 │ └── meal/ │ ├── today.vue # 今日餐单 │ ├── week.vue # 本周餐单 │ └── custom.vue # 自选点餐 │ ├── growth/ # Tab3: 共伴成长 │ ├── index.vue # 成长首页(宝宝+妈妈) │ ├── baby/ │ │ ├── records.vue # 宝宝护理记录 │ │ ├── chart.vue # 宝宝数据图表 │ │ └── milestone.vue # 成长里程碑 │ └── mom/ │ ├── records.vue # 妈妈护理记录 │ └── chart.vue # 妈妈健康图表 │ ├── study/ # Tab4: 学堂 │ ├── index.vue # 文章列表 │ ├── detail.vue # 文章详情 │ └── community/ │ ├── index.vue # 社区帖子列表 │ ├── detail.vue # 帖子详情 │ └── post.vue # 发帖 │ ├── mine/ # Tab5: 我的 │ ├── index.vue # 个人中心首页 │ ├── orders/ │ │ ├── list.vue # 我的订单 │ │ └── detail.vue # 订单详情 │ ├── account.vue # 账户余额/储值卡 │ ├── coupons.vue # 优惠券 │ ├── reviews.vue # 我的评价 │ ├── collections.vue # 我的收藏 │ ├── messages.vue # 消息通知 │ └── settings.vue # 设置 │ ├── auth/ # 认证 │ ├── login.vue # 微信授权登录 │ └── bindPhone.vue # 绑定手机号 │ ├── pay/ # 支付 │ ├── cashier.vue # 收银台 │ └── result.vue # 支付结果 │ └── common/ # 公共页面 ├── webview.vue # 内嵌网页 └── preview.vue # 图片预览 ``` --- ## 三、核心页面设计 ### 3.1 首页 (index) ``` ┌────────────────────────────┐ │ [轮播图 Banner] │ ├────────────────────────────┤ │ 📋公告栏(滚动) │ ├────┬────┬────┬────┤ │ 商城 │ 点餐 │ 月嫂 │ 更多 │ ← 快捷入口 ├────┴────┴────┴────┤ │ ⭐ 热门服务推荐 │ │ ┌─────┐ ┌─────┐ │ │ │ 项目1│ │ 项目2│ │ │ └─────┘ └─────┘ │ ├────────────────────────────┤ │ 🎉 精彩活动 │ │ ┌──────────────────┐ │ │ │ 活动卡片 │ │ │ └──────────────────┘ │ ├────────────────────────────┤ │ 📖 孕妈课堂(文章推荐) │ │ ┌──────────────────┐ │ │ │ 文章卡片 │ │ │ └──────────────────┘ │ └────────────────────────────┘ ``` 数据来源: - 轮播图:`GET /client/home/banners` - 公告:`GET /client/home/notices` - 推荐服务:`GET /client/home/services` - 活动:`GET /client/home/activities` - 文章推荐:`GET /client/articles?recommend=1&limit=3` ### 3.2 共伴成长页 ``` ┌────────────────────────────┐ │ [宝宝头像] 小明 出生第15天 │ │ 体重: 3.5kg 身长: 50cm │ ├────────────────────────────┤ │ Tab: [护理记录] [数据图表] [里程碑] │ ├────────────────────────────┤ │ 今日护理记录 │ │ 09:00 喂奶 120ml ✓ │ │ 09:30 换尿布 ✓ │ │ 10:00 体温测量 36.8°C ✓ │ │ 11:00 洗澡 ✓ │ │ 12:00 喂奶 100ml ✓ │ │ ... │ ├────────────────────────────┤ │ 切换至 [妈妈] 查看 │ └────────────────────────────┘ ``` 图表使用 uCharts 或 ECharts 小程序版,展示: - 体重增长曲线 - 喂奶量趋势 - 睡眠时长统计 - 健康指标折线图 ### 3.3 月子餐页 ``` ┌────────────────────────────┐ │ 📅 3月15日 周五 今日餐单 │ ├────────────────────────────┤ │ 🌅 早餐 07:30 │ │ ┌────────────────────┐ │ │ │ [图] 红枣小米粥 │ │ │ │ [图] 蒸蛋 │ │ │ │ [图] 核桃酥 │ │ │ └────────────────────┘ │ │ [👍已送达] [💬反馈] │ ├────────────────────────────┤ │ 🍵 早点心 10:00 │ │ ┌────────────────────┐ │ │ │ [图] 银耳莲子汤 │ │ │ └────────────────────┘ │ │ [⏳待送达] │ ├────────────────────────────┤ │ 🌞 午餐 12:00 │ │ ┌────────────────────┐ │ │ │ [图] 黄花菜炖鸡 │ │ │ │ [图] 时令蔬菜 │ │ │ │ [图] 乌鸡汤 │ │ │ └────────────────────┘ │ │ [🔄申请换餐] │ ├────────────────────────────┤ │ 🍵🌙🌙 午点/晚餐/晚点... │ ├────────────────────────────┤ │ [查看本周餐单] [自选点餐] │ └────────────────────────────┘ ``` --- ## 四、组件设计 ### 4.1 公共组件 ``` components/ ├── NavBar.vue # 自定义导航栏 ├── TabBar.vue # 底部导航(自定义实现) ├── EmptyState.vue # 空状态占位 ├── LoadMore.vue # 加载更多/到底了 ├── PriceTag.vue # 价格显示(¥ 格式化) ├── StarRating.vue # 评分星级 ├── CountDown.vue # 倒计时 ├── ImageUploader.vue # 图片上传 ├── DatePicker.vue # 日期选择 ├── OrderCard.vue # 订单卡片 ├── ServiceCard.vue # 服务项目卡片 ├── ArticleCard.vue # 文章卡片 ├── NannyCard.vue # 月嫂卡片 ├── MealCard.vue # 菜品卡片 └── StatusTag.vue # 状态标签 ``` ### 4.2 业务组件 ``` components/business/ ├── PayButton.vue # 支付按钮(封装微信支付) ├── PhoneAuth.vue # 手机号授权组件 ├── ShareCard.vue # 分享卡片生成 ├── CouponSelector.vue # 优惠券选择 ├── ServiceBooking.vue # 服务预约表单 └── ReviewForm.vue # 评价表单(星级+文字+图片) ``` --- ## 五、状态管理 (Pinia) ``` stores/ ├── user.js # 用户信息、Token、登录状态 ├── cart.js # 购物车/预约车 ├── order.js # 订单状态 └── app.js # 全局配置(门店信息、系统参数) ``` ### 5.1 用户状态 ```javascript // stores/user.js export const useUserStore = defineStore('user', { state: () => ({ token: '', userInfo: null, // 微信用户信息 customerInfo: null, // 客户业务信息 isLoggedIn: false, storeId: null, // 所属门店 }), actions: { async wechatLogin(code) { ... }, async bindPhone(encryptedData, iv) { ... }, async fetchProfile() { ... }, logout() { ... }, } }) ``` --- ## 六、API 封装 ``` api/ ├── request.js # 请求封装(baseURL, 拦截器, Token注入) ├── auth.js # 登录/注册 ├── home.js # 首页数据 ├── service.js # 服务/套餐 ├── meal.js # 月子餐 ├── nanny.js # 月嫂 ├── growth.js # 共伴成长 ├── order.js # 订单 ├── pay.js # 支付 ├── article.js # 文章/学堂 ├── community.js # 社区 └── user.js # 个人中心 ``` ### 6.1 请求封装 ```javascript // api/request.js const BASE_URL = 'https://xxx.com/api/v1/client' const request = (options) => { const userStore = useUserStore() return new Promise((resolve, reject) => { uni.request({ url: BASE_URL + options.url, method: options.method || 'GET', data: options.data, header: { 'Authorization': `Bearer ${userStore.token}`, 'Content-Type': 'application/json' }, success: (res) => { if (res.data.code === 0) { resolve(res.data.data) } else if (res.data.code >= 40100 && res.data.code < 40200) { // Token 过期,跳转登录 userStore.logout() uni.navigateTo({ url: '/pages/auth/login' }) reject(res.data) } else { uni.showToast({ title: res.data.message, icon: 'none' }) reject(res.data) } }, fail: reject }) }) } export default request ``` --- ## 七、微信能力集成 ### 7.1 登录流程 ``` 用户打开小程序 ↓ wx.login() 获取 code ↓ POST /client/auth/wechat-login { code } ↓ 后端:code → openid/unionid → 查找/创建用户 → 返回 token ↓ 若无手机号 → 弹出绑定手机号 ↓ getPhoneNumber → 解密 → 绑定 ↓ 登录完成,进入首页 ``` ### 7.2 微信支付流程 ``` 用户点击支付 ↓ POST /client/pay/wechat { order_id, ... } ↓ 后端调用微信统一下单 → 返回支付参数 ↓ 前端 wx.requestPayment(payParams) ↓ 支付成功/失败 → 跳转结果页 ↓ 后端接收微信回调 → 更新订单状态 ``` ### 7.3 分享 ```javascript // 页面分享配置 onShareAppMessage() { return { title: '宫中有喜·月子会所', path: '/pages/index/index?inviter=' + userId, imageUrl: '/static/share-cover.png' } } onShareTimeline() { return { title: '宫中有喜·专业月子护理', imageUrl: '/static/share-cover.png' } } ``` ### 7.4 订阅消息 | 模板 | 触发场景 | |------|----------| | 订单状态通知 | 下单成功、支付成功、服务完成 | | 服务预约提醒 | 预约确认、服务前1小时提醒 | | 餐单推送 | 每日餐单发布 | | 护理日报 | 每日护理小结 | | 活动通知 | 新活动上线 | ### 7.5 其他微信能力 | 能力 | 用途 | |------|------| | 地图 | 门店定位、导航 | | 客服 | 在线客服对话 | | 图片选择/预览 | 评价上传图片 | | 扫码 | 扫码签到、扫码支付 | | 生物认证 | 敏感操作验证 | --- ## 八、UI 设计规范 ### 8.1 色彩 | 色彩 | 色值 | 用途 | |------|------|------| | 主色 | #E8A87C | 温暖橘粉,品牌色 | | 辅色 | #D4A574 | 暖棕,辅助强调 | | 成功 | #67C23A | 完成/送达 | | 警告 | #E6A23C | 提醒/待处理 | | 危险 | #F56C6C | 异常/取消 | | 文字主色 | #303133 | 正文 | | 文字次色 | #909399 | 辅助说明 | | 背景色 | #F5F5F5 | 页面背景 | | 卡片色 | #FFFFFF | 内容卡片 | ### 8.2 字体 | 场景 | 大小 | 权重 | |------|------|------| | 大标题 | 36rpx | bold | | 标题 | 32rpx | bold | | 正文 | 28rpx | normal | | 辅助文字 | 24rpx | normal | | 价格 | 36rpx | bold | ### 8.3 间距 | 场景 | 值 | |------|-----| | 页面边距 | 32rpx | | 卡片间距 | 24rpx | | 卡片内边距 | 24rpx | | 元素间距 | 16rpx | | 紧凑间距 | 8rpx | ### 8.4 圆角 | 场景 | 值 | |------|-----| | 按钮 | 40rpx(胶囊) | | 卡片 | 16rpx | | 图片 | 12rpx | | 标签 | 8rpx | --- ## 九、性能优化 | 策略 | 说明 | |------|------| | 分包加载 | 主包 < 2MB,子包按 Tab 分 | | 图片懒加载 | 列表页图片按需加载 | | 数据缓存 | 首页数据缓存 5 分钟 | | 骨架屏 | 列表页加载时显示骨架 | | 防抖节流 | 搜索输入防抖、按钮点击节流 | | 虚拟列表 | 长列表使用 recycle-view | ### 9.1 分包配置 ```json { "pages": [ "pages/index/index", "pages/service/index", "pages/growth/index", "pages/study/index", "pages/mine/index" ], "subPackages": [ { "root": "pages/service", "pages": ["detail", "booking", "nanny/list", "nanny/detail", "nanny/order", "meal/today", "meal/week", "meal/custom"] }, { "root": "pages/growth", "pages": ["baby/records", "baby/chart", "baby/milestone", "mom/records", "mom/chart"] }, { "root": "pages/study", "pages": ["detail", "community/index", "community/detail", "community/post"] }, { "root": "pages/mine", "pages": ["orders/list", "orders/detail", "account", "coupons", "reviews", "collections", "messages", "settings"] }, { "root": "pages/auth", "pages": ["login", "bindPhone"] }, { "root": "pages/pay", "pages": ["cashier", "result"] } ] } ``` --- ## 十、安全设计 | 措施 | 说明 | |------|------| | Token 存储 | uni.setStorageSync 加密存储 | | 接口签名 | 敏感接口请求签名(timestamp + nonce + sign) | | HTTPS | 所有接口强制 HTTPS | | 输入校验 | 前端校验 + 后端校验双重保障 | | 敏感数据 | 手机号脱敏显示(138****8000) | | 支付安全 | 服务端生成支付参数,前端不接触密钥 | | 防重复提交 | 支付/下单按钮加 loading + 接口幂等 |