fix:疗休养整改

1、h5修改/查看报名表单增加手机号字段;
2、h5表单同步web字段必填标识显示逻辑;
3、修改/查看报名界面适配优化,样式统一;
4、h5修改/报名界面亲属信息-与本人关系选择后不正常回显问题修复,亲属信息-年龄未限制最大上限导致越界报错问题修复
This commit is contained in:
2026-10-30 16:11:08 +08:00
parent 001d456513
commit 35877f4b5c
2 changed files with 57 additions and 24 deletions
@@ -276,8 +276,22 @@ layout("/layouts/platform_h5.html"){
font-weight: 600;
}
/* 导航栏参与弹层布局,正文独立滚动,避免固定导航遮住首张卡片。 */
.tour-record-popup {
display: flex;
flex-direction: column;
overflow: hidden;
padding-top: env(safe-area-inset-top);
box-sizing: border-box;
}
.tour-record-popup > .van-nav-bar {
flex-shrink: 0;
}
.tour-popup-body {
height: calc(100vh - 46px);
flex: 1;
min-height: 0;
overflow-y: auto;
padding: 10px 12px 76px;
background: #f4f6f8;
@@ -594,7 +608,7 @@ layout("/layouts/platform_h5.html"){
}
.tour-popup-body {
padding: 12px 12px 82px;
padding: 12px 12px calc(82px + env(safe-area-inset-bottom));
background-color: #f3f7fd;
}
@@ -616,6 +630,12 @@ layout("/layouts/platform_h5.html"){
box-shadow: 0 -6px 18px rgba(38, 66, 103, .08);
}
.tour-bottom-bar .tour-cancel-button {
border: 0;
color: #65748a;
background-color: #f0f2f5;
}
/* 列表页结构与提案校工会预审核保持一致,业务字段及操作条件继续沿用疗休养逻辑。 */
.tour-my-page .van-nav-bar {
background-color: #fff;
@@ -917,8 +937,8 @@ layout("/layouts/platform_h5.html"){
</div>
</van-popup>
<van-popup v-model="detailVisible" position="right" :style="{ width: '100%', height: '100%' }" :close-on-click-overlay="false">
<van-nav-bar title="报名详情" left-text="返回" left-arrow @click-left="closeHistoryPopup('detail')" fixed placeholder></van-nav-bar>
<van-popup v-model="detailVisible" class="tour-record-popup" position="right" :style="{ width: '100%', height: '100%' }" :close-on-click-overlay="false">
<van-nav-bar title="报名详情" left-text="返回" left-arrow @click-left="closeHistoryPopup('detail')"></van-nav-bar>
<div class="tour-popup-body">
<div class="tour-section">
<div class="tour-section-title">教职工信息</div>
@@ -926,6 +946,7 @@ layout("/layouts/platform_h5.html"){
<van-cell title="姓名" :value="detail.userName || ''"></van-cell>
<van-cell title="性别" :value="detail.gender || ''"></van-cell>
<van-cell title="身份证号" :value="detail.idCard || ''"></van-cell>
<van-cell title="手机号" :value="detail.mobile || ''"></van-cell>
<van-cell title="所在单位" :value="detail.unitName || ''"></van-cell>
<van-cell title="所在工会" :value="detail.unionName || ''"></van-cell>
</div>
@@ -972,14 +993,15 @@ layout("/layouts/platform_h5.html"){
</div>
</van-popup>
<van-popup v-model="signupVisible" position="right" :style="{ width: '100%', height: '100%' }" :close-on-click-overlay="false" @closed="destroySignup">
<van-nav-bar title="修改报名" left-text="返回" left-arrow @click-left="closeHistoryPopup('signup')" fixed placeholder></van-nav-bar>
<van-popup v-model="signupVisible" class="tour-record-popup" position="right" :style="{ width: '100%', height: '100%' }" :close-on-click-overlay="false" @closed="destroySignup">
<van-nav-bar title="修改报名" left-text="返回" left-arrow @click-left="closeHistoryPopup('signup')"></van-nav-bar>
<div class="tour-popup-body">
<div class="tour-section">
<div class="tour-section-title">教职工信息</div>
<van-field label="姓名" readonly v-model="signupForm.userName"></van-field>
<van-field label="工号" readonly v-model="signupForm.jobNo"></van-field>
<van-field label="身份证号" v-model="signupForm.idCard" maxlength="30" placeholder="请填写身份证号"></van-field>
<van-field required label="身份证号" v-model="signupForm.idCard" maxlength="30" placeholder="请填写身份证号"></van-field>
<van-field required label="手机号" v-model="signupForm.mobile" type="tel" maxlength="11" placeholder="请填写手机号"></van-field>
<van-field label="所在工会" readonly v-model="signupForm.unionName"></van-field>
</div>
@@ -1007,12 +1029,12 @@ layout("/layouts/platform_h5.html"){
<div v-if="isDirectFamilyLine(signupForm)" class="tour-section">
<div class="tour-section-title">直系亲属线路</div>
<van-field label="亲属姓名" v-model="directRelativeForm.relativeName" maxlength="100" placeholder="请输入亲属姓名"></van-field>
<van-field label="所在单位" v-model="directRelativeForm.unitName" maxlength="100" placeholder="请输入所在单位"></van-field>
<van-field readonly clickable is-link label="亲属关系" v-model="directRelativeForm.relationshipName" placeholder="请选择亲属关系" @click="openDirectRelativePicker"></van-field>
<van-field label="线路名称" v-model="directRelativeForm.lineName" maxlength="100" placeholder="请输入线路名称"></van-field>
<van-field label="出行开始" v-model="directRelativeForm.travelStartTime" type="date" placeholder="请选择出行开始日期"></van-field>
<van-field label="出行结束" v-model="directRelativeForm.travelEndTime" type="date" placeholder="请选择出行结束日期"></van-field>
<van-field required label="亲属姓名" v-model="directRelativeForm.relativeName" maxlength="100" placeholder="请输入亲属姓名"></van-field>
<van-field required label="所在单位" v-model="directRelativeForm.unitName" maxlength="100" placeholder="请输入所在单位"></van-field>
<van-field required readonly clickable is-link label="亲属关系" v-model="directRelativeForm.relationshipName" placeholder="请选择亲属关系" @click="openDirectRelativePicker"></van-field>
<van-field required label="线路名称" v-model="directRelativeForm.lineName" maxlength="100" placeholder="请输入线路名称"></van-field>
<van-field required label="出行开始" v-model="directRelativeForm.travelStartTime" type="date" placeholder="请选择出行开始日期"></van-field>
<van-field required label="出行结束" v-model="directRelativeForm.travelEndTime" type="date" placeholder="请选择出行结束日期"></van-field>
</div>
<div v-if="allowFamily && !isDirectFamilyLine(signupForm)" class="tour-section">
@@ -1054,7 +1076,7 @@ layout("/layouts/platform_h5.html"){
:title="familyTabTitle(family, familyIndex)">
<div class="tour-family-form">
<van-field required label="姓名" v-model="family.familyName" maxlength="100" placeholder="请填写姓名"></van-field>
<van-field required label="年龄" v-model.number="family.age" type="digit" placeholder="请填写年龄"></van-field>
<van-field required label="年龄" v-model.number="family.age" type="number" :formatter="formatFamilyAge" placeholder="请填写年龄"></van-field>
<van-field required label="性别">
<template #input>
<van-radio-group v-model="family.gender" direction="horizontal">
@@ -1065,7 +1087,7 @@ layout("/layouts/platform_h5.html"){
</van-field>
<van-field :required="familyContactRequired(family)" label="身份证号码" v-model="family.idCard" maxlength="18" placeholder="请填写身份证号码" @blur="normalizeFamilyIdCard(family)"></van-field>
<van-field :required="familyContactRequired(family)" label="手机号" v-model="family.mobile" type="tel" maxlength="30" placeholder="请填写手机号"></van-field>
<van-field required readonly clickable is-link label="与本人关系" v-model="family.relationship" placeholder="请选择关系" @click="openRelationshipPicker"></van-field>
<van-field required readonly clickable is-link label="与本人关系" v-model="family.relationship" placeholder="请选择关系" @click="openRelationshipPicker(familyIndex)"></van-field>
<van-field v-if="fillBedInfo" readonly clickable is-link label="床型" v-model="family.bedType" placeholder="请选择房型" @click="openBedPicker('family')"></van-field>
<van-field v-if="fillBedInfo" label="床位" v-model="family.bedInfo" maxlength="100" placeholder="请输入床位数量"></van-field>
<van-field v-if="fillBedInfo" label="意向拼床人" v-model="family.intendedRoommate" maxlength="100" placeholder="请输入意向拼床人"></van-field>
@@ -1087,8 +1109,8 @@ layout("/layouts/platform_h5.html"){
<div v-else class="tour-family-empty">暂无亲属,请按需添加</div>
</div>
</div>
<div class="tour-bottom-bar">
<van-button v-if="signupForm.id" type="danger" plain block round :loading="cancelLoading" @click="cancelSignup">取消报名</van-button>
<div class="tour-bottom-bar tour-h5-fixed-bar">
<van-button v-if="signupForm.id" class="tour-cancel-button" type="default" block round :loading="cancelLoading" @click="cancelSignup">取消报名</van-button>
<van-button type="info" block round :loading="signupLoading" @click="submitSignup">提交</van-button>
</div>
</van-popup>
@@ -1442,6 +1464,7 @@ layout("/layouts/platform_h5.html"){
userName: "",
gender: "",
idCard: "",
mobile: "",
unitId: "",
unitName: "",
unionId: "",
@@ -1601,6 +1624,11 @@ layout("/layouts/platform_h5.html"){
isBlankValue(value) {
return value === undefined || value === null || !String(value).trim()
},
// 与 Web 端一致,亲属年龄限定为 0~120 岁整数,清空时保留必填状态。
formatFamilyAge(value) {
const age = parseInt(value, 10)
return Number.isNaN(age) ? "" : String(Math.min(120, Math.max(0, age)))
},
// 年满16周岁的亲属才强制填写身份证号码和手机号。
familyContactRequired(family) {
return family && !this.isBlankValue(family.age) && Number(family.age) >= 16
@@ -307,9 +307,9 @@ layout("/layouts/platform_tour_signup_h5.html"){
<div v-if="isDirectFamilyLine(signupForm)" class="tour-apply-card">
<div class="tour-apply-title">直系亲属线路</div>
<van-field label="亲属姓名" v-model="directRelativeForm.relativeName" maxlength="100" placeholder="请输入亲属姓名"></van-field>
<van-field label="所在单位" v-model="directRelativeForm.unitName" maxlength="100" placeholder="请输入所在单位"></van-field>
<van-field
<van-field required label="亲属姓名" v-model="directRelativeForm.relativeName" maxlength="100" placeholder="请输入亲属姓名"></van-field>
<van-field required label="所在单位" v-model="directRelativeForm.unitName" maxlength="100" placeholder="请输入所在单位"></van-field>
<van-field required
label="亲属关系"
readonly
clickable
@@ -318,9 +318,9 @@ layout("/layouts/platform_tour_signup_h5.html"){
v-model="directRelativeForm.relationshipName"
@click="openDirectRelativePicker">
</van-field>
<van-field label="线路名称" v-model="directRelativeForm.lineName" maxlength="100" placeholder="请输入线路名称"></van-field>
<van-field label="出行开始" v-model="directRelativeForm.travelStartTime" type="date" placeholder="请选择出行开始日期"></van-field>
<van-field label="出行结束" v-model="directRelativeForm.travelEndTime" type="date" placeholder="请选择出行结束日期"></van-field>
<van-field required label="线路名称" v-model="directRelativeForm.lineName" maxlength="100" placeholder="请输入线路名称"></van-field>
<van-field required label="出行开始" v-model="directRelativeForm.travelStartTime" type="date" placeholder="请选择出行开始日期"></van-field>
<van-field required label="出行结束" v-model="directRelativeForm.travelEndTime" type="date" placeholder="请选择出行结束日期"></van-field>
</div>
<div class="tour-apply-card">
@@ -365,7 +365,7 @@ layout("/layouts/platform_tour_signup_h5.html"){
:title="familyTabTitle(family, familyIndex)">
<div class="tour-family-form">
<van-field required label="姓名" v-model="family.familyName" maxlength="100" placeholder="请填写姓名"></van-field>
<van-field required label="年龄" v-model.number="family.age" type="digit" placeholder="请填写年龄"></van-field>
<van-field required label="年龄" v-model.number="family.age" type="number" :formatter="formatFamilyAge" placeholder="请填写年龄"></van-field>
<van-field required label="性别">
<template #input>
<van-radio-group v-model="family.gender" direction="horizontal">
@@ -753,6 +753,11 @@ layout("/layouts/platform_tour_signup_h5.html"){
isBlankValue(value) {
return value === undefined || value === null || !String(value).trim()
},
// 与 Web 端一致,亲属年龄限定为 0~120 岁整数,清空时保留必填状态。
formatFamilyAge(value) {
const age = parseInt(value, 10)
return Number.isNaN(age) ? "" : String(Math.min(120, Math.max(0, age)))
},
// 年满16周岁的亲属才强制填写身份证号码和手机号。
familyContactRequired(family) {
return family && !this.isBlankValue(family.age) && Number(family.age) >= 16