<template> <view class="questionnaire"> <form @submit="formSubmit" > <template v-for="(item,index) in list"> <view v-if="item.type == 'radio'" class="margin-top padding sict-label" :key="item.value"> <view v-show="!item.hidden"> <span style="color:red;display: inline-block; vertical-align:inherit;margin-right:4upx" v-if="item.required">*</span> {{index+1}}、 {{item.label}} </view> <view class="text-right sict-value" v-show="!item.hidden"> <radio-group> <view> <view class="label" v-for="(opt, optIndex) in item.opts" :key="opt.label" @click="radioChange(opt.value,item.value)"> <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 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" v-if="item.required">*</span>{{index+1}}、{{item.label}}</view> <picker @change="updatePickerVal($event,item.value)" range-key="label" :value="form[item.value]" :range="item.opts"> <view class="picker"> {{form[item.value]>-1?item.opts[form[item.value]].label:'请选择'}} </view> </picker> </view> </template> <template v-else-if="item.type == 'pickerMore'"> <view class="margin-top" :key="index"> <uni-collapse> <uni-collapse-item :title="index+1 +'、' + item.label" :open="true" :required="item.required"> <view class="padding-lr"> <view class="uni-list"> <checkbox-group> <label class="uni-list-cell uni-list-cell-pd" v-for="(itemCheck,indexCheck) in item.opts" :key="itemCheck.value" @click="checkboxChange(indexCheck,item.opts,itemCheck,item.value)"> <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" v-if="item.required">*</span>{{index+1}}、{{item.label}}</view> <picker mode="date" :value="date" start="2015-09-01" end="2020-09-01" @change="updatePickerVal($event,item.value)"> <view class="picker"> {{form[item.value]>-1?item.opts[form[item.value]].label:'请选择'}} </view> </picker> </view> </template> <template v-else-if="item.type == 'input'" > <view class="cu-form-group margin-top padding-rl" :key="item.value"> <view :class="item.titleClass"> <span style="color:red;display: inline-block; vertical-align:inherit;margin-right:4upx" v-if="item.required">*</span> {{index+1}}、{{item.label}}</view> <input class="text-right" :placeholder="item.placeholder" :type="item.controType" :value="form[item.value]" name="input" @input="updateInputVal($event,item.value)"></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)" :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"> <view class="uni-padding-wrap uni-common-mt"> <view class="padding-top padding-bottom"> <checkbox-group @change="checkboxChange($event,'agree')"> <label> <checkbox value="A" :checked="form.agree == 'a'" class="fl" style="margin-top:4upx" /> <view style="padding-left:60upx;padding-top:6upx" @click="modalName = 'Modal'"> 我已阅读理解了全部情况,我同意参加 </view> </label> </checkbox-group> </view> </view> </checkbox-group> </view> <view class="cu-modal" :class="modalName=='Modal'?'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> <button @click="modalName = ''" class="cu-btn block bg-blue margin-tb-sm lg">我知道了</button> </view> </view> </view> <view class="padding"> <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:'', id:'', radio:[], shanghaiList:[ { label:'是否离沪', required:true, value:'left', titleClass:'title', type:'picker', opts:[{value:'a',label:'是'},{value:'b',label:'否'}] }, { label:'离沪原因', required:true, value:'leftReason', titleClass:'title', type:'picker', opts:[{value:'a',label:'探亲'},{value:'b',label:'出差'},{value:'b',label:'旅游'},{value:'b',label:'其他'}] }, { label:'离沪出发日期', required:true, value:'leftDate', titleClass:'title', type:'date', }, { label:'离沪方式', required:true, value:'leftVehicle', titleClass:'title', type:'date', opts:[{value:'a',label:'火车 '},{value:'飞机',label:'否'},{value:'客车',label:'否'},{value:'自驾',label:'否'}] }, { label:'离沪车次/航班', required:true, value:'leftVehicleNum', titleClass:'title', placeholder:'请输入地址', type:'input', }, { label:'离沪到达日期', required:true, value:'leftReachDate', titleClass:'title', type:'date', }, { label:'离沪目的地', required:true, value:'leftTarget', titleClass:'title', placeholder:'请输入地址', type:'input', }, { label:'离沪具体地址', required:true, value:'leftAddress', titleClass:'title', placeholder:'请输入地址', type:'input', }, { label:'离沪同行者姓名(没有填无)', required:true, value:'leftDependentNames', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'离沪同行者联系方式(没有填无)', required:true, value:'leftDependentPhones', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'是否返沪', required:true, value:'backed', titleClass:'title', type:'picker', opts:[{value:'a',label:'是'},{value:'b',label:'否'}] }, { label:'返沪出发地', required:true, value:'backFrom', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'返沪出发日期', required:true, value:'backDate', titleClass:'title', type:'date', }, { label:'返沪方式', required:true, value:'backVehicle', titleClass:'title', type:'picker', opts:[{value:'a',label:'火车 '},{value:'飞机',label:'否'},{value:'客车',label:'否'},{value:'自驾',label:'否'}] }, { label:'返沪车次/航班', required:true, value:'backVehicleNum', titleClass:'title', placeholder:'请输入地址', type:'input', }, { label:'返沪到达日期', required:true, value:'backReachedDate', titleClass:'title', type:'date', }, { label:'返沪同行者姓名(没有填无)', required:true, value:'backDependentNames', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'返沪同行者联系方式(没有填无)', required:true, value:'backDependentPhones', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'当前状况', required:true, value:'currentStatus', titleClass:'title', type:'picker', opts:[{value:'a',label:'已经确诊'},{value:'b',label:'疑似诊断'},{value:'b',label:'亲密接触者'},{value:'b',label:'正在接受集中医学观察'},{value:'b',label:'居家观察'},{value:'b',label:'已解除集中医学观察'},{value:'b',label:'无上述情况'}] }, { 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:'无上述症状'}] }, { label:'湖北接触史', required:true, value:'relativesGastricCount', titleClass:'title', type:'picker', opts:[{value:'a',label:'已经确诊'},{value:'b',label:'疑似诊断'},{value:'b',label:'亲密接触者'},{value:'b',label:'正在接受集中医学观察'},{value:'b',label:'居家观察'},{value:'b',label:'已解除集中医学观察'},{value:'b',label:'无上述情况'}] } ], list:[ { label:'单位名称', required:true, value:'orgId', titleClass:'title', type:'picker', opts:[] }, { label:'所在部门', required:true, value:'department', titleClass:'title', placeholder:'请输入所在部门', type:'input', }, { label:'职务', required:true, 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:'请输入联系方式', type:'input', }, { label:'国籍', required:true, value:'nationality', titleClass:'title', type:'picker', opts:[{value:'a',label:'中国'},{value:'b',label:'其它'}] }, { label:'身份证号/护照号', required:true, value:'idCard', titleClass:'title', placeholder:'请输入身份证号/护照号', type:'input', }, { label:'户籍地址', required:true, value:'householdAddress', titleClass:'title', placeholder:'请输入户籍地址', type:'input', }, { label:'在沪居住(暂住)地址', required:true, value:'residenceAddress', titleClass:'title', placeholder:'请输入地址', type:'input', }, { label:'是否复工', required:true, value:'returnToWork', titleClass:'title', type:'radio', opts:[{value:'a',label:'是'},{value:'b',label:'否'}], }, { label:'计划复工日期', hidden:true, required:true, value:'planReturnDate', titleClass:'title', type:'date' }, { label:'是否离沪', required:true, value:'left', titleClass:'title', type:'picker', opts:[{value:'a',label:'是'},{value:'b',label:'否'}] }, { label:'离沪原因', required:true, value:'leftReason', titleClass:'title', type:'picker', opts:[{value:'a',label:'探亲'},{value:'b',label:'出差'},{value:'b',label:'旅游'},{value:'b',label:'其他'}] }, { label:'离沪出发日期', required:true, value:'leftDate', titleClass:'title', type:'date', }, { label:'离沪方式', required:true, value:'leftVehicle', titleClass:'title', type:'date', opts:[{value:'a',label:'火车 '},{value:'飞机',label:'否'},{value:'客车',label:'否'},{value:'自驾',label:'否'}] }, { label:'离沪车次/航班', required:true, value:'leftVehicleNum', titleClass:'title', placeholder:'请输入地址', type:'input', }, { label:'离沪到达日期', required:true, value:'leftReachDate', titleClass:'title', type:'date', opts:[{value:'a',label:'是'},{value:'b',label:'否'}] }, { label:'离沪目的地', required:true, value:'leftTarget', titleClass:'title', placeholder:'请输入地址', type:'input', }, { label:'离沪具体地址', required:true, value:'leftAddress', titleClass:'title', placeholder:'请输入地址', type:'input', }, { label:'离沪同行者姓名(没有填无)', required:true, value:'leftDependentNames', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'离沪同行者联系方式(没有填无)', required:true, value:'leftDependentPhones', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'是否返沪', required:true, value:'backed', titleClass:'title', type:'picker', opts:[{value:'a',label:'是'},{value:'b',label:'否'}] }, { label:'返沪出发地', required:true, value:'backFrom', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'返沪出发日期', required:true, value:'backDate', titleClass:'title', type:'date', }, { label:'返沪方式', required:true, value:'backVehicle', titleClass:'title', type:'picker', opts:[{value:'a',label:'火车 '},{value:'飞机',label:'否'},{value:'客车',label:'否'},{value:'自驾',label:'否'}] }, { label:'返沪车次/航班', required:true, value:'backVehicleNum', titleClass:'title', placeholder:'请输入地址', type:'input', }, { label:'返沪到达日期', required:true, value:'backReachedDate', titleClass:'title', type:'date', }, { label:'返沪同行者姓名(没有填无)', required:true, value:'backDependentNames', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'返沪同行者联系方式(没有填无)', required:true, value:'backDependentPhones', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'当前状况', required:true, value:'currentStatus', titleClass:'title', type:'picker', opts:[{value:'a',label:'已经确诊'},{value:'b',label:'疑似诊断'},{value:'b',label:'亲密接触者'},{value:'b',label:'正在接受集中医学观察'},{value:'b',label:'居家观察'},{value:'b',label:'已解除集中医学观察'},{value:'b',label:'无上述情况'}] }, { 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:'以上均无'}] }, { label:'湖北接触史', required:true, value:'relativesGastricCount', titleClass:'title', type:'radio', opts:[{value:'已经确诊',label:'已经确诊'},{value:'疑似诊断',label:'疑似诊断'},{value:'亲密接触者',label:'亲密接触者'},{value:'正在接受集中医学观察',label:'正在接受集中医学观察'},{value:'居家观察',label:'居家观察'},{value:'已解除集中医学观察',label:'已解除集中医学观察'}] }, { label:'患者接触史', required:true, value:'relativesGastricCount', titleClass:'title', type:'radio', opts:[{value:'接触过已确诊或疑似患者',label:'接触过已确诊或疑似患者'},{value:'家属接触过已确诊或疑似患者',label:'家属接触过已确诊或疑似患者'}] }, { label:'隔离地址', required:true, value:'quarantineAdress', titleClass:'title', placeholder:'请输入', type:'input', }, { label:'隔离开始日期', required:true, value:'quarantineDate', titleClass:'title', type:'date', }, ], form:{ agree:'', orgId:-1, department:'', position:'', name:'', phone:'', nationality:-1, idCard:'', returnToWork:-1, householdAddress:'', residenceAddress:'', planReturnDate:'' } } }, onLoad(option) { this.getOrg() }, methods: { 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(id){ }, // 更新复选框绑定的表单内容 checkboxChange(index, checkList, obj, prop) { for (var i = 0, lenI = checkList.length; i < lenI; ++i) { if (index == i) { this.$set(checkList[i], 'checked', !checkList[i].checked) } } // 处理以上均无情况 if (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) } else { this.$set(checkList[checkList.length - 1], 'checked', false) } }, radioChange(val,prop){ this.$set(this.form,prop,val) this.isShowChild() }, isShowChild(){ console.log(this.form['returnToWork']) 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 }, // 更新下拉框绑定的表单内容 updatePickerVal(event,props){ this.$set(this.form, props, event.detail.value) }, // 提交信息 formSubmit(){ console.log(this.form) // let flag = true // let msg = '' // for (let i = 0; i < this.list.length; i++) { // if(this.list[i].required){ // if(!this.form[this.list[i].value]){ // flag = false // uni.showToast({ // icon: 'none', // title: "第"+(i+1)+"项有必填数据未填写" // }) // break // } // if(!flag){ // break // } // } // } // if(!flag){ // return false // }else{ // this.$http.post(`/ewell-gastric-cancer-data/wechat/report`,obj).then(res => { // const d = res.data // if(d.code == 1){ // }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; } } } 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>