卡口登记

This commit is contained in:
shijingjing
2022-09-23 16:09:06 +08:00
parent 3b5aec0bca
commit c1ea828f77
4 changed files with 220 additions and 142 deletions

View File

@@ -1,5 +1,6 @@
<template>
<div class="AddGetway">
<div class="tips">请确保以下信息全部由本人填写本人对所填写内容的真实性和完整性负责</div>
<!-- 基本信息 -->
<div class="title">基本信息</div>
<div class="form-item__group">
@@ -10,7 +11,7 @@
<h2>卡口选择</h2>
</div>
<div class="form-item__right">
<AiSelect v-model="form.type" dict="epidemicRecentPersonType" class="select"></AiSelect>
<AiSelect v-model="form.gatewayId" :list="getwayData" class="select"></AiSelect>
</div>
</div>
</div>
@@ -54,7 +55,7 @@
<h2>人员类别</h2>
</div>
<div class="form-item__right">
<AiSelect v-model="form.type" dict="epidemicRecentPersonType" class="select"></AiSelect>
<AiSelect v-model="form.type" dict="EP_registerPersonType" class="select"></AiSelect>
</div>
</div>
</div>
@@ -65,7 +66,7 @@
<h2>高危行业</h2>
</div>
<div class="form-item__right">
<AiSelect v-model="form.type" dict="epidemicRecentPersonType" class="select"></AiSelect>
<AiSelect v-model="form.highRiskIndustries" dict="EP_highRiskIndustries" class="select"></AiSelect>
</div>
</div>
</div>
@@ -120,7 +121,6 @@
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
@@ -128,25 +128,25 @@
<h2>出行方式</h2>
</div>
<div class="form-item__right">
<AiSelect dict="epidemicRecentTravel" v-model="form.travelType" class="select"></AiSelect>
<AiSelect dict="EP_travelType" v-model="form.travelType" class="select"></AiSelect>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<i style="margin-right:8px;"></i>
<h2>车次/航班</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.name" :maxlength="20"/>
<input placeholder="请输入" v-model="form.trainNo" :maxlength="20"/>
</div>
</div>
</div>
<div class="form-item form-item__textarea">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<i style="margin-right:8px;"></i>
<h2>行程描述</h2>
</div>
<div class="form-item__right">
@@ -159,7 +159,7 @@
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>抵平时间</h2>
<h2>到达时间</h2>
</div>
<div class="form-item__right">
<div class="ai-area" @click="isShowEndTime = true">
@@ -176,7 +176,7 @@
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>返乡地区</h2>
<h2>到达地区</h2>
</div>
<div class="form-item__right">
<AiAreaPicker class="ai-area" v-model="form.arriveAreaId" :fullName.sync="form.arriveAreaName" :areaId="$areaId">
@@ -193,7 +193,7 @@
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>返乡地址</h2>
<h2>到达地址</h2>
</div>
<div class="form-item__right">
<textarea auto-height v-model="form.arriveAddress" :maxlength="500" placeholder="请输入详细的返乡地址"
@@ -213,20 +213,20 @@
<h2>是否有风险旅居史</h2>
</div>
<div class="form-item__right">
<AiRadio style="width: 100%;" v-model="form.checkResult" dict="yesOrNo"/>
<AiRadio style="width: 100%;" v-model="form.fromHighRiskArea" dict="yesOrNo"/>
</div>
</div>
</div>
<div class="form-item" v-show="form.checkResult == 1">
<div class="form-item" v-show="form.fromHighRiskArea == 1">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>风险地区</h2>
</div>
<div class="form-item__right">
<AiAreaPicker class="ai-area" v-model="form.startAreaId" :fullName.sync="form.startAreaName" all>
<AiAreaPicker class="ai-area" v-model="form.highRiskAreaId" :fullName.sync="form.highRiskAreaName" all>
<div class="ai-area__wrapper">
<span class="label" v-if="form.startAreaName">{{ form.startAreaName }}</span>
<span class="label" v-if="form.highRiskAreaName">{{ form.highRiskAreaName }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
</div>
@@ -241,7 +241,7 @@
<h2>近七日内是否接触新冠确诊或疑似患者</h2>
</div>
<div class="form-item__right">
<AiRadio style="width: 100%;" v-model="form.checkResult" dict="epidemicTouchInFourteen"/>
<AiRadio style="width: 100%;" v-model="form.contactPatients" dict="epidemicTouchInFourteen"/>
</div>
</div>
</div>
@@ -252,18 +252,18 @@
<h2>是否有健康异常情况</h2>
</div>
<div class="form-item__right">
<AiRadio style="width: 100%;" v-model="form.checkResult" dict="yesOrNo"/>
<AiRadio style="width: 100%;" v-model="form.abnormalHealth" dict="yesOrNo"/>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item" v-if="form.abnormalHealth==1">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>异常情况</h2>
</div>
<div class="form-item__right">
<AiSelect dict="epidemicRecentTravel" v-model="form.travelType" class="select"></AiSelect>
<AiSelect dict="EP_abnormalType" v-model="form.abnormalType" class="select"></AiSelect>
</div>
</div>
</div>
@@ -279,29 +279,23 @@
<h2>同行人数</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.temperature" :maxlength="20"/>
<input placeholder="请输入" v-model="form.companionCount" :maxlength="20"/>
<i></i>
</div>
</div>
</div>
<div>
<NamePhone v-for="(item, index) in people" :key="index" ref="NamePhoneRef" :name.sync="item.name"
<div style="padding: 16px 16px">同行人信息</div>
<div class="form">
<NamePhone v-for="(item, index) in people" :key="index" :name.sync="item.name"
:phone.sync="item.phone" :index="index" @delCountHandle="delCountHandle"/>
</div>
<div class="addCount">
<u-button type="primary" @click="addCountHandle">继续添加</u-button>
</div>
<div class="addCount" @click="addCountHandle">添加同行人</div>
</div>
<u-picker mode="time" :params="dataParams" v-model="isShowDate" @confirm="onDateChange"></u-picker>
<u-picker mode="time" :params="params" v-model="isShowStartTime" @confirm="onStartChange"></u-picker>
<u-picker mode="time" :params="params" v-model="isShowEndTime" @confirm="onEndChange"></u-picker>
<div class="agree">
<u-checkbox v-model="isAgree"></u-checkbox>
<span class="deal">以上信息是我本人填写本人对信息内容的真实性和完整性负责</span>
</div>
<div class="btn-wrapper">
<div class="btn" hover-class="text-hover" @click="submit">提交</div>
</div>
@@ -315,6 +309,37 @@ export default {
appName: "添加卡口记录",
data() {
return {
form: {
infoType: '0',
gatewayId: '', // 卡口id
gatewayName: '', // 卡口名称
phone: '',
name: '',
idNumber: '',
type: '', // 人员类别
highRiskIndustries: '',
startTime: '',
startAreaId: '',
startAreaName: '',
startAddress: '',
travelType: '',
trainNo: '', // 车次航班
description: '',
arriveTime: '',
arriveAreaId: '',
arriveAreaName: '',
arriveAddress: '',
fromHighRiskArea: '',
highRiskAreaId: '',
highRiskAreaName: '',
contactPatients: '',
abnormalHealth: '',
abnormalType: '',
companionCount: '0', // 同行人数量
companionList: [], // 同行人集合
riskLevel: '1',
},
isShowType: false,
isShowEndTime: false,
isShowStartTime: false,
@@ -326,46 +351,34 @@ export default {
hour: true,
minute: true
},
dataParams: {
year: true,
month: true,
day: true
},
form: {
arriveAddress: '',
arriveAreaId: '',
arriveAreaName: '',
arriveTime: '',
checkPhoto: [],
checkResult: '',
checkTime: '',
description: '',
health: [],
idNumber: '',
name: '',
phone: '',
startAddress: '',
startAreaId: '',
startAreaName: '',
startTime: '',
temperature: '',
touchInFourteen: '',
travelType: '',
type: '',
unusual: '',
},
dictList: [],
arr: [],
gridList: [[], [], []],
flag: false,
$areaId: '',
people: [{
name: '',
phone: '',
}]
}],
current: 1,
getwayData: [],
flag: false,
}
},
watch: {
startAreaId: {
handler(v){
if(v?.length) {
console.log(v);
this.getReskLevel(v)
}
},
deep: true,
immediate: true,
}
},
components: {
NamePhone,
},
@@ -374,8 +387,10 @@ export default {
...mapState(['user'])
},
onLoad() {
this.$areaId = this.user.$areaId
this.getwayList()
},
methods: {
@@ -390,10 +405,6 @@ export default {
this.people.splice(index, 1);
},
onDateChange(e) {
this.form.checkTime = `${e.year}-${e.month}-${e.day}`
},
onStartChange(e) {
this.form.startTime = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}`
},
@@ -402,107 +413,138 @@ export default {
this.form.arriveTime = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}`
},
// 获取卡口列表
getwayList() {
this.$instance.post(`/app/appepidemicpreventiongateway/list`, null, {
current: this.current,
size: 300,
}).then(res => {
if(res?.data) {
this.getwayData = res.data.records.map(item=> {
return {
label: item.name,
value: item.id
}
})
}
})
},
// 获取风险等级
getReskLevel(id) {
this.$instance.post(`/app/appepidemicpreventionriskarea/queryAreaRiskLevel`,null, {
areaId: id,
}).then(res => {
console.log(res);
})
},
submit() {
if (!this.form.gatewayId) {
return this.$toast('请选择卡口')
}
if (!this.form.phone) {
return this.$toast('请输入手机号码')
}
if (!this.form.name) {
return this.$toast('请输入返乡人员姓名')
return this.$toast('请输入姓名')
}
if (!this.form.idNumber) {
return this.$toast('请输入返乡人员身份证号')
return this.$toast('请输入身份证号')
}
if (!/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(this.form.idNumber)) {
return this.$toast('请输入正确的身份证账号')
}
if (!this.form.phone) {
return this.$toast('请输入返乡人员手机号码')
}
if (!/^1[0-9]{10,10}$/.test(this.form.phone)) {
return this.$toast('请输入正确的手机号码')
if (!this.form.highRiskIndustries) {
return this.$toast('请选择高危行业')
}
if (!this.form.type) {
return this.$toast('请选择人员类别')
}
if (!this.form.travelType) {
return this.$toast('请选择出行方式')
}
if (!this.form.startTime) {
return this.$toast('请选择出发时间')
}
// if (new Date(this.form.startTime.replace(/-/g, '/')).getTime() > new Date().getTime()) {
// return this.$toast('出发时间不得晚于当前时间')
// }
if (new Date(this.form.startTime.replace(/-/g, '/')).getTime() > new Date().getTime()) {
return this.$toast('出发时间不得晚于当前时间')
}
if (!this.form.startAreaName) {
if (!this.form.startAreaId) {
return this.$toast('请选择出发地区')
}
if (this.form.startAreaId.substr(this.form.startAreaId.length - 3, 3) === '000') {
return this.$toast('出发地区必须选到村或社区')
}
if (!this.form.startAddress) {
return this.$toast('请输入出发详细地址')
return this.$toast('请输入出发地址')
}
if (!this.form.travelType) {
return this.$toast('请选择出行方式')
}
if (!this.form.arriveTime) {
return this.$toast('请选择到达时间')
}
if (new Date(this.form.startTime.replace(/-/g, '/')).getTime() >= new Date(this.form.arriveTime.replace(/-/g, '/')).getTime()) {
return this.$toast('到达时间不得早于出发时间')
}
if (!this.form.arriveAreaName) {
return this.$toast('请选择到达地区')
}
if (this.form.arriveAreaId.substr(this.form.arriveAreaId.length - 3, 3) === '000') {
return this.$toast('到达地区必须选到村或社区')
}
if (!this.form.arriveAddress) {
return this.$toast('请输入返乡地址')
return this.$toast('请输入到达地址')
}
if (!this.form.description) {
return this.$toast('请输入行程描述')
}
if (!this.form.checkTime) {
return this.$toast('请选择核酸检测日期')
}
if (!this.form.checkPhoto.length) {
return this.$toast('请上传本人健康码截图或核酸检测报告')
if (!this.form.fromHighRiskArea) {
return this.$toast('请选择是否有风险旅居史')
}
if (!this.form.checkResult) {
return this.$toast('请选择核酸检测结果')
}
if (!this.form.temperature) {
return this.$toast('请输入当前体温')
}
if (!this.form.touchInFourteen) {
return this.$toast('请选择14天内是否接触新冠确诊或疑似患者')
if (this.form.fromHighRiskArea == 1) {
if (!this.form.highRiskAreaId) {
return this.$toast('请选择风险旅居地区')
}
}
if (!this.form.health.length) {
return this.$toast('请选择当前健康状况')
if (!this.form.contactPatients) {
return this.$toast('请选择近七日内是否接触新冠确诊或疑似患者')
}
if (!this.form.abnormalHealth) {
return this.$toast('请选择是否有健康异常情况')
}
if (this.form.abnormalHealth == 1) {
if (!this.form.abnormalType) {
return this.$toast('请选择异常情况')
}
}
if (this.flag) return
this.flag = true
this.$loading()
this.$instance.post(`/app/appepidemicbackhomerecord/addOrUpdate`, {
this.$instance.post(`/app/appepidemicpreventionregisterinfo/addOrUpdate`, {
...this.form,
openid: this.user.openid,
startTime: this.form.startTime + ':00',
arriveTime: this.form.arriveTime + ':00',
checkTime: this.form.checkTime + ' 00:00:00',
health: this.form.health.join(','),
checkPhoto: JSON.stringify(this.form.checkPhoto)
}).then(res => {
this.$hideLoading()
this.flag = false
@@ -523,6 +565,15 @@ export default {
.AddGetway {
padding-bottom: 140px;
.tips {
line-height: 1.3;
padding: 32px 32px;
color: #FF883C;
font-size: 30px;
text-align: justify;
background: #FFF8F3;
}
.title {
padding: 16px 32px 0 32px;
box-sizing: border-box;
@@ -535,8 +586,9 @@ export default {
margin-bottom: 24px;
background: #fff;
.addCount {
padding: 0 32px;
padding: 16px 32px;
box-sizing: border-box;
color: #4181FF;
::v-deep .u-btn--primary {
border-radius: 16px;
@@ -715,9 +767,9 @@ export default {
}
}
.agree {
.form {
padding: 0 32px;
display: flex;
}
box-sizing: border-box;
}
}
</style>

View File

@@ -9,7 +9,7 @@
</div>
</div>
<div class="home-list">
<div class="item" hover-class="bg-hover" @click="$linkTo(`./Detail?id=${item.id}`)"
<div class="item" hover-class="bg-hover" @click="$linkTo(`./DetailGetway?id=${item.id}`)"
v-for="(item, index) in list" :key="index">
<div class="item-top">
<h2>{{ item.name }}</h2>
@@ -29,6 +29,10 @@
<image src="/static/img/to-date.png"/>
<span>{{ item.arriveTime && item.arriveTime.substr(0, item.arriveTime.length - 3) }} 到达</span>
</div>
<div class="item-info__item">
<image src="/static/img/kakou.png"/>
<span>{{ item.gatewayName }}</span>
</div>
</div>
</div>
<AiEmpty v-if="list.length==0"/>
@@ -73,21 +77,17 @@ export default {
this.$linkTo('./AddGetway')
},
getList() {
this.$instance.post(`/app/appepidemicbackhomerecord/list`, null, {
this.$instance.post(`/app/appepidemicpreventionregisterinfo/list`, null, {
params: {
openId: this.user.openId,
createUserId: this.user.id,
current: this.current,
size: 15
size: 10,
}
}).then(res => {
uni.hideLoading()
if (res?.data) {
this.total = res.data.total
if (this.current > 1) {
this.list = [...this.list, ...res.data.records]
} else {
this.list = res.data.records
}
this.list = this.current == 1? res.data.records:[...this.list, ...res.data.records]
}
}).catch(() => {
uni.hideLoading()

View File

@@ -1,21 +1,25 @@
<template>
<div class="namePhone">
<u-form :model="form" ref="uForm">
<u-form-item label="姓名" :rules="[{ required: true, message: '请输入姓名' }]">
<u-input v-model="form.username" type="text" placeholder="请输入" maxLength="10" />
</u-form-item>
<u-form-item label="手机号" :rules="[{ required: true, message: '请输入手机号' }]">
<u-input v-model="form.uaerphone" type="number" placeholder="请输入" maxLength="11" />
</u-form-item>
</u-form>
<u-button type="warning" @click="removeMe">删除</u-button>
<div class="uForm">
<div class="uName">
<h4>姓名</h4>
<u-input v-model="username" type="text" placeholder="请输入" :maxlength="10" clearable />
</div>
<div class="uPhone">
<h4>手机号</h4>
<u-input v-model="userphone" type="number" placeholder="请输入" :maxlength="11" clearable />
</div>
</div>
<div class="btn">
<div class="removeBtn" @click="removeMe">删除</div>
</div>
</div>
</template>
<script>
export default {
props: {
name: Number,
name: String,
phone: String,
index: Number,
},
@@ -28,7 +32,7 @@ export default {
this.$emit("update:name", val);
},
},
uaerphone: {
userphone: {
get() {
return this.phone;
},
@@ -37,14 +41,6 @@ export default {
},
},
},
data() {
return {
form: {
username: "",
uaerphone: "",
}
};
},
methods: {
removeMe() {
this.$emit("delCountHandle", this.index);
@@ -57,8 +53,38 @@ export default {
.namePhone {
width: 100%;
height: 100%;
.uForm {
display: flex;
align-items: center;
margin-bottom: 10px;
.uForm {
width: calc(100% - 100px);
background: #EFF5FA;
border-radius: 8px;
.uName,
.uPhone {
display: flex;
align-items: center;
height: 96px;
line-height: 96px;
h4 {
width: 200px;
text-align: center;
}
u-input {
width: 100%;
}
}
}
.btn {
width: 100px;
.removeBtn {
width: 80px;
background: #ff0000;
border-radius: 8px;
color: #fff;
text-align: center;
}
}
}
</style>

BIN
src/static/img/kakou.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B