diff --git a/miniprogram/pages/equipmentMember/equipmentMember.less b/miniprogram/pages/equipmentMember/equipmentMember.less index 6edbed6..40fcc73 100644 --- a/miniprogram/pages/equipmentMember/equipmentMember.less +++ b/miniprogram/pages/equipmentMember/equipmentMember.less @@ -118,9 +118,11 @@ flex: 1; box-sizing: border-box; overflow: hidden; - margin-bottom: 40rpx; - border-radius: 20rpx; - background-color: #FFFFFF; + margin-bottom: 20rpx; + + &:first-of-type { + + } /* 容量小标题 */ .member-card-header { @@ -129,6 +131,8 @@ display: flex; padding: 0 30rpx; box-sizing: border-box; + border-radius: 20rpx 20rpx 0 0; + background-color: #FFFFFF; border-bottom: 1rpx solid #EAECF1; justify-content: space-between; @@ -149,18 +153,28 @@ } } + .member-card-title { + height: 60rpx; + font-size: 24rpx; + line-height: 60rpx; + padding-left: 30rpx; + box-sizing: border-box; + } + .member-item { width: 100%; display: flex; align-items: center; padding: 20rpx 30rpx; box-sizing: border-box; - border-bottom: 1rpx solid #F0F0F2; + margin-bottom: 24rpx; + border-radius: 24rpx; + background-color: #FFFFFF; - &:last-child { - border-bottom: none; + &:last-of-type { + margin-bottom: 0; } - + .member-avatar { width: 90rpx; height: 90rpx; @@ -244,13 +258,16 @@ } } } + + .my { + border-radius: 0 0 24rpx 24rpx; + } } } /* 通用 badge(本人 / 他人添加) */ .badge { height: 40rpx; - padding: 0 18rpx; font-size: 24rpx; line-height: 40rpx; border-radius: 8rpx; @@ -258,17 +275,18 @@ .badge-self { color: #1385FA; + padding: 0 18rpx; background-color: rgba(19, 133, 250, 0.12); } .badge-my { color: #1385FA; + padding: 0 18rpx; background-color: rgba(19, 133, 250, 0.08); } .badge-other { - color: #77849E; - background-color: rgba(0, 0, 0, 0); + color: #808080; } } diff --git a/miniprogram/pages/equipmentMember/equipmentMember.ts b/miniprogram/pages/equipmentMember/equipmentMember.ts index 13d65bd..fbce78f 100644 --- a/miniprogram/pages/equipmentMember/equipmentMember.ts +++ b/miniprogram/pages/equipmentMember/equipmentMember.ts @@ -56,6 +56,8 @@ interface MemberDisplay { sex: number /** 周岁数值,供 lefu 层使用 */ age: number + /** 0=员工 1=家庭成员 */ + dataType: number } /** 设备卡展示模型 */ @@ -95,9 +97,11 @@ const toDeviceMember = (m: MemberDisplay): DeviceMember => ({ const syncToDevice = (members: MemberDisplay[]): void => { const deviceMembers = members.map(toDeviceMember) const total = deviceMembers.length - wx.showLoading({ title: `正在下发第1/${total}个用户...`, mask: true }) + wx.showLoading({ title: `加载中...`, mask: true }) + console.log(`正在下发第1/${total}个用户...`) lefuService.syncMembersToDevice(deviceMembers, (current, t) => { - wx.showLoading({ title: `正在下发第${current}/${t}个用户...`, mask: true }) + wx.showLoading({ title: `加载中...`, mask: true }) + console.log(`正在下发第${current}/${t}个用户...`) }) .then(() => { wx.hideLoading() @@ -127,7 +131,12 @@ Page({ capacityUsed: 0, capacityTotal: 10, } as DeviceCard, - memberList: [] as MemberDisplay[], + /** 本人(单个) */ + selfMember: null as MemberDisplay | null, + /** 员工列表 */ + employeeList: [] as MemberDisplay[], + /** 家庭成员列表 */ + familyList: [] as MemberDisplay[], /** 自定义删除确认弹窗 */ showDeleteModal: false, deleteTarget: null as MemberDisplay | null, @@ -155,7 +164,7 @@ Page({ sn: info.serialNumber ?? '', 'deviceCard.name': info.modelNumber ?? '智能体重秤', }) - if (!this.data.memberList.length && info.serialNumber) { + if (!this.data.selfMember && !this.data.employeeList.length && !this.data.familyList.length && info.serialNumber) { this._loadData(info.serialNumber) } }) @@ -198,18 +207,19 @@ Page({ avatar: item.avatar, sex: item.sex, age, + dataType: item.dataType, } }) + const selfMember = list.find(m => m.relationType === 1) || null + const employeeList = list.filter(m => m.relationType !== 1 && m.dataType === 0) + const familyList = list.filter(m => m.relationType !== 1 && m.dataType === 1) this.setData({ - memberList: list, + selfMember, + employeeList, + familyList, 'deviceCard.capacityUsed': list.length, }) - // 首次加载不同步,后续数据变更触发的刷新才同步 - // if (this._firstLoad) { - // this._firstLoad = false - // } else { - syncToDevice(list) - // } + syncToDevice(list) }) .finally(() => { this.setData({ loading: false }) @@ -225,18 +235,18 @@ Page({ /** 删除用户:弹出自定义确认弹窗 */ onTapDelete(e: WechatMiniprogram.TouchEvent) { const id = e.currentTarget.dataset.id as string - const target = this.data.memberList.find(m => m.id === id) + const target = this.data.employeeList.find(m => m.id === id) + || this.data.familyList.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) + const hasSubUser = this.data.employeeList.some(m => m.userType !== 1) + || this.data.familyList.some(m => m.userType !== 1) if (hasSubUser) { wx.showToast({ title: '请先删除所有普通用户', icon: 'none' }) return @@ -264,22 +274,28 @@ Page({ const id = target.id - // 1. 从列表中移除该用户(立即更新 UI) - const newList = this.data.memberList.filter(m => m.id !== id) + const newEmployeeList = this.data.employeeList.filter(m => m.id !== id) + const newFamilyList = this.data.familyList.filter(m => m.id !== id) + const merged: MemberDisplay[] = [ + ...(this.data.selfMember ? [this.data.selfMember] : []), + ...newEmployeeList, + ...newFamilyList, + ] + this.setData({ - memberList: newList, - 'deviceCard.capacityUsed': newList.length, + employeeList: newEmployeeList, + familyList: newFamilyList, + 'deviceCard.capacityUsed': merged.length, showDeleteModal: false, deleteTarget: null, }) wx.showLoading({ title: '正在同步设备数据...', mask: true }) - // 2. 同步设备 let devicePromise: Promise - if (newList.length) { + if (merged.length) { devicePromise = lefuService.syncMembersToDevice( - newList.map(toDeviceMember), + merged.map(toDeviceMember), (current, total) => { wx.showLoading({ title: `正在同步设备数据 ${current}/${total}...`, mask: true }) }, @@ -290,7 +306,6 @@ Page({ devicePromise .then(() => { - // 3. 调用删除接口 return del('weighingScale/v2/del/user', { id }, { loading: false }) }) .then(() => { @@ -299,7 +314,6 @@ Page({ }) .catch((err: Error) => { wx.hideLoading() - // 失败时重新拉取列表恢复数据 this._loadData(this.data.sn) wx.showToast({ title: err.message || '删除失败,请重试', icon: 'none' }) }) @@ -311,7 +325,8 @@ Page({ /** 添加用户:未连接态禁用 */ onTapAddMember() { if (!this.data.connected) return - if (this.data.memberList.length >= 10) { + const total = (this.data.selfMember ? 1 : 0) + this.data.employeeList.length + this.data.familyList.length + if (total >= 10) { wx.showToast({ title: '超过最大用户限制', icon: 'none' }) return } diff --git a/miniprogram/pages/equipmentMember/equipmentMember.wxml b/miniprogram/pages/equipmentMember/equipmentMember.wxml index c910f46..ce7217b 100644 --- a/miniprogram/pages/equipmentMember/equipmentMember.wxml +++ b/miniprogram/pages/equipmentMember/equipmentMember.wxml @@ -36,24 +36,38 @@ + + + {{ selfMember.realname[0] }} + + + {{ selfMember.realname }} + 本人 + + + {{ selfMember.sex_dictText }} + · + {{ selfMember.ageDisplay }}岁 + | + {{ selfMember.height }}cm + + + + 编辑 + + + - - + + + 员工 + - {{ item.realname[0] }} - - {{ item.realname }} - - 本人 - - - - - + 他人添加 @@ -65,12 +79,38 @@ {{ item.height }}cm - 编辑 - - 删除 - + 删除 + + + + + + + + 家庭成员 + + + {{ item.realname[0] }} + + + {{ item.realname }} + + 他人添加 + + + + {{ item.sex_dictText }} + · + {{ item.ageDisplay }}岁 + | + {{ item.height }}cm + + + + 编辑 + 删除