Commit 3735a1aa authored by songrui's avatar songrui

Merge branch 'chronic-dev' of http://gitlab.yiboshi.com/nightkis1995/frontend-h5 into chronic-dev

parents 245b5809 905f1a49
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<link rel='icon' href='<%= BASE_URL %>favicon.ico'> <link rel='icon' href='<%= BASE_URL %>favicon.ico'>
<title><%= htmlWebpackPlugin.options.title %></title> <title><%= htmlWebpackPlugin.options.title %></title>
<!-- 3.3.4/vconsole.min.js --> <!-- 3.3.4/vconsole.min.js -->
<!-- <script src='https://beta-copd-img.yiboshi.com/20241106/1730860078278931285.js'></script>--> <script src='https://beta-copd-img.yiboshi.com/20241106/1730860078278931285.js'></script>
</head> </head>
<body> <body>
<noscript> <noscript>
...@@ -79,7 +79,6 @@ ...@@ -79,7 +79,6 @@
<!-- built files will be auto injected --> <!-- built files will be auto injected -->
</body> </body>
<script> <script>
// var vConsole =new VConsole(); var vConsole =new VConsole();
// console.log('Hello world');
</script> </script>
</html> </html>
...@@ -11,4 +11,26 @@ export function addDiabetesForm(params) { ...@@ -11,4 +11,26 @@ export function addDiabetesForm(params) {
// 新增冠心病随访 // 新增冠心病随访
export function addCoronaryHeartDiseaseForm(params) { export function addCoronaryHeartDiseaseForm(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-coronary/save`, body: params, loading: true }) return fetchBase({ url: `/chronic-admin/v1/chronic-visit-coronary/save`, body: params, loading: true })
}
// 新增脑卒中随访
export function addStrokeForm(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-stroke/save`, body: params, loading: true })
}
// 新增慢阻肺随访
export function addCopdForm(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-pulmonary/save`, body: params, loading: true })
}
// 新增慢性肾病随访
export function addChronicKidneyDiseaseForm(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-nephrosis/save`, body: params, loading: true })
}
// 新增血脂异常随访
export function addDyslipidemiaForm(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-dyslipemia/save`, body: params, loading: true })
}
// 查询专病随访详情
export function getSeparateFUDetail(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-record/specialized-detail`, body: params, loading: true })
} }
\ No newline at end of file
<template> <template>
<div class="h-full iframe-page"> <div class='h-full iframe-page'>
<iframe :src="iframeSrc" style="border: 0;width: 100%;height: 99%" :key="iframeSrc" v-if="iframeSrc" allowFullscreen> <div class='p-3 text-black text-center shrink-0 doc-nav-bar'>
</iframe> <span @click='onBack' class='text-12 back-bt'>
<div v-else/> <doc-icon type='doc-left2' />
</div> </span>
<span style='min-height: .16rem;display: inline-block'>{{ pageTitle }}</span>
</div>
<iframe :src='iframeSrc' style='border: 0;width: 100%;height: calc(99% - 50px)' :key='iframeSrc' v-if='iframeSrc'
allowFullscreen>
</iframe>
<div v-else />
</div>
</template> </template>
<script> <script>
// import {getCateInfoByMenuId} from "@/views/statScreen/config"; // import {getCateInfoByMenuId} from "@/views/statScreen/config";
export default { export default {
props: { props: {
src: String src: String,
}, pageTitle: String
data() { },
return { data() {
iframeSrc: '' return {
} iframeSrc: ''
}, }
// computed:{ },
// stat(){ /* computed: {
// return this.$route.params.stat pageTitle() {
// } return this.$route.query.pageTitle || ''
// }, }
beforeUnmount() { },*/
this.iframeSrc = '' beforeUnmount() {
}, this.iframeSrc = ''
watch: {
src: {
handler() {
this.load()
},
immediate: true
}
},
methods: {
load() {
// let menuList = this.$store.state.menu || []
// let rou = this.$route.fullPath
// let result = menuList.filter(item => item.frontActionUrl == rou)[0]
// let menuId = result.id
// let lobId = result.lobId
// if (lobId && lobId!='0'){
// getCateInfoByMenuId(menuId).then(res => {
// this.openIframe(res.data.treeCode, menuId);
// });
// }else {
this.iframeSrc = `${this.src}`
// }
}, },
openIframe(treeCode, menuId) { watch: {
let res = '' src: {
res = `${this.src}${this.src?.includes('?') ? '&': '?'}source=MB&menuId=${menuId}` handler() {
if (treeCode) { debugger
res = `${this.src}${this.src?.includes('?') ? '&': '?'}treeCode=${treeCode}&unitTreeCode=${treeCode}&source=MB&menuId=${menuId}` this.load()
} },
this.iframeSrc = res immediate: true
}
},
methods: {
load() {
// let menuList = this.$store.state.menu || []
// let rou = this.$route.fullPath
// let result = menuList.filter(item => item.frontActionUrl == rou)[0]
// let menuId = result.id
// let lobId = result.lobId
// if (lobId && lobId!='0'){
// getCateInfoByMenuId(menuId).then(res => {
// this.openIframe(res.data.treeCode, menuId);
// });
// }else {
this.iframeSrc = `${this.src}`
// }
},
openIframe(treeCode, menuId) {
let res = ''
res = `${this.src}${this.src?.includes('?') ? '&' : '?'}source=MB&menuId=${menuId}`
if (treeCode) {
res = `${this.src}${this.src?.includes('?') ? '&' : '?'}treeCode=${treeCode}&unitTreeCode=${treeCode}&source=MB&menuId=${menuId}`
}
this.iframeSrc = res
},
onBack() {
this.$router.back()
}
} }
}
} }
</script> </script>
<style lang="less" scoped> <style lang='less' scoped>
// 顶部导航栏
.doc-nav-bar {
position: relative;
border-bottom: 1px solid #3C3C435C;
font-size: 18px;
font-weight: 600;
.back-bt {
position: absolute;
left: .16rem;
top: 50%;
transform: translateY(-50%);
}
}
</style> </style>
...@@ -10,23 +10,23 @@ ...@@ -10,23 +10,23 @@
<!-- <HisDetail :info="detailInfo" v-else-if="showHis"></HisDetail>--> <!-- <HisDetail :info="detailInfo" v-else-if="showHis"></HisDetail>-->
<!-- 报卡随访详情 --> <!-- 报卡随访详情 -->
<CrsVisitDetail :relationUuid="detailInfo.relationUuid" v-else-if="showCrs"></CrsVisitDetail> <CrsVisitDetail :relationUuid="detailInfo.relationUuid" v-else-if="showCrs"></CrsVisitDetail>
<!-- 专病随访详情 -->
<SeparateFUDetail :relationId="detailInfo.relationId" v-else-if="showFU"></SeparateFUDetail>
</div> </div>
</template> </template>
<script> <script>
import { getVisitManageVByUuId } from '@/api/doctor/generalFU' import { getVisitManageVByUuId } from '@/api/doctor/generalFU'
// import GwDetail from '@/doctor/followUp/detail/components/GwDetail'
import CrsVisitDetail from '@/doctor/followUp/detail/components/CrsVisitDetail' import CrsVisitDetail from '@/doctor/followUp/detail/components/CrsVisitDetail'
import CurrencyFUDetail from '@/doctor/followUp/generalFU/detail/Detail' import CurrencyFUDetail from '@/doctor/followUp/generalFU/detail/Detail'
import IframePage from '@/components/iframePage/IframePage'
// 专病随访
import SeparateFUDetail from '@/doctor/followUp/separateFU/detail/Index.vue'
export default { export default {
name: 'FollowUpDetail', name: 'FollowUpDetail',
components: { CurrencyFUDetail, CrsVisitDetail }, components: { IframePage, CurrencyFUDetail, CrsVisitDetail, SeparateFUDetail },
props: {
// id: [String, Number],
// residentId: [String, Number],
// diseaseType: [String, Number]
},
data() { data() {
return { return {
detailInfo: {}, detailInfo: {},
...@@ -64,7 +64,7 @@ export default { ...@@ -64,7 +64,7 @@ export default {
getVisitManageVByUuId(par).then(res => { getVisitManageVByUuId(par).then(res => {
let record = res.data let record = res.data
this.detailInfo = record this.detailInfo = record
this.PhlIsShow(record) // this.PhlIsShow(record)
this.showFU = this.FUIsShow(record) this.showFU = this.FUIsShow(record)
this.showCommon = this.GAUIsShow(record) this.showCommon = this.GAUIsShow(record)
this.showHis = this.HisIsShow(record) this.showHis = this.HisIsShow(record)
...@@ -103,19 +103,17 @@ export default { ...@@ -103,19 +103,17 @@ export default {
} }
return res return res
}, },
//判断是否显示报卡随访 //判断是否显示公卫随访
PhlIsShow(record) { PhlIsShow(record) {
// let res = false
if (record.source == 4) { if (record.source == 4) {
// res = true
this.$router.push({ this.$router.push({
path: `/systemIframe/doctorGWDetail`, path: `/systemIframe/doctorGWDetail`,
query: { query: {
src: `https://www.baidu.com/` src: `https://www.baidu.com/`,
pageTitle: `公卫详情`
} }
}) })
} }
// return res
} }
} }
} }
......
...@@ -144,7 +144,6 @@ ...@@ -144,7 +144,6 @@
<DocImageUpload <DocImageUpload
description='支持上传jpg、png、jpeg文件,大小请在10M以内' description='支持上传jpg、png、jpeg文件,大小请在10M以内'
lengthMessage='抱歉,最多可上传6个文件。' lengthMessage='抱歉,最多可上传6个文件。'
:imageData='[]'
@change='(ids, option) => form.uploadVisitRecord = ids' @change='(ids, option) => form.uploadVisitRecord = ids'
:maxLength='6' :maxLength='6'
class='mt-2' class='mt-2'
...@@ -156,7 +155,6 @@ ...@@ -156,7 +155,6 @@
<DocImageUpload <DocImageUpload
description='支持上传jpg、png、jpeg文件,大小请在10M以内' description='支持上传jpg、png、jpeg文件,大小请在10M以内'
lengthMessage='抱歉,最多可上传6个文件。' lengthMessage='抱歉,最多可上传6个文件。'
:imageData='[]'
@change='(ids, option) => form.sceneVisitImage = ids' @change='(ids, option) => form.sceneVisitImage = ids'
:maxLength='6' :maxLength='6'
class='mt-2' class='mt-2'
...@@ -368,6 +366,7 @@ export default { ...@@ -368,6 +366,7 @@ export default {
this.form.screenTime = dayjs(selectedValues).format('YYYY-MM-DD HH:00:00') this.form.screenTime = dayjs(selectedValues).format('YYYY-MM-DD HH:00:00')
this.startTime = dayjs(selectedValues).format('YYYY-MM-DD HH:00:00') this.startTime = dayjs(selectedValues).format('YYYY-MM-DD HH:00:00')
this.showTime1 = false this.showTime1 = false
console.log(this.form)
}, },
toShowTem(val) { toShowTem(val) {
this.citeInfo = val this.citeInfo = val
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
</van-popup> </van-popup>
</div> </div>
<div v-if='form.contentSelectName' class='mt-2'> <div class='mt-2'>
<van-button type='primary' plain class='w-full' @click='choiceTel' size='small'>选择内容</van-button> <van-button type='primary' plain class='w-full' @click='choiceTel' size='small'>选择内容</van-button>
</div> </div>
......
...@@ -59,6 +59,7 @@ import { ...@@ -59,6 +59,7 @@ import {
import GeneralFUForm from '@/doctor/followUp/generalFU/form/GeneralFUForm' import GeneralFUForm from '@/doctor/followUp/generalFU/form/GeneralFUForm'
import CommonBottom from '@/doctor/followUp/generalFU/form/CommonBottom' import CommonBottom from '@/doctor/followUp/generalFU/form/CommonBottom'
import { useStore } from '@/doctor/store' import { useStore } from '@/doctor/store'
const getModeEnum = (patientInfo = {}) => { const getModeEnum = (patientInfo = {}) => {
return { return {
mode1: [ mode1: [
...@@ -166,7 +167,7 @@ export default { ...@@ -166,7 +167,7 @@ export default {
} }
} else { } else {
const res = await getChronicResidentsId(this.routerDetail.residentInfoId) const res = await getChronicResidentsId(this.routerDetail.residentInfoId)
const weixinInfo = await getResidentWX({residentInfoId: this.routerDetail.residentInfoId}) const weixinInfo = await getResidentWX({ residentInfoId: this.routerDetail.residentInfoId })
const { const {
id, id,
createDate, createDate,
......
<template>
<div class="flex flex-col" style="height: 100vh">
<DocNavBar title="专病随访详情"></DocNavBar>
<HypertensionDetail v-if="diseaseType === '1'" :visitInfo="info"></HypertensionDetail>
<DiabetesDetail v-if="diseaseType === '2'" :visitInfo="info"></DiabetesDetail>
<CoronaryHeartDiseaseDetail v-if="diseaseType === '3'" :visitInfo="info"></CoronaryHeartDiseaseDetail>
<StrokeDetail v-if="diseaseType === '4'" :visitInfo="info"></StrokeDetail>
<CopdDetail v-if="diseaseType === '5'" :visitInfo="info"></CopdDetail>
<ChronicKidneyDiseaseDetail v-if="diseaseType === '6'" :visitInfo="info"></ChronicKidneyDiseaseDetail>
<DyslipidemiaDetail v-if="diseaseType === '7'" :visitInfo="info"></DyslipidemiaDetail>
</div>
</template>
<script>
import { getSeparateFUDetail } from '@/api/doctor/separateFU'
import DocNavBar from '@/doctor/components/docNavBar/DocNavBar.vue'
import HypertensionDetail from './components/HypertensionDetail.vue'
import DiabetesDetail from './components/DiabetesDetail.vue'
import CoronaryHeartDiseaseDetail from './components/CoronaryHeartDiseaseDetail.vue'
import StrokeDetail from './components/StrokeDetail.vue'
import CopdDetail from './components/CopdDetail.vue'
import ChronicKidneyDiseaseDetail from './components/ChronicKidneyDiseaseDetail.vue'
import DyslipidemiaDetail from './components/DyslipidemiaDetail.vue'
export default {
components: { DocNavBar, HypertensionDetail, DiabetesDetail, CoronaryHeartDiseaseDetail, StrokeDetail, CopdDetail, ChronicKidneyDiseaseDetail, DyslipidemiaDetail },
props: {
relationId: String
},
data() {
return {
info: {}
}
},
computed: {
diseaseType() {
return this.$route.query.diseaseType
}
},
created() {
this.load()
},
methods: {
load() {
if (!this.relationId) {
this.$message.info('未获取到信息')
return
}
let params = {
id: this.relationId,
diseaseType: this.diseaseType
}
getSeparateFUDetail(params).then(res => {
console.log(666, res)
let result = res.data || {}
this.info = result
})
}
}
}
</script>
\ No newline at end of file
<template>
<div class="p-3 grow cont-box">
<div class="p-3 h-full cont-inner">
<div class="flex justify-between collapse-head mt-2">
<span class="text-16 font-semibold">全部内容</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 :model-value="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">
{{ visitInfo.visitWayName || '-' }}
</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 class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">症状</span>
<span class="text-end">
{{ visitInfo.symptomName || '-' }}
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="4" title="体征" name="4">
<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>{{ visitInfo[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="5" title="生活方式指导" name="5">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<div style="color: #262626">吸烟</div>
<div class="gray-box mt-2">
<div>
<span>是否正在吸烟:</span>
<span>{{ visitInfo.isSmokingName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1">
<span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span>
<span>{{ visitInfo.startSmokeAge || '-' }}岁</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>您最近7天是否吸烟:</span>
<span>{{ visitInfo.lastSevenSmokeName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>日吸烟量:</span>
<span>{{ visitInfo.daySmoking || '-' }}支</span>
<!-- <span class="ml-4">目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span> -->
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span>
</div>
</div>
<div style="color: #262626" class="mt-2">饮酒</div>
<div class="gray-box mt-2">
<div>
<span>是否正在饮酒:</span>
<span>{{ visitInfo.isDrinkName }}</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>日饮酒量:</span>
<span>{{ visitInfo.dayDrink || '-' }}ml</span>
<span class="ml-4">目标日饮酒量:</span>
<span>{{ visitInfo.goalDayDrink || '-' }}ml</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>白酒:</span>
<span>{{ visitInfo.drinkLiquor || '-' }}ml/日</span>
<span class="ml-2">啤酒:</span>
<span>{{ visitInfo.drinkBeer || '-' }}ml/日</span>
<span class="ml-2">红酒:</span>
<span>{{ visitInfo.drinkRed || '-' }}ml/日</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>黄酒:</span>
<span>{{ visitInfo.drinkYellow || '-' }}ml/日</span>
<span class="ml-2">其他:</span>
<span>{{ visitInfo.drinkOther || '-' }}ml/日</span>
</div>
</div>
<div style="color: #262626" class="mt-2">运动</div>
<div class="gray-box mt-2">
<div>
<span>有无规律活动:</span>
<span>{{ visitInfo.regularExerciseName }}</span>
</div>
<div v-if="visitInfo.regularExercise === 1">
<span>运动强度:</span>
<span>{{ visitInfo.exerciseStrengthName }}</span>
</div>
<div>
<span>目前运动情况:</span>
<span>{{ visitInfo.nowExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.nowExerciseMinute || '-' }}分钟/次</span>
</div>
<div>
<span>目标运动情况:</span>
<span>{{ visitInfo.targetExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.targetExerciseMinute || '-' }}分钟/次</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">{{ visitInfo.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">{{ visitInfo.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">{{ visitInfo.doctorAdviceName || '-' }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="6" title="辅助检查" name="6">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</van-collapse-item>
<van-collapse-item key="7" title="目前高血压用药及依从性" name="7">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.drugsAdverseName }}</span>
</div>
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">不良反应</span>
<span class="text-end">{{ visitInfo.drugsAdverseOther || '-' }}</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">{{ visitInfo.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 class="list">
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">目前诊断</span>
<span class="text-end">{{ visitInfo.currentDiagnosisName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="11" title="用药情况" name="11">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.isReferralName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊原因</span>
<span class="text-end">{{ visitInfo.referralReason }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊机构</span>
<span class="text-end">{{ visitInfo.referralUnitName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊科室</span>
<span class="text-end">{{ visitInfo.referralOfficeName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="13" title="现场随访照片" name="13">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<ImagePreview :img-list="visitInfo.visitImageList"></ImagePreview>
</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">{{ visitInfo.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">{{ visitInfo[item.key] }}</span>
</div>
</div>
</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
</template>
<script>
import ImagePreview from '@/doctor/components/imagePreview/imagePreview.vue'
export default {
components: { ImagePreview },
props: {
visitInfo: {
type: Object,
default: () => {}
}
},
data() {
return {
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: 'signHeartRate', unit: '次/分' },
{ title: '其他', key: 'signOther' }
],
columnsOrg: [
{ title: '随访日期', key: 'visitDate' },
{ title: '随访单位', key: 'visitUnitName' },
{ title: '随访科室', key: 'visitOfficeName' },
{ title: '随访医生', key: 'visitDoctorName' }
]
}
},
computed: {
residentInfo() {
return this.visitInfo.residentsRecord || {}
}
},
methods: {
// 全部展开、收起
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) {
console.log(val)
if (val && val.length <= 2) {
this.activeCollapse = val.slice(val.length - 1)
} else {
if (this.activeCollapse.length > val.length) {
this.activeCollapse = val
}
if (this.activeCollapse.length < val.length) {
this.activeCollapse = val.slice(val.length - 1)
}
}
if (val.length === 15) {
this.collapseAll = true
} else {
this.collapseAll = false
}
}
}
}
</script>
<style lang="less" scoped>
@import url('@/doctor/utils/common.less');
.cont-box {
background-color: #f9f9f9;
.cont-inner {
background: linear-gradient(to bottom, #F0F6FF, #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;
}
}
.gray-box {
background: #F8FAFC;
padding: 8px;
color: #4D5665;
font-size: 13px;
}
</style>
\ No newline at end of file
<template>
<div class="p-3 grow cont-box">
<div class="p-3 h-full cont-inner">
<div class="flex justify-between collapse-head mt-2">
<span class="text-16 font-semibold">全部内容</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 :model-value="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">
{{ visitInfo.visitWayName || '-' }}
</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 class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">症状</span>
<span class="text-end">
{{ visitInfo.symptomName || '-' }}
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="4" title="体征" name="4">
<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>{{ visitInfo[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="5" title="生活方式指导" name="5">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<div style="color: #262626">吸烟</div>
<div class="gray-box mt-2">
<div>
<span>是否正在吸烟:</span>
<span>{{ visitInfo.isSmokingName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1">
<span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span>
<span>{{ visitInfo.startSmokeAge || '-' }}岁</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>您最近7天是否吸烟:</span>
<span>{{ visitInfo.lastSevenSmokeName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>日吸烟量:</span>
<span>{{ visitInfo.daySmoking || '-' }}支</span>
<!-- <span class="ml-4">目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span> -->
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span>
</div>
</div>
<div style="color: #262626" class="mt-2">饮酒</div>
<div class="gray-box mt-2">
<div>
<span>是否正在饮酒:</span>
<span>{{ visitInfo.isDrinkName }}</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>日饮酒量:</span>
<span>{{ visitInfo.dayDrink || '-' }}ml</span>
<span class="ml-4">目标日饮酒量:</span>
<span>{{ visitInfo.goalDayDrink || '-' }}ml</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>白酒:</span>
<span>{{ visitInfo.drinkLiquor || '-' }}ml/日</span>
<span class="ml-2">啤酒:</span>
<span>{{ visitInfo.drinkBeer || '-' }}ml/日</span>
<span class="ml-2">红酒:</span>
<span>{{ visitInfo.drinkRed || '-' }}ml/日</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>黄酒:</span>
<span>{{ visitInfo.drinkYellow || '-' }}ml/日</span>
<span class="ml-2">其他:</span>
<span>{{ visitInfo.drinkOther || '-' }}ml/日</span>
</div>
</div>
<div style="color: #262626" class="mt-2">运动</div>
<div class="gray-box mt-2">
<div>
<span>有无规律活动:</span>
<span>{{ visitInfo.regularExerciseName }}</span>
</div>
<div v-if="visitInfo.regularExercise === 1">
<span>运动强度:</span>
<span>{{ visitInfo.exerciseStrengthName }}</span>
</div>
<div>
<span>目前运动情况:</span>
<span>{{ visitInfo.nowExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.nowExerciseMinute || '-' }}分钟/次</span>
</div>
<div>
<span>目标运动情况:</span>
<span>{{ visitInfo.targetExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.targetExerciseMinute || '-' }}分钟/次</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">{{ visitInfo.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">{{ visitInfo.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">{{ visitInfo.doctorAdviceName || '-' }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="6" title="辅助检查" name="6">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</van-collapse-item>
<van-collapse-item key="7" title="目前高血压用药及依从性" name="7">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.drugsAdverseName }}</span>
</div>
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">不良反应</span>
<span class="text-end">{{ visitInfo.drugsAdverseOther || '-' }}</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">{{ visitInfo.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 class="list">
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">目前诊断</span>
<span class="text-end">{{ visitInfo.currentDiagnosisName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="11" title="用药情况" name="11">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.isReferralName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊原因</span>
<span class="text-end">{{ visitInfo.referralReason }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊机构</span>
<span class="text-end">{{ visitInfo.referralUnitName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊科室</span>
<span class="text-end">{{ visitInfo.referralOfficeName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="13" title="现场随访照片" name="13">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<ImagePreview :img-list="visitInfo.visitImageList"></ImagePreview>
</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">{{ visitInfo.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">{{ visitInfo[item.key] }}</span>
</div>
</div>
</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
</template>
<script>
import ImagePreview from '@/doctor/components/imagePreview/imagePreview.vue'
export default {
components: { ImagePreview },
props: {
visitInfo: {
type: Object,
default: () => {}
}
},
data() {
return {
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: 'signHeartRate', unit: '次/分' },
{ title: '其他', key: 'signOther' }
],
columnsOrg: [
{ title: '随访日期', key: 'visitDate' },
{ title: '随访单位', key: 'visitUnitName' },
{ title: '随访科室', key: 'visitOfficeName' },
{ title: '随访医生', key: 'visitDoctorName' }
]
}
},
computed: {
residentInfo() {
return this.visitInfo.residentsRecord || {}
}
},
methods: {
// 全部展开、收起
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) {
console.log(val)
if (val && val.length <= 2) {
this.activeCollapse = val.slice(val.length - 1)
} else {
if (this.activeCollapse.length > val.length) {
this.activeCollapse = val
}
if (this.activeCollapse.length < val.length) {
this.activeCollapse = val.slice(val.length - 1)
}
}
if (val.length === 15) {
this.collapseAll = true
} else {
this.collapseAll = false
}
}
}
}
</script>
<style lang="less" scoped>
@import url('@/doctor/utils/common.less');
.cont-box {
background-color: #f9f9f9;
.cont-inner {
background: linear-gradient(to bottom, #F0F6FF, #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;
}
}
.gray-box {
background: #F8FAFC;
padding: 8px;
color: #4D5665;
font-size: 13px;
}
</style>
\ No newline at end of file
<template>
<div class="p-3 grow cont-box">
<div class="p-3 h-full cont-inner">
<div class="flex justify-between collapse-head mt-2">
<span class="text-16 font-semibold">全部内容</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 :model-value="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">
{{ visitInfo.visitWayName || '-' }}
</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 class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">症状</span>
<span class="text-end">
{{ visitInfo.symptomName || '-' }}
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="4" title="体征" name="4">
<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>{{ visitInfo[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="5" title="生活方式指导" name="5">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<div style="color: #262626">吸烟</div>
<div class="gray-box mt-2">
<div>
<span>是否正在吸烟:</span>
<span>{{ visitInfo.isSmokingName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1">
<span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span>
<span>{{ visitInfo.startSmokeAge || '-' }}岁</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>您最近7天是否吸烟:</span>
<span>{{ visitInfo.lastSevenSmokeName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>日吸烟量:</span>
<span>{{ visitInfo.daySmoking || '-' }}支</span>
<!-- <span class="ml-4">目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span> -->
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span>
</div>
</div>
<div style="color: #262626" class="mt-2">饮酒</div>
<div class="gray-box mt-2">
<div>
<span>是否正在饮酒:</span>
<span>{{ visitInfo.isDrinkName }}</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>日饮酒量:</span>
<span>{{ visitInfo.dayDrink || '-' }}ml</span>
<span class="ml-4">目标日饮酒量:</span>
<span>{{ visitInfo.goalDayDrink || '-' }}ml</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>白酒:</span>
<span>{{ visitInfo.drinkLiquor || '-' }}ml/日</span>
<span class="ml-2">啤酒:</span>
<span>{{ visitInfo.drinkBeer || '-' }}ml/日</span>
<span class="ml-2">红酒:</span>
<span>{{ visitInfo.drinkRed || '-' }}ml/日</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>黄酒:</span>
<span>{{ visitInfo.drinkYellow || '-' }}ml/日</span>
<span class="ml-2">其他:</span>
<span>{{ visitInfo.drinkOther || '-' }}ml/日</span>
</div>
</div>
<div style="color: #262626" class="mt-2">运动</div>
<div class="gray-box mt-2">
<div>
<span>有无规律活动:</span>
<span>{{ visitInfo.regularExerciseName }}</span>
</div>
<div v-if="visitInfo.regularExercise === 1">
<span>运动强度:</span>
<span>{{ visitInfo.exerciseStrengthName }}</span>
</div>
<div>
<span>目前运动情况:</span>
<span>{{ visitInfo.nowExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.nowExerciseMinute || '-' }}分钟/次</span>
</div>
<div>
<span>目标运动情况:</span>
<span>{{ visitInfo.targetExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.targetExerciseMinute || '-' }}分钟/次</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">{{ visitInfo.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">{{ visitInfo.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">{{ visitInfo.doctorAdviceName || '-' }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="6" title="辅助检查" name="6">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</van-collapse-item>
<van-collapse-item key="7" title="目前高血压用药及依从性" name="7">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.drugsAdverseName }}</span>
</div>
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">不良反应</span>
<span class="text-end">{{ visitInfo.drugsAdverseOther || '-' }}</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">{{ visitInfo.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 class="list">
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">目前诊断</span>
<span class="text-end">{{ visitInfo.currentDiagnosisName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="11" title="用药情况" name="11">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.isReferralName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊原因</span>
<span class="text-end">{{ visitInfo.referralReason }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊机构</span>
<span class="text-end">{{ visitInfo.referralUnitName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊科室</span>
<span class="text-end">{{ visitInfo.referralOfficeName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="13" title="现场随访照片" name="13">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<ImagePreview :img-list="visitInfo.visitImageList"></ImagePreview>
</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">{{ visitInfo.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">{{ visitInfo[item.key] }}</span>
</div>
</div>
</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
</template>
<script>
import ImagePreview from '@/doctor/components/imagePreview/imagePreview.vue'
export default {
components: { ImagePreview },
props: {
visitInfo: {
type: Object,
default: () => {}
}
},
data() {
return {
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: 'signHeartRate', unit: '次/分' },
{ title: '其他', key: 'signOther' }
],
columnsOrg: [
{ title: '随访日期', key: 'visitDate' },
{ title: '随访单位', key: 'visitUnitName' },
{ title: '随访科室', key: 'visitOfficeName' },
{ title: '随访医生', key: 'visitDoctorName' }
]
}
},
computed: {
residentInfo() {
return this.visitInfo.residentsRecord || {}
}
},
methods: {
// 全部展开、收起
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) {
console.log(val)
if (val && val.length <= 2) {
this.activeCollapse = val.slice(val.length - 1)
} else {
if (this.activeCollapse.length > val.length) {
this.activeCollapse = val
}
if (this.activeCollapse.length < val.length) {
this.activeCollapse = val.slice(val.length - 1)
}
}
if (val.length === 15) {
this.collapseAll = true
} else {
this.collapseAll = false
}
}
}
}
</script>
<style lang="less" scoped>
@import url('@/doctor/utils/common.less');
.cont-box {
background-color: #f9f9f9;
.cont-inner {
background: linear-gradient(to bottom, #F0F6FF, #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;
}
}
.gray-box {
background: #F8FAFC;
padding: 8px;
color: #4D5665;
font-size: 13px;
}
</style>
\ No newline at end of file
<template>
<div class="p-3 grow cont-box">
<div class="p-3 h-full cont-inner">
<div class="flex justify-between collapse-head mt-2">
<span class="text-16 font-semibold">全部内容</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 :model-value="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">
{{ visitInfo.visitWayName || '-' }}
</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 class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">症状</span>
<span class="text-end">
{{ visitInfo.symptomName || '-' }}
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="4" title="体征" name="4">
<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>{{ visitInfo[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="5" title="生活方式指导" name="5">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<div style="color: #262626">吸烟</div>
<div class="gray-box mt-2">
<div>
<span>是否正在吸烟:</span>
<span>{{ visitInfo.isSmokingName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1">
<span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span>
<span>{{ visitInfo.startSmokeAge || '-' }}岁</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>您最近7天是否吸烟:</span>
<span>{{ visitInfo.lastSevenSmokeName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>日吸烟量:</span>
<span>{{ visitInfo.daySmoking || '-' }}支</span>
<!-- <span class="ml-4">目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span> -->
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span>
</div>
</div>
<div style="color: #262626" class="mt-2">饮酒</div>
<div class="gray-box mt-2">
<div>
<span>是否正在饮酒:</span>
<span>{{ visitInfo.isDrinkName }}</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>日饮酒量:</span>
<span>{{ visitInfo.dayDrink || '-' }}ml</span>
<span class="ml-4">目标日饮酒量:</span>
<span>{{ visitInfo.goalDayDrink || '-' }}ml</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>白酒:</span>
<span>{{ visitInfo.drinkLiquor || '-' }}ml/日</span>
<span class="ml-2">啤酒:</span>
<span>{{ visitInfo.drinkBeer || '-' }}ml/日</span>
<span class="ml-2">红酒:</span>
<span>{{ visitInfo.drinkRed || '-' }}ml/日</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>黄酒:</span>
<span>{{ visitInfo.drinkYellow || '-' }}ml/日</span>
<span class="ml-2">其他:</span>
<span>{{ visitInfo.drinkOther || '-' }}ml/日</span>
</div>
</div>
<div style="color: #262626" class="mt-2">运动</div>
<div class="gray-box mt-2">
<div>
<span>有无规律活动:</span>
<span>{{ visitInfo.regularExerciseName }}</span>
</div>
<div v-if="visitInfo.regularExercise === 1">
<span>运动强度:</span>
<span>{{ visitInfo.exerciseStrengthName }}</span>
</div>
<div>
<span>目前运动情况:</span>
<span>{{ visitInfo.nowExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.nowExerciseMinute || '-' }}分钟/次</span>
</div>
<div>
<span>目标运动情况:</span>
<span>{{ visitInfo.targetExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.targetExerciseMinute || '-' }}分钟/次</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">{{ visitInfo.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">{{ visitInfo.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">{{ visitInfo.doctorAdviceName || '-' }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="6" title="辅助检查" name="6">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</van-collapse-item>
<van-collapse-item key="7" title="目前高血压用药及依从性" name="7">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.drugsAdverseName }}</span>
</div>
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">不良反应</span>
<span class="text-end">{{ visitInfo.drugsAdverseOther || '-' }}</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">{{ visitInfo.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 class="list">
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">目前诊断</span>
<span class="text-end">{{ visitInfo.currentDiagnosisName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="11" title="用药情况" name="11">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.isReferralName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊原因</span>
<span class="text-end">{{ visitInfo.referralReason }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊机构</span>
<span class="text-end">{{ visitInfo.referralUnitName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊科室</span>
<span class="text-end">{{ visitInfo.referralOfficeName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="13" title="现场随访照片" name="13">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<ImagePreview :img-list="visitInfo.visitImageList"></ImagePreview>
</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">{{ visitInfo.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">{{ visitInfo[item.key] }}</span>
</div>
</div>
</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
</template>
<script>
import ImagePreview from '@/doctor/components/imagePreview/imagePreview.vue'
export default {
components: { ImagePreview },
props: {
visitInfo: {
type: Object,
default: () => {}
}
},
data() {
return {
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: 'signHeartRate', unit: '次/分' },
{ title: '其他', key: 'signOther' }
],
columnsOrg: [
{ title: '随访日期', key: 'visitDate' },
{ title: '随访单位', key: 'visitUnitName' },
{ title: '随访科室', key: 'visitOfficeName' },
{ title: '随访医生', key: 'visitDoctorName' }
]
}
},
computed: {
residentInfo() {
return this.visitInfo.residentsRecord || {}
}
},
methods: {
// 全部展开、收起
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) {
console.log(val)
if (val && val.length <= 2) {
this.activeCollapse = val.slice(val.length - 1)
} else {
if (this.activeCollapse.length > val.length) {
this.activeCollapse = val
}
if (this.activeCollapse.length < val.length) {
this.activeCollapse = val.slice(val.length - 1)
}
}
if (val.length === 15) {
this.collapseAll = true
} else {
this.collapseAll = false
}
}
}
}
</script>
<style lang="less" scoped>
@import url('@/doctor/utils/common.less');
.cont-box {
background-color: #f9f9f9;
.cont-inner {
background: linear-gradient(to bottom, #F0F6FF, #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;
}
}
.gray-box {
background: #F8FAFC;
padding: 8px;
color: #4D5665;
font-size: 13px;
}
</style>
\ No newline at end of file
<template>
<div class="p-3 grow cont-box">
<div class="p-3 h-full cont-inner">
<div class="flex justify-between collapse-head mt-2">
<span class="text-16 font-semibold">全部内容</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 :model-value="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">
{{ visitInfo.visitWayName || '-' }}
</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 class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">症状</span>
<span class="text-end">
{{ visitInfo.symptomName || '-' }}
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="4" title="体征" name="4">
<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>{{ visitInfo[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="5" title="生活方式指导" name="5">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<div style="color: #262626">吸烟</div>
<div class="gray-box mt-2">
<div>
<span>是否正在吸烟:</span>
<span>{{ visitInfo.isSmokingName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1">
<span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span>
<span>{{ visitInfo.startSmokeAge || '-' }}岁</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>您最近7天是否吸烟:</span>
<span>{{ visitInfo.lastSevenSmokeName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>日吸烟量:</span>
<span>{{ visitInfo.daySmoking || '-' }}支</span>
<!-- <span class="ml-4">目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span> -->
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span>
</div>
</div>
<div style="color: #262626" class="mt-2">饮酒</div>
<div class="gray-box mt-2">
<div>
<span>是否正在饮酒:</span>
<span>{{ visitInfo.isDrinkName }}</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>日饮酒量:</span>
<span>{{ visitInfo.dayDrink || '-' }}ml</span>
<span class="ml-4">目标日饮酒量:</span>
<span>{{ visitInfo.goalDayDrink || '-' }}ml</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>白酒:</span>
<span>{{ visitInfo.drinkLiquor || '-' }}ml/日</span>
<span class="ml-2">啤酒:</span>
<span>{{ visitInfo.drinkBeer || '-' }}ml/日</span>
<span class="ml-2">红酒:</span>
<span>{{ visitInfo.drinkRed || '-' }}ml/日</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>黄酒:</span>
<span>{{ visitInfo.drinkYellow || '-' }}ml/日</span>
<span class="ml-2">其他:</span>
<span>{{ visitInfo.drinkOther || '-' }}ml/日</span>
</div>
</div>
<div style="color: #262626" class="mt-2">运动</div>
<div class="gray-box mt-2">
<div>
<span>有无规律活动:</span>
<span>{{ visitInfo.regularExerciseName }}</span>
</div>
<div v-if="visitInfo.regularExercise === 1">
<span>运动强度:</span>
<span>{{ visitInfo.exerciseStrengthName }}</span>
</div>
<div>
<span>目前运动情况:</span>
<span>{{ visitInfo.nowExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.nowExerciseMinute || '-' }}分钟/次</span>
</div>
<div>
<span>目标运动情况:</span>
<span>{{ visitInfo.targetExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.targetExerciseMinute || '-' }}分钟/次</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">{{ visitInfo.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">{{ visitInfo.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">{{ visitInfo.doctorAdviceName || '-' }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="6" title="辅助检查" name="6">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</van-collapse-item>
<van-collapse-item key="7" title="目前高血压用药及依从性" name="7">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.drugsAdverseName }}</span>
</div>
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">不良反应</span>
<span class="text-end">{{ visitInfo.drugsAdverseOther || '-' }}</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">{{ visitInfo.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 class="list">
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">目前诊断</span>
<span class="text-end">{{ visitInfo.currentDiagnosisName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="11" title="用药情况" name="11">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.isReferralName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊原因</span>
<span class="text-end">{{ visitInfo.referralReason }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊机构</span>
<span class="text-end">{{ visitInfo.referralUnitName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊科室</span>
<span class="text-end">{{ visitInfo.referralOfficeName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="13" title="现场随访照片" name="13">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<ImagePreview :img-list="visitInfo.visitImageList"></ImagePreview>
</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">{{ visitInfo.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">{{ visitInfo[item.key] }}</span>
</div>
</div>
</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
</template>
<script>
import ImagePreview from '@/doctor/components/imagePreview/imagePreview.vue'
export default {
components: { ImagePreview },
props: {
visitInfo: {
type: Object,
default: () => {}
}
},
data() {
return {
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: 'signHeartRate', unit: '次/分' },
{ title: '其他', key: 'signOther' }
],
columnsOrg: [
{ title: '随访日期', key: 'visitDate' },
{ title: '随访单位', key: 'visitUnitName' },
{ title: '随访科室', key: 'visitOfficeName' },
{ title: '随访医生', key: 'visitDoctorName' }
]
}
},
computed: {
residentInfo() {
return this.visitInfo.residentsRecord || {}
}
},
methods: {
// 全部展开、收起
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) {
console.log(val)
if (val && val.length <= 2) {
this.activeCollapse = val.slice(val.length - 1)
} else {
if (this.activeCollapse.length > val.length) {
this.activeCollapse = val
}
if (this.activeCollapse.length < val.length) {
this.activeCollapse = val.slice(val.length - 1)
}
}
if (val.length === 15) {
this.collapseAll = true
} else {
this.collapseAll = false
}
}
}
}
</script>
<style lang="less" scoped>
@import url('@/doctor/utils/common.less');
.cont-box {
background-color: #f9f9f9;
.cont-inner {
background: linear-gradient(to bottom, #F0F6FF, #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;
}
}
.gray-box {
background: #F8FAFC;
padding: 8px;
color: #4D5665;
font-size: 13px;
}
</style>
\ No newline at end of file
<template>
<div class="p-3 grow cont-box">
<div class="p-3 h-full cont-inner">
<div class="flex justify-between collapse-head mt-2">
<span class="text-16 font-semibold">全部内容</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 :model-value="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">
{{ visitInfo.visitWayName || '-' }}
</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 class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">症状</span>
<span class="text-end">
{{ visitInfo.symptomName || '-' }}
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="4" title="体征" name="4">
<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>{{ visitInfo[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="5" title="生活方式指导" name="5">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<div style="color: #262626">吸烟</div>
<div class="gray-box mt-2">
<div>
<span>是否正在吸烟:</span>
<span>{{ visitInfo.isSmokingName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1">
<span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span>
<span>{{ visitInfo.startSmokeAge || '-' }}岁</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>您最近7天是否吸烟:</span>
<span>{{ visitInfo.lastSevenSmokeName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>日吸烟量:</span>
<span>{{ visitInfo.daySmoking || '-' }}支</span>
<!-- <span class="ml-4">目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span> -->
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span>
</div>
</div>
<div style="color: #262626" class="mt-2">饮酒</div>
<div class="gray-box mt-2">
<div>
<span>是否正在饮酒:</span>
<span>{{ visitInfo.isDrinkName }}</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>日饮酒量:</span>
<span>{{ visitInfo.dayDrink || '-' }}ml</span>
<span class="ml-4">目标日饮酒量:</span>
<span>{{ visitInfo.goalDayDrink || '-' }}ml</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>白酒:</span>
<span>{{ visitInfo.drinkLiquor || '-' }}ml/日</span>
<span class="ml-2">啤酒:</span>
<span>{{ visitInfo.drinkBeer || '-' }}ml/日</span>
<span class="ml-2">红酒:</span>
<span>{{ visitInfo.drinkRed || '-' }}ml/日</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>黄酒:</span>
<span>{{ visitInfo.drinkYellow || '-' }}ml/日</span>
<span class="ml-2">其他:</span>
<span>{{ visitInfo.drinkOther || '-' }}ml/日</span>
</div>
</div>
<div style="color: #262626" class="mt-2">运动</div>
<div class="gray-box mt-2">
<div>
<span>有无规律活动:</span>
<span>{{ visitInfo.regularExerciseName }}</span>
</div>
<div v-if="visitInfo.regularExercise === 1">
<span>运动强度:</span>
<span>{{ visitInfo.exerciseStrengthName }}</span>
</div>
<div>
<span>目前运动情况:</span>
<span>{{ visitInfo.nowExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.nowExerciseMinute || '-' }}分钟/次</span>
</div>
<div>
<span>目标运动情况:</span>
<span>{{ visitInfo.targetExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.targetExerciseMinute || '-' }}分钟/次</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">{{ visitInfo.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">{{ visitInfo.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">{{ visitInfo.doctorAdviceName || '-' }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="6" title="辅助检查" name="6">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</van-collapse-item>
<van-collapse-item key="7" title="目前高血压用药及依从性" name="7">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.drugsAdverseName }}</span>
</div>
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">不良反应</span>
<span class="text-end">{{ visitInfo.drugsAdverseOther || '-' }}</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">{{ visitInfo.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 class="list">
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">目前诊断</span>
<span class="text-end">{{ visitInfo.currentDiagnosisName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="11" title="用药情况" name="11">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.isReferralName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊原因</span>
<span class="text-end">{{ visitInfo.referralReason }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊机构</span>
<span class="text-end">{{ visitInfo.referralUnitName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊科室</span>
<span class="text-end">{{ visitInfo.referralOfficeName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="13" title="现场随访照片" name="13">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<ImagePreview :img-list="visitInfo.visitImageList"></ImagePreview>
</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">{{ visitInfo.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">{{ visitInfo[item.key] }}</span>
</div>
</div>
</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
</template>
<script>
import ImagePreview from '@/doctor/components/imagePreview/imagePreview.vue'
export default {
components: { ImagePreview },
props: {
visitInfo: {
type: Object,
default: () => {}
}
},
data() {
return {
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: 'signHeartRate', unit: '次/分' },
{ title: '其他', key: 'signOther' }
],
columnsOrg: [
{ title: '随访日期', key: 'visitDate' },
{ title: '随访单位', key: 'visitUnitName' },
{ title: '随访科室', key: 'visitOfficeName' },
{ title: '随访医生', key: 'visitDoctorName' }
]
}
},
computed: {
residentInfo() {
return this.visitInfo.residentsRecord || {}
}
},
methods: {
// 全部展开、收起
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) {
console.log(val)
if (val && val.length <= 2) {
this.activeCollapse = val.slice(val.length - 1)
} else {
if (this.activeCollapse.length > val.length) {
this.activeCollapse = val
}
if (this.activeCollapse.length < val.length) {
this.activeCollapse = val.slice(val.length - 1)
}
}
if (val.length === 15) {
this.collapseAll = true
} else {
this.collapseAll = false
}
}
}
}
</script>
<style lang="less" scoped>
@import url('@/doctor/utils/common.less');
.cont-box {
background-color: #f9f9f9;
.cont-inner {
background: linear-gradient(to bottom, #F0F6FF, #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;
}
}
.gray-box {
background: #F8FAFC;
padding: 8px;
color: #4D5665;
font-size: 13px;
}
</style>
\ No newline at end of file
<template>
<div class="p-3 grow cont-box">
<div class="p-3 h-full cont-inner">
<div class="flex justify-between collapse-head mt-2">
<span class="text-16 font-semibold">全部内容</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 :model-value="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">
{{ visitInfo.visitWayName || '-' }}
</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 class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">症状</span>
<span class="text-end">
{{ visitInfo.symptomName || '-' }}
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="4" title="体征" name="4">
<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>{{ visitInfo[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="5" title="生活方式指导" name="5">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<div style="color: #262626">吸烟</div>
<div class="gray-box mt-2">
<div>
<span>是否正在吸烟:</span>
<span>{{ visitInfo.isSmokingName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1">
<span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span>
<span>{{ visitInfo.startSmokeAge || '-' }}岁</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>您最近7天是否吸烟:</span>
<span>{{ visitInfo.lastSevenSmokeName }}</span>
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>日吸烟量:</span>
<span>{{ visitInfo.daySmoking || '-' }}支</span>
<!-- <span class="ml-4">目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span> -->
</div>
<div v-if="visitInfo.isSmoking === 1 || visitInfo.isSmoking === 2">
<span>目标日吸烟量:</span>
<span>{{ visitInfo.goalDaySmoking || '-' }}支</span>
</div>
</div>
<div style="color: #262626" class="mt-2">饮酒</div>
<div class="gray-box mt-2">
<div>
<span>是否正在饮酒:</span>
<span>{{ visitInfo.isDrinkName }}</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>日饮酒量:</span>
<span>{{ visitInfo.dayDrink || '-' }}ml</span>
<span class="ml-4">目标日饮酒量:</span>
<span>{{ visitInfo.goalDayDrink || '-' }}ml</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>白酒:</span>
<span>{{ visitInfo.drinkLiquor || '-' }}ml/日</span>
<span class="ml-2">啤酒:</span>
<span>{{ visitInfo.drinkBeer || '-' }}ml/日</span>
<span class="ml-2">红酒:</span>
<span>{{ visitInfo.drinkRed || '-' }}ml/日</span>
</div>
<div v-if="visitInfo.isDrink === 1 || visitInfo.isDrink === 2">
<span>黄酒:</span>
<span>{{ visitInfo.drinkYellow || '-' }}ml/日</span>
<span class="ml-2">其他:</span>
<span>{{ visitInfo.drinkOther || '-' }}ml/日</span>
</div>
</div>
<div style="color: #262626" class="mt-2">运动</div>
<div class="gray-box mt-2">
<div>
<span>有无规律活动:</span>
<span>{{ visitInfo.regularExerciseName }}</span>
</div>
<div v-if="visitInfo.regularExercise === 1">
<span>运动强度:</span>
<span>{{ visitInfo.exerciseStrengthName }}</span>
</div>
<div>
<span>目前运动情况:</span>
<span>{{ visitInfo.nowExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.nowExerciseMinute || '-' }}分钟/次</span>
</div>
<div>
<span>目标运动情况:</span>
<span>{{ visitInfo.targetExerciseWeek || '-' }}次/周、</span>
<span>{{ visitInfo.targetExerciseMinute || '-' }}分钟/次</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">{{ visitInfo.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">{{ visitInfo.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">{{ visitInfo.doctorAdviceName || '-' }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="6" title="辅助检查" name="6">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</van-collapse-item>
<van-collapse-item key="7" title="目前高血压用药及依从性" name="7">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.drugsAdverseName }}</span>
</div>
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">不良反应</span>
<span class="text-end">{{ visitInfo.drugsAdverseOther || '-' }}</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">{{ visitInfo.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 class="list">
<div class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">目前诊断</span>
<span class="text-end">{{ visitInfo.currentDiagnosisName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="11" title="用药情况" name="11">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
</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">{{ visitInfo.isReferralName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊原因</span>
<span class="text-end">{{ visitInfo.referralReason }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊机构</span>
<span class="text-end">{{ visitInfo.referralUnitName }}</span>
</div>
<div v-if="visitInfo.isReferral === 1" class="flex justify-between py-1 border-bottom item">
<span class="shrink-0 mr-2 label">转诊科室</span>
<span class="text-end">{{ visitInfo.referralOfficeName }}</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item key="13" title="现场随访照片" name="13">
<template #right-icon>
<doc-icon type="doc-down" />
</template>
<ImagePreview :img-list="visitInfo.visitImageList"></ImagePreview>
</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">{{ visitInfo.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">{{ visitInfo[item.key] }}</span>
</div>
</div>
</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
</template>
<script>
import ImagePreview from '@/doctor/components/imagePreview/imagePreview.vue'
export default {
components: { ImagePreview },
props: {
visitInfo: {
type: Object,
default: () => {}
}
},
data() {
return {
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: 'signHeartRate', unit: '次/分' },
{ title: '其他', key: 'signOther' }
],
columnsOrg: [
{ title: '随访日期', key: 'visitDate' },
{ title: '随访单位', key: 'visitUnitName' },
{ title: '随访科室', key: 'visitOfficeName' },
{ title: '随访医生', key: 'visitDoctorName' }
]
}
},
computed: {
residentInfo() {
return this.visitInfo.residentsRecord || {}
}
},
methods: {
// 全部展开、收起
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) {
console.log(val)
if (val && val.length <= 2) {
this.activeCollapse = val.slice(val.length - 1)
} else {
if (this.activeCollapse.length > val.length) {
this.activeCollapse = val
}
if (this.activeCollapse.length < val.length) {
this.activeCollapse = val.slice(val.length - 1)
}
}
if (val.length === 15) {
this.collapseAll = true
} else {
this.collapseAll = false
}
}
}
}
</script>
<style lang="less" scoped>
@import url('@/doctor/utils/common.less');
.cont-box {
background-color: #f9f9f9;
.cont-inner {
background: linear-gradient(to bottom, #F0F6FF, #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;
}
}
.gray-box {
background: #F8FAFC;
padding: 8px;
color: #4D5665;
font-size: 13px;
}
</style>
\ No newline at end of file
...@@ -3,15 +3,23 @@ ...@@ -3,15 +3,23 @@
<HypertensionForm v-if="diseaseInfo.diseaseType === 1" ref="hypertensionForm"></HypertensionForm> <HypertensionForm v-if="diseaseInfo.diseaseType === 1" ref="hypertensionForm"></HypertensionForm>
<DiabetesForm v-if="diseaseInfo.diseaseType === 2" ref="diabetesForm"></DiabetesForm> <DiabetesForm v-if="diseaseInfo.diseaseType === 2" ref="diabetesForm"></DiabetesForm>
<CoronaryHeartDiseaseForm v-if="diseaseInfo.diseaseType === 3" ref="coronaryHeartDiseaseForm"></CoronaryHeartDiseaseForm> <CoronaryHeartDiseaseForm v-if="diseaseInfo.diseaseType === 3" ref="coronaryHeartDiseaseForm"></CoronaryHeartDiseaseForm>
<StrokeForm v-if="diseaseInfo.diseaseType === 4" ref="strokeForm"></StrokeForm>
<CopdForm v-if="diseaseInfo.diseaseType === 5" ref="copdForm"></CopdForm>
<ChronicKidneyDiseaseForm v-if="diseaseInfo.diseaseType === 6" ref="chronicKidneyDiseaseForm"></ChronicKidneyDiseaseForm>
<DyslipidemiaForm v-if="diseaseInfo.diseaseType === 7" ref="dyslipidemiaForm"></DyslipidemiaForm>
</div> </div>
</template> </template>
<script> <script>
import HypertensionForm from './components/HypertensionForm.vue' import HypertensionForm from './components/HypertensionForm.vue'
import DiabetesForm from './components/DiabetesForm.vue' import DiabetesForm from './components/DiabetesForm.vue'
import CoronaryHeartDiseaseForm from './components/CoronaryHeartDiseaseForm.vue' import CoronaryHeartDiseaseForm from './components/CoronaryHeartDiseaseForm.vue'
import { addHypertensionForm, addDiabetesForm, addCoronaryHeartDiseaseForm } from '@/api/doctor/separateFU' import StrokeForm from './components/StrokeForm.vue'
import CopdForm from './components/CopdForm.vue'
import ChronicKidneyDiseaseForm from './components/ChronicKidneyDiseaseForm.vue'
import DyslipidemiaForm from './components/DyslipidemiaForm.vue'
import { addHypertensionForm, addDiabetesForm, addCoronaryHeartDiseaseForm, addStrokeForm, addCopdForm, addChronicKidneyDiseaseForm, addDyslipidemiaForm } from '@/api/doctor/separateFU'
export default { export default {
components: { HypertensionForm, DiabetesForm, CoronaryHeartDiseaseForm }, components: { HypertensionForm, DiabetesForm, CoronaryHeartDiseaseForm, StrokeForm, CopdForm, ChronicKidneyDiseaseForm, DyslipidemiaForm },
props: { props: {
baseInfo: { baseInfo: {
type: Object, type: Object,
...@@ -58,6 +66,30 @@ export default { ...@@ -58,6 +66,30 @@ export default {
...form, ...form,
...coronaryHeartDiseaseForm ...coronaryHeartDiseaseForm
}, true) }, true)
} else if (this.diseaseInfo.diseaseType === 4) {
const strokeForm = await this.$refs.strokeForm.submit()
return await addStrokeForm({
...form,
...strokeForm
}, true)
} else if (this.diseaseInfo.diseaseType === 5) {
const copdForm = await this.$refs.copdForm.submit()
return await addCopdForm({
...form,
...copdForm
}, true)
} else if (this.diseaseInfo.diseaseType === 6) {
const chronicKidneyDiseaseForm = await this.$refs.chronicKidneyDiseaseForm.submit()
return await addChronicKidneyDiseaseForm({
...form,
...chronicKidneyDiseaseForm
}, true)
} else if (this.diseaseInfo.diseaseType === 7) {
const dyslipidemiaForm = await this.$refs.dyslipidemiaForm.submit()
return await addDyslipidemiaForm({
...form,
...dyslipidemiaForm
}, true)
} }
} }
} }
......
<template>
<van-form ref="form">
<div class="first-title">
<span class="font-semibold">随访信息</span>
<div class="btn-title">引入数据</div>
</div>
<!-- 随访方式 -->
<div class="label-title mt-2" required>随访方式</div>
<van-field
v-model="form.visitWayName"
isLink
readonly
placeholder="请选择"
:rules="rules.visitWayName"
@click="showVisitWay = true"
class="form-input"
/>
<van-popup v-model:show="showVisitWay" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showVisitWay = false">取消</div>
<div>随访方式(单选)</div>
<div></div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
clearable
column-1
:options="store.getDict('CP00052')"
v-model:value="form.visitWay"
:fieldNames="{ text: 'name', value: 'value' }"
@change="visitWayChange"
/>
</div>
</div>
</van-popup>
<!-- 症状 -->
<div class="label-title mt-2" required>症状</div>
<van-field
v-model="form.symptomName"
isLink
readonly
placeholder="请选择"
:rules="rules.symptomName"
@click="showSymptom = true"
class="form-input"
/>
<van-popup v-model:show="showSymptom" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showSymptom = false">取消</div>
<div>症状(可多选)</div>
<div class="blueColor" @click="symptomConfirm">确定</div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
multiple
column-2
:options="store.getDict('CP00062')"
v-model:value="form.symptom"
:fieldNames="{ text: 'name', value: 'value' }"
@change="form.symptom = checkboxReject(form.symptom, [1])"
/>
</div>
</div>
</van-popup>
<template v-if="(form.symptom || []).includes(99)">
<div class="label-title mt-2">其他症状</div>
<van-field
v-model="form.symptomOther"
placeholder="请填写其他症状"
class="form-input"
/>
</template>
<!-- 血压 -->
<div class="flex items-center justify-between tip-box mt-2 mb-2">
<div class="label-title" required>血压</div>
<BloodPressurePanel :pressureObj="pressureObj" />
</div>
<table class="w-full mb-2">
<tr class="sub-text">
<td>收缩压(SBP)</td>
<td style="width: 1em"></td>
<td>舒张压(DBP)</td>
</tr>
<tr>
<td class="flex items-center">
<van-field
v-model="form.signSystolicPressure"
placeholder="60~300,整数"
:rules="rules.signSystolicPressure"
class="form-input"
>
<template #extra>
<span>mmHg</span>
</template>
</van-field>
</td>
<td class="text-center">
<span class="divide">/</span>
</td>
<td class="flex items-center">
<van-field
v-model="form.signDiastolicPressure"
placeholder="30~300,整数"
:rules="rules.signDiastolicPressure"
class="form-input"
>
<template #extra>
<span>mmHg</span>
</template>
</van-field>
</td>
</tr>
</table>
<BloodPressureBt :pressureObj="pressureObj" @getValue="setPressure">开始测量</BloodPressureBt>
<div class="tip">提示:点击“开始测量”按钮后将自动启动血压计设备,请勿再重复点击设备“开始/停止”按钮。</div>
<!-- 心率 -->
<div class="label-title mt-2" required>心率</div>
<van-field
v-model="form.signHeartRate"
placeholder="10~200,整数"
:rules="rules.signHeartRate"
class="form-input"
>
<template #extra>
<span>次/分</span>
</template>
</van-field>
<!-- 体重 -->
<div class="label-title mt-2" required>体重</div>
<van-field
v-model="form.signWeight"
placeholder="20~500,2位小数"
:rules="rules.signWeight"
class="form-input"
>
<template #extra>
<span>kg</span>
</template>
</van-field>
<!-- 水肿 -->
<div class="label-title mt-2" required>水肿</div>
<van-field :rules="rules.signEdema" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.signEdema"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00067')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 其他体征 -->
<div class="label-title mt-2">其他</div>
<van-field
type="textarea"
v-model="form.signOther"
:maxlength="120"
placeholder="如有其他体征情况请填写在此处,限120个字"
class="form-input"
/>
<!-- 吸烟 -->
<div class="label-title mt-2" required>吸烟</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">是否正在吸烟</div>
<van-field :rules="rules.isSmoking" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isSmoking"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00066')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 100%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">您大约从几岁起开始养成每天或基本每天都吸烟的习惯</div>
<van-field
v-model="form.startSmokeAge"
placeholder="2~100,整数"
:rules="rules.startSmokeAge"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">您最近7天是否吸烟</div>
<van-field style="padding: 0">
<template #input>
<van-radio-group
v-model="form.lastSevenSmoke"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00001')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">日吸烟量</div>
<van-field
v-model="form.daySmoking"
placeholder="0~100,整数"
:rules="rules.daySmoking"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">目标日吸烟量</div>
<van-field
v-model="form.goalDaySmoking"
placeholder="0~100,整数"
:rules="rules.goalDaySmoking"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<!-- 饮酒 -->
<div class="label-title mt-2" required>饮酒</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">是否正在饮酒</div>
<van-field :rules="rules.isDrink" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isDrink"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00068')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 100%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isDrink === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">饮酒频率</div>
<van-field style="padding: 0">
<template #input>
<van-radio-group
v-model="form.drinkCondition"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00069')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 100%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isDrink === 1 || form.isDrink === 2" class="flex mt-2">
<div class="bg-fa">
<div class="label-title" style="color: #262626; font-size: 14px">日饮酒量</div>
<van-field
v-model="form.dayDrink"
placeholder="0~3000,整数"
:rules="rules.dayDrink"
class="card-input"
>
<template #extra>
<span>ml</span>
</template>
</van-field>
</div>
<div class="bg-fa ml-2">
<div class="label-title" style="color: #262626; font-size: 14px">目标日饮酒量</div>
<van-field
v-model="form.goalDayDrink"
placeholder="0~3000,整数"
:rules="rules.goalDayDrink"
class="card-input"
>
<template #extra>
<span>ml</span>
</template>
</van-field>
</div>
</div>
<div v-if="form.isDrink === 1 || form.isDrink === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">饮酒种类</div>
<van-field
label="白酒"
v-model="form.drinkLiquor"
placeholder="0~3000,整数"
:rules="rules.drinkLiquor"
class="card-input"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="啤酒"
v-model="form.drinkBeer"
placeholder="0~3000,整数"
:rules="rules.drinkBeer"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="红酒"
v-model="form.drinkRed"
placeholder="0~3000,整数"
:rules="rules.drinkRed"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="黄酒"
v-model="form.drinkYellow"
placeholder="0~3000,整数"
:rules="rules.drinkYellow"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="其他"
v-model="form.drinkOther"
placeholder="0~3000,整数"
:rules="rules.drinkOther"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
</div>
<!-- 运动 -->
<div class="label-title mt-2" required>运动</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">有无规律活动</div>
<van-field :rules="rules.regularExercise" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.regularExercise"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.regularExercise === 1" class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">运动强度</div>
<van-field :rules="rules.exerciseStrength" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.exerciseStrength"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00070')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">目前运动情况</div>
<div class="flex">
<van-field
v-model="form.nowExerciseWeek"
placeholder="0~50,整数"
:rules="rules.nowExerciseWeek"
class="card-input"
>
<template #extra>
<span>次/周</span>
</template>
</van-field>
<van-field
v-model="form.nowExerciseMinute"
placeholder="0~500,整数"
:rules="rules.nowExerciseMinute"
class="card-input ml-2"
>
<template #extra>
<span>分钟/次</span>
</template>
</van-field>
</div>
</div>
<div class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">目标运动情况</div>
<div class="flex">
<van-field
v-model="form.targetExerciseWeek"
placeholder="0~50,整数"
:rules="rules.targetExerciseWeek"
class="card-input"
>
<template #extra>
<span>次/周</span>
</template>
</van-field>
<van-field
v-model="form.targetExerciseMinute"
placeholder="0~500,整数"
:rules="rules.targetExerciseMinute"
class="card-input ml-2"
>
<template #extra>
<span>分钟/次</span>
</template>
</van-field>
</div>
</div>
<!-- 摄盐情况 -->
<div class="label-title mt-2" required>摄盐情况(咸淡)</div>
<van-field :rules="rules.saltIntake" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.saltIntake"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00071')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 心理调整 -->
<div class="label-title mt-2" required>心理调整</div>
<van-field :rules="rules.psychologicalRecovery" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.psychologicalRecovery"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00072')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 遵医行为 -->
<div class="label-title mt-2" required>遵医行为</div>
<van-field :rules="rules.doctorAdvice" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.doctorAdvice"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00072')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 服药依从性 -->
<div class="label-title mt-2" required>服药依从性</div>
<van-field :rules="rules.medicationCompliance" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.medicationCompliance"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00080')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 药物不良反应 -->
<div class="label-title mt-2" required>药物不良反应</div>
<van-field :rules="rules.drugsAdverse" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.drugsAdverse"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<div v-if="form.drugsAdverse === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">不良反应</div>
<van-field
type="textarea"
v-model="form.drugsAdverseOther"
:maxlength="120"
placeholder="请填写具体描述哪种药物,何种不良反应,限120字"
class="card-input"
/>
</div>
<!-- 此次随访分类 -->
<div class="label-title mt-2" required>此次随访分类</div>
<van-field :rules="rules.visitType" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.visitType"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00085')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 目前诊断 -->
<div class="label-title mt-2" required>目前诊断</div>
<van-field
v-model="form.currentDiagnosisName"
isLink
readonly
placeholder="请选择"
:rules="rules.currentDiagnosisName"
@click="showCurrentDiagnosis = true"
class="form-input"
/>
<van-popup v-model:show="showCurrentDiagnosis" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showCurrentDiagnosis = false">取消</div>
<div>目前诊断(可多选)</div>
<div class="blueColor" @click="currentDiagnosisConfirm">确定</div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
multiple
column-2
:options="store.getDict('CP00086')"
v-model:value="form.currentDiagnosis"
:fieldNames="{ text: 'name', value: 'value' }"
/>
</div>
</div>
</van-popup>
<!-- 转诊 -->
<div class="label-title mt-2" required>转诊</div>
<van-field :rules="rules.isReferral" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isReferral"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<div v-if="form.isReferral === 1" class="bg-fa mt-2">
<div style="background-color: #fff; padding: 8px; border-radius: 8px">
<div style="color: #262626; font-size: 14px">转诊原因</div>
<van-field
type="textarea"
v-model="form.referralReason"
:maxlength="120"
placeholder="请填写具体描述转诊原因,限120字"
class="form-input mt-2"
/>
</div>
<div style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2">
<div style="color: #262626; font-size: 14px">转诊机构</div>
<van-field
v-model="form.referralUnitName"
is-link
readonly
placeholder="请选择"
@click="showReferralUnit = true"
class="form-input mt-2"
/>
<DocUnit
v-model:show="showReferralUnit"
v-model:value="form.referralUnitId"
:valueName="form?.referralUnitName"
@change="referralUnitChange"
/>
</div>
<div style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2">
<div style="color: #262626; font-size: 14px">转诊科室</div>
<van-field
v-model="form.referralOfficeName"
is-link
readonly
placeholder="请选择"
@click="showReferralOffice = true"
class="form-input mt-2"
/>
<DocOffice
v-model:show="showReferralOffice"
v-model:value="form.referralOfficeId"
:unitId="form.referralUnitId"
@change="referralOfficeChange"
/>
</div>
</div>
<!-- 现场随访照片 -->
<div class="label-title mt-2">现场随访照片</div>
<DocImageUpload
description="最多支持上传8个文件,支持上传图片或PDF文件,图片支持上传jpg、png、jpeg格式,文件大小请勿超过10M。"
lengthMessage="抱歉,最多可上传8个文件。"
:imageData="[]"
@change="(ids, option) => form.visitImage = ids"
:maxLength="8"
/>
<!-- 下次随访日期 -->
<div class="label-title" required>下次随访日期</div>
<van-field
v-model="form.nextVisitDate"
isLink
readonly
placeholder="请选择"
:rules="rules.nextVisitDate"
@click="showNextVisitDate = true"
class="form-input"
/>
<van-popup v-model:show="showNextVisitDate" position="bottom">
<van-date-picker
v-model="form._nextVisitDate"
:min-date="nextVisitDateRange.min"
:max-date="nextVisitDateRange.max"
@confirm="nextVisitDateConfirm"
@cancel="showNextVisitDate = false"
/>
</van-popup>
<!-- 随访日期 -->
<div class="label-title mt-2">随访日期</div>
<van-field
v-model="form.visitDate"
isLink
readonly
placeholder="请选择"
:rules="rules.visitDate"
@click="showVisitDate = true"
class="form-input"
/>
<van-popup v-model:show="showVisitDate" position="bottom">
<van-date-picker
v-model="form._visitDate"
:min-date="visitDateRange.min"
:max-date="visitDateRange.max"
@confirm="visitDateConfirm"
@cancel="showVisitDate = false"
/>
</van-popup>
<!-- 随访单位 -->
<div class="label-title mt-2">随访单位</div>
<van-field
v-model="form.visitUnitName"
is-link
readonly
placeholder="请选择"
@click="showVisitUnit = true"
class="form-input mt-2"
/>
<DocUnit
v-model:show="showVisitUnit"
v-model:value="form.visitUnitId"
:valueName="form?.visitUnitName"
@change="visitUnitChange"
/>
<!-- 随访科室 -->
<div class="label-title mt-2">随访科室</div>
<van-field
v-model="form.visitOfficeName"
is-link
readonly
placeholder="请选择"
@click="showVisitOffice = true"
class="form-input mt-2"
/>
<DocOffice
v-model:show="showVisitOffice"
v-model:value="form.visitOfficeId"
:unitId="form.visitUnitId"
@change="visitOfficeChange"
/>
<!-- 随访医生 -->
<div class="label-title mt-2">随访医生</div>
<van-field
v-model="form.visitDoctorName"
is-link
readonly
placeholder="请选择"
@click="showVisitDoctor = true"
class="form-input mt-2"
/>
<DocOfficeDoctor
v-model:show="showVisitDoctor"
:allowClear="false"
v-model:value="form.visitDoctorId"
:unitId="form.visitUnitId"
:officeId="form.visitOfficeId"
@change="(option) => { form.visitDoctorName = option.staffName }"
/>
</van-form>
</template>
<script>
import { useStore } from '@/doctor/store'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn.vue'
import { checkboxReject, calculateBMI, fetchDataHandle } from '@/utils/common'
import BloodPressurePanel from '@/doctor/components/bloodPressure/BloodPressurePanel.vue'
import BloodPressureBt from '@/doctor/components/bloodPressure/BloodPressureBt.vue'
import DocImageUpload from '@/doctor/components/docImageUpload/DocImageUpload.vue'
import DocUnit from '@/doctor/components/docUnit/DocUnit.vue'
import DocOffice from '@/doctor/components/docOffice/DocOffice.vue'
import DocOfficeDoctor from '@/doctor/components/docOfficeDoctor/DocOfficeDoctor.vue'
export default {
components: { CheckBtn, BloodPressurePanel, BloodPressureBt, DocImageUpload, DocUnit, DocOffice, DocOfficeDoctor },
inject: ['pressureObj'],
data() {
return {
store: useStore(),
form: {},
rules: {
visitWayName: [
{ required: true, message: '请选择随访方式' }
],
symptomName: [
{ required: true, message: '请选择症状' }
],
signSystolicPressure: [
{ required: true, message: '请填写收缩压' }
],
signDiastolicPressure: [
{ required: true, message: '请填写舒张压' }
],
signHeight: [
{ required: true, message: '请填写身高' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+(\.\d{1})?$/
if (value && !(regex.test(value) && Number(value) >= 10 && Number(value) <= 300)) {
res = false
}
return res
},
message: `请输入10到300之间的数字,允许一位小数`
}
],
signWeight: [
{ required: true, message: '请填写体重' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+(\.\d{1,2})?$/
if (value && !(regex.test(value) && Number(value) >= 20 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入20到500之间的数字,允许两位小数`
}
],
signEdema: [
{ required: true, message: '请选择' }
],
signHeartRate: [
{ required: true, message: '请填写心率' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 10 && Number(value) <= 200)) {
res = false
}
return res
},
message: `请输入10到200之间的整数`
}
],
isSmoking: [
{ required: true, message: '请选择' }
],
startSmokeAge: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 2 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入2到100之间的整数`
}
],
daySmoking: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入0到100之间的整数`
}
],
goalDaySmoking: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入0到100之间的整数`
}
],
isDrink: [
{ required: true, message: '请选择' }
],
dayDrink: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
goalDayDrink: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkLiquor: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkBeer: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkRed: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkYellow: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkOther: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
regularExercise: [
{ required: true, message: '请选择' }
],
exerciseStrength: [
{ required: true, message: '请选择' }
],
nowExerciseWeek: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) {
res = false
}
return res
},
message: `请输入0到50之间的整数`
}
],
nowExerciseMinute: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入0到500之间的整数`
}
],
targetExerciseWeek: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) {
res = false
}
return res
},
message: `请输入0到50之间的整数`
}
],
targetExerciseMinute: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入0到500之间的整数`
}
],
saltIntake: [
{ required: true, message: '请选择' }
],
psychologicalRecovery: [
{ required: true, message: '请选择' }
],
doctorAdvice: [
{ required: true, message: '请选择' }
],
medicationCompliance: [
{ required: true, message: '请选择' }
],
drugsAdverse: [
{ required: true, message: '请选择' }
],
visitType: [
{ required: true, message: '请选择' }
],
currentDiagnosisName: [
{ required: true, message: '请选择' }
],
isReferral: [
{ required: true, message: '请选择' }
],
nextVisitDate: [
{ required: true, message: '请选择' }
]
},
showVisitWay: false,
showSymptom: false,
// showAuxiliaryExamination: false
showCurrentDiagnosis: false,
showReferralUnit: false,
showReferralOffice: false,
showNextVisitDate: false,
nextVisitDateRange: {
min: undefined,
max: undefined
},
showVisitDate: false,
visitDateRange: {
min: undefined,
max: undefined
},
showVisitUnit: false,
showVisitOffice: false,
showVisitDoctor: false
}
},
methods: {
checkboxReject,
calculateBMI,
visitWayChange() {
this.store.getDict('CP00052').forEach(item => {
if (item.value === this.form.visitWay) {
this.form.visitWayName = item.name
}
})
this.showVisitWay = false
},
symptomConfirm() {
let list = []
this.store.getDict('CP00062').forEach(item => {
let selected = this.form.symptom.filter(e => e === item.value)
if (selected && selected.length) {
list.push(item.name)
}
})
this.form.symptomName = list.join()
this.showSymptom = false
},
currentDiagnosisConfirm() {
let list = []
this.store.getDict('CP00086').forEach(item => {
let selected = this.form.currentDiagnosis.filter(e => e === item.value)
if (selected && selected.length) {
list.push(item.name)
}
})
this.form.currentDiagnosisName = list.join()
this.showCurrentDiagnosis = false
},
setPressure(val) {
if (!val) return
this.form.signSystolicPressure = val.systolicPressure
this.form.signDiastolicPressure = val.diastolicPressure
},
referralUnitChange(option = {}) {
this.form.referralUnitName = option.unitName
},
referralOfficeChange(option = {}) {
this.form.referralOfficeName = option.officeName
},
nextVisitDateConfirm({ selectedValues }) {
this.form.nextVisitDate = selectedValues.join('-')
this.showNextVisitDate = false
},
visitDateConfirm({ selectedValues }) {
this.form.visitDate = selectedValues.join('-')
this.showVisitDate = false
},
visitUnitChange(option = {}) {
this.form.visitUnitName = option.unitName
},
visitOfficeChange(option = {}) {
this.form.visitOfficeName = option.officeName
},
submit() {
return new Promise((resolve, reject) => {
this.$refs.form.validate().then(() => {
const form = fetchDataHandle(this.form, {
symptom: 'arrToStr',
currentDiagnosis: 'arrToStr'
})
resolve(form)
}).catch(e => {
})
})
}
},
watch: {
'form.signHeight': {
handler() {
this.form.signBmi = this.calculateBMI(this.form.signHeight, this.form.signWeight)
}
},
'form.signWeight': {
handler() {
this.form.signBmi = this.calculateBMI(this.form.signHeight, this.form.signWeight)
}
},
}
}
</script>
<style lang="less" scoped>
.first-title {
display: flex;
align-items: center;
.btn-title {
background-color: #F0F3FF;
color: #607FF0;
border-radius: 9999px;
padding: 4px 16px;
margin-left: 8px;
}
}
.label-title {
font-size: 13px;
color: #595959;
font-weight: 500;
margin-bottom: 8px;
&[required] {
&::after {
content: '*';
color: #FF4D4F;
font-weight: bold;
margin-left: 4px;
}
}
}
.form-input {
background-color: #FAFAFA;
padding: 8px 12px;
border-radius: 8px;
}
:deep(.van-cell:after) {
border-bottom: 0px;
}
:deep(.van-popup) {
height: 50% !important;
}
.pop-title {
color: #262626;
font-size: 16px;
font-weight: 600;
}
.greyColor {
color: var(--van-text-color-2);
font-weight: 400;
}
.blueColor {
color: #607FF0;
font-weight: 500;
}
.sub-text {
color: #595959;
font-size: 13px;
font-weight: 400;
padding-bottom: 8px;
}
.tip {
color: #FA8C16;
font-size: 12px;
margin-top: 8px;
line-height: 16px;
}
.bg-fa {
background-color: #FAFAFA;
padding: 8px;
border-radius: 8px;
}
.doc-radio-group-now {
column-gap: 8px;
row-gap: 8px;
background-color: #FAFAFA;
width: 100%;
.van-radio {
background-color: #FFFFFF;
padding: 8px 12px;
border-radius: 8px;
justify-content: space-between;
margin-right: 0;
}
}
.card-input {
padding: 8px 12px;
border-radius: 8px;
}
:deep(.label-mr) {
margin-right: 8px;
}
</style>
\ No newline at end of file
<template>
<van-form ref="form">
<div class="first-title">
<span class="font-semibold">随访信息</span>
<div class="btn-title">引入数据</div>
</div>
<!-- 随访方式 -->
<div class="label-title mt-2" required>随访方式</div>
<van-field
v-model="form.visitWayName"
isLink
readonly
placeholder="请选择"
:rules="rules.visitWayName"
@click="showVisitWay = true"
class="form-input"
/>
<van-popup v-model:show="showVisitWay" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showVisitWay = false">取消</div>
<div>随访方式(单选)</div>
<div></div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
clearable
column-1
:options="store.getDict('CP00052')"
v-model:value="form.visitWay"
:fieldNames="{ text: 'name', value: 'value' }"
@change="visitWayChange"
/>
</div>
</div>
</van-popup>
<!-- 症状 -->
<div class="label-title mt-2" required>症状</div>
<van-field
v-model="form.symptomName"
isLink
readonly
placeholder="请选择"
:rules="rules.symptomName"
@click="showSymptom = true"
class="form-input"
/>
<van-popup v-model:show="showSymptom" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showSymptom = false">取消</div>
<div>症状(可多选)</div>
<div class="blueColor" @click="symptomConfirm">确定</div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
multiple
column-1
:options="store.getDict('CP00061')"
v-model:value="form.symptom"
:fieldNames="{ text: 'name', value: 'value' }"
@change="form.symptom = checkboxReject(form.symptom, [1])"
/>
</div>
</div>
</van-popup>
<template v-if="(form.symptom || []).includes(99)">
<div class="label-title mt-2">其他症状</div>
<van-field
v-model="form.symptomOther"
placeholder="请填写其他症状"
class="form-input"
/>
</template>
<!-- 身高 -->
<div class="label-title mt-2" required>身高</div>
<van-field
v-model="form.signHeight"
placeholder="10~300,1位小数"
:rules="rules.signHeight"
class="form-input"
>
<template #extra>
<span>cm</span>
</template>
</van-field>
<!-- 体重 -->
<div class="label-title mt-2" required>体重</div>
<van-field
v-model="form.signWeight"
placeholder="20~500,2位小数"
:rules="rules.signWeight"
class="form-input"
>
<template #extra>
<span>kg</span>
</template>
</van-field>
<!-- BMI -->
<div class="label-title mt-2">BMI(体质指数)</div>
<van-field
readonly
v-model="form.signBmi"
placeholder="-"
class="form-input"
>
<template #extra>
<span>kg/m²</span>
</template>
</van-field>
<!-- 呼吸频率 -->
<div class="label-title mt-2" required>呼吸频率</div>
<van-field
v-model="form.respiratoryRate"
placeholder="0~100,整数"
:rules="rules.respiratoryRate"
class="form-input"
>
<template #extra>
<span>次/分钟</span>
</template>
</van-field>
<!-- 心率 -->
<div class="label-title mt-2" required>心率</div>
<van-field
v-model="form.signHeartRate"
placeholder="0~300,整数"
:rules="rules.signHeartRate"
class="form-input"
>
<template #extra>
<span>次/分</span>
</template>
</van-field>
<!-- 口唇紫绀 -->
<div class="label-title mt-2" required>口唇紫绀</div>
<van-field :rules="rules.signCyanosis" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.signCyanosis"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 下肢水肿 -->
<div class="label-title mt-2" required>下肢水肿</div>
<van-field :rules="rules.signEdema" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.signEdema"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 外周水肿 -->
<div class="label-title mt-2" required>外周水肿</div>
<van-field :rules="rules.peripheralEdema" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.peripheralEdema"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00193')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 其他体征 -->
<div class="label-title mt-2">其他</div>
<van-field
type="textarea"
v-model="form.signOther"
:maxlength="120"
placeholder="如有其他体征情况请填写在此处,限120个字"
class="form-input"
/>
<!-- 合并症 -->
<div class="label-title mt-2" required>合并症</div>
<van-field
v-model="form.complicationName"
isLink
readonly
placeholder="请选择"
:rules="rules.complicationName"
@click="showComplication = true"
class="form-input"
/>
<van-popup v-model:show="showComplication" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showComplication = false">取消</div>
<div>症状(可多选)</div>
<div class="blueColor" @click="complicationConfirm">确定</div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
multiple
column-2
:options="store.getDict('CP00189')"
v-model:value="form.complication"
:fieldNames="{ text: 'name', value: 'value' }"
@change="form.complication = checkboxReject(form.complication, [1])"
/>
</div>
</div>
</van-popup>
<template v-if="(form.complication || []).includes(8)">
<div class="label-title mt-2">其他合并症</div>
<van-field
v-model="form.complicationOther"
placeholder="请填写其他症状"
class="form-input"
/>
</template>
<!-- 吸烟 -->
<div class="label-title mt-2" required>吸烟</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">是否正在吸烟</div>
<van-field :rules="rules.isSmoking" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isSmoking"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00066')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 100%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">您大约从几岁起开始养成每天或基本每天都吸烟的习惯</div>
<van-field
v-model="form.startSmokeAge"
placeholder="2~100,整数"
:rules="rules.startSmokeAge"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">您最近7天是否吸烟</div>
<van-field style="padding: 0">
<template #input>
<van-radio-group
v-model="form.lastSevenSmoke"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00001')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">日吸烟量</div>
<van-field
v-model="form.daySmoking"
placeholder="0~100,整数"
:rules="rules.daySmoking"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">目标日吸烟量</div>
<van-field
v-model="form.goalDaySmoking"
placeholder="0~100,整数"
:rules="rules.goalDaySmoking"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<!-- 运动 -->
<div class="label-title mt-2" required>运动</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">有无规律活动</div>
<van-field :rules="rules.regularExercise" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.regularExercise"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.regularExercise === 1" class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">运动强度</div>
<van-field :rules="rules.exerciseStrength" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.exerciseStrength"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00070')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">目前运动情况</div>
<div class="flex">
<van-field
v-model="form.nowExerciseWeek"
placeholder="0~50,整数"
:rules="rules.nowExerciseWeek"
class="card-input"
>
<template #extra>
<span>次/周</span>
</template>
</van-field>
<van-field
v-model="form.nowExerciseMinute"
placeholder="0~500,整数"
:rules="rules.nowExerciseMinute"
class="card-input ml-2"
>
<template #extra>
<span>分钟/次</span>
</template>
</van-field>
</div>
</div>
<div class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">目标运动情况</div>
<div class="flex">
<van-field
v-model="form.targetExerciseWeek"
placeholder="0~50,整数"
:rules="rules.targetExerciseWeek"
class="card-input"
>
<template #extra>
<span>次/周</span>
</template>
</van-field>
<van-field
v-model="form.targetExerciseMinute"
placeholder="0~500,整数"
:rules="rules.targetExerciseMinute"
class="card-input ml-2"
>
<template #extra>
<span>分钟/次</span>
</template>
</van-field>
</div>
</div>
<!-- 呼吸锻炼 -->
<div class="label-title mt-2" required>呼吸锻炼</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">有无呼吸锻炼</div>
<van-field :rules="rules.isBreathExercise" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isBreathExercise"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isBreathExercise === 1" class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">呼吸锻炼频率</div>
<div class="flex">
<van-field
v-model="form.breathExerciseWeek"
placeholder="0~50,整数"
:rules="rules.breathExerciseWeek"
class="card-input"
>
<template #extra>
<span>次/周</span>
</template>
</van-field>
<van-field
v-model="form.breathExerciseMinute"
placeholder="0~120,整数"
:rules="rules.breathExerciseMinute"
class="card-input ml-2"
>
<template #extra>
<span>分钟/次</span>
</template>
</van-field>
</div>
</div>
<!-- 健康教育 -->
<div class="label-title mt-2" required>健康教育</div>
<van-field :rules="rules.healthEducation" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.healthEducation"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 心理调整 -->
<div class="label-title mt-2" required>心理调整</div>
<van-field :rules="rules.psychologicalRecovery" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.psychologicalRecovery"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00072')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 遵医行为 -->
<div class="label-title mt-2" required>遵医行为</div>
<van-field :rules="rules.doctorAdvice" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.doctorAdvice"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00072')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 疫苗免疫史 -->
<div class="label-title mt-2" required>疫苗免疫史</div>
<van-field :rules="rules.vaccinesHistory" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.vaccinesHistory"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<template v-if="form.vaccinesHistory === 1">
<div class="label-title mt-2" required>疫苗名称</div>
<van-field
v-model="form.vaccinesHistoryHaveName"
isLink
readonly
placeholder="请选择"
:rules="rules.vaccinesHistoryHaveName"
@click="showVaccinesHistoryHave = true"
class="form-input"
/>
<van-popup v-model:show="showVaccinesHistoryHave" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showVaccinesHistoryHave = false">取消</div>
<div>症状(可多选)</div>
<div class="blueColor" @click="vaccinesHistoryHaveConfirm">确定</div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
multiple
column-1
:options="store.getDict('CP00190')"
v-model:value="form.vaccinesHistoryHave"
:fieldNames="{ text: 'name', value: 'value' }"
/>
</div>
</div>
</van-popup>
</template>
<!-- 最近三个月内是否有急性加重情况 -->
<div class="label-title mt-2" required>最近三个月内是否有急性加重情况</div>
<van-field :rules="rules.acuteExacerbation" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.acuteExacerbation"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<div v-if="form.acuteExacerbation === 1" class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">处理方式</div>
<van-field :rules="rules.handlingMethod" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.handlingMethod"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00191')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 31%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.acuteExacerbation === 1 && form.handlingMethod === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">住院医院级别</div>
<van-field style="padding: 0">
<template #input>
<van-radio-group
v-model="form.hospitalLevel"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00192')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<!-- 服药依从性 -->
<div class="label-title mt-2" required>服药依从性</div>
<van-field :rules="rules.medicationCompliance" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.medicationCompliance"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00080')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 药物不良反应 -->
<div class="label-title mt-2" required>药物不良反应</div>
<van-field :rules="rules.drugsAdverse" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.drugsAdverse"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<div v-if="form.drugsAdverse === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">不良反应</div>
<van-field
type="textarea"
v-model="form.drugsAdverseOther"
:maxlength="120"
placeholder="请填写具体描述哪种药物,何种不良反应,限120字"
class="card-input"
/>
</div>
<!-- 此次随访分类 -->
<div class="label-title mt-2" required>此次随访分类</div>
<van-field :rules="rules.visitType" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.visitType"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00085')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 目前诊断 -->
<div class="label-title mt-2" required>目前诊断</div>
<van-field
v-model="form.currentDiagnosisName"
isLink
readonly
placeholder="请选择"
:rules="rules.currentDiagnosisName"
@click="showCurrentDiagnosis = true"
class="form-input"
/>
<van-popup v-model:show="showCurrentDiagnosis" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showCurrentDiagnosis = false">取消</div>
<div>目前诊断(可多选)</div>
<div class="blueColor" @click="currentDiagnosisConfirm">确定</div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
multiple
column-2
:options="store.getDict('CP00086')"
v-model:value="form.currentDiagnosis"
:fieldNames="{ text: 'name', value: 'value' }"
/>
</div>
</div>
</van-popup>
<!-- 家庭氧疗 -->
<div class="label-title mt-2">家庭氧疗</div>
<van-field
label="每日"
label-width="36px"
v-model="form.otEveryday"
placeholder="0~24,整数"
:rules="rules.otEveryday"
class="form-input"
>
<template #extra>
<span>小时</span>
</template>
</van-field>
<van-field
label="氧流量"
label-width="48px"
v-model="form.otFlow"
placeholder="0~10,整数"
:rules="rules.otFlow"
class="form-input mt-2"
>
<template #extra>
<span>L</span>
</template>
</van-field>
<div class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">副作用</div>
<van-field style="padding: 0">
<template #input>
<van-radio-group
v-model="form.otSideEffect"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<van-field
v-if="form.otSideEffect === 1"
v-model="form.otSideEffectHave"
placeholder="请填写副作用"
class="card-input mt-2"
/>
</div>
<!-- 无创呼吸机使用 -->
<div class="label-title mt-2" required>无创呼吸机使用</div>
<van-field
label="每日"
label-width="36px"
v-model="form.nippvEveryday"
placeholder="0~24,整数"
:rules="rules.nippvEveryday"
class="form-input"
>
<template #extra>
<span>小时</span>
</template>
</van-field>
<div class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">副作用</div>
<van-field style="padding: 0">
<template #input>
<van-radio-group
v-model="form.nippvSideEffect"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<van-field
v-if="form.nippvSideEffect === 1"
v-model="form.nippvSideEffectHave"
placeholder="请填写副作用"
class="card-input mt-2"
/>
</div>
<!-- 转诊 -->
<div class="label-title mt-2" required>转诊</div>
<van-field :rules="rules.isReferral" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isReferral"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<div v-if="form.isReferral === 1" class="bg-fa mt-2">
<div style="background-color: #fff; padding: 8px; border-radius: 8px">
<div style="color: #262626; font-size: 14px">转诊原因</div>
<van-field
type="textarea"
v-model="form.referralReason"
:maxlength="120"
placeholder="请填写具体描述转诊原因,限120字"
class="form-input mt-2"
/>
</div>
<div style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2">
<div style="color: #262626; font-size: 14px">转诊机构</div>
<van-field
v-model="form.referralUnitName"
is-link
readonly
placeholder="请选择"
@click="showReferralUnit = true"
class="form-input mt-2"
/>
<DocUnit
v-model:show="showReferralUnit"
v-model:value="form.referralUnitId"
:valueName="form?.referralUnitName"
@change="referralUnitChange"
/>
</div>
<div style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2">
<div style="color: #262626; font-size: 14px">转诊科室</div>
<van-field
v-model="form.referralOfficeName"
is-link
readonly
placeholder="请选择"
@click="showReferralOffice = true"
class="form-input mt-2"
/>
<DocOffice
v-model:show="showReferralOffice"
v-model:value="form.referralOfficeId"
:unitId="form.referralUnitId"
@change="referralOfficeChange"
/>
</div>
</div>
<!-- 现场随访照片 -->
<div class="label-title mt-2">现场随访照片</div>
<DocImageUpload
description="最多支持上传8个文件,支持上传图片或PDF文件,图片支持上传jpg、png、jpeg格式,文件大小请勿超过10M。"
lengthMessage="抱歉,最多可上传8个文件。"
:imageData="[]"
@change="(ids, option) => form.visitImage = ids"
:maxLength="8"
/>
<!-- 下次随访日期 -->
<div class="label-title" required>下次随访日期</div>
<van-field
v-model="form.nextVisitDate"
isLink
readonly
placeholder="请选择"
:rules="rules.nextVisitDate"
@click="showNextVisitDate = true"
class="form-input"
/>
<van-popup v-model:show="showNextVisitDate" position="bottom">
<van-date-picker
v-model="form._nextVisitDate"
:min-date="nextVisitDateRange.min"
:max-date="nextVisitDateRange.max"
@confirm="nextVisitDateConfirm"
@cancel="showNextVisitDate = false"
/>
</van-popup>
<!-- 随访日期 -->
<div class="label-title mt-2">随访日期</div>
<van-field
v-model="form.visitDate"
isLink
readonly
placeholder="请选择"
:rules="rules.visitDate"
@click="showVisitDate = true"
class="form-input"
/>
<van-popup v-model:show="showVisitDate" position="bottom">
<van-date-picker
v-model="form._visitDate"
:min-date="visitDateRange.min"
:max-date="visitDateRange.max"
@confirm="visitDateConfirm"
@cancel="showVisitDate = false"
/>
</van-popup>
<!-- 随访单位 -->
<div class="label-title mt-2">随访单位</div>
<van-field
v-model="form.visitUnitName"
is-link
readonly
placeholder="请选择"
@click="showVisitUnit = true"
class="form-input mt-2"
/>
<DocUnit
v-model:show="showVisitUnit"
v-model:value="form.visitUnitId"
:valueName="form?.visitUnitName"
@change="visitUnitChange"
/>
<!-- 随访科室 -->
<div class="label-title mt-2">随访科室</div>
<van-field
v-model="form.visitOfficeName"
is-link
readonly
placeholder="请选择"
@click="showVisitOffice = true"
class="form-input mt-2"
/>
<DocOffice
v-model:show="showVisitOffice"
v-model:value="form.visitOfficeId"
:unitId="form.visitUnitId"
@change="visitOfficeChange"
/>
<!-- 随访医生 -->
<div class="label-title mt-2">随访医生</div>
<van-field
v-model="form.visitDoctorName"
is-link
readonly
placeholder="请选择"
@click="showVisitDoctor = true"
class="form-input mt-2"
/>
<DocOfficeDoctor
v-model:show="showVisitDoctor"
:allowClear="false"
v-model:value="form.visitDoctorId"
:unitId="form.visitUnitId"
:officeId="form.visitOfficeId"
@change="(option) => { form.visitDoctorName = option.staffName }"
/>
</van-form>
</template>
<script>
import { useStore } from '@/doctor/store'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn.vue'
import { checkboxReject, calculateBMI, fetchDataHandle } from '@/utils/common'
import BloodPressurePanel from '@/doctor/components/bloodPressure/BloodPressurePanel.vue'
import BloodPressureBt from '@/doctor/components/bloodPressure/BloodPressureBt.vue'
import DocImageUpload from '@/doctor/components/docImageUpload/DocImageUpload.vue'
import DocUnit from '@/doctor/components/docUnit/DocUnit.vue'
import DocOffice from '@/doctor/components/docOffice/DocOffice.vue'
import DocOfficeDoctor from '@/doctor/components/docOfficeDoctor/DocOfficeDoctor.vue'
export default {
components: { CheckBtn, BloodPressurePanel, BloodPressureBt, DocImageUpload, DocUnit, DocOffice, DocOfficeDoctor },
inject: ['pressureObj'],
data() {
return {
store: useStore(),
form: {},
rules: {
visitWayName: [
{ required: true, message: '请选择随访方式' }
],
symptomName: [
{ required: true, message: '请选择症状' }
],
signHeight: [
{ required: true, message: '请填写身高' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+(\.\d{1})?$/
if (value && !(regex.test(value) && Number(value) >= 10 && Number(value) <= 300)) {
res = false
}
return res
},
message: `请输入10到300之间的数字,允许一位小数`
}
],
signWeight: [
{ required: true, message: '请填写体重' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+(\.\d{1,2})?$/
if (value && !(regex.test(value) && Number(value) >= 20 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入20到500之间的数字,允许两位小数`
}
],
respiratoryRate: [
{ required: true, message: '请填写呼吸频率' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入0到100之间的整数`
}
],
signHeartRate: [
{ required: true, message: '请填写心率' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 300)) {
res = false
}
return res
},
message: `请输入0到300之间的整数`
}
],
signCyanosis: [
{ required: true, message: '请选择' }
],
signEdema: [
{ required: true, message: '请选择' }
],
peripheralEdema: [
{ required: true, message: '请选择' }
],
complicationName: [
{ required: true, message: '请选择' }
],
isSmoking: [
{ required: true, message: '请选择' }
],
startSmokeAge: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 2 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入2到100之间的整数`
}
],
daySmoking: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入0到100之间的整数`
}
],
goalDaySmoking: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入0到100之间的整数`
}
],
regularExercise: [
{ required: true, message: '请选择' }
],
exerciseStrength: [
{ required: true, message: '请选择' }
],
nowExerciseWeek: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) {
res = false
}
return res
},
message: `请输入0到50之间的整数`
}
],
nowExerciseMinute: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入0到500之间的整数`
}
],
targetExerciseWeek: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) {
res = false
}
return res
},
message: `请输入0到50之间的整数`
}
],
targetExerciseMinute: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入0到500之间的整数`
}
],
isBreathExercise: [
{ required: true, message: '请选择' }
],
breathExerciseWeek: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) {
res = false
}
return res
},
message: `请输入0到50之间的整数`
}
],
breathExerciseMinute: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 120)) {
res = false
}
return res
},
message: `请输入0到120之间的整数`
}
],
saltIntake: [
{ required: true, message: '请选择' }
],
psychologicalRecovery: [
{ required: true, message: '请选择' }
],
doctorAdvice: [
{ required: true, message: '请选择' }
],
vaccinesHistory: [
{ required: true, message: '请选择' }
],
acuteExacerbation: [
{ required: true, message: '请选择' }
],
handlingMethod: [
{ required: true, message: '请选择' }
],
medicationCompliance: [
{ required: true, message: '请选择' }
],
drugsAdverse: [
{ required: true, message: '请选择' }
],
visitType: [
{ required: true, message: '请选择' }
],
currentDiagnosisName: [
{ required: true, message: '请选择' }
],
isReferral: [
{ required: true, message: '请选择' }
],
nextVisitDate: [
{ required: true, message: '请选择' }
]
},
showVisitWay: false,
showSymptom: false,
showComplication: false,
showVaccinesHistoryHave: false,
// showAuxiliaryExamination: false
showCurrentDiagnosis: false,
showReferralUnit: false,
showReferralOffice: false,
showNextVisitDate: false,
nextVisitDateRange: {
min: undefined,
max: undefined
},
showVisitDate: false,
visitDateRange: {
min: undefined,
max: undefined
},
showVisitUnit: false,
showVisitOffice: false,
showVisitDoctor: false
}
},
methods: {
checkboxReject,
calculateBMI,
visitWayChange() {
this.store.getDict('CP00052').forEach(item => {
if (item.value === this.form.visitWay) {
this.form.visitWayName = item.name
}
})
this.showVisitWay = false
},
symptomConfirm() {
let list = []
this.store.getDict('CP00061').forEach(item => {
let selected = this.form.symptom.filter(e => e === item.value)
if (selected && selected.length) {
list.push(item.name)
}
})
this.form.symptomName = list.join()
this.showSymptom = false
},
complicationConfirm() {
let list = []
this.store.getDict('CP00189').forEach(item => {
let selected = this.form.complication.filter(e => e === item.value)
if (selected && selected.length) {
list.push(item.name)
}
})
this.form.complicationName = list.join()
this.showComplication = false
},
vaccinesHistoryHaveConfirm() {
let list = []
this.store.getDict('CP00190').forEach(item => {
let selected = this.form.vaccinesHistoryHave.filter(e => e === item.value)
if (selected && selected.length) {
list.push(item.name)
}
})
this.form.vaccinesHistoryHaveName = list.join()
this.showVaccinesHistoryHave = false
},
currentDiagnosisConfirm() {
let list = []
this.store.getDict('CP00086').forEach(item => {
let selected = this.form.currentDiagnosis.filter(e => e === item.value)
if (selected && selected.length) {
list.push(item.name)
}
})
this.form.currentDiagnosisName = list.join()
this.showCurrentDiagnosis = false
},
referralUnitChange(option = {}) {
this.form.referralUnitName = option.unitName
},
referralOfficeChange(option = {}) {
this.form.referralOfficeName = option.officeName
},
nextVisitDateConfirm({ selectedValues }) {
this.form.nextVisitDate = selectedValues.join('-')
this.showNextVisitDate = false
},
visitDateConfirm({ selectedValues }) {
this.form.visitDate = selectedValues.join('-')
this.showVisitDate = false
},
visitUnitChange(option = {}) {
this.form.visitUnitName = option.unitName
},
visitOfficeChange(option = {}) {
this.form.visitOfficeName = option.officeName
},
submit() {
return new Promise((resolve, reject) => {
this.$refs.form.validate().then(() => {
const form = fetchDataHandle(this.form, {
symptom: 'arrToStr',
complication: 'arrToStr',
currentDiagnosis: 'arrToStr'
})
resolve(form)
}).catch(e => {
})
})
}
},
watch: {
'form.signHeight': {
handler() {
this.form.signBmi = this.calculateBMI(this.form.signHeight, this.form.signWeight)
}
},
'form.signWeight': {
handler() {
this.form.signBmi = this.calculateBMI(this.form.signHeight, this.form.signWeight)
}
},
}
}
</script>
<style lang="less" scoped>
.first-title {
display: flex;
align-items: center;
.btn-title {
background-color: #F0F3FF;
color: #607FF0;
border-radius: 9999px;
padding: 4px 16px;
margin-left: 8px;
}
}
.label-title {
font-size: 13px;
color: #595959;
font-weight: 500;
margin-bottom: 8px;
&[required] {
&::after {
content: '*';
color: #FF4D4F;
font-weight: bold;
margin-left: 4px;
}
}
}
.form-input {
background-color: #FAFAFA;
padding: 8px 12px;
border-radius: 8px;
}
:deep(.van-cell:after) {
border-bottom: 0px;
}
:deep(.van-popup) {
height: 50% !important;
}
.pop-title {
color: #262626;
font-size: 16px;
font-weight: 600;
}
.greyColor {
color: var(--van-text-color-2);
font-weight: 400;
}
.blueColor {
color: #607FF0;
font-weight: 500;
}
.sub-text {
color: #595959;
font-size: 13px;
font-weight: 400;
padding-bottom: 8px;
}
.tip {
color: #FA8C16;
font-size: 12px;
margin-top: 8px;
line-height: 16px;
}
.bg-fa {
background-color: #FAFAFA;
padding: 8px;
border-radius: 8px;
}
.doc-radio-group-now {
column-gap: 8px;
row-gap: 8px;
background-color: #FAFAFA;
width: 100%;
.van-radio {
background-color: #FFFFFF;
padding: 8px 12px;
border-radius: 8px;
justify-content: space-between;
margin-right: 0;
}
}
.card-input {
padding: 8px 12px;
border-radius: 8px;
}
:deep(.label-mr) {
margin-right: 8px;
}
</style>
\ No newline at end of file
<template>
<van-form ref="form">
<div class="first-title">
<span class="font-semibold">随访信息</span>
<div class="btn-title">引入数据</div>
</div>
<!-- 随访方式 -->
<div class="label-title mt-2" required>随访方式</div>
<van-field
v-model="form.visitWayName"
isLink
readonly
placeholder="请选择"
:rules="rules.visitWayName"
@click="showVisitWay = true"
class="form-input"
/>
<van-popup v-model:show="showVisitWay" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showVisitWay = false">取消</div>
<div>随访方式(单选)</div>
<div></div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
clearable
column-1
:options="store.getDict('CP00052')"
v-model:value="form.visitWay"
:fieldNames="{ text: 'name', value: 'value' }"
@change="visitWayChange"
/>
</div>
</div>
</van-popup>
<!-- 症状 -->
<div class="label-title mt-2" required>症状</div>
<van-field
v-model="form.symptomName"
isLink
readonly
placeholder="请选择"
:rules="rules.symptomName"
@click="showSymptom = true"
class="form-input"
/>
<van-popup v-model:show="showSymptom" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showSymptom = false">取消</div>
<div>症状(可多选)</div>
<div class="blueColor" @click="symptomConfirm">确定</div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
multiple
column-2
:options="store.getDict('CP00064')"
v-model:value="form.symptom"
:fieldNames="{ text: 'name', value: 'value' }"
@change="form.symptom = checkboxReject(form.symptom, [1])"
/>
</div>
</div>
</van-popup>
<template v-if="(form.symptom || []).includes(99)">
<div class="label-title mt-2">其他症状</div>
<van-field
v-model="form.symptomOther"
placeholder="请填写其他症状"
class="form-input"
/>
</template>
<!-- 血压 -->
<div class="flex items-center justify-between tip-box mt-2 mb-2">
<div class="label-title" required>血压</div>
<BloodPressurePanel :pressureObj="pressureObj" />
</div>
<table class="w-full mb-2">
<tr class="sub-text">
<td>收缩压(SBP)</td>
<td style="width: 1em"></td>
<td>舒张压(DBP)</td>
</tr>
<tr>
<td class="flex items-center">
<van-field
v-model="form.signSystolicPressure"
placeholder="60~300,整数"
:rules="rules.signSystolicPressure"
class="form-input"
>
<template #extra>
<span>mmHg</span>
</template>
</van-field>
</td>
<td class="text-center">
<span class="divide">/</span>
</td>
<td class="flex items-center">
<van-field
v-model="form.signDiastolicPressure"
placeholder="30~300,整数"
:rules="rules.signDiastolicPressure"
class="form-input"
>
<template #extra>
<span>mmHg</span>
</template>
</van-field>
</td>
</tr>
</table>
<BloodPressureBt :pressureObj="pressureObj" @getValue="setPressure">开始测量</BloodPressureBt>
<div class="tip">提示:点击“开始测量”按钮后将自动启动血压计设备,请勿再重复点击设备“开始/停止”按钮。</div>
<!-- 身高 -->
<div class="label-title mt-2" required>身高</div>
<van-field
v-model="form.signHeight"
placeholder="10~300,1位小数"
:rules="rules.signHeight"
class="form-input"
>
<template #extra>
<span>cm</span>
</template>
</van-field>
<!-- 体重 -->
<div class="label-title mt-2" required>体重</div>
<van-field
v-model="form.signWeight"
placeholder="20~500,2位小数"
:rules="rules.signWeight"
class="form-input"
>
<template #extra>
<span>kg</span>
</template>
</van-field>
<!-- BMI -->
<div class="label-title mt-2">BMI(体质指数)</div>
<van-field
readonly
v-model="form.signBmi"
placeholder="-"
class="form-input"
>
<template #extra>
<span>kg/m²</span>
</template>
</van-field>
<!-- 心率 -->
<div class="label-title mt-2" required>心率</div>
<van-field
v-model="form.signHeartRate"
placeholder="10~200,整数"
:rules="rules.signHeartRate"
class="form-input"
>
<template #extra>
<span>次/分</span>
</template>
</van-field>
<!-- 其他体征 -->
<div class="label-title mt-2">其他</div>
<van-field
type="textarea"
v-model="form.signOther"
:maxlength="120"
placeholder="如有其他体征情况请填写在此处,限120个字"
class="form-input"
/>
<!-- 吸烟 -->
<div class="label-title mt-2" required>吸烟</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">是否正在吸烟</div>
<van-field :rules="rules.isSmoking" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isSmoking"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00066')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 100%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">您大约从几岁起开始养成每天或基本每天都吸烟的习惯</div>
<van-field
v-model="form.startSmokeAge"
placeholder="2~100,整数"
:rules="rules.startSmokeAge"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">您最近7天是否吸烟</div>
<van-field style="padding: 0">
<template #input>
<van-radio-group
v-model="form.lastSevenSmoke"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00001')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">日吸烟量</div>
<van-field
v-model="form.daySmoking"
placeholder="0~100,整数"
:rules="rules.daySmoking"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">目标日吸烟量</div>
<van-field
v-model="form.goalDaySmoking"
placeholder="0~100,整数"
:rules="rules.goalDaySmoking"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<!-- 饮酒 -->
<div class="label-title mt-2" required>饮酒</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">是否正在饮酒</div>
<van-field :rules="rules.isDrink" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isDrink"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00068')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 100%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isDrink === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">饮酒频率</div>
<van-field style="padding: 0">
<template #input>
<van-radio-group
v-model="form.drinkCondition"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00069')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 100%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isDrink === 1 || form.isDrink === 2" class="flex mt-2">
<div class="bg-fa">
<div class="label-title" style="color: #262626; font-size: 14px">日饮酒量</div>
<van-field
v-model="form.dayDrink"
placeholder="0~3000,整数"
:rules="rules.dayDrink"
class="card-input"
>
<template #extra>
<span>ml</span>
</template>
</van-field>
</div>
<div class="bg-fa ml-2">
<div class="label-title" style="color: #262626; font-size: 14px">目标日饮酒量</div>
<van-field
v-model="form.goalDayDrink"
placeholder="0~3000,整数"
:rules="rules.goalDayDrink"
class="card-input"
>
<template #extra>
<span>ml</span>
</template>
</van-field>
</div>
</div>
<div v-if="form.isDrink === 1 || form.isDrink === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">饮酒种类</div>
<van-field
label="白酒"
v-model="form.drinkLiquor"
placeholder="0~3000,整数"
:rules="rules.drinkLiquor"
class="card-input"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="啤酒"
v-model="form.drinkBeer"
placeholder="0~3000,整数"
:rules="rules.drinkBeer"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="红酒"
v-model="form.drinkRed"
placeholder="0~3000,整数"
:rules="rules.drinkRed"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="黄酒"
v-model="form.drinkYellow"
placeholder="0~3000,整数"
:rules="rules.drinkYellow"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="其他"
v-model="form.drinkOther"
placeholder="0~3000,整数"
:rules="rules.drinkOther"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
</div>
<!-- 运动 -->
<div class="label-title mt-2" required>运动</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">有无规律活动</div>
<van-field :rules="rules.regularExercise" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.regularExercise"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.regularExercise === 1" class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">运动强度</div>
<van-field :rules="rules.exerciseStrength" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.exerciseStrength"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00070')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">目前运动情况</div>
<div class="flex">
<van-field
v-model="form.nowExerciseWeek"
placeholder="0~50,整数"
:rules="rules.nowExerciseWeek"
class="card-input"
>
<template #extra>
<span>次/周</span>
</template>
</van-field>
<van-field
v-model="form.nowExerciseMinute"
placeholder="0~500,整数"
:rules="rules.nowExerciseMinute"
class="card-input ml-2"
>
<template #extra>
<span>分钟/次</span>
</template>
</van-field>
</div>
</div>
<div class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">目标运动情况</div>
<div class="flex">
<van-field
v-model="form.targetExerciseWeek"
placeholder="0~50,整数"
:rules="rules.targetExerciseWeek"
class="card-input"
>
<template #extra>
<span>次/周</span>
</template>
</van-field>
<van-field
v-model="form.targetExerciseMinute"
placeholder="0~500,整数"
:rules="rules.targetExerciseMinute"
class="card-input ml-2"
>
<template #extra>
<span>分钟/次</span>
</template>
</van-field>
</div>
</div>
<!-- 摄盐情况 -->
<div class="label-title mt-2" required>摄盐情况(咸淡)</div>
<van-field :rules="rules.saltIntake" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.saltIntake"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00071')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 心理调整 -->
<div class="label-title mt-2" required>心理调整</div>
<van-field :rules="rules.psychologicalRecovery" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.psychologicalRecovery"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00072')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 遵医行为 -->
<div class="label-title mt-2" required>遵医行为</div>
<van-field :rules="rules.doctorAdvice" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.doctorAdvice"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00072')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 服药依从性 -->
<div class="label-title mt-2" required>服药依从性</div>
<van-field :rules="rules.medicationCompliance" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.medicationCompliance"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00080')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 药物不良反应 -->
<div class="label-title mt-2" required>药物不良反应</div>
<van-field :rules="rules.drugsAdverse" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.drugsAdverse"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<div v-if="form.drugsAdverse === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">不良反应</div>
<van-field
type="textarea"
v-model="form.drugsAdverseOther"
:maxlength="120"
placeholder="请填写具体描述哪种药物,何种不良反应,限120字"
class="card-input"
/>
</div>
<!-- 此次随访分类 -->
<div class="label-title mt-2" required>此次随访分类</div>
<van-field :rules="rules.visitType" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.visitType"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00085')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 目前诊断 -->
<div class="label-title mt-2" required>目前诊断</div>
<van-field
v-model="form.currentDiagnosisName"
isLink
readonly
placeholder="请选择"
:rules="rules.currentDiagnosisName"
@click="showCurrentDiagnosis = true"
class="form-input"
/>
<van-popup v-model:show="showCurrentDiagnosis" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showCurrentDiagnosis = false">取消</div>
<div>目前诊断(可多选)</div>
<div class="blueColor" @click="currentDiagnosisConfirm">确定</div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
multiple
column-2
:options="store.getDict('CP00086')"
v-model:value="form.currentDiagnosis"
:fieldNames="{ text: 'name', value: 'value' }"
/>
</div>
</div>
</van-popup>
<!-- 转诊 -->
<div class="label-title mt-2" required>转诊</div>
<van-field :rules="rules.isReferral" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isReferral"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<div v-if="form.isReferral === 1" class="bg-fa mt-2">
<div style="background-color: #fff; padding: 8px; border-radius: 8px">
<div style="color: #262626; font-size: 14px">转诊原因</div>
<van-field
type="textarea"
v-model="form.referralReason"
:maxlength="120"
placeholder="请填写具体描述转诊原因,限120字"
class="form-input mt-2"
/>
</div>
<div style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2">
<div style="color: #262626; font-size: 14px">转诊机构</div>
<van-field
v-model="form.referralUnitName"
is-link
readonly
placeholder="请选择"
@click="showReferralUnit = true"
class="form-input mt-2"
/>
<DocUnit
v-model:show="showReferralUnit"
v-model:value="form.referralUnitId"
:valueName="form?.referralUnitName"
@change="referralUnitChange"
/>
</div>
<div style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2">
<div style="color: #262626; font-size: 14px">转诊科室</div>
<van-field
v-model="form.referralOfficeName"
is-link
readonly
placeholder="请选择"
@click="showReferralOffice = true"
class="form-input mt-2"
/>
<DocOffice
v-model:show="showReferralOffice"
v-model:value="form.referralOfficeId"
:unitId="form.referralUnitId"
@change="referralOfficeChange"
/>
</div>
</div>
<!-- 现场随访照片 -->
<div class="label-title mt-2">现场随访照片</div>
<DocImageUpload
description="最多支持上传8个文件,支持上传图片或PDF文件,图片支持上传jpg、png、jpeg格式,文件大小请勿超过10M。"
lengthMessage="抱歉,最多可上传8个文件。"
:imageData="[]"
@change="(ids, option) => form.visitImage = ids"
:maxLength="8"
/>
<!-- 下次随访日期 -->
<div class="label-title" required>下次随访日期</div>
<van-field
v-model="form.nextVisitDate"
isLink
readonly
placeholder="请选择"
:rules="rules.nextVisitDate"
@click="showNextVisitDate = true"
class="form-input"
/>
<van-popup v-model:show="showNextVisitDate" position="bottom">
<van-date-picker
v-model="form._nextVisitDate"
:min-date="nextVisitDateRange.min"
:max-date="nextVisitDateRange.max"
@confirm="nextVisitDateConfirm"
@cancel="showNextVisitDate = false"
/>
</van-popup>
<!-- 随访日期 -->
<div class="label-title mt-2">随访日期</div>
<van-field
v-model="form.visitDate"
isLink
readonly
placeholder="请选择"
:rules="rules.visitDate"
@click="showVisitDate = true"
class="form-input"
/>
<van-popup v-model:show="showVisitDate" position="bottom">
<van-date-picker
v-model="form._visitDate"
:min-date="visitDateRange.min"
:max-date="visitDateRange.max"
@confirm="visitDateConfirm"
@cancel="showVisitDate = false"
/>
</van-popup>
<!-- 随访单位 -->
<div class="label-title mt-2">随访单位</div>
<van-field
v-model="form.visitUnitName"
is-link
readonly
placeholder="请选择"
@click="showVisitUnit = true"
class="form-input mt-2"
/>
<DocUnit
v-model:show="showVisitUnit"
v-model:value="form.visitUnitId"
:valueName="form?.visitUnitName"
@change="visitUnitChange"
/>
<!-- 随访科室 -->
<div class="label-title mt-2">随访科室</div>
<van-field
v-model="form.visitOfficeName"
is-link
readonly
placeholder="请选择"
@click="showVisitOffice = true"
class="form-input mt-2"
/>
<DocOffice
v-model:show="showVisitOffice"
v-model:value="form.visitOfficeId"
:unitId="form.visitUnitId"
@change="visitOfficeChange"
/>
<!-- 随访医生 -->
<div class="label-title mt-2">随访医生</div>
<van-field
v-model="form.visitDoctorName"
is-link
readonly
placeholder="请选择"
@click="showVisitDoctor = true"
class="form-input mt-2"
/>
<DocOfficeDoctor
v-model:show="showVisitDoctor"
:allowClear="false"
v-model:value="form.visitDoctorId"
:unitId="form.visitUnitId"
:officeId="form.visitOfficeId"
@change="(option) => { form.visitDoctorName = option.staffName }"
/>
</van-form>
</template>
<script>
import { useStore } from '@/doctor/store'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn.vue'
import { checkboxReject, calculateBMI, fetchDataHandle } from '@/utils/common'
import BloodPressurePanel from '@/doctor/components/bloodPressure/BloodPressurePanel.vue'
import BloodPressureBt from '@/doctor/components/bloodPressure/BloodPressureBt.vue'
import DocImageUpload from '@/doctor/components/docImageUpload/DocImageUpload.vue'
import DocUnit from '@/doctor/components/docUnit/DocUnit.vue'
import DocOffice from '@/doctor/components/docOffice/DocOffice.vue'
import DocOfficeDoctor from '@/doctor/components/docOfficeDoctor/DocOfficeDoctor.vue'
export default {
components: { CheckBtn, BloodPressurePanel, BloodPressureBt, DocImageUpload, DocUnit, DocOffice, DocOfficeDoctor },
inject: ['pressureObj'],
data() {
return {
store: useStore(),
form: {},
rules: {
visitWayName: [
{ required: true, message: '请选择随访方式' }
],
symptomName: [
{ required: true, message: '请选择症状' }
],
signSystolicPressure: [
{ required: true, message: '请填写收缩压' }
],
signDiastolicPressure: [
{ required: true, message: '请填写舒张压' }
],
signHeight: [
{ required: true, message: '请填写身高' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+(\.\d{1})?$/
if (value && !(regex.test(value) && Number(value) >= 10 && Number(value) <= 300)) {
res = false
}
return res
},
message: `请输入10到300之间的数字,允许一位小数`
}
],
signWeight: [
{ required: true, message: '请填写体重' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+(\.\d{1,2})?$/
if (value && !(regex.test(value) && Number(value) >= 20 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入20到500之间的数字,允许两位小数`
}
],
signHeartRate: [
{ required: true, message: '请填写心率' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 10 && Number(value) <= 200)) {
res = false
}
return res
},
message: `请输入10到200之间的整数`
}
],
isSmoking: [
{ required: true, message: '请选择' }
],
startSmokeAge: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 2 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入2到100之间的整数`
}
],
daySmoking: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入0到100之间的整数`
}
],
goalDaySmoking: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入0到100之间的整数`
}
],
isDrink: [
{ required: true, message: '请选择' }
],
dayDrink: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
goalDayDrink: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkLiquor: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkBeer: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkRed: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkYellow: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkOther: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
regularExercise: [
{ required: true, message: '请选择' }
],
exerciseStrength: [
{ required: true, message: '请选择' }
],
nowExerciseWeek: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) {
res = false
}
return res
},
message: `请输入0到50之间的整数`
}
],
nowExerciseMinute: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入0到500之间的整数`
}
],
targetExerciseWeek: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) {
res = false
}
return res
},
message: `请输入0到50之间的整数`
}
],
targetExerciseMinute: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入0到500之间的整数`
}
],
saltIntake: [
{ required: true, message: '请选择' }
],
psychologicalRecovery: [
{ required: true, message: '请选择' }
],
doctorAdvice: [
{ required: true, message: '请选择' }
],
medicationCompliance: [
{ required: true, message: '请选择' }
],
drugsAdverse: [
{ required: true, message: '请选择' }
],
visitType: [
{ required: true, message: '请选择' }
],
currentDiagnosisName: [
{ required: true, message: '请选择' }
],
isReferral: [
{ required: true, message: '请选择' }
],
nextVisitDate: [
{ required: true, message: '请选择' }
]
},
showVisitWay: false,
showSymptom: false,
// showAuxiliaryExamination: false
showCurrentDiagnosis: false,
showReferralUnit: false,
showReferralOffice: false,
showNextVisitDate: false,
nextVisitDateRange: {
min: undefined,
max: undefined
},
showVisitDate: false,
visitDateRange: {
min: undefined,
max: undefined
},
showVisitUnit: false,
showVisitOffice: false,
showVisitDoctor: false
}
},
methods: {
checkboxReject,
calculateBMI,
visitWayChange() {
this.store.getDict('CP00052').forEach(item => {
if (item.value === this.form.visitWay) {
this.form.visitWayName = item.name
}
})
this.showVisitWay = false
},
symptomConfirm() {
let list = []
this.store.getDict('CP00064').forEach(item => {
let selected = this.form.symptom.filter(e => e === item.value)
if (selected && selected.length) {
list.push(item.name)
}
})
this.form.symptomName = list.join()
this.showSymptom = false
},
currentDiagnosisConfirm() {
let list = []
this.store.getDict('CP00086').forEach(item => {
let selected = this.form.currentDiagnosis.filter(e => e === item.value)
if (selected && selected.length) {
list.push(item.name)
}
})
this.form.currentDiagnosisName = list.join()
this.showCurrentDiagnosis = false
},
setPressure(val) {
if (!val) return
this.form.signSystolicPressure = val.systolicPressure
this.form.signDiastolicPressure = val.diastolicPressure
},
referralUnitChange(option = {}) {
this.form.referralUnitName = option.unitName
},
referralOfficeChange(option = {}) {
this.form.referralOfficeName = option.officeName
},
nextVisitDateConfirm({ selectedValues }) {
this.form.nextVisitDate = selectedValues.join('-')
this.showNextVisitDate = false
},
visitDateConfirm({ selectedValues }) {
this.form.visitDate = selectedValues.join('-')
this.showVisitDate = false
},
visitUnitChange(option = {}) {
this.form.visitUnitName = option.unitName
},
visitOfficeChange(option = {}) {
this.form.visitOfficeName = option.officeName
},
submit() {
return new Promise((resolve, reject) => {
this.$refs.form.validate().then(() => {
const form = fetchDataHandle(this.form, {
symptom: 'arrToStr',
currentDiagnosis: 'arrToStr'
})
resolve(form)
}).catch(e => {
})
})
}
},
watch: {
'form.signHeight': {
handler() {
this.form.signBmi = this.calculateBMI(this.form.signHeight, this.form.signWeight)
}
},
'form.signWeight': {
handler() {
this.form.signBmi = this.calculateBMI(this.form.signHeight, this.form.signWeight)
}
},
}
}
</script>
<style lang="less" scoped>
.first-title {
display: flex;
align-items: center;
.btn-title {
background-color: #F0F3FF;
color: #607FF0;
border-radius: 9999px;
padding: 4px 16px;
margin-left: 8px;
}
}
.label-title {
font-size: 13px;
color: #595959;
font-weight: 500;
margin-bottom: 8px;
&[required] {
&::after {
content: '*';
color: #FF4D4F;
font-weight: bold;
margin-left: 4px;
}
}
}
.form-input {
background-color: #FAFAFA;
padding: 8px 12px;
border-radius: 8px;
}
:deep(.van-cell:after) {
border-bottom: 0px;
}
:deep(.van-popup) {
height: 50% !important;
}
.pop-title {
color: #262626;
font-size: 16px;
font-weight: 600;
}
.greyColor {
color: var(--van-text-color-2);
font-weight: 400;
}
.blueColor {
color: #607FF0;
font-weight: 500;
}
.sub-text {
color: #595959;
font-size: 13px;
font-weight: 400;
padding-bottom: 8px;
}
.tip {
color: #FA8C16;
font-size: 12px;
margin-top: 8px;
line-height: 16px;
}
.bg-fa {
background-color: #FAFAFA;
padding: 8px;
border-radius: 8px;
}
.doc-radio-group-now {
column-gap: 8px;
row-gap: 8px;
background-color: #FAFAFA;
width: 100%;
.van-radio {
background-color: #FFFFFF;
padding: 8px 12px;
border-radius: 8px;
justify-content: space-between;
margin-right: 0;
}
}
.card-input {
padding: 8px 12px;
border-radius: 8px;
}
:deep(.label-mr) {
margin-right: 8px;
}
</style>
\ No newline at end of file
<template>
<van-form ref="form">
<div class="first-title">
<span class="font-semibold">随访信息</span>
<div class="btn-title">引入数据</div>
</div>
<!-- 随访方式 -->
<div class="label-title mt-2" required>随访方式</div>
<van-field
v-model="form.visitWayName"
isLink
readonly
placeholder="请选择"
:rules="rules.visitWayName"
@click="showVisitWay = true"
class="form-input"
/>
<van-popup v-model:show="showVisitWay" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showVisitWay = false">取消</div>
<div>随访方式(单选)</div>
<div></div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
clearable
column-1
:options="store.getDict('CP00052')"
v-model:value="form.visitWay"
:fieldNames="{ text: 'name', value: 'value' }"
@change="visitWayChange"
/>
</div>
</div>
</van-popup>
<!-- 症状 -->
<div class="label-title mt-2" required>症状</div>
<van-field
v-model="form.symptomName"
isLink
readonly
placeholder="请选择"
:rules="rules.symptomName"
@click="showSymptom = true"
class="form-input"
/>
<van-popup v-model:show="showSymptom" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showSymptom = false">取消</div>
<div>症状(可多选)</div>
<div class="blueColor" @click="symptomConfirm">确定</div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
multiple
column-2
:options="store.getDict('CP00064')"
v-model:value="form.symptom"
:fieldNames="{ text: 'name', value: 'value' }"
@change="form.symptom = checkboxReject(form.symptom, [1])"
/>
</div>
</div>
</van-popup>
<template v-if="(form.symptom || []).includes(99)">
<div class="label-title mt-2">其他症状</div>
<van-field
v-model="form.symptomOther"
placeholder="请填写其他症状"
class="form-input"
/>
</template>
<!-- 血压 -->
<div class="flex items-center justify-between tip-box mt-2 mb-2">
<div class="label-title" required>血压</div>
<BloodPressurePanel :pressureObj="pressureObj" />
</div>
<table class="w-full mb-2">
<tr class="sub-text">
<td>收缩压(SBP)</td>
<td style="width: 1em"></td>
<td>舒张压(DBP)</td>
</tr>
<tr>
<td class="flex items-center">
<van-field
v-model="form.signSystolicPressure"
placeholder="60~300,整数"
:rules="rules.signSystolicPressure"
class="form-input"
>
<template #extra>
<span>mmHg</span>
</template>
</van-field>
</td>
<td class="text-center">
<span class="divide">/</span>
</td>
<td class="flex items-center">
<van-field
v-model="form.signDiastolicPressure"
placeholder="30~300,整数"
:rules="rules.signDiastolicPressure"
class="form-input"
>
<template #extra>
<span>mmHg</span>
</template>
</van-field>
</td>
</tr>
</table>
<BloodPressureBt :pressureObj="pressureObj" @getValue="setPressure">开始测量</BloodPressureBt>
<div class="tip">提示:点击“开始测量”按钮后将自动启动血压计设备,请勿再重复点击设备“开始/停止”按钮。</div>
<!-- 身高 -->
<div class="label-title mt-2" required>身高</div>
<van-field
v-model="form.signHeight"
placeholder="10~300,1位小数"
:rules="rules.signHeight"
class="form-input"
>
<template #extra>
<span>cm</span>
</template>
</van-field>
<!-- 体重 -->
<div class="label-title mt-2" required>体重</div>
<van-field
v-model="form.signWeight"
placeholder="20~500,2位小数"
:rules="rules.signWeight"
class="form-input"
>
<template #extra>
<span>kg</span>
</template>
</van-field>
<!-- BMI -->
<div class="label-title mt-2">BMI(体质指数)</div>
<van-field
readonly
v-model="form.signBmi"
placeholder="-"
class="form-input"
>
<template #extra>
<span>kg/m²</span>
</template>
</van-field>
<!-- 心率 -->
<div class="label-title mt-2" required>心率</div>
<van-field
v-model="form.signHeartRate"
placeholder="10~200,整数"
:rules="rules.signHeartRate"
class="form-input"
>
<template #extra>
<span>次/分</span>
</template>
</van-field>
<!-- 其他体征 -->
<div class="label-title mt-2">其他</div>
<van-field
type="textarea"
v-model="form.signOther"
:maxlength="120"
placeholder="如有其他体征情况请填写在此处,限120个字"
class="form-input"
/>
<!-- 吸烟 -->
<div class="label-title mt-2" required>吸烟</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">是否正在吸烟</div>
<van-field :rules="rules.isSmoking" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isSmoking"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00066')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 100%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">您大约从几岁起开始养成每天或基本每天都吸烟的习惯</div>
<van-field
v-model="form.startSmokeAge"
placeholder="2~100,整数"
:rules="rules.startSmokeAge"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">您最近7天是否吸烟</div>
<van-field style="padding: 0">
<template #input>
<van-radio-group
v-model="form.lastSevenSmoke"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00001')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">日吸烟量</div>
<van-field
v-model="form.daySmoking"
placeholder="0~100,整数"
:rules="rules.daySmoking"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">目标日吸烟量</div>
<van-field
v-model="form.goalDaySmoking"
placeholder="0~100,整数"
:rules="rules.goalDaySmoking"
class="card-input"
>
<template #extra>
<span></span>
</template>
</van-field>
</div>
<!-- 饮酒 -->
<div class="label-title mt-2" required>饮酒</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">是否正在饮酒</div>
<van-field :rules="rules.isDrink" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isDrink"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00068')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 100%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isDrink === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">饮酒频率</div>
<van-field style="padding: 0">
<template #input>
<van-radio-group
v-model="form.drinkCondition"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00069')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 100%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.isDrink === 1 || form.isDrink === 2" class="flex mt-2">
<div class="bg-fa">
<div class="label-title" style="color: #262626; font-size: 14px">日饮酒量</div>
<van-field
v-model="form.dayDrink"
placeholder="0~3000,整数"
:rules="rules.dayDrink"
class="card-input"
>
<template #extra>
<span>ml</span>
</template>
</van-field>
</div>
<div class="bg-fa ml-2">
<div class="label-title" style="color: #262626; font-size: 14px">目标日饮酒量</div>
<van-field
v-model="form.goalDayDrink"
placeholder="0~3000,整数"
:rules="rules.goalDayDrink"
class="card-input"
>
<template #extra>
<span>ml</span>
</template>
</van-field>
</div>
</div>
<div v-if="form.isDrink === 1 || form.isDrink === 2" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">饮酒种类</div>
<van-field
label="白酒"
v-model="form.drinkLiquor"
placeholder="0~3000,整数"
:rules="rules.drinkLiquor"
class="card-input"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="啤酒"
v-model="form.drinkBeer"
placeholder="0~3000,整数"
:rules="rules.drinkBeer"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="红酒"
v-model="form.drinkRed"
placeholder="0~3000,整数"
:rules="rules.drinkRed"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="黄酒"
v-model="form.drinkYellow"
placeholder="0~3000,整数"
:rules="rules.drinkYellow"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
<van-field
label="其他"
v-model="form.drinkOther"
placeholder="0~3000,整数"
:rules="rules.drinkOther"
class="card-input mt-2"
label-width="36px"
label-class="label-mr"
>
<template #extra>
<span>ml/日</span>
</template>
</van-field>
</div>
<!-- 运动 -->
<div class="label-title mt-2" required>运动</div>
<div class="bg-fa">
<div class="label-title" required style="color: #262626; font-size: 14px">有无规律活动</div>
<van-field :rules="rules.regularExercise" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.regularExercise"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div v-if="form.regularExercise === 1" class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">运动强度</div>
<van-field :rules="rules.exerciseStrength" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.exerciseStrength"
shape="dot"
direction="horizontal"
class="doc-radio-group-now"
>
<van-radio
v-for="item in store.getDict('CP00070')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">目前运动情况</div>
<div class="flex">
<van-field
v-model="form.nowExerciseWeek"
placeholder="0~50,整数"
:rules="rules.nowExerciseWeek"
class="card-input"
>
<template #extra>
<span>次/周</span>
</template>
</van-field>
<van-field
v-model="form.nowExerciseMinute"
placeholder="0~500,整数"
:rules="rules.nowExerciseMinute"
class="card-input ml-2"
>
<template #extra>
<span>分钟/次</span>
</template>
</van-field>
</div>
</div>
<div class="bg-fa mt-2">
<div class="label-title" required style="color: #262626; font-size: 14px">目标运动情况</div>
<div class="flex">
<van-field
v-model="form.targetExerciseWeek"
placeholder="0~50,整数"
:rules="rules.targetExerciseWeek"
class="card-input"
>
<template #extra>
<span>次/周</span>
</template>
</van-field>
<van-field
v-model="form.targetExerciseMinute"
placeholder="0~500,整数"
:rules="rules.targetExerciseMinute"
class="card-input ml-2"
>
<template #extra>
<span>分钟/次</span>
</template>
</van-field>
</div>
</div>
<!-- 摄盐情况 -->
<div class="label-title mt-2" required>摄盐情况(咸淡)</div>
<van-field :rules="rules.saltIntake" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.saltIntake"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00071')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 心理调整 -->
<div class="label-title mt-2" required>心理调整</div>
<van-field :rules="rules.psychologicalRecovery" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.psychologicalRecovery"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00072')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 遵医行为 -->
<div class="label-title mt-2" required>遵医行为</div>
<van-field :rules="rules.doctorAdvice" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.doctorAdvice"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00072')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 服药依从性 -->
<div class="label-title mt-2" required>服药依从性</div>
<van-field :rules="rules.medicationCompliance" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.medicationCompliance"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00080')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 药物不良反应 -->
<div class="label-title mt-2" required>药物不良反应</div>
<van-field :rules="rules.drugsAdverse" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.drugsAdverse"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<div v-if="form.drugsAdverse === 1" class="bg-fa mt-2">
<div class="label-title" style="color: #262626; font-size: 14px">不良反应</div>
<van-field
type="textarea"
v-model="form.drugsAdverseOther"
:maxlength="120"
placeholder="请填写具体描述哪种药物,何种不良反应,限120字"
class="card-input"
/>
</div>
<!-- 此次随访分类 -->
<div class="label-title mt-2" required>此次随访分类</div>
<van-field :rules="rules.visitType" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.visitType"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('CP00085')"
:key="item.value"
:name="item.value"
label-position="left"
style="width: 48%"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- 目前诊断 -->
<div class="label-title mt-2" required>目前诊断</div>
<van-field
v-model="form.currentDiagnosisName"
isLink
readonly
placeholder="请选择"
:rules="rules.currentDiagnosisName"
@click="showCurrentDiagnosis = true"
class="form-input"
/>
<van-popup v-model:show="showCurrentDiagnosis" position="bottom">
<div class="p-4" style="height: 100%">
<div class="flex justify-between items-center mb-4 pop-title">
<div class="greyColor" @click="showCurrentDiagnosis = false">取消</div>
<div>目前诊断(可多选)</div>
<div class="blueColor" @click="currentDiagnosisConfirm">确定</div>
</div>
<div style="height: 80%; overflow: auto">
<CheckBtn
multiple
column-2
:options="store.getDict('CP00086')"
v-model:value="form.currentDiagnosis"
:fieldNames="{ text: 'name', value: 'value' }"
/>
</div>
</div>
</van-popup>
<!-- 转诊 -->
<div class="label-title mt-2" required>转诊</div>
<van-field :rules="rules.isReferral" style="padding: 0">
<template #input>
<van-radio-group
v-model="form.isReferral"
shape="dot"
direction="horizontal"
class="w-full doc-radio-group"
>
<van-radio
v-for="item in store.getDict('DC00069')"
:key="item.value"
:name="item.value"
label-position="left"
>
{{ item.name }}
</van-radio>
</van-radio-group>
</template>
</van-field>
<div v-if="form.isReferral === 1" class="bg-fa mt-2">
<div style="background-color: #fff; padding: 8px; border-radius: 8px">
<div style="color: #262626; font-size: 14px">转诊原因</div>
<van-field
type="textarea"
v-model="form.referralReason"
:maxlength="120"
placeholder="请填写具体描述转诊原因,限120字"
class="form-input mt-2"
/>
</div>
<div style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2">
<div style="color: #262626; font-size: 14px">转诊机构</div>
<van-field
v-model="form.referralUnitName"
is-link
readonly
placeholder="请选择"
@click="showReferralUnit = true"
class="form-input mt-2"
/>
<DocUnit
v-model:show="showReferralUnit"
v-model:value="form.referralUnitId"
:valueName="form?.referralUnitName"
@change="referralUnitChange"
/>
</div>
<div style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2">
<div style="color: #262626; font-size: 14px">转诊科室</div>
<van-field
v-model="form.referralOfficeName"
is-link
readonly
placeholder="请选择"
@click="showReferralOffice = true"
class="form-input mt-2"
/>
<DocOffice
v-model:show="showReferralOffice"
v-model:value="form.referralOfficeId"
:unitId="form.referralUnitId"
@change="referralOfficeChange"
/>
</div>
</div>
<!-- 现场随访照片 -->
<div class="label-title mt-2">现场随访照片</div>
<DocImageUpload
description="最多支持上传8个文件,支持上传图片或PDF文件,图片支持上传jpg、png、jpeg格式,文件大小请勿超过10M。"
lengthMessage="抱歉,最多可上传8个文件。"
:imageData="[]"
@change="(ids, option) => form.visitImage = ids"
:maxLength="8"
/>
<!-- 下次随访日期 -->
<div class="label-title" required>下次随访日期</div>
<van-field
v-model="form.nextVisitDate"
isLink
readonly
placeholder="请选择"
:rules="rules.nextVisitDate"
@click="showNextVisitDate = true"
class="form-input"
/>
<van-popup v-model:show="showNextVisitDate" position="bottom">
<van-date-picker
v-model="form._nextVisitDate"
:min-date="nextVisitDateRange.min"
:max-date="nextVisitDateRange.max"
@confirm="nextVisitDateConfirm"
@cancel="showNextVisitDate = false"
/>
</van-popup>
<!-- 随访日期 -->
<div class="label-title mt-2">随访日期</div>
<van-field
v-model="form.visitDate"
isLink
readonly
placeholder="请选择"
:rules="rules.visitDate"
@click="showVisitDate = true"
class="form-input"
/>
<van-popup v-model:show="showVisitDate" position="bottom">
<van-date-picker
v-model="form._visitDate"
:min-date="visitDateRange.min"
:max-date="visitDateRange.max"
@confirm="visitDateConfirm"
@cancel="showVisitDate = false"
/>
</van-popup>
<!-- 随访单位 -->
<div class="label-title mt-2">随访单位</div>
<van-field
v-model="form.visitUnitName"
is-link
readonly
placeholder="请选择"
@click="showVisitUnit = true"
class="form-input mt-2"
/>
<DocUnit
v-model:show="showVisitUnit"
v-model:value="form.visitUnitId"
:valueName="form?.visitUnitName"
@change="visitUnitChange"
/>
<!-- 随访科室 -->
<div class="label-title mt-2">随访科室</div>
<van-field
v-model="form.visitOfficeName"
is-link
readonly
placeholder="请选择"
@click="showVisitOffice = true"
class="form-input mt-2"
/>
<DocOffice
v-model:show="showVisitOffice"
v-model:value="form.visitOfficeId"
:unitId="form.visitUnitId"
@change="visitOfficeChange"
/>
<!-- 随访医生 -->
<div class="label-title mt-2">随访医生</div>
<van-field
v-model="form.visitDoctorName"
is-link
readonly
placeholder="请选择"
@click="showVisitDoctor = true"
class="form-input mt-2"
/>
<DocOfficeDoctor
v-model:show="showVisitDoctor"
:allowClear="false"
v-model:value="form.visitDoctorId"
:unitId="form.visitUnitId"
:officeId="form.visitOfficeId"
@change="(option) => { form.visitDoctorName = option.staffName }"
/>
</van-form>
</template>
<script>
import { useStore } from '@/doctor/store'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn.vue'
import { checkboxReject, calculateBMI, fetchDataHandle } from '@/utils/common'
import BloodPressurePanel from '@/doctor/components/bloodPressure/BloodPressurePanel.vue'
import BloodPressureBt from '@/doctor/components/bloodPressure/BloodPressureBt.vue'
import DocImageUpload from '@/doctor/components/docImageUpload/DocImageUpload.vue'
import DocUnit from '@/doctor/components/docUnit/DocUnit.vue'
import DocOffice from '@/doctor/components/docOffice/DocOffice.vue'
import DocOfficeDoctor from '@/doctor/components/docOfficeDoctor/DocOfficeDoctor.vue'
export default {
components: { CheckBtn, BloodPressurePanel, BloodPressureBt, DocImageUpload, DocUnit, DocOffice, DocOfficeDoctor },
inject: ['pressureObj'],
data() {
return {
store: useStore(),
form: {},
rules: {
visitWayName: [
{ required: true, message: '请选择随访方式' }
],
symptomName: [
{ required: true, message: '请选择症状' }
],
signSystolicPressure: [
{ required: true, message: '请填写收缩压' }
],
signDiastolicPressure: [
{ required: true, message: '请填写舒张压' }
],
signHeight: [
{ required: true, message: '请填写身高' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+(\.\d{1})?$/
if (value && !(regex.test(value) && Number(value) >= 10 && Number(value) <= 300)) {
res = false
}
return res
},
message: `请输入10到300之间的数字,允许一位小数`
}
],
signWeight: [
{ required: true, message: '请填写体重' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+(\.\d{1,2})?$/
if (value && !(regex.test(value) && Number(value) >= 20 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入20到500之间的数字,允许两位小数`
}
],
signHeartRate: [
{ required: true, message: '请填写心率' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 10 && Number(value) <= 200)) {
res = false
}
return res
},
message: `请输入10到200之间的整数`
}
],
isSmoking: [
{ required: true, message: '请选择' }
],
startSmokeAge: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 2 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入2到100之间的整数`
}
],
daySmoking: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入0到100之间的整数`
}
],
goalDaySmoking: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) {
res = false
}
return res
},
message: `请输入0到100之间的整数`
}
],
isDrink: [
{ required: true, message: '请选择' }
],
dayDrink: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
goalDayDrink: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkLiquor: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkBeer: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkRed: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkYellow: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
drinkOther: [
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) {
res = false
}
return res
},
message: `请输入0到3000之间的整数`
}
],
regularExercise: [
{ required: true, message: '请选择' }
],
exerciseStrength: [
{ required: true, message: '请选择' }
],
nowExerciseWeek: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) {
res = false
}
return res
},
message: `请输入0到50之间的整数`
}
],
nowExerciseMinute: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入0到500之间的整数`
}
],
targetExerciseWeek: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) {
res = false
}
return res
},
message: `请输入0到50之间的整数`
}
],
targetExerciseMinute: [
{ required: true, message: '请输入' },
{
validator: (value, rule) => {
let res = true
const regex = /^\d+$/
if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 500)) {
res = false
}
return res
},
message: `请输入0到500之间的整数`
}
],
saltIntake: [
{ required: true, message: '请选择' }
],
psychologicalRecovery: [
{ required: true, message: '请选择' }
],
doctorAdvice: [
{ required: true, message: '请选择' }
],
medicationCompliance: [
{ required: true, message: '请选择' }
],
drugsAdverse: [
{ required: true, message: '请选择' }
],
visitType: [
{ required: true, message: '请选择' }
],
currentDiagnosisName: [
{ required: true, message: '请选择' }
],
isReferral: [
{ required: true, message: '请选择' }
],
nextVisitDate: [
{ required: true, message: '请选择' }
]
},
showVisitWay: false,
showSymptom: false,
// showAuxiliaryExamination: false
showCurrentDiagnosis: false,
showReferralUnit: false,
showReferralOffice: false,
showNextVisitDate: false,
nextVisitDateRange: {
min: undefined,
max: undefined
},
showVisitDate: false,
visitDateRange: {
min: undefined,
max: undefined
},
showVisitUnit: false,
showVisitOffice: false,
showVisitDoctor: false
}
},
methods: {
checkboxReject,
calculateBMI,
visitWayChange() {
this.store.getDict('CP00052').forEach(item => {
if (item.value === this.form.visitWay) {
this.form.visitWayName = item.name
}
})
this.showVisitWay = false
},
symptomConfirm() {
let list = []
this.store.getDict('CP00058').forEach(item => {
let selected = this.form.symptom.filter(e => e === item.value)
if (selected && selected.length) {
list.push(item.name)
}
})
this.form.symptomName = list.join()
this.showSymptom = false
},
currentDiagnosisConfirm() {
let list = []
this.store.getDict('CP00086').forEach(item => {
let selected = this.form.currentDiagnosis.filter(e => e === item.value)
if (selected && selected.length) {
list.push(item.name)
}
})
this.form.currentDiagnosisName = list.join()
this.showCurrentDiagnosis = false
},
setPressure(val) {
if (!val) return
this.form.signSystolicPressure = val.systolicPressure
this.form.signDiastolicPressure = val.diastolicPressure
},
referralUnitChange(option = {}) {
this.form.referralUnitName = option.unitName
},
referralOfficeChange(option = {}) {
this.form.referralOfficeName = option.officeName
},
nextVisitDateConfirm({ selectedValues }) {
this.form.nextVisitDate = selectedValues.join('-')
this.showNextVisitDate = false
},
visitDateConfirm({ selectedValues }) {
this.form.visitDate = selectedValues.join('-')
this.showVisitDate = false
},
visitUnitChange(option = {}) {
this.form.visitUnitName = option.unitName
},
visitOfficeChange(option = {}) {
this.form.visitOfficeName = option.officeName
},
submit() {
return new Promise((resolve, reject) => {
this.$refs.form.validate().then(() => {
const form = fetchDataHandle(this.form, {
symptom: 'arrToStr',
currentDiagnosis: 'arrToStr'
})
resolve(form)
}).catch(e => {
})
})
}
},
watch: {
'form.signHeight': {
handler() {
this.form.signBmi = this.calculateBMI(this.form.signHeight, this.form.signWeight)
}
},
'form.signWeight': {
handler() {
this.form.signBmi = this.calculateBMI(this.form.signHeight, this.form.signWeight)
}
},
}
}
</script>
<style lang="less" scoped>
.first-title {
display: flex;
align-items: center;
.btn-title {
background-color: #F0F3FF;
color: #607FF0;
border-radius: 9999px;
padding: 4px 16px;
margin-left: 8px;
}
}
.label-title {
font-size: 13px;
color: #595959;
font-weight: 500;
margin-bottom: 8px;
&[required] {
&::after {
content: '*';
color: #FF4D4F;
font-weight: bold;
margin-left: 4px;
}
}
}
.form-input {
background-color: #FAFAFA;
padding: 8px 12px;
border-radius: 8px;
}
:deep(.van-cell:after) {
border-bottom: 0px;
}
:deep(.van-popup) {
height: 50% !important;
}
.pop-title {
color: #262626;
font-size: 16px;
font-weight: 600;
}
.greyColor {
color: var(--van-text-color-2);
font-weight: 400;
}
.blueColor {
color: #607FF0;
font-weight: 500;
}
.sub-text {
color: #595959;
font-size: 13px;
font-weight: 400;
padding-bottom: 8px;
}
.tip {
color: #FA8C16;
font-size: 12px;
margin-top: 8px;
line-height: 16px;
}
.bg-fa {
background-color: #FAFAFA;
padding: 8px;
border-radius: 8px;
}
.doc-radio-group-now {
column-gap: 8px;
row-gap: 8px;
background-color: #FAFAFA;
width: 100%;
.van-radio {
background-color: #FFFFFF;
padding: 8px 12px;
border-radius: 8px;
justify-content: space-between;
margin-right: 0;
}
}
.card-input {
padding: 8px 12px;
border-radius: 8px;
}
:deep(.label-mr) {
margin-right: 8px;
}
</style>
\ No newline at end of file
<template> <template>
<div class="h-full disease-visit" ref="list"> <div class='h-full disease-visit' ref='list'>
<van-pull-refresh v-model='loadingRefresh' @refresh='onRefresh' <van-pull-refresh v-model='loadingRefresh' @refresh='onRefresh'
:disabled='isRefreshDisable' style="min-height: 100%"> :disabled='isRefreshDisable' style='min-height: 100%'>
<van-list <van-list
v-model:loading='loading' v-model:loading='loading'
:finished='finished' :finished='finished'
...@@ -9,53 +9,56 @@ ...@@ -9,53 +9,56 @@
:immediate-check='false' :immediate-check='false'
@load='onMore' @load='onMore'
> >
<div class="flex flex-col"> <div class='flex flex-col'>
<div class="flex flex-col gap-y-2.5 py-3 px-4 mb-3 doc-list-card" <div class='flex flex-col gap-y-2.5 py-3 px-4 mb-3 doc-list-card'
v-for='item in list' :key="item.id" @click="toDetail(item)"> v-for='item in list' :key='item.id' @click='toDetail(item)'>
<div> <div>
<span class="label">服务类型</span> <span class='label'>服务类型</span>
<span>{{ item.serveTypeName || '-' }}</span> <span>{{ item.serveTypeName || '-' }}</span>
</div> </div>
<div> <div>
<span class="label">随访日期</span> <span class='label'>随访日期</span>
<span>{{ item.serveDate }}</span> <span>{{ item.serveDate }}</span>
</div> </div>
<div> <div>
<span class="label">随访分类</span> <span class='label'>随访分类</span>
<span>{{ item.visitTypeName || '-' }}</span> <span>{{ item.visitTypeName || '-' }}</span>
</div> </div>
<div v-if="item.patientNo"> <div v-if='item.patientNo'>
<span class="label">就诊号</span> <span class='label'>就诊号</span>
<span>{{ item.patientNo || '-' }}</span> <span>{{ item.patientNo || '-' }}</span>
</div> </div>
<div class="text-ellipsis" v-if="item.diagnose"> <div class='text-ellipsis' v-if='item.diagnose'>
<span class="label">诊断</span> <span class='label'>诊断</span>
<span>{{ item.diagnose || '-' }}</span> <span>{{ item.diagnose || '-' }}</span>
</div> </div>
<div v-if="item.bloodPressure"> <div v-if='item.bloodPressure'>
<span class="label">血压</span> <span class='label'>血压</span>
<span>{{ item.bloodPressure || '-' }}</span> <span>{{ item.bloodPressure || '-' }}</span>
</div> </div>
<div> <div>
<span class="label">数据来源</span> <span class='label'>数据来源</span>
<span>{{ item.sourceName || '-' }}</span> <span>{{ item.sourceName || '-' }}</span>
</div> </div>
<div> <div>
<span class="label">随访医生</span> <span class='label'>随访医生</span>
<span>{{ item.serveDoctorName || '-' }}</span> <span>{{ item.serveDoctorName || '-' }}</span>
</div> </div>
<div class="text-ellipsis"> <div class='text-ellipsis'>
<span class="label">随访机构</span> <span class='label'>随访机构</span>
<span>{{ item.serveUnitName || '-' }}</span> <span>{{ item.serveUnitName || '-' }}</span>
</div> </div>
<div class="divider"></div> <div class='divider'></div>
<div class="bt-group"> <div class='bt-group'>
<van-button round size="small" class="doc-btn-primary" @click="toDetail(item)">详情</van-button> <van-button round size='small' class='doc-btn-primary' @click='toDetail(item)'>详情
<!-- <van-button round size="small" class="doc-btn-primary" v-if="item.allowUpdate == 1">转诊</van-button>--> </van-button>
<van-button round size="small" class="doc-btn-primary" @click='editBtn(item)' <!-- <van-button round size="small" class="doc-btn-primary" v-if="item.allowUpdate == 1">转诊</van-button>-->
v-if="!(item.allowUpdate !==1 || item.serveType == 5)">修改</van-button> <van-button round size='small' class='doc-btn-primary' @click='editBtn(item)'
<van-button round size="small" class="doc-btn-red" @click="delBtn(item)" v-if='!(item.allowUpdate !==1 || item.serveType == 5)'>修改
v-if="!(item.allowUpdate !==1 || item.serveType == 5)">删除</van-button> </van-button>
<van-button round size='small' class='doc-btn-red' @click='delBtn(item)'
v-if='!(item.allowUpdate !==1 || item.serveType == 5)'>删除
</van-button>
</div> </div>
</div> </div>
</div> </div>
...@@ -117,12 +120,12 @@ export default { ...@@ -117,12 +120,12 @@ export default {
// pageIndex: this.pagination.pageIndex, // pageIndex: this.pagination.pageIndex,
// pageSize: this.pagination.pageSize, // pageSize: this.pagination.pageSize,
residentInfoId: this.residentInfoId, residentInfoId: this.residentInfoId,
diseaseType: this.diseaseType, diseaseType: this.diseaseType
} }
getVisitManageList(query, loading).then(res => { getVisitManageList(query, loading).then(res => {
if (this.pagination.pageIndex === 1) { if (this.pagination.pageIndex === 1) {
this.list = [] this.list = []
} }
this.list = this.list.concat(res.data || []) this.list = this.list.concat(res.data || [])
this.pagination.total = res.data.total || 0 this.pagination.total = res.data.total || 0
this.finished = this.list.length >= this.pagination.total this.finished = this.list.length >= this.pagination.total
...@@ -148,8 +151,19 @@ export default { ...@@ -148,8 +151,19 @@ export default {
//数据来源为his时展示 `请在医生PC端查看详情` //数据来源为his时展示 `请在医生PC端查看详情`
showConfirmDialog({ showConfirmDialog({
message: '请在医生PC端查看详情' message: '请在医生PC端查看详情'
}).then(() => {}).catch((err) => {}) }).then(() => {
}).catch((err) => {
})
} else if (record.source == 4) {
// 判断是否显示公卫随访
this.$router.push({
path: `/systemIframe/doctorGWDetail`,
query: {
src: `https://www.baidu.com/`,
pageTitle: `公卫详情`
}
})
} else { } else {
//随访详情 //随访详情
this.$router.push({ this.$router.push({
...@@ -157,7 +171,7 @@ export default { ...@@ -157,7 +171,7 @@ export default {
query: { query: {
relationUuid: record.relationUuid, relationUuid: record.relationUuid,
residentInfoId: this.residentInfoId, residentInfoId: this.residentInfoId,
diseaseType: this.diseaseType, diseaseType: this.diseaseType
} }
}) })
} }
...@@ -181,6 +195,6 @@ export default { ...@@ -181,6 +195,6 @@ export default {
} }
</script> </script>
<style lang="less" scoped> <style lang='less' scoped>
</style> </style>
...@@ -2,7 +2,7 @@ import { createRouter, createWebHashHistory } from 'vue-router' ...@@ -2,7 +2,7 @@ import { createRouter, createWebHashHistory } from 'vue-router'
const doctorIframeConfig = { const doctorIframeConfig = {
component: () => import(/* webpackChunkName: "iframe-page" */'@/components/iframePage/IframePage.vue'), component: () => import(/* webpackChunkName: "iframe-page" */'@/components/iframePage/IframePage.vue'),
props: route => ({ src: route.query.src }) props: route => ({ src: route.query.src, pageTitle: route.query.pageTitle })
} }
const routes = [ const routes = [
......
...@@ -227,7 +227,7 @@ export function callMobile(handlerInterface, parameters) { ...@@ -227,7 +227,7 @@ export function callMobile(handlerInterface, parameters) {
} }
} }
// 判断ios还是安卓 // 判断是否是ios
export function isIOSWebKit() { export function isIOSWebKit() {
const aa = window.navigator.userAgent; const aa = window.navigator.userAgent;
if (!!aa.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) {// ios端 if (!!aa.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) {// ios端
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment