From 475a352a4bfd7ac3a81e8c7c92d3bb64e2e01037 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期五, 27 二月 2026 15:48:37 +0800
Subject: [PATCH] 青岛维护提交

---
 src/views/business/maintain/components/LiverKidneyPanel.vue |  242 ++++++++++++++++++++++++------------------------
 1 files changed, 121 insertions(+), 121 deletions(-)

diff --git a/src/views/business/maintain/components/LiverKidneyPanel.vue b/src/views/business/maintain/components/LiverKidneyPanel.vue
index a485fed..beb903a 100644
--- a/src/views/business/maintain/components/LiverKidneyPanel.vue
+++ b/src/views/business/maintain/components/LiverKidneyPanel.vue
@@ -30,7 +30,7 @@
         class-name="leave-alone"
       >
         <template #default="scope">
-          <span :class="{'required-item': scope.row.required}">
+          <span :class="{ 'required-item': scope.row.required }">
             {{ scope.row.itemName }}
           </span>
         </template>
@@ -54,8 +54,11 @@
               class="value-input"
             />
             <span v-else class="value-display">
-              {{ scope.row.values[index] || '-' }}
-              <span v-if="scope.row.values[index] && scope.row.unit" class="unit">
+              {{ scope.row.values[index] || "-" }}
+              <span
+                v-if="scope.row.values[index] && scope.row.unit"
+                class="unit"
+              >
                 {{ scope.row.unit }}
               </span>
             </span>
@@ -65,8 +68,6 @@
           </div>
         </template>
       </el-table-column>
-
-
     </el-table>
 
     <!-- 闄勪欢涓婁紶鍖哄煙 -->
@@ -95,7 +96,9 @@
         <el-form-item
           label="鏃ユ湡"
           prop="date"
-          :rules="[{ required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }]"
+          :rules="[
+            { required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }
+          ]"
         >
           <el-date-picker
             v-model="columnForm.date"
@@ -108,7 +111,9 @@
         <el-form-item
           label="鏃堕棿"
           prop="time"
-          :rules="[{ required: true, message: '璇烽�夋嫨鏃堕棿', trigger: 'change' }]"
+          :rules="[
+            { required: true, message: '璇烽�夋嫨鏃堕棿', trigger: 'change' }
+          ]"
         >
           <el-time-picker
             v-model="columnForm.time"
