<!--通用随访详情--> <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 class='ml-4'>随访日期:<span class='color-b'>{{ info.visitDate }}</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'> <span>{{ info.visitSituationName || '-' }}</span> </span> </div> <div class='flex justify-between py-1 border-bottom item' v-if='info.visitSituation == 2'> <span class='shrink-0 mr-2 label'>失访原因</span> <span class='text-end'> <span v-if='info.lossReason != 9'>{{ info.lossReasonName || '-' }}</span> <span v-if='info.lossReason == 9'>{{ info.lossReasonOther || '-' }}</span> </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 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'> <span>{{ info[item.key] || '-' }}</span> </span> </div> </div> </div> </van-collapse-item> </van-collapse> </div> </div> </div> </template> <script> import { showToast } from 'vant' import { fetchCurrencyById } from '@/api/doctor/generalFU' import { queryGeneralFUDetail } from '@/api/residentWX/visit' export default { name: 'CurrencyFUDetail.vue', data() { return { activeCollapse: [], collapseList: [ { title: '居民信息', name: '1', columns: [], info: {} }, { title: '随访详情', name: '2', columns: [], info: {} }, { title: '随访机构', name: '3', columns: [], info: {} } ], // 全部展开、收起 collapseAll: false, info: {}, 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' } ], columnsDetail: [ { title: '年龄', key: 'currentAge', unit: '岁' }, { title: '既往史', key: 'medicalHistoryName' }, { title: '身高', key: 'height', unit: 'cm' }, { title: '体重', key: 'weight', unit: 'kg' }, { title: 'BMI', key: 'bmi', unit: 'kg/m²' }, { title: '腰围', key: 'waistline', unit: 'cm' }, { title: '是否吸烟', key: 'isSmokingName' }, { title: '家族史', key: 'familyHistoryName' }, { title: '血压值', key: 'pressure' }, { title: '空腹血糖', key: 'fastingGlucose', unit: 'mmol/L' }, { title: '低密度脂蛋白胆固醇', key: 'ldlCholesterin', unit: 'mmol/L' }, { title: '血清总胆固醇', key: 'serumCholesterin', unit: 'mmol/L' }, { title: '高密度脂蛋白胆固醇', key: 'hdlCholesterin', unit: 'mmol/L' }, { title: '运动', key: 'exerciseIntensityName' }, { title: '慢病高危评估结果', key: 'screenResultName' } ], columnsOrg: [ { title: '随访单位', key: 'visitUnitName' }, { title: '随访科室', key: 'visitOfficeName' }, { title: '随访医生', key: 'visitDoctorName' } ] } }, computed: { routerDetail() { return this.$route.params }, residentInfo() { return this.info.residentsRecord || {} } }, created() { this.load() }, methods: { async load() { if (!this.routerDetail.relationId) { showToast('未获取到信息') return } let par = { id: this.routerDetail.relationId } queryGeneralFUDetail(par).then(res => { let result = res.data || {} this.info = result }).finally(() => { }) }, // 折叠面板切换 collapseChange(val) { if (val && val.length === this.collapseList.length) { this.collapseAll = true } else { this.collapseAll = false } }, // 全部展开、收起 toggleAll() { if (this.collapseAll) { this.activeCollapse = [] } else { this.activeCollapse = this.collapseList.map(e => e.name) } 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); } } } table { text-align: left; border-bottom: 1px solid var(--van-cell-border-color); > tr { > td { padding-left: 14px; padding-bottom: 12px; &:first-child { text-align: right; padding-left: 0; } } } } .list { .label { min-width: 5em; } } </style>