diff --git a/src/residentWX/visit/detail/SeparateFUDetail.vue b/src/residentWX/visit/detail/SeparateFUDetail.vue index 6f40104aeb2b3c6913a7066ec75975b007113f36..8e023bf3e2c6e2e83eff70b17cc6b23010317b39 100644 --- a/src/residentWX/visit/detail/SeparateFUDetail.vue +++ b/src/residentWX/visit/detail/SeparateFUDetail.vue @@ -15,10 +15,6 @@ </div> <div class="top-label"> <div class="mt-3 flex"> - <!-- <div> - <span>随访方式:</span> - <span class="color-b">{{ info.visitWayName }}</span> - </div> --> <div> <span>随访日期:</span> <span class="color-b">{{ info.visitDate }}</span> @@ -36,217 +32,31 @@ </div> </div> </div> - <div class="p-3 grow cont-box"> - <div class="p-3 h-full cont-inner"> - <div class="flex justify-between collapse-head"> - <span class="text-16">全部内容</span> - <span @click="toggleAll"> - <span v-if="!collapseAll">展开全部</span> - <span v-else>收起全部</span> - <span :class="['ml-2 icon-down', { 'icon-down-expanded': collapseAll }]"> - <doc-icon type="doc-down" /> - </span> - </span> - </div> - - <van-collapse v-model="activeCollapse" ref="collapse" class="doc-collapse" @change="collapseChange"> - <van-collapse-item key="1" title="居民信息" name="1"> - <template #right-icon> - <doc-icon type="doc-down" /> - </template> - <div class="list"> - <div v-for="item in columnsBase" :key="item.key"> - <div class="flex justify-between py-1 border-bottom item"> - <span class="shrink-0 mr-2 label">{{ item.title }}</span> - <span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span> - <span class="text-end" v-else> - <span>{{ residentInfo[item.key] || '-' }}</span> - <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> - </span> - </div> - </div> - </div> - </van-collapse-item> - <van-collapse-item key="2" title="症状" name="2"> - <template #right-icon> - <doc-icon type="doc-down" /> - </template> - <div class="list"> - <div class="flex justify-between py-1 border-bottom item"> - <span class="shrink-0 mr-2 label">症状</span> - <span class="text-end"> - {{ info.symptomName || '-' }} - </span> - </div> - </div> - </van-collapse-item> - <van-collapse-item key="3" title="体征" name="3"> - <template #right-icon> - <doc-icon type="doc-down" /> - </template> - <div class="list"> - <div v-for="item in columnsPhysical" :key="item.key"> - <div class="flex justify-between py-1 border-bottom item"> - <span class="shrink-0 mr-2 label">{{ item.title }}</span> - <span class="text-end"> - <span>{{ info[item.key] || '-' }}</span> - <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> - </span> - </div> - </div> - </div> - </van-collapse-item> - <van-collapse-item key="4" title="生活方式" name="4"> - <template #right-icon> - <doc-icon type="doc-down" /> - </template> - <div style="color: #262626">吸烟</div> - <div class="box"> - <div> - <span>是否正在吸烟:</span> - <span>{{ info.isSmokingName }}</span> - </div> - <div v-if="info.isSmoking === 1"> - <span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span> - <span>{{ info.startSmokeAge || '-' }}岁</span> - </div> - <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> - <span>您最近7天是否吸烟:</span> - <span>{{ info.lastSevenSmokeName }}</span> - </div> - <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> - <span>日吸烟量:</span> - <span>{{ info.daySmoking || '-' }}支</span> - <span class="ml-4">目标日吸烟量:</span> - <span>{{ info.goalDaySmoking || '-' }}支</span> - </div> - </div> - <div style="color: #262626" class="mt-2">饮酒</div> - <div class="box"> - <div> - <span>是否正在饮酒:</span> - <span>{{ info.isDrinkName }}</span> - </div> - <div v-if="info.isDrink === 1 || info.isDrink === 2"> - <span>日饮酒量:</span> - <span>{{ info.dayDrink || '-' }}ml</span> - <span class="ml-4">目标日饮酒量:</span> - <span>{{ info.goalDayDrink || '-' }}ml</span> - </div> - <div v-if="info.isDrink === 1 || info.isDrink === 2"> - <span>白酒:</span> - <span>{{ info.drinkLiquor || '-' }}ml/日</span> - <span class="ml-2">啤酒:</span> - <span>{{ info.drinkBeer || '-' }}ml/日</span> - <span class="ml-2">红酒:</span> - <span>{{ info.drinkRed || '-' }}ml/日</span> - <span class="ml-2">黄酒:</span> - <span>{{ info.drinkYellow || '-' }}ml/日</span> - <span class="ml-2">其他:</span> - <span>{{ info.drinkOther || '-' }}ml/日</span> - </div> - </div> - <div style="color: #262626" class="mt-2">运动</div> - <div class="box"> - <div> - <span>有无规律活动:</span> - <span>{{ info.regularExerciseName }}</span> - </div> - <div v-if="info.regularExercise === 1"> - <span>运动强度:</span> - <span>{{ info.exerciseStrengthName }}</span> - </div> - <div v-if="info.regularExercise === 1"> - <span>目前运动情况:</span> - <span>{{ info.nowExerciseWeek || '-' }}次/周、</span> - <span>{{ info.nowExerciseMinute || '-' }}分钟/次</span> - </div> - </div> - <div class="list"> - <div class="flex justify-between py-1 border-bottom item"> - <span class="shrink-0 mr-2 label">摄盐情况(咸淡)</span> - <span class="text-end">{{ info.saltIntakeName || '-' }}</span> - </div> - <div class="flex justify-between py-1 border-bottom item"> - <span class="shrink-0 mr-2 label">心理调整</span> - <span class="text-end">{{ info.psychologicalRecoveryName || '-' }}</span> - </div> - <div class="flex justify-between py-1 border-bottom item"> - <span class="shrink-0 mr-2 label">遵医行为</span> - <span class="text-end">{{ info.doctorAdviceName || '-' }}</span> - </div> - </div> - </van-collapse-item> - <van-collapse-item key="5" title="辅助检查" name="5"> - <template #right-icon> - <doc-icon type="doc-down" /> - </template> - <!-- <div class="list"> - <div class="flex justify-between py-1 border-bottom item"> - <span class="shrink-0 mr-2 label">症状</span> - <span class="text-end"> - {{ info.symptomName || '-' }} - </span> - </div> - </div> --> - <div v-for="x in inspectList" :key="x.insType"> - <div style="color: #262626" class="mt-2">{{ x.insName }}</div> - <div class="box"> - <div v-for="y in x.items"> - <span>{{ y.itemName }}:</span> - <span>{{ y.itemValue }}</span> - <span class="ml-1">{{ y.unit }}</span> - </div> - </div> - </div> - - - </van-collapse-item> - </van-collapse> - </div> - </div> + + <HypertensionDetail v-if="routerDetail.diseaseType === '1'" :visitInfo="info" /> + <DiabetesDetail v-if="routerDetail.diseaseType === '2'" :visitInfo="info" /> + <CoronaryHeartDiseaseDetail v-if="routerDetail.diseaseType === '3'" :visitInfo="info" /> + <CerebralApoplexyDetail v-if="routerDetail.diseaseType === '4'" :visitInfo="info" /> + <CopdDetail v-if="routerDetail.diseaseType === '5'" :visitInfo="info" /> + <ChronicKidneyDiseaseDetail v-if="routerDetail.diseaseType === '6'" :visitInfo="info" /> + <AbnormalBloodLipidsDetail v-if="routerDetail.diseaseType === '7'" :visitInfo="info" /> </div> </template> <script> import { querySeparateFUDetail } from '@/api/residentWX/visit.js' -import { fetchDataHandle } from '@/utils/common.js' + +import HypertensionDetail from './components/HypertensionDetail.vue' +import DiabetesDetail from './components/DiabetesDetail.vue' +import CoronaryHeartDiseaseDetail from './components/CoronaryHeartDiseaseDetail.vue' +import CerebralApoplexyDetail from './components/CerebralApoplexyDetail.vue' +import CopdDetail from './components/CopdDetail.vue' +import ChronicKidneyDiseaseDetail from './components/ChronicKidneyDiseaseDetail.vue' +import AbnormalBloodLipidsDetail from './components/AbnormalBloodLipidsDetail.vue' export default { + components: { HypertensionDetail, DiabetesDetail, CoronaryHeartDiseaseDetail, CerebralApoplexyDetail, CopdDetail, ChronicKidneyDiseaseDetail, AbnormalBloodLipidsDetail }, data() { return { - info: {}, - // 全部展开、收起 - collapseAll: false, - activeCollapse: [], - columnsBase: [ - { title: '姓名', key: 'residentName' }, - { title: '证件号码', key: 'idCard' }, - { title: '性别', key: 'genderName' }, - { title: '出生日期', key: 'dataBirth' }, - { title: '年龄', key: 'currentAge' }, - { title: '民族', key: 'nationalName' }, - { title: '本人电话', key: 'telephone' }, - { title: '现住址', key: 'presentCodeName' }, - { title: '详细地址', key: 'nowAddress' }, - { title: '户籍地址', key: 'registeredCodeName' }, - { title: '详细地址', key: 'permanentAddress' } - ], - columnsPhysical: [ - { title: '收缩压SBP', key: 'signSystolicPressure', unit: 'mmHg' }, - { title: '舒张压DBP', key: 'signDiastolicPressure', unit: 'mmHg' }, - { title: '心率', key: 'signHeartRate', unit: '次/分' }, - { title: '身高', key: 'signHeight', unit: 'cm' }, - { title: '体重', key: 'signWeight', unit: 'kg' }, - { title: 'BMI', key: 'signBmi', unit: 'kg/m²' }, - { title: '腰围', key: 'signWaistline', unit: 'cm' }, - { title: '其他', key: 'signOther' } - ], - collapseList: [ - // { title: "居民信息", name: "1", columns: [], info: {} }, - // { title: "随访详情", name: "2", columns: [], info: {} }, - // { title: "随访机构", name: "3", columns: [], info: {} } - ], - // 辅助检查 - inspectList: [] + info: {} } }, computed: { @@ -273,40 +83,8 @@ export default { } querySeparateFUDetail(params).then(res => { let result = res.data || {} - // 字符串转数组 - const form = fetchDataHandle(result, { - auxiliaryExamination: 'strToArrNum' - }) - this.info = form - // 辅助检查处理 - let { auxiliaryExamination = [], inspectList = [] } = form - let list = [] - auxiliaryExamination.forEach(item => { - const items = inspectList.filter(e => e.insType === item) - if (items.length > 0) { - list.push({ - insType: items[0].insType, - insName: items[0].insName, - items: [...items] - }) - } - }) - this.inspectList = list - console.log(list) - + this.info = result }) - }, - // 折叠面板切换 - collapseChange(val) { - if (val && val.length === this.collapseList.length) { - this.collapseAll = true - } else { - this.collapseAll = false - } - }, - // 全部展开、收起 - toggleAll() { - }, onBack() { this.$router.back() @@ -336,44 +114,4 @@ export default { color: #262626; } } - -.cont-box { - background-color: #f9f9f9; - - .cont-inner { - background: linear-gradient(to bottom, #DFF5F4, #fff .6rem); - border-top-left-radius: .08rem; - border-top-right-radius: .08rem; - } -} - -.collapse-head { - .icon-down { - vertical-align: middle; - font-size: .12rem; - - .svg-icon { - transition: all .2s; - } - } - - .icon-down-expanded { - .svg-icon { - transform: rotate(-180deg); - } - } -} - -.list { - color: #262626; - .label { - min-width: 5em; - } -} -.box { - background: #F8FAFC; - padding: 8px; - color: #4D5665; - -} </style> \ No newline at end of file diff --git a/src/residentWX/visit/detail/components/AbnormalBloodLipidsDetail.vue b/src/residentWX/visit/detail/components/AbnormalBloodLipidsDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..8a793b0b9e00cde197a4741f6e259ee2bb8821fe --- /dev/null +++ b/src/residentWX/visit/detail/components/AbnormalBloodLipidsDetail.vue @@ -0,0 +1,502 @@ +<template> + <div class="p-3 grow cont-box"> + <div class="p-3 h-full cont-inner"> + <div class="flex justify-between collapse-head"> + <span class="text-16">全部内容</span> + <span @click="toggleAll"> + <span v-if="!collapseAll">展开全部</span> + <span v-else>收起全部</span> + <span :class="['ml-2 icon-down', { 'icon-down-expanded': collapseAll }]"> + <doc-icon type="doc-down" /> + </span> + </span> + </div> + + <van-collapse v-model="activeCollapse" ref="collapse" class="doc-collapse" @change="collapseChange"> + <van-collapse-item key="1" title="居民信息" name="1"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsBase" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span> + <span class="text-end" v-else> + <span>{{ residentInfo[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="2" title="症状" name="2"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">症状</span> + <span class="text-end"> + {{ info.symptomName || '-' }} + </span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="3" title="体征" name="3"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsPhysical" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end"> + <span>{{ info[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="4" title="生活方式指导" name="4"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div style="color: #262626">吸烟</div> + <div class="box"> + <div> + <span>是否正在吸烟:</span> + <span>{{ info.isSmokingName }}</span> + </div> + <div v-if="info.isSmoking === 1"> + <span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span> + <span>{{ info.startSmokeAge || '-' }}岁</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>您最近7天是否吸烟:</span> + <span>{{ info.lastSevenSmokeName }}</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>日吸烟量:</span> + <span>{{ info.daySmoking || '-' }}支</span> + <span class="ml-4">目标日吸烟量:</span> + <span>{{ info.goalDaySmoking || '-' }}支</span> + </div> + </div> + <div style="color: #262626" class="mt-2">饮酒</div> + <div class="box"> + <div> + <span>是否正在饮酒:</span> + <span>{{ info.isDrinkName }}</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>日饮酒量:</span> + <span>{{ info.dayDrink || '-' }}ml</span> + <span class="ml-4">目标日饮酒量:</span> + <span>{{ info.goalDayDrink || '-' }}ml</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>白酒:</span> + <span>{{ info.drinkLiquor || '-' }}ml/日</span> + <span class="ml-2">啤酒:</span> + <span>{{ info.drinkBeer || '-' }}ml/日</span> + <span class="ml-2">红酒:</span> + <span>{{ info.drinkRed || '-' }}ml/日</span> + <span class="ml-2">黄酒:</span> + <span>{{ info.drinkYellow || '-' }}ml/日</span> + <span class="ml-2">其他:</span> + <span>{{ info.drinkOther || '-' }}ml/日</span> + </div> + </div> + <div style="color: #262626" class="mt-2">运动</div> + <div class="box"> + <div> + <span>有无规律活动:</span> + <span>{{ info.regularExerciseName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>运动强度:</span> + <span>{{ info.exerciseStrengthName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>目前运动情况:</span> + <span>{{ info.nowExerciseWeek || '-' }}次/周、</span> + <span>{{ info.nowExerciseMinute || '-' }}分钟/次</span> + </div> + </div> + <div class="list mt-2"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">摄盐情况(咸淡)</span> + <span class="text-end">{{ info.saltIntakeName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">心理调整</span> + <span class="text-end">{{ info.psychologicalRecoveryName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">遵医行为</span> + <span class="text-end">{{ info.doctorAdviceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="5" title="辅助检查" name="5"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in inspectList" :key="x.insType"> + <div style="color: #262626" :class="[xIndex === 0 ? '' : 'mt-2']">{{ x.insName }}</div> + <div class="box"> + <div v-for="y in x.items"> + <span>{{ y.itemName }}:</span> + <span>{{ y.itemValue }}</span> + <span class="ml-1">{{ y.unit }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="6" title="服药依从性" name="6"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">服药依从性</span> + <span class="text-end">{{ info.medicationComplianceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="7" title="药物不良反应" name="7"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">药物不良反应</span> + <span class="text-end">{{ info.drugsAdverseName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="8" title="此次随访分类" name="8"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">此次随访分类</span> + <span class="text-end">{{ info.visitTypeName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="9" title="目前诊断" name="9"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in info.diagnoseInfoList" :key="xIndex"> + <div style="color: #262626"> + {{ (store.getDict('CP00086').find(e => e.value === x.currentDiagnoseType)).name }} + </div> + <div class="box" > + <div v-if="x.currentDiagnoseType === 1"> + <span>高血压分级:</span> + <span>{{ x.diagnoseResultValue }}</span> + <span class="ml-4">高血压危险分层:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 2"> + <span>糖尿病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 3"> + <span>冠心病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 4"> + <span>缺血性脑卒中:</span> + <span>{{ x.diagnoseResultValue || '-' }}</span> + <span class="ml-4">出血性脑卒中:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 5"> + <span>慢阻肺:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 6"> + <span>慢性肾病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 7"> + <span>血脂异常:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div> + <span>纳入管理日期:</span> + <span>{{ x.inclusionManageDate }}</span> + </div> + <div v-for="(y, yIndex) in x.diagnoseItemList" :key="yIndex"> + <div> + <span>诊断名称:</span> + <span>{{ y.diagnosisResultName }}</span> + </div> + <div> + <span>诊断日期:</span> + <span>{{ y.diagnosisDate }}</span> + </div> + <div> + <span>诊断单位:</span> + <span>{{ y.diagnosisUnitName }}</span> + </div> + <div> + <span>诊断科室:</span> + <span>{{ y.diagnosisOfficeName }}</span> + </div> + <div> + <span>诊断医生:</span> + <span>{{ y.diagnosisUserName }}</span> + </div> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="10" title="用药情况" name="10"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">是否调整治疗方案</span> + <span class="text-end">{{ info.adjustTreatName }}</span> + </div> + </div> + <div v-if="info.adjustTreat === 1"> + <div style="color: #262626" class="mt-2">用药</div> + <div v-for="(item, index) in medicateCase" :key="index" class="box mt-2"> + <div> + <span>药物名称:</span> + <span>{{ item.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ item.dose }}</span> + <span>{{ store.getDictValue('CP00081', item.unit) }}</span> + </div> + <div> + <span>频次:</span> + <span>{{ store.getDictValue('CP00084', item.frequency) }}</span> + <span class="ml-4">用法:</span> + <span>{{ store.getDictValue('CP00083', item.usage) }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="11" title="转诊" name="11"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊原因</span> + <span class="text-end">{{ info.referralReason }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊机构</span> + <span class="text-end">{{ info.referralUnitName }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊科室</span> + <span class="text-end">{{ info.referralOfficeName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="12" title="现场随访照片" name="12"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + </van-collapse-item> + <van-collapse-item key="13" title="下次随访日期" name="13"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">下次随访日期</span> + <span class="text-end">{{ info.nextVisitDate }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="14" title="随访机构" name="14"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsOrg" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end">{{ info[item.key] }}</span> + </div> + </div> + </div> + </van-collapse-item> + </van-collapse> + </div> + </div> +</template> +<script> +import { fetchDataHandle } from '@/utils/common.js' +import { useStore } from '@/resident/store/index.js' +export default { + props: { + visitInfo: { + type: Object, + default: () => {} + } + }, + data() { + return { + info: {}, + store: useStore(), + // 辅助检查 + inspectList: [], + // 用药情况 + medicateCase: [], + // 全部展开、收起 + collapseAll: false, + activeCollapse: [], + // 居民信息 + columnsBase: [ + { title: '姓名', key: 'residentName' }, + { title: '证件号码', key: 'idCard' }, + { title: '性别', key: 'genderName' }, + { title: '出生日期', key: 'dataBirth' }, + { title: '年龄', key: 'currentAge' }, + { title: '民族', key: 'nationalName' }, + { title: '本人电话', key: 'telephone' }, + { title: '现住址', key: 'presentCodeName' }, + { title: '详细地址', key: 'nowAddress' }, + { title: '户籍地址', key: 'registeredCodeName' }, + { title: '详细地址', key: 'permanentAddress' } + ], + // 体征 + columnsPhysical: [ + { title: '收缩压SBP', key: 'signSystolicPressure', unit: 'mmHg' }, + { title: '舒张压DBP', key: 'signDiastolicPressure', unit: 'mmHg' }, + { title: '心率', key: 'signHeartRate', unit: '次/分' }, + { title: '身高', key: 'signHeight', unit: 'cm' }, + { title: '体重', key: 'signWeight', unit: 'kg' }, + { title: 'BMI', key: 'signBmi', unit: 'kg/m²' }, + { title: '其他', key: 'signOther' } + ], + // 随访机构 + columnsOrg: [ + { title: '随访日期', key: 'visitDate' }, + { title: '随访单位', key: 'visitUnitName' }, + { title: '随访科室', key: 'visitOfficeName' }, + { title: '随访医生', key: 'visitDoctorName' }, + { title: '录入日期', key: 'createDate' }, + { title: '录入单位', key: 'createUnitName' }, + { title: '录入科室', key: 'createOfficeName' }, + { title: '录入医生', key: 'createDoctorName' }, + ] + } + }, + computed: { + residentInfo() { + return this.info.residentsRecord || {} + } + }, + methods: { + dataHandle() { + // 字符串转数组 + const form = fetchDataHandle(this.visitInfo, { + auxiliaryExamination: 'strToArrNum' + }) + this.info = form + // 辅助检查处理 + let { auxiliaryExamination = [], inspectList = [], medicateCase = [] } = form + let list = [] + auxiliaryExamination.forEach(item => { + const items = inspectList.filter(e => e.insType === item) + if (items.length > 0) { + list.push({ + insType: items[0].insType, + insName: items[0].insName, + items: [...items] + }) + } + }) + this.inspectList = list + // 用药情况处理 + this.medicateCase = JSON.parse(medicateCase) + console.log(2, form) + }, + // 全部展开、收起 + toggleAll() { + if (this.collapseAll) { + this.activeCollapse = [] + } else { + let list = [] + for (let i = 1; i < 15; i++) { + list.push(i.toString()) + } + this.activeCollapse = list + } + this.collapseAll = !this.collapseAll + }, + // 折叠面板切换 + collapseChange(val) { + if (val.length === 14) { + this.collapseAll = true + } else { + this.collapseAll = false + } + } + }, + watch: { + visitInfo: { + handler() { + console.log(1, this.visitInfo) + this.dataHandle() + } + } + } +} +</script> +<style lang="less" scoped> +.cont-box { + background-color: #f9f9f9; + + .cont-inner { + background: linear-gradient(to bottom, #DFF5F4, #fff .6rem); + border-top-left-radius: .08rem; + border-top-right-radius: .08rem; + } +} + +.collapse-head { + .icon-down { + vertical-align: middle; + font-size: .12rem; + + .svg-icon { + transition: all .2s; + } + } + + .icon-down-expanded { + .svg-icon { + transform: rotate(-180deg); + } + } +} + +.list { + color: #262626; + .label { + min-width: 5em; + } +} +.box { + background: #F8FAFC; + padding: 8px; + color: #4D5665; + +} +</style> \ No newline at end of file diff --git a/src/residentWX/visit/detail/components/CerebralApoplexyDetail.vue b/src/residentWX/visit/detail/components/CerebralApoplexyDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..8a793b0b9e00cde197a4741f6e259ee2bb8821fe --- /dev/null +++ b/src/residentWX/visit/detail/components/CerebralApoplexyDetail.vue @@ -0,0 +1,502 @@ +<template> + <div class="p-3 grow cont-box"> + <div class="p-3 h-full cont-inner"> + <div class="flex justify-between collapse-head"> + <span class="text-16">全部内容</span> + <span @click="toggleAll"> + <span v-if="!collapseAll">展开全部</span> + <span v-else>收起全部</span> + <span :class="['ml-2 icon-down', { 'icon-down-expanded': collapseAll }]"> + <doc-icon type="doc-down" /> + </span> + </span> + </div> + + <van-collapse v-model="activeCollapse" ref="collapse" class="doc-collapse" @change="collapseChange"> + <van-collapse-item key="1" title="居民信息" name="1"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsBase" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span> + <span class="text-end" v-else> + <span>{{ residentInfo[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="2" title="症状" name="2"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">症状</span> + <span class="text-end"> + {{ info.symptomName || '-' }} + </span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="3" title="体征" name="3"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsPhysical" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end"> + <span>{{ info[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="4" title="生活方式指导" name="4"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div style="color: #262626">吸烟</div> + <div class="box"> + <div> + <span>是否正在吸烟:</span> + <span>{{ info.isSmokingName }}</span> + </div> + <div v-if="info.isSmoking === 1"> + <span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span> + <span>{{ info.startSmokeAge || '-' }}岁</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>您最近7天是否吸烟:</span> + <span>{{ info.lastSevenSmokeName }}</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>日吸烟量:</span> + <span>{{ info.daySmoking || '-' }}支</span> + <span class="ml-4">目标日吸烟量:</span> + <span>{{ info.goalDaySmoking || '-' }}支</span> + </div> + </div> + <div style="color: #262626" class="mt-2">饮酒</div> + <div class="box"> + <div> + <span>是否正在饮酒:</span> + <span>{{ info.isDrinkName }}</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>日饮酒量:</span> + <span>{{ info.dayDrink || '-' }}ml</span> + <span class="ml-4">目标日饮酒量:</span> + <span>{{ info.goalDayDrink || '-' }}ml</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>白酒:</span> + <span>{{ info.drinkLiquor || '-' }}ml/日</span> + <span class="ml-2">啤酒:</span> + <span>{{ info.drinkBeer || '-' }}ml/日</span> + <span class="ml-2">红酒:</span> + <span>{{ info.drinkRed || '-' }}ml/日</span> + <span class="ml-2">黄酒:</span> + <span>{{ info.drinkYellow || '-' }}ml/日</span> + <span class="ml-2">其他:</span> + <span>{{ info.drinkOther || '-' }}ml/日</span> + </div> + </div> + <div style="color: #262626" class="mt-2">运动</div> + <div class="box"> + <div> + <span>有无规律活动:</span> + <span>{{ info.regularExerciseName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>运动强度:</span> + <span>{{ info.exerciseStrengthName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>目前运动情况:</span> + <span>{{ info.nowExerciseWeek || '-' }}次/周、</span> + <span>{{ info.nowExerciseMinute || '-' }}分钟/次</span> + </div> + </div> + <div class="list mt-2"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">摄盐情况(咸淡)</span> + <span class="text-end">{{ info.saltIntakeName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">心理调整</span> + <span class="text-end">{{ info.psychologicalRecoveryName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">遵医行为</span> + <span class="text-end">{{ info.doctorAdviceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="5" title="辅助检查" name="5"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in inspectList" :key="x.insType"> + <div style="color: #262626" :class="[xIndex === 0 ? '' : 'mt-2']">{{ x.insName }}</div> + <div class="box"> + <div v-for="y in x.items"> + <span>{{ y.itemName }}:</span> + <span>{{ y.itemValue }}</span> + <span class="ml-1">{{ y.unit }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="6" title="服药依从性" name="6"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">服药依从性</span> + <span class="text-end">{{ info.medicationComplianceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="7" title="药物不良反应" name="7"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">药物不良反应</span> + <span class="text-end">{{ info.drugsAdverseName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="8" title="此次随访分类" name="8"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">此次随访分类</span> + <span class="text-end">{{ info.visitTypeName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="9" title="目前诊断" name="9"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in info.diagnoseInfoList" :key="xIndex"> + <div style="color: #262626"> + {{ (store.getDict('CP00086').find(e => e.value === x.currentDiagnoseType)).name }} + </div> + <div class="box" > + <div v-if="x.currentDiagnoseType === 1"> + <span>高血压分级:</span> + <span>{{ x.diagnoseResultValue }}</span> + <span class="ml-4">高血压危险分层:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 2"> + <span>糖尿病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 3"> + <span>冠心病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 4"> + <span>缺血性脑卒中:</span> + <span>{{ x.diagnoseResultValue || '-' }}</span> + <span class="ml-4">出血性脑卒中:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 5"> + <span>慢阻肺:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 6"> + <span>慢性肾病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 7"> + <span>血脂异常:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div> + <span>纳入管理日期:</span> + <span>{{ x.inclusionManageDate }}</span> + </div> + <div v-for="(y, yIndex) in x.diagnoseItemList" :key="yIndex"> + <div> + <span>诊断名称:</span> + <span>{{ y.diagnosisResultName }}</span> + </div> + <div> + <span>诊断日期:</span> + <span>{{ y.diagnosisDate }}</span> + </div> + <div> + <span>诊断单位:</span> + <span>{{ y.diagnosisUnitName }}</span> + </div> + <div> + <span>诊断科室:</span> + <span>{{ y.diagnosisOfficeName }}</span> + </div> + <div> + <span>诊断医生:</span> + <span>{{ y.diagnosisUserName }}</span> + </div> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="10" title="用药情况" name="10"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">是否调整治疗方案</span> + <span class="text-end">{{ info.adjustTreatName }}</span> + </div> + </div> + <div v-if="info.adjustTreat === 1"> + <div style="color: #262626" class="mt-2">用药</div> + <div v-for="(item, index) in medicateCase" :key="index" class="box mt-2"> + <div> + <span>药物名称:</span> + <span>{{ item.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ item.dose }}</span> + <span>{{ store.getDictValue('CP00081', item.unit) }}</span> + </div> + <div> + <span>频次:</span> + <span>{{ store.getDictValue('CP00084', item.frequency) }}</span> + <span class="ml-4">用法:</span> + <span>{{ store.getDictValue('CP00083', item.usage) }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="11" title="转诊" name="11"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊原因</span> + <span class="text-end">{{ info.referralReason }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊机构</span> + <span class="text-end">{{ info.referralUnitName }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊科室</span> + <span class="text-end">{{ info.referralOfficeName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="12" title="现场随访照片" name="12"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + </van-collapse-item> + <van-collapse-item key="13" title="下次随访日期" name="13"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">下次随访日期</span> + <span class="text-end">{{ info.nextVisitDate }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="14" title="随访机构" name="14"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsOrg" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end">{{ info[item.key] }}</span> + </div> + </div> + </div> + </van-collapse-item> + </van-collapse> + </div> + </div> +</template> +<script> +import { fetchDataHandle } from '@/utils/common.js' +import { useStore } from '@/resident/store/index.js' +export default { + props: { + visitInfo: { + type: Object, + default: () => {} + } + }, + data() { + return { + info: {}, + store: useStore(), + // 辅助检查 + inspectList: [], + // 用药情况 + medicateCase: [], + // 全部展开、收起 + collapseAll: false, + activeCollapse: [], + // 居民信息 + columnsBase: [ + { title: '姓名', key: 'residentName' }, + { title: '证件号码', key: 'idCard' }, + { title: '性别', key: 'genderName' }, + { title: '出生日期', key: 'dataBirth' }, + { title: '年龄', key: 'currentAge' }, + { title: '民族', key: 'nationalName' }, + { title: '本人电话', key: 'telephone' }, + { title: '现住址', key: 'presentCodeName' }, + { title: '详细地址', key: 'nowAddress' }, + { title: '户籍地址', key: 'registeredCodeName' }, + { title: '详细地址', key: 'permanentAddress' } + ], + // 体征 + columnsPhysical: [ + { title: '收缩压SBP', key: 'signSystolicPressure', unit: 'mmHg' }, + { title: '舒张压DBP', key: 'signDiastolicPressure', unit: 'mmHg' }, + { title: '心率', key: 'signHeartRate', unit: '次/分' }, + { title: '身高', key: 'signHeight', unit: 'cm' }, + { title: '体重', key: 'signWeight', unit: 'kg' }, + { title: 'BMI', key: 'signBmi', unit: 'kg/m²' }, + { title: '其他', key: 'signOther' } + ], + // 随访机构 + columnsOrg: [ + { title: '随访日期', key: 'visitDate' }, + { title: '随访单位', key: 'visitUnitName' }, + { title: '随访科室', key: 'visitOfficeName' }, + { title: '随访医生', key: 'visitDoctorName' }, + { title: '录入日期', key: 'createDate' }, + { title: '录入单位', key: 'createUnitName' }, + { title: '录入科室', key: 'createOfficeName' }, + { title: '录入医生', key: 'createDoctorName' }, + ] + } + }, + computed: { + residentInfo() { + return this.info.residentsRecord || {} + } + }, + methods: { + dataHandle() { + // 字符串转数组 + const form = fetchDataHandle(this.visitInfo, { + auxiliaryExamination: 'strToArrNum' + }) + this.info = form + // 辅助检查处理 + let { auxiliaryExamination = [], inspectList = [], medicateCase = [] } = form + let list = [] + auxiliaryExamination.forEach(item => { + const items = inspectList.filter(e => e.insType === item) + if (items.length > 0) { + list.push({ + insType: items[0].insType, + insName: items[0].insName, + items: [...items] + }) + } + }) + this.inspectList = list + // 用药情况处理 + this.medicateCase = JSON.parse(medicateCase) + console.log(2, form) + }, + // 全部展开、收起 + toggleAll() { + if (this.collapseAll) { + this.activeCollapse = [] + } else { + let list = [] + for (let i = 1; i < 15; i++) { + list.push(i.toString()) + } + this.activeCollapse = list + } + this.collapseAll = !this.collapseAll + }, + // 折叠面板切换 + collapseChange(val) { + if (val.length === 14) { + this.collapseAll = true + } else { + this.collapseAll = false + } + } + }, + watch: { + visitInfo: { + handler() { + console.log(1, this.visitInfo) + this.dataHandle() + } + } + } +} +</script> +<style lang="less" scoped> +.cont-box { + background-color: #f9f9f9; + + .cont-inner { + background: linear-gradient(to bottom, #DFF5F4, #fff .6rem); + border-top-left-radius: .08rem; + border-top-right-radius: .08rem; + } +} + +.collapse-head { + .icon-down { + vertical-align: middle; + font-size: .12rem; + + .svg-icon { + transition: all .2s; + } + } + + .icon-down-expanded { + .svg-icon { + transform: rotate(-180deg); + } + } +} + +.list { + color: #262626; + .label { + min-width: 5em; + } +} +.box { + background: #F8FAFC; + padding: 8px; + color: #4D5665; + +} +</style> \ No newline at end of file diff --git a/src/residentWX/visit/detail/components/ChronicKidneyDiseaseDetail.vue b/src/residentWX/visit/detail/components/ChronicKidneyDiseaseDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..fe25a76f99f6567a1114ffc2f690d52f27e7d54c --- /dev/null +++ b/src/residentWX/visit/detail/components/ChronicKidneyDiseaseDetail.vue @@ -0,0 +1,501 @@ +<template> + <div class="p-3 grow cont-box"> + <div class="p-3 h-full cont-inner"> + <div class="flex justify-between collapse-head"> + <span class="text-16">全部内容</span> + <span @click="toggleAll"> + <span v-if="!collapseAll">展开全部</span> + <span v-else>收起全部</span> + <span :class="['ml-2 icon-down', { 'icon-down-expanded': collapseAll }]"> + <doc-icon type="doc-down" /> + </span> + </span> + </div> + + <van-collapse v-model="activeCollapse" ref="collapse" class="doc-collapse" @change="collapseChange"> + <van-collapse-item key="1" title="居民信息" name="1"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsBase" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span> + <span class="text-end" v-else> + <span>{{ residentInfo[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="2" title="症状" name="2"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">症状</span> + <span class="text-end"> + {{ info.symptomName || '-' }} + </span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="3" title="体征" name="3"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsPhysical" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end"> + <span>{{ info[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="4" title="生活方式指导" name="4"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div style="color: #262626">吸烟</div> + <div class="box"> + <div> + <span>是否正在吸烟:</span> + <span>{{ info.isSmokingName }}</span> + </div> + <div v-if="info.isSmoking === 1"> + <span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span> + <span>{{ info.startSmokeAge || '-' }}岁</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>您最近7天是否吸烟:</span> + <span>{{ info.lastSevenSmokeName }}</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>日吸烟量:</span> + <span>{{ info.daySmoking || '-' }}支</span> + <span class="ml-4">目标日吸烟量:</span> + <span>{{ info.goalDaySmoking || '-' }}支</span> + </div> + </div> + <div style="color: #262626" class="mt-2">饮酒</div> + <div class="box"> + <div> + <span>是否正在饮酒:</span> + <span>{{ info.isDrinkName }}</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>日饮酒量:</span> + <span>{{ info.dayDrink || '-' }}ml</span> + <span class="ml-4">目标日饮酒量:</span> + <span>{{ info.goalDayDrink || '-' }}ml</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>白酒:</span> + <span>{{ info.drinkLiquor || '-' }}ml/日</span> + <span class="ml-2">啤酒:</span> + <span>{{ info.drinkBeer || '-' }}ml/日</span> + <span class="ml-2">红酒:</span> + <span>{{ info.drinkRed || '-' }}ml/日</span> + <span class="ml-2">黄酒:</span> + <span>{{ info.drinkYellow || '-' }}ml/日</span> + <span class="ml-2">其他:</span> + <span>{{ info.drinkOther || '-' }}ml/日</span> + </div> + </div> + <div style="color: #262626" class="mt-2">运动</div> + <div class="box"> + <div> + <span>有无规律活动:</span> + <span>{{ info.regularExerciseName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>运动强度:</span> + <span>{{ info.exerciseStrengthName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>目前运动情况:</span> + <span>{{ info.nowExerciseWeek || '-' }}次/周、</span> + <span>{{ info.nowExerciseMinute || '-' }}分钟/次</span> + </div> + </div> + <div class="list mt-2"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">摄盐情况(咸淡)</span> + <span class="text-end">{{ info.saltIntakeName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">心理调整</span> + <span class="text-end">{{ info.psychologicalRecoveryName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">遵医行为</span> + <span class="text-end">{{ info.doctorAdviceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="5" title="辅助检查" name="5"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in inspectList" :key="x.insType"> + <div style="color: #262626" :class="[xIndex === 0 ? '' : 'mt-2']">{{ x.insName }}</div> + <div class="box"> + <div v-for="y in x.items"> + <span>{{ y.itemName }}:</span> + <span>{{ y.itemValue }}</span> + <span class="ml-1">{{ y.unit }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="6" title="服药依从性" name="6"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">服药依从性</span> + <span class="text-end">{{ info.medicationComplianceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="7" title="药物不良反应" name="7"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">药物不良反应</span> + <span class="text-end">{{ info.drugsAdverseName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="8" title="此次随访分类" name="8"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">此次随访分类</span> + <span class="text-end">{{ info.visitTypeName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="9" title="目前诊断" name="9"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in info.diagnoseInfoList" :key="xIndex"> + <div style="color: #262626"> + {{ (store.getDict('CP00086').find(e => e.value === x.currentDiagnoseType)).name }} + </div> + <div class="box" > + <div v-if="x.currentDiagnoseType === 1"> + <span>高血压分级:</span> + <span>{{ x.diagnoseResultValue }}</span> + <span class="ml-4">高血压危险分层:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 2"> + <span>糖尿病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 3"> + <span>冠心病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 4"> + <span>缺血性脑卒中:</span> + <span>{{ x.diagnoseResultValue || '-' }}</span> + <span class="ml-4">出血性脑卒中:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 5"> + <span>慢阻肺:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 6"> + <span>慢性肾病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 7"> + <span>血脂异常:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div> + <span>纳入管理日期:</span> + <span>{{ x.inclusionManageDate }}</span> + </div> + <div v-for="(y, yIndex) in x.diagnoseItemList" :key="yIndex"> + <div> + <span>诊断名称:</span> + <span>{{ y.diagnosisResultName }}</span> + </div> + <div> + <span>诊断日期:</span> + <span>{{ y.diagnosisDate }}</span> + </div> + <div> + <span>诊断单位:</span> + <span>{{ y.diagnosisUnitName }}</span> + </div> + <div> + <span>诊断科室:</span> + <span>{{ y.diagnosisOfficeName }}</span> + </div> + <div> + <span>诊断医生:</span> + <span>{{ y.diagnosisUserName }}</span> + </div> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="10" title="用药情况" name="10"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">是否调整治疗方案</span> + <span class="text-end">{{ info.adjustTreatName }}</span> + </div> + </div> + <div v-if="info.adjustTreat === 1"> + <div style="color: #262626" class="mt-2">用药</div> + <div v-for="(item, index) in medicateCase" :key="index" class="box mt-2"> + <div> + <span>药物名称:</span> + <span>{{ item.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ item.dose }}</span> + <span>{{ store.getDictValue('CP00081', item.unit) }}</span> + </div> + <div> + <span>频次:</span> + <span>{{ store.getDictValue('CP00084', item.frequency) }}</span> + <span class="ml-4">用法:</span> + <span>{{ store.getDictValue('CP00083', item.usage) }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="11" title="转诊" name="11"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊原因</span> + <span class="text-end">{{ info.referralReason }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊机构</span> + <span class="text-end">{{ info.referralUnitName }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊科室</span> + <span class="text-end">{{ info.referralOfficeName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="12" title="现场随访照片" name="12"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + </van-collapse-item> + <van-collapse-item key="13" title="下次随访日期" name="13"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">下次随访日期</span> + <span class="text-end">{{ info.nextVisitDate }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="14" title="随访机构" name="14"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsOrg" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end">{{ info[item.key] }}</span> + </div> + </div> + </div> + </van-collapse-item> + </van-collapse> + </div> + </div> +</template> +<script> +import { fetchDataHandle } from '@/utils/common.js' +import { useStore } from '@/resident/store/index.js' +export default { + props: { + visitInfo: { + type: Object, + default: () => {} + } + }, + data() { + return { + info: {}, + store: useStore(), + // 辅助检查 + inspectList: [], + // 用药情况 + medicateCase: [], + // 全部展开、收起 + collapseAll: false, + activeCollapse: [], + // 居民信息 + columnsBase: [ + { title: '姓名', key: 'residentName' }, + { title: '证件号码', key: 'idCard' }, + { title: '性别', key: 'genderName' }, + { title: '出生日期', key: 'dataBirth' }, + { title: '年龄', key: 'currentAge' }, + { title: '民族', key: 'nationalName' }, + { title: '本人电话', key: 'telephone' }, + { title: '现住址', key: 'presentCodeName' }, + { title: '详细地址', key: 'nowAddress' }, + { title: '户籍地址', key: 'registeredCodeName' }, + { title: '详细地址', key: 'permanentAddress' } + ], + // 体征 + columnsPhysical: [ + { title: '收缩压SBP', key: 'signSystolicPressure', unit: 'mmHg' }, + { title: '舒张压DBP', key: 'signDiastolicPressure', unit: 'mmHg' }, + { title: '心率', key: 'signHeartRate', unit: '次/分' }, + { title: '体重', key: 'signWeight', unit: 'kg' }, + { title: '水肿', key: 'signEdemaName' }, + { title: '其他', key: 'signOther' } + ], + // 随访机构 + columnsOrg: [ + { title: '随访日期', key: 'visitDate' }, + { title: '随访单位', key: 'visitUnitName' }, + { title: '随访科室', key: 'visitOfficeName' }, + { title: '随访医生', key: 'visitDoctorName' }, + { title: '录入日期', key: 'createDate' }, + { title: '录入单位', key: 'createUnitName' }, + { title: '录入科室', key: 'createOfficeName' }, + { title: '录入医生', key: 'createDoctorName' }, + ] + } + }, + computed: { + residentInfo() { + return this.info.residentsRecord || {} + } + }, + methods: { + dataHandle() { + // 字符串转数组 + const form = fetchDataHandle(this.visitInfo, { + auxiliaryExamination: 'strToArrNum' + }) + this.info = form + // 辅助检查处理 + let { auxiliaryExamination = [], inspectList = [], medicateCase = [] } = form + let list = [] + auxiliaryExamination.forEach(item => { + const items = inspectList.filter(e => e.insType === item) + if (items.length > 0) { + list.push({ + insType: items[0].insType, + insName: items[0].insName, + items: [...items] + }) + } + }) + this.inspectList = list + // 用药情况处理 + this.medicateCase = JSON.parse(medicateCase) + console.log(2, form) + }, + // 全部展开、收起 + toggleAll() { + if (this.collapseAll) { + this.activeCollapse = [] + } else { + let list = [] + for (let i = 1; i < 15; i++) { + list.push(i.toString()) + } + this.activeCollapse = list + } + this.collapseAll = !this.collapseAll + }, + // 折叠面板切换 + collapseChange(val) { + if (val.length === 14) { + this.collapseAll = true + } else { + this.collapseAll = false + } + } + }, + watch: { + visitInfo: { + handler() { + console.log(1, this.visitInfo) + this.dataHandle() + } + } + } +} +</script> +<style lang="less" scoped> +.cont-box { + background-color: #f9f9f9; + + .cont-inner { + background: linear-gradient(to bottom, #DFF5F4, #fff .6rem); + border-top-left-radius: .08rem; + border-top-right-radius: .08rem; + } +} + +.collapse-head { + .icon-down { + vertical-align: middle; + font-size: .12rem; + + .svg-icon { + transition: all .2s; + } + } + + .icon-down-expanded { + .svg-icon { + transform: rotate(-180deg); + } + } +} + +.list { + color: #262626; + .label { + min-width: 5em; + } +} +.box { + background: #F8FAFC; + padding: 8px; + color: #4D5665; + +} +</style> \ No newline at end of file diff --git a/src/residentWX/visit/detail/components/CopdDetail.vue b/src/residentWX/visit/detail/components/CopdDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..2acd8a730dcb2be428a19b64e229a64719969dec --- /dev/null +++ b/src/residentWX/visit/detail/components/CopdDetail.vue @@ -0,0 +1,507 @@ +<template> + <div class="p-3 grow cont-box"> + <div class="p-3 h-full cont-inner"> + <div class="flex justify-between collapse-head"> + <span class="text-16">全部内容</span> + <span @click="toggleAll"> + <span v-if="!collapseAll">展开全部</span> + <span v-else>收起全部</span> + <span :class="['ml-2 icon-down', { 'icon-down-expanded': collapseAll }]"> + <doc-icon type="doc-down" /> + </span> + </span> + </div> + + <van-collapse v-model="activeCollapse" ref="collapse" class="doc-collapse" @change="collapseChange"> + <van-collapse-item key="1" title="居民信息" name="1"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsBase" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span> + <span class="text-end" v-else> + <span>{{ residentInfo[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="2" title="症状" name="2"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">症状</span> + <span class="text-end"> + {{ info.symptomName || '-' }} + </span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="3" title="体征" name="3"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsPhysical" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end"> + <span>{{ info[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="4" title="生活方式指导" name="4"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div style="color: #262626">吸烟</div> + <div class="box"> + <div> + <span>是否正在吸烟:</span> + <span>{{ info.isSmokingName }}</span> + </div> + <div v-if="info.isSmoking === 1"> + <span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span> + <span>{{ info.startSmokeAge || '-' }}岁</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>您最近7天是否吸烟:</span> + <span>{{ info.lastSevenSmokeName }}</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>日吸烟量:</span> + <span>{{ info.daySmoking || '-' }}支</span> + <span class="ml-4">目标日吸烟量:</span> + <span>{{ info.goalDaySmoking || '-' }}支</span> + </div> + </div> + <div style="color: #262626" class="mt-2">运动</div> + <div class="box"> + <div> + <span>有无规律活动:</span> + <span>{{ info.regularExerciseName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>运动强度:</span> + <span>{{ info.exerciseStrengthName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>目前运动情况:</span> + <span>{{ info.nowExerciseWeek || '-' }}次/周、</span> + <span>{{ info.nowExerciseMinute || '-' }}分钟/次</span> + </div> + </div> + <div style="color: #262626" class="mt-2">呼吸锻炼</div> + <div class="box"> + <div> + <span>有无呼吸锻炼:</span> + <span>{{ info.isBreathExerciseName }}</span> + </div> + <div v-if="info.isBreathExercise === 1"> + <span>呼吸锻炼频率:</span> + <span>{{ info.breathExerciseWeek || '-' }}次/周、</span> + <span>{{ info.breathExerciseMinute || '-' }}分钟/次</span> + </div> + </div> + <div class="list mt-2"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">健康教育</span> + <span class="text-end">{{ info.healthEducationName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">心理调整</span> + <span class="text-end">{{ info.psychologicalRecoveryName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">遵医行为</span> + <span class="text-end">{{ info.doctorAdviceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="5" title="辅助检查" name="5"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsAuxiliary" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end"> + <span>{{ info[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + <div v-for="(x, xIndex) in inspectList" :key="x.insType"> + <div style="color: #262626" :class="[xIndex === 0 ? '' : 'mt-2']">{{ x.insName }}</div> + <div class="box"> + <div v-for="y in x.items"> + <span>{{ y.itemName }}:</span> + <span>{{ y.itemValue }}</span> + <span class="ml-1">{{ y.unit }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="6" title="服药依从性" name="6"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">服药依从性</span> + <span class="text-end">{{ info.medicationComplianceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="7" title="药物不良反应" name="7"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">药物不良反应</span> + <span class="text-end">{{ info.drugsAdverseName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="8" title="此次随访分类" name="8"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">此次随访分类</span> + <span class="text-end">{{ info.visitTypeName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="9" title="目前诊断" name="9"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in info.diagnoseInfoList" :key="xIndex"> + <div style="color: #262626"> + {{ (store.getDict('CP00086').find(e => e.value === x.currentDiagnoseType)).name }} + </div> + <div class="box" > + <div v-if="x.currentDiagnoseType === 1"> + <span>高血压分级:</span> + <span>{{ x.diagnoseResultValue }}</span> + <span class="ml-4">高血压危险分层:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 2"> + <span>糖尿病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 3"> + <span>冠心病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 4"> + <span>缺血性脑卒中:</span> + <span>{{ x.diagnoseResultValue || '-' }}</span> + <span class="ml-4">出血性脑卒中:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 5"> + <span>慢阻肺:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 6"> + <span>慢性肾病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 7"> + <span>血脂异常:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div> + <span>纳入管理日期:</span> + <span>{{ x.inclusionManageDate }}</span> + </div> + <div v-for="(y, yIndex) in x.diagnoseItemList" :key="yIndex"> + <div> + <span>诊断名称:</span> + <span>{{ y.diagnosisResultName }}</span> + </div> + <div> + <span>诊断日期:</span> + <span>{{ y.diagnosisDate }}</span> + </div> + <div> + <span>诊断单位:</span> + <span>{{ y.diagnosisUnitName }}</span> + </div> + <div> + <span>诊断科室:</span> + <span>{{ y.diagnosisOfficeName }}</span> + </div> + <div> + <span>诊断医生:</span> + <span>{{ y.diagnosisUserName }}</span> + </div> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="10" title="用药情况" name="10"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">是否调整治疗方案</span> + <span class="text-end">{{ info.adjustTreatName }}</span> + </div> + </div> + <div v-if="info.adjustTreat === 1"> + <div style="color: #262626" class="mt-2">用药</div> + <div v-for="(item, index) in medicateCase" :key="index" class="box mt-2"> + <div> + <span>药物名称:</span> + <span>{{ item.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ item.dose }}</span> + <span>{{ store.getDictValue('CP00081', item.unit) }}</span> + </div> + <div> + <span>频次:</span> + <span>{{ store.getDictValue('CP00084', item.frequency) }}</span> + <span class="ml-4">用法:</span> + <span>{{ store.getDictValue('CP00083', item.usage) }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="11" title="转诊" name="11"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊原因</span> + <span class="text-end">{{ info.referralReason }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊机构</span> + <span class="text-end">{{ info.referralUnitName }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊科室</span> + <span class="text-end">{{ info.referralOfficeName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="12" title="现场随访照片" name="12"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + </van-collapse-item> + <van-collapse-item key="13" title="下次随访日期" name="13"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">下次随访日期</span> + <span class="text-end">{{ info.nextVisitDate }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="14" title="随访机构" name="14"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsOrg" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end">{{ info[item.key] }}</span> + </div> + </div> + </div> + </van-collapse-item> + </van-collapse> + </div> + </div> +</template> +<script> +import { fetchDataHandle } from '@/utils/common.js' +import { useStore } from '@/resident/store/index.js' +export default { + props: { + visitInfo: { + type: Object, + default: () => {} + } + }, + data() { + return { + info: {}, + store: useStore(), + // 辅助检查 + inspectList: [], + // 用药情况 + medicateCase: [], + // 全部展开、收起 + collapseAll: false, + activeCollapse: [], + // 居民信息 + columnsBase: [ + { title: '姓名', key: 'residentName' }, + { title: '证件号码', key: 'idCard' }, + { title: '性别', key: 'genderName' }, + { title: '出生日期', key: 'dataBirth' }, + { title: '年龄', key: 'currentAge' }, + { title: '民族', key: 'nationalName' }, + { title: '本人电话', key: 'telephone' }, + { title: '现住址', key: 'presentCodeName' }, + { title: '详细地址', key: 'nowAddress' }, + { title: '户籍地址', key: 'registeredCodeName' }, + { title: '详细地址', key: 'permanentAddress' } + ], + // 体征 + columnsPhysical: [ + { title: '身高', key: 'signHeight', unit: 'cm' }, + { title: '体重', key: 'signWeight', unit: 'kg' }, + { title: 'BMI', key: 'signBmi', unit: 'kg/m²' }, + { title: '口唇紫绀', key: 'signCyanosisName' }, + { title: '下肢水肿', key: 'signEdemaName' }, + { title: '其他', key: 'signOther' } + ], + // 辅助检查 + columnsAuxiliary: [ + { title: 'FEV1', key: 'fev1', unit: 'L' }, + { title: 'FVC', key: 'fvc', unit: 'L' }, + { title: 'FEV1%pred', key: 'fev1Pred', unit: '%' }, + { title: 'FVC%pred', key: 'fvcPred', unit: '%' }, + { title: 'FEV1/FVC', key: 'fev1Fvc', unit: '%' }, + ], + // 随访机构 + columnsOrg: [ + { title: '随访日期', key: 'visitDate' }, + { title: '随访单位', key: 'visitUnitName' }, + { title: '随访科室', key: 'visitOfficeName' }, + { title: '随访医生', key: 'visitDoctorName' }, + { title: '录入日期', key: 'createDate' }, + { title: '录入单位', key: 'createUnitName' }, + { title: '录入科室', key: 'createOfficeName' }, + { title: '录入医生', key: 'createDoctorName' }, + ] + } + }, + computed: { + residentInfo() { + return this.info.residentsRecord || {} + } + }, + methods: { + dataHandle() { + // 字符串转数组 + const form = fetchDataHandle(this.visitInfo, { + auxiliaryExamination: 'strToArrNum' + }) + this.info = form + // 辅助检查处理 + let { auxiliaryExamination = [], inspectList = [], medicateCase = [] } = form + let list = [] + auxiliaryExamination.forEach(item => { + const items = inspectList.filter(e => e.insType === item) + if (items.length > 0) { + list.push({ + insType: items[0].insType, + insName: items[0].insName, + items: [...items] + }) + } + }) + this.inspectList = list + // 用药情况处理 + this.medicateCase = JSON.parse(medicateCase) + console.log(2, form) + }, + // 全部展开、收起 + toggleAll() { + if (this.collapseAll) { + this.activeCollapse = [] + } else { + let list = [] + for (let i = 1; i < 15; i++) { + list.push(i.toString()) + } + this.activeCollapse = list + } + this.collapseAll = !this.collapseAll + }, + // 折叠面板切换 + collapseChange(val) { + if (val.length === 14) { + this.collapseAll = true + } else { + this.collapseAll = false + } + } + }, + watch: { + visitInfo: { + handler() { + console.log(1, this.visitInfo) + this.dataHandle() + } + } + } +} +</script> +<style lang="less" scoped> +.cont-box { + background-color: #f9f9f9; + + .cont-inner { + background: linear-gradient(to bottom, #DFF5F4, #fff .6rem); + border-top-left-radius: .08rem; + border-top-right-radius: .08rem; + } +} + +.collapse-head { + .icon-down { + vertical-align: middle; + font-size: .12rem; + + .svg-icon { + transition: all .2s; + } + } + + .icon-down-expanded { + .svg-icon { + transform: rotate(-180deg); + } + } +} + +.list { + color: #262626; + .label { + min-width: 5em; + } +} +.box { + background: #F8FAFC; + padding: 8px; + color: #4D5665; + +} +</style> \ No newline at end of file diff --git a/src/residentWX/visit/detail/components/CoronaryHeartDiseaseDetail.vue b/src/residentWX/visit/detail/components/CoronaryHeartDiseaseDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..8a793b0b9e00cde197a4741f6e259ee2bb8821fe --- /dev/null +++ b/src/residentWX/visit/detail/components/CoronaryHeartDiseaseDetail.vue @@ -0,0 +1,502 @@ +<template> + <div class="p-3 grow cont-box"> + <div class="p-3 h-full cont-inner"> + <div class="flex justify-between collapse-head"> + <span class="text-16">全部内容</span> + <span @click="toggleAll"> + <span v-if="!collapseAll">展开全部</span> + <span v-else>收起全部</span> + <span :class="['ml-2 icon-down', { 'icon-down-expanded': collapseAll }]"> + <doc-icon type="doc-down" /> + </span> + </span> + </div> + + <van-collapse v-model="activeCollapse" ref="collapse" class="doc-collapse" @change="collapseChange"> + <van-collapse-item key="1" title="居民信息" name="1"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsBase" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span> + <span class="text-end" v-else> + <span>{{ residentInfo[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="2" title="症状" name="2"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">症状</span> + <span class="text-end"> + {{ info.symptomName || '-' }} + </span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="3" title="体征" name="3"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsPhysical" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end"> + <span>{{ info[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="4" title="生活方式指导" name="4"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div style="color: #262626">吸烟</div> + <div class="box"> + <div> + <span>是否正在吸烟:</span> + <span>{{ info.isSmokingName }}</span> + </div> + <div v-if="info.isSmoking === 1"> + <span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span> + <span>{{ info.startSmokeAge || '-' }}岁</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>您最近7天是否吸烟:</span> + <span>{{ info.lastSevenSmokeName }}</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>日吸烟量:</span> + <span>{{ info.daySmoking || '-' }}支</span> + <span class="ml-4">目标日吸烟量:</span> + <span>{{ info.goalDaySmoking || '-' }}支</span> + </div> + </div> + <div style="color: #262626" class="mt-2">饮酒</div> + <div class="box"> + <div> + <span>是否正在饮酒:</span> + <span>{{ info.isDrinkName }}</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>日饮酒量:</span> + <span>{{ info.dayDrink || '-' }}ml</span> + <span class="ml-4">目标日饮酒量:</span> + <span>{{ info.goalDayDrink || '-' }}ml</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>白酒:</span> + <span>{{ info.drinkLiquor || '-' }}ml/日</span> + <span class="ml-2">啤酒:</span> + <span>{{ info.drinkBeer || '-' }}ml/日</span> + <span class="ml-2">红酒:</span> + <span>{{ info.drinkRed || '-' }}ml/日</span> + <span class="ml-2">黄酒:</span> + <span>{{ info.drinkYellow || '-' }}ml/日</span> + <span class="ml-2">其他:</span> + <span>{{ info.drinkOther || '-' }}ml/日</span> + </div> + </div> + <div style="color: #262626" class="mt-2">运动</div> + <div class="box"> + <div> + <span>有无规律活动:</span> + <span>{{ info.regularExerciseName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>运动强度:</span> + <span>{{ info.exerciseStrengthName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>目前运动情况:</span> + <span>{{ info.nowExerciseWeek || '-' }}次/周、</span> + <span>{{ info.nowExerciseMinute || '-' }}分钟/次</span> + </div> + </div> + <div class="list mt-2"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">摄盐情况(咸淡)</span> + <span class="text-end">{{ info.saltIntakeName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">心理调整</span> + <span class="text-end">{{ info.psychologicalRecoveryName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">遵医行为</span> + <span class="text-end">{{ info.doctorAdviceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="5" title="辅助检查" name="5"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in inspectList" :key="x.insType"> + <div style="color: #262626" :class="[xIndex === 0 ? '' : 'mt-2']">{{ x.insName }}</div> + <div class="box"> + <div v-for="y in x.items"> + <span>{{ y.itemName }}:</span> + <span>{{ y.itemValue }}</span> + <span class="ml-1">{{ y.unit }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="6" title="服药依从性" name="6"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">服药依从性</span> + <span class="text-end">{{ info.medicationComplianceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="7" title="药物不良反应" name="7"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">药物不良反应</span> + <span class="text-end">{{ info.drugsAdverseName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="8" title="此次随访分类" name="8"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">此次随访分类</span> + <span class="text-end">{{ info.visitTypeName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="9" title="目前诊断" name="9"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in info.diagnoseInfoList" :key="xIndex"> + <div style="color: #262626"> + {{ (store.getDict('CP00086').find(e => e.value === x.currentDiagnoseType)).name }} + </div> + <div class="box" > + <div v-if="x.currentDiagnoseType === 1"> + <span>高血压分级:</span> + <span>{{ x.diagnoseResultValue }}</span> + <span class="ml-4">高血压危险分层:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 2"> + <span>糖尿病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 3"> + <span>冠心病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 4"> + <span>缺血性脑卒中:</span> + <span>{{ x.diagnoseResultValue || '-' }}</span> + <span class="ml-4">出血性脑卒中:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 5"> + <span>慢阻肺:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 6"> + <span>慢性肾病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 7"> + <span>血脂异常:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div> + <span>纳入管理日期:</span> + <span>{{ x.inclusionManageDate }}</span> + </div> + <div v-for="(y, yIndex) in x.diagnoseItemList" :key="yIndex"> + <div> + <span>诊断名称:</span> + <span>{{ y.diagnosisResultName }}</span> + </div> + <div> + <span>诊断日期:</span> + <span>{{ y.diagnosisDate }}</span> + </div> + <div> + <span>诊断单位:</span> + <span>{{ y.diagnosisUnitName }}</span> + </div> + <div> + <span>诊断科室:</span> + <span>{{ y.diagnosisOfficeName }}</span> + </div> + <div> + <span>诊断医生:</span> + <span>{{ y.diagnosisUserName }}</span> + </div> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="10" title="用药情况" name="10"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">是否调整治疗方案</span> + <span class="text-end">{{ info.adjustTreatName }}</span> + </div> + </div> + <div v-if="info.adjustTreat === 1"> + <div style="color: #262626" class="mt-2">用药</div> + <div v-for="(item, index) in medicateCase" :key="index" class="box mt-2"> + <div> + <span>药物名称:</span> + <span>{{ item.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ item.dose }}</span> + <span>{{ store.getDictValue('CP00081', item.unit) }}</span> + </div> + <div> + <span>频次:</span> + <span>{{ store.getDictValue('CP00084', item.frequency) }}</span> + <span class="ml-4">用法:</span> + <span>{{ store.getDictValue('CP00083', item.usage) }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="11" title="转诊" name="11"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊原因</span> + <span class="text-end">{{ info.referralReason }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊机构</span> + <span class="text-end">{{ info.referralUnitName }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊科室</span> + <span class="text-end">{{ info.referralOfficeName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="12" title="现场随访照片" name="12"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + </van-collapse-item> + <van-collapse-item key="13" title="下次随访日期" name="13"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">下次随访日期</span> + <span class="text-end">{{ info.nextVisitDate }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="14" title="随访机构" name="14"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsOrg" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end">{{ info[item.key] }}</span> + </div> + </div> + </div> + </van-collapse-item> + </van-collapse> + </div> + </div> +</template> +<script> +import { fetchDataHandle } from '@/utils/common.js' +import { useStore } from '@/resident/store/index.js' +export default { + props: { + visitInfo: { + type: Object, + default: () => {} + } + }, + data() { + return { + info: {}, + store: useStore(), + // 辅助检查 + inspectList: [], + // 用药情况 + medicateCase: [], + // 全部展开、收起 + collapseAll: false, + activeCollapse: [], + // 居民信息 + columnsBase: [ + { title: '姓名', key: 'residentName' }, + { title: '证件号码', key: 'idCard' }, + { title: '性别', key: 'genderName' }, + { title: '出生日期', key: 'dataBirth' }, + { title: '年龄', key: 'currentAge' }, + { title: '民族', key: 'nationalName' }, + { title: '本人电话', key: 'telephone' }, + { title: '现住址', key: 'presentCodeName' }, + { title: '详细地址', key: 'nowAddress' }, + { title: '户籍地址', key: 'registeredCodeName' }, + { title: '详细地址', key: 'permanentAddress' } + ], + // 体征 + columnsPhysical: [ + { title: '收缩压SBP', key: 'signSystolicPressure', unit: 'mmHg' }, + { title: '舒张压DBP', key: 'signDiastolicPressure', unit: 'mmHg' }, + { title: '心率', key: 'signHeartRate', unit: '次/分' }, + { title: '身高', key: 'signHeight', unit: 'cm' }, + { title: '体重', key: 'signWeight', unit: 'kg' }, + { title: 'BMI', key: 'signBmi', unit: 'kg/m²' }, + { title: '其他', key: 'signOther' } + ], + // 随访机构 + columnsOrg: [ + { title: '随访日期', key: 'visitDate' }, + { title: '随访单位', key: 'visitUnitName' }, + { title: '随访科室', key: 'visitOfficeName' }, + { title: '随访医生', key: 'visitDoctorName' }, + { title: '录入日期', key: 'createDate' }, + { title: '录入单位', key: 'createUnitName' }, + { title: '录入科室', key: 'createOfficeName' }, + { title: '录入医生', key: 'createDoctorName' }, + ] + } + }, + computed: { + residentInfo() { + return this.info.residentsRecord || {} + } + }, + methods: { + dataHandle() { + // 字符串转数组 + const form = fetchDataHandle(this.visitInfo, { + auxiliaryExamination: 'strToArrNum' + }) + this.info = form + // 辅助检查处理 + let { auxiliaryExamination = [], inspectList = [], medicateCase = [] } = form + let list = [] + auxiliaryExamination.forEach(item => { + const items = inspectList.filter(e => e.insType === item) + if (items.length > 0) { + list.push({ + insType: items[0].insType, + insName: items[0].insName, + items: [...items] + }) + } + }) + this.inspectList = list + // 用药情况处理 + this.medicateCase = JSON.parse(medicateCase) + console.log(2, form) + }, + // 全部展开、收起 + toggleAll() { + if (this.collapseAll) { + this.activeCollapse = [] + } else { + let list = [] + for (let i = 1; i < 15; i++) { + list.push(i.toString()) + } + this.activeCollapse = list + } + this.collapseAll = !this.collapseAll + }, + // 折叠面板切换 + collapseChange(val) { + if (val.length === 14) { + this.collapseAll = true + } else { + this.collapseAll = false + } + } + }, + watch: { + visitInfo: { + handler() { + console.log(1, this.visitInfo) + this.dataHandle() + } + } + } +} +</script> +<style lang="less" scoped> +.cont-box { + background-color: #f9f9f9; + + .cont-inner { + background: linear-gradient(to bottom, #DFF5F4, #fff .6rem); + border-top-left-radius: .08rem; + border-top-right-radius: .08rem; + } +} + +.collapse-head { + .icon-down { + vertical-align: middle; + font-size: .12rem; + + .svg-icon { + transition: all .2s; + } + } + + .icon-down-expanded { + .svg-icon { + transform: rotate(-180deg); + } + } +} + +.list { + color: #262626; + .label { + min-width: 5em; + } +} +.box { + background: #F8FAFC; + padding: 8px; + color: #4D5665; + +} +</style> \ No newline at end of file diff --git a/src/residentWX/visit/detail/components/DiabetesDetail.vue b/src/residentWX/visit/detail/components/DiabetesDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..ba55fe6447df8f43b655ba1097f23187d166780e --- /dev/null +++ b/src/residentWX/visit/detail/components/DiabetesDetail.vue @@ -0,0 +1,562 @@ +<template> + <div class="p-3 grow cont-box"> + <div class="p-3 h-full cont-inner"> + <div class="flex justify-between collapse-head"> + <span class="text-16">全部内容</span> + <span @click="toggleAll"> + <span v-if="!collapseAll">展开全部</span> + <span v-else>收起全部</span> + <span :class="['ml-2 icon-down', { 'icon-down-expanded': collapseAll }]"> + <doc-icon type="doc-down" /> + </span> + </span> + </div> + + <van-collapse v-model="activeCollapse" ref="collapse" class="doc-collapse" @change="collapseChange"> + <van-collapse-item key="1" title="居民信息" name="1"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsBase" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span> + <span class="text-end" v-else> + <span>{{ residentInfo[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="2" title="症状" name="2"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">症状</span> + <span class="text-end"> + {{ info.symptomName || '-' }} + </span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="3" title="体征" name="3"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsPhysical" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end"> + <span>{{ info[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="4" title="生活方式指导" name="4"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div style="color: #262626">吸烟</div> + <div class="box"> + <div> + <span>是否正在吸烟:</span> + <span>{{ info.isSmokingName }}</span> + </div> + <div v-if="info.isSmoking === 1"> + <span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span> + <span>{{ info.startSmokeAge || '-' }}岁</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>您最近7天是否吸烟:</span> + <span>{{ info.lastSevenSmokeName }}</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>日吸烟量:</span> + <span>{{ info.daySmoking || '-' }}支</span> + <span class="ml-4">目标日吸烟量:</span> + <span>{{ info.goalDaySmoking || '-' }}支</span> + </div> + </div> + <div style="color: #262626" class="mt-2">饮酒</div> + <div class="box"> + <div> + <span>是否正在饮酒:</span> + <span>{{ info.isDrinkName }}</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>日饮酒量:</span> + <span>{{ info.dayDrink || '-' }}ml</span> + <span class="ml-4">目标日饮酒量:</span> + <span>{{ info.goalDayDrink || '-' }}ml</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>白酒:</span> + <span>{{ info.drinkLiquor || '-' }}ml/日</span> + <span class="ml-2">啤酒:</span> + <span>{{ info.drinkBeer || '-' }}ml/日</span> + <span class="ml-2">红酒:</span> + <span>{{ info.drinkRed || '-' }}ml/日</span> + <span class="ml-2">黄酒:</span> + <span>{{ info.drinkYellow || '-' }}ml/日</span> + <span class="ml-2">其他:</span> + <span>{{ info.drinkOther || '-' }}ml/日</span> + </div> + </div> + <div style="color: #262626" class="mt-2">运动</div> + <div class="box"> + <div> + <span>有无规律活动:</span> + <span>{{ info.regularExerciseName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>运动强度:</span> + <span>{{ info.exerciseStrengthName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>目前运动情况:</span> + <span>{{ info.nowExerciseWeek || '-' }}次/周、</span> + <span>{{ info.nowExerciseMinute || '-' }}分钟/次</span> + </div> + </div> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">主食</span> + <span class="text-end">{{ info.staplFood || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">目标主食</span> + <span class="text-end">{{ info.targetStaplFood || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">心理调整</span> + <span class="text-end">{{ info.psychologicalRecoveryName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">遵医行为</span> + <span class="text-end">{{ info.doctorAdviceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="5" title="辅助检查" name="5"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsAuxiliary" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end"> + <span>{{ info[item.key] || '-' }}</span> + <span class="ml-1">{{ item.unit }}</span> + </span> + + </div> + </div> + </div> + <div v-for="(x, xIndex) in inspectList" :key="x.insType"> + <div style="color: #262626" :class="[xIndex === 0 ? '' : 'mt-2']">{{ x.insName }}</div> + <div class="box"> + <div v-for="y in x.items"> + <span>{{ y.itemName }}:</span> + <span>{{ y.itemValue }}</span> + <span class="ml-1">{{ y.unit }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="6" title="服药依从性" name="6"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">服药依从性</span> + <span class="text-end">{{ info.medicationComplianceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="7" title="药物不良反应" name="7"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">药物不良反应</span> + <span class="text-end">{{ info.drugsAdverseName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="8" title="低血糖反应" name="8"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">低血糖反应</span> + <span class="text-end">{{ info.glycopeniaReactionName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="9" title="此次随访分类" name="9"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">此次随访分类</span> + <span class="text-end">{{ info.visitTypeName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="10" title="目前诊断" name="10"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in info.diagnoseInfoList" :key="xIndex"> + <div style="color: #262626"> + {{ (store.getDict('CP00086').find(e => e.value === x.currentDiagnoseType)).name }} + </div> + <div class="box" > + <div v-if="x.currentDiagnoseType === 1"> + <span>高血压分级:</span> + <span>{{ x.diagnoseResultValue }}</span> + <span class="ml-4">高血压危险分层:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 2"> + <span>糖尿病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 3"> + <span>冠心病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 4"> + <span>缺血性脑卒中:</span> + <span>{{ x.diagnoseResultValue || '-' }}</span> + <span class="ml-4">出血性脑卒中:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 5"> + <span>慢阻肺:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 6"> + <span>慢性肾病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 7"> + <span>血脂异常:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div> + <span>纳入管理日期:</span> + <span>{{ x.inclusionManageDate }}</span> + </div> + <div v-for="(y, yIndex) in x.diagnoseItemList" :key="yIndex"> + <div> + <span>诊断名称:</span> + <span>{{ y.diagnosisResultName }}</span> + </div> + <div> + <span>诊断日期:</span> + <span>{{ y.diagnosisDate }}</span> + </div> + <div> + <span>诊断单位:</span> + <span>{{ y.diagnosisUnitName }}</span> + </div> + <div> + <span>诊断科室:</span> + <span>{{ y.diagnosisOfficeName }}</span> + </div> + <div> + <span>诊断医生:</span> + <span>{{ y.diagnosisUserName }}</span> + </div> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="11" title="用药情况" name="11"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">是否调整治疗方案</span> + <span class="text-end">{{ info.adjustTreatName }}</span> + </div> + </div> + <div v-if="info.adjustTreat === 1"> + <div style="color: #262626" class="mt-2">用药</div> + <div v-for="(item, index) in medicateCase" :key="index" class="box mt-2"> + <div> + <span>药物名称:</span> + <span>{{ item.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ item.dose }}</span> + <span>{{ store.getDictValue('CP00081', item.unit) }}</span> + </div> + <div> + <span>频次:</span> + <span>{{ store.getDictValue('CP00084', item.frequency) }}</span> + <span class="ml-4">用法:</span> + <span>{{ store.getDictValue('CP00083', item.usage) }}</span> + </div> + </div> + </div> + <div style="color: #262626" class="mt-2">胰岛素</div> + <div class="box"> + <div> + <span>胰岛素种类:</span> + <span>{{ info.insulinTypeName }}</span> + </div> + <div> + <span>用法:</span> + <span>{{ info.insulinUsageName }}</span> + </div> + <div> + <span>用量:</span> + <span v-for="(item, index) in insulinDosage" :key="index"> + <template v-if="item.checked"> + <span>{{ item.name }}</span> + <span class="mr-1 ml-1">{{ item.dosage }}</span> + <span>IU、</span> + </template> + </span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="12" title="转诊" name="12"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊原因</span> + <span class="text-end">{{ info.referralReason }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊机构</span> + <span class="text-end">{{ info.referralUnitName }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊科室</span> + <span class="text-end">{{ info.referralOfficeName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="13" title="现场随访照片" name="13"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + </van-collapse-item> + <van-collapse-item key="14" title="下次随访日期" name="14"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">下次随访日期</span> + <span class="text-end">{{ info.nextVisitDate }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="15" title="随访机构" name="15"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsOrg" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end">{{ info[item.key] }}</span> + </div> + </div> + </div> + </van-collapse-item> + </van-collapse> + </div> + </div> +</template> +<script> +import { fetchDataHandle } from '@/utils/common.js' +import { useStore } from '@/resident/store/index.js' +export default { + props: { + visitInfo: { + type: Object, + default: () => {} + } + }, + data() { + return { + info: {}, + store: useStore(), + // 辅助检查 + inspectList: [], + // 用药情况 + medicateCase: [], + // 胰岛素用量 + insulinDosage: [], + // 全部展开、收起 + collapseAll: false, + activeCollapse: [], + // 居民信息 + columnsBase: [ + { title: '姓名', key: 'residentName' }, + { title: '证件号码', key: 'idCard' }, + { title: '性别', key: 'genderName' }, + { title: '出生日期', key: 'dataBirth' }, + { title: '年龄', key: 'currentAge' }, + { title: '民族', key: 'nationalName' }, + { title: '本人电话', key: 'telephone' }, + { title: '现住址', key: 'presentCodeName' }, + { title: '详细地址', key: 'nowAddress' }, + { title: '户籍地址', key: 'registeredCodeName' }, + { title: '详细地址', key: 'permanentAddress' } + ], + // 体征 + columnsPhysical: [ + { title: '收缩压SBP', key: 'signSystolicPressure', unit: 'mmHg' }, + { title: '舒张压DBP', key: 'signDiastolicPressure', unit: 'mmHg' }, + { title: '身高', key: 'signHeight', unit: 'cm' }, + { title: '体重', key: 'signWeight', unit: 'kg' }, + { title: 'BMI', key: 'signBmi', unit: 'kg/m²' }, + { title: '腰围', key: 'signWaistline', unit: 'cm' }, + { title: '足背动脉搏动', key: 'signArteryPulsationName' }, + { title: '其他', key: 'signOther' } + ], + // 随访机构 + columnsOrg: [ + { title: '随访日期', key: 'visitDate' }, + { title: '随访单位', key: 'visitUnitName' }, + { title: '随访科室', key: 'visitOfficeName' }, + { title: '随访医生', key: 'visitDoctorName' }, + { title: '录入日期', key: 'createDate' }, + { title: '录入单位', key: 'createUnitName' }, + { title: '录入科室', key: 'createOfficeName' }, + { title: '录入医生', key: 'createDoctorName' }, + ], + columnsAuxiliary: [ + { title: '空腹静脉血糖值', key: 'emptyBloodGlucose', unit: 'mmol/L' }, + { title: '空腹胰岛素', key: 'emptyInsulin', unit: 'mU/L' }, + { title: '空腹C肽', key: 'emptyPeptide', unit: 'pmol/L' }, + { title: '餐后2小时胰岛素', key: 'afterInsulin', unit: 'mU/L' }, + { title: '餐后2小时C肽', key: 'afterPeptide', unit: 'pmol/L' } + ] + } + }, + computed: { + residentInfo() { + return this.info.residentsRecord || {} + } + }, + methods: { + dataHandle() { + // 字符串转数组 + const form = fetchDataHandle(this.visitInfo, { + auxiliaryExamination: 'strToArrNum' + }) + this.info = form + // 辅助检查处理 + let { auxiliaryExamination = [], inspectList = [], medicateCase = [], insulinDosage = [] } = form + let list = [] + auxiliaryExamination.forEach(item => { + const items = inspectList.filter(e => e.insType === item) + if (items.length > 0) { + list.push({ + insType: items[0].insType, + insName: items[0].insName, + items: [...items] + }) + } + }) + this.inspectList = list + // 用药情况处理 + this.medicateCase = JSON.parse(medicateCase) + // 胰岛素用量处理 + this.insulinDosage = JSON.parse(insulinDosage) + console.log(2, form) + }, + // 全部展开、收起 + toggleAll() { + if (this.collapseAll) { + this.activeCollapse = [] + } else { + let list = [] + for (let i = 1; i < 16; i++) { + list.push(i.toString()) + } + this.activeCollapse = list + } + this.collapseAll = !this.collapseAll + }, + // 折叠面板切换 + collapseChange(val) { + if (val.length === 15) { + this.collapseAll = true + } else { + this.collapseAll = false + } + } + }, + watch: { + visitInfo: { + handler() { + console.log(1, this.visitInfo) + this.dataHandle() + } + } + } +} +</script> +<style lang="less" scoped> +.cont-box { + background-color: #f9f9f9; + + .cont-inner { + background: linear-gradient(to bottom, #DFF5F4, #fff .6rem); + border-top-left-radius: .08rem; + border-top-right-radius: .08rem; + } +} + +.collapse-head { + .icon-down { + vertical-align: middle; + font-size: .12rem; + + .svg-icon { + transition: all .2s; + } + } + + .icon-down-expanded { + .svg-icon { + transform: rotate(-180deg); + } + } +} + +.list { + color: #262626; + .label { + min-width: 5em; + } +} +.box { + background: #F8FAFC; + padding: 8px; + color: #4D5665; + +} +</style> \ No newline at end of file diff --git a/src/residentWX/visit/detail/components/HypertensionDetail.vue b/src/residentWX/visit/detail/components/HypertensionDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..196d0031a6889ba0524c027c0445c821f91fb591 --- /dev/null +++ b/src/residentWX/visit/detail/components/HypertensionDetail.vue @@ -0,0 +1,547 @@ +<template> + <div class="p-3 grow cont-box"> + <div class="p-3 h-full cont-inner"> + <div class="flex justify-between collapse-head"> + <span class="text-16">全部内容</span> + <span @click="toggleAll"> + <span v-if="!collapseAll">展开全部</span> + <span v-else>收起全部</span> + <span :class="['ml-2 icon-down', { 'icon-down-expanded': collapseAll }]"> + <doc-icon type="doc-down" /> + </span> + </span> + </div> + + <van-collapse v-model="activeCollapse" ref="collapse" class="doc-collapse" @change="collapseChange"> + <van-collapse-item key="1" title="居民信息" name="1"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsBase" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span> + <span class="text-end" v-else> + <span>{{ residentInfo[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="2" title="症状" name="2"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">症状</span> + <span class="text-end"> + {{ info.symptomName || '-' }} + </span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="3" title="体征" name="3"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsPhysical" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end"> + <span>{{ info[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="4" title="生活方式指导" name="4"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div style="color: #262626">吸烟</div> + <div class="box"> + <div> + <span>是否正在吸烟:</span> + <span>{{ info.isSmokingName }}</span> + </div> + <div v-if="info.isSmoking === 1"> + <span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span> + <span>{{ info.startSmokeAge || '-' }}岁</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>您最近7天是否吸烟:</span> + <span>{{ info.lastSevenSmokeName }}</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>日吸烟量:</span> + <span>{{ info.daySmoking || '-' }}支</span> + <span class="ml-4">目标日吸烟量:</span> + <span>{{ info.goalDaySmoking || '-' }}支</span> + </div> + </div> + <div style="color: #262626" class="mt-2">饮酒</div> + <div class="box"> + <div> + <span>是否正在饮酒:</span> + <span>{{ info.isDrinkName }}</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>日饮酒量:</span> + <span>{{ info.dayDrink || '-' }}ml</span> + <span class="ml-4">目标日饮酒量:</span> + <span>{{ info.goalDayDrink || '-' }}ml</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>白酒:</span> + <span>{{ info.drinkLiquor || '-' }}ml/日</span> + <span class="ml-2">啤酒:</span> + <span>{{ info.drinkBeer || '-' }}ml/日</span> + <span class="ml-2">红酒:</span> + <span>{{ info.drinkRed || '-' }}ml/日</span> + <span class="ml-2">黄酒:</span> + <span>{{ info.drinkYellow || '-' }}ml/日</span> + <span class="ml-2">其他:</span> + <span>{{ info.drinkOther || '-' }}ml/日</span> + </div> + </div> + <div style="color: #262626" class="mt-2">运动</div> + <div class="box"> + <div> + <span>有无规律活动:</span> + <span>{{ info.regularExerciseName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>运动强度:</span> + <span>{{ info.exerciseStrengthName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>目前运动情况:</span> + <span>{{ info.nowExerciseWeek || '-' }}次/周、</span> + <span>{{ info.nowExerciseMinute || '-' }}分钟/次</span> + </div> + </div> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">摄盐情况(咸淡)</span> + <span class="text-end">{{ info.saltIntakeName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">心理调整</span> + <span class="text-end">{{ info.psychologicalRecoveryName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">遵医行为</span> + <span class="text-end">{{ info.doctorAdviceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="5" title="辅助检查" name="5"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in inspectList" :key="x.insType"> + <div style="color: #262626" :class="[xIndex === 0 ? '' : 'mt-2']">{{ x.insName }}</div> + <div class="box"> + <div v-for="y in x.items"> + <span>{{ y.itemName }}:</span> + <span>{{ y.itemValue }}</span> + <span class="ml-1">{{ y.unit }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="6" title="目前高血压用药及依从性" name="6"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="box"> + <div> + <span>您目前是否在服用降压药、降脂(如他汀类)或抗血小板(如阿司匹林)等心血管病相关药物:</span> + <span>{{ info.medicationComplianceName }}</span> + </div> + <div> + <span>药物名称:</span> + <span>{{ currentMedicateCase.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ currentMedicateCase.dose }}</span> + <span>{{ store.getDictValue('CP00081', currentMedicateCase.unit) }}</span> + + </div> + <div> + <span>用药频次:</span> + <span>{{ store.getDictValue('CP00084', currentMedicateCase.frequency) }}</span> + <span class="ml-4">用法:</span> + <span>{{ store.getDictValue('CP00083', currentMedicateCase.usage) }}</span> + </div> + <div> + <span>服药依从性:</span> + <span>{{ store.getDictValue('CP00148', currentMedicateCase.compliance) }}</span> + </div> + <div> + <span>不依从原因:</span> + <span>{{ info.noComplianceReasonName }}</span> + </div> + <div v-if="(info.noComplianceReason || []).includes(3)"> + <span>副作用原因:</span> + <span>{{ info.sideEffectReasonName }}</span> + </div> + </div> + <div v-for="(item, index) in addMedicateCase" :key="index" class="box mt-2"> + <div> + <span>药物名称:</span> + <span>{{ item.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ item.dose }}</span> + <span>{{ store.getDictValue('CP00081', item.unit) }}</span> + </div> + <div> + <span>用法:</span> + <span>{{ store.getDictValue('CP00083', item.usage) }}</span> + <span class="ml-4">频次:</span> + <span>{{ store.getDictValue('CP00084', item.frequency) }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="7" title="药物不良反应" name="7"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">药物不良反应</span> + <span class="text-end">{{ info.drugsAdverseName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="8" title="此次随访分类" name="8"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">此次随访分类</span> + <span class="text-end">{{ info.visitTypeName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="9" title="目前诊断" name="9"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in info.diagnoseInfoList" :key="xIndex"> + <div style="color: #262626"> + {{ (store.getDict('CP00086').find(e => e.value === x.currentDiagnoseType)).name }} + </div> + <div class="box" > + <div v-if="x.currentDiagnoseType === 1"> + <span>高血压分级:</span> + <span>{{ x.diagnoseResultValue }}</span> + <span class="ml-4">高血压危险分层:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 2"> + <span>糖尿病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 3"> + <span>冠心病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 4"> + <span>缺血性脑卒中:</span> + <span>{{ x.diagnoseResultValue || '-' }}</span> + <span class="ml-4">出血性脑卒中:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 5"> + <span>慢阻肺:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 6"> + <span>慢性肾病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 7"> + <span>血脂异常:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div> + <span>纳入管理日期:</span> + <span>{{ x.inclusionManageDate }}</span> + </div> + <div v-for="(y, yIndex) in x.diagnoseItemList" :key="yIndex"> + <div> + <span>诊断名称:</span> + <span>{{ y.diagnosisResultName }}</span> + </div> + <div> + <span>诊断日期:</span> + <span>{{ y.diagnosisDate }}</span> + </div> + <div> + <span>诊断单位:</span> + <span>{{ y.diagnosisUnitName }}</span> + </div> + <div> + <span>诊断科室:</span> + <span>{{ y.diagnosisOfficeName }}</span> + </div> + <div> + <span>诊断医生:</span> + <span>{{ y.diagnosisUserName }}</span> + </div> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="10" title="用药情况" name="10"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">本次就诊后的药物治疗方案:</span> + <span class="text-end">{{ info.adjustTreatName }}</span> + </div> + </div> + <div v-if="info.adjustTreat === 1" v-for="(item, index) in medicateCase" :key="index" class="box mt-2"> + <div> + <span>药物名称:</span> + <span>{{ item.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ item.dose }}</span> + <span>{{ store.getDictValue('CP00081', item.unit) }}</span> + </div> + <div> + <span>频次:</span> + <span>{{ store.getDictValue('CP00084', item.frequency) }}</span> + <span class="ml-4">用法:</span> + <span>{{ store.getDictValue('CP00083', item.usage) }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="11" title="转诊" name="11"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊原因</span> + <span class="text-end">{{ info.referralReason }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊机构</span> + <span class="text-end">{{ info.referralUnitName }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊科室</span> + <span class="text-end">{{ info.referralOfficeName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="12" title="现场随访照片" name="12"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + </van-collapse-item> + <van-collapse-item key="13" title="下次随访日期" name="13"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">下次随访日期</span> + <span class="text-end">{{ info.nextVisitDate }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="14" title="随访机构" name="14"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsOrg" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end">{{ info[item.key] }}</span> + </div> + </div> + </div> + </van-collapse-item> + </van-collapse> + </div> + </div> +</template> +<script> +import { fetchDataHandle } from '@/utils/common.js' +import { useStore } from '@/resident/store/index.js' +export default { + props: { + visitInfo: { + type: Object, + default: () => {} + } + }, + data() { + return { + info: {}, + store: useStore(), + // 辅助检查 + inspectList: [], + // 当前用药 + currentMedicateCase: {}, + addMedicateCase: [], + // 用药情况 + medicateCase: [], + // 全部展开、收起 + collapseAll: false, + activeCollapse: [], + // 居民信息 + columnsBase: [ + { title: '姓名', key: 'residentName' }, + { title: '证件号码', key: 'idCard' }, + { title: '性别', key: 'genderName' }, + { title: '出生日期', key: 'dataBirth' }, + { title: '年龄', key: 'currentAge' }, + { title: '民族', key: 'nationalName' }, + { title: '本人电话', key: 'telephone' }, + { title: '现住址', key: 'presentCodeName' }, + { title: '详细地址', key: 'nowAddress' }, + { title: '户籍地址', key: 'registeredCodeName' }, + { title: '详细地址', key: 'permanentAddress' } + ], + // 体征 + columnsPhysical: [ + { title: '收缩压SBP', key: 'signSystolicPressure', unit: 'mmHg' }, + { title: '舒张压DBP', key: 'signDiastolicPressure', unit: 'mmHg' }, + { title: '心率', key: 'signHeartRate', unit: '次/分' }, + { title: '身高', key: 'signHeight', unit: 'cm' }, + { title: '体重', key: 'signWeight', unit: 'kg' }, + { title: 'BMI', key: 'signBmi', unit: 'kg/m²' }, + { title: '腰围', key: 'signWaistline', unit: 'cm' }, + { title: '其他', key: 'signOther' } + ], + // 随访机构 + columnsOrg: [ + { title: '随访日期', key: 'visitDate' }, + { title: '随访单位', key: 'visitUnitName' }, + { title: '随访科室', key: 'visitOfficeName' }, + { title: '随访医生', key: 'visitDoctorName' }, + { title: '录入日期', key: 'createDate' }, + { title: '录入单位', key: 'createUnitName' }, + { title: '录入科室', key: 'createOfficeName' }, + { title: '录入医生', key: 'createDoctorName' }, + ] + } + }, + computed: { + residentInfo() { + return this.info.residentsRecord || {} + } + }, + methods: { + dataHandle() { + // 字符串转数组 + const form = fetchDataHandle(this.visitInfo, { + auxiliaryExamination: 'strToArrNum' + }) + this.info = form + // 辅助检查处理 + let { auxiliaryExamination = [], inspectList = [], currentMedicateCase = {}, addMedicateCase = [], medicateCase = [], } = form + let list = [] + auxiliaryExamination.forEach(item => { + const items = inspectList.filter(e => e.insType === item) + if (items.length > 0) { + list.push({ + insType: items[0].insType, + insName: items[0].insName, + items: [...items] + }) + } + }) + this.inspectList = list + // 当前用药处理 + this.currentMedicateCase = JSON.parse(currentMedicateCase) + this.addMedicateCase = JSON.parse(addMedicateCase) + // 用药情况处理 + this.medicateCase = JSON.parse(medicateCase) + console.log(2, form) + }, + // 全部展开、收起 + toggleAll() { + if (this.collapseAll) { + this.activeCollapse = [] + } else { + let list = [] + for (let i = 1; i < 15; i++) { + list.push(i.toString()) + } + this.activeCollapse = list + } + this.collapseAll = !this.collapseAll + }, + // 折叠面板切换 + collapseChange(val) { + if (val.length === 14) { + this.collapseAll = true + } else { + this.collapseAll = false + } + } + }, + watch: { + visitInfo: { + handler() { + console.log(1, this.visitInfo) + this.dataHandle() + } + } + } +} +</script> +<style lang="less" scoped> +.cont-box { + background-color: #f9f9f9; + + .cont-inner { + background: linear-gradient(to bottom, #DFF5F4, #fff .6rem); + border-top-left-radius: .08rem; + border-top-right-radius: .08rem; + } +} + +.collapse-head { + .icon-down { + vertical-align: middle; + font-size: .12rem; + + .svg-icon { + transition: all .2s; + } + } + + .icon-down-expanded { + .svg-icon { + transform: rotate(-180deg); + } + } +} + +.list { + color: #262626; + .label { + min-width: 5em; + } +} +.box { + background: #F8FAFC; + padding: 8px; + color: #4D5665; + +} +</style> \ No newline at end of file diff --git a/src/residentWX/visit/detail/components/HypertensionDetailV2.vue b/src/residentWX/visit/detail/components/HypertensionDetailV2.vue new file mode 100644 index 0000000000000000000000000000000000000000..0755252998fbcbf850cdea80df7097aba1d6300f --- /dev/null +++ b/src/residentWX/visit/detail/components/HypertensionDetailV2.vue @@ -0,0 +1,620 @@ +<template> + <div class="flex flex-col" style="height: 100vh"> + <div class="p-3 text-black text-center shrink-0 doc-nav-bar"> + <span @click="onBack" class="text-12 back-bt"> + <doc-icon type="doc-left2" /> + </span> + <span>随访详情</span> + </div> + <div class="px-4 py-3 flex shrink-0 base-info"> + <div class="flex w-full"> + <img src="@/assets/image/residentWX/avatar.png" alt="" class="shrink-0" style="width: .56rem; height: .56rem"> + <div class="grow flex flex-col justify-between pl-3"> + <div class="flex justify-between"> + <span class="name">{{ residentInfo.residentName }}</span> + </div> + <div class="top-label"> + <div class="mt-3 flex"> + <!-- <div> + <span>随访方式:</span> + <span class="color-b">{{ info.visitWayName }}</span> + </div> --> + <div> + <span>随访日期:</span> + <span class="color-b">{{ info.visitDate }}</span> + </div> + <div class="ml-2"> + <span>病情状态:</span> + <span class="color-b">{{ info.visitTypeName }}</span> + </div> + </div> + <div> + <span>下次随访日期:</span> + <span class="color-b">{{ info.nextVisitDate }}</span> + </div> + </div> + </div> + </div> + </div> + <div class="p-3 grow cont-box"> + <div class="p-3 h-full cont-inner"> + <div class="flex justify-between collapse-head"> + <span class="text-16">全部内容</span> + <span @click="toggleAll"> + <span v-if="!collapseAll">展开全部</span> + <span v-else>收起全部</span> + <span :class="['ml-2 icon-down', { 'icon-down-expanded': collapseAll }]"> + <doc-icon type="doc-down" /> + </span> + </span> + </div> + + <van-collapse v-model="activeCollapse" ref="collapse" class="doc-collapse" @change="collapseChange"> + <van-collapse-item key="1" title="居民信息" name="1"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsBase" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span> + <span class="text-end" v-else> + <span>{{ residentInfo[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="2" title="症状" name="2"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">症状</span> + <span class="text-end"> + {{ info.symptomName || '-' }} + </span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="3" title="体征" name="3"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsPhysical" :key="item.key"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end"> + <span>{{ info[item.key] || '-' }}</span> + <span v-if="item.unit" class="ml-1">{{ item.unit }}</span> + </span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="4" title="生活方式" name="4"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div style="color: #262626">吸烟</div> + <div class="box"> + <div> + <span>是否正在吸烟:</span> + <span>{{ info.isSmokingName }}</span> + </div> + <div v-if="info.isSmoking === 1"> + <span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span> + <span>{{ info.startSmokeAge || '-' }}岁</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>您最近7天是否吸烟:</span> + <span>{{ info.lastSevenSmokeName }}</span> + </div> + <div v-if="info.isSmoking === 1 || info.isSmoking === 2"> + <span>日吸烟量:</span> + <span>{{ info.daySmoking || '-' }}支</span> + <span class="ml-4">目标日吸烟量:</span> + <span>{{ info.goalDaySmoking || '-' }}支</span> + </div> + </div> + <div style="color: #262626" class="mt-2">饮酒</div> + <div class="box"> + <div> + <span>是否正在饮酒:</span> + <span>{{ info.isDrinkName }}</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>日饮酒量:</span> + <span>{{ info.dayDrink || '-' }}ml</span> + <span class="ml-4">目标日饮酒量:</span> + <span>{{ info.goalDayDrink || '-' }}ml</span> + </div> + <div v-if="info.isDrink === 1 || info.isDrink === 2"> + <span>白酒:</span> + <span>{{ info.drinkLiquor || '-' }}ml/日</span> + <span class="ml-2">啤酒:</span> + <span>{{ info.drinkBeer || '-' }}ml/日</span> + <span class="ml-2">红酒:</span> + <span>{{ info.drinkRed || '-' }}ml/日</span> + <span class="ml-2">黄酒:</span> + <span>{{ info.drinkYellow || '-' }}ml/日</span> + <span class="ml-2">其他:</span> + <span>{{ info.drinkOther || '-' }}ml/日</span> + </div> + </div> + <div style="color: #262626" class="mt-2">运动</div> + <div class="box"> + <div> + <span>有无规律活动:</span> + <span>{{ info.regularExerciseName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>运动强度:</span> + <span>{{ info.exerciseStrengthName }}</span> + </div> + <div v-if="info.regularExercise === 1"> + <span>目前运动情况:</span> + <span>{{ info.nowExerciseWeek || '-' }}次/周、</span> + <span>{{ info.nowExerciseMinute || '-' }}分钟/次</span> + </div> + </div> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">摄盐情况(咸淡)</span> + <span class="text-end">{{ info.saltIntakeName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">心理调整</span> + <span class="text-end">{{ info.psychologicalRecoveryName || '-' }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">遵医行为</span> + <span class="text-end">{{ info.doctorAdviceName || '-' }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="5" title="辅助检查" name="5"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in inspectList" :key="x.insType"> + <div style="color: #262626" :class="[xIndex === 0 ? '' : 'mt-2']">{{ x.insName }}</div> + <div class="box"> + <div v-for="y in x.items"> + <span>{{ y.itemName }}:</span> + <span>{{ y.itemValue }}</span> + <span class="ml-1">{{ y.unit }}</span> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="6" title="目前高血压用药及依从性" name="6"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="box"> + <div> + <span>您目前是否在服用降压药、降脂(如他汀类)或抗血小板(如阿司匹林)等心血管病相关药物:</span> + <span>{{ info.medicationComplianceName }}</span> + </div> + <div> + <span>药物名称:</span> + <span>{{ currentMedicateCase.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ currentMedicateCase.dose }}</span> + <span>{{ store.getDictValue('CP00081', currentMedicateCase.unit) }}</span> + + </div> + <div> + <span>用药频次:</span> + <span>{{ store.getDictValue('CP00084', currentMedicateCase.frequency) }}</span> + <span class="ml-4">用法:</span> + <span>{{ store.getDictValue('CP00083', currentMedicateCase.usage) }}</span> + </div> + <div> + <span>服药依从性:</span> + <span>{{ store.getDictValue('CP00148', currentMedicateCase.compliance) }}</span> + </div> + <div> + <span>不依从原因:</span> + <span>{{ info.noComplianceReasonName }}</span> + </div> + <div v-if="(info.noComplianceReason || []).includes(3)"> + <span>副作用原因:</span> + <span>{{ info.sideEffectReasonName }}</span> + </div> + </div> + <div v-for="(item, index) in addMedicateCase" :key="index" class="box mt-2"> + <div> + <span>药物名称:</span> + <span>{{ item.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ item.dose }}</span> + <span>{{ store.getDictValue('CP00081', item.unit) }}</span> + </div> + <div> + <span>用法:</span> + <span>{{ store.getDictValue('CP00083', item.usage) }}</span> + <span class="ml-4">频次:</span> + <span>{{ store.getDictValue('CP00084', item.frequency) }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="7" title="药物不良反应" name="7"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">药物不良反应</span> + <span class="text-end">{{ info.drugsAdverseName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="8" title="此次随访分类" name="8"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">此次随访分类</span> + <span class="text-end">{{ info.visitTypeName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="9" title="目前诊断" name="9"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div v-for="(x, xIndex) in info.diagnoseInfoList" :key="xIndex"> + <div style="color: #262626"> + {{ (store.getDict('CP00086').find(e => e.value === x.currentDiagnoseType)).name }} + </div> + <div class="box" > + <div v-if="x.currentDiagnoseType === 1"> + <span>高血压分级:</span> + <span>{{ x.diagnoseResultValue }}</span> + <span class="ml-4">高血压危险分层:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 2"> + <span>糖尿病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 3"> + <span>冠心病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 4"> + <span>缺血性脑卒中:</span> + <span>{{ x.diagnoseResultValue || '-' }}</span> + <span class="ml-4">出血性脑卒中:</span> + <span>{{ x.diagnoseLevelValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 5"> + <span>慢阻肺:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 6"> + <span>慢性肾病:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div v-if="x.currentDiagnoseType === 7"> + <span>血脂异常:</span> + <span>{{ x.diagnoseResultValue }}</span> + </div> + <div> + <span>纳入管理日期:</span> + <span>{{ x.inclusionManageDate }}</span> + </div> + <div v-for="(y, yIndex) in x.diagnoseItemList" :key="yIndex"> + <div> + <span>诊断名称:</span> + <span>{{ y.diagnosisResultName }}</span> + </div> + <div> + <span>诊断日期:</span> + <span>{{ y.diagnosisDate }}</span> + </div> + <div> + <span>诊断单位:</span> + <span>{{ y.diagnosisUnitName }}</span> + </div> + <div> + <span>诊断科室:</span> + <span>{{ y.diagnosisOfficeName }}</span> + </div> + <div> + <span>诊断医生:</span> + <span>{{ y.diagnosisUserName }}</span> + </div> + </div> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="10" title="用药情况" name="10"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">本次就诊后的药物治疗方案:</span> + <span class="text-end">{{ info.adjustTreatName }}</span> + </div> + </div> + <div v-if="info.adjustTreat === 1" v-for="(item, index) in medicateCase" :key="index" class="box mt-2"> + <div> + <span>药物名称:</span> + <span>{{ item.drugName }}</span> + <span class="ml-4">剂量:</span> + <span class="mr-1">{{ item.dose }}</span> + <span>{{ store.getDictValue('CP00081', item.unit) }}</span> + </div> + <div> + <span>频次:</span> + <span>{{ store.getDictValue('CP00084', item.frequency) }}</span> + <span class="ml-4">用法:</span> + <span>{{ store.getDictValue('CP00083', item.usage) }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="11" title="转诊" name="11"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊原因</span> + <span class="text-end">{{ info.referralReason }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊机构</span> + <span class="text-end">{{ info.referralUnitName }}</span> + </div> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">转诊科室</span> + <span class="text-end">{{ info.referralOfficeName }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="12" title="现场随访照片" name="12"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + </van-collapse-item> + <van-collapse-item key="13" title="下次随访日期" name="13"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">下次随访日期</span> + <span class="text-end">{{ info.nextVisitDate }}</span> + </div> + </div> + </van-collapse-item> + <van-collapse-item key="14" title="随访机构" name="14"> + <template #right-icon> + <doc-icon type="doc-down" /> + </template> + <div class="list"> + <div v-for="item in columnsOrg" :key="item.key" class="flex justify-between py-1 border-bottom item"> + <span class="shrink-0 mr-2 label">{{ item.title }}</span> + <span class="text-end">{{ info[item.key] }}</span> + </div> + </div> + </van-collapse-item> + </van-collapse> + </div> + </div> + </div> +</template> +<script> +import { querySeparateFUDetail } from '@/api/residentWX/visit.js' +import { fetchDataHandle } from '@/utils/common.js' +import { useStore } from '@/resident/store/index.js' +export default { + data() { + return { + info: {}, + // 全部展开、收起 + collapseAll: false, + activeCollapse: [], + columnsBase: [ + { title: '姓名', key: 'residentName' }, + { title: '证件号码', key: 'idCard' }, + { title: '性别', key: 'genderName' }, + { title: '出生日期', key: 'dataBirth' }, + { title: '年龄', key: 'currentAge' }, + { title: '民族', key: 'nationalName' }, + { title: '本人电话', key: 'telephone' }, + { title: '现住址', key: 'presentCodeName' }, + { title: '详细地址', key: 'nowAddress' }, + { title: '户籍地址', key: 'registeredCodeName' }, + { title: '详细地址', key: 'permanentAddress' } + ], + columnsPhysical: [ + { title: '收缩压SBP', key: 'signSystolicPressure', unit: 'mmHg' }, + { title: '舒张压DBP', key: 'signDiastolicPressure', unit: 'mmHg' }, + { title: '心率', key: 'signHeartRate', unit: '次/分' }, + { title: '身高', key: 'signHeight', unit: 'cm' }, + { title: '体重', key: 'signWeight', unit: 'kg' }, + { title: 'BMI', key: 'signBmi', unit: 'kg/m²' }, + { title: '腰围', key: 'signWaistline', unit: 'cm' }, + { title: '其他', key: 'signOther' } + ], + columnsOrg: [ + { title: '随访日期', key: 'visitDate' }, + { title: '随访单位', key: 'visitUnitName' }, + { title: '随访科室', key: 'visitOfficeName' }, + { title: '随访医生', key: 'visitDoctorName' }, + { title: '录入日期', key: 'createDate' }, + { title: '录入单位', key: 'createUnitName' }, + { title: '录入科室', key: 'createOfficeName' }, + { title: '录入医生', key: 'createDoctorName' }, + ], + collapseList: [ + // { title: "居民信息", name: "1", columns: [], info: {} }, + // { title: "随访详情", name: "2", columns: [], info: {} }, + // { title: "随访机构", name: "3", columns: [], info: {} } + ], + // 辅助检查 + inspectList: [], + // 当前用药 + currentMedicateCase: {}, + addMedicateCase: [], + // 用药情况 + medicateCase: [], + store: useStore() + } + }, + computed: { + routerDetail() { + return this.$route.params + }, + residentInfo() { + return this.info.residentsRecord || {} + } + }, + created() { + this.load() + }, + methods: { + load() { + const { relationId, diseaseType } = this.routerDetail + if (!relationId) { + showToast('未获取到信息') + return + } + let params = { + id: relationId, + diseaseType, + } + querySeparateFUDetail(params).then(res => { + let result = res.data || {} + // 字符串转数组 + const form = fetchDataHandle(result, { + auxiliaryExamination: 'strToArrNum' + }) + this.info = form + // 辅助检查处理 + let { auxiliaryExamination = [], inspectList = [], currentMedicateCase = {}, addMedicateCase = [], medicateCase = [], } = form + let list = [] + auxiliaryExamination.forEach(item => { + const items = inspectList.filter(e => e.insType === item) + if (items.length > 0) { + list.push({ + insType: items[0].insType, + insName: items[0].insName, + items: [...items] + }) + } + }) + this.inspectList = list + // 当前用药处理 + this.currentMedicateCase = JSON.parse(currentMedicateCase) + this.addMedicateCase = JSON.parse(addMedicateCase) + // 用药情况处理 + this.medicateCase = JSON.parse(medicateCase) + }) + }, + // 折叠面板切换 + collapseChange(val) { + console.log(val) + if (val.length === 14) { + this.collapseAll = true + } else { + this.collapseAll = false + } + // if (val && val.length === this.collapseList.length) { + // this.collapseAll = true + // } else { + // this.collapseAll = false + // } + }, + // 全部展开、收起 + toggleAll() { + if (this.collapseAll) { + this.activeCollapse = [] + } else { + let list = [] + for (let i = 1; i < 15; i++) { + list.push(i.toString()) + } + this.activeCollapse = list + } + this.collapseAll = !this.collapseAll + }, + onBack() { + this.$router.back() + } + } +} +</script> +<style lang="less" scoped> +@import url('../../utils/common.less'); + +.base-info { + background: linear-gradient(to bottom, #DFF5F4, #fff 50%); + color: #8c8c8c; + + .name { + font-weight: 600; + color: #000; + font-size: 18px; + } + + .top-label { + font-size: 13px; + line-height: 22px; + } + + .color-b { + color: #262626; + } +} + +.cont-box { + background-color: #f9f9f9; + + .cont-inner { + background: linear-gradient(to bottom, #DFF5F4, #fff .6rem); + border-top-left-radius: .08rem; + border-top-right-radius: .08rem; + } +} + +.collapse-head { + .icon-down { + vertical-align: middle; + font-size: .12rem; + + .svg-icon { + transition: all .2s; + } + } + + .icon-down-expanded { + .svg-icon { + transform: rotate(-180deg); + } + } +} + +.list { + color: #262626; + .label { + min-width: 5em; + } +} +.box { + background: #F8FAFC; + padding: 8px; + color: #4D5665; + +} +</style> \ No newline at end of file