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)
|
}, 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> {
|
syncMembersToDevice(members: DeviceMember[], onProgress?: (current: number, total: number) => void): Promise<void> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|||||||
@@ -202,11 +202,11 @@ Page({
|
|||||||
'deviceCard.capacityUsed': list.length,
|
'deviceCard.capacityUsed': list.length,
|
||||||
})
|
})
|
||||||
// 首次加载不同步,后续数据变更触发的刷新才同步
|
// 首次加载不同步,后续数据变更触发的刷新才同步
|
||||||
if (this._firstLoad) {
|
// if (this._firstLoad) {
|
||||||
this._firstLoad = false
|
// this._firstLoad = false
|
||||||
} else {
|
// } else {
|
||||||
syncToDevice(list)
|
syncToDevice(list)
|
||||||
}
|
// }
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.setData({ loading: false })
|
this.setData({ loading: false })
|
||||||
@@ -225,6 +225,12 @@ Page({
|
|||||||
const target = this.data.memberList.find(m => m.id === id)
|
const target = this.data.memberList.find(m => m.id === id)
|
||||||
if (!target) return
|
if (!target) return
|
||||||
|
|
||||||
|
// 未连接设备不允许删除
|
||||||
|
if (!this.data.connected) {
|
||||||
|
wx.showToast({ title: '请先连接设备', icon: 'none' })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 主用户有子用户时不允许删除
|
// 主用户有子用户时不允许删除
|
||||||
if (target.userType === 1) {
|
if (target.userType === 1) {
|
||||||
const hasSubUser = this.data.memberList.some(m => m.userType !== 1)
|
const hasSubUser = this.data.memberList.some(m => m.userType !== 1)
|
||||||
@@ -235,19 +241,49 @@ Page({
|
|||||||
}
|
}
|
||||||
|
|
||||||
wx.showModal({
|
wx.showModal({
|
||||||
title: '提示',
|
title: '确认删除',
|
||||||
content: '确定要删除该用户吗?',
|
content: `确定要删除成员「${target.realname}」吗?删除后将同步更新设备数据。`,
|
||||||
success: (res) => {
|
success: (res) => {
|
||||||
if (!res.confirm) return
|
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<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(() => {
|
.then(() => {
|
||||||
wx.showToast({ title: '删除成功', icon: 'success' })
|
// 3. 调用删除接口
|
||||||
setTimeout(() => {
|
return del('weighingScale/v2/del/user', { id }, { loading: false })
|
||||||
this._loadData(this.data.sn)
|
|
||||||
}, 1500)
|
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.then(() => {
|
||||||
wx.showToast({ title: '删除失败,请重试', icon: 'none' })
|
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