From 05c827fea632f004821cc746ba73880769fab7cd Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期一, 14 七月 2025 10:06:43 +0800
Subject: [PATCH] gx1868 日期选择和排班患者查询条件,默认显示当天的已排班患者

---
 src/views/home/components/patient_file.vue |  537 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 499 insertions(+), 38 deletions(-)

diff --git a/src/views/home/components/patient_file.vue b/src/views/home/components/patient_file.vue
index 1275017..b8bff9f 100644
--- a/src/views/home/components/patient_file.vue
+++ b/src/views/home/components/patient_file.vue
@@ -1,38 +1,201 @@
 <template>
     <div class="dietarySurvey-home">
-        <div v-if="patientsInfo.id">
+        <div v-if="patientsInfo.id" v-loading="state.loading">
             <el-card class="box-card">
-                <div  class="clearfix">
-                    <span>患者基本信息</span> 
+                <div class="clearfix">
+                    <el-icon size="16" color="#409efc">
+                        <Briefcase />
+                    </el-icon> <span> &nbsp; 服务套餐</span>
+                </div>
+                <div>
+                    <el-form  :inline="true" class="demo-form-inline" size="small">
+                        <el-form-item label="基础服务:">
+                            <el-radio-group class="elradiozdi" :disabled="state.formdispl" v-model="state.taochan.基础服务">
+                                <el-radio value="是">是</el-radio>
+                                <el-radio value="否">否</el-radio>
+                            </el-radio-group>
+                        </el-form-item>
+                        <el-form-item label="自购套餐:" >
+                            <el-row>
+                                <el-col :span='12'>
+                                    <el-input v-model="state.taochan.自购几月" :disabled="state.formdispl" placeholder="购买多少个月">
+                                        <template #append>月</template>
+                                    </el-input>
+                                </el-col>
+                                <el-col :span='12'>
+                                    <el-input v-model="state.taochan.多少元套餐" :disabled="state.formdispl" placeholder="套餐金额">
+                                        <template #append>元</template>
+                                    </el-input>
+                                </el-col>
+                            </el-row>
+                        </el-form-item>
+                        <el-form-item label="自购产品名称">
+                            <el-row>
+                                <el-col :span='12'>
+                                    <el-input v-model="state.taochan.产品名称" :disabled="state.formdispl" placeholder="产品名称"></el-input>
+                                </el-col>
+                                <el-col :span='12'>
+                                    <el-input v-model="state.taochan.自购多少盒" :disabled="state.formdispl" placeholder="数量">
+                                        <template #append>盒</template>
+                                    </el-input>
+                                </el-col>
+                            </el-row>
+
+                        </el-form-item>
+                        <el-form-item>
+                            <el-button v-if="state.formdispl" type="primary" :icon="Edit" @click="state.formdispl=false">编辑</el-button>
+                            <el-button v-else type="success" :icon="Check" @click="onSubmitTC" >保存</el-button>
+                        </el-form-item>
+
+                    </el-form>
+                   
+                </div>
+            </el-card>
+            <el-card class="box-card" style="margin-top:10px;">
+                <div class="clearfix">
+                    <el-icon size="16" color="#409efc">
+                        <CreditCard />
+                    </el-icon> <span> &nbsp; 患者基本信息</span>
                 </div>
                 <div>
                     <table class="gridtable">
                         <tr>
-                            <td>姓名:{{patientsInfo.patientName}}</td>
-                            <td>年龄:{{patientsInfo.age}}</td>
-                            <td>性别:{{patientsInfo.patientGenderText}}</td>
-                            <td>身高:{{patientsInfo.patientHeight}}</td>
-                            <td>干体重:{{state.patientData.干体重}}</td>
-                            
+                            <td>姓名:{{ patientsInfo.patientName }}</td>
+                            <td>年龄:<span v-if="patientsInfo.age">{{ patientsInfo.age }} 岁</span></td>
+                            <td>性别:{{ patientsInfo.patientGenderText }}</td>
+                            <td>身高:{{ state.patientData.身高 }} <span v-if="state.patientData.身高">(cm)</span>
+
+                                <span>
+                                    <el-icon :size="14" color="#409EFF" @click="updateSg">
+                                        <Edit />
+                                    </el-icon>
+                                </span>
+                            </td>
+                            <td>干体重:<span>{{ state.patientData.干体重 }} (kg)</span>
+                                <el-icon :size="14" color="#409EFF" @click="state.gtzshow=true">
+                                    <Calendar />
+                                </el-icon>
+                            </td>
+
+
                         </tr>
                         <tr>
