feat(member): 删除成员先同步设备再调接口;新增 clearDeviceMembers 方法
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
d4ab21ca6f
commit
1548ebbb74
@@ -399,6 +399,18 @@ class LeFuService {
|
||||
}, 2000)
|
||||
}
|
||||
|
||||
// ─── 清除设备成员(不下发) ─────────────────────
|
||||
clearDeviceMembers(): Promise<void> {
|
||||
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<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
@@ -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: '正在删除...' })
|
||||
.then(() => {
|
||||
wx.showToast({ title: '删除成功', icon: 'success' })
|
||||
setTimeout(() => {
|
||||
this._loadData(this.data.sn)
|
||||
}, 1500)
|
||||
|
||||
// 1. 从列表中移除该成员(立即更新 UI)
|
||||
const newList = this.data.memberList.filter(m => m.id !== id)
|
||||
this.setData({
|
||||
memberList: newList,
|
||||
'deviceCard.capacityUsed': newList.length,
|
||||
})
|
||||
.catch(() => {
|
||||
wx.showToast({ title: '删除失败,请重试', icon: 'none' })
|
||||
|
||||
wx.showLoading({ title: '正在同步设备数据...', mask: true })
|
||||
|
||||
// 2. 同步设备
|
||||
let devicePromise: Promise<void>
|
||||
if (newList.length) {
|
||||
// 有剩余成员:清除设备数据并重新下发
|
||||
devicePromise = lefuService.syncMembersToDevice(
|
||||
newList.map(toDeviceMember),
|
||||
(current, total) => {
|
||||
wx.showLoading({ title: `正在同步设备数据 ${current}/${total}...`, mask: true })
|
||||
},
|
||||
)
|
||||
} else {
|
||||
// 删除最后一个成员:仅清除设备数据,不下发
|
||||
devicePromise = lefuService.clearDeviceMembers()
|
||||
}
|
||||
|
||||
devicePromise
|
||||
.then(() => {
|
||||
// 3. 调用删除接口
|
||||
return del('weighingScale/v2/del/user', { id }, { loading: false })
|
||||
})
|
||||
.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' })
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user