epmet pc工作端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

797 lines
21 KiB

<template>
<div class="bg-app">
<div class="title">
居民信息填报
</div>
<div class="main">
<div class="content">
<mt-cell title="所属社区">
<span style="margin-right:20px">{{shequName}}</span>
</mt-cell>
<div class="line"></div>
<div v-if="formData.origin === 'internal'">
<div @click="handelSel('community')">
<mt-cell title="小区"
is-link>
<span class="picker_content"
v-if="selVillage">{{selVillage.label}}</span>
<span v-else>请选择</span>
</mt-cell>
</div>
<div class="line"></div>
<div @click="handelSel('building')">
<mt-cell title="楼宇"
is-link>
<span class="picker_content"
v-if="selBuild">{{selBuild.label}}</span>
<span v-else>请选择</span>
</mt-cell>
</div>
<div class="line"></div>
<div @click="handelSel('unit')">
<mt-cell title="单元"
is-link>
<span class="picker_content"
v-if="selUnit">{{selUnit.label}}</span>
<span v-else>请选择</span>
</mt-cell>
</div>
<div class="line"></div>
<mt-field v-if="selUnit && selUnit.value==='else'"
class="my-field"
:disableClear="true"
label="单元号"
placeholder="请输入"
v-model="unitContent"></mt-field>
<div class="line"></div>
<div v-if="!selUnit || selUnit.value!=='else'"
@click="handelSel('room')">
<mt-cell title="房屋"
is-link>
<span class="picker_content"
v-if="selHome">{{selHome.label}}</span>
<span v-else>请选择</span>
</mt-cell>
<div class="line"></div>
</div>
<mt-field v-if="(selUnit&&selUnit.value==='else')||(selHome&&selHome.value==='else')"
class="my-field"
:disableClear="true"
label="房屋"
placeholder="请输入"
v-model="homeContent"></mt-field>
</div>
<div v-if="formData.origin === 'external'">
<mt-field class="my-field"
:disableClear="true"
label="详细地址"
placeholder="请输入"
v-model="formData.address"></mt-field>
<div class="line"></div>
</div>
</div>
<div class="content content1">
<div @click="handelSel('roomType')">
<mt-cell title="房屋类型"
is-link>
<span class="picker_content"
v-if="selHomeType">{{selHomeType.label}}</span>
<span v-else>请选择</span>
</mt-cell>
</div>
<div class="line"></div>
<mt-field class="my-field"
label="户主姓名"
:disableClear="true"
placeholder="请输入"
v-model="formData.houseHolderName"></mt-field>
<div class="line"></div>
<mt-field class="my-field"
label="居住成员人数"
:disableClear="true"
placeholder="请输入"
type="number"
@blur.native.capture="bluraa"
v-model="formData.totalResi"></mt-field>
<div class="line"></div>
</div>
<div v-for="(item,index) in memberList"
:key="index">
<div class="content content1">
<div class="member_title">{{'成员'+(index+1)}}</div>
<mt-field class="my-field"
:disableClear="true"
:label="'姓名'"
placeholder="请输入"
v-model="item.name"></mt-field>
<div class="line"></div>
<mt-field class="my-field"
:disableClear="true"
:label="'身份证'"
placeholder="请输入"
v-model="item.idNum"></mt-field>
<div class="line"></div>
<mt-field class="my-field"
:disableClear="true"
:label="'手机号'"
placeholder="请输入"
type="tel"
v-model="item.mobile"></mt-field>
<div class="line"></div>
<div @click="handelSel('detNum',index)">
<mt-cell :title="'参加核酸检测次数'"
is-link>
<span class="picker_content"
v-if="item.selDetNum.value">{{item.selDetNum.label}}</span>
<span v-else>请选择</span>
</mt-cell>
</div>
<div class="line"></div>
<div @click="handelSel('detCondition',index)">
<mt-cell :title="'新冠疫苗接种情况'"
is-link>
<span class="picker_content"
v-if="item.selDetCondition.value">{{item.selDetCondition.label}}</span>
<span v-else>请选择</span>
</mt-cell>
</div>
<div class="line"></div>
</div>
</div>
</div>
<div class="div-btn">
<mt-button @click="handleSubmit"
type="primary"
:disabled="btnDisabled"
size="small">提交</mt-button>
</div>
<mt-popup v-model="popupVisible"
popup-transition="popup-fade"
closeOnClickModal="true"
position="bottom">
<mt-picker :slots="popupSlots"
value-key="label"
@change="onPickerChange"
showToolbar>
<div class="picker-toolbar-title">
<div class="usi-btn-cancel"
@click="popupVisible = !popupVisible">取消</div>
<div class="">请选择</div>
<div class="usi-btn-sure"
@click="popupOk()">确定</div>
</div>
</mt-picker>
</mt-popup>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import { Toast } from "mint-ui";
let loading // 加载动画
export default {
data () {
return {
btnDisabled: false,
popupVisible: false,
//二维码带来数据
shequId: '',//社区id 6e511da6816e53af4cda952365a26eb9 德兴路 1202807601961984002
shequName: '',//社区名称
customerId: '',//客户id 45687aa479955f9d06204d415238f7cc
communityList: [],
buildingList: [],
unitList: [],
roomList: [],
selType: 'community',//弹出框所显示的数据类型:community、building、unit、room
pickerData: [],
selObj: {},
selVillage: null,
selBuild: null,
selUnit: null,
selHome: null,
selHomeType: null,
unitContent: '',
homeContent: '',////选择其他时,输入的值
formData: {
origin: '',//兴德路社区:internal;其他社区:external
villageId: '',//小区id;外部不显示此组件;如果是内部必填。用户选择其他,可以自己输入,前端把输入的内容放在这个字段即可
buildId: '',//楼栋id;外部不显示此组件;如果是内部必填,用户选择其他,可以自己输入,前端把输入的内容放在这个字段即可
unitId: '',//单元id;外部不显示磁组件。如果是内部必填。用户可以选择其他,自己输入,前端把输入的内容放在这个字段即可
homeId: '',//房屋id;外部不展示此组件。如果是内部必填。用户选择其他,可以自己输入,前端把输入的内容放在这个字段即可
address: '',//外部:用户自己输入;内部:把小区名楼栋名单元名房屋名拼接起来。例如:绿地望海领域10号楼一单元101
houseType: '',//1自由0租住
houseHolderName: '',//户主姓名
totalResi: 1,//居住成员人数
customerId: '',//customerId
},
selMemberIndex: null,
memberList: [
{
name: '',
mobile: '',
idNum: '',
customerId: '',
heSuanCount: 0,
ymjz: '',
selDetNum: {},
selDetCondition: {}
}
],
roomTypeList: [
{
value: '1',
label: '自有'
},
{
value: '0',
label: '租住'
},
],
detNumList: [],//参加核酸次数list
detConditionList: [//参加核酸类型list
{
// label: '已全程接种(包含加强针或序贯)',
label: '已全程接种',
value: '1'
},
{
label: '未全程接种',
value: '2'
},
{
label: '未接种',
value: '0'
},
],
popupSlots: [//问题类型弹框数据
{
values: []
}
],
}
},
components: {},
computed: {
},
created () { },
mounted () {
console.log(this.$route)
this.shequId = this.$route.params.id
this.customerId = this.$route.query.customerId
this.shequName = this.$route.query.name
let envShow = process.env.VUE_APP_NODE_ENV
let internalShequId = ''
if (envShow === 'dev' || envShow === 'prod:sit') { // 开发环境
internalShequId = '6e511da6816e53af4cda952365a26eb9'
} else if (envShow === 'prod:uat') { // 体验
internalShequId = '6e511da6816e53af4cda952365a26eb9'
} else if (envShow === 'prod') { // 生产
internalShequId = '1202807601961984002'
}
this.formData.customerId = this.customerId
if (this.shequId === internalShequId) {
this.formData.origin = 'internal'
} else {
this.formData.origin = 'external'
}
this.loadVillage()
this.detNumList = []
for (let i = 1; i < 11; i++) {
let obj = {
value: i + '',
label: i + '次',
}
this.detNumList.push(obj)
}
},
methods: {
bluraa () {
let objTemp = {
name: '',
mobile: '',
idNum: '',
heSuanCount: 0,
ymjz: '',
selDetNum: {},
customerId: '',
selDetCondition: {}
}
if (this.memberList.length > this.formData.totalResi) {//已有成员数量比设置的数量大,删除多余
let differ = this.memberList.length - this.formData.totalResi
this.memberList.splice(this.formData.totalResi, differ)
} else if (this.memberList.length < this.formData.totalResi) {////已有成员数量比设置的数量小,补充空对象
let differ = this.formData.totalResi - this.memberList.length
for (let i = 0; i < differ; i++) {
let temp = JSON.parse(JSON.stringify(objTemp))
this.memberList.push(temp)
}
}
console.log(this.memberList)
},
//根据社区id获取小区列表
async loadVillage () {
const url = "/gov/org/icneighborhood/open/list"
let params = {
agencyId: this.shequId,
isPage: false
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
data.list.forEach(element => {
element.label = element.neighborHoodName
element.value = element.id
});
this.communityList = data.list
let obj = {
values: this.communityList
}
this.popupSlots = []
this.popupSlots.push(obj)
} else {
Toast({
message: msg,
duration: 3000
});
}
},
//获取楼宇列表
async loadBuild () {
const url = "/gov/org/icbuilding/buildingoption"
let params = {
neighborHoodId: this.selVillage.value
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
// data.forEach(element => {
// element.label = element.buildingName
// element.value = element.buildingId
// });
this.buildingList = data
let obj = {
values: this.buildingList
}
this.popupSlots = []
this.popupSlots.push(obj)
} else {
Toast({
message: msg,
duration: 3000
});
}
},
//获取单元列表
async loadUnit () {
const url = '/gov/org/icbuildingunit/unitoption'
let params = {
buildingId: this.selBuild.value
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
// data.forEach(element => {
// element.label = element.unitName
// element.value = element.id
// });
this.unitList = data
this.unitList.push({
label: '其他',
value: 'else'
})
let obj = {
values: this.unitList
}
this.popupSlots = []
this.popupSlots.push(obj)
} else {
Toast({
message: msg,
duration: 3000
});
}
},
//获取房间列表
async loadHome () {
const url = "/gov/org/ichouse/houseoption"
let params = {
buildingId: this.selBuild.value,
unitId: this.selUnit.value
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
// data.forEach(element => {
// element.label = element.unitName
// element.value = element.id
// });
this.roomList = data
this.roomList.push({
label: '其他',
value: 'else'
})
let obj = {
values: this.roomList
}
this.popupSlots = []
this.popupSlots.push(obj)
} else {
Toast({
message: msg,
duration: 3000
});
}
},
handelSel (selType, index) {
this.selType = selType
if (selType === 'community') {
this.pickerData = this.communityList
}
if (selType === 'building') {
if (!this.selVillage) {
Toast({
message: '请先选择小区',
duration: 3000
});
return false
} else {
this.pickerData = this.buildingList
}
}
if (selType === 'unit') {
if (!this.selBuild) {
Toast({
message: '请先选择楼宇',
duration: 3000
});
return false
} else {
this.pickerData = this.unitList
}
}
if (selType === 'room') {
if (!this.selUnit) {
Toast({
message: '请先选择单元',
duration: 3000
});
return false
} else {
this.pickerData = this.roomList
}
}
if (selType === 'roomType') {
this.pickerData = this.roomTypeList
}
if (selType === 'detNum') {
this.selMemberIndex = index
this.pickerData = this.detNumList
}
if (selType === 'detCondition') {
this.selMemberIndex = index
this.pickerData = this.detConditionList
}
let obj = {
values: this.pickerData
}
this.popupSlots = []
this.popupSlots.push(obj)
this.popupVisible = !this.popupVisible
},
async handleSubmit () {
let message = this.validataFormData()
if (message) {
Toast({
message: message,
duration: 3000
});
return false
}
if (this.formData.origin === 'internal') {
this.formData.villageId = this.selVillage.value
this.formData.buildId = this.selBuild.value
if (this.selUnit.value === 'else') {
this.formData.unitId = this.unitContent
this.formData.homeId = this.homeContent//没有选择房屋,不存在这个对象,直接赋值
} else {
this.formData.unitId = this.selUnit.value
this.unitContent = this.selUnit.label
if (this.selHome.value === 'else') {
this.formData.homeId = this.homeContent
} else {
this.formData.homeId = this.selHome.value
this.homeContent = this.selHome.label
}
}
this.formData.address = this.selVillage.label + this.selBuild.label + this.unitContent + this.homeContent
}
this.formData.houseType = this.selHomeType.value
this.memberList.forEach(element => {
element.customerId = this.customerId
if (element.selDetNum && element.selDetNum.value) {
element.heSuanCount = element.selDetNum.value
}
if (element.selDetCondition && element.selDetCondition.value) {
element.ymjz = element.selDetCondition.value
}
});
this.formData.memberList = this.memberList
console.log(this.formData)
this.btnDisabled = true
const url = "/epmetuser/icresicollect/save"
const { data, code, msg } = await requestPost(url, this.formData)
if (code === 0) {
Toast({
message: '提交成功',
duration: 3000
});
this.btnDisabled = false
} else {
Toast({
message: msg,
duration: 3000
});
this.btnDisabled = false
}
},
//必填验证
validataFormData () {
let message = ''
if (this.formData.origin === 'internal') {//内部
if (!this.selVillage) {
message = '请选择小区'
return message
}
if (!this.selBuild) {
message = '请选择楼栋'
return message
}
if (!this.selUnit) {//没有选择单元
message = '请选择单元'
return message
} else {//选择了单元
if (this.selUnit.value === 'else') {//单元选择了其他
if (!this.unitContent) {
message = '请填写单元号'
return message
}
if (!this.homeContent) {//房屋必须填写内容
message = '请填写房屋'
return message
}
} else {//单元没有选择其他
if (!this.selHome) {
message = '请选择房屋'
return message
} else if (this.selHome.value === 'else' && !this.homeContent) {
message = '请填写房屋'
return message
}
}
}
} else {
if (!this.formData.address) {
message = '请填写地址'
return message
}
}
if (!this.selHomeType) {
message = '请选择房屋类型'
return message
}
if (!this.formData.houseHolderName) {
message = '请填写户主姓名'
return message
}
let member = this.memberList[0]
for (let i = 0; i < this.memberList.length; i++) {
let item = this.memberList[i]
if (!item.name || !item.mobile || !item.idNum || !item.selDetNum.value || !item.selDetCondition.value) {
message = '请完整填写用户' + (i + 1) + '信息'
return message
}
}
},
popupOk () {
if (this.selType === 'community') {
this.selVillage = this.selObj
this.selBuild = null
this.selUnit = null
this.selHome = null
this.formData.unitContent = ''
this.formData.homeContent = ''
this.loadBuild()
}
if (this.selType === 'building') {
this.selBuild = this.selObj
this.formData.buildContent = this.selObj.label
this.formData.buildId = this.selObj.value
this.selUnit = null
this.selHome = null
this.formData.unitContent = ''
this.formData.homeContent = ''
this.loadUnit()
}
if (this.selType === 'unit') {
this.selUnit = this.selObj
this.selHome = null
this.unitContent = ''
this.homeContent = ''
this.loadHome()
}
if (this.selType === 'room') {
this.selHome = this.selObj
this.homeContent = ''
}
if (this.selType === 'roomType') {
this.selHomeType = this.selObj
}
if (this.selType === 'detNum') {
let change = this.memberList[this.selMemberIndex]
change.selDetNum = this.selObj
this.$set(this.memberList, this.selMemberIndex, change)
}
if (this.selType === 'detCondition') {
let change = this.memberList[this.selMemberIndex]
change.selDetCondition = this.selObj
this.$set(this.memberList, this.selMemberIndex, change)
}
this.popupVisible = false
},
onPickerChange (picker, values) {
this.selObj = values[0]
},
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/pages/caiji.scss";
.my-field /deep/ .mint-field-core {
text-align: right;
margin-right: 20px;
}
/deep/ .mint-popup-bottom {
width: 100vw;
}
.picker-toolbar-title {
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
background-color: #eee;
height: 44px;
line-height: 44px;
font-size: 16px;
.usi-btn-cancel,
.usi-btn-sure {
color: #26a2ff;
font-size: 16px;
}
}
</style>