[AI Generated]: feat(*): 完善成员下发进度提示、头像取首字、图片资源分目录及选人回填逻辑优化

This commit is contained in:
17792275749
2026-05-15 17:53:10 +08:00
parent 69ad8358ae
commit bcf9f48dd9
14 changed files with 38 additions and 20 deletions
@@ -55,7 +55,7 @@
<!-- 无成员:占位 --> <!-- 无成员:占位 -->
<block wx:else> <block wx:else>
<view class="drawer-empty"> <view class="drawer-empty">
<image class="drawer-empty-icon" src="/images/home/noData.png" mode="aspectFit"/> <image class="drawer-empty-icon" src="/images/selectMemberDrawer/noData.png" mode="aspectFit"/>
<text class="drawer-empty-text">暂无可选成员</text> <text class="drawer-empty-text">暂无可选成员</text>
</view> </view>
</block> </block>
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+2 -1
View File
@@ -344,7 +344,7 @@ class LeFuService {
} }
// ─── 成员同步 ───────────────────────────────── // ─── 成员同步 ─────────────────────────────────
syncMembersToDevice(members: DeviceMember[]): Promise<void> { syncMembersToDevice(members: DeviceMember[], onProgress?: (current: number, total: number) => void): Promise<void> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!this._activeProtocol) { reject(new Error('[LeFu] 设备未连接')); return } if (!this._activeProtocol) { reject(new Error('[LeFu] 设备未连接')); return }
const mainUser = members.find(m => m.isSelf) const mainUser = members.find(m => m.isSelf)
@@ -368,6 +368,7 @@ class LeFuService {
return return
} }
const member = members[index] const member = members[index]
onProgress?.(index + 1, members.length)
resetTimer() resetTimer()
this._activeProtocol.dataSyncUserInfo( this._activeProtocol.dataSyncUserInfo(
{ {
+17 -9
View File
@@ -36,14 +36,17 @@ interface IdCardParsed {
birthday: string birthday: string
} }
/** 从抽屉组件 select 事件接收的成员数据 */ /** 从抽屉组件 select 事件接收的成员数据(完整 item */
interface ExistingMember { interface ExistingMember {
id: string
name: string name: string
gender: '男' | '女' gender: '男' | '女'
age: number age: number
height: number height: number
weight: number weight: number
idCard: string idCard: string
avatar?: string
[key: string]: any
} }
/** /**
@@ -66,6 +69,8 @@ Page({
weight: '' weight: ''
} as MemberForm, } as MemberForm,
/** 从抽屉选中的完整成员数据,提交时作为 base spread */
selectedMember: null as ExistingMember | null,
showSelectDrawer: false, showSelectDrawer: false,
}, },
@@ -146,19 +151,21 @@ Page({
}, },
onSelectMember(e: WechatMiniprogram.CustomEvent<ExistingMember>) { onSelectMember(e: WechatMiniprogram.CustomEvent<ExistingMember>) {
const { name, gender, age, height, weight, idCard } = e.detail const member = e.detail
const parsed = this.parseIdCard(member.idCard)
this.setData({ this.setData({
showSelectDrawer: false, showSelectDrawer: false,
'form.name': name, selectedMember: member,
'form.idCard': idCard, 'form.name': member.name,
'form.gender': gender, 'form.idCard': member.idCard,
'form.age': String(age), 'form.gender': parsed.gender,
'form.height': String(height), 'form.age': parsed.age,
'form.weight': String(weight), 'form.height': String(member.height),
'form.weight': String(member.weight),
}) })
}, },
onCancel() { onCancel() {
wx.navigateBack() wx.navigateBack()
}, },
@@ -193,6 +200,7 @@ onCancel() {
const connectDeviceInfoRaw = wx.getStorageSync('connectDeviceInfo') const connectDeviceInfoRaw = wx.getStorageSync('connectDeviceInfo')
const payload: Record<string, any> = { const payload: Record<string, any> = {
...(this.data.selectedMember ?? {}),
parentUserId: userInfo?.userId ?? '', parentUserId: userInfo?.userId ?? '',
scaleDeviceId: lefuService.deviceInfo?.serialNumber ?? '', scaleDeviceId: lefuService.deviceInfo?.serialNumber ?? '',
realname: name.trim(), realname: name.trim(),
+1 -1
View File
@@ -88,7 +88,7 @@
<block wx:else> <block wx:else>
<view class="empty-state"> <view class="empty-state">
<view class="empty-icon"> <view class="empty-icon">
<image src="/images/home/noData.png" mode="aspectFit"/> <image src="/images/data/noData.png" mode="aspectFit"/>
</view> </view>
<view class="empty-text">暂无称重数据</view> <view class="empty-text">暂无称重数据</view>
</view> </view>
@@ -160,9 +160,12 @@
height: 90rpx; height: 90rpx;
border-radius: 20rpx; border-radius: 20rpx;
margin-right: 24rpx; margin-right: 24rpx;
box-sizing: border-box; background-color: #1385FA;
border: 3rpx solid #50A6FF; color: #ffffff;
background: var(--avatar-bg); font-size: 36rpx;
font-weight: bold;
line-height: 90rpx;
text-align: center;
} }
.member-info { .member-info {
@@ -54,6 +54,8 @@ interface MemberDisplay {
sex: number sex: number
/** 周岁数值,供 lefu 层使用 */ /** 周岁数值,供 lefu 层使用 */
age: number age: number
/** 身份证号,下发设备时作为用户唯一标识 */
idCard: string
} }
/** 设备卡展示模型 */ /** 设备卡展示模型 */
@@ -82,7 +84,7 @@ const calcAge = (birthday: string): number => {
} }
const toDeviceMember = (m: MemberDisplay): DeviceMember => ({ const toDeviceMember = (m: MemberDisplay): DeviceMember => ({
id: m.id, id: m.idCard,
name: m.realname, name: m.realname,
gender: m.sex === 1 ? 1 : 0, gender: m.sex === 1 ? 1 : 0,
age: m.age, age: m.age,
@@ -92,8 +94,11 @@ const toDeviceMember = (m: MemberDisplay): DeviceMember => ({
const syncToDevice = (members: MemberDisplay[]): void => { const syncToDevice = (members: MemberDisplay[]): void => {
const deviceMembers = members.map(toDeviceMember) const deviceMembers = members.map(toDeviceMember)
wx.showLoading({ title: '正在同步成员...', mask: true }) const total = deviceMembers.length
lefuService.syncMembersToDevice(deviceMembers) wx.showLoading({ title: `正在下发第1/${total}个用户...`, mask: true })
lefuService.syncMembersToDevice(deviceMembers, (current, t) => {
wx.showLoading({ title: `正在下发第${current}/${t}个用户...`, mask: true })
})
.then(() => { .then(() => {
wx.hideLoading() wx.hideLoading()
wx.showToast({ title: '成员同步成功', icon: 'success' }) wx.showToast({ title: '成员同步成功', icon: 'success' })
@@ -183,6 +188,7 @@ Page({
avatar: item.avatar, avatar: item.avatar,
sex: item.sex, sex: item.sex,
age, age,
idCard: item.idCard ?? '',
} }
}) })
this.setData({ this.setData({
@@ -37,8 +37,8 @@
<scroll-view scroll-y class="member-card-list"> <scroll-view scroll-y class="member-card-list">
<block wx:for="{{ memberList }}" wx:key="id"> <block wx:for="{{ memberList }}" wx:key="id">
<view class="member-item"> <view class="member-item">
<!-- 头像色块 --> <!-- 头像:取名字第一个字 -->
<view class="member-avatar" style="--avatar-bg: {{ item.avatar }};"></view> <view class="member-avatar">{{ item.realname[0] }}</view>
<!-- 信息列 --> <!-- 信息列 -->
<view class="member-info"> <view class="member-info">