feat(addMember): 选择已有成员补服务端校验;表单加scroll-view;上限10人限制

- onSelectMember 选中后调用 fetchUserInfoByIdCard 走服务端校验
- 表单区域包裹 scroll-view,适配小屏滚动
- equipmentMember 添加按钮超10人弹 toast 提示

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
17792275749
2026-05-28 16:52:59 +08:00
co-authored by Claude Opus 4.7
parent dc5010350c
commit 77e768f6c7
4 changed files with 156 additions and 141 deletions
+6 -2
View File
@@ -41,8 +41,12 @@
width: 100%; width: 100%;
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
padding: 0 30rpx;
box-sizing: border-box; .scrollViewContent {
width: 100%;
padding: 0 30rpx;
box-sizing: border-box;
}
/* 表单卡片 */ /* 表单卡片 */
.form-card { .form-card {
+3
View File
@@ -299,6 +299,9 @@ Page({
'form.height': String(member.height), 'form.height': String(member.height),
'form.weight': String(member.weight), 'form.weight': String(member.weight),
}) })
if (member.name.trim() && this.isIdCardValid(member.idCard)) {
this.fetchUserInfoByIdCard(member.name.trim(), member.idCard)
}
}, },
/** 确认弹框 - 确认 */ /** 确认弹框 - 确认 */
+143 -139
View File
@@ -1,153 +1,157 @@
<view class="add-member"> <view class="add-member">
<!-- 顶部浅蓝提示条 --> <!-- 顶部浅蓝提示条 -->
<view class="tips"> <view class="tips">
<view class="tips-icon">!</view> <view class="tips-icon">!</view>
<text class="tips-text">最多支持 10 位成员</text> <text class="tips-text">最多支持 10 位成员</text>
</view> </view>
<view class="form"> <view class="form">
<!-- 白色圆角表单卡片 --> <scroll-view class="scrollView">
<view class="form-card"> <view class="scrollViewContent">
<!-- 白色圆角表单卡片 -->
<view class="form-card">
<!-- 姓名 --> <!-- 姓名 -->
<view class="form-row"> <view class="form-row">
<view class="form-label"> <view class="form-label">
<text class="label-text">姓名</text> <text class="label-text">姓名</text>
<text class="label-star">*</text> <text class="label-star">*</text>
</view> </view>
<view class="form-control"> <view class="form-control">
<input class="form-input" <input class="form-input"
type="text" type="text"
maxlength="20" maxlength="20"
placeholder="请填写真实姓名" placeholder="请填写真实姓名"
placeholder-class="form-placeholder" placeholder-class="form-placeholder"
value="{{ form.name }}" value="{{ form.name }}"
disabled="{{ readonly }}" disabled="{{ readonly }}"
bind:input="onNameInput" /> bind:input="onNameInput"/>
</view> </view>
</view> </view>
<!-- 身份证号 --> <!-- 身份证号 -->
<view class="form-row"> <view class="form-row">
<view class="form-label"> <view class="form-label">
<text class="label-text">身份证号</text> <text class="label-text">身份证号</text>
<text class="label-star">*</text> <text class="label-star">*</text>
</view> </view>
<view class="form-control"> <view class="form-control">
<input class="form-input" <input class="form-input"
type="idcard" type="idcard"
maxlength="18" maxlength="18"
placeholder="请填写身份证号" placeholder="请填写身份证号"
placeholder-class="form-placeholder" placeholder-class="form-placeholder"
value="{{ form.idCard }}" value="{{ form.idCard }}"
disabled="{{ readonly }}" disabled="{{ readonly }}"
bind:input="onIdCardInput" /> bind:input="onIdCardInput"/>
</view> </view>
</view> </view>
<!-- 性别(由身份证自动生成) --> <!-- 性别(由身份证自动生成) -->
<view class="form-row"> <view class="form-row">
<view class="form-label"> <view class="form-label">
<text class="label-text">性别</text> <text class="label-text">性别</text>
</view> </view>
<view class="form-control"> <view class="form-control">
<view class="form-readonly"> <view class="form-readonly">
<block wx:if="{{ form.gender }}"> <block wx:if="{{ form.gender }}">
<text class="readonly-text">{{ form.gender }}</text> <text class="readonly-text">{{ form.gender }}</text>
</block> </block>
<block wx:else> <block wx:else>
<text class="readonly-placeholder">自动生成,无需填写</text> <text class="readonly-placeholder">自动生成,无需填写</text>
</block> </block>
</view> </view>
</view> </view>
</view> </view>
<!-- 年龄(由身份证自动生成) --> <!-- 年龄(由身份证自动生成) -->
<view class="form-row"> <view class="form-row">
<view class="form-label"> <view class="form-label">
<text class="label-text">年龄</text> <text class="label-text">年龄</text>
</view> </view>
<view class="form-control"> <view class="form-control">
<view class="form-readonly form-readonly-with-suffix"> <view class="form-readonly form-readonly-with-suffix">
<block wx:if="{{ form.age }}"> <block wx:if="{{ form.age }}">
<text class="readonly-text">{{ form.age }}</text> <text class="readonly-text">{{ form.age }}</text>
</block> </block>
<block wx:else> <block wx:else>
<text class="readonly-placeholder">自动生成,无需填写</text> <text class="readonly-placeholder">自动生成,无需填写</text>
</block> </block>
<text class="form-suffix">岁</text> <text class="form-suffix">岁</text>
</view> </view>
</view> </view>
</view> </view>
<!-- 身高 --> <!-- 身高 -->
<view class="form-row"> <view class="form-row">
<view class="form-label"> <view class="form-label">
<text class="label-text">身高</text> <text class="label-text">身高</text>
<text class="label-star">*</text> <text class="label-star">*</text>
</view> </view>
<view class="form-control"> <view class="form-control">
<view class="form-input-wrap"> <view class="form-input-wrap">
<input class="form-input form-input-with-suffix" <input class="form-input form-input-with-suffix"
type="digit" type="digit"
maxlength="5" maxlength="5"
placeholder="请填写身高" placeholder="请填写身高"
placeholder-class="form-placeholder" placeholder-class="form-placeholder"
value="{{ form.height }}" value="{{ form.height }}"
disabled="{{ readonly }}" disabled="{{ readonly }}"
bind:input="onHeightInput" /> bind:input="onHeightInput"/>
<text class="form-suffix form-suffix-inside">cm</text> <text class="form-suffix form-suffix-inside">cm</text>
</view> </view>
</view> </view>
</view> </view>
<!-- 体重 --> <!-- 体重 -->
<view class="form-row"> <view class="form-row">
<view class="form-label"> <view class="form-label">
<text class="label-text">体重</text> <text class="label-text">体重</text>
<text class="label-star">*</text> <text class="label-star">*</text>
</view> </view>
<view class="form-control"> <view class="form-control">
<view class="form-input-wrap"> <view class="form-input-wrap">
<input class="form-input form-input-with-suffix" <input class="form-input form-input-with-suffix"
type="digit" type="digit"
maxlength="6" maxlength="6"
placeholder="请填写体重" placeholder="请填写体重"
placeholder-class="form-placeholder" placeholder-class="form-placeholder"
value="{{ form.weight }}" value="{{ form.weight }}"
disabled="{{ readonly }}" disabled="{{ readonly }}"
bind:input="onWeightInput" /> bind:input="onWeightInput"/>
<text class="form-suffix form-suffix-inside">kg</text> <text class="form-suffix form-suffix-inside">kg</text>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<!-- 从已有成员中选择(编辑模式隐藏) --> <!-- 从已有成员中选择(编辑模式隐藏) -->
<block wx:if="{{ !isEdit }}"> <block wx:if="{{ !isEdit }}">
<view class="ghost-btn" bind:tap="onTapSelectExisting">从已有成员中选择</view> <view class="ghost-btn" bind:tap="onTapSelectExisting">从已有成员中选择</view>
</block> </block>
</view> </view>
</scroll-view>
</view>
<!-- 底部双按钮:取消 / 保存成员信息 --> <!-- 底部双按钮:取消 / 保存成员信息 -->
<view class="actions"> <view class="actions">
<view class="btn-cancel" bind:tap="onCancel">取消</view> <view class="btn-cancel" bind:tap="onCancel">取消</view>
<view class="btn-primary" bind:tap="onSubmit">保存成员信息</view> <view class="btn-primary" bind:tap="onSubmit">保存成员信息</view>
</view> </view>
<!-- 选择已有成员抽屉 --> <!-- 选择已有成员抽屉 -->
<select-member-drawer <select-member-drawer
show="{{ showSelectDrawer }}" show="{{ showSelectDrawer }}"
bind:close="onSelectMemberClose" bind:close="onSelectMemberClose"
bind:select="onSelectMember"> bind:select="onSelectMember">
</select-member-drawer> </select-member-drawer>
<!-- 确认弹框 --> <!-- 确认弹框 -->
<user-info-confirm-modal <user-info-confirm-modal
show="{{ showConfirmModal }}" show="{{ showConfirmModal }}"
userInfo="{{ serverResult }}" userInfo="{{ serverResult }}"
bind:confirm="onConfirmModalConfirm" bind:confirm="onConfirmModalConfirm"
bind:cancel="onConfirmModalCancel"> bind:cancel="onConfirmModalCancel">
</user-info-confirm-modal> </user-info-confirm-modal>
</view> </view>
@@ -292,6 +292,10 @@ Page({
/** 添加成员:未连接态禁用 */ /** 添加成员:未连接态禁用 */
onTapAddMember() { onTapAddMember() {
if (!this.data.connected) return if (!this.data.connected) return
if (this.data.memberList.length >= 10) {
wx.showToast({ title: '超过最大用户限制', icon: 'none' })
return
}
wx.navigateTo({ url: '/pages/addMember/addMember' }) wx.navigateTo({ url: '/pages/addMember/addMember' })
}, },
}) })