@@ -130,65 +135,58 @@
 import UploadAttachment from "@/components/UploadAttachment";
 
 export default {
-  name: 'LiverKidneyPanel',
+  name: "LiverKidneyPanel",
   components: {
-    UploadAttachment,
+    UploadAttachment
   },
   props: {
     isEditing: {
       type: Boolean,
       default: false
     },
+    // 淇敼 prop 瀹氫箟锛屾敮鎸佸璞℃牸寮忕殑鍒濆鏁版嵁
     initialData: {
-      type: Array,
-      default: () => []
+      type: Object,
+      default: () => ({})
     }
   },
   data() {
     return {
       tableData: [],
-      dynamicColumns: [
-        {
-          label: '2024-12-27\n08:00',
-          key: 'time1',
-          date: '2024-12-27',
-          time: '08:00'
-        },
-        {
-          label: '2024-12-27\n14:00',
-          key: 'time2',
-          date: '2024-12-27',
-          time: '14:00'
-        }
-      ],
+      dynamicColumns: [],
       attachments: [],
       columnDialogVisible: false,
       columnForm: {
-        date: '',
-        time: ''
+        date: "",
+        time: ""
       },
-      tableKey: 0 // 鐢ㄤ簬寮哄埗閲嶆柊娓叉煋琛ㄦ牸
+      tableKey: 0,
+      // 鍐呴儴鏁版嵁鐘舵��
+      internalData: {}
     };
   },
   watch: {
+    // 鐩戝惉 initialData 鍙樺寲锛岀‘淇濇暟鎹纭帴鏀� [5](@ref)
+    initialData: {
+      handler(newData) {
+        if (newData && Object.keys(newData).length > 0) {
+          this.internalData = { ...newData };
+          this.initFromExternalData();
+        }
+      },
+      immediate: true,
+      deep: true
+    },
     isEditing(newVal) {
       if (!newVal) {
-        // 淇濆瓨鏁版嵁
-        this.$emit('data-change', {
-          type: 'liver_kidney',
-          data: this.tableData,
-          columns: this.dynamicColumns,
-          attachments: this.attachments
-        });
+        this.saveData();
       }
-      // 缂栬緫妯″紡鍒囨崲鏃堕噸鏂拌绠楀垪瀹�
       this.$nextTick(() => {
         this.forceTableLayout();
       });
     },
     dynamicColumns: {
       handler() {
-        // 鍒楀彉鍖栨椂閲嶆柊璁$畻甯冨眬
         this.$nextTick(() => {
           this.forceTableLayout();
         });
@@ -197,94 +195,99 @@
     }
   },
   methods: {
+    // 浠庡閮ㄦ暟鎹垵濮嬪寲缁勪欢 [9](@ref)
+    initFromExternalData() {
+      if (this.internalData.data && this.internalData.columns) {
+        // 浣跨敤澶栭儴鏁版嵁鍒濆鍖栬〃鏍�
+        this.tableData = this.internalData.data.map(item => ({
+          ...item,
+          values:
+            item.values || new Array(this.internalData.columns.length).fill("")
+        }));
+        this.dynamicColumns = [...this.internalData.columns];
+      } else {
+        // 濡傛灉娌℃湁澶栭儴鏁版嵁锛屼娇鐢ㄩ粯璁ゅ垵濮嬪寲
+        this.initTableData();
+      }
+
+      // 鍒濆鍖栭檮浠�
+      if (this.internalData.attachments) {
+        this.attachments = [...this.internalData.attachments];
+      }
+    },
+
+    // 鍒濆鍖栭粯璁よ〃鏍兼暟鎹�
     initTableData() {
       const medicalItems = [
         {
-          itemName: '琛�閽�',
-          unit: 'mmol/L',
+          itemName: "琛�閽�",
+          unit: "mmol/L",
           required: true,
-          reference: '135-145'
+          reference: "135-145"
         },
         {
-          itemName: '琛�閽�',
-          unit: 'mmol/L',
+          itemName: "琛�閽�",
+          unit: "mmol/L",
           required: true,
-          reference: '3.5-5.5'
+          reference: "3.5-5.5"
         },
+        { itemName: "BUN", unit: "mg/dL", required: true, reference: "<20" },
+        { itemName: "鑲岄厫", unit: "渭mol/L", required: true, reference: "<100" },
         {
-          itemName: 'BUN',
-          unit: 'mg/dL',
+          itemName: "鎬昏儐绾㈢礌",
+          unit: "渭mol/L",
           required: true,
-          reference: '<20'
+          reference: "<21"
         },
-        {
-          itemName: '鑲岄厫',
-          unit: '渭mol/L',
-          required: true,
-          reference: '<100'
-        },
-        {
-          itemName: '鎬昏儐绾㈢礌',
-          unit: '渭mol/L',
-          required: true,
-          reference: '<21'
-        },
-        {
-          itemName: 'ALT',
-          unit: 'U/L',
-          required: true,
-          reference: '<50'
-        },
-        {
-          itemName: 'AST',
-          unit: 'U/L',
-          required: true,
-          reference: '<40'
-        },
-        {
-          itemName: 'GGT',
-          unit: 'U/L',
-          required: true,
-          reference: '<57'
-        },
-        {
-          itemName: 'ALP',
-          unit: 'U/L',
-          required: true,
-          reference: '<120'
-        },
-        {
-          itemName: 'PT',
-          unit: '绉�',
-          required: true,
-          reference: '9.4-12.5'
-        },
-        {
-          itemName: 'INR',
-          unit: '',
-          required: true,
-          reference: '0.85-1.15'
-        }
+        { itemName: "ALT", unit: "U/L", required: true, reference: "<50" },
+        { itemName: "AST", unit: "U/L", required: true, reference: "<40" },
+        { itemName: "GGT", unit: "U/L", required: true, reference: "<57" },
+        { itemName: "ALP", unit: "U/L", required: true, reference: "<120" },
+        { itemName: "PT", unit: "绉�", required: true, reference: "9.4-12.5" },
+        { itemName: "INR", unit: "", required: true, reference: "0.85-1.15" }
       ];
+
+      // 濡傛灉娌℃湁鍔ㄦ�佸垪锛屽垵濮嬪寲榛樿鍒�
+      if (this.dynamicColumns.length === 0) {
+        this.dynamicColumns = [
+          {
+            label: `${new Date().toISOString().split("T")[0]}\n08:00`,
+            key: "time1",
+            date: new Date().toISOString().split("T")[0],
+            time: "08:00"
+          }
+        ];
+      }
 
       this.tableData = medicalItems.map(item => ({
         ...item,
-        values: new Array(this.dynamicColumns.length).fill('')
+        values: new Array(this.dynamicColumns.length).fill("")
       }));
+    },
+
+    // 淇濆瓨鏁版嵁鍒扮埗缁勪欢 [2](@ref)
+    saveData() {
+      const dataToEmit = {
+        type: "liver_kidney",
+        data: this.tableData,
+        columns: this.dynamicColumns,
+        attachments: this.attachments
+      };
+      this.$emit("data-change", dataToEmit);
     },
 
     addColumn() {
       this.columnForm = {
-        date: new Date().toISOString().split('T')[0],
-        time: '08:00'
+        date: new Date().toISOString().split("T")[0],
+        time: "08:00"
       };
       this.columnDialogVisible = true;
     },
 
     confirmAddColumn() {
-      this.$refs.columnForm.validate((valid) => {
+      this.$refs.columnForm.validate(valid => {
         if (!valid) {
-          this.$message.warning('璇峰畬鍠勬椂闂寸偣淇℃伅');
+          this.$message.warning("璇峰畬鍠勬椂闂寸偣淇℃伅");
           return;
         }
 
@@ -295,64 +298,60 @@
           date: this.columnForm.date,
           time: this.columnForm.time
         };
+        this.internalData.columns.push(newColumn);
 
         this.dynamicColumns.push(newColumn);
 
         // 涓烘墍鏈夎鏂板涓�涓┖鍊�
         this.tableData.forEach(row => {
-          row.values.push('');
+          if (!row.values) {
+            row.values = [];
+          }
+          row.values.push("");
         });
 
         this.columnDialogVisible = false;
-        this.$message.success('鏃堕棿鐐规坊鍔犳垚鍔�');
-
-        // 寮哄埗琛ㄦ牸閲嶆柊娓叉煋
+        this.$message.success("鏃堕棿鐐规坊鍔犳垚鍔�");
         this.tableKey += 1;
       });
     },
 
     handleDialogClosed() {
       this.columnForm = {
-        date: '',
-        time: ''
+        date: "",
+        time: ""
       };
       this.$refs.columnForm && this.$refs.columnForm.clearValidate();
     },
 
     handleValueChange(row, columnIndex) {
-      this.$emit('data-change', {
-        type: 'liver_kidney',
-        data: this.tableData,
-        columns: this.dynamicColumns
-      });
+      this.saveData();
     },
 
     handleAttachmentChange(fileList) {
       this.attachments = fileList;
-      this.$emit('attachment-change', {
-        type: 'liver_kidney',
+      this.$emit("attachment-change", {
+        type: "liver_kidney",
         attachments: fileList
       });
     },
 
-    // 寮哄埗琛ㄦ牸閲嶆柊甯冨眬[1,3](@ref)
     forceTableLayout() {
       this.$nextTick(() => {
-        const table = this.$el.querySelector('.el-table');
-        if (table && table.querySelector('colgroup')) {
-          // 瑙﹀彂琛ㄦ牸閲嶆柊璁$畻甯冨眬
+        const table = this.$el.querySelector(".el-table");
+        if (table && table.querySelector("colgroup")) {
           this.$nextTick(() => {
-            window.dispatchEvent(new Event('resize'));
+            window.dispatchEvent(new Event("resize"));
           });
         }
       });
     },
 
     handleHeaderDragEnd() {
-      // 鍒楀鎷栨嫿缁撴潫鍚庨噸鏂拌绠楀竷灞�
       this.forceTableLayout();
     },
 
+    // 鎻愪緵鏁版嵁瀵煎嚭鏂规硶渚涚埗缁勪欢璋冪敤
     exportData() {
       return {
         tableData: this.tableData,
@@ -363,9 +362,11 @@
     }
   },
   mounted() {
-    this.initTableData();
-    // 鍒濆娓叉煋鍚庤绠楀垪瀹�
+    // 纭繚缁勪欢姝g‘鎸傝浇鍚庡垵濮嬪寲鏁版嵁 [1](@ref)
     this.$nextTick(() => {
+      if (Object.keys(this.internalData).length === 0) {
+        this.initTableData();
+      }
       this.forceTableLayout();
     });
   }
@@ -464,7 +465,6 @@
   font-weight: normal;
 }
 
-/* 鍝嶅簲寮忚璁� */
 @media (max-width: 768px) {
   .medical-panel {
     padding: 10px;

--
Gitblit v1.9.3