From 24d0ebec2384485c8e29403c98dcb4dd298b80f2 Mon Sep 17 00:00:00 2001 From: 17792275749 <812100002@qq.com> Date: Fri, 15 May 2026 15:40:33 +0800 Subject: [PATCH] =?UTF-8?q?[AI=20Generated]:=20feat(*):=20=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E6=95=B0=E6=8D=AE=E9=A1=B5=E5=88=87=E6=8D=A2=E6=88=90?= =?UTF-8?q?=E5=91=98=E3=80=81=E9=A6=96=E9=A1=B5=E6=8E=A5=E5=8F=A3=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E5=8F=8A=E6=88=91=E7=9A=84=E9=A1=B5=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- miniprogram/mock/data.mock.ts | 69 ------------------- miniprogram/mock/home.mock.ts | 40 ----------- miniprogram/mock/member.mock.ts | 69 ------------------- miniprogram/pages/data/data.ts | 2 +- .../pages/equipmentMember/equipmentMember.ts | 30 +++----- miniprogram/pages/home/home.ts | 26 ++++++- miniprogram/pages/home/home.wxml | 2 +- .../measurementReport/measurementReport.ts | 2 +- miniprogram/pages/my/my.ts | 2 +- 9 files changed, 37 insertions(+), 205 deletions(-) delete mode 100644 miniprogram/mock/data.mock.ts delete mode 100644 miniprogram/mock/home.mock.ts delete mode 100644 miniprogram/mock/member.mock.ts diff --git a/miniprogram/mock/data.mock.ts b/miniprogram/mock/data.mock.ts deleted file mode 100644 index 1c1aa0a..0000000 --- a/miniprogram/mock/data.mock.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** 时间范围 */ -export type TimeRange = '7d' | '30d' | '3m' - -/** 单条测量记录 */ -export interface RecordItem { - id: string - /** 格式 YYYY.MM.DD HH:mm */ - time: string - weight: number - bmi: number - /** 体脂率(%) */ - bodyFat: number -} - -/** 统计指标 */ -export interface StatsData { - maxWeight: number - minWeight: number - avgWeight: number - /** 体重变化(kg,正=增重,负=减轻) */ - weightDiff: number -} - -/** 全量 mock 记录(最近 3 个月数据,按时间倒序) */ -const ALL_RECORDS: RecordItem[] = [ - { id: 'r-001', time: '2026.05.12 08:12', weight: 68.2, bmi: 22.0, bodyFat: 18.5 }, - { id: 'r-002', time: '2026.05.11 21:30', weight: 68.5, bmi: 22.1, bodyFat: 18.7 }, - { id: 'r-003', time: '2026.05.10 08:05', weight: 68.8, bmi: 22.3, bodyFat: 18.9 }, - { id: 'r-004', time: '2026.05.09 07:58', weight: 69.0, bmi: 22.4, bodyFat: 19.0 }, - { id: 'r-005', time: '2026.05.08 22:10', weight: 69.3, bmi: 22.5, bodyFat: 19.2 }, - { id: 'r-006', time: '2026.05.07 08:20', weight: 69.5, bmi: 22.6, bodyFat: 19.3 }, - { id: 'r-007', time: '2026.05.06 08:00', weight: 70.0, bmi: 22.7, bodyFat: 19.5 }, - { id: 'r-008', time: '2026.04.30 08:10', weight: 70.3, bmi: 22.8, bodyFat: 19.7 }, - { id: 'r-009', time: '2026.04.20 07:45', weight: 71.0, bmi: 23.0, bodyFat: 20.0 }, - { id: 'r-010', time: '2026.04.10 08:30', weight: 71.8, bmi: 23.2, bodyFat: 20.3 }, - { id: 'r-011', time: '2026.03.28 08:15', weight: 72.5, bmi: 23.5, bodyFat: 20.7 }, - { id: 'r-012', time: '2026.03.15 09:00', weight: 73.2, bmi: 23.7, bodyFat: 21.0 }, - { id: 'r-013', time: '2026.03.01 08:05', weight: 73.8, bmi: 23.9, bodyFat: 21.3 }, -] - -/** 各时间范围截取数量 */ -const RANGE_COUNTS: Record = { - '7d': 7, - '30d': 10, - '3m': 13, -} - -/** - * 按时间范围获取 mock 记录列表 - */ -export function getMockRecords(range: TimeRange): RecordItem[] { - return ALL_RECORDS.slice(0, RANGE_COUNTS[range]) -} - -/** - * 根据记录列表计算统计指标 - */ -export function calcStats(records: RecordItem[]): StatsData { - if (!records.length) { - return { maxWeight: 0, minWeight: 0, avgWeight: 0, weightDiff: 0 } - } - const weights = records.map(r => r.weight) - const maxWeight = Math.max(...weights) - const minWeight = Math.min(...weights) - const avgWeight = parseFloat((weights.reduce((a, b) => a + b, 0) / weights.length).toFixed(1)) - // 最新 - 最旧 - const weightDiff = parseFloat((weights[0] - weights[weights.length - 1]).toFixed(1)) - return { maxWeight, minWeight, avgWeight, weightDiff } -} diff --git a/miniprogram/mock/home.mock.ts b/miniprogram/mock/home.mock.ts deleted file mode 100644 index e3279fa..0000000 --- a/miniprogram/mock/home.mock.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** 最近一次测量记录 */ -export 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 -} - -/** Mock 最近一次测量记录 */ -export const mockLatestRecord: WeightRecord = { - weight: 68, - weightDecimal: '.20', - date: '今日 07:30', - diff: -0.3, - height: 176, - bmi: 22.4, - bmiLabel: '标准', - stdWeight: 67.2, - bodyFat: 22.3, - bodyFatMass: 15.2, - bmr: 1652, -} diff --git a/miniprogram/mock/member.mock.ts b/miniprogram/mock/member.mock.ts deleted file mode 100644 index 7ce977c..0000000 --- a/miniprogram/mock/member.mock.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** 成员项(与 equipmentMember / data 页面共享结构) */ -export interface MemberItem { - id: string - name: string - gender: '男' | '女' - age: number - /** 身高(cm) */ - height: number - /** 头像色块 */ - avatar: string - isSelf: boolean - /** 他人添加的成员(只读,不显示编辑/删除) */ - isFromOther: boolean -} - -/** 头像色块池 */ -const AVATAR_COLORS = ['#1385FA', '#2AC79F', '#FF8FAB', '#FFB347', '#A78BFA', '#F87171'] - -/** Mock 成员列表 */ -export const mockMembers: MemberItem[] = [ - { - id: 'm-001', - name: '陈小飞', - gender: '男', - age: 28, - height: 175, - avatar: AVATAR_COLORS[0], - isSelf: true, - isFromOther: false, - }, - { - id: 'm-002', - name: '李镇南', - gender: '男', - age: 32, - height: 178, - avatar: AVATAR_COLORS[1], - isSelf: false, - isFromOther: false, - }, - { - id: 'm-003', - name: '张颖', - gender: '女', - age: 26, - height: 165, - avatar: AVATAR_COLORS[2], - isSelf: false, - isFromOther: false, - }, - { - id: 'm-004', - name: '王建国', - gender: '男', - age: 60, - height: 170, - avatar: AVATAR_COLORS[3], - isSelf: false, - isFromOther: true, - }, -] - -/** - * 生成下一个可用的头像色块 - * @param existingCount 已有成员数量 - */ -export function nextAvatarColor(existingCount: number): string { - return AVATAR_COLORS[existingCount % AVATAR_COLORS.length] -} diff --git a/miniprogram/pages/data/data.ts b/miniprogram/pages/data/data.ts index 7643579..91eabc9 100644 --- a/miniprogram/pages/data/data.ts +++ b/miniprogram/pages/data/data.ts @@ -54,7 +54,7 @@ const EMPTY_STATS: MeasureStatistics = { } /** 从生日字符串(YYYY-MM-DD)计算周岁 */ -function calcAge(birthday: string): number { +const calcAge = (birthday: string): number => { if (!birthday) return 0 const [year, month, day] = birthday.split('-').map(Number) if (!year || !month || !day) return 0 diff --git a/miniprogram/pages/equipmentMember/equipmentMember.ts b/miniprogram/pages/equipmentMember/equipmentMember.ts index c1ea276..f746820 100644 --- a/miniprogram/pages/equipmentMember/equipmentMember.ts +++ b/miniprogram/pages/equipmentMember/equipmentMember.ts @@ -68,7 +68,7 @@ interface DeviceCard { * 从生日字符串(YYYY-MM-DD)计算周岁 * @param birthday 生日字符串 */ -function calcAge(birthday: string): number { +const calcAge = (birthday: string): number => { if (!birthday) return 0 const parts = birthday.split('-').map(Number) const [year, month, day] = parts @@ -81,26 +81,16 @@ function calcAge(birthday: string): number { return Math.max(0, age) } -/** - * MemberDisplay → DeviceMember 转换,供 lefu 同步层使用 - * @param m 展示用成员 - */ -function toDeviceMember(m: MemberDisplay): DeviceMember { - return { - id: m.id, - name: m.realname, - gender: m.sex === 1 ? 1 : 0, - age: m.age, - height: m.height, - isSelf: m.relationType === 1, - } -} +const toDeviceMember = (m: MemberDisplay): DeviceMember => ({ + id: m.id, + name: m.realname, + gender: m.sex === 1 ? 1 : 0, + age: m.age, + height: m.height, + isSelf: m.relationType === 1, +}) -/** - * 将成员列表全量同步到设备 - * @param members 展示用成员列表 - */ -function syncToDevice(members: MemberDisplay[]): void { +const syncToDevice = (members: MemberDisplay[]): void => { const deviceMembers = members.map(toDeviceMember) wx.showLoading({ title: '正在同步成员...', mask: true }) lefuService.syncMembersToDevice(deviceMembers) diff --git a/miniprogram/pages/home/home.ts b/miniprogram/pages/home/home.ts index f50fc30..c01e53d 100644 --- a/miniprogram/pages/home/home.ts +++ b/miniprogram/pages/home/home.ts @@ -1,4 +1,5 @@ import { get } from '../../utils/request/index' +import { lefuService } from '../../lefu/index' /** 设备信息 */ interface DeviceInfo { @@ -49,7 +50,7 @@ interface StorageUserInfo { } /** 将体重数字拆成整数 + 小数字符串 */ -function splitWeight(weight: number): { int: number; decimal: string } { +const splitWeight = (weight: number): { int: number; decimal: string } => { const str = weight.toFixed(2) const [intPart, decPart] = str.split('.') return { int: Number(intPart), decimal: `.${decPart}` } @@ -66,9 +67,28 @@ Page({ }, onLoad() { + this.setData({ + 'device.connected': lefuService.isConnected, + 'device.name': lefuService.deviceInfo?.name ?? '智能体重秤', + }) + lefuService.onDeviceInfo((info) => { + this.setData({ 'device.name': info.name ?? '智能体重秤' }) + }) + lefuService.onDeviceConnect(() => { + this.setData({ 'device.connected': true }) + }) + lefuService.onDisconnected(() => { + this.setData({ 'device.connected': false }) + }) this.loadData() }, + onUnload() { + lefuService.onDeviceConnect(() => {}) + lefuService.onDisconnected(() => {}) + lefuService.onDeviceInfo(() => {}) + }, + onShareAppMessage(): WechatMiniprogram.Page.ICustomShareContent { return { title: '智能蓝牙秤', @@ -118,8 +138,8 @@ Page({ wx.switchTab({ url: '/pages/data/data' }) }, - /** 切换设备 */ + /** 跳转设备列表页 */ onTapSwitchDevice() { - wx.showToast({ title: '切换设备', icon: 'none' }) + wx.switchTab({ url: '/pages/equipment/equipment' }) }, }) diff --git a/miniprogram/pages/home/home.wxml b/miniprogram/pages/home/home.wxml index e9f48c8..296d653 100644 --- a/miniprogram/pages/home/home.wxml +++ b/miniprogram/pages/home/home.wxml @@ -7,7 +7,7 @@ - 智能体脂秤 Pro + {{ device.name }} {{ device.connected ? '蓝牙已连接' : '未连接' }} diff --git a/miniprogram/pages/measurementReport/measurementReport.ts b/miniprogram/pages/measurementReport/measurementReport.ts index 7f90b37..4518094 100644 --- a/miniprogram/pages/measurementReport/measurementReport.ts +++ b/miniprogram/pages/measurementReport/measurementReport.ts @@ -63,7 +63,7 @@ const EMPTY_RECORD: WeightRecord = { } /** 将体重数字拆成整数 + 小数字符串 */ -function splitWeight(weight: number): { int: number; decimal: string } { +const splitWeight = (weight: number): { int: number; decimal: string } => { const str = weight.toFixed(2) const [intPart, decPart] = str.split('.') return { int: Number(intPart), decimal: `.${decPart}` } diff --git a/miniprogram/pages/my/my.ts b/miniprogram/pages/my/my.ts index f430662..cfb5ad2 100644 --- a/miniprogram/pages/my/my.ts +++ b/miniprogram/pages/my/my.ts @@ -17,7 +17,7 @@ interface PageUserInfo { } /** 从生日字符串(YYYY-MM-DD)计算周岁 */ -function calcAge(birthday: string): number { +const calcAge = (birthday: string): number => { if (!birthday) return 0 const [year, month, day] = birthday.split('-').map(Number) if (!year || !month || !day) return 0