Commit f2053694 authored by gengchunlei's avatar gengchunlei

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

parent b3e2ebf3
......@@ -66,7 +66,7 @@ export default {
if (!token) {
token = sessionStorage.getItem('token')
if (process.env.NODE_ENV !== 'production') {
token = 'f44efca7-3c9b-4638-b8b0-8e35c6fbb54b'
token = 'ce71f4f0-5464-4b22-9cad-5f53e66a8875'
}
}
if (token) {
......
......@@ -14,7 +14,7 @@
</div>
<div class='top-label mt-3'>
<span >报告日期:<span class='color-b'>{{ info.screenDate || '-' }}</span></span>
<span>报告日期:<span class='color-b'>{{ info.screenDate || '-' }}</span></span>
</div>
<div class='top-label'>
<span>慢病高危评估结果:</span>
......@@ -26,12 +26,35 @@
</div>
<div v-if='info.specialScreenResult && info.specialScreenResult !=9'
class='flex items-center flex-wrap gap-x-2.5 gap-y-1 mt-2'>
<div v-for='(item, index) in highRiskList' :key='index' class='tag tag-red'>
<div v-for='(item, index) in highRiskList' :key='index' class='tag tag-red'
@click='toShowHighRisk(item)'>
<span>{{ item.name }}</span><span class='color-red'>{{ item.num || 0 }}</span>
</div>
</div>
</div>
</div>
<van-popup v-model:show='showRiskHighItem' position='bottom'>
<div class='p-4' style='height: 100%'>
<div class='flex justify-between items-center mb-4 pop-title'>
<div></div>
<div>存在以下风险元素</div>
<div @click='showRiskHighItem = false' style='font-weight: 400'>取消</div>
</div>
<!-- <div class=''></div>-->
<div style='height: 80%;overflow: auto'>
<div class='pt-3 pb-3 bg-white h-full'>
<div v-for='(item, index) in riskHighItemList' :key='item.id'>
<div class='detail-content flex'>
<div>{{index+1}}</div>
<div>{{item.name}}</div>
</div>
</div>
</div>
</div>
</div>
</van-popup>
</div>
<div class='p-3 grow cont-box'>
<div class='p-3 h-full cont-inner'>
......@@ -154,7 +177,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>BMI(体质指数)</span>
<span class='text-end'>
<span>{{ info.bmi || '-'}} kg/m²</span>
<span>{{ info.bmi || '-' }} kg/m²</span>
</span>
</div>
</div>
......@@ -167,7 +190,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>腰围</span>
<span class='text-end'>
<span>{{ info.waistline || '-'}} cm</span>
<span>{{ info.waistline || '-' }} cm</span>
</span>
</div>
</div>
......@@ -180,20 +203,23 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>锻炼频率</span>
<span class='text-end'>
<span>{{info.exerciseFrequencyName || '-'}}</span>
<span v-if="info.exerciseFrequency == 2 && info.isExerciseFiveName">({{info.isExerciseFiveName}})</span>
<span>{{ info.exerciseFrequencyName || '-' }}</span>
<span
v-if='info.exerciseFrequency == 2 && info.isExerciseFiveName'>({{ info.isExerciseFiveName }})</span>
</span>
</div>
<div class='flex justify-between py-1 border-bottom item' v-if="[1,2,3].includes(info.exerciseFrequency) && exerciseShow">
<div class='flex justify-between py-1 border-bottom item'
v-if='[1,2,3].includes(info.exerciseFrequency) && exerciseShow'>
<span class='shrink-0 mr-2 label'>每次锻炼时间</span>
<span class='text-end'>
<span>{{info.everyExercise || '-'}} 分钟</span>
<span>{{ info.everyExercise || '-' }} 分钟</span>
</span>
</div>
<div class='flex justify-between py-1 border-bottom item' v-if="[1,2,3].includes(info.exerciseFrequency) && exerciseShow">
<div class='flex justify-between py-1 border-bottom item'
v-if='[1,2,3].includes(info.exerciseFrequency) && exerciseShow'>
<span class='shrink-0 mr-2 label'>可达到中等及以上运动强度</span>
<span class='text-end'>
<span>{{info.mediumStrengthName}}</span>
<span>{{ info.mediumStrengthName }}</span>
</span>
</div>
</div>
......@@ -206,7 +232,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>女性病史</span>
<span class='text-end'>
<span>{{ info.femaleMedicalHistoryName || '-'}}</span>
<span>{{ info.femaleMedicalHistoryName || '-' }}</span>
</span>
</div>
</div>
......@@ -219,7 +245,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>用药史</span>
<span class='text-end'>
<span>{{ info.medicineHistoryName || '-'}}</span>
<span>{{ info.medicineHistoryName || '-' }}</span>
</span>
</div>
</div>
......@@ -232,7 +258,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>高密度脂蛋白胆固醇</span>
<span class='text-end'>
<span>{{ info.hdlCholesterin || '-'}} mmol/L</span>
<span>{{ info.hdlCholesterin || '-' }} mmol/L</span>
</span>
</div>
</div>
......@@ -245,7 +271,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>甘油三酯</span>
<span class='text-end'>
<span>{{ info.triglyceride || '-'}} mmol/L</span>
<span>{{ info.triglyceride || '-' }} mmol/L</span>
</span>
</div>
</div>
......@@ -258,7 +284,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>总胆固醇</span>
<span class='text-end'>
<span>{{ info.serumCholesterin || '-'}} mmol/L</span>
<span>{{ info.serumCholesterin || '-' }} mmol/L</span>
</span>
</div>
</div>
......@@ -270,7 +296,7 @@
<div class='list'>
<div class='flex justify-between py-1 border-bottom item'>
<span>
<span>{{ info.touchHarmfulName || '-'}}</span>
<span>{{ info.touchHarmfulName || '-' }}</span>
</span>
</div>
</div>
......@@ -297,7 +323,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>饮食习惯</span>
<span class='text-end'>
<span>{{ info.dietaryHabitName || '-'}}</span>
<span>{{ info.dietaryHabitName || '-' }}</span>
</span>
</div>
</div>
......@@ -310,25 +336,25 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>饮酒频率</span>
<span class='text-end'>
<span>{{ info.drinkFrequencyName || '-'}}</span>
<span>{{ info.drinkFrequencyName || '-' }}</span>
</span>
</div>
<div v-if="[2,3,4].includes(info.drinkFrequency)">
<div v-if='[2,3,4].includes(info.drinkFrequency)'>
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>饮酒种类</span>
<span class='text-end'>
<span>{{ $addrJoin(info.drinkKindName, info.drinkKindOther) || '-'}}</span>
<span>{{ $addrJoin(info.drinkKindName, info.drinkKindOther) || '-' }}</span>
</span>
</div>
<div class='flex justify-between py-1 border-bottom item'>
<div class='shrink-0 mr-2 label'>日饮酒量</div>
<div class='text-end'>
<div v-for="item in (info.drinkKindCapacityList || [])" :key="item.drinkKind"
<div v-for='item in (info.drinkKindCapacityList || [])' :key='item.drinkKind'
>
<span>{{item.drinkKindName}}:</span> <span>{{item.drinkCapacity || '-'}} mL</span>
<span>{{ item.drinkKindName }}:</span> <span>{{ item.drinkCapacity || '-' }} mL</span>
</div>
<div>
<span>平均: </span><span>{{info.dayDrink || '-'}} mL</span>
<span>平均: </span><span>{{ info.dayDrink || '-' }} mL</span>
</div>
</div>
</div>
......@@ -336,19 +362,19 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>开始饮酒年龄</span>
<span class='text-end'>
<span>{{ info.startDrinkAge || '-'}} 岁</span>
<span>{{ info.startDrinkAge || '-' }} 岁</span>
</span>
</div>
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>是否戒酒</span>
<span class='text-end'>
<span>{{ info.giveDrinkName || '-'}}</span>
<span>{{ info.giveDrinkName || '-' }}</span>
</span>
</div>
<div class='flex justify-between py-1 border-bottom item' v-if="info.giveDrink == 1">
<div class='flex justify-between py-1 border-bottom item' v-if='info.giveDrink == 1'>
<span class='shrink-0 mr-2 label'>戒酒年龄</span>
<span class='text-end'>
<span>{{ info.giveDrinkStart || '-'}} 岁</span>
<span>{{ info.giveDrinkStart || '-' }} 岁</span>
</span>
</div>
</div>
......@@ -362,31 +388,35 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>吸烟情况</span>
<span class='text-end'>
<span>{{ info.isSmokingName || '-'}}</span>
<span>{{ info.isSmokingName || '-' }}</span>
</span>
</div>
<div class='flex justify-between py-1 border-bottom item' v-if="info.isSmoking == 3 && smokeShow">
<div class='flex justify-between py-1 border-bottom item'
v-if='info.isSmoking == 3 && smokeShow'>
<span class='shrink-0 mr-2 label'>日吸烟量</span>
<span class='text-end'>
<span>{{ info.daySmoking || '-'}} 支</span>
<span>{{ info.daySmoking || '-' }} 支</span>
</span>
</div>
<div class='flex justify-between py-1 border-bottom item' v-if="info.isSmoking == 3 && smokeShow">
<div class='flex justify-between py-1 border-bottom item'
v-if='info.isSmoking == 3 && smokeShow'>
<span class='shrink-0 mr-2 label'>开始吸烟年龄</span>
<span class='text-end'>
<span>{{ info.startSmoking || '-'}} 岁</span>
<span>{{ info.startSmoking || '-' }} 岁</span>
</span>
</div>
<div class='flex justify-between py-1 border-bottom item' v-if="info.isSmoking == 2 && smokeShow">
<div class='flex justify-between py-1 border-bottom item'
v-if='info.isSmoking == 2 && smokeShow'>
<span class='shrink-0 mr-2 label'>戒烟年龄</span>
<span class='text-end'>
<span>{{ info.giveSmokingAge || '-'}} 岁</span>
<span>{{ info.giveSmokingAge || '-' }} 岁</span>
</span>
</div>
<div class='flex justify-between py-1 border-bottom item' v-if="smokeShow && info?.diseaseArrays?.includes(1)">
<div class='flex justify-between py-1 border-bottom item'
v-if='smokeShow && info?.diseaseArrays?.includes(1)'>
<span class='shrink-0 mr-2 label'>经常吸入二手烟</span>
<span class='text-end'>
<span>{{ info.secondSmokingName || '-'}} </span>
<span>{{ info.secondSmokingName || '-' }} </span>
</span>
</div>
</div>
......@@ -399,7 +429,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>黑棘皮病</span>
<span class='text-end'>
<span>{{ info.blackSpinySkinName || '-'}}</span>
<span>{{ info.blackSpinySkinName || '-' }}</span>
</span>
</div>
</div>
......@@ -412,7 +442,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>长期精神紧张</span>
<span class='text-end'>
<span>{{ info.mentalTensionName || '-'}}</span>
<span>{{ info.mentalTensionName || '-' }}</span>
</span>
</div>
</div>
......@@ -425,7 +455,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>皮肤或肌腱黄色瘤</span>
<span class='text-end'>
<span>{{ info.xanthomaName || '-'}}</span>
<span>{{ info.xanthomaName || '-' }}</span>
</span>
</div>
</div>
......@@ -438,7 +468,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>跟腱增厚</span>
<span class='text-end'>
<span>{{ info.tendoIncrassationName || '-'}}</span>
<span>{{ info.tendoIncrassationName || '-' }}</span>
</span>
</div>
</div>
......@@ -451,7 +481,7 @@
<div class='flex justify-between py-1 border-bottom item'>
<span class='shrink-0 mr-2 label'>中国糖尿病风险评分</span>
<span class='text-end'>
<span>{{ info.riskScoreName || '-'}}</span>
<span>{{ info.riskScoreName || '-' }}</span>
</span>
</div>
</div>
......@@ -529,6 +559,8 @@ export default {
],
// 全部展开、收起
collapseAll: false,
showRiskHighItem: false,
riskHighItemList: [],
info: {},
columnsBase: [
{ title: '姓名', key: 'residentName' },
......@@ -764,31 +796,67 @@ export default {
let list = []
let o = { name: '', num: 0 }
if (hypertensionHighItem.length) {
o = { name: '高血压风险因素', num: hypertensionHighItem.length }
o = {
id: 1,
name: '高血压风险因素',
num: hypertensionHighItem.length,
highItem: hypertensionHighItem,
dict: `CP00141`
}
list.push(o)
}
if (diabetesHighItem.length) {
o = { name: '糖尿病风险因素', num: diabetesHighItem.length }
o = {
id: 2,
name: '糖尿病风险因素',
num: diabetesHighItem.length,
highItem: diabetesHighItem,
dict: `CP00142`
}
list.push(o)
}
if (coronaryHighItem.length) {
o = { name: '冠心病风险因素', num: coronaryHighItem.length }
o = {
id: 3,
name: '冠心病风险因素',
num: coronaryHighItem.length,
highItem: coronaryHighItem,
dict: `CP00143`
}
list.push(o)
}
if (strokeHighItem.length) {
o = { name: '脑卒中风险因素', num: strokeHighItem.length }
o = { id: 4, name: '脑卒中风险因素', num: strokeHighItem.length, highItem: strokeHighItem, dict: `CP00144` }
list.push(o)
}
if (pulmonaryHighItem.length) {
o = { name: '慢阻肺风险因素', num: pulmonaryHighItem.length }
o = {
id: 5,
name: '慢阻肺风险因素',
num: pulmonaryHighItem.length,
highItem: pulmonaryHighItem,
dict: `CP00145`
}
list.push(o)
}
if (nephrosisHighItem.length) {
o = { name: '慢性肾脏病风险因素', num: nephrosisHighItem.length }
o = {
id: 6,
name: '慢性肾脏病风险因素',
num: nephrosisHighItem.length,
highItem: nephrosisHighItem,
dict: `CP00146`
}
list.push(o)
}
if (dyslipemiaHighItem.length) {
o = { name: '血脂异常风险因素', num: dyslipemiaHighItem.length }
o = {
id: 7,
name: '血脂异常风险因素',
num: dyslipemiaHighItem.length,
highItem: dyslipemiaHighItem,
dict: `CP00147`
}
list.push(o)
}
this.highRiskList = list
......@@ -822,6 +890,19 @@ export default {
this.activeCollapse = this.collapseList.map(e => e.name)
}
this.collapseAll = !this.collapseAll
},
toShowHighRisk(val) {
let res = []
let dictInfo = this.store.getDict(val.dict)
let highItemList = val.highItem || []
highItemList.forEach(item => {
let infoList = dictInfo.filter(e => e.value == item)
if (infoList && infoList.length) {
res.push(infoList[0])
}
})
this.riskHighItemList = res
this.showRiskHighItem = true
}
}
}
......@@ -922,4 +1003,30 @@ table {
.gap-y-1 {
row-gap: 4px;
}
.pop-title {
color: #262626;
font-size: 16px;
line-height: 24px;
font-weight: bold;
}
.de-driver {
border: 1px solid #D7D8DA;
}
.bg-white {
background: #FFFFFF;
padding: 12px 16px;
border-radius: 8px;
}
.detail-content {
color: #F5222D;
font-size: 16px;
line-height: 1.5;
}
:deep(.van-popup) {
height: 50% !important;
background: #F5F5F5;
}
</style>
<template>
<div>
<van-form ref='form'>
<div class='no-req-label' v-if='showPush'>请选择推送渠道</div>
<van-field
v-model='form.isSmsIsWxStr'
style='padding: 0px'
:rules='rules.isSmsIsWxStr'
>
<template #input>
<div class='w-full'>
<div>
<checkBtn class='mt-3'
column-1
text-align='left'
:options='vxList'
v-model:value='checkVx'
:fieldNames="{text: 'name', value: 'value'}"
>
</checkBtn>
<div class='vx-cb'>
<van-checkbox-group v-model='checkVxCb' shape='square' icon-size='18px'>
<van-checkbox :name='1' />
</van-checkbox-group>
</div>
</div>
<div class='push-lab'>随访信息将通过小程序消息推送给居民</div>
<checkBtn class='mt-3'
column-1
text-align='left'
:options='messageList'
v-model:value='checkMessage'
:fieldNames="{text: 'name', value: 'value'}"
></checkBtn>
<div class='ms-cb'>
<van-checkbox-group v-model='checkMessageCb' shape='square' icon-size='18px'>
<van-checkbox :name='1' />
</van-checkbox-group>
</div>
<div class='push-lab'>随访信息将通过短信方式发送给居民</div>
</div>
</template>
</van-field>
<div :class="['label-title', {'mt-5': showPush}]">随访单位</div>
<van-field
v-model='form.visitUnitName'
is-link
readonly
placeholder='随访单位'
class='input-back mt-2 form-input'
:rules='rules.visitUnitName'
@click='show1 = true'
/>
<DocUnit v-model:show='show1' v-model:value='form.visitUnitId' @change='changeUnit' />
<div class='label-title mt-5'>随访科室</div>
<van-field
v-model='form.visitOfficeName'
is-link
readonly
placeholder='随访科室'
class='input-back mt-2 form-input'
:rules='rules.visitOfficeName'
@click='show2 = true'
/>
<DocOffice v-model:show='show2' v-model:value='form.visitOfficeId' @change='changeOffice'
:unitId='form.visitUnitId' />
<div class='label-title mt-5'>随访医生</div>
<van-field
v-model='form.visitDoctorName'
is-link
readonly
placeholder='随访医生'
class='input-back mt-2 form-input'
:rules='rules.visitDoctorName'
@click='show3 = true'
/>
<DocOfficeDoctor v-model:show='show3' v-model:value='form.visitDoctorId' @change='changeDoctor'
:unitId='form.visitUnitId' :officeId='form.visitOfficeId' />
</van-form>
</div>
</template>
<script>
import dayjs from 'dayjs'
import { useStore } from '@/doctor/store'
import DocUnit from '@/doctor/components/docUnit/DocUnit'
import DocOffice from '@/doctor/components/docOffice/DocOffice'
import DocOfficeDoctor from '@/doctor/components/docOfficeDoctor/DocOfficeDoctor'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn'
export default {
name: 'CommonBottom',
components: { CheckBtn, DocOfficeDoctor, DocOffice, DocUnit },
props: {
info: {
default: () => {
return {}
}
},
firstForm: {
default: () => {
return {}
}
},
modeEnumList: {
default: () => {
return {}
}
}
},
data() {
return {
store: useStore(),
show1: false,
show2: false,
show3: false,
vxList: [],
checkVx: 1,
checkVxCb: [1],
messageList: [],
checkMessage: undefined,
checkMessageCb: [],
form: {
isSmsIsWx: [1]
},
rules: {
isSmsIsWxStr: [{ required: false, message: '请选择' }],
visitUnitName: [{ required: true, message: '请选择' }],
visitOfficeName: [{ required: true, message: '请选择' }],
visitDoctorName: [{ required: true, message: '请选择' }]
}
}
},
watch: {
'info': {
handler() {
this.form = this.setForm(this.info)
},
immediate: true
},
'firstForm.residentsRecord': {
handler() {
this.vxList = this.getVxEnum(this.firstForm)
this.messageList = this.getMessageEnum(this.firstForm.residentsRecord)
},
immediate: true,
deep: true
},
'checkMessage': {
handler() {
this.form.isSms = 2
if (this.checkMessage) {
this.form.isSms = 1
this.form.isSmsIsWx.push(2)
this.form.isSmsIsWxStr = 2
this.checkMessageCb = [1]
} else {
this.form.isSmsIsWx = this.form.isSmsIsWx.filter(item => item != 2)
this.checkMessageCb = []
//判断推送渠道是否存在值
if (!this.checkVx) {
this.form.isSmsIsWxStr = ''
}
}
}
},
'checkVx': {
handler() {
this.form.isWx = 2
if (this.checkVx) {
this.form.isWx = 1
this.form.isSmsIsWx.push(1)
this.form.isSmsIsWxStr = 1
this.checkVxCb = [1]
} else {
this.form.isSmsIsWx = this.form.isSmsIsWx.filter(item => item != 1)
this.checkVxCb = []
//判断推送渠道是否存在值
if (!this.checkMessage) {
this.form.isSmsIsWxStr = ''
}
}
}
},
'checkVxCb': {
handler() {
if (this.checkVxCb && this.checkVxCb.length) {
this.checkVx = 1
} else {
this.checkVx = undefined
}
}
},
'checkMessageCb': {
handler() {
if (this.checkMessageCb && this.checkMessageCb.length) {
this.checkMessage = 2
} else {
this.checkMessage = undefined
}
}
}
},
computed: {
authInfo() {
return this.store.$state.authInfo
},
//是否显示推送渠道
showPush() {
let res = false
let list = []
if (this.firstForm.visitWayRules) {
list = this.firstForm.visitWayRules.split(',').map(item => Number(item))
}
if (list && list.length && (list.includes(2) || list.includes(3) || list.includes(4))) {
res = true
}
return res
}
},
methods: {
//微信
getVxEnum(patientInfo = {}) {
return [{
name: `微信 ${patientInfo.sendNumber ? `(${this.$phoneHide(patientInfo.sendNumber)}已注册小程序)` : `(未注册小程序)`}`,
value: 1
}]
},
getMessageEnum(patientInfo = {}) {
return [{
name: `短信 ${patientInfo.telephone ? `(手机号 ${this.$phoneHide(patientInfo.telephone)})` : `(手机号 不存在)`}`,
value: 2
}]
},
setForm(info) {
const form = {
visitDate: new dayjs(),
createDate: new dayjs(),
// 随访单位
visitUnitId: this.authInfo.unitId,
visitUnitName: this.authInfo.unitName,
// 随访科室
visitOfficeId: this.authInfo.officeId,
visitOfficeName: this.authInfo.officeName,
// 随访医生
visitDoctorId: this.authInfo.relationId,
visitDoctorName: this.authInfo.nickName,
// 录入单位
createUnitId: this.authInfo.unitId,
createUnitName: this.authInfo.unitName,
// 录入科室
createOfficeId: this.authInfo.officeId,
createOfficeName: this.authInfo.officeName,
// 录入医生
createDoctorId: this.authInfo.relationId,
createDoctorName: this.authInfo.nickName,
isSms: 2,
isWx: 1,
isSmsIsWx: [1]
}
Reflect.ownKeys(form).forEach(key => {
if (info[key] != undefined) {
form[key] = info[key]
}
})
return form
},
changeUnit(val) {
this.form.visitUnitName = val.unitName
this.form.visitUnitId = val.id
this.form.visitOfficeId = undefined
this.form.visitOfficeName = undefined
this.form.visitDoctorId = undefined
this.form.visitDoctorName = undefined
this.show1 = false
},
changeOffice(val) {
this.form.visitOfficeId = val.id
this.form.visitOfficeName = val.officeName
this.form.visitDoctorId = undefined
this.form.visitDoctorName = undefined
this.show2 = false
},
changeDoctor(val) {
this.form.visitDoctorId = val.id
this.form.visitDoctorName = val.staffName
this.show3 = false
},
onSubmit() {
return new Promise((resolve, reject) => {
this.$refs.form.validate().then(() => {
const { isSmsIsWx = [], ...others } = this.form
let isSms = 2
let isWx = 2
let wxTel = ''
if (isSmsIsWx.length && this.showPush) {
if (isSmsIsWx.includes(1)) {
isWx = 1
wxTel = this.modeEnumList.weixinTel
}
if (isSmsIsWx.includes(2)) {
isSms = 1
}
}
let par = {
...others,
isSms,
isWx,
isSmsIsWx,
sendNumber: wxTel
}
resolve(par)
}).catch((e) => {
console.warn('ArchiveCommon error', e)
})
})
}
}
}
</script>
<style scoped lang='less'>
.title {
font-weight: bold;
margin-bottom: 20px;
}
.label-title {
font-size: 13px;
color: #595959;
font-weight: 500;
&::after {
content: "*";
color: red;
font-weight: bold;
margin-left: 4px;
}
}
.push-lab {
line-height: 20px;
color: #8C8C8C;
font-size: 12px
}
.no-req-label {
font-size: 13px;
color: #595959;
font-weight: 500;
}
.form-input {
padding: 8px 12px;
border-radius: 8px;
}
.input-back {
background: #FAFAFA;
}
.tel-back {
background: #F5F5F5;
padding: 8px;
border-radius: 0px 0px 8px 8px;
}
.tel {
background: #FFFFFF;
padding: 8px;
border-radius: 8px;
}
.tel-label {
color: #607FF0;
font-weight: bold;
}
.p-12-0 {
padding: 12px 0px;
}
.vx-cb {
position: absolute;
right: 10px;
top: 23px;
}
.ms-cb {
position: absolute;
right: 10px;
top: 97px;
}
:deep(.van-cell-group--inset) {
overflow: visible;
}
:deep(.van-cell) {
overflow: visible;
}
/*:deep(.van-field__error-message) {
position: absolute;
margin-top: 3px;
}*/
:deep(.van-cell:after) {
border-bottom: 0px;
}
</style>
\ No newline at end of file
......@@ -78,10 +78,13 @@
</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
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 v-for='(item1,index1) in item2.relativeAgeList' :key='index1'
style='width: 48%;'>
<div>
<van-field
colon
......@@ -122,7 +125,6 @@
</template>
</van-field>
</div>
<div v-if='highShow'>
<div class='label-title mt-5'>体重</div>
<van-field
......@@ -137,7 +139,6 @@
</template>
</van-field>
</div>
<div v-if='highShow'>
<div class='no-req-label mt-5'>BMI</div>
<van-field
......@@ -166,6 +167,74 @@
</van-field>
</div>
<div v-if='exerciseShow'>
<div class='label-title mt-5'>锻炼频率</div>
<van-field
v-model='form.exerciseFrequencyName'
readonly
is-link
placeholder='请选择'
class='input-back mt-2 form-input'
@click='showExerciseFrequency = true'
>
<template #input>
<span class='text-end' v-if='form.exerciseFrequencyName'>{{ form.exerciseFrequencyName }}</span>
<span class='text-end' v-if='!form.exerciseFrequencyName' style='color: #dfdfe1'>请选择</span>
</template>
</van-field>
<van-popup v-model:show='showExerciseFrequency' position='bottom'>
<div class='p-4' style='height: 100%'>
<div class='flex justify-between items-center mb-4 pop-title'>
<div class='greyColor' @click='showExerciseFrequency = false' style='font-weight: 400'>
取消
</div>
<div>锻炼频率(仅单选)</div>
<div></div>
</div>
<div style='height: 80%;overflow: auto'>
<CheckBtn
column-1
:options='exerciseFrequencyList'
v-model:value='form.exerciseFrequency'
:fieldNames="{text: 'name', value: 'value'}"
@change='exerciseFrequencyConfirm'
/>
</div>
</div>
</van-popup>
<div v-if='[1, 2, 3, 5, 6].includes(form.exerciseFrequency)'>
<div class='no-req-label mt-5'>每次锻炼时间</div>
<van-field
v-model='form.everyExercise'
clear-icon
placeholder='请输入'
class='input-back mt-2 form-input'
>
<template #extra>
<span class='mr-2'>分钟</span>
</template>
</van-field>
<div class='no-req-label mt-5'>可达到中等及以上运动强度</div>
<van-field
class='no-back form-input mt-2'
style='padding: 0'
>
<template #input>
<van-radio-group v-model='form.mediumStrength'
direction='horizontal'
class='w-full doc-radio-group'>
<van-radio v-for="item in store.getDict('CP00120')"
:key='item.value' :name='item.value'
label-position='left'>{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
</div>
<div v-if='womanMHShow'>
<div class='no-req-label mt-5'>女性病史</div>
<van-field
......@@ -177,14 +246,17 @@
@click='showFemaleMedicalHistory= true'
>
<template #input>
<span class='text-end' v-if='form.femaleMedicalHistoryName'>{{ form.femaleMedicalHistoryName }}</span>
<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 class='greyColor' @click='showFemaleMedicalHistory = false' style='font-weight: 400'>
取消
</div>
<div>女性病史(可多选)</div>
<div class='blueColor' @click='femaleMedicalHistoryConfirm'>确定</div>
</div>
......@@ -217,14 +289,15 @@
<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 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"
:options='medicineHistoryList'
v-model:value='form.medicineHistory'
:fieldNames="{text: 'name', value: 'value'}"
/>
......@@ -292,7 +365,7 @@
<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>可多选</div>
<div class='blueColor' @click='touchHarmfulConfirm'>确定</div>
</div>
<div style='height: 80%;overflow: auto'>
......@@ -305,7 +378,232 @@
</div>
</div>
</van-popup>
</div>
<div v-if='bloodPressureShow'>
<div class='flex items-center justify-between tip-box mt-5'>
<div class='doc-form-label shrink-0'>现测血压(mmHg)</div>
<BloodPressurePanel :pressureObj='pressureObj' />
</div>
<div class='sub-text my-3'>第一次</div>
<table class='w-full mb-2'>
<tr class='sub-text'>
<td>收缩压(高压)</td>
<td style='width: 1em'></td>
<td>舒张压(低压)</td>
</tr>
<tr>
<td class='flex items-center'>
<van-field v-model='form.pressureOneSbp'
name='pressureOneSbp'
label=''
type='number'
placeholder='60~300,整数'
maxlength='10'
:rules='rules.pressureDbp'
error-message-align='left'
input-align='left'
class='input-back form-input'
/>
</td>
<td class='text-center'>
<span class='divide'>/</span>
</td>
<td>
<van-field v-model='form.pressureOneDbp'
name='pressureOneDbp'
label=''
type='number'
placeholder='30~300,整数'
maxlength='10'
:rules='rules.pressureSbp'
error-message-align='left'
input-align='left'
class='input-back form-input'
/>
</td>
</tr>
</table>
<BloodPressureBt :pressureObj='pressureObj' @getValue='setPressureOne'>第一次测量</BloodPressureBt>
<div class='sub-text my-3'>第二次</div>
<table class='w-full mb-2'>
<tr class='sub-text'>
<td>收缩压(高压)</td>
<td style='width: 1em'></td>
<td>舒张压(低压)</td>
</tr>
<tr>
<td>
<van-field v-model='form.pressureTwoSbp'
name='pressureTwoSbp'
label=''
type='number'
placeholder='60~300,整数'
maxlength='10'
:rules='rules.pressureDbp'
error-message-align='left'
input-align='left'
class='input-back form-input'
/>
</td>
<td class='text-center'>
<span class='divide'>/</span>
</td>
<td>
<van-field v-model='form.pressureTwoDbp'
name='pressureTwoDbp'
label=''
type='number'
placeholder='30~300,整数'
maxlength='10'
:rules='rules.pressureSbp'
error-message-align='left'
input-align='left'
class='input-back form-input'
/>
</td>
</tr>
</table>
<BloodPressureBt :pressureObj='pressureObj' @getValue='setPressureTwo'>第二次测量</BloodPressureBt>
</div>
<div v-if='eatHabitShow'>
<div class='label-title mt-5'>饮食习惯</div>
<van-field
v-model='form.dietaryHabitName'
readonly
is-link
placeholder='请选择'
class='input-back mt-2 form-input'
@click='showDietaryHabit= true'
>
<template #input>
<span class='text-end' v-if='form.dietaryHabitName'>{{ form.dietaryHabitName }}</span>
<span class='text-end' v-if='!form.dietaryHabitName' style='color: #dfdfe1'>请选择</span>
</template>
</van-field>
<van-popup v-model:show='showDietaryHabit' position='bottom'>
<div class='p-4' style='height: 100%'>
<div class='flex justify-between items-center mb-4 pop-title'>
<div class='greyColor' @click='showDietaryHabit = false' style='font-weight: 400'>取消</div>
<div>饮食习惯(可多选)</div>
<div class='blueColor' @click='dietaryHabitConfirm'>确定</div>
</div>
<div style='height: 80%;overflow: auto'>
<CheckBtn multiple
column-1
:options="store.getDict('CP00131')"
v-model:value='form.dietaryHabit'
:fieldNames="{text: 'name', value: 'value'}"
/>
</div>
</div>
</van-popup>
</div>
<div v-if='drinkShow'>
<div class='label-title mt-5'>饮酒情况</div>
</div>
<div v-if='smokeShow'>
<div class='label-title mt-5'>吸烟情况</div>
</div>
<div v-if='blackSpinySkinShow'>
<div class='no-req-label mt-5'>黑棘皮病</div>
<van-field
class='no-back form-input mt-2'
style='padding: 0'
>
<template #input>
<van-radio-group v-model='form.blackSpinySkin'
direction='horizontal'
class='w-full doc-radio-group'>
<van-radio v-for="item in store.getDict('CP00134')"
:key='item.value' :name='item.value'
label-position='left'>{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if='mentalTensionShow'>
<div class='no-req-label mt-5'>长期精神紧张</div>
<van-field
class='no-back form-input mt-2'
style='padding: 0'
>
<template #input>
<van-radio-group v-model='form.mentalTension'
direction='horizontal'
class='w-full doc-radio-group'>
<van-radio v-for="item in store.getDict('CP00135')"
:key='item.value' :name='item.value'
label-position='left'>{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if='xanthomaShow'>
<div class='no-req-label mt-5'>皮肤或肌腱黄色瘤</div>
<van-field
class='no-back form-input mt-2'
style='padding: 0'
>
<template #input>
<van-radio-group v-model='form.xanthoma'
direction='horizontal'
class='w-full doc-radio-group'>
<van-radio v-for="item in store.getDict('CP00135')"
:key='item.value' :name='item.value'
label-position='left'>{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if='tendoIncrassationShow'>
<div class='no-req-label mt-5'>跟腱增厚</div>
<van-field
class='no-back form-input mt-2'
style='padding: 0'
>
<template #input>
<van-radio-group v-model='form.tendoIncrassation'
direction='horizontal'
class='w-full doc-radio-group'>
<van-radio v-for="item in store.getDict('CP00120')"
:key='item.value' :name='item.value'
label-position='left'>{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if='riskScoreShow'>
<div class='no-req-label mt-5'>中国糖尿病风险评分</div>
<van-field
class='no-back form-input mt-2'
style='padding: 0'
>
<template #input>
<van-radio-group v-model='riskScoreInfo'
direction='horizontal'
class='w-full doc-radio-group'>
<van-radio v-for="item in store.getDict('CP00136')"
:key='item.value' :name='item.value'
label-position='left'>{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
</van-form>
......@@ -317,6 +615,8 @@
import { useStore } from '@/doctor/store'
import { checkboxReject } from '@/utils/common'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn'
import BloodPressureBt from '@/doctor/components/bloodPressure/BloodPressureBt'
import BloodPressurePanel from '@/doctor/components/bloodPressure/BloodPressurePanel'
const defaultForm = (info = {}) => {
const form = {
......@@ -335,6 +635,7 @@ const defaultForm = (info = {}) => {
bmi: undefined,
waistline: undefined,
exerciseFrequency: undefined,
exerciseFrequencyName: undefined,
everyExercise: undefined,
femaleMedicalHistory: undefined,
femaleMedicalHistoryName: undefined,
......@@ -347,7 +648,8 @@ const defaultForm = (info = {}) => {
pressureOneDbp: undefined,
pressureTwoSbp: undefined,
pressureTwoDbp: undefined,
dietaryHabit: undefined,
dietaryHabit: [],
dietaryHabitName: undefined,
drinkFrequency: undefined,
startDrinkAge: undefined,
drinkKind: undefined,
......@@ -392,11 +694,12 @@ const defaultForm = (info = {}) => {
return form
}
export default {
components: { CheckBtn },
components: { BloodPressurePanel, BloodPressureBt, CheckBtn },
props: {
info: Object,
diseaseArraysInfo: Array
},
inject: ['pressureObj'],
data() {
return {
store: useStore(),
......@@ -405,9 +708,13 @@ export default {
//女性病史
showFemaleMedicalHistory: false,
//用药史
showMedicineHistory:false,
showMedicineHistory: false,
//有害物质接触或婴幼儿时期病史
showTouchHarmful: false,
//饮食习惯
showDietaryHabit: false,
//锻炼频率
showExerciseFrequency: false,
checkboxRefs: [],
form: {},
......@@ -481,7 +788,7 @@ export default {
}
return res
},
message:`请输入正确的数字`
message: `请输入正确的数字`
}],
triglyceride: [{
validator: (value, rule) => {
......@@ -492,10 +799,10 @@ export default {
}
return res
},
message:`请输入正确的数字`
message: `请输入正确的数字`
}],
serumCholesterin: [{
validator: ( value, rule) => {
validator: (value, rule) => {
const regex = /^\d+(\.\d{1,2})?$/
let res = true
if (value && !regex.test(value)) {
......@@ -503,10 +810,10 @@ export default {
}
return res
},
message:`请输入正确的数字`
message: `请输入正确的数字`
}],
exerciseFrequency: [{ required: true, message: '请选择' }],
dietaryHabit: [{ required: true, message: '请选择' }],
exerciseFrequencyName: [{ required: true, message: '请选择' }],
dietaryHabitName: [{ required: true, message: '请选择' }],
drinkFrequency: [{ required: true, message: '请选择' }],
isSmoking: [{ required: true, message: '请选择' }],
specialScreenResult: [{ required: true, message: '请选择' }],
......@@ -877,6 +1184,22 @@ export default {
})
})
return result
},
//锻炼频率单选list (pc端两个字典,移动端则合为一个字典提交时在分开为两个字段)
exerciseFrequencyList() {
let res = []
let listOne = this.store.getDict(`CP00126`)
let listTwo = this.store.getDict(`CP00163`)
listTwo.forEach(item => {
if (item.value == 1) {
item.value = 5
}
if (item.value == 2) {
item.value = 6
}
})
return res = [...listOne, ...listTwo]
}
},
watch: {
......@@ -1759,6 +2082,15 @@ export default {
}
},
//锻炼频率弹窗确认选择
exerciseFrequencyConfirm() {
this.exerciseFrequencyList.forEach(item => {
if (item.value == this.form.exerciseFrequency) {
this.form.exerciseFrequencyName = item.name
}
})
this.showExerciseFrequency = false
},
//病史弹窗确认选择
medicalHistoryConfirm() {
let res = []
......@@ -1807,6 +2139,31 @@ export default {
this.form.touchHarmfulName = res.join()
this.showTouchHarmful = false
},
//饮食习惯弹窗确认选择
dietaryHabitConfirm() {
let res = []
this.store.getDict('CP00131').forEach(item => {
let selected = this.form.dietaryHabit.filter(i => i == item.value)
if (selected && selected.length) {
res.push(item.name)
}
})
this.form.dietaryHabitName = res.join()
this.showDietaryHabit = false
},
//血压仪器测量
setPressureOne(val) {
if (!val) return
this.form.pressureOneSbp = val.systolicPressure
this.form.pressureOneDbp = val.diastolicPressure
},
setPressureTwo(val) {
if (!val) return
this.form.pressureTwoSbp = val.systolicPressure
this.form.pressureTwoDbp = val.diastolicPressure
},
//家族史多选
toggle(index) {
this.checkboxRefs[index].toggle()
......
......@@ -13,7 +13,7 @@
ref='formInfo'
></form-cont>
<result :residentInfoId='residentInfoId'
v-show='step == 3'
v-show='step == 4'
></result>
</div>
<div class='bottom-small-line'></div>
......
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