[AI Generated]: feat(*): 完善成员下发进度提示、头像取首字、图片资源分目录及选人回填逻辑优化
@@ -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>
|
||||
|
||||
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 236 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 236 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 18 KiB |
@@ -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(
|
||||
{
|
||||
|
||||
@@ -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,15 +151,17 @@ 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),
|
||||
})
|
||||
},
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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">
|
||||
|
||||