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