From 9c01d57f56da8ed57ef4b966168fa46bb6d59d46 Mon Sep 17 00:00:00 2001
From: Lowry <12272978>
Date: Thu, 17 Oct 2024 20:52:15 +0800
Subject: [PATCH] =?UTF-8?q?=E9=AB=98=E8=A1=80=E5=8E=8B=E4=B8=93=E7=97=85?=
 =?UTF-8?q?=E9=9A=8F=E8=AE=BF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/api/residentWX/visit.js                   |   5 +
 src/residentWX/visit/List.vue                 |   4 +-
 .../visit/detail/SeparateFUDetail.vue         | 379 ++++++++++++++++++
 src/router/index.js                           |   6 +
 4 files changed, 392 insertions(+), 2 deletions(-)
 create mode 100644 src/residentWX/visit/detail/SeparateFUDetail.vue

diff --git a/src/api/residentWX/visit.js b/src/api/residentWX/visit.js
index fbf8528..e08c522 100644
--- a/src/api/residentWX/visit.js
+++ b/src/api/residentWX/visit.js
@@ -7,4 +7,9 @@ export function queryVisitList(params) {
 // 查询通用随访详情
 export function queryGeneralFUDetail(params) {
     return fetchBase({ url: `/chronic-resident/v1/chronic-visit-record/currency-detail`, body: params, loading: true })
+}
+
+// 查询专病随访详情
+export function querySeparateFUDetail(params) {
+    return fetchBase({ url: `/chronic-resident/v1/chronic-visit-record/specialized-detail`, body: params, loading: true })
 }
\ No newline at end of file
diff --git a/src/residentWX/visit/List.vue b/src/residentWX/visit/List.vue
index fc6b4b5..49a98bb 100644
--- a/src/residentWX/visit/List.vue
+++ b/src/residentWX/visit/List.vue
@@ -163,8 +163,8 @@ export default {
             if (item.serveType == 5) {
                 path = `GeneralFUDetail/${item.relationId}`
             }
-            if (item.serveType == 3 || item.serveType == 4){
-
+            if (item.serveType == 3 || item.serveType == 4) {
+                path = `SeparateFUDetail/${item.relationId}/${item.diseaseType}`
             }
             this.$router.push({
                 path,
diff --git a/src/residentWX/visit/detail/SeparateFUDetail.vue b/src/residentWX/visit/detail/SeparateFUDetail.vue
new file mode 100644
index 0000000..6f40104
--- /dev/null
+++ b/src/residentWX/visit/detail/SeparateFUDetail.vue
@@ -0,0 +1,379 @@
+<template>
+    <div class="flex flex-col" style="height: 100vh">
+        <div class="p-3 text-black text-center shrink-0 doc-nav-bar">
+            <span @click="onBack" class="text-12 back-bt">
+                <doc-icon type="doc-left2" />
+            </span>
+            <span>随访详情</span>
+        </div>
+        <div class="px-4 py-3 flex shrink-0 base-info">
+            <div class="flex w-full">
+                <img src="@/assets/image/residentWX/avatar.png" alt="" class="shrink-0" style="width: .56rem; height: .56rem">
+                <div class="grow flex flex-col justify-between pl-3">
+                    <div class="flex justify-between">
+                        <span class="name">{{ residentInfo.residentName }}</span>
+                    </div>
+                    <div class="top-label">
+                        <div class="mt-3 flex">
+                            <!-- <div>
+                                <span>随访方式:</span>
+                                <span class="color-b">{{ info.visitWayName }}</span>
+                            </div> -->
+                            <div>
+                                <span>随访日期:</span>
+                                <span class="color-b">{{ info.visitDate }}</span>
+                            </div>
+                            <div class="ml-2">
+                                <span>病情状态:</span>
+                                <span class="color-b">{{ info.visitTypeName }}</span>
+                            </div>
+                        </div>
+                        <div>
+                            <span>下次随访日期:</span>
+                            <span class="color-b">{{ info.nextVisitDate }}</span>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="p-3 grow cont-box">
+            <div class="p-3 h-full cont-inner">
+                <div class="flex justify-between collapse-head">
+                    <span class="text-16">全部内容</span>
+                    <span @click="toggleAll">
+                        <span v-if="!collapseAll">展开全部</span>
+                        <span v-else>收起全部</span>
+                        <span :class="['ml-2 icon-down', { 'icon-down-expanded': collapseAll }]">
+                            <doc-icon type="doc-down" />
+                        </span>
+                    </span>
+                </div>
+
+                <van-collapse v-model="activeCollapse" ref="collapse" class="doc-collapse" @change="collapseChange">
+                    <van-collapse-item key="1" title="居民信息" name="1">
+                        <template #right-icon>
+                            <doc-icon type="doc-down" />
+                        </template>
+                        <div class="list">
+                            <div v-for="item in columnsBase" :key="item.key">
+                                <div class="flex justify-between py-1 border-bottom item">
+                                    <span class="shrink-0 mr-2 label">{{ item.title }}</span>
+                                    <span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span>
+                                    <span class="text-end" v-else>
+                                        <span>{{ residentInfo[item.key] || '-' }}</span>
+                                        <span v-if="item.unit" class="ml-1">{{ item.unit }}</span>
+                                    </span>
+                                </div>
+                            </div>
+                        </div>
+                    </van-collapse-item>
+                    <van-collapse-item key="2" title="症状" name="2">
+                        <template #right-icon>
+                            <doc-icon type="doc-down" />
+                        </template>
+                        <div class="list">
+                            <div class="flex justify-between py-1 border-bottom item">
+                                <span class="shrink-0 mr-2 label">症状</span>
+                                <span class="text-end">
+                                    {{ info.symptomName || '-' }}
+                                </span>
+                            </div>
+                        </div>
+                    </van-collapse-item>
+                    <van-collapse-item key="3" title="体征" name="3">
+                        <template #right-icon>
+                            <doc-icon type="doc-down" />
+                        </template>
+                        <div class="list">
+                            <div v-for="item in columnsPhysical" :key="item.key">
+                                <div class="flex justify-between py-1 border-bottom item">
+                                    <span class="shrink-0 mr-2 label">{{ item.title }}</span>
+                                    <span class="text-end">
+                                        <span>{{ info[item.key] || '-' }}</span>
+                                        <span v-if="item.unit" class="ml-1">{{ item.unit }}</span>
+                                    </span>
+                                </div>
+                            </div>
+                        </div>
+                    </van-collapse-item>
+                    <van-collapse-item key="4" title="生活方式" name="4">
+                        <template #right-icon>
+                            <doc-icon type="doc-down" />
+                        </template>
+                        <div style="color: #262626">吸烟</div>
+                        <div class="box">
+                            <div>
+                                <span>是否正在吸烟:</span>
+                                <span>{{ info.isSmokingName }}</span>
+                            </div>
+                            <div v-if="info.isSmoking === 1">
+                                <span>您大约从几岁起开始养成每天或基本每天都吸烟的习惯:</span>
+                                <span>{{ info.startSmokeAge || '-' }}岁</span>
+                            </div>
+                            <div v-if="info.isSmoking === 1 || info.isSmoking === 2">
+                                <span>您最近7天是否吸烟:</span>
+                                <span>{{ info.lastSevenSmokeName }}</span>
+                            </div>
+                            <div v-if="info.isSmoking === 1 || info.isSmoking === 2">
+                                <span>日吸烟量:</span>
+                                <span>{{ info.daySmoking || '-' }}支</span>
+                                <span class="ml-4">目标日吸烟量:</span>
+                                <span>{{ info.goalDaySmoking || '-' }}支</span>
+                            </div>
+                        </div>
+                        <div style="color: #262626" class="mt-2">饮酒</div>
+                        <div class="box">
+                            <div>
+                                <span>是否正在饮酒:</span>
+                                <span>{{ info.isDrinkName }}</span>
+                            </div>
+                            <div v-if="info.isDrink === 1 || info.isDrink === 2">
+                                <span>日饮酒量:</span>
+                                <span>{{ info.dayDrink || '-' }}ml</span>
+                                <span class="ml-4">目标日饮酒量:</span>
+                                <span>{{ info.goalDayDrink || '-' }}ml</span>
+                            </div>
+                            <div v-if="info.isDrink === 1 || info.isDrink === 2">
+                                <span>白酒:</span>
+                                <span>{{ info.drinkLiquor || '-' }}ml/日</span>
+                                <span class="ml-2">啤酒:</span>
+                                <span>{{ info.drinkBeer || '-' }}ml/日</span>
+                                <span class="ml-2">红酒:</span>
+                                <span>{{ info.drinkRed || '-' }}ml/日</span>
+                                <span class="ml-2">黄酒:</span>
+                                <span>{{ info.drinkYellow || '-' }}ml/日</span>
+                                <span class="ml-2">其他:</span>
+                                <span>{{ info.drinkOther || '-' }}ml/日</span>
+                            </div>
+                        </div>
+                        <div style="color: #262626" class="mt-2">运动</div>
+                        <div class="box">
+                            <div>
+                                <span>有无规律活动:</span>
+                                <span>{{ info.regularExerciseName }}</span>
+                            </div>
+                            <div v-if="info.regularExercise === 1">
+                                <span>运动强度:</span>
+                                <span>{{ info.exerciseStrengthName }}</span>
+                            </div>
+                            <div v-if="info.regularExercise === 1">
+                                <span>目前运动情况:</span>
+                                <span>{{ info.nowExerciseWeek || '-' }}次/周、</span>
+                                <span>{{ info.nowExerciseMinute || '-' }}分钟/次</span>
+                            </div>
+                        </div>
+                        <div class="list">
+                            <div class="flex justify-between py-1 border-bottom item">
+                                <span class="shrink-0 mr-2 label">摄盐情况(咸淡)</span>
+                                <span class="text-end">{{ info.saltIntakeName || '-' }}</span>
+                            </div>
+                            <div class="flex justify-between py-1 border-bottom item">
+                                <span class="shrink-0 mr-2 label">心理调整</span>
+                                <span class="text-end">{{ info.psychologicalRecoveryName || '-' }}</span>
+                            </div>
+                            <div class="flex justify-between py-1 border-bottom item">
+                                <span class="shrink-0 mr-2 label">遵医行为</span>
+                                <span class="text-end">{{ info.doctorAdviceName || '-' }}</span>
+                            </div>
+                        </div>
+                    </van-collapse-item>
+                    <van-collapse-item key="5" title="辅助检查" name="5">
+                        <template #right-icon>
+                            <doc-icon type="doc-down" />
+                        </template>
+                        <!-- <div class="list">
+                            <div class="flex justify-between py-1 border-bottom item">
+                                <span class="shrink-0 mr-2 label">症状</span>
+                                <span class="text-end">
+                                    {{ info.symptomName || '-' }}
+                                </span>
+                            </div>
+                        </div> -->
+                        <div v-for="x in inspectList" :key="x.insType">
+                            <div style="color: #262626" class="mt-2">{{ x.insName }}</div>
+                            <div class="box">
+                                <div v-for="y in x.items">
+                                    <span>{{ y.itemName }}:</span>
+                                    <span>{{ y.itemValue }}</span>
+                                    <span class="ml-1">{{ y.unit }}</span>
+                                </div>
+                            </div>
+                        </div>
+                        
+                        
+                    </van-collapse-item>
+                </van-collapse>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+import { querySeparateFUDetail } from '@/api/residentWX/visit.js'
+import { fetchDataHandle } from '@/utils/common.js'
+export default {
+    data() {
+        return {
+            info: {},
+            // 全部展开、收起
+            collapseAll: false,
+            activeCollapse: [],
+            columnsBase: [
+                { title: '姓名', key: 'residentName' },
+                { title: '证件号码', key: 'idCard' },
+                { title: '性别', key: 'genderName' },
+                { title: '出生日期', key: 'dataBirth' },
+                { title: '年龄', key: 'currentAge' },
+                { title: '民族', key: 'nationalName' },
+                { title: '本人电话', key: 'telephone' },
+                { title: '现住址', key: 'presentCodeName' },
+                { title: '详细地址', key: 'nowAddress' },
+                { title: '户籍地址', key: 'registeredCodeName' },
+                { title: '详细地址', key: 'permanentAddress' }
+            ],
+            columnsPhysical: [
+                { title: '收缩压SBP', key: 'signSystolicPressure', unit: 'mmHg' },
+                { title: '舒张压DBP', key: 'signDiastolicPressure', unit: 'mmHg' },
+                { title: '心率', key: 'signHeartRate', unit: '次/分' },
+                { title: '身高', key: 'signHeight', unit: 'cm' },
+                { title: '体重', key: 'signWeight', unit: 'kg' },
+                { title: 'BMI', key: 'signBmi', unit: 'kg/m²' },
+                { title: '腰围', key: 'signWaistline', unit: 'cm' },
+                { title: '其他', key: 'signOther' }
+            ],
+            collapseList: [
+                // { title: "居民信息", name: "1", columns: [], info: {} },
+                // { title: "随访详情", name: "2", columns: [], info: {} },
+                // { title: "随访机构", name: "3", columns: [], info: {} }
+            ],
+            // 辅助检查
+            inspectList: []
+        }
+    },
+    computed: {
+        routerDetail() {
+            return this.$route.params
+        },
+        residentInfo() {
+            return this.info.residentsRecord || {}
+        }
+    },
+    created() {
+        this.load()
+    },
+    methods: {
+        load() {
+            const { relationId, diseaseType } = this.routerDetail
+            if (!relationId) {
+                showToast('未获取到信息')
+                return
+            }
+            let params = {
+                id: relationId,
+                diseaseType,
+            }
+            querySeparateFUDetail(params).then(res => {
+                let result = res.data || {}
+                // 字符串转数组
+                const form = fetchDataHandle(result, {
+                    auxiliaryExamination: 'strToArrNum'
+                })
+                this.info = form
+                // 辅助检查处理
+                let { auxiliaryExamination = [], inspectList = [] } = form
+                let list = []
+                auxiliaryExamination.forEach(item => {
+                    const items = inspectList.filter(e => e.insType === item)
+                    if (items.length > 0) {
+                        list.push({
+                            insType: items[0].insType,
+                            insName: items[0].insName,
+                            items: [...items]
+                        })
+                    }
+                })
+                this.inspectList = list
+                console.log(list)
+
+            })
+        },
+        // 折叠面板切换
+        collapseChange(val) {
+            if (val && val.length === this.collapseList.length) {
+                this.collapseAll = true
+            } else {
+                this.collapseAll = false
+            }
+        },
+        // 全部展开、收起
+        toggleAll() {
+
+        },
+        onBack() {
+            this.$router.back()
+        }
+    }
+}
+</script>
+<style lang="less" scoped>
+@import url('../../utils/common.less');
+
+.base-info {
+    background: linear-gradient(to bottom, #DFF5F4, #fff 50%);
+    color: #8c8c8c;
+
+    .name {
+        font-weight: 600;
+        color: #000;
+        font-size: 18px;
+    }
+
+    .top-label {
+        font-size: 13px;
+        line-height: 22px;
+    }
+
+    .color-b {
+        color: #262626;
+    }
+}
+
+.cont-box {
+    background-color: #f9f9f9;
+
+    .cont-inner {
+        background: linear-gradient(to bottom, #DFF5F4, #fff .6rem);
+        border-top-left-radius: .08rem;
+        border-top-right-radius: .08rem;
+    }
+}
+
+.collapse-head {
+    .icon-down {
+        vertical-align: middle;
+        font-size: .12rem;
+
+        .svg-icon {
+            transition: all .2s;
+        }
+    }
+
+    .icon-down-expanded {
+        .svg-icon {
+            transform: rotate(-180deg);
+        }
+    }
+}
+
+.list {
+    color: #262626;
+    .label {
+        min-width: 5em;
+    }
+}
+.box {
+    background: #F8FAFC;
+    padding: 8px;
+    color: #4D5665;
+
+}
+</style>
\ No newline at end of file
diff --git a/src/router/index.js b/src/router/index.js
index d55dedd..067e5fa 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -118,6 +118,12 @@ const routes = [
                 name: 'resident-visit-GeneralFUDetail',
                 component: () => import(/* webpackChunkName: "residentWX-screening" */ '@/residentWX/visit/detail/GeneralFUDetail.vue')
             },
+            // 专病随访详情
+            {
+                path: 'visit/SeparateFUDetail/:relationId/:diseaseType',
+                name: 'resident-visit-SeparateFUDetail',
+                component: () => import(/* webpackChunkName: "residentWX-screening" */ '@/residentWX/visit/detail/SeparateFUDetail.vue')
+            },
             // 健康指导宣教
             {
                 path: 'guide/list',
-- 
2.18.0