Commit 6fd4f53f authored by gengchunlei's avatar gengchunlei

医生端小程序 v1.2 1、复筛表单

parent a9180068
...@@ -66,7 +66,7 @@ export default { ...@@ -66,7 +66,7 @@ export default {
if (!token) { if (!token) {
token = sessionStorage.getItem('token') token = sessionStorage.getItem('token')
if (process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
token = '28be5732-4db3-4f8e-b569-b58e58aa14e9' token = 'c6a57b4f-20c4-4b12-961c-c41989b121c0'
} }
} }
if (token) { if (token) {
......
...@@ -50,16 +50,265 @@ ...@@ -50,16 +50,265 @@
:options='medicalHistoryList' :options='medicalHistoryList'
v-model:value='form.medicalHistory' v-model:value='form.medicalHistory'
:fieldNames="{text: 'name', value: 'value'}" :fieldNames="{text: 'name', value: 'value'}"
@change="e => form.medicalHistory = checkboxReject(form.medicalHistory, [99])" @change='e => form.medicalHistory = checkboxReject(form.medicalHistory, [99])'
/> />
</div> </div>
</div> </div>
</van-popup> </van-popup>
</div> </div>
</van-form> <div v-if='familyHistoryShow'>
<div class='label-title mt-5'>家族史(可多选)</div>
<van-field class='checkbox-his'>
<template #input>
<van-checkbox-group v-model='form.familyHistory' class='w-full'>
<div v-for='(item, index) in familyHistoryInfoList' :key='item.value'>
<div
@click='toggle(index)'
class='form-input input-back mt-2 flex justify-between'
:style="{borderRadius: form.familyHistory.includes(item.value) && [1, 3, 5, 7].includes(item.value) ? '8px 8px 0px 0px ': '8px'}"
>
<div>{{ item.name }}</div>
<div>
<van-checkbox
:name='item.value'
:ref='el => checkboxRefs[index] = el'
@click.stop='toggle(index)'
/>
</div>
</div>
<div v-for='(item2, index2) in familyHistoryList'>
<div v-if='form.familyHistory.includes(item.value) && item2.diseaseType == item.value' class='relation-bis'>
<div class='top-title'>以下亲人若存在{{ item2.diseaseTypeName }}病史,请填写发病年龄</div>
<div class='flex flex-wrap justify-between gap-x-2.5 gap-y-2.5'>
<div v-for='(item1,index1) in item2.relativeAgeList' :key='index1' style='width: 48%;'>
<div>
<van-field
colon
label-width='42px'
v-model='item1.age'
:label='item1.relativeTypeName'
placeholder='请输入'
style='padding: 8px;border-radius: 4px'
>
<template #extra>
<span class='mr-2'></span>
</template>
</van-field>
</div>
</div>
</div>
</div>
</div>
</div>
</van-checkbox-group>
</template>
</van-field>
</div>
<div v-if='highShow'>
<div class='label-title mt-5'>身高</div>
<van-field
v-model='form.height'
clear-icon
placeholder='请输入10~300之间数字,允许1位小数'
class='input-back mt-2 form-input'
:rules='rules.height'
>
<template #extra>
<span class='mr-2'>cm</span>
</template>
</van-field>
</div>
<div v-if='highShow'>
<div class='label-title mt-5'>体重</div>
<van-field
v-model='form.weight'
clear-icon
placeholder='请输入20~500之间数字,允许2位小数'
class='input-back mt-2 form-input'
:rules='rules.weight'
>
<template #extra>
<span class='mr-2'>kg</span>
</template>
</van-field>
</div>
<div v-if='highShow'>
<div class='no-req-label mt-5'>BMI</div>
<van-field
v-model='form.bmi'
clear-icon
placeholder='请输入'
class='input-back mt-2 form-input'
>
<template #extra>
<span class='mr-2'>kg/m²</span>
</template>
</van-field>
</div>
<div v-if='waistShow'>
<div class='label-title mt-5'>腰围</div>
<van-field
v-model='form.waistline'
clear-icon
placeholder='请输入10~150之间数字,允许1位小数'
class='input-back mt-2 form-input'
:rules='rules.waistline'
>
<template #extra>
<span class='mr-2'>cm</span>
</template>
</van-field>
</div>
<div v-if='womanMHShow'>
<div class='no-req-label mt-5'>女性病史</div>
<van-field
v-model='form.femaleMedicalHistoryName'
readonly
is-link
placeholder='请选择'
class='input-back mt-2 form-input'
@click='showFemaleMedicalHistory= true'
>
<template #input>
<span class='text-end' v-if='form.femaleMedicalHistoryName'>{{ form.femaleMedicalHistoryName }}</span>
<span class='text-end' v-if='!form.femaleMedicalHistoryName' style='color: #dfdfe1'>请选择</span>
</template>
</van-field>
<van-popup v-model:show='showFemaleMedicalHistory' position='bottom'>
<div class='p-4' style='height: 100%'>
<div class='flex justify-between items-center mb-4 pop-title'>
<div class='greyColor' @click='showFemaleMedicalHistory = false' style='font-weight: 400'>取消</div>
<div>女性病史(可多选)</div>
<div class='blueColor' @click='femaleMedicalHistoryConfirm'>确定</div>
</div>
<div style='height: 80%;overflow: auto'>
<CheckBtn multiple
column-1
:options="store.getDict('CP00127')"
v-model:value='form.femaleMedicalHistory'
:fieldNames="{text: 'name', value: 'value'}"
/>
</div>
</div>
</van-popup>
</div>
<div v-if='medicationHShow'>
<div class='no-req-label mt-5'>用药史</div>
<van-field
v-model='form.medicineHistoryName'
readonly
is-link
placeholder='请选择'
class='input-back mt-2 form-input'
@click='showMedicineHistory= true'
>
<template #input>
<span class='text-end' v-if='form.medicineHistoryName'>{{ form.medicineHistoryName }}</span>
<span class='text-end' v-if='!form.medicineHistoryName' style='color: #dfdfe1'>请选择</span>
</template>
</van-field>
<van-popup v-model:show='showMedicineHistory' position='bottom'>
<div class='p-4' style='height: 100%'>
<div class='flex justify-between items-center mb-4 pop-title'>
<div class='greyColor' @click='showMedicineHistory = false' style='font-weight: 400'>取消</div>
<div>用药史(可多选)</div>
<div class='blueColor' @click='medicineHistoryConfirm'>确定</div>
</div>
<div style='height: 80%;overflow: auto'>
<CheckBtn multiple
column-1
:options="medicineHistoryList"
v-model:value='form.medicineHistory'
:fieldNames="{text: 'name', value: 'value'}"
/>
</div>
</div>
</van-popup>
</div>
<div v-if='triglycerideShow'>
<div class='no-req-label mt-5'>高密度脂蛋白胆固醇</div>
<van-field
v-model='form.hdlCholesterin'
clear-icon
placeholder='请输入'
class='input-back mt-2 form-input'
>
<template #extra>
<span class='mr-2'>mmol/L</span>
</template>
</van-field>
</div>
<div v-if='triglycerideShow'>
<div class='no-req-label mt-5'>甘油三酯</div>
<van-field
v-model='form.triglyceride'
clear-icon
placeholder='请输入'
class='input-back mt-2 form-input'
>
<template #extra>
<span class='mr-2'>mmol/L</span>
</template>
</van-field>
</div>
<div v-if='triglycerideShow'>
<div class='no-req-label mt-5'>总胆固醇</div>
<van-field
v-model='form.serumCholesterin'
clear-icon
placeholder='请输入'
class='input-back mt-2 form-input'
>
<template #extra>
<span class='mr-2'>mmol/L</span>
</template>
</van-field>
</div>
<div v-if='babyMHShow'>
<div class='no-req-label mt-5'>有害物质接触或婴幼儿时期病史</div>
<van-field
v-model='form.touchHarmfulName'
readonly
is-link
placeholder='请选择'
class='input-back mt-2 form-input'
@click='showTouchHarmful= true'
>
<template #input>
<span class='text-end' v-if='form.touchHarmfulName'>{{ form.touchHarmfulName }}</span>
<span class='text-end' v-if='!form.touchHarmfulName' style='color: #dfdfe1'>请选择</span>
</template>
</van-field>
<van-popup v-model:show='showTouchHarmful' position='bottom'>
<div class='p-4' style='height: 100%'>
<div class='flex justify-between items-center mb-4 pop-title'>
<div class='greyColor' @click='showTouchHarmful = false' style='font-weight: 400'>取消</div>
<div>用药史(可多选)</div>
<div class='blueColor' @click='touchHarmfulConfirm'>确定</div>
</div>
<div style='height: 80%;overflow: auto'>
<CheckBtn multiple
column-1
:options="store.getDict('CP00130')"
v-model:value='form.touchHarmful'
:fieldNames="{text: 'name', value: 'value'}"
/>
</div>
</div>
</van-popup>
</div>
</van-form>
</div> </div>
</template> </template>
...@@ -88,10 +337,12 @@ const defaultForm = (info = {}) => { ...@@ -88,10 +337,12 @@ const defaultForm = (info = {}) => {
exerciseFrequency: undefined, exerciseFrequency: undefined,
everyExercise: undefined, everyExercise: undefined,
femaleMedicalHistory: undefined, femaleMedicalHistory: undefined,
femaleMedicalHistoryName: undefined,
hdlCholesterin: undefined, hdlCholesterin: undefined,
triglyceride: undefined, triglyceride: undefined,
serumCholesterin: undefined, serumCholesterin: undefined,
touchHarmful: undefined, touchHarmful: [],
touchHarmfulName: undefined,
pressureOneSbp: undefined, pressureOneSbp: undefined,
pressureOneDbp: undefined, pressureOneDbp: undefined,
pressureTwoSbp: undefined, pressureTwoSbp: undefined,
...@@ -129,6 +380,7 @@ const defaultForm = (info = {}) => { ...@@ -129,6 +380,7 @@ const defaultForm = (info = {}) => {
diseaseRelativeList: [], diseaseRelativeList: [],
mediumStrength: undefined, mediumStrength: undefined,
medicineHistory: [], medicineHistory: [],
medicineHistoryName: undefined,
informedConsent: undefined, informedConsent: undefined,
isExerciseFive: undefined isExerciseFive: undefined
} }
...@@ -150,7 +402,14 @@ export default { ...@@ -150,7 +402,14 @@ export default {
store: useStore(), store: useStore(),
//病史弹窗 //病史弹窗
showMedicalHistory: false, showMedicalHistory: false,
//女性病史
showFemaleMedicalHistory: false,
//用药史
showMedicineHistory:false,
//有害物质接触或婴幼儿时期病史
showTouchHarmful: false,
checkboxRefs: [],
form: {}, form: {},
formRight: { formRight: {
hypertensionHighItemSelect: [], hypertensionHighItemSelect: [],
...@@ -174,74 +433,77 @@ export default { ...@@ -174,74 +433,77 @@ export default {
height: [ height: [
{ required: true, message: '请输入' }, { required: true, message: '请输入' },
{ {
validator: (rule, value, callback) => { validator: (value, rule) => {
// const regex = /^([1-9]\d{1}(?:\.\d{1})?|[1-2]\d{2}(?:\.\d{1})?|300)$/ let res = true
const regex = /^\d+(\.\d{1})?$/ const regex = /^\d+(\.\d{1})?$/
if (value && !(Number(value) >= 10 && Number(value) <= 300 && regex.test(Number(value)))) { if (value && !(Number(value) >= 10 && Number(value) <= 300 && regex.test(Number(value)))) {
callback('请输入10到300之间的数字,允许一位小数') res = false
} else {
callback()
} }
} return res
},
message: `请输入10到300之间的数字,允许一位小数`
} }
], ],
weight: [ weight: [
{ required: true, message: '请输入' }, { required: true, message: '请输入' },
{ {
validator: (rule, value, callback) => { validator: (value, rule) => {
// const regex = /^([2-9]\d{1}(?:\.\d{1,2})?|[1-4]\d{2}(?:\.\d{1,2})?|500)$/ let res = true
const regex = /^\d+(\.\d{1,2})?$/ const regex = /^\d+(\.\d{1,2})?$/
if (value && !(Number(value) >= 20 && Number(value) <= 500 && regex.test(Number(value)))) { if (value && !(Number(value) >= 20 && Number(value) <= 500 && regex.test(Number(value)))) {
callback('请输入20到500之间的数字,允许两位小数') res = false
} else {
callback()
} }
} return res
},
message: `请输入20~500之间数字,允许2位小数`
} }
], ],
waistline: [ waistline: [
{ required: true, message: '请输入' }, { required: true, message: '请输入' },
{ {
validator: (rule, value, callback) => { validator: (value, rule) => {
// const regex = /^([1-9]\d{1}(?:\.\d{1})?|[1][0-4]\d(?:\.\d{1})?|150)$/ let res = true
const regex = /^\d+(\.\d{1})?$/ const regex = /^\d+(\.\d{1})?$/
if (value && !(Number(value) >= 10 && Number(value) <= 150 && regex.test(Number(value)))) { if (value && !(Number(value) >= 10 && Number(value) <= 150 && regex.test(Number(value)))) {
callback('请输入10到150之间的数字,允许一位小数') res = false
} else {
callback()
} }
} return res
},
message: `请输入10~150之间数字,允许1位小数`
} }
], ],
hdlCholesterin: [{ hdlCholesterin: [{
validator: (rule, value, callback) => { validator: (value, rule) => {
const regex = /^\d+(\.\d{1,2})?$/ const regex = /^\d+(\.\d{1,2})?$/
let res = true
if (value && !regex.test(value)) { if (value && !regex.test(value)) {
callback('请输入正确的数字') res = false
} else {
callback()
} }
} return res
},
message:`请输入正确的数字`
}], }],
triglyceride: [{ triglyceride: [{
validator: (rule, value, callback) => { validator: (value, rule) => {
const regex = /^\d+(\.\d{1,2})?$/ const regex = /^\d+(\.\d{1,2})?$/
let res = true
if (value && !regex.test(value)) { if (value && !regex.test(value)) {
callback('请输入正确的数字') res = false
} else {
callback()
} }
} return res
},
message:`请输入正确的数字`
}], }],
serumCholesterin: [{ serumCholesterin: [{
validator: (rule, value, callback) => { validator: ( value, rule) => {
const regex = /^\d+(\.\d{1,2})?$/ const regex = /^\d+(\.\d{1,2})?$/
let res = true
if (value && !regex.test(value)) { if (value && !regex.test(value)) {
callback('请输入正确的数字') res = false
} else {
callback()
} }
} return res
},
message:`请输入正确的数字`
}], }],
exerciseFrequency: [{ required: true, message: '请选择' }], exerciseFrequency: [{ required: true, message: '请选择' }],
dietaryHabit: [{ required: true, message: '请选择' }], dietaryHabit: [{ required: true, message: '请选择' }],
...@@ -694,7 +956,7 @@ export default { ...@@ -694,7 +956,7 @@ export default {
this.cleanMedicalHistory() this.cleanMedicalHistory()
this.cleanFamilyHistory() this.cleanFamilyHistory()
this.cleanMedicineHistory() this.cleanMedicineHistory()
this.changeFamilyHis(this.form.familyHistory) this.changeFamilyHis()
}, },
immediate: true immediate: true
} }
...@@ -895,8 +1157,8 @@ export default { ...@@ -895,8 +1157,8 @@ export default {
} }
} }
}, },
changeFamilyHis(e = []) { changeFamilyHis() {
this.form.familyHistory = this.checkboxReject(this.form.familyHistory, e, [9]) this.form.familyHistory = this.checkboxReject(this.form.familyHistory, [9])
let temp = [] let temp = []
this.form.familyHistory.forEach((item, index) => { this.form.familyHistory.forEach((item, index) => {
if (item == 1 || item == 3 || item == 5 || item == 7) { if (item == 1 || item == 3 || item == 5 || item == 7) {
...@@ -904,7 +1166,7 @@ export default { ...@@ -904,7 +1166,7 @@ export default {
let base = this.familyHistoryList.filter(item1 => item1.diseaseType == item) || [] let base = this.familyHistoryList.filter(item1 => item1.diseaseType == item) || []
let obj = { let obj = {
id_: index + 1, id_: index + 1,
diseaseTypeName: `${name}-亲人类型`, diseaseTypeName: `${name}`,
diseaseType: item, diseaseType: item,
selectRelativeType: [], selectRelativeType: [],
checkRequired: false, checkRequired: false,
...@@ -1456,26 +1718,26 @@ export default { ...@@ -1456,26 +1718,26 @@ export default {
//家族史 非空校验 //家族史 非空校验
familyHistoryReq() { familyHistoryReq() {
let flag = 0 let flag = 0
this.familyHistoryList.forEach(item => { // this.familyHistoryList.forEach(item => {
let list = item.selectRelativeType || [] // let list = item.selectRelativeType || []
if (!item.selectRelativeType.length) { // if (!item.selectRelativeType.length) {
item.checkRequired = true // item.checkRequired = true
flag++ // flag++
} else { // } else {
item.checkRequired = false // item.checkRequired = false
} // }
item.relativeAgeList.forEach(item1 => { // item.relativeAgeList.forEach(item1 => {
if (list.includes(item1.relativeType) && !item1.age) { // if (list.includes(item1.relativeType) && !item1.age) {
item1.inputRequired = true // item1.inputRequired = true
flag++ // flag++
} else { // } else {
item1.inputRequired = false // item1.inputRequired = false
} // }
if (!list.includes(item1.relativeType)) { // if (!list.includes(item1.relativeType)) {
item1.age = undefined // item1.age = undefined
} // }
}) // })
}) // })
return flag return flag
}, },
// 饮酒种类变化 // 饮酒种类变化
...@@ -1509,7 +1771,47 @@ export default { ...@@ -1509,7 +1771,47 @@ export default {
this.form.medicalHistoryName = res.join() this.form.medicalHistoryName = res.join()
this.showMedicalHistory = false this.showMedicalHistory = false
}, },
//女性病史弹窗确认选择
femaleMedicalHistoryConfirm() {
let res = []
this.store.getDict('CP00127').forEach(item => {
let selected = this.form.femaleMedicalHistory.filter(i => i == item.value)
if (selected && selected.length) {
res.push(item.name)
}
})
this.form.femaleMedicalHistoryName = res.join()
this.showFemaleMedicalHistory = false
},
//用药史弹窗确认选择
medicineHistoryConfirm() {
let res = []
this.medicineHistoryList.forEach(item => {
let selected = this.form.medicineHistory.filter(i => i == item.value)
if (selected && selected.length) {
res.push(item.name)
}
})
this.form.medicineHistoryName = res.join()
this.showMedicineHistory = false
},
//有害物质接触或婴幼儿时期病史弹窗确认选择
touchHarmfulConfirm() {
let res = []
this.store.getDict('CP00130').forEach(item => {
let selected = this.form.touchHarmful.filter(i => i == item.value)
if (selected && selected.length) {
res.push(item.name)
}
})
this.form.touchHarmfulName = res.join()
this.showTouchHarmful = false
},
//家族史多选
toggle(index) {
this.checkboxRefs[index].toggle()
this.changeFamilyHis()
},
//提交 //提交
submit() { submit() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
...@@ -1612,6 +1914,24 @@ export default { ...@@ -1612,6 +1914,24 @@ export default {
font-weight: bold; font-weight: bold;
} }
.checkbox-his {
padding: 0px !important;
margin-top: 4px;
}
.relation-bis {
background: #F5F5F5;
padding: 8px 12px;
border-radius: 0px 0px 8px 8px;
.top-title {
color: #8C8C8C;
font-size: 12px;
line-height: 24px;
margin-bottom: 4px;
}
}
:deep(.van-popup) { :deep(.van-popup) {
height: 50% !important; height: 50% !important;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment