文档版本:v2.0
整理日期:2026-05-25
项目说明:后台和算法已完成,本文档用于指导APP前端开发
技术栈:UniApp框架(非UniAppX),支持iOS/Android/HarmonyOS跨平台
研年艾灸椅APP是一款配合智能艾灸椅硬件使用的移动控制应用。用户通过APP完成设备配对、艾灸方案选择/编辑、艾灸过程控制、设备状态监控等操作。APP通过蓝牙BLE与艾灸椅通信,通过HTTPS与后台服务交互。
+-------------------------------------------------------------+
| 用户打开APP |
| ↓ |
| 首次使用? → 隐私政策 → 登录/注册 → 补充信息 → 首页 |
| ↓ |
| 已登录? → 检查蓝牙 → 连接设备 → 选择模式 → 开始艾灸 |
| ↓ |
| 艾灸中 ←→ 暂停/继续/结束 ←→ 查看记录 |
+-------------------------------------------------------------+
+------------------+ BLE蓝牙 +------------------+
| | <--------------> | |
| APP (UniApp) | | 艾灸椅设备 |
| | | (主控端) |
+--------+---------+ +------------------+
| HTTPS RESTful
v
+------------------+ +------------------+
| | <--------------> | 算法服务 |
| 后台服务 | | (穴位计算) |
| (业务API) | +------------------+
| |
| - 用户管理 |
| - 方案管理 |
| - 消息推送 |
| - 版本管理 |
| - 数据记录 |
| - 推荐算法 |
+------------------+
| 项目 | 规范 |
|---|---|
| 开发框架 | UniApp(Vue3语法,非UniAppX) |
| 支持平台 | iOS / Android / HarmonyOS |
| 蓝牙通信 | uni-app蓝牙API(BLE低功耗蓝牙) |
| 网络请求 | uni.request(HTTPS) |
| 本地存储 | uni.setStorageSync / plus.sqlite |
| 推送服务 | uni-push 或厂商推送通道 |
| 页面路由 | uni.navigateTo / uni.redirectTo |
| 场景 | 交互方式 |
|---|---|
| 页面初始化 | 显示骨架屏,加载完成后展示内容 |
| 数据加载中 | 显示loading动画,禁止重复提交 |
| 数据为空 | 显示空状态插图+提示文字 |
| 网络错误 | 显示错误状态,提供"重新加载"按钮 |
| 请求失败 | Toast提示错误信息 |
| 类型 | 使用场景 | 交互特性 |
|---|---|---|
| Toast | 轻提示(成功/失败/警告) | 2秒自动消失,不阻塞操作 |
| 确认弹窗 | 需要用户确认的操作 | 阻断操作,必须选择 |
| 底部弹窗 | 选项选择、信息展示 | 点击蒙层可关闭 |
| 全屏弹窗 | 复杂表单填写 | 带返回/关闭按钮 |
| 状态 | 视觉表现 | 交互特性 |
|---|---|---|
| 正常 | 主色调填充 | 可点击 |
| 禁用 | 灰色填充 | 不可点击,点击无响应 |
| 加载中 | 显示loading图标 | 不可点击 |
| 危险操作 | 红色填充 | 二次确认 |
| 输入项 | 验证规则 | 错误提示 |
|---|---|---|
| 手机号 | 1开头的11位数字 | "请输入正确的手机号码" |
| 验证码 | 6位数字 | "请输入6位验证码" |
| 用户姓名 | 1-20个字符 | "姓名长度不超过20个字符" |
| 身高 | 50-250的数字 | "请输入50-250之间的数字" |
| 体重 | 10-300的数字 | "请输入10-300之间的数字" |
| 方案名称 | 1-30个字符 | "方案名称不超过30个字符" |
| 页面 | 下拉刷新 | 上拉加载 |
|---|---|---|
| 我的设备 | 是(刷新连接状态) | 否 |
| 我的方案 | 是 | 否 |
| 发现首页 | 是 | 否 |
| 专家方案 | 是 | 是 |
| 消息中心 | 是 | 是 |
| 使用记录 | 是 | 是 |
| 健康推荐 | 是 | 是 |
步骤说明:
步骤1:用户点击APP图标
→ 显示启动页(品牌LOGO,固定2秒)
步骤2:判断是否为首次安装
→ 是:进入隐私政策弹窗
→ 否:进入步骤3
步骤3:判断登录状态
→ 本地存在有效Token:进入首页
→ 本地无Token或Token失效:进入登录页
错误处理: | 异常场景 | 处理方式 | |---------|---------| | 启动时崩溃 | 记录日志,下次启动尝试恢复 | | 启动页加载超时 | 5秒后自动跳过 | | 本地数据损坏 | 清除本地缓存,视为首次启动 |
页面元素:
操作流程:
步骤1:弹窗显示
→ 用户阅读政策内容(可上下滚动)
步骤2:用户点击"不同意"
→ 弹出二次确认:"不同意将无法使用APP,是否退出?"
→ 确认退出 → 关闭APP
→ 取消 → 回到隐私政策弹窗
步骤3:用户点击"同意"
→ 记录同意状态(本地持久化)
→ 关闭弹窗,进入登录页
错误提示: | 操作 | 错误提示 | |------|---------| | 未阅读直接点同意 | 无强制要求,但提供可滚动阅读 | | 点击内容中的链接 | 跳转对应的协议详情页面 |
页面元素:
操作流程:
步骤1:从隐私政策弹窗点击协议链接 或 从设置页进入
→ 打开协议详情页
步骤2:用户阅读(可上下滚动)
步骤3:点击返回按钮
→ 返回上一页
页面布局:
+----------------------------------+
| 状态栏 |
+----------------------------------+
| |
| HELLO, |
| 欢迎使用研年健康平台 |
| |
| +------------------------------+ |
| | +86 | 请输入手机号 | |
| +------------------------------+ |
| |
| +------------------------------+ |
| | 请输入验证码 | [获取验证码] | |
| +------------------------------+ |
| |
| +------------------------------+ |
| | 登录 | |
| +------------------------------+ |
| |
| ---------- 其他登录方式 --------- |
| |
| [微信图标] [Apple图标] |
| |
| [ ] 登录即代表同意隐私政策 |
+----------------------------------+
操作流程:
【整体流程】
步骤1:进入登录页
→ 手机号输入框自动获得焦点
→ 唤起数字键盘
步骤2:输入手机号
→ 实时校验手机号格式(1开头的11位数字)
→ 格式正确时,"获取验证码"按钮变为可用状态
→ 格式不正确时,按钮保持禁用状态
步骤3:点击"获取验证码"
→ 按钮变为禁用状态,开始60秒倒计时
→ 按钮文字变为"60s"(逐秒递减)
→ 后台调用发送验证码接口
→ 发送成功:Toast提示"验证码已发送"
→ 发送失败:恢复按钮状态,Toast提示错误原因
步骤4:输入验证码
→ 限制输入6位数字
→ 满6位后自动校验格式
步骤5:点击"登录"按钮
→ 按钮进入loading状态
→ 调用登录接口(手机号+验证码)
→ 登录成功:
- 保存Token到本地(持久化存储,永不过期)
- 保存用户信息
- 判断是否为首次登录
- 是:跳转到补充信息页
- 否:跳转到首页
→ 登录失败:
- 恢复按钮状态
- Toast提示错误信息
【第三方登录流程】
步骤1:点击微信/Apple图标
→ 唤起对应第三方登录SDK
→ 用户完成授权
→ 获取第三方授权码
→ 调用后台绑定/登录接口
→ 后续流程同手机号登录
详细错误提示清单:
| 场景 | 错误提示 | 处理方式 |
|---|---|---|
| 手机号为空 | "请输入手机号" | 登录按钮禁用 |
| 手机号格式错误 | "请输入正确的11位手机号" | 实时校验,红色边框提示 |
| 手机号未注册 | 后台自动注册新用户 | 无需提示,直接进入补充信息 |
| 验证码为空 | "请输入验证码" | 登录按钮禁用 |
| 验证码格式错误 | "验证码为6位数字" | 实时校验 |
| 验证码已过期 | "验证码已过期,请重新获取" | 清空验证码框,恢复获取按钮 |
| 验证码错误 | "验证码错误,请重新输入" | 保留手机号,清空验证码框 |
| 发送验证码频繁 | "发送过于频繁,请稍后再试" | 保持倒计时 |
| 网络请求失败 | "网络连接失败,请检查网络" | 提供重试按钮 |
| 服务器异常 | "服务器繁忙,请稍后再试" | 提供重试按钮 |
| 第三方登录取消 | "登录已取消" | Toast提示,留在登录页 |
| 第三方登录失败 | "登录失败,请尝试其他方式" | Toast提示 |
边缘场景处理:
| 场景 | 处理方案 |
|---|---|
| 倒计时期间切换页面 | 保持倒计时,返回后显示剩余时间 |
| 倒计时结束未获取 | 按钮恢复为"获取验证码" |
| 登录过程中杀掉APP | 下次启动重新走登录流程 |
| 同一账号多设备登录 | 允许多设备同时登录,各自独立 |
页面布局:
+----------------------------------+
| < 完善个人信息 |
+----------------------------------+
| |
| 请完善以下信息,以便我们为您 |
| 提供更精准的艾灸服务 |
| |
| 姓名 |
| +------------------------------+ |
| | 请输入您的姓名 | |
| +------------------------------+ |
| |
| 性别 |
| [ 男 ] [ 女 ] |
| |
| 年龄 |
| +------------------------------+ |
| | 请选择年龄 | |
| +------------------------------+ |
| |
| 身高(cm) |
| +------------------------------+ |
| | 请输入身高 | |
| +------------------------------+ |
| |
| 体重(kg) |
| +------------------------------+ |
| | 请输入体重 | |
| +------------------------------+ |
| |
| +------------------------------+ |
| | 保存并进入 | |
| +------------------------------+ |
+----------------------------------+
操作流程:
步骤1:新用户登录成功后自动跳转
→ 表单所有字段为空
步骤2:填写姓名
→ 输入1-20个字符
→ 超过20字符禁止继续输入
步骤3:选择性别
→ 点击男/女单选按钮
→ 选中项高亮显示
步骤4:选择年龄
→ 点击弹出底部选择器
→ 范围:1-120岁
→ 默认选中25岁
→ 滑动选择后点击确认
步骤5:填写身高
→ 输入50-250的数字
→ 限制只能输入数字
→ 输入范围外数字时红色提示
步骤6:填写体重
→ 输入10-300的数字
→ 限制只能输入数字
步骤7:点击"保存并进入"
→ 校验所有字段是否已填写
→ 未填写项红色提示并滚动到对应位置
→ 校验通过:调用用户信息更新接口
→ 保存成功:进入首页
→ 保存失败:Toast提示错误信息
详细错误提示清单:
| 场景 | 错误提示 |
|---|---|
| 姓名为空 | "请输入姓名" |
| 姓名超过20字符 | "姓名不超过20个字符" |
| 性别未选择 | "请选择性别" |
| 年龄未选择 | "请选择年龄" |
| 身高为空 | "请输入身高" |
| 身高超出范围 | "请输入50-250之间的数字" |
| 体重为空 | "请输入体重" |
| 体重超出范围 | "请输入10-300之间的数字" |
| 网络保存失败 | "保存失败,请检查网络后重试" |
边缘场景:
| 场景 | 处理方案 |
|---|---|
| 用户点击返回 | 弹窗提示"完善信息可获得更精准的服务,是否跳过?",跳过则以默认参数进入首页 |
| 保存过程中断网 | 提示网络错误,保留表单数据 |
| 后台返回错误 | 保留表单数据,提示具体错误原因 |
入口: 首页 → 设备详情页 → 点击用户切换按钮
页面布局:
+----------------------------------+
| < 用户管理 [+ 新增] |
+----------------------------------+
| 最多可添加10个用户 |
+----------------------------------+
| [========= 用户卡片 =========] |
| 头像 张三 男 28岁 |
| 肩高:135cm 肩宽:42cm |
| [编辑] [删除] |
| [============================] |
| |
| [========= 用户卡片 =========] |
| 头像 李四 女 56岁 |
| 肩高:128cm 肩宽:38cm |
| [编辑] [删除] |
| [============================] |
+----------------------------------+
操作流程 - 查看用户列表:
步骤1:进入用户管理页
→ 调用接口获取用户列表
→ 显示loading动画
→ 加载完成显示用户卡片列表
步骤2:用户切换
→ 点击某个用户卡片
→ 该卡片高亮显示(选中状态)
→ 保存选中用户ID到本地
→ Toast提示"已切换至用户:XXX"
→ 自动返回设备详情页
操作流程 - 新增用户:
步骤1:点击右上角"+ 新增"按钮
→ 进入体形数据录入页
步骤2:填写用户信息
→ 同5.2节补充信息表单
步骤3:点击保存
→ 校验:当前用户数量是否已达到10个
→ 已达10个:Toast提示"最多可添加10个用户,请先删除其他用户"
→ 未满10个:调用新增接口
→ 成功:返回用户列表,显示新用户
→ 失败:提示错误信息
操作流程 - 编辑用户:
步骤1:点击用户卡片的"编辑"按钮
→ 进入编辑页面
→ 表单回显当前用户信息
步骤2:修改信息
→ 同新增流程
步骤3:点击保存
→ 调用编辑接口
→ 成功:返回列表页,刷新显示
操作流程 - 删除用户:
步骤1:点击用户卡片的"删除"按钮
→ 弹出确认弹窗:"确定删除用户XXX?删除后将无法恢复"
→ 按钮:"取消" / "确定删除"(红色)
步骤2:点击确定
→ 调用删除接口
→ 删除成功:移除该卡片,Toast提示"删除成功"
→ 删除失败:Toast提示错误
详细错误提示清单:
| 场景 | 错误提示 |
|---|---|
| 用户达到上限(10人) | "最多可添加10个用户" |
| 删除最后一个用户 | "至少保留一个用户" |
| 删除失败 | "删除失败,请重试" |
| 编辑时用户不存在 | "用户信息已过期,请刷新" |
| 网络错误 | "网络连接失败,请检查网络" |
页面布局:
+----------------------------------+
| < 体形参数 |
+----------------------------------+
| 请录入体形参数,用于精准定位穴位 |
+----------------------------------+
| |
| 肩高(地面到肩膀的高度,cm) |
| +------------------------------+ |
| | 例如:135 | |
| +------------------------------+ |
| [========滑块========] 135cm |
| |
| 肩宽(两肩之间的宽度,cm) |
| +------------------------------+ |
| | 例如:42 | |
| +------------------------------+ |
| [========滑块========] 42cm |
| |
| 体重(kg) |
| +------------------------------+ |
| | 例如:65 | |
| +------------------------------+ |
| |
| +------------------------------+ |
| | 保存 | |
| +------------------------------+ |
+----------------------------------+
操作流程:
步骤1:进入体形参数页
→ 如已有数据则回显
步骤2:填写肩高
→ 输入框输入数字
→ 或拖动滑块调节
→ 范围:50-250cm
步骤3:填写肩宽
→ 输入框输入数字
→ 或拖动滑块调节
→ 范围:20-80cm
步骤4:填写体重
→ 输入框输入数字
→ 范围:10-300kg
步骤5:点击保存
→ 校验所有字段
→ 调用体形数据保存接口
→ 后台触发穴位坐标计算算法
→ 保存成功:返回上一页
→ 保存失败:提示错误
详细错误提示清单:
| 场景 | 错误提示 |
|---|---|
| 肩高为空 | "请输入肩高" |
| 肩高超出范围 | "肩高范围50-250cm" |
| 肩宽为空 | "请输入肩宽" |
| 肩宽超出范围 | "肩宽范围20-80cm" |
| 体重为空 | "请输入体重" |
| 体重超出范围 | "体重范围10-300kg" |
| 保存失败 | "保存失败,请重试" |
操作流程:
步骤1:在用户管理页选择"指纹录入"
→ 进入指纹录入引导页
步骤2:阅读操作说明
→ 显示图文并茂的操作指引:
"请将手指放在艾灸椅扶手处的指纹采集器上,
听到'滴'声后抬起,重复3次完成录入"
步骤3:点击"开始录入"
→ 通过蓝牙发送指纹采集指令到设备
→ 设备进入指纹录入模式
→ APP显示"等待指纹录入..."
步骤4:用户在设备上录入指纹
→ 设备采集指纹
→ 蓝牙回传指纹ID
步骤5:绑定指纹
→ APP收到指纹ID
→ 调用后台接口绑定用户与指纹ID
→ 显示"指纹录入成功"
→ 返回用户管理页
详细错误提示清单:
| 场景 | 错误提示 | 处理方式 |
|---|---|---|
| 设备未连接 | "请先连接艾灸椅设备" | 引导用户先连接设备 |
| 指纹采集超时 | "指纹采集超时,请重试" | 提供"重新录入"按钮 |
| 指纹质量不佳 | "指纹采集不清晰,请清洁手指后重试" | 重试 |
| 指纹ID回传失败 | "设备通信异常,请检查蓝牙连接" | 重试 |
| 后台绑定失败 | "绑定失败,请稍后再试" | 重试 |
| 该指纹已被绑定 | "该指纹已被其他用户绑定,请更换手指" | 提示更换手指 |
页面布局:
+----------------------------------+
| 我的设备 [+]添加 |
+----------------------------------+
| 已添加的设备 |
+----------------------------------+
| +---------------------------+ |
| | [艾灸椅图片] | |
| | | |
| | 我的艾灸椅 | |
| | ● 已连接 | |
| +---------------------------+ |
| |
| +---------------------------+ |
| | [艾灸椅图片] | |
| | | |
| | 客厅艾灸椅 | |
| | ○ 未连接 | |
| +---------------------------+ |
| |
+----------------------------------+
| [首页] [发现] [健康] [我的] |
+----------------------------------+
操作流程 - 进入页面:
步骤1:点击底部Tab"首页"
→ 检查本地是否有已绑定设备
→ 无设备:显示空状态("暂无设备,点击添加" + 添加按钮)
→ 有设备:显示设备列表卡片
步骤2:自动刷新设备状态
→ 遍历设备列表尝试蓝牙连接
→ 已连接设备显示"已连接"绿色状态
→ 未连接设备显示"未连接"灰色状态
→ 连接中显示loading动画
错误提示:
| 场景 | 错误提示 |
|---|---|
| 蓝牙未开启 | 提示"蓝牙未开启,部分功能不可用" |
| 刷新状态失败 | "状态刷新失败,下拉重试" |
| 连接超时 | "连接超时,请确保设备在附近且已开机" |
完整操作流程:
【步骤1:进入添加页面】
操作:点击"+"按钮
结果:跳转到添加设备页
【步骤2:检查蓝牙状态】
操作:页面自动检查手机蓝牙是否开启
→ 蓝牙已开启:进入步骤3
→ 蓝牙未开启:弹出引导弹窗
弹窗内容:"当前手机蓝牙未开启,是否打开以扫描附近蓝牙设备?"
按钮:"取消" / "去开启"
点击"取消":返回上一页
点击"去开启":跳转系统蓝牙设置
→ 用户开启蓝牙后返回APP
→ 自动进入步骤3
【步骤3:搜索设备】
页面显示:
- 中央:蓝牙信号搜索动画(波纹扩散效果)
- 文字:"正在搜索附近设备..."
- 下方:"请确保艾灸椅已接通电源并处于待连接状态"
后台行为:
→ 调用 uni.openBluetoothAdapter 初始化蓝牙
→ 调用 uni.startBluetoothDevicesDiscovery 开始搜索
→ 监听 uni.onBluetoothDeviceFound 事件
→ 超时设置:30秒
【步骤4:搜索结果处理】
情况A:搜索到艾灸椅设备
→ 底部弹出设备选择弹窗
→ 弹窗标题:"搜索到以下设备"
→ 列表显示发现的设备名称(过滤非艾灸椅设备)
→ 点击设备项选中(高亮)
→ 按钮:"取消" / "连接"
点击"连接"后:
→ 显示"正在连接..."
→ 调用 uni.createBLEConnection
→ 连接成功:
→ 停止搜索
→ 发现GATT服务和特征值
→ 显示"连接成功"
→ 1秒后自动跳转到设备详情页
→ 连接失败:
→ 提示"连接失败,请重试"
→ 保留在弹窗,可重新选择
情况B:未搜索到设备(30秒超时)
→ 停止搜索动画
→ 显示"未扫描到设备"
→ 提示文字:"请检查:\n1. 手机蓝牙是否已开启\n2. 艾灸椅是否已接通电源\n3. 艾灸椅是否在附近(10米内)"
→ 按钮:"重新搜索" / "手动输入"
→ 点击"重新搜索":回到步骤3
情况C:搜索过程中蓝牙被关闭
→ 停止搜索
→ 提示"蓝牙已关闭,搜索已停止"
→ 提供"开启蓝牙重新搜索"按钮
【步骤5:绑定设备】
操作:首次连接成功后自动绑定
→ 调用后台接口:绑定设备到当前用户
→ 保存设备信息到本地
→ 保存蓝牙MAC地址用于自动重连
→ Toast提示"设备添加成功"
详细错误提示清单:
| 场景 | 错误提示 | 处理方式 |
|---|---|---|
| 蓝牙适配器初始化失败 | "蓝牙初始化失败,请重启手机蓝牙" | 引导重启蓝牙 |
| 搜索被其他应用占用 | "蓝牙搜索被占用,请关闭其他应用后重试" | 提示关闭其他BLE应用 |
| 连接被拒绝 | "连接被拒绝,请确认设备是否处于配对模式" | 引导检查设备 |
| 连接超时 | "连接超时,请确保设备在有效范围内" | 重试 |
| 服务发现失败 | "设备服务异常,请重启设备后重试" | 引导重启设备 |
| 特征值获取失败 | "设备通信异常" | 断开重连 |
| 绑定后台接口失败 | "设备绑定失败,请检查网络" | 本地保存,网络恢复后重试 |
| 已达到最大绑定数 | "每个账号最多绑定5台设备" | 提示解绑旧设备 |
页面布局:
+----------------------------------+
| < 我的艾灸椅 [≡]菜单 |
+----------------------------------+
| |
| [艾灸椅3D图] |
| ● 大椎穴 |
| |
| 蓝牙已连接 |
| |
+----------------------------------+
| 选择模式 |
| +----------------------------+ |
| | 专业模式 [切换→] | |
| +----------------------------+ |
+----------------------------------+
| 其他功能 |
| [⭐我的方案] [📦艾灸余量] [🔧滤芯状态] |
+----------------------------------+
| |
| +------------------------------+ |
| | [开始按钮] | |
| | ● | |
| | 开始 | |
| +------------------------------+ |
+----------------------------------+
页面布局 - 艾灸执行中状态:
+----------------------------------+
| < 我的艾灸椅 [≡]菜单 |
+----------------------------------+
| [设备] [穴位] |
| [艾灸椅3D图/穴位图] |
| ● 大椎穴 |
| |
| 蓝牙已连接 |
+----------------------------------+
| 选择模式 |
| +----------------------------+ |
| | 自定义模式 [切换→] | |
| +----------------------------+ |
+----------------------------------+
| 其他功能 |
| [📦艾灸余量] [🔧滤芯状态] |
+----------------------------------+
| 正在艾灸 00:10:38 |
| [继续] [暂停] [结束] |
+----------------------------------+
Tab切换 - 设备/穴位:
| Tab | 显示内容 |
|---|---|
| 设备 | 艾灸椅3D模型图,当前施灸穴位红点标记 |
| 穴位 | 人体背部穴位图,白色圆点标记所有穴位,红色标记当前穴位 |
操作流程 - 模式切换:
步骤1:点击"选择模式"卡片
→ 底部弹出模式选择弹窗
步骤2:选择模式
→ 无艾灸模式
→ 专业模式
→ 自定义模式
步骤3:点击确认
→ 关闭弹窗,更新显示的模式名称
→ 同时更新下方功能区域显示
操作流程 - 查看耗材状态:
步骤1:点击"艾灸余量"图标
→ 进入耗材管理页面
步骤2:页面显示
→ 尘盒滤芯:进度条 + 百分比(如75%)
→ 艾灸柱:剩余数量(如5个)
步骤3:实时监控
→ 通过蓝牙轮询读取传感器数据(每5秒)
→ 数据变化时更新显示
→ 艾材余量≤3:进度条变红色
→ 废料舱≥80%:进度条变红色
状态阈值与提示:
| 监控项 | 正常 | 预警 | 危险 | 操作限制 |
|---|---|---|---|---|
| 艾材余量 | >3个 | 1-3个 | 0个 | =0时禁止启动艾灸 |
| 废料舱 | <80% | 80-99% | 100% | ≥100%时禁止启动 |
| 滤芯寿命 | <80% | 80-99% | 100% | ≥100%时提醒更换 |
预警提示文案:
| 场景 | 提示方式 | 提示文案 |
|---|---|---|
| 艾材余量=3 | Toast | "艾材余量不足,剩余3个,请及时补充" |
| 艾材余量=1 | 弹窗 | "艾材即将用完,只剩1个,建议补充后再使用" |
| 艾材余量=0 | 弹窗 | "艾材已用完,无法启动艾灸,请补充艾材" |
| 废料舱=80% | Toast | "废料舱即将满仓,请及时清理" |
| 废料舱=100% | 弹窗 | "废料舱已满,无法启动艾灸,请清理废料舱" |
| 滤芯=80% | Toast | "滤芯使用寿命即将到期,建议更换" |
| 滤芯=100% | 弹窗 | "滤芯已到期,请更换滤芯以保证使用效果" |
页面布局:
+----------------------------------+
| < 座椅角度调节 |
+----------------------------------+
| |
| [艾灸椅侧视图] |
| 当前角度:100° |
| |
| 90° [========●===========] 150° |
| 拖动滑块调节角度 |
| |
| 快捷角度: |
| [ 90° ] [ 110° ] [ 130° ] [ 150° ]|
+----------------------------------+
操作流程:
步骤1:进入座椅角度调节页
→ 显示当前角度值
→ 滑块定位到当前角度
步骤2A:拖动滑块调节
→ 实时显示角度值(整数)
→ 松开手指后:通过蓝牙发送目标角度指令
→ 设备执行角度调节
→ 设备反馈到位信号后更新显示
步骤2B:点击快捷角度按钮
→ 直接设置到对应角度
→ 蓝牙发送目标角度指令
步骤3:调节完成
→ 点击返回按钮回到设备详情页
错误提示:
| 场景 | 错误提示 |
|---|---|
| 设备未连接 | "设备未连接,无法调节角度" |
| 调节超时 | "角度调节超时,请检查设备" |
| 调节被中断 | "调节被中断,当前角度:XXX°" |
操作流程:
步骤1:在设备详情页点击"选择模式"区域
→ 底部弹出模式选择面板
步骤2:面板内容
→ 单选列表:
○ 无艾灸模式
副标题:"纯休闲模式,享受白噪音和座椅按摩"
○ 专业模式
副标题:"选择功效,自动匹配灸方"
○ 自定义模式
副标题:"自选穴位,个性化艾灸方案"
→ 底部:"模式说明"链接
步骤3:选择一个模式
→ 该选项高亮(单选)
→ 其他选项取消选中
步骤4:点击"确认"或点击蒙层关闭
→ 更新首页显示的模式名称
→ 根据模式切换下方功能区域
模式说明弹窗内容:
- 无艾灸模式:不启动艾灸功能,仅使用座椅角度调节和白噪音播放功能
- 专业模式:选择八大功效之一,系统自动根据您的体形数据计算穴位并匹配灸方
- 自定义模式:手动选择穴位、设置时长和温度,编辑个性化艾灸方案
操作流程(通用):
前置检查(点击开始按钮时自动执行):
1. 检查蓝牙连接 → 未连接:提示"请先连接设备"
2. 检查艾材余量 → =0:提示"艾材不足,请补充"
3. 检查废料舱 → =100%:提示"废料舱已满,请清理"
4. 检查滤芯 → =100%:提示"滤芯已到期,请更换"
步骤1:点击"开始"按钮
→ 按钮变为loading状态
→ 根据当前模式准备艾灸数据
步骤2:进入预热阶段
→ 显示"正在预热 X%"
→ 进度条动态增长
→ 此阶段设备预热艾材
→ 显示倒计时(如30秒预热)
步骤3:预热完成
→ 显示"已完成预热 100%"
→ 弹窗:"已完成预热,即将开始艾灸5s"
→ 3秒倒计时自动关闭,或点击"确认"
步骤4:艾灸开始
→ 更新UI为"正在艾灸"状态
→ 显示倒计时
→ 开始播放白噪音(如已选择)
→ 开始接收设备状态上报
步骤5:艾灸过程中
→ 实时更新:当前穴位、剩余时长、当前温度、当前手法
→ 穴位Tab显示当前施灸穴位红色标记
页面布局:
+----------------------------------+
| < 无艾灸模式 |
+----------------------------------+
| |
| 座椅角度(拖动滑块调整) |
| [====●===========] 100° |
| |
+----------------------------------+
| 选择模式 |
| +----------------------------+ |
| | 无艾灸模式 [切换→] | |
| +----------------------------+ |
+----------------------------------+
| 白噪音 |
| +----------------------------+ |
| | [⏵] 河流 03:21 / --:--| |
| | 夏雨 | |
| | 森林 | |
| | 鸟鸣 | |
| | 漂流 | |
| | 雨滴 | |
| | 炉火 | |
| | 海浪 | |
| +----------------------------+ |
| |
| 音量 |
| [--●----------] |
| [🔔] 一键静音 |
+----------------------------------+
| |
| +------------------------------+ |
| | 开始 | |
| +------------------------------+ |
+----------------------------------+
操作流程 - 选择音效:
步骤1:在音效列表中点击某一项
→ 该项高亮显示
→ 自动开始播放
→ 播放按钮变为暂停图标
→ 显示播放进度条
步骤2:播放控制
→ 点击暂停:暂停播放,按钮变为播放图标
→ 点击继续:继续播放
→ 进度条可拖动快进/快退
步骤3:切换音效
→ 点击其他音效项
→ 当前音效淡出
→ 新音效淡入播放
→ 更新进度条
步骤4:停止播放
→ 模式切换或退出页面时自动停止
音量调节:
步骤1:拖动音量滑块
→ 实时调节音量(0-100%)
→ 通过蓝牙发送音量控制指令
步骤2:点击静音按钮
→ 一键静音(音量设为0)
→ 静音图标变为带斜杠
→ 保留系统提示音不受静音影响
步骤3:再次点击静音
→ 恢复静音前的音量值
错误提示:
| 场景 | 错误提示 |
|---|---|
| 音效播放失败 | "音效播放失败,请重试" |
| 蓝牙音量控制失败 | "音量调节失败,请检查设备连接" |
页面布局:
+----------------------------------+
| < 选择功效 |
+----------------------------------+
| 请选择您需要的艾灸功效 |
+----------------------------------+
| +------------+ +------------+ |
| | ❄️ | | 💨 | |
| | 驱寒 | | 祛风 | |
| +------------+ +------------+ |
| |
| +------------+ +------------+ |
| | 💧 | | 🩸 | |
| | 祛湿 | | 化瘀 | |
| +------------+ +------------+ |
| |
| +------------+ +------------+ |
| | 🫁 | | ❤️ | |
| | 化痰 | | 活血 | |
| +------------+ +------------+ |
| |
| +------------+ +------------+ |
| | ☀️ | | 🌸 | |
| | 扶阳 | | 养颜 | |
| +------------+ +------------+ |
+----------------------------------+
| +------------------------------+ |
| | 确认选择 | |
| +------------------------------+ |
+----------------------------------+
操作流程:
步骤1:进入功效选择页
→ 显示8种功效网格
→ 无默认选中项
步骤2:选择功效
→ 点击某个功效卡片
→ 卡片高亮(选中状态)
→ 再次点击取消选中
步骤3:确认选择
→ 点击"确认选择"按钮
→ 校验:必须选中至少1个功效
→ 未选中:提示"请至少选择一种功效"
→ 已选中:进入艾灸准备流程
步骤4:一键艾灸准备
→ 显示loading:"正在为您计算穴位方案..."
→ APP读取当前选中用户的体形数据
→ 调用后台接口:用户穴位坐标计算
参数:用户ID、体形数据(肩高/肩宽/体重)
返回:各穴位坐标参数
→ 调用后台接口:功效-灸方参数匹配
参数:作用类型、穴位坐标
返回:灸方参数(穴位/温度/手法/时长)
→ 计算完成:显示方案摘要弹窗
步骤5:方案确认弹窗
→ 显示内容:
"为您匹配的艾灸方案:"
"施灸穴位:大椎穴、风池穴、肩井穴..."
"总时长:25分钟"
"温度:40℃"
→ 按钮:"重新选择" / "开始艾灸"
→ 点击"开始艾灸":进入预热流程
功效说明:
| 功效 | 适用症状 | 灸方特点 |
|---|---|---|
| 驱寒 | 手脚冰凉、畏寒怕冷 | 温热灸法,重点督脉 |
| 祛风 | 风寒感冒、头痛 | 祛风穴位组合 |
| 祛湿 | 身体困重、水肿 | 健脾祛湿穴位 |
| 化瘀 | 血瘀疼痛、经络不通 | 活血化瘀手法 |
| 化痰 | 咳嗽痰多、胸闷 | 理气化痰穴位 |
| 活血 | 血液循环不畅 | 促进血液循环 |
| 扶阳 | 阳气不足、乏力 | 温补阳气穴位 |
| 养颜 | 面色暗沉、皮肤松弛 | 面部相关穴位 |
详细错误提示清单:
| 场景 | 错误提示 | 处理方式 |
|---|---|---|
| 未选择功效 | "请至少选择一种功效" | 停留在选择页 |
| 用户无体形数据 | "请先完善体形信息" | 跳转到体形录入页 |
| 穴位计算接口失败 | "方案生成失败,请检查网络后重试" | 提供重试按钮 |
| 灸方匹配失败 | "灸方匹配失败,请尝试其他功效" | 返回功效选择 |
| 蓝牙未连接 | "设备未连接,无法开始艾灸" | 引导连接设备 |
| 用户切换后无数据 | "当前用户无体形数据,请先录入" | 跳转体形录入 |
如需支持多功效同时选择:
操作:点击多个功效卡片(多选)
→ 多个卡片同时高亮
→ 按钮显示"已选X种功效"
限制:最多同时选择3种功效
→ 选第4个时提示"最多同时选择3种功效"
页面布局:
+----------------------------------+
| < 穴位编辑 [设备][穴位] |
+----------------------------------+
| |
| [人体背部穴位图] |
| ○ ○ ○ |
| ○ ● ○ |
| ○ ○ ○ |
| ○ ○ ○ |
| |
| ○ 大椎穴 ○ 风池穴 ○ 肩井穴 |
| (白色=未选 红色=已选 黄色=当前)|
| |
+----------------------------------+
| 已选穴位(0/3): |
| |
| +------------------------------+ |
| | 开始 | |
| +------------------------------+ |
+----------------------------------+
操作流程 - 穴位选择:
步骤1:进入穴位编辑页
→ 默认显示"穴位"Tab
→ 显示人体背部穴位图
→ 所有可用穴位显示白色圆点
→ 底部显示"已选穴位(0/3)"
步骤2:点击穴位
→ 方式A:点击图上穴位点
→ 该穴位变为红色(选中状态)
→ 显示穴位名称标签
→ 底部"已选穴位"计数+1
→ 弹出时长温度设定面板
→ 方式B:点击下方穴位名称列表
→ 同上效果
步骤3:设置时长和温度(弹出面板)
→ 温度选择:38℃ / 40℃ / 42℃ / 44℃(单选)
→ 时长选择:5分 / 10分 / 15分 / ... / 50分(单选)
→ 按钮:"取消" / "确认"
→ 点击确认:保存该穴位参数,面板关闭
步骤4:继续添加穴位(可选)
→ 重复步骤2-3
→ 最多3个穴位
→ 选第4个时:弹窗"单次最多可选择3个穴位"
步骤5:总时长校验
→ 每次添加后校验总时长
→ 总时长 = 所有穴位时长之和
→ 总时长 > 30分钟:弹窗"总时长不超过30分钟,请重新分配"
→ 超出时:要求用户减少某个穴位的时长
步骤6:调整穴位顺序
→ 在已选穴位列表中长按拖拽
→ 调整执行顺序
→ 蓝牙下发时按此顺序
步骤7:二次修改穴位参数
→ 点击已选的穴位
→ 重新弹出时长温度面板
→ 回显已设置的参数
→ 修改后确认
步骤8:删除穴位
→ 在已选穴位列表中左滑
→ 显示"删除"按钮
→ 点击删除,该穴位恢复白色
步骤9:点击"开始"按钮
→ 校验:至少选择1个穴位
→ 未选穴位:提示"请至少选择一个穴位"
→ 已选穴位:进入艾灸预热流程
穴位图交互说明:
| 状态 | 颜色 | 说明 |
|---|---|---|
| 未选中 | 白色 | 可选的穴位 |
| 已选中 | 红色 | 已添加到方案的穴位 |
| 当前施灸 | 黄色闪烁 | 艾灸执行中正在施灸的穴位 |
详细错误提示清单:
| 场景 | 错误提示 | 处理方式 |
|---|---|---|
| 未选穴位点开始 | "请至少选择一个穴位" | 停留页面 |
| 穴位超过3个 | "单次最多可增加3个穴位" | 阻止添加 |
| 总时长超30分钟 | "总时长不超过30分钟,请重新分配" | 弹出时长调整面板 |
| 温度未设置 | "请为每个穴位设置温度" | 引导设置 |
| 时长未设置 | "请为每个穴位设置时长" | 引导设置 |
| 穴位坐标获取失败 | "穴位数据加载失败,请下拉刷新" | 下拉刷新 |
操作流程:
触发条件:自定义模式编辑完成后
步骤1:编辑完成后不直接开始,可选择保存
→ 显示"保存方案"按钮
步骤2:点击"保存方案"
→ 弹出输入框:"请输入方案名称"
→ 默认名称:"自定义方案 + 当前日期"
→ 最多30个字符
步骤3:输入名称并确认
→ 校验名称是否为空
→ 调用后台接口保存方案
参数:用户ID + 方案名称 + 艾灸工艺数组 + 总时长
→ 保存成功:Toast"方案保存成功",跳转到我的方案页
→ 保存失败:提示错误
操作流程:
步骤1:点击开始 → 进入预热
→ 显示"正在预热 0%"
→ 圆形/条形进度条动画
→ 预计预热时间:30秒
步骤2:预热进度更新
→ 蓝牙接收设备预热进度上报
→ 进度条动态增长:0% → 25% → 50% → 75% → 100%
→ 显示预计剩余时间
步骤3:预热完成
→ 进度条达到100%
→ 显示"已完成预热"
→ 弹窗:"已完成预热,即将开始艾灸"
→ 3秒倒计时,或点击"确认"立即开始
→ 弹窗关闭,进入艾灸执行阶段
异常情况 - 预热失败:
→ 进度长时间不更新(超时60秒)
→ 弹窗:"预热超时,请检查设备后重试"
→ 按钮:"重试" / "取消"
异常情况 - 预热中断:
→ 蓝牙断开
→ 提示"连接已断开,预热中断"
→ 重新连接后可重新开始
设备Tab显示内容:
+----------------------------------+
| [设备] [穴位] |
| [艾灸椅3D图] |
| ● 大椎穴 |
| (红色标记当前穴位) |
+----------------------------------+
| 正在艾灸 |
| 剩余时间:00:08:25 |
| 当前穴位:大椎穴 |
| 当前温度:40℃ |
| 当前手法:悬定灸 |
+----------------------------------+
| [⏵ 继续] [⏸ 暂停] [⏹ 结束] |
+----------------------------------+
穴位Tab显示内容:
+----------------------------------+
| [设备] [穴位] |
| [人体背部穴位图] |
| ○ ○ ○ |
| ○ 🟡 ○ |
| ○ ○ ○ |
| ○ ○ ○ |
| (🟡黄色=当前施灸穴位) |
+----------------------------------+
操作 - 暂停:
步骤1:点击"暂停"按钮
→ 通过蓝牙发送暂停指令
→ 设备:灸头后退2cm(安全距离)
→ 设备:暂停计时
→ APP状态更新:"已暂停"
→ 按钮切换:显示"继续"按钮
步骤2:暂停状态显示
→ 倒计时停止
→ 显示"已暂停 剩余XX:XX"
→ 温度显示逐步降低(自然散热)
操作 - 继续:
步骤1:点击"继续"按钮
→ 通过蓝牙发送继续指令
→ 设备:灸头回到施灸位置
→ 设备:恢复计时
→ APP状态更新:"正在艾灸"
→ 按钮切换:显示"暂停"按钮
操作 - 结束:
步骤1:点击"结束"按钮
→ 弹出二次确认弹窗
→ "确定结束本次艾灸?"
→ 按钮:"取消" / "确定结束"(红色)
步骤2:确认结束
→ 通过蓝牙发送结束指令
→ 设备:灸头归位,停止加热
→ APP显示"艾灸已完成"
→ 上报使用记录到后台
→ 3秒后自动返回设备详情页(待机状态)
步骤3:取消结束
→ 关闭弹窗,继续艾灸
温度监控流程:
实时上报:
→ 设备每2秒上报一次温度数据
→ APP更新温度显示
→ 温度曲线可查看(可选功能)
超温保护:
→ 温度超过安全阈值
→ 设备自动切换为"雀啄灸"手法(快速提插,避免持续高温)
→ APP显示:"温度过高,已自动切换手法防止灼伤"
→ 温度回落后恢复正常手法
极端超温:
→ 温度持续超限
→ 设备自动暂停
→ APP显示警告:"温度异常,艾灸已自动暂停,请检查"
正常完成流程:
步骤1:最后一个穴位施灸完成
→ 设备发送完成信号
→ 蓝牙上报完成状态
步骤2:APP显示
→ "艾灸已完成"
→ 显示本次艾灸摘要:
- 施灸穴位列表
- 总时长
- 平均温度
→ 播放完成提示音
步骤3:数据上报
→ 自动上报使用记录到后台
→ 参数:用户ID/时间/功效/穴位/时长/温度
步骤4:3秒后自动返回设备详情页(待机状态)
| 中断原因 | 处理方式 | 用户提示 |
|---|---|---|
| 蓝牙断开 | 自动重连(3次),失败后暂停艾灸 | "蓝牙连接断开,正在尝试重连..." |
| APP被杀掉 | 设备继续执行(独立运行) | 下次打开APP恢复状态 |
| 设备断电 | 艾灸终止 | "设备已断电" |
| 检测到异物 | 设备自动暂停 | "检测到有异物,已暂停艾灸,清理后重试" |
| 艾材用完 | 设备自动暂停 | "艾材已用完,艾灸已暂停" |
| 多手机操控 | 当前操控权被抢占 | "当前设备正在被其他手机操控" |
页面布局:
+----------------------------------+
| < 我的方案 |
+----------------------------------+
| |
| +---------------------------+ |
| | 一套针对颈椎的艾灸方案 | |
| | 王凤娇 | |
| | [使用] | |
| +---------------------------+ |
| |
| +---------------------------+ |
| | 艾灸方案二 | |
| | [使用] | |
| +---------------------------+ |
| |
| +---------------------------+ |
| | 艾灸方案三 | |
| | [使用] | |
| +---------------------------+ |
| |
| [更多方案] |
+----------------------------------+
操作流程 - 查看列表:
步骤1:从设备详情页点击"我的方案"
→ 进入方案列表页
→ 调用接口获取当前用户的方案列表
→ 按创建时间倒序排列
→ 显示loading → 显示列表
步骤2:方案操作
→ 点击方案卡片:进入方案详情
→ 点击"使用"按钮:直接应用该方案开始艾灸
→ 左滑方案卡片:显示"删除"按钮
操作流程 - 删除方案:
步骤1:左滑方案卡片
→ 显示红色"删除"按钮
步骤2:点击删除
→ 弹出确认:"确定删除方案XXX?"
→ 取消:关闭弹窗
→ 确认:调用删除接口
→ 成功:移除卡片,Toast"删除成功"
→ 失败:Toast"删除失败"
页面布局:
+----------------------------------+
| < 方案详情 |
+----------------------------------+
| |
| 方案名称:一套针对颈椎的艾灸方案 |
| 作者:王凤娇 |
| |
| 艾灸穴位: |
| 1. 大椎穴 - 15分钟 - 40℃ |
| 2. 风池穴 - 10分钟 - 42℃ |
| 3. 肩井穴 - 10分钟 - 40℃ |
| |
| 总时长:35分钟 |
| |
| [编辑方案] [立即使用] |
+----------------------------------+
操作 - 立即使用:
步骤1:点击"立即使用"
→ 弹窗确认"使用该方案开始艾灸?"
→ 确认:进入艾灸预热流程
→ 取消:关闭弹窗
操作流程:
步骤1:在发现页浏览公用方案
→ 进入方案详情页
→ 显示"添加到我的方案"按钮
步骤2:点击"添加到我的方案"
→ 弹窗:"确认添加到我的方案?"
→ 按钮:"取消" / "确认"
步骤3:点击确认
→ 调用后台接口:复制方案到个人方案(深拷贝)
→ 成功:Toast"已添加到我的方案"
→ 失败:提示错误
权限控制:
→ 公用方案:所有用户可见,可复制到个人方案
→ 个人方案:仅本人可见
→ 定向方案:仅指定用户可见
操作流程:
步骤1:切换用户
→ 进入用户管理页
→ 选择另一个用户
步骤2:方案自动切换
→ 刷新方案列表
→ 显示当前用户的方案
→ 不同用户的方案完全隔离
步骤3:方案同步到设备
→ 选择方案后点击"同步到设备"
→ 蓝牙发送方案数据包到设备
→ 设备本地存储该方案
→ 后续可通过指纹直接调用
网络正常时:
→ 方案列表从服务器获取
→ 同时缓存到本地数据库
网络异常时:
→ 从本地数据库读取方案列表
→ 可查看已保存的方案
→ 已同步到设备的方案可直接通过蓝牙使用
→ 无需网络即可完成艾灸
蓝牙直连模式:
→ 无需网络
→ 直接使用已同步到设备的方案
→ 通过指纹识别调用用户方案
页面布局:
+----------------------------------+
| [LOGO] |
+----------------------------------+
| [======== Banner轮播 ========] |
| 源自天然古法精髓 |
| 手工艾灸,延传养生之道 |
+----------------------------------+
| 热灸推荐 |
| +---------------------------+ |
| | [图] 颈腰同治-督脉艾灸方案 | |
| | 缓解颈椎僵硬与腰椎酸痛 | |
| | 45分钟 | |
| +---------------------------+ |
| +---------------------------+ |
| | [图] 通络强背-脊柱养护方案 | |
| | 改善胸背疼痛与脊柱侧弯 | |
| | 60分钟 | |
| +---------------------------+ |
+----------------------------------+
| 灸研室 [更多] |
| +---------+ +---------+ |
| |[图]方案1| |[图]方案2| |
| +---------+ +---------+ |
| +---------+ +---------+ |
| |[图]方案3| |[图]方案4| |
| +---------+ +---------+ |
+----------------------------------+
| [首页] [发现] [健康] [我的] |
+----------------------------------+
操作流程 - 浏览首页:
步骤1:点击底部Tab"发现"
→ 加载发现页数据
→ Banner轮播自动播放(每3秒切换)
→ 显示热灸推荐列表
→ 显示灸研室方案网格
步骤2:Banner操作
→ 左右滑动切换
→ 点击Banner进入对应详情页
步骤3:热灸推荐
→ 上下滑动浏览
→ 点击方案卡片进入方案详情
步骤4:灸研室
→ 点击"更多"进入专家方案列表
→ 点击方案卡片进入方案详情
错误提示:
| 场景 | 错误提示 |
|---|---|
| 数据加载失败 | "内容加载失败,下拉刷新试试" |
| Banner加载失败 | 显示默认占位图 |
| 图片加载失败 | 显示默认占位图 |
页面布局:
+----------------------------------+
| < 专家方案 |
+----------------------------------+
| |
| +--------+ +--------+ |
| |[图] | |[图] | |
| |方案一名| |方案二名| |
| |简介... | |简介... | |
| +--------+ +--------+ |
| |
| +--------+ +--------+ |
| |[图] | |[图] | |
| |方案三名| |方案四名| |
| |简介... | |简介... | |
| +--------+ +--------+ |
+----------------------------------+
操作流程:
步骤1:从发现页点击"更多"进入
→ 调用接口获取专家方案列表
→ 2列网格布局展示
步骤2:浏览方案
→ 上下滑动浏览
→ 上拉加载更多(分页加载)
→ 下拉刷新
步骤3:点击方案卡片
→ 进入方案详情页
页面布局:
+----------------------------------+
| < 分享 |
| [========= 方案大图 =========] |
+----------------------------------+
| 一套针对颈椎的艾灸方案 |
| 王凤娇 |
| [立即体验] |
+----------------------------------+
| 简介 |
| 通过艾灸特定穴位,缓解颈椎病症状...|
| [展开] |
+----------------------------------+
| 艾灸穴位 |
| 1. 风池穴 |
| • 定位:枕骨下方,胸锁乳突肌与 |
| 斜方肌上端之间的凹陷处 |
| • 作用:疏风散寒,缓解头痛、颈痛 |
| 2. 大椎穴 |
| • 定位:第七颈椎棘突下凹陷中 |
| • 作用:通阳解表,缓解颈肩疼痛 |
| ... |
+----------------------------------+
| 适用人群 |
| • 颈椎病患者 |
| • 长期伏案工作者 |
| • 颈部肌肉紧张者 |
+----------------------------------+
| 注意事项 |
| 1. 保暖:艾灸后避免受风受寒 |
| 2. 时间控制:每次艾灸时间不宜过长 |
| 3. 皮肤保护:艾灸前可在皮肤上涂 |
| 少量凡士林,防止灼伤 |
+----------------------------------+
操作流程:
步骤1:浏览方案详情
→ 上下滚动查看完整内容
→ 简介区域默认折叠,点击"展开"查看全部
步骤2:点击"立即体验"
→ 判断登录状态
→ 未登录:跳转登录页
→ 已登录:弹窗"确认添加到我的方案?"
→ 点击"确认"
→ 调用方案复制接口(深拷贝)
→ 成功:Toast"已添加到我的方案"
→ 可跳转"我的方案"或留在当前页
→ 点击"取消":关闭弹窗
步骤3:点击"分享"
→ 唤起系统分享面板
→ 可分享给微信好友/朋友圈
页面布局:
+----------------------------------+
| 推荐 |
+----------------------------------+
| +--------+ +--------+ |
| |[图] | |[图] | |
| |文章标题| |文章标题| |
| |官方 12-21| |官方 12-20| |
| +--------+ +--------+ |
| +--------+ +--------+ |
| |[图] | |[图] | |
| |文章标题| |文章标题| |
| |官方 12-19| |官方 12-18| |
| +--------+ +--------+ |
+----------------------------------+
| [首页] [发现] [健康] [我的] |
+----------------------------------+
操作流程:
步骤1:点击底部Tab"健康"
→ 加载推荐文章列表
→ 2列网格布局
步骤2:浏览文章
→ 上下滑动
→ 下拉刷新
→ 上拉加载更多
步骤3:点击文章卡片
→ 进入文章详情页
页面布局:
+----------------------------------+
| < 详情 |
+----------------------------------+
| |
| [========= 文章配图 =========] |
| |
| 灸后调养做好这三点,效果会更好! |
| |
| 2024-12-21 研年健康贴士 |
| |
| -------------------------------- |
| |
| 关注艾灸后调养的三个要素:休息... |
| |
| 1. 灸后休息有保障。 |
| 艾灸后,尤其是重灸后对机体来说是 |
| 一个较强的刺激... |
| |
| 2. 灸后锻炼要适度。 |
| "生命在于运动",任何疗法也代替不 |
| 了运动。但是... |
| |
| [展开全文] |
+----------------------------------+
操作流程:
步骤1:进入文章详情
→ 加载文章内容(富文本渲染)
→ 图片懒加载
步骤2:阅读文章
→ 上下滚动
→ 长文默认折叠,点击"展开全文"
→ 展开后可继续阅读
步骤3:返回
→ 点击返回按钮
→ 回到推荐列表(保持浏览位置)
错误提示:
| 场景 | 错误提示 |
|---|---|
| 文章加载失败 | "文章加载失败,请重试" |
| 图片加载失败 | 显示默认占位图 |
页面布局:
+----------------------------------+
| < 消息中心 |
+----------------------------------+
| [全部] [系统通知] [方案推送] |
+----------------------------------+
| [头像] 系统消息 |
| 向您推荐了新的艾灸方案 |
| 2025-03-27 21:37 |
| [●未读] |
+----------------------------------+
| [头像] 孙佳敏 |
| 向您推荐了新的艾灸方案 |
| 2025-03-26 22:36 |
| |
+----------------------------------+
| [头像] 钱博雯 |
| 向您推荐了新的艾灸方案 |
| 2025-03-26 00:57 |
| |
+----------------------------------+
操作流程 - 查看消息:
步骤1:进入消息中心
→ 从个人中心点击"系统消息"进入
→ 默认显示"全部"Tab
→ 调用接口获取消息列表
→ 显示未读消息红点
步骤2:筛选消息
→ 点击Tab切换:全部/系统通知/方案推送
→ 切换时刷新列表
步骤3:点击消息
→ 标记为已读(红点消失)
→ 调用已读接口
→ 根据消息类型跳转:
- 方案推送:跳转到对应方案详情
- 系统通知:显示通知详情
步骤4:下拉刷新
→ 刷新消息列表
→ 同步未读消息数
操作流程 - 未读消息处理:
APP启动时:
→ 调用接口查询未读消息数量
→ 数量>0:在个人中心"系统消息"项显示红点+数字
→ 数量=0:不显示红点
收到推送时:
→ 显示系统通知栏推送
→ APP内未读数+1
→ 如果APP在前台,显示Toast提示
错误提示:
| 场景 | 错误提示 |
|---|---|
| 消息加载失败 | "消息加载失败,请重试" |
| 标记已读失败 | 本地先标记,后台异步同步 |
页面布局:
+----------------------------------+
| |
| 15066998888 |
| 这是简介 |
| [圆形头像] |
| |
+----------------------------------+
| ⭐ 个性化方案 > |
+----------------------------------+
| 🔔 系统消息 > |
+----------------------------------+
| ⬆️ 版本升级 > |
+----------------------------------+
| ❓ 帮助 > |
+----------------------------------+
| 📋 使用记录 > |
+----------------------------------+
| ⬅️ 退出登录 > |
+----------------------------------+
| [首页] [发现] [健康] [我的] |
+----------------------------------+
操作流程:
步骤1:点击"个性化方案"
→ 跳转到"我的方案"列表页
→ 同13.1方案列表操作
操作流程:
步骤1:点击"系统消息"
→ 跳转到消息中心页
→ 同16.1消息列表操作
→ 进入后自动标记该类消息为已读
页面布局:
+----------------------------------+
| < 版本信息 |
+----------------------------------+
| |
| [APP图标] |
| |
| 研年健康平台 |
| V1.0 |
| |
| +------------------------------+ |
| | 检查更新 | |
| +------------------------------+ |
+----------------------------------+
操作流程 - 检查更新:
步骤1:点击"检查更新"
→ 按钮变为loading
→ 调用版本检测接口
参数:当前平台(iOS/Android/HarmonyOS)、当前版本号
返回:是否有更新、最新版本号、下载URL、更新类型
步骤2:处理检查结果
情况A:已是最新版
→ 提示"当前已是最新版本"
情况B:可选更新
→ 弹窗:
标题:"发现新版本 VX.X.X"
内容:更新文案
按钮:"暂不更新" / "立即更新"
→ 点击"立即更新":跳转应用商店/下载URL
情况C:强制更新
→ 弹窗(不可关闭):
标题:"重要更新"
内容:"当前版本已不可用,请更新到最新版本"
按钮:"立即更新"(唯一选项)
→ 点击后跳转应用商店
→ 不更新则无法继续使用APP
步骤3:更新下载
→ 显示下载进度
→ 下载完成后自动安装(或提示安装)
详细错误提示:
| 场景 | 错误提示 |
|---|---|
| 检查更新失败 | "检查更新失败,请检查网络" |
| 下载失败 | "下载失败,请重试" |
| 安装失败 | "安装失败,请手动安装" |
页面布局 - FAQ列表:
+----------------------------------+
| < 全部问题 |
+----------------------------------+
| 常见问题 |
| |
| 1. 如何注销 > |
+----------------------------------+
| 2. 如何删除设备 > |
+----------------------------------+
| 3. 如何关闭消息推送 > |
+----------------------------------+
| 4. 搜索不到蓝牙 > |
+----------------------------------+
| 5. 连不上设备 > |
+----------------------------------+
页面布局 - 问题详情:
+----------------------------------+
| < 问题解答 |
+----------------------------------+
| 连不上设备 |
| |
| 1. 检查设备是否接通电源 |
| 2. 确认设备是否收到过外力碰撞, |
| 若有可能已损坏,可联系售后 |
| 维修,售后电话400-000-0000 |
| 3. 检查手机蓝牙是否开启 |
| 4. 确保设备在10米范围内 |
| 5. 尝试重启设备和手机蓝牙 |
+----------------------------------+
操作流程:
步骤1:点击"帮助"
→ 进入FAQ列表页
步骤2:点击问题项
→ 进入问题详情页
→ 显示完整的解答内容
步骤3:返回
→ 点击返回回到列表页
FAQ内容清单:
| 序号 | 问题 | 答案要点 |
|---|---|---|
| 1 | 如何注销 | 个人中心→退出登录 |
| 2 | 如何删除设备 | 首页→长按设备卡片→删除,或进入设备详情解除绑定 |
| 3 | 如何关闭消息推送 | 手机系统设置→通知管理→研年健康→关闭推送 |
| 4 | 搜索不到蓝牙 | 检查蓝牙开启、设备电源、距离10米内、设备未被他手机连接 |
| 5 | 连不上设备 | 检查电源、重启设备、重启蓝牙、确认设备未被占用 |
页面布局:
+----------------------------------+
| < 使用记录 |
+----------------------------------+
| 2025年3月 |
+----------------------------------+
| 我的艾灸椅 |
| 操作记录 |
| 2025-03-31 13:37 |
+----------------------------------+
| 我的艾灸椅 |
| 操作记录 |
| 2025-03-31 05:11 |
+----------------------------------+
| 我的艾灸椅 |
| 操作记录 |
| 2025-03-30 17:23 |
+----------------------------------+
操作流程:
步骤1:点击"使用记录"
→ 进入使用记录页
→ 调用接口获取历史记录
→ 按时间倒序排列
→ 按月分组显示
步骤2:浏览记录
→ 上下滑动
→ 上拉加载更多(分页)
→ 下拉刷新
步骤3:点击记录项
→ 进入记录详情页(可选)
→ 显示:设备/时间/功效/穴位/时长/温度
错误提示:
| 场景 | 错误提示 |
|---|---|
| 记录加载失败 | "加载失败,请重试" |
| 暂无记录 | "暂无使用记录"(空状态) |
操作流程:
步骤1:点击"退出登录"
→ 底部弹出确认面板
→ 标题:"确定退出登录?"
→ 按钮:"取消" / "退出登录"(红色)
步骤2:点击"取消"
→ 关闭面板,留在当前页
步骤3:点击"退出登录"
→ 清除本地Token
→ 清除本地用户信息(保留设备绑定信息)
→ 跳转到登录页
→ 下次需重新登录
详细错误提示:
| 场景 | 错误提示 |
|---|---|
| 退出时网络异常 | 本地清除数据,不影响退出 |
| 清除数据失败 | 强制清除,跳转到登录页 |
操作流程:
触发时机:
1. APP冷启动时(一天内只检查一次)
2. 用户手动点击"检查更新"
步骤1:调用版本检测接口
→ 参数:平台类型、当前版本号
→ 返回:最新版本信息
步骤2:版本对比
→ 当前版本 < 最新版本:提示更新
→ 当前版本 = 最新版本:不提示
→ 当前版本 > 最新版本:不提示(可能是测试版)
步骤3:更新策略
→ 强制更新:阻断使用,必须更新
→ 可选更新:用户可选择不更新
→ 静默更新:后台下载,下次启动生效
后台支持配置的字段:
| 字段 | 说明 |
|---|---|
| 平台 | iOS / Android / HarmonyOS |
| 版本号 | 如 1.0.0 |
| 更新类型 | 强制更新 / 可选更新 / 静默更新 |
| 下载地址 | App Store链接 或 APK下载URL |
| 更新文案 | 显示给用户看的更新说明 |
| 最低支持版本 | 低于此版本必须更新 |
[未初始化] --openAdapter--> [已初始化]
[已初始化] --startScan--> [扫描中]
[扫描中] --foundDevice--> [发现设备]
[发现设备] --connect--> [连接中]
[连接中] --success--> [已连接]
[连接中] --fail--> [连接失败]
[连接失败] --retry--> [连接中]
[已连接] --disconnect--> [已断开]
[已断开] --autoReconnect--> [连接中]
[已连接] --switchDevice--> [连接中]
连接流程:
步骤1:初始化蓝牙适配器
→ uni.openBluetoothAdapter()
→ 成功:进入步骤2
→ 失败:提示用户开启蓝牙
步骤2:开始搜索设备
→ uni.startBluetoothDevicesDiscovery()
→ 设置allowDuplicatesKey: false
→ 设置interval: 1000
步骤3:监听发现设备
→ uni.onBluetoothDeviceFound()
→ 过滤设备名称(包含"艾灸椅"或指定UUID)
→ 收集设备列表
步骤4:停止搜索
→ uni.stopBluetoothDevicesDiscovery()
→ 30秒超时自动停止
步骤5:连接设备
→ uni.createBLEConnection()
→ 设置timeout: 10000
→ 成功:进入步骤6
→ 失败:提示重试
步骤6:发现服务
→ uni.getBLEDeviceServices()
→ 找到指定Service UUID
步骤7:发现特征值
→ uni.getBLEDeviceCharacteristics()
→ 找到:
- 写特征值(APP→设备指令)
- 读/通知特征值(设备→APP状态)
步骤8:开启通知
→ uni.notifyBLECharacteristicValueChange()
→ 监听设备主动上报
步骤9:监听数据
→ uni.onBLECharacteristicValueChange()
→ 解析设备上报数据,更新UI
连接管理类:
| 指令 | 命令字 | 说明 |
|---|---|---|
| 设备发现 | 0x01 | 搜索附近艾灸椅 |
| 建立连接 | 0x02 | 与指定设备建立BLE连接 |
| 断开连接 | 0x03 | 主动断开连接 |
| 心跳保活 | 0x04 | 维持连接状态 |
| 操控权请求 | 0x05 | 请求设备操控权 |
| 操控权释放 | 0x06 | 释放设备操控权 |
艾灸控制类:
| 指令 | 命令字 | 说明 |
|---|---|---|
| 一键启动 | 0x10 | 参数:用户ID/指纹ID/方案ID |
| 开始艾灸 | 0x11 | 启动当前方案 |
| 暂停艾灸 | 0x12 | 灸头后退2cm,暂停计时 |
| 继续艾灸 | 0x13 | 恢复施灸和计时 |
| 结束艾灸 | 0x14 | 灸头归位,停止加热 |
| 下发灸方 | 0x15 | 发送完整艾灸工艺数据包 |
参数控制类:
| 指令 | 命令字 | 说明 |
|---|---|---|
| 座椅角度 | 0x20 | 参数:目标角度(90-150) |
| 音量控制 | 0x21 | 参数:音量百分比(0-100) |
| 音效选择 | 0x22 | 参数:音效编号(1-8) |
| 音效播放控制 | 0x23 | 参数:播放/暂停/停止 |
| 温度设置 | 0x24 | 参数:目标温度(38-44) |
数据采集类:
| 指令 | 命令字 | 说明 |
|---|---|---|
| 读取艾材余量 | 0x30 | 返回剩余数量 |
| 读取废料舱状态 | 0x31 | 返回容量百分比 |
| 读取滤芯状态 | 0x32 | 返回寿命百分比 |
| 读取温度 | 0x33 | 返回当前温度 |
| 读取执行进度 | 0x34 | 返回当前穴位/剩余时长/手法 |
| 读取设备状态 | 0x35 | 返回设备整体状态 |
用户管理类:
| 指令 | 命令字 | 说明 |
|---|---|---|
| 指纹录入 | 0x40 | 启动设备指纹采集 |
| 指纹查询 | 0x41 | 查询已绑定指纹列表 |
| 方案同步 | 0x42 | 将方案同步到设备本地 |
| 方案查询 | 0x43 | 查询设备已存储的方案 |
设备状态周期性上报(每2秒):
数据格式:
[当前穴位编号: 2B]
[剩余时长(秒): 2B]
[当前温度(℃): 1B]
[当前手法: 1B] (0=悬定灸, 1=雀啄灸, 2=回旋灸)
[设备状态: 1B] (0=待机, 1=预热, 2=运行, 3=暂停, 4=完成, 5=异常)
[错误码: 1B] (0=无错误, 1=艾材不足, 2=废料满, 3=超温, 4=异物)
[艾材余量: 1B]
[废料舱百分比: 1B]
[滤芯百分比: 1B]
[预热进度: 1B] (0-100, 非预热时为0)
[座椅当前角度: 1B]
艾灸工艺数据包格式:
[包头: 0xAA 0x55] (2B固定)
[命令字: 0x15] (1B)
[数据长度: 2B]
[穴位数量: 1B] (1-3)
[
[穴位编号: 2B]
[施灸时长(秒): 2B]
[施灸温度: 1B]
[施灸手法: 1B]
] × 穴位数量
[校验和: 1B]
| 错误码 | 说明 | 处理方式 |
|---|---|---|
| 10000 | 未初始化蓝牙适配器 | 重新初始化 |
| 10001 | 当前蓝牙适配器不可用 | 提示开启蓝牙 |
| 10002 | 没有找到指定设备 | 重新搜索 |
| 10003 | 连接失败 | 重试连接 |
| 10004 | 没有找到指定服务 | 设备不兼容 |
| 10005 | 没有找到指定特征值 | 设备固件异常 |
| 10006 | 当前连接已断开 | 自动重连 |
| 10007 | 当前特征值不支持此操作 | 设备版本过低 |
| 10008 | 其余所有系统上报的异常 | 通用提示 |
| 10009 | Android系统特有,系统版本低于4.3不支持BLE | 提示升级系统 |
POST /api/auth/send-sms
请求参数:
phone: string (必填, 11位手机号)
响应:
code: 200成功
message: "验证码已发送"
错误:
400: 手机号格式错误
429: 发送过于频繁
500: 服务器内部错误
POST /api/auth/verify-login
请求参数:
phone: string (必填)
code: string (必填, 6位验证码)
platform: string (ios/android/harmonyos)
deviceId: string (设备唯一标识)
响应:
token: string (长期有效)
userId: string
isNewUser: boolean
userInfo: object
错误:
400: 验证码错误或已过期
429: 验证次数过多
POST /api/auth/third-party-login
请求参数:
type: string (wechat/apple)
authCode: string
platform: string
响应:同verify-login
POST /api/user/profile
请求参数:
name: string (1-20字符)
gender: number (0=女, 1=男)
age: number (1-120)
height: number (50-250, cm)
weight: number (10-300, kg)
响应:userInfo对象
GET /api/user/list
响应:
users: array [{id, name, gender, age, height, weight, bodyData}]
maxCount: 10
POST /api/user
请求参数:同profile
响应:新建的用户对象
错误:
409: 用户数量已达上限(10人)
PUT /api/user/{id}
请求参数:同profile
响应:更新后的用户对象
DELETE /api/user/{id}
响应:204 No Content
错误:
400: 不能删除最后一个用户
404: 用户不存在
POST /api/user/body-data
请求参数:
userId: string
shoulderHeight: number (肩高, cm)
shoulderWidth: number (肩宽, cm)
weight: number (kg)
响应:
success: true
acupoints: object (穴位坐标计算结果)
GET /api/user/devices
响应:
devices: array [{
id, name, macAddress,
connectStatus, lastConnectTime,
materialCount, wasteLevel, filterLevel
}]
POST /api/user/devices/bind
请求参数:
deviceName: string
macAddress: string
model: string
响应:绑定的设备对象
错误:
409: 设备已被其他账号绑定
409: 绑定数量已达上限(5台)
DELETE /api/user/devices/{id}
响应:204
POST /api/user/devices/switch
请求参数:
deviceId: string
响应:当前设备对象
POST /api/algorithm/acupoint-calculate
请求参数:
userId: string
bodyData: {
shoulderHeight: number
shoulderWidth: number
weight: number
}
响应:
acupoints: array [{
code: string (穴位编码)
name: string (穴位名称)
x: number (X坐标, mm)
y: number (Y坐标, mm)
z: number (Z坐标, mm)
}]
POST /api/algorithm/moxa-plan
请求参数:
userId: string
efficacy: string (作用类型)
acupoints: array (穴位坐标)
响应:
plan: {
name: string
totalDuration: number (总时长, 秒)
acupoints: array [{
code, name, duration, temperature, technique
}]
}
GET /api/plan/list
请求参数:
userId: string (可选, 不传则查询公用方案)
type: string (personal/public/directed)
page: number
pageSize: number
响应:
total: number
list: array [{
id, name, author, type,
totalDuration, acupointCount,
acupoints: array,
createTime
}]
GET /api/plan/{id}
响应:方案详情对象
POST /api/plan/save
请求参数:
userId: string
name: string (1-30字符)
acupoints: array [{
code, duration, temperature, technique, order
}]
totalDuration: number
响应:保存的方案对象
POST /api/plan/copy
请求参数:
planId: string
userId: string
响应:复制的方案对象
错误:
403: 无权复制该方案
404: 方案不存在
DELETE /api/plan/{id}
错误:
403: 无权删除(非本人方案)
409: 方案正在执行中
GET /api/acupoint/list
响应:
acupoints: array [{
code, name,
location: string (定位描述)
effect: string (作用描述)
defaultX, defaultY, defaultZ
}]
GET /api/message/list
请求参数:
type: string (all/system/plan)
page: number
pageSize: number
响应:
total: number
unreadCount: number
list: array [{
id, type, title, content,
sender, sendTime, isRead,
relatedId, relatedType
}]
POST /api/message/read
请求参数:
messageIds: array
响应:更新的消息列表
GET /api/message/unread-count
响应:{ count: number }
GET /api/version/check
请求参数:
platform: string
currentVersion: string
响应:
hasUpdate: boolean
isForce: boolean
latestVersion: string
downloadUrl: string
updateLog: string
minSupportedVersion: string
POST /api/record/report
请求参数:
userId: string
deviceId: string
planId: string (可选)
efficacy: string (可选)
acupoints: array
totalDuration: number
avgTemperature: number
startTime: timestamp
endTime: timestamp
响应:{ id: string }
GET /api/record/list
请求参数:
userId: string
startDate: string
endDate: string
page: number
pageSize: number
响应:
total: number
list: array [{
id, deviceName, planName,
efficacy, acupoints, totalDuration,
avgTemperature, startTime, endTime
}]
GET /api/recommend/hot
请求参数:
userId: string (可选)
season: string (可选, 春夏秋冬)
响应:推荐方案列表
GET /api/recommend/personal
请求参数:
userId: string (必填)
响应:
basedOn: string (推荐理由)
plans: array
GET /api/article/list
请求参数:
category: string
page: number
pageSize: number
响应:文章列表
GET /api/article/{id}
响应:文章详情
POST /api/push/bind-token
请求参数:
platform: string
pushToken: string
deviceId: string
响应:{ success: true }
| 错误码 | 错误描述 | 用户提示 | 处理方式 |
|---|---|---|---|
| 200 | 成功 | - | 正常流程 |
| 400 | 请求参数错误 | "请求参数有误,请检查后重试" | 检查表单 |
| 401 | 未授权/Token失效 | "登录已过期,请重新登录" | 跳转登录页 |
| 403 | 无权访问 | "无权进行此操作" | 阻止操作 |
| 404 | 资源不存在 | "请求的内容不存在" | 返回上一页 |
| 409 | 资源冲突 | "操作冲突,请刷新后重试" | 刷新页面 |
| 429 | 请求过于频繁 | "操作过于频繁,请稍后再试" | 延迟重试 |
| 500 | 服务器内部错误 | "服务器繁忙,请稍后再试" | 重试 |
| 502 | 网关错误 | "网络连接不稳定,请重试" | 重试 |
| 503 | 服务不可用 | "服务暂时不可用" | 稍后重试 |
| 504 | 网关超时 | "请求超时,请检查网络" | 重试 |
| 错误码 | 场景 | 用户提示 |
|---|---|---|
| 1001 | 手机号格式错误 | "请输入正确的11位手机号" |
| 1002 | 验证码错误 | "验证码错误,请重新输入" |
| 1003 | 验证码过期 | "验证码已过期,请重新获取" |
| 1004 | 发送验证码过于频繁 | "发送过于频繁,请{seconds}秒后重试" |
| 1005 | 用户数量已达上限 | "最多可添加10个用户" |
| 1006 | 不能删除最后一个用户 | "至少保留一个用户" |
| 1007 | 设备绑定数量已达上限 | "每个账号最多绑定5台设备" |
| 1008 | 设备已被其他账号绑定 | "该设备已被其他账号绑定" |
| 1009 | 方案穴位数超限 | "单次最多可选择3个穴位" |
| 1010 | 方案总时长超限 | "总时长不超过30分钟" |
| 1011 | 艾材不足 | "艾材不足,无法启动艾灸" |
| 1012 | 废料舱已满 | "废料舱已满,无法启动艾灸" |
| 1013 | 设备正在被操控 | "当前设备正在被其他手机操控" |
| 1014 | 蓝牙未连接 | "设备未连接,请连接后重试" |
| 1015 | 方案正在执行中 | "该方案正在执行,无法删除" |
| 1016 | 无权操作此方案 | "无权操作此方案" |
| 1017 | 体形数据不完整 | "请先完善体形信息" |
| 1018 | 预热超时 | "预热超时,请检查设备后重试" |
| 场景 | 用户提示 | 处理方式 |
|---|---|---|
| 无网络连接 | "网络连接失败,请检查网络设置" | 提供设置入口 |
| 网络超时 | "网络请求超时,请重试" | 提供重试按钮 |
| 网络不稳定 | "网络不稳定,请稍后再试" | 自动重试1次 |
| 服务器维护 | "系统维护中,请稍后再试" | 显示维护页面 |
| DNS解析失败 | "网络连接异常,请检查网络" | 重试 |
| SSL证书错误 | "网络安全验证失败" | 提示安全风险 |
| 错误码 | 触发条件 | 提示方式 | 提示文案 |
|---|---|---|---|
| D001 | 艾材余量=3 | Toast | "艾材余量不足,剩余3个,请及时补充" |
| D002 | 艾材余量=1 | 弹窗 | "艾材即将用完,只剩1个,建议补充后再使用" |
| D003 | 艾材余量=0 | 弹窗+禁用 | "艾材已用完,无法启动艾灸,请补充艾材" |
| D004 | 废料舱=80% | Toast | "废料舱即将满仓,请及时清理" |
| D005 | 废料舱=100% | 弹窗+禁用 | "废料舱已满,无法启动艾灸,请清理废料舱" |
| D006 | 滤芯=80% | Toast | "滤芯使用寿命即将到期,建议更换" |
| D007 | 滤芯=100% | 弹窗 | "滤芯已到期,请更换滤芯以保证使用效果" |
| D008 | 检测到异物 | 弹窗+暂停 | "检测到有异物,已暂停艾灸,清理后重试" |
| D009 | 无法启动 | 弹窗 | "无法启动设备,请检查艾灸盒状态或是否正确连接" |
| D010 | 耗材ID不符 | 弹窗 | "艾灸耗材ID不符,请检查艾灸盒或尝试重启设备" |
| D011 | 设备断电 | 弹窗 | "设备已断电,艾灸已终止" |
| D012 | 温度超上限 | Toast | "温度过高,已自动切换手法防止灼伤" |
| D013 | 蓝牙断开 | Toast | "蓝牙连接断开,正在尝试重连..." |
| D014 | 操控权冲突 | Toast | "当前设备正在被其他手机操控" |
| D015 | 指纹不匹配 | Toast | "指纹不匹配,请重试" |
| D016 | 预热失败 | 弹窗 | "预热失败,请检查设备后重试" |
| 操作 | 弹窗标题 | 弹窗内容 | 确认按钮 |
|---|---|---|---|
| 删除方案 | 确认删除 | 确定删除方案"XXX"?删除后无法恢复 | 删除(红) |
| 删除用户 | 确认删除 | 确定删除用户"XXX"? | 删除(红) |
| 结束艾灸 | 确认结束 | 确定结束本次艾灸? | 结束(红) |
| 退出登录 | 确认退出 | 确定退出登录? | 退出(红) |
| 解绑设备 | 确认解绑 | 确定解绑设备"XXX"? | 解绑(红) |
| 覆盖保存 | 确认覆盖 | 该名称方案已存在,是否覆盖? | 覆盖 |
| 离开编辑页 | 确认离开 | 当前编辑未保存,确定离开? | 离开(红) |
| 状态 | 显示文案 |
|---|---|
| 蓝牙未连接 | "蓝牙未连接" |
| 蓝牙已连接 | "蓝牙已连接" |
| 蓝牙连接中 | "蓝牙连接中..." |
| 正在预热 | "正在预热 {X}%" |
| 已完成预热 | "已完成预热 100%" |
| 正在艾灸 | "正在艾灸" |
| 已暂停 | "已暂停 剩余{XX:XX}" |
| 等待开始 | "等待开始 {XX:XX}" |
| 艾灸已完成 | "艾灸已完成" |
| 设备异常 | "设备异常:{错误原因}" |
| 加载中 | "加载中..." |
| 数据同步中 | "数据同步中..." |
| 方案保存成功 | "方案保存成功" |
| 方案删除成功 | "方案删除成功" |
| 用户切换成功 | "已切换至用户:{用户名}" |
| 设备添加成功 | "设备添加成功" |
| 设备解绑成功 | "设备解绑成功" |
| 页面ID | 页面名称 | 路径 | 类型 | 需登录 | 需蓝牙 |
|---|---|---|---|---|---|
| P001 | 隐私政策弹窗 | /pages/privacy/popup | 弹窗 | 否 | 否 |
| P002 | 隐私政策详情 | /pages/privacy/detail | 页面 | 否 | 否 |
| P003 | 登录页 | /pages/login/index | 页面 | 否 | 否 |
| P004 | 补充信息 | /pages/user/profile-fill | 页面 | 是 | 否 |
| P005 | 首页-设备列表 | /pages/home/index | Tab页 | 是 | 否 |
| P006 | 添加设备 | /pages/device/add | 页面 | 是 | 是 |
| P007 | 设备详情 | /pages/device/detail | 页面 | 是 | 是 |
| P008 | 用户管理 | /pages/user/list | 页面 | 是 | 否 |
| P009 | 体形录入 | /pages/user/body-data | 页面 | 是 | 否 |
| P010 | 指纹录入 | /pages/user/fingerprint | 页面 | 是 | 是 |
| P011 | 耗材管理 | /pages/device/consumable | 页面 | 是 | 是 |
| P012 | 座椅角度 | /pages/device/seat-angle | 页面 | 是 | 是 |
| P013 | 模式选择 | /pages/moxa/mode-select | 底部弹窗 | 是 | 否 |
| P014 | 功效选择 | /pages/moxa/efficacy-select | 页面 | 是 | 否 |
| P015 | 穴位编辑 | /pages/moxa/acupoint-edit | 页面 | 是 | 否 |
| P016 | 艾灸执行 | /pages/moxa/executing | 页面 | 是 | 是 |
| P017 | 音效选择 | /pages/moxa/sound-select | 底部弹窗 | 是 | 是 |
| P018 | 方案确认 | /pages/moxa/plan-confirm | 弹窗 | 是 | 否 |
| P019 | 预热中 | /pages/moxa/preheating | 页面 | 是 | 是 |
| P020 | 我的方案 | /pages/plan/list | 页面 | 是 | 否 |
| P021 | 方案详情 | /pages/plan/detail | 页面 | 是 | 否 |
| P022 | 发现首页 | /pages/discover/index | Tab页 | 是 | 否 |
| P023 | 专家方案 | /pages/discover/expert | 页面 | 是 | 否 |
| P024 | 方案详情(发现) | /pages/discover/plan-detail | 页面 | 是 | 否 |
| P025 | 健康推荐 | /pages/health/index | Tab页 | 是 | 否 |
| P026 | 文章详情 | /pages/health/article-detail | 页面 | 是 | 否 |
| P027 | 消息中心 | /pages/message/list | 页面 | 是 | 否 |
| P028 | 消息详情 | /pages/message/detail | 页面 | 是 | 否 |
| P029 | 个人中心 | /pages/mine/index | Tab页 | 是 | 否 |
| P030 | 版本信息 | /pages/mine/version | 页面 | 是 | 否 |
| P031 | 帮助中心 | /pages/mine/help | 页面 | 是 | 否 |
| P032 | 问题详情 | /pages/mine/help-detail | 页面 | 是 | 否 |
| P033 | 使用记录 | /pages/mine/records | 页面 | 是 | 否 |
| P034 | 记录详情 | /pages/mine/record-detail | 页面 | 是 | 否 |
页面跳转方式:
- Tab切换:uni.switchTab()
- 普通跳转:uni.navigateTo()
- 重定向(不保留历史):uni.redirectTo()
- 返回:uni.navigateBack()
- 返回Tab页:uni.switchTab()
页面返回规则:
- 普通页面 → navigateBack()
- 需要刷新上一页 → navigateBack() + 上一页onShow刷新
- 跳转到Tab页 → switchTab()
登录拦截:
- 需登录页面:检查Token
- 无Token → 保存当前路径 → 跳转登录页
- 登录成功 → 恢复原路径
| 页面 | 状态保持策略 |
|---|---|
| 设备详情 | 保持蓝牙连接状态,onShow时刷新状态 |
| 艾灸执行 | 后台运行保持连接,返回页面恢复状态显示 |
| 方案编辑 | 页面隐藏时保存草稿,onShow时恢复 |
| 消息列表 | onShow时刷新未读数 |
| 使用记录 | 保持分页位置 |
| 功效 | 推荐穴位 | 默认温度 | 默认手法 |
|---|---|---|---|
| 驱寒 | 大椎、命门、关元 | 42℃ | 悬定灸 |
| 祛风 | 风池、风门、肺俞 | 40℃ | 雀啄灸 |
| 祛湿 | 足三里、阴陵泉、脾俞 | 40℃ | 悬定灸 |
| 化瘀 | 血海、膈俞、肝俞 | 42℃ | 回旋灸 |
| 化痰 | 丰隆、膻中、中脘 | 40℃ | 雀啄灸 |
| 活血 | 心俞、厥阴俞、膻中 | 42℃ | 悬定灸 |
| 扶阳 | 肾俞、命门、腰阳关 | 44℃ | 悬定灸 |
| 养颜 | 百会、四白、迎香 | 38℃ | 雀啄灸 |
| 编号 | 名称 | 时长 | 类型 |
|---|---|---|---|
| 1 | 河流 | 30分钟 | 自然水声 |
| 2 | 夏雨 | 30分钟 | 雨声 |
| 3 | 森林 | 30分钟 | 森林环境 |
| 4 | 鸟鸣 | 30分钟 | 鸟鸣声 |
| 5 | 漂流 | 30分钟 | 流水声 |
| 6 | 雨滴 | 30分钟 | 细雨声 |
| 7 | 炉火 | 30分钟 | 火焰声 |
| 8 | 海浪 | 30分钟 | 海浪声 |
| 温度 | 适用手法 | 说明 |
|---|---|---|
| 38℃ | 雀啄灸 | 温和,适合面部/敏感部位 |
| 40℃ | 悬定灸 | 标准温度,适合大部分穴位 |
| 42℃ | 悬定灸/回旋灸 | 较强刺激,适合背部大穴 |
| 44℃ | 悬定灸 | 强刺激,适合耐受部位 |
| 手法 | 描述 | 适用场景 |
|---|---|---|
| 悬定灸 | 灸头固定于穴位上方不动 | 常规施灸 |
| 雀啄灸 | 灸头快速上下提插 | 防灼伤/敏感部位 |
| 回旋灸 | 灸头在穴位上方画圈 | 大面积温热 |
| 阶段 | 内容 | 建议工期 |
|---|---|---|
| 第一阶段 | 框架搭建 + 登录注册 + 用户管理 | 1周 |
| 第二阶段 | 蓝牙模块 + 设备管理 + 连接绑定 | 1周 |
| 第三阶段 | 艾灸功能(三种模式)+ 穴位编辑 | 1.5周 |
| 第四阶段 | 方案管理 + 发现模块 | 1周 |
| 第五阶段 | 消息中心 + 个人中心 + 版本升级 | 0.5周 |
| 第六阶段 | 联调测试 + 优化修复 | 1周 |
| 合计 | 6周 |