import { lefuService } from '../../lefu/index' import type { DeviceMember } from '../../lefu/index' import { mockMembers } from '../../mock/member.mock' import type { MemberItem } from '../../mock/member.mock' /** 设备卡片 */ interface DeviceCard { id: string name: string capacityUsed: number capacityTotal: number } /** * MemberItem → DeviceMember 转换 * lefu 层只认识 DeviceMember,业务层负责转换 */ function toDeviceMember(m: MemberItem): DeviceMember { return { id: m.id, name: m.name, gender: m.gender === '男' ? 1 : 0, age: m.age, height: m.height, isSelf: m.isSelf, } } /** * 将成员列表全量同步到设备 * 成功/失败均给出 Toast 提示 */ function syncToDevice(members: MemberItem[]): void { const deviceMembers = members.map(toDeviceMember) wx.showLoading({ title: '正在同步成员...', mask: true }) lefuService.syncMembersToDevice(deviceMembers) .then(() => { wx.hideLoading() wx.showToast({ title: '成员同步成功', icon: 'success' }) }) .catch((err: Error) => { wx.hideLoading() wx.showToast({ title: err.message || '同步失败,请重试', icon: 'none' }) }) } Page({ data: { /** 设备连接状态(后续接入 lefuService.onConnectState 替换) */ connected: true, deviceCard: { id: 'device-001', name: 'MX-W30A1', capacityUsed: 0, capacityTotal: 10, } as DeviceCard, memberList: [] as MemberItem[], }, onLoad() { this._loadMembers() }, /** 从 storage / mock 加载成员列表 */ _loadMembers() { const list: MemberItem[] = wx.getStorageSync('memberList') || mockMembers this.setData({ memberList: list, 'deviceCard.capacityUsed': list.length, }) }, /** 编辑成员 */ onTapEdit(e: WechatMiniprogram.TouchEvent) { const id = e.currentTarget.dataset.id as string // TODO: 跳转编辑成员页面,编辑完成后同样需要调用 syncToDevice wx.showToast({ title: `编辑 ${id}`, icon: 'none' }) }, /** 删除成员:更新本地 → 同步设备 */ onTapDelete(e: WechatMiniprogram.TouchEvent) { const id = e.currentTarget.dataset.id as string wx.showModal({ title: '提示', content: '确定删除该成员?', success: (res) => { if (!res.confirm) return const list = this.data.memberList.filter(m => m.id !== id) wx.setStorageSync('memberList', list) this.setData({ memberList: list, 'deviceCard.capacityUsed': list.length, }) // 删除后立即同步到设备 if (this.data.connected) { syncToDevice(list) } }, }) }, /** 添加成员:跳转 addMember 页(未连接态禁用) */ onTapAddMember() { if (!this.data.connected) return wx.navigateTo({ url: '/pages/addMember/addMember', }) }, /** * addMember 页保存成功后返回时刷新列表并同步设备 * 在 onShow 中检测 storage 变化 */ onShow() { const stored: MemberItem[] = wx.getStorageSync('memberList') || [] const current = this.data.memberList // 数量有变化说明刚刚新增了成员 if (stored.length !== current.length) { this.setData({ memberList: stored, 'deviceCard.capacityUsed': stored.length, }) if (this.data.connected) { syncToDevice(stored) } } }, })