<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 == '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]?form[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>在您决定是否参加该筛查(或随访)之前,请仔细阅读以下内容。您可以和您的亲属、朋友一起讨论,或请医生给予解释,然后做出决定。</p> <p> </p> <p class="text-bold">一、筛查开展的背景和目的</p> <p>癌症是严重威胁人民生命和健康的疾病,也是我国居民的主要死亡原因之一。目前因出现临床症状而就诊的患者多为中晚期病人,治疗费用昂贵而且效果不佳,给病人和家属带来极大的痛苦和沉重的经济负担。</p> <p>医学研究和临床实践证实,癌症的发生发展有一个过程,可以通过科学有效的技术方法对人群进行筛查,及时发现癌前病变及早期癌,经有效治疗,可以阻断癌前病变的发展。接受早诊早治的患者痛苦小,经济花费少,而且患者可以很快恢复健康,像健康人一样工作生活。早诊早治是目前控制癌症的最有效的途径。</p> <p> </p> <p class="text-bold">四、哪些人不宜参加筛查</p> <p>具有下列情况的,不宜参加筛查:①严重心脏病,心力衰竭;②重症呼吸道疾病,呼吸困难,哮喘持续状态;③有严重脑部疾病者;④咽后壁脓肿,严重脊柱畸形,或主动脉瘤患者;⑤身体虚弱不能耐受内镜检查,或难以镇静自控者;⑥上消化道腐蚀性炎症急性期,或疑为上消化道穿孔者;⑦大量腹水、严重腹胀,或有重度食管静脉曲张者;⑧有出血倾向者(凝血功能不正常),或正在服用抗凝血药物者,后者须停药一周后检查出凝血功能正常方可进行内镜检查;⑨妊娠期妇女;⑨40-69岁有碘过敏史者等。</p> <p> </p> <p class="text-bold">五、参加筛查可能带来的不适与不便</p> <p>内镜检查和治疗时一般很安全。但也偶有检查和治疗过程中发生食管或胃出血、穿孔及药物反应(如碘过敏)等。对这些情况医生都有很好的预防措施和应急预案,即使发生,罕有危及生命的可能。如果您想进一步了解情况,请与检查小组的医生联系。</p> <p> </p> <p class="text-bold">六、保密原则</p> <p>您的所有个人资料将是保密的,由承担该筛查工作的医院妥善保存。任何公开报告将不会披露您的个人信息。我们将在法律允许的范围内,尽一切努力保护您的隐私。</p> <p>我们将保存所采取的标本资料,并可能在以后的研究中使用,标本上贴有带编码的标签,不会出现您的姓名,您的所有信息将会保密。</p> </div> --> <div class="text-left"> <p class="content">根据中华人民共和国国家卫生健康委员会2020年第1号公告要求以及《国际卫生条例(2005)》、《中华人民共和国传染病防治法》等有关法律规定,并按照国务院常务会议提出的“分类有序复工复产”和上海疫情防控办及市政府《关于进一步落实各项疫情防控措施的通告》的相关要求,为做好新型冠状病毒感染的肺炎疫情防控工作,保障广大人民群众生命健康,现面向使用本系统的所有用户,特告知如下:</p> <p> </p> <p class="content">本系统将对所有注册使用的用户信息进行记录,必要时将与执法部门进行信息对接,请积极配合并确保所填信息真实、有效。如若有任何瞒报情况被查出,将被有关部门依法追究法律责任并被列为失信人员,敬请配合。</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' export default { components: { uniCollapse, uniCollapseItem }, data() { return { modalName: false, isRead:false, list: [{ label: '单位名称', required: true, value: 'orgName', 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', 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], showValue: ['China'] }, { label: '身份证号/护照号', required: true, value: 'idCard', titleClass: 'title', placeholder: '请输入身份证号/护照号', type: 'input', validator:validate.isIdCard }, { label: '户籍地址', required: true, value: 'householdAddress', titleClass: 'title', placeholder: '例:**路**号**小区**号楼**室', type: 'input', num: 8, hidden: true, }, { 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: 'b', label: '出差' }, { value: 'b', label: '旅游' }, { value: 'b', 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: '已经确诊', label: '已经确诊' }, { value: '疑似诊断', label: '疑似诊断' }, { value: '亲密接触者', label: '亲密接触者' }, { value: '居家观察/正在接受集中医学观察', label: '居家观察/正在接受集中医学观察' }, { value: '已解除集中医学观察', label: '已解除集中医学观察' }, { value: '无上述情况', label: '无上述情况' }], showList: [{ value: '亲密接触者', show: [32, 35, 38, 40, 43, 45, 47] }, { value: '居家观察/正在接受集中医学观察', 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: '发热', label: '发热' }, { value: '咳嗽', label: '咳嗽' }, { value: '流涕', label: '流涕' }, { value: '咽痛', label: '咽痛' }, { value: '咳痰', label: '咳痰' }, { value: '胸痛', label: '胸痛' }, { value: '肌肉酸痛/关节痛', label: '肌肉酸痛/关节痛' }, { value: '气促', label: '气促' }, { value: '腹泻', label: '腹泻' }, { value: '以上均无', label: '以上均无' }] }, ], form: { agree: 0, orgId: '', orgName: '', department: '', position: '', name: '', phone: '', nationality: '', idCard: '', returnToWork: '', householdAddress: '', residenceAddress: '', planReturnDate: '' } } }, onLoad(option) { this.getOrg() 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, value: item.id }) }) this.list[0].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 // 赋值 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") { console.log(1,22) item.opts.forEach(opt => { val.split(',').forEach(v => { if (v === opt.label) { console.log(opt) this.$set(opt, 'checked', true) } }) }) } } } } } }) }, // 更新复选框绑定的表单内容 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.label } 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].label) } } 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) { showList.forEach(item => { item.show.forEach(child => { this.list.forEach(row => { if (child == row.num) { this.$set(row, 'hidden', !val.includes(item.value)) } }) }) }) } } 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 }填写错误` }) } }, // 更新下拉框绑定的表单内容 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 } if (prop == 'orgName') { this.$set(this.form, 'orgId', opts[val].value) this.$set(this.form, prop, opts[val].label) } else { this.$set(this.form, 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 { this.$http.post(`/sict-ncov/report`, this.form).then(res => { const d = res.data if (d.code == 1) { uni.navigateBack() 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>