-                            <td>透析龄:{{patientsInfo.dialysisAge}}</td>
-                          
-                            
-                            <td colspan="4">患者诊断:{{state.patientData.诊断}}</td>
+                            <td colspan="2">证件号:{{ state.patientData.证件号 }}</td>
+                            <td>透析龄:<span>{{透析年龄}}</span></td>
+                            <td>最近体重:<span>{{ state.patientData.上一次透前体重 }} (kg)</span></td>
+                            <td>BMI:<span>{{ BMI }}</span></td>
+
                         </tr>
                         <tr>
-                            <td >电话号码:{{patientsInfo.mobile}}</td>
-                            <td colspan="2">家庭地址:{{patientsInfo.patientAddress}}</td>
-                            <td colspan="2">证件号:{{patientsInfo.patientIdentityNo}}</td>
+                            <td>电话号码:{{ state.patientData.电话号码 }}</td>
+                            <td>家属电话:{{ state.patientData.亲属手机号 }}</td>
+                            <td colspan="3">家庭地址:{{ state.patientData.家庭住址 }}</td>
+
+                        </tr>
+                        <tr>
+                            <td colspan="5">患者诊断:{{ state.patientData.诊断 }}</td>
+                        </tr>
+                        <tr>
+                            <td colspan="5">外院出院诊断:{{ state.patientData.出院诊断 }} 
+                                <span>
+                                    <el-icon :size="14" color="#409EFF" @click="updateZD">
+                                        <Edit />
+                                    </el-icon>
+                                </span>
+                                </td>
                         </tr>
                     </table>
-                  
                 </div>
             </el-card>
-            
+            <el-card class="box-card" style="margin-top:10px;">
+                <div class="clearfix">
+                    <el-icon size="16" color="#409efc">
+                        <CreditCard />
+                    </el-icon> <span> &nbsp; 最新生化数据 <span style="color: #606266; font-size: 80%;font-weight: 200;">(90天以内的)</span></span>
+                </div>
+                <el-scrollbar :height="(tableHeight-820)+'px'">
+                    <div>
+                        <el-row :gutter="10" v-if="state.listData.length">
+                            <el-col :xs="8" :sm="8" :md="6" :lg="6" :xl="4" v-for="(item, key) in state.listData"
+                                :key="key">
+                                <div class="itemLis" v-if="item?.item_result">
+                                    <!-- <div class="title">
+                                        {{ key }}
+                                    </div> -->
+                                    <div class="itemRes">
+                                        <div class="itemResDtile">
+                                            <div style="text-align: center;width: 100%;">
+                                                {{ item?.item_name }}
+                                            </div>
+                                            <div>
+                                              <span style="font-weight: 600;" :style="{ color:item.item_result_flag==='d'?'#67C23A':'#F56C6C'}">{{ item?.item_result }}</span> 
+                                             <span class="tdate">{{ item?.item_result_unit
+                                                    }}</span>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="tdate">
+                                        {{ item?.sample_date_str }}
+                                    </div>
+
+                                </div>
+
+                            </el-col>
+                        </el-row>
+                    </div>
+                </el-scrollbar>
+            </el-card>
+            <el-card class="box-card" style="margin-top:10px;">
+                <div class="clearfix">
+                    <el-icon size="16" color="#409efc">
+                        <CreditCard />
+                    </el-icon> <span> &nbsp; 最近营养筛查评估 <span style="color: #606266; font-size: 80%;font-weight: 200;">(90天以内的)</span></span>
+                </div>
+                <el-scrollbar :height="(tableHeight-820)+'px'">
+                    <div>
+                        <el-row :gutter="10" v-if="state.营养筛查历史表.length">
+                            <el-col :xs="8" :sm="8" :md="6" :lg="6" :xl="4" v-for="(item, key) in state.营养筛查历史表"
+                                :key="key">
+                                <div class="itemLis">
+                                    <div class="title">
+                                        {{ item?.结果.表名 }}
+                                    </div>
+                                    <div class="itemRes">
+                                        <div class="itemResDtile">
+                                           
+                                            <div>
+                                              <span style="font-weight: 600;" :style="{ color:item?.结果.结果.color}">{{ item?.结果.结果.label }}</span> 
+                                                <span class="tdate"> 得分:{{ item?.结果.结果.value}}</span>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="tdate">
+                                        {{ item?.surveryTime }}
+                                    </div>
+
+                                </div>
+
+                            </el-col>
+                        </el-row>
+                    </div>
+                </el-scrollbar>
+            </el-card>
+
         </div>
         <el-empty v-else description="无数据,请先选择患者"></el-empty>
+        <el-dialog v-model="state.gtzshow" title="干体重历史调整记录" width="800px">
+            <el-table  :data="state.gtztableData" height="300" >
+                    <el-table-column align="center" prop="createTime"  label="时间"  width="180" />  
+                    <el-table-column align="center" prop="pureWeight" label="干体重"  />
+                    <el-table-column align="center" label="启用时间">
+                        <template #default="scope">
+                            <span v-if="scope.row.enableRecordTime">{{scope.row.enableRecordTime.substring(0,11)}}</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column align="center" prop="remark"  label="备注" />
+                  
+                </el-table>
+        </el-dialog>
     </div>
 
 </template>
@@ -40,47 +203,345 @@
 <script setup lang="ts">
 import { storeToRefs } from 'pinia';
 import { usePatientsInfo } from '/@/stores/patientsInfo';
-import { computed, reactive } from 'vue';
-import { getPatData } from '/@/api/Patients';
+import { useUserInfo } from '/@/stores/userInfo';
+import { computed, onMounted, reactive } from 'vue';
+import { getPatData, getLisResults, update ,updateNurtion,listNurtion,AddNurtion,getDryWeightList} from '/@/api/Patients';
+import {list} from '/@/api/tiaochabiao/index'
+import { userInfo } from 'os';
+import { Search ,Edit,Check} from '@element-plus/icons-vue'
+import dayjs from 'dayjs';
+import { ElMessage, ElMessageBox } from 'element-plus';
+
+import { number } from 'echarts';
+import { rowKey } from 'element-plus/es/components/table-v2/src/common';
 const storesPat = usePatientsInfo();
+const stores = useUserInfo();
+
 const { patientsInfo } = storeToRefs(storesPat);
+const { userInfos } = storeToRefs(stores);
 const props = defineProps(['tableHeight'])
 const state = reactive({
+    gtztableData:[],
+    gtzshow:false,
+    formdispl:true,// 表单是否编辑
+    // 患者套餐表
+    taochanId:0,
+    taochan: {
+        基础服务: '',
+        自购几月: '',
+        多少元套餐: '',
+        自购多少盒: '',
+        产品名称: ''
+    },
     tableData: [],
     loading: false,
-    patientData:{
-        姓名:'',
-        干体重:'',
-        证件号:"",
-        诊断:'',
-        身高:''
-    }
+    patientData: {
+        姓名: '',
+        干体重: '',
+        证件号: "",
+        诊断: '',
+        身高: '',
+        上一次透前体重: '',
+        出院诊断:'',
+        '透析龄(月)':''
+    },
+    // 最近检验数据
+    listData: <any>{},
+    营养筛查历史表:<any>[]
 })
 const tableHe = computed(() => {
     return props.tableHeight - 130
 })
+const onSubmitTC=()=>{
+    const data={
+        id:state.taochanId,
+        patient_code:patientsInfo.value.code,
+        plan_json_body:JSON.stringify(state.taochan)
+    }
+    if(state.taochanId){
+        state.loading = true
+        updateNurtion(data).then(re=>{
+            getlistNurtion()
+        }).finally(()=>{
+            state.formdispl=true
+            state.loading = false
+        })
+    }else{
+        state.loading = true
+        AddNurtion(data).then(re=>{
+            getlistNurtion()
+        }).finally(()=>{
+            state.formdispl=true
+            state.loading = false
+        })
+    }
+}
+const updateZD=()=>{
+    ElMessageBox.prompt('请输入你要编辑的外院出院诊断', '提示', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        inputValue: state.patientData.出院诊断,
+    })
+        .then(({ value }) => {
+            const params = {
+                id: patientsInfo.value.id,
+                outDiagnoseFromPrevHospital: value
+            }
+            update(params).then(re => {
+                getPatData({ patCode: patientsInfo.value.code, }).then(res => {
+                    state.patientData = res.data
+                })
+            })
+        })
+        .catch(() => {
+            ElMessage({
+                type: 'info',
+                message: '取消修改',
+            })
+        })
+}
+/**打开修改身高 */
+const updateSg = () => {
+    ElMessageBox.prompt('请输入你要修改的身高单位cm', '提示', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        inputValue: state.patientData.身高,
+    })
+        .then(({ value }) => {
+            const params = {
+                id: patientsInfo.value.id,
+                patientHeight: value
+            }
+            update(params).then(re => {
+                getPatData({ patCode: patientsInfo.value.code, }).then(res => {
+                    state.patientData = res.data
+                })
+            })
+        })
+        .catch(() => {
+            ElMessage({
+                type: 'info',
+                message: '取消修改',
+            })
+        })
+}
+
+const BMI = computed(() => {
+    if (state.patientData.干体重 && state.patientData.身高) {
+        return (Number(state.patientData.干体重) / (Number(state.patientData.身高) / 100 * Number(state.patientData.身高) / 100)).toFixed(2)
+    } else {
+        return ''
+    }
+})
+const 透析年龄=computed(() => {
+    if (state.patientData['透析龄(月)']) {
+        const nian=Math.floor(Number(state.patientData['透析龄(月)']) / 12)===0?'':Math.floor(Number(state.patientData['透析龄(月)']) / 12)+'年'
+        const yue=(Number(state.patientData['透析龄(月)']) % 12)===0?'':Number(state.patientData['透析龄(月)']) % 12+'月'
+        return  nian +yue
+    } else {
+        return ''
+    }
+})
 // 第一步:定义子组件里面的方法
-const getData = (str: string) => {
-    console.log("患者档案子组件获取显示数据!" + str);
-    console.log(props.tableHeight)
+const getData = async (str: string) => {
     var pam = {
         patCode: patientsInfo.value.code,
     }
-    state.loading = true
-    getPatData(pam).then(re=>{
-        console.log(re.data)
-        state.patientData=re.data
+    const pam2 = {
+        clientCode: userInfos.value.clientCode,
+        patCode: patientsInfo.value.code,
+        date1: dayjs().add(-90, 'day').format('YYYY-MM-DD'),
+        date2: dayjs().format('YYYY-MM-DD'),
+    }
+    const pas3={
+        page: 0,
+        size: 0,
+        wherecondition:`patient_code='${patientsInfo.value.code}'`,
+    }
+    const pasm={
+        page: 0,
+        size: 0,
+        wherecondition:`survery_form_type=1 and patient_code='${patientsInfo.value.code}'`,
+        ordercondition: 'survery_time desc'
+    }
+    pasm.wherecondition+=` and survery_time BETWEEN '${dayjs().add(-90, 'day').format('YYYY-MM-DD')} 00:00:00' AND '${dayjs().format('YYYY-MM-DD')} 23:59:59'`
+    
+    try {
+        state.loading = true
+        getGtzList()
+        const [res1, res2,res3,res4] = await Promise.all([
+            getPatData(pam),
+            getLisResults(pam2),
+            listNurtion(pas3),
+            list(pasm) //查询评估表
+        ])
+        state.patientData = res1.data
+        state.listData=[]
+        console.log('赋值患者信息',state.patientData)
+        // 赛选异常的值
+        res2.data.forEach(e=>{
+            if(e.item_result_flag!=='z'){
+                state.listData.push(e)
+            }
+        })
+        state.营养筛查历史表=[]
+        state.营养筛查历史表=res4.data.list.map(e=>{
+            e.结果=JSON.parse(e.surveryJsonBody)
+            return e
+        })
+        console.log(state.营养筛查历史表)
+        console.log('--------------------')
+        // state.listData = res2.data
+        if(res3.data?.list.length>=1){
+            const row=res3.data.list[0]
+            console.log('taochanshuju----',row)
+            state.taochanId=row.id
+            state.taochan=JSON.parse(row.planJsonBody)
+        }else{
+            state.taochanId=0
+            state.taochan={
+                基础服务: '',
+                自购几月: '',
+                多少元套餐: '',
+                自购多少盒: '',
+                产品名称: ''
+            }
+        }
+        console.log('lis数据', state.listData)
+        state.loading = false
+    }
+    catch (error) {
+        state.loading = false
+        ElMessage.error('结果请求错误,请联系管理员!')
+    }
+
+}
+const getGtzList=()=>{
+    var data = {
+    wherecondition: `patient_code = '${patientsInfo.value.code}'`,
+    ordercondition: 'create_time desc'
+    }
+    getDryWeightList(data).then((res:any) => {
+        state.gtztableData = res.data.list
+    }).finally(()=>{
+        
     })
 }
+// 刷新套餐
+const getlistNurtion=()=>{
+    const pas3={
+        page: 0,
+        size: 0,
+        wherecondition:`patient_code='${patientsInfo.value.code}'`,
+    }
+    listNurtion(pas3).then(res3=>{
+        if(res3.data.list&&res3.data.list>=1){
+            const row=res3.data.list[0]
+            state.taochanId=row.id
+            state.taochan=JSON.parse(row.planJsonBody)
+        }else{
+            state.taochanId=0
+        }
+    })
+}
+
+onMounted(() => {
+    // console.log(dayjs().add(-7, 'day').format('YYYY-MM-DD'),'---shan')
+})
+
 
 // 第二步:暴露方法
 defineExpose({ getData })
 </script>
 
-<style  lang="scss">
- .gridtable {font-family: verdana,arial,sans-serif;font-size:11px;color:#333333;border-width: 1px;border-color: #666666;border-collapse: collapse;width: 100%;}
+<style lang="scss">
+.gridtable {
+    font-family: verdana, arial, sans-serif;
+    font-size: 14px;
+    color: #333333;
+    border-width: 1px;
+    border-color: #666666;
+    border-collapse: collapse;
+    width: 100%;
+}
 
-.gridtable th {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #dedede;}
+.gridtable th {
+    border-width: 1px;
+    padding: 8px;
+    border-style: solid;
+    border-color: #666666;
+    background-color: #dedede;
+}
 
-.gridtable td {border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #ffffff;}
+.gridtable td {
+    border-width: 1px;
+    padding: 8px;
+    border-style: solid;
+    border-color: #666666;
+    background-color: #ffffff;
+}
+
+.clearfix {
+    font-weight: 800;
+    flex: 1;
+    height: inherit;
+    display: flex;
+    align-items: center;
+    margin-top: -10px;
+    margin-bottom: 10px;
+}
+
+.itemLis {
+    margin-bottom: 10px;
+    width: 100%;
+    padding-left: 10px;
+    padding-right: 10px;
+    height: 100px;
+    // margin-top: 10px;
+    // line-height: 33px;
+    border: 1px solid #c7c9cd;
+    border-left: 3px solid #409EFF;
+    border-radius: 5px;
+    text-align: center;
+    margin-left: 10px;
+
+    .title {
+        text-align: left;
+        color: #909399;
+        font-size: 13px;
+        height: 20px;
+        line-height: 20px;
+    }
+
+    .itemRes {
+        height: 60px;
+        flex: 1;
+        display: flex;
+        align-items: center;
+        color: #303133;
+        font-size: 16px;
+
+        div {
+            width: 100%;
+            line-height: 30px;
+            text-align: center;
+            padding-left: 10px;
+            padding-right: 10px;
+        }
+
+        .itemResDtile:not(:first-child) {
+            width: 100%;
+            /* 在这里添加你想要的样式 */
+            border-left: 1px solid #909399;
+            /* 示例样式:为除第一个div外的所有div添加红色边框 */
+        }
+    }
+
+    .tdate {
+        color: #909399;
+        font-size: 13px;
+        height: 20px;
+        line-height: 20px;
+    }
+}
 </style>

--
Gitblit v1.8.0