From 1548ebbb74b9622c10961717674c7571871a67d8 Mon Sep 17 00:00:00 2001 From: 17792275749 <812100002@qq.com> Date: Wed, 27 May 2026 13:59:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(member):=20=E5=88=A0=E9=99=A4=E6=88=90?= =?UTF-8?q?=E5=91=98=E5=85=88=E5=90=8C=E6=AD=A5=E8=AE=BE=E5=A4=87=E5=86=8D?= =?UTF-8?q?=E8=B0=83=E6=8E=A5=E5=8F=A3=EF=BC=9B=E6=96=B0=E5=A2=9E=20clearD?= =?UTF-8?q?eviceMembers=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- miniprogram/lefu/service.ts | 12 ++++ .../pages/equipmentMember/equipmentMember.ts | 62 +++++++++++++++---- 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/miniprogram/lefu/service.ts b/miniprogram/lefu/service.ts index 0da8cfc..45e76e7 100644 --- a/miniprogram/lefu/service.ts +++ b/miniprogram/lefu/service.ts @@ -399,6 +399,18 @@ class LeFuService { }, 2000) } + // ─── 清除设备成员(不下发) ───────────────────── + clearDeviceMembers(): Promise { + return new Promise((resolve, reject) => { + if (!this._activeProtocol) { reject(new Error('设备未连接')); return } + const timer = setTimeout(() => reject(new Error('清除设备成员超时')), 15000) + this._activeProtocol.codeClearDeviceData('01', (res: number) => { + clearTimeout(timer) + res === 0 ? resolve() : reject(new Error('清除设备成员失败')) + }) + }) + } + // ─── 成员同步 ───────────────────────────────── syncMembersToDevice(members: DeviceMember[], onProgress?: (current: number, total: number) => void): Promise { return new Promise((resolve, reject) => { diff --git a/miniprogram/pages/equipmentMember/equipmentMember.ts b/miniprogram/pages/equipmentMember/equipmentMember.ts index 7ee8ad2..97e954d 100644 --- a/miniprogram/pages/equipmentMember/equipmentMember.ts +++ b/miniprogram/pages/equipmentMember/equipmentMember.ts @@ -202,11 +202,11 @@ Page({ 'deviceCard.capacityUsed': list.length, }) // 首次加载不同步,后续数据变更触发的刷新才同步 - if (this._firstLoad) { - this._firstLoad = false - } else { + // if (this._firstLoad) { + // this._firstLoad = false + // } else { syncToDevice(list) - } + // } }) .finally(() => { this.setData({ loading: false }) @@ -225,6 +225,12 @@ Page({ const target = this.data.memberList.find(m => m.id === id) if (!target) return + // 未连接设备不允许删除 + if (!this.data.connected) { + wx.showToast({ title: '请先连接设备', icon: 'none' }) + return + } + // 主用户有子用户时不允许删除 if (target.userType === 1) { const hasSubUser = this.data.memberList.some(m => m.userType !== 1) @@ -235,19 +241,49 @@ Page({ } wx.showModal({ - title: '提示', - content: '确定要删除该用户吗?', + title: '确认删除', + content: `确定要删除成员「${target.realname}」吗?删除后将同步更新设备数据。`, success: (res) => { if (!res.confirm) return - del('weighingScale/v2/del/user', { id }, { loadingTitle: '正在删除...' }) + + // 1. 从列表中移除该成员(立即更新 UI) + const newList = this.data.memberList.filter(m => m.id !== id) + this.setData({ + memberList: newList, + 'deviceCard.capacityUsed': newList.length, + }) + + wx.showLoading({ title: '正在同步设备数据...', mask: true }) + + // 2. 同步设备 + let devicePromise: Promise + if (newList.length) { + // 有剩余成员:清除设备数据并重新下发 + devicePromise = lefuService.syncMembersToDevice( + newList.map(toDeviceMember), + (current, total) => { + wx.showLoading({ title: `正在同步设备数据 ${current}/${total}...`, mask: true }) + }, + ) + } else { + // 删除最后一个成员:仅清除设备数据,不下发 + devicePromise = lefuService.clearDeviceMembers() + } + + devicePromise .then(() => { - wx.showToast({ title: '删除成功', icon: 'success' }) - setTimeout(() => { - this._loadData(this.data.sn) - }, 1500) + // 3. 调用删除接口 + return del('weighingScale/v2/del/user', { id }, { loading: false }) }) - .catch(() => { - wx.showToast({ title: '删除失败,请重试', icon: 'none' }) + .then(() => { + wx.hideLoading() + wx.showToast({ title: '删除成功', icon: 'success' }) + }) + .catch((err: Error) => { + wx.hideLoading() + // 失败时重新拉取列表恢复数据 + this._loadData(this.data.sn) + wx.showToast({ title: err.message || '删除失败,请重试', icon: 'none' }) }) }, })