<template> <view class="questionnaire"> <form @submit="formSubmit"> <template v-for="(item,index) in list"> <template v-if="item.type == 'radio'"> <view class="margin-top padding sict-label" :key="item.value" v-show="!item.hidden"> <view v-show="!item.hidden"> <span style="color:red;display: inline-block; vertical-align:inherit;margin-right:4upx" :style="{opacity: item.required ? 1 : 0}">*</span> {{item.label}} </view> <view class="text-right sict-value" v-show="!item.hidden"> <radio-group @change="showChange($event,item)"> <view> <view class="label" v-for="(opt, optIndex) in item.opts" :key="opt.label"> <radio :class="form[item.value]== opt.value ?'checked':''" :checked="form[item.value]== opt.value?true:false" :value="opt.value"></radio> <view style="display: inline-block;" class="right">{{opt.label}}</view> </view> </view> </radio-group> </view> </view> </template> <template v-else-if="item.type == 'pickerAddress'"> <view class="cu-form-group margin-top padding-rl" v-show="!item.hidden" :key="item.value"> <view :class="item.titleClass"><span style="color:red;display: inline-block; vertical-align:inherit;margin-right:4upx" :style="{opacity: item.required ? 1 : 0}">*</span>{{item.label}}</view> <pickerAddress @change="addressChange($event,item)"> <view class="picker"> {{form[item.value]?form[item.value]:'请选择'}} </view> </pickerAddress> </view> </template> <template v-else-if="item.type == 'picker'"> <view class="cu-form-group margin-top padding-rl" v-show="!item.hidden" :key="item.value"> <view :class="item.titleClass"><span style="color:red;display: inline-block; vertical-align:inherit;margin-right:4upx" :style="{opacity: item.required ? 1 : 0}">*</span>{{item.label}}</view> <picker @change="updatePickerVal($event,item)" range-key="label" mode="selector" :value="form[item.value]" :range="item.opts"> <view class="picker"> {{form[item.value] && formMat[item.value] ? formMat[item.value]:'请选择'}} </view> </picker> </view> </template> <template v-else-if="item.type == 'pickerMore'"> <view class="margin-top" :key="index"> <uni-collapse> <uni-collapse-item :title="item.label" :open="true" :required="item.required"> <view class="padding-lr"> <view class="uni-list"> <checkbox-group @change="showChange($event,item)"> <label class="uni-list-cell uni-list-cell-pd" v-for="(itemCheck,indexCheck) in item.opts" :key="itemCheck.value" @click="checkboxChange(indexCheck,itemCheck,item)"> <view class="list-item"> <view class="fl"> <checkbox :value="itemCheck.value" :checked="itemCheck.checked" /> </view> <view style="padding-left:60upx">{{itemCheck.label}}</view> </view> </label> </checkbox-group> </view> </view> </uni-collapse-item> </uni-collapse> </view> </template> <template v-else-if="item.type == 'date'"> <view class="cu-form-group margin-top padding-rl" v-show="!item.hidden" :key="item.value"> <view :class="item.titleClass"><span style="color:red;display: inline-block; vertical-align:inherit;margin-right:4upx" :style="{opacity: item.required ? 1 : 0}">*</span>{{item.label}}</view> <picker mode="date" :value="form[item.value]" start="2015-09-01" end="2020-09-01" @change="updatePickerVal($event,item)"> <view class="picker"> {{form[item.value]?form[item.value]:'请选择'}} </view> </picker> </view> </template> <template v-else-if="item.type == 'input'"> <view class="cu-form-group margin-top padding-rl" :key="item.value" v-show="!item.hidden"> <view :class="item.titleClass"> <span style="color:red;display: inline-block; vertical-align:inherit;margin-right:4upx" :style="{opacity: item.required ? 1 : 0}">*</span> {{item.label}}</view> <input class="text-right" :placeholder="item.placeholder" :type="item.controType" :value="form[item.value]" name="input" @input="updateInputVal($event,item.value)" @blur="inputBlur($event,item)"></input> </view> </template> <view class="margin-top-xs" v-show="item.child && childItem.show" v-for="(childItem,childIndex) in item.child" :key="childItem.value"> <view class="margin-top-sm padding-rl sict-label cu-form-group"> <view> <span style="color:red;display: inline-block; vertical-align:inherit;margin-right:4upx" v-if="childItem.required">*</span> {{childItem.title}} </view> <checkbox v-if="childItem.type == 'radio'" :class="form[childItem.value]?'checked':''" :checked="form[childItem.value]?true:false" :value="childItem.value"></checkbox> <picker v-else-if="childItem.type == 'picker'" range-key="label" @change="updatePickerVal($event,childItem)" :value="form[childItem.value]" :range="childItem.opts"> <view class="picker"> {{form[childItem.value]>-1?childItem.opts[form[childItem.value]].label:'请选择'}} </view> </picker> <input class="text-right" v-else-if="childItem.type == 'input'" :type="childItem.controType" :placeholder="childItem.placeholder" :value="form[childItem.value]" name="input" @input="updateInputVal($event,childItem.value)"></input> </view> </view> </template> <view class="cu-form-group margin-top-sm" v-show="!isRead"> <view class="uni-padding-wrap uni-common-mt"> <view class="padding-top padding-bottom"> <checkbox-group @click="openModal"> <label> <checkbox value="A" :checked="form.agree == 1" class="fl" style="margin-top:4upx" /> <view style="padding-left:60upx;padding-top:6upx"> 我已阅读并认可<span style="color:#0081FF" @click.stop="modalName = true">《软件使用协议》</span>,承诺如实填报。 </view> </label> </checkbox-group> </view> </view> </checkbox-group> </view> <view class="cu-modal" :class="modalName?'show':''"> <view class="cu-dialog"> <view class="cu-bar bg-white justify-end text-bold"> <view class="content">软件使用协议</view> <view class="action" @tap="modalName = ''"> <text class="cuIcon-close text-black"></text> </view> </view> <view class="padding-xl green-word"> <div class="text-left"> <p class="content">根据《中华人民共和国传染病防治法》、《中华人民共和国突发事件应对法》、《突发公共卫生事件应急条例》、国家卫生健康委员会公告(2020年第1号),并按照国务院常务会议提出的“分类有序复工复产”和上海疫情防控办及市政府《关于进一步落实各项疫情防控措施的通告》的相关要求,为做好新型冠状病毒感染的肺炎疫情防控工作,保障广大人民群众生命健康,现面向使用本系统的所有用户,特告知如下:所填信息须真实、有效,如若有任何瞒报情况,将依法追究法律责任,并被有关部门列为失信人员。本系统采集的用户信息,主要用于园区和企业的防控管理,必要时将与有关政府部门进行信息对接,或在去除个人隐私信息后用于疫情相关的科学研究。:</p> <p> </p> <p class="content">用户本人承诺:我已经认真阅读过,或者已经有人详细读给我听了。我理解其中的信息,我愿意接受检查,保证填报信息真实、有效,同意相关人员按照这份知情同意书的描述使用本人信息。</p> </div> <button @click="modalName = ''" class="cu-btn block bg-blue margin-tb-sm lg">我知道了</button> </view> </view> </view> <view class="padding" v-show="!isRead"> <button form-type="submit" class="cu-btn block bg-blue margin-tb-sm lg">提 交</button> </view> </form> </view> </template> <script> import uniCollapse from '@/components/uni-collapse/uni-collapse.vue' import uniCollapseItem from '@/components/uni-collapse-item/uni-collapse-item.vue' import validate from '@/utils/validate.js' import pickerAddress from '@/components/pickerAddress/pickerAddress.vue' export default { components: { uniCollapse, uniCollapseItem, pickerAddress }, data() { return { modalName: false, isRead: false, list: [{ label: '单位名称', required: true, value: 'orgId', titleClass: 'title', type: 'picker', opts: [] }, { label: '园区', required: true, value: 'parkId', titleClass: 'title', type: 'picker', opts: [] }, { label: '所在部门(选填)', value: 'department', titleClass: 'title', placeholder: '请输入所在部门', type: 'input', }, { label: '职务(选填)', value: 'position', titleClass: 'title', placeholder: '请输入职务', type: 'input', }, { label: '员工姓名', required: true, value: 'name', titleClass: 'title', placeholder: '请输入员工姓名', type: 'input', }, { label: '联系方式', required: true, value: 'phone', titleClass: 'title', placeholder: '请输入11位数字手机号', type: 'input', controType: 'number', validator: validate.isPhone }, { label: '国籍', required: true, value: 'nationality', titleClass: 'title', type: 'picker', opts: [{ label: "中国", value: "China" }, { label: "中国香港", value: "Hong Kong" }, { label: "中国澳门", value: "Macau" }, { label: "中国台湾", value: "Taiwan prov." }, { label: "喀麦隆", value: "Cameroon" }, { label: "加拿大", value: "Canada" }, { label: "加那利群岛", value: "Canary Is" }, { label: "佛得角", value: "Cape Verde" }, { label: "开曼群岛", value: "Cayman Is" }, { label: "中非共和国", value: "Central African Rep." }, { label: "乍得", value: "Chad" }, { label: "智利", value: "Chile" }, { label: "哥伦比亚", value: "Colombia" }, { label: "科摩罗", value: "Comoros" }, { label: "刚果", value: "Congo" }, { label: "民主刚果", value: "Congo,DR" }, { label: "库克群岛", value: "Cook Is" }, { label: "哥斯达黎加", value: "Costa Rica" }, { label: "科特迪瓦", value: "Cote d'lvoire" }, { label: "克罗地亚", value: "Croatia Rep" }, { label: "古巴", value: "Cuba" }, { label: "库腊索岛", value: "Curacao" }, { label: "塞浦路斯", value: "Cyprus" }, { label: "捷克共和国", value: "Czech Rep" }, { label: "丹麦", value: "Denmark" }, { label: "吉布提", value: "Djibouti" }, { label: "多米尼克", value: "Dominica" }, { label: "多米尼加共和国", value: "Dominican Rep." }, { label: "东帝汶", value: "East Timor" }, { label: "厄瓜多尔", value: "Ecuador" }, { label: "埃及", value: "Egypt" }, { label: "萨尔瓦多", value: "El Salvador" }, { label: "赤道几内亚", value: "Eq.Guinea" }, { label: "厄立特里亚", value: "Eritrea" }, { label: "爱沙尼亚", value: "Estonia" }, { label: "埃塞俄比亚", value: "Ethiopia" }, { label: "斐济", value: "Fiji" }, { label: "芬兰", value: "Finland" }, { label: "法国", value: "France" }, { label: "法属圭亚那", value: "French Guyana" }, { label: "法属玻利尼西亚", value: "French Polynesia" }, { label: "加蓬", value: "Gabon" }, { label: "冈比亚", value: "Gambia" }, { label: "盖比群岛", value: "Gambier Is" }, { label: "格鲁吉亚", value: "Georgia" }, { label: "德国", value: "Germany" }, { label: "加纳", value: "Ghana" }, { label: "直布罗陀", value: "Gibraltar" }, { label: "希腊", value: "Greece" }, { label: "格陵兰", value: "Greenland" }, { label: "格林纳达", value: "Grenada" }, { label: "瓜德罗普", value: "Guadeloupe" }, { label: "危地马拉", value: "Guatemala" }, { label: "几内亚", value: "Guinea" }, { label: "几内亚(比绍)", value: "Guinea Bissau" }, { label: "圭亚那", value: "Guyana" }, { label: "海地", value: "Haiti" }, { label: "洪都拉斯", value: "Honduras" }, { label: "匈牙利", value: "Hungary" }, { label: "冰岛", value: "Iceland" }, { label: "印度", value: "India" }, { label: "印度尼西亚", value: "Indonesia" }, { label: "伊朗", value: "Iran" }, { label: "伊拉克", value: "Iraq" }, { label: "爱尔兰", value: "Ireland" }, { label: "以色列", value: "Israel" }, { label: "意大利", value: "Italy" }, { label: "牙买加", value: "Jamaica" }, { label: "日本", value: "Japan" }, { label: "约旦", value: "Jordan" }, { label: "哈萨克斯坦", value: "Kazakhstan" }, { label: "肯尼亚", value: "Kenya" }, { label: "吉尔吉斯斯坦", value: "Kirghizia" }, { label: "基里巴斯", value: "Kiribati" }, { label: "韩国", value: "Korea Rep." }, { label: "朝鲜", value: "Korea,DPR" }, { label: "科威特", value: "Kuwait" }, { label: "老挝", value: "Laos,PDR" }, { label: "拉脱维亚", value: "Latvia" }, { label: "黎巴嫩", value: "Lebanon" }, { label: "莱索托", value: "Lesotho" }, { label: "利比里亚", value: "Liberia" }, { label: "利比亚", value: "Libyan Arab Jm" }, { label: "列支敦士登", value: "Liechtenstein" }, { label: "立陶宛", value: "Lithuania" }, { label: "卢森堡", value: "Luxembourg" }, { label: "马其顿", value: "Macedonia Rep" }, { label: "马达加斯加", value: "Madagascar" }, { label: "马拉维", value: "Malawi" }, { label: "马来西亚", value: "Malaysia" }, { label: "马尔代夫", value: "Maldives" }, { label: "马里", value: "Mali" }, { label: "马耳他", value: "Malta" }, { label: "马克萨斯群岛", value: "Marquesas Is" }, { label: "马绍尔群岛", value: "Marshall Is Rep" }, { label: "马提尼克", value: "Martinique" }, { label: "毛里塔尼亚", value: "Mauritania" }, { label: "毛里求斯", value: "Mauritius" }, { label: "马约特岛", value: "Mayotte" }, { label: "梅利利亚", value: "Melilla" }, { label: "墨西哥", value: "Mexico" }, { label: "密克罗尼西亚联邦", value: "Micronesia Fs" }, { label: "摩尔多瓦", value: "Moldavia" }, { label: "摩纳哥", value: "Monaco" }, { label: "蒙古", value: "Mongolia" }, { label: "蒙特塞拉特", value: "Montserrat" }, { label: "摩洛哥", value: "Morocco" }, { label: "莫桑比克", value: "Mozambique" }, { label: "缅甸", value: "Myanmar" }, { label: "纳米比亚", value: "Namibia" }, { label: "瑙鲁", value: "Nauru" }, { label: "尼泊尔", value: "Nepal" }, { label: "荷兰", value: "Netherlands" }, { label: "荷属安德列斯", value: "NETHERLANDS ANTILLES" }, { label: "新喀里多尼亚", value: "New Caledonia" }, { label: "新西兰", value: "New Zealand" }, { label: "尼加拉瓜", value: "Nicaragua" }, { label: "尼日尔", value: "Niger" }, { label: "尼日利亚", value: "Nigeria" }, { label: "诺福克岛", value: "Norfolk Is" }, { label: "挪威", value: "Norway" }, { label: "阿曼", value: "Oman" }, { label: "巴基斯坦", value: "Pakistan" }, { label: "帕劳共和国", value: "Palau" }, { label: "巴勒斯坦", value: "Palestine" }, { label: "巴拿马", value: "Panama" }, { label: "巴布亚新几内亚", value: "Papua New Guinea" }, { label: "巴拉圭", value: "Paraguay" }, { label: "秘鲁", value: "Peru" }, { label: "菲律宾", value: "Philippines" }, { label: "波兰", value: "Poland" }, { label: "葡萄牙", value: "Portugal" }, { label: "波多黎各", value: "Puerto Rico" }, { label: "卡塔尔", value: "Qatar" }, { label: "也门共和国", value: "Republic of Yemen" }, { label: "留尼汪", value: "Reunion" }, { label: "罗马尼亚", value: "Romania" }, { label: "俄罗斯联邦", value: "Russia" }, { label: "卢旺达", value: "Rwanda" }, { label: "南非", value: "S.Africa" }, { label: "萨巴", value: "Saba" }, { label: "圣卢西亚", value: "Saint Lucia" }, { label: "圣马丁岛", value: "Saint Martin Is" }, { label: "圣文森特和格林纳丁斯", value: "Saint Vincent & Grenadines" }, { label: "萨摩亚", value: "Samoa" }, { label: "圣马力诺", value: "San Marino" }, { label: "圣多美和普林西比", value: "Sao Tome and Principe" }, { label: "沙特阿拉伯", value: "Saudi Arabia" }, { label: "塞内加尔", value: "Senegal" }, { label: "塞黑", value: "Serbia & Montenegro" }, { label: "塞舌尔", value: "Seychelles" }, { label: "塞拉利昂", value: "Sierra Leone" }, { label: "新加坡", value: "Singapore" }, { label: "斯洛伐克", value: "Slovak Rep" }, { label: "斯洛文尼亚", value: "Slovenia Rep" }, { label: "社会群岛", value: "Society Is" }, { label: "所罗门群岛", value: "Solomon Is" }, { label: "索马里", value: "Somalia" }, { label: "西班牙", value: "Spain" }, { label: "斯里兰卡", value: "Sri Lanka" }, { label: "圣其茨-尼维斯", value: "St. Kitts-Nevis" }, { label: "圣卢西亚", value: "ST. LUCIA" }, { label: "圣文森特和格纳丁斯", value: "ST. VINCENT AND THE GRENADINES" }, { label: "圣皮埃尔和密克隆", value: "St.Pierre and Miquelon" }, { label: "苏丹", value: "Sudan" }, { label: "苏里南", value: "Suriname" }, { label: "斯威士兰", value: "Swaziland" }, { label: "瑞典", value: "Sweden" }, { label: "瑞士", value: "Switzerland" }, { label: "叙利亚", value: "Syrian" }, { label: "塔吉克斯坦", value: "Tadzhikistan" }, { label: "坦桑尼亚", value: "Tanzania" }, { label: "泰国", value: "Thailand" }, { label: "荷属安地列斯群岛", value: "the Netherlands Antilles" }, { label: "多哥", value: "Togo" }, { label: "汤加", value: "Tonga" }, { label: "特立尼达和多巴哥", value: "Trinidad & Tobago" }, { label: "土阿莫土群岛", value: "Tuamotu Is" }, { label: "土布艾群岛", value: "Tubai Is" }, { label: "突尼斯", value: "Tunisia" }, { label: "土耳其", value: "Turkey" }, { label: "土库曼斯坦", value: "Turkmenistan" }, { label: "特克斯和凯科斯群岛", value: "Turks & Caicos Is" }, { label: "图瓦卢", value: "Tuvalu" }, { label: "乌干达", value: "Uganda" }, { label: "乌克兰", value: "Ukraine" }, { label: "阿联酋", value: "United Arab Emirates" }, { label: "英国", value: "United Kingdom" }, { label: "美国", value: "United States" }, { label: "乌拉圭", value: "Uruguay" }, { label: "乌兹别克斯坦", value: "Uzbekstan" }, { label: "瓦努阿图", value: "Vanuatu" }, { label: "梵蒂冈城国", value: "Vatican City State" }, { label: "委内瑞拉", value: "Venezuela" }, { label: "越南", value: "Vietnam" }, { label: "英属维尔京群岛", value: "VIRGIN IS.(U.K.)" }, { label: "美属维尔京群岛", value: "VIRGIN IS.(US)" }, { label: "瓦利斯和浮图纳", value: "Wallis and Futuna" }, { label: "西撒哈拉", value: "Western Sahara" }, { label: "赞比亚", value: "Zambia" }, { label: "津巴布韦", value: "Zimbabwe" } ], show: [8, 101], showValue: ['China'] }, { label: '身份证号/护照号', required: true, value: 'idCard', titleClass: 'title', placeholder: '请输入身份证号/护照号', type: 'input', validator: validate.passportNumberAndIdCardReg }, { label: '户籍所在地', required: true, value: 'householdValues', titleClass: 'title', placeholder: '请选择', type: 'pickerAddress', num: 101, hidden: true, }, { label: '户籍地址', required: true, value: 'householdAddress', titleClass: 'title', placeholder: '例:**路**号**小区**号楼**室', type: 'input', num: 8, hidden: true, }, { label: '在沪居住所在地', required: true, value: 'residenceValue', titleClass: 'title', placeholder: '请选择', type: 'pickerAddress', }, { label: '在沪居住(暂住)地址', required: true, value: 'residenceAddress', titleClass: 'title', placeholder: '例:**路**号**小区**号楼**室', type: 'input', }, { label: '是否复工', required: true, value: 'returnToWork', titleClass: 'title', type: 'radio', opts: [{ value: '0', label: '否' }, { value: '1', label: '是' }, ], show: [11], showValue: ['0'] }, { label: '计划复工日期', hidden: true, required: true, value: 'planReturnDate', titleClass: 'title', type: 'date', num: 11 }, { label: '是否离沪', required: true, value: 'left', titleClass: 'title', type: 'radio', opts: [{ value: '0', label: '否' }, { value: '1', label: '是' } ], show: [13, 14, 15, 16, 17, 18, 19, 20, 21], showValue: ['1'] }, { label: '离沪原因', required: true, value: 'leftReason', titleClass: 'title', type: 'picker', opts: [{ value: 'a', label: '探亲' }, { value: 'c', label: '出差' }, { value: 'd', label: '旅游' }, { value: 'e', label: '其他' }], num: 13, hidden: true, }, { label: '离沪出发日期', required: true, value: 'leftDate', titleClass: 'title', type: 'date', num: 14, hidden: true, }, { label: '离沪方式', required: true, value: 'leftVehicle', titleClass: 'title', type: 'radio', opts: [{ value: '火车', label: '火车 ' }, { value: '飞机', label: '飞机' }, { value: '客车', label: '客车' }, { value: '自驾', label: '自驾' }], num: 15, show: ['16'], showValue: ['火车', '飞机'], hidden: true, }, { label: '离沪车次/航班', required: true, value: 'leftVehicleNum', titleClass: 'title', placeholder: '请输入', type: 'input', num: 16, hidden: true, }, { label: '离沪到达日期', required: true, value: 'leftReachDate', titleClass: 'title', type: 'date', num: 17, hidden: true, }, { label: '离沪目的地', required: true, value: 'leftTarget', titleClass: 'title', placeholder: '请输入到达站点', type: 'input', num: 18, hidden: true, }, // { // label: '离沪具体地址', // required: true, // value: 'leftAddress', // titleClass: 'title', // placeholder: '请输入', // type: 'input', // num: 19, // hidden: true, // }, { label: '离沪同行者姓名(没有填无)', required: true, value: 'leftDependentNames', titleClass: 'title', placeholder: '请输入', type: 'input', num: 20, hidden: true, }, { label: '离沪同行者联系方式(没有填无)', required: true, value: 'leftDependentPhones', titleClass: 'title', placeholder: '请输入', type: 'input', num: 21, hidden: true, }, { label: '是否返沪', required: true, value: 'backed', titleClass: 'title', type: 'radio', show: [23, 24, 25, 26, 27, 28, 29], showValue: ['1'], opts: [{ value: '0', label: '否' }, { value: '1', label: '是' }] }, { label: '返沪出发地', required: true, value: 'backFrom', titleClass: 'title', placeholder: '请输入出发站点', type: 'input', num: 23, hidden: true, }, { label: '返沪出发日期', required: true, value: 'backDate', titleClass: 'title', type: 'date', num: 24, hidden: true, }, { label: '返沪方式', required: true, value: 'backVehicle', titleClass: 'title', type: 'radio', opts: [{ value: '火车', label: '火车 ' }, { value: '飞机', label: '飞机' }, { value: '客车', label: '客车' }, { value: '自驾', label: '自驾' }], show: ['26'], showValue: ['火车', '飞机'], num: 25, hidden: true, }, { label: '返沪车次/航班', required: true, value: 'backVehicleNum', titleClass: 'title', placeholder: '请输入', type: 'input', num: 26, hidden: true, }, { label: '返沪到达日期', required: true, value: 'backReachedDate', titleClass: 'title', type: 'date', num: 27, hidden: true, }, { label: '返沪同行者姓名(没有填无)', required: true, value: 'backDependentNames', titleClass: 'title', placeholder: '请输入', type: 'input', num: 28, hidden: true, }, { label: '返沪同行者联系方式(没有填无)', required: true, value: 'backDependentPhones', titleClass: 'title', placeholder: '请输入', type: 'input', num: 29, hidden: true, }, { label: '当前状况', required: true, value: 'currentStatus', titleClass: 'title', type: 'pickerMore', opts: [{ value: 'a', label: '已经确诊' }, { value: 'b', label: '疑似诊断' }, { value: 'c', label: '亲密接触者' }, { value: 'd', label: '居家观察' }, { value: 'e', label: '正在接受集中医学观察' }, { value: 'f', label: '已解除集中医学观察' }, { value: 'g', label: '无上述情况' } ], noneValue: 'g', showList: [{ value: 'c', show: [32, 35, 38, 40, 43, 45, 47] }, { value: 'd,e', show: [49, 50] }, ] }, { label: '停留湖北', required: true, value: 'hubeiStopped', titleClass: 'title', type: 'radio', num: 32, hidden: true, opts: [{ value: '0', label: '否' }, { value: '1', label: '是' }], show: [33, 34], showValue: ['1'] }, { label: '到达湖北日期', required: true, value: 'hubeiStopStartDate', titleClass: 'title', type: 'date', num: 33, hidden: true }, { label: '离开湖北日期', required: true, value: 'hubeiStopEndDate', titleClass: 'title', type: 'date', num: 34, hidden: true }, { label: '途径湖北', required: true, value: 'hubeiPassed', titleClass: 'title', type: 'radio', opts: [{ value: '0', label: '否' }, { value: '1', label: '是' }], show: [36, 37], num: 35, hidden: true, showValue: ['1'] }, { label: '途径湖北到达日期', required: true, value: 'hubeiPassStartDate', titleClass: 'title', type: 'date', num: 36, hidden: true }, { label: '途径湖北离开日期', required: true, value: 'hubeiPassEndDate', titleClass: 'title', type: 'date', num: 37, hidden: true }, { label: '接触湖北人员', required: true, value: 'hubeiContacted', titleClass: 'title', type: 'radio', opts: [{ value: '0', label: '否' }, { value: '1', label: '是' }], show: [39], num: 38, hidden: true, showValue: ['1'] }, { label: '接触湖北人员接触时间', required: true, value: 'hubeiContactDate', titleClass: 'title', type: 'date', num: 39, hidden: true }, { label: '家属停留或途径湖北', required: true, value: 'hubeiFamilyStopped', titleClass: 'title', type: 'radio', opts: [{ value: '0', label: '否' }, { value: '1', label: '是' }], show: [41, 42], num: 40, hidden: true, showValue: ['1'] }, { label: '家属停留或途径湖北到达日期', required: true, value: 'hubeiFamilyStopStartDate', titleClass: 'title', type: 'date', num: 41, hidden: true }, { label: '家属停留或途径湖北离开日期', required: true, value: 'hubeiFamilyStoppEndDate', titleClass: 'title', type: 'date', num: 42, hidden: true }, { label: '家属接触湖北人员', required: true, value: 'hubeiFamilyContacted', titleClass: 'title', type: 'radio', opts: [{ value: '0', label: '否' }, { value: '1', label: '是' }], show: [44], num: 43, hidden: true, showValue: ['1'] }, { label: '家属接触湖北人员接触时间', required: true, value: 'hubeiFamilyContactDate', titleClass: 'title', type: 'date', num: 44, hidden: true }, { label: '接触过已确诊或疑似患者', required: true, value: 'patientContact', titleClass: 'title', type: 'radio', opts: [{ value: '0', label: '否' }, { value: '1', label: '是' }], show: [46], num: 45, hidden: true, showValue: ['1'] }, { label: '接触患者时间', required: true, value: 'patientContactDate', titleClass: 'title', type: 'date', num: 46, hidden: true }, { label: '家属接触过已确诊或疑似患者', required: true, value: 'familyPatientContact', titleClass: 'title', type: 'radio', opts: [{ value: '0', label: '否' }, { value: '1', label: '是' }], show: [48], num: 47, hidden: true, showValue: ['1'] }, { label: '家属接触患者时间', required: true, value: 'familyPatientContactDate', titleClass: 'title', type: 'date', num: 48, hidden: true }, { label: '隔离地址', required: true, value: 'quarantineAdress', titleClass: 'title', placeholder: '请输入', type: 'input', num: 49, hidden: true }, { label: '隔离开始日期', required: true, value: 'quarantineDate', titleClass: 'title', type: 'date', num: 50, hidden: true }, { label: '当日症状', required: true, value: 'symptom', titleClass: 'title', type: 'pickerMore', opts: [{ value: 'a', label: '发热' }, { value: 'b', label: '咳嗽' }, { value: 'c', label: '流涕' }, { value: 'd', label: '咽痛' }, { value: 'e', label: '咳痰' }, { value: 'f', label: '胸痛' }, { value: 'g', label: '肌肉酸痛/关节痛' }, { value: 'h', label: '气促' }, { value: 'i', label: '腹泻' }, { value: 'j', label: '以上均无' }] }, ], form: { agree: 0, orgId: '', orgName: '', department: '', position: '', name: '', phone: '', nationality: '', idCard: '', returnToWork: '', householdAddress: '', residenceAddress: '', planReturnDate: '' }, formMat: {} } }, onLoad(option) { this.getOrg() this.getPark() this.getInfo() }, methods: { openModal() { if (!this.form.agree) { this.form.agree = 1 } else { this.form.agree = 0 } }, getOrg() { const data = { params: { pageNum: 1, pageSize: 1000000 } } this.$http.get(`/sict-ncov/org/page`, data).then(res => { const d = res.data if (d.code == 1) { let list = [] d.object.list.forEach(item => { list.push({ label: `${item.orgName} (${item.city} ${item.district} ${item.address} ${item.park})`, value: item.id, desc: item.orgName }) }) this.list[0].opts = list } }).catch(err => { console.log(err) }) }, getPark() { const data = { params: { pageNum: 1, pageSize: 1000000 } } this.$http.get(`/sict-ncov/park/page`, data).then(res => { const d = res.data console.log(d,'d') if (d.code == 1) { let list = [] d.object.forEach(item => { list.push({ label: item.name, value: item.id }) }) this.list[1].opts = list } }).catch(err => { console.log(err) }) }, // 获取信息 getInfo() { this.$http.get(`/sict-ncov/report`, this.form).then(res => { const d = res.data if (d.code == 1) { this.isRead = true const data = d.object.reportContent || {} this.form = data if (data['householdProvince']) { const val = data['householdProvince'] + "," + data['householdCity'] + "," + data[ 'householdDistrict'] this.$set(this.form, 'householdValues', val) } if (data['residenceProvince']) { const val = data['residenceProvince'] + "," + data['residenceCity'] + "," + data[ 'residenceDistrict'] this.$set(this.form, 'residenceValue', val) } // 赋值 for (let k in data) { const val = data[k] if (val) { const item = this.list.find(child => child.value == k) if (item) { this.showChange({ value: val }, item) if (item.type == "pickerMore") { item.opts.forEach(opt => { val.split(',').forEach(v => { if (v === opt.value) { this.$set(opt, 'checked', true) } }) }) } if (item.type == "picker") { item.opts.forEach(opt => { if (opt.value == val) { if (opt.desc) { this.formMat[k] = opt.desc } else { this.formMat[k] = opt.label } } }) } } } } } }) }, // 更新复选框绑定的表单内容 checkboxChange(index, obj, item) { const checkList = item.opts const prop = item.value for (let i = 0, lenI = checkList.length; i < lenI; ++i) { if (index == i) { this.$set(checkList[i], 'checked', !checkList[i].checked) } } // 处理以上均无情况 const nullList = ['无上述情况', '以上均无'] if (nullList.includes(obj.label)) { for (var i = 0, lenI = checkList.length; i < lenI; ++i) { this.$set(checkList[i], 'checked', false) } this.$set(checkList[checkList.length - 1], 'checked', true) this.form[prop] = obj.value } else { this.$set(checkList[checkList.length - 1], 'checked', false) const values = [] for (var i = 0, lenI = checkList.length; i < lenI; ++i) { if (checkList[i].checked) { values.push(checkList[i].value) } } this.form[prop] = values.join(',') } }, radioChange(val, prop) { this.$set(this.form, prop, val) this.isShowChild() }, // 隐藏/显示 showChange(evt, item) { const prop = item.value const type = item.type if (type === 'radio') { const val = evt.value || evt.target.value this.$set(this.form, prop, val) for (let i = 0; i < this.list.length; i++) { const current = this.list[i] if (current.value == prop && current.show) { current.show.forEach(child => { this.list.forEach(row => { if (child == row.num) { this.$set(row, 'hidden', !current.showValue.includes(val)) } }) }) break } } } // 复选框展示和隐藏 if (type === 'pickerMore') { let val = evt.value || evt.detail.value; const showList = item.showList if (showList && showList.length > 0) { if (item.noneValue && val[val.length - 1] == item.noneValue) { val = [item.noneValue] } showList.forEach(item => { item.show.forEach(child => { this.list.forEach(row => { if (child == row.num) { item.value.split(',').some(v => { if (val.includes(v)) { this.$set(row, 'hidden', false) return true } else { this.$set(row, 'hidden', true) return false } }) } }) }) }) } } if (type === 'picker') { let val = evt.value || item.opts[evt.detail.value].value; for (let i = 0; i < this.list.length; i++) { const current = this.list[i] if (current.value == prop && current.show) { current.show.forEach(child => { this.list.forEach(row => { if (child == row.num) { this.$set(row, 'hidden', !current.showValue.includes(val)) } }) }) break } } } }, isShowChild() { this.list[10].hidden = this.form['returnToWork'] == 'a' }, Switch(e, prop) { this.form[prop] = e.detail.value }, // 更新输入框绑定的表单内容 updateInputVal(event, props) { this.form[props] = event.target.value }, // 输入框失去焦点 inputBlur(e, item) { const val = e.detail.value if (!val) { return } if (item.validator && !item.validator(val)) { uni.showToast({ icon: 'none', title: `${item.label }填写错误` }) } }, // pickerAddress地址改变 addressChange(e, item) { const val = e.data.join(',') this.$set(this.form, item.value, val) }, // 更新下拉框绑定的表单内容 updatePickerVal(event, item) { const opts = item.opts const prop = item.value const val = event.detail.value if (!opts) { this.$set(this.form, prop, val) return } this.$set(this.form, prop, opts[val].value) if (opts[val].desc) { this.$set(this.formMat, prop, opts[val].desc) } else { this.$set(this.formMat, prop, opts[val].label) } if (item.show) { this.showChange(event, item) } }, // 提交信息 formSubmit() { let flag = true let msg = '' if (this.form.agree != 1) { uni.showToast({ icon: 'none', title: `请勾选知情同意书` }) return } for (let i = 0; i < this.list.length; i++) { if (this.list[i].required) { const val = this.form[this.list[i].value] if (!val && !this.list[i].hidden && this.list[i].required) { flag = false uni.showToast({ icon: 'none', title: `${this.list[i].label }未填写` }) break } if (this.list[i].validator && !this.list[i].validator(val)) { flag = false uni.showToast({ icon: 'none', title: `${this.list[i].label }填写错误` }) break } if (!flag) { break } } } if (!flag) { return false } else { const data = {} for (let k in this.form) { if (this.form[k]) { if (k == 'householdValues') { // 户籍所在地 const values = this.form[k].split(',') data.householdProvince = values[0] data.householdCity = values[1] data.householdDistrict = values[2] } else if (k == 'residenceValue') { // 住所所在地 const values = this.form[k].split(',') data.residenceProvince = values[0] data.residenceCity = values[1] data.residenceDistrict = values[2] } else { data[k] = this.form[k] } } } this.$http.post(`/sict-ncov/report`, data).then(res => { const d = res.data if (d.code == 1) { uni.reLaunch({ url: '/pages/index/index', }); uni.showToast({ icon: 'success', title: '提交成功' }) } else { uni.showToast({ icon: 'none', title: d.message }) } }).catch(err => { console.log(err) }) } } } } </script> <style lang="scss" scoped> .sict-title { padding: 20upx 0; padding-right: 20upx; word-break: break-all; text-align: justify } .sict-label { background-color: white; font-size: 30upx; text-align: justify; } .sict-value { margin-top: 15upx; .right { margin-left: 10upx; vertical-align: bottom; } .label { // display: inline-block; text-align: left; padding: 20upx 0; padding-left: 30upx; border-bottom: 2upx solid #d3d3d3; &:last-child { border-bottom: 0; } } } .content { text-indent: 20px; } uni-radio-group { border: 2upx solid #d3d3d3; border-radius: 8upx; margin-left: 20upx; display: block; } radio-group { border: 2upx solid #d3d3d3; border-radius: 8upx; margin-left: 20upx; display: block; } .icon-right { font-family: cuIcon; font-size: 34upx; color: #8799a3; line-height: 100upx; width: 60upx; text-align: right; margin: auto; } .uni-list-cell { .list-item { border-bottom: 2upx solid #d3d3d3; padding: 20upx 0; padding-left: 30upx; } &:last-child { .list-item { border-bottom: 0; } } } .uni-list { margin-left: 20upx; border: 2upx solid #d3d3d3; border-radius: 8upx; } </style> <style> .questionnaire .uni-collapse-cell__title:after { border-bottom: 0 !important; } </style>