[AI Generated]: feat(*): 新增 lefu 蓝牙服务层、mock 业务数据层及 request 请求封装,接入各页面

This commit is contained in:
17792275749
2026-05-13 16:18:14 +08:00
parent 38d6f0867a
commit 3f12e34afd
18 changed files with 1222 additions and 540 deletions
+46 -103
View File
@@ -1,118 +1,61 @@
import { mockLatestRecord } from '../../mock/home.mock'
import type { WeightRecord } from '../../mock/home.mock'
/** 加载状态机 */
type LoadStatus = 'idle' | 'loading' | 'loaded'
/** 设备信息 */
interface DeviceInfo {
/** 设备名称 */
name: string
/** 蓝牙是否已连接 */
connected: boolean
name: string
connected: boolean
}
/** 最近一次测量记录 */
interface WeightRecord {
/** 体重整数部分 */
weight: number
/** 体重小数部分,含小数点,如 ".20" */
weightDecimal: string
/** 测量时间显示,如 "今日 07:30" */
date: string
/** 与上次相比差值(负=减轻,正=增重) */
diff: number
/** 身高(cm) */
height: number
/** BMI 值 */
bmi: number
/** BMI 评级标签,如 "标准" */
bmiLabel: string
/** 标准体重(kg) */
stdWeight: number
/** 体脂率(%) */
bodyFat: number
/** 体脂肪(kg) */
bodyFatMass: number
/** 基础代谢(kcal) */
bmr: number
}
/**
* 首页
* 状态机:idle → loading → loaded
* loaded 后按 hasData 分为有数据态 / 空态
*/
Page({
data: {
// 加载状态
status: 'idle' as LoadStatus,
data: {
status: 'idle' as LoadStatus,
hasData: false,
device: {
name: '智能体重秤',
connected: false,
} as DeviceInfo,
record: null as WeightRecord | null,
},
// 是否有称重数据
hasData: true,
onLoad() {
this.loadData()
},
// 设备信息
device: {
name: '智能体重秤 Pro',
connected: true
} as DeviceInfo,
onReady() {},
onShow() {},
onHide() {},
onUnload() {},
onPullDownRefresh() {},
onReachBottom() {},
// 最近一次测量记录(hasData=true 时有效)
record: {
weight: 68,
weightDecimal: '.20',
date: '今日 07:30',
diff: -0.3,
height: 176,
bmi: 22.4,
bmiLabel: '标准',
stdWeight: 67.2,
bodyFat: 22.3,
bodyFatMass: 52.1,
bmr: 1652
} as WeightRecord
},
onShareAppMessage(): WechatMiniprogram.Page.ICustomShareContent {
return {}
},
onLoad() {
// idle 起步,通过统一入口触发加载
this.loadData()
},
/** 加载首页数据(当前使用 mock,后续替换为真实接口) */
loadData() {
this.setData({ status: 'loading' })
// 模拟异步加载
setTimeout(() => {
this.setData({
status: 'loaded',
hasData: true,
record: mockLatestRecord,
})
}, 300)
},
onReady() {},
/** 跳转历史数据页 */
onTapHistory() {
wx.switchTab({ url: '/pages/data/data' })
},
onShow() {},
onHide() {},
onUnload() {},
onPullDownRefresh() {},
onReachBottom() {},
onShareAppMessage(opts): WechatMiniprogram.Page.ICustomShareContent {
console.log(opts.target)
return {}
},
/**
* 加载首页数据(后续接入真实接口)
*/
loadData() {
this.setData({ status: 'loading' })
// TODO: 后续接入真实接口,当前使用 mock
this.setData({ status: 'loaded' })
},
/**
* 跳转数据页查看历史
*/
onTapHistory() {
wx.switchTab({ url: '/pages/data/data' })
},
/**
* 切换设备(后续接入设备选择浮层)
*/
onTapSwitchDevice() {
// TODO: 接入设备选择浮层
wx.showToast({ title: '切换设备', icon: 'none' })
}
/** 切换设备 */
onTapSwitchDevice() {
wx.showToast({ title: '切换设备', icon: 'none' })
},
})