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/project/donatebaseinfo/EditCaseModal.vue           |  911 ++++++
 src/views/business/maintain/components/UrineRoutinePanel.vue |  333 +-
 src/components/TerminateRestoreModal/index.vue               |  408 ++
 src/views/project/donatebaseinfo/index.vue                   | 1984 ++-----------
 src/views/business/affirm/index.vue                          |  304 +
 src/views/business/maintain/components/LiverKidneyPanel.vue  |  242 
 src/views/business/maintain/index.vue                        |  392 +-
 src/views/business/assess/index.vue                          |  425 +-
 src/api/project/donatebaseinfo.js                            |    6 
 src/views/business/assess/components/OrganAssessmentForm.vue |   20 
 src/views/project/DonationProcess/index.vue                  |  259 +
 src/views/business/affirm/affirmInfo.vue                     |  884 +++--
 src/views/business/maintain/maintainInfo.vue                 |  989 ++----
 src/api/businessApi/affirm.js                                |   44 
 src/api/businessApi/assess.js                                |   12 
 src/views/business/maintain/components/BloodRoutinePanel.vue |  291 +
 src/views/business/assess/assessInfo.vue                     |  953 ++++--
 17 files changed, 4,489 insertions(+), 3,968 deletions(-)

diff --git a/src/api/businessApi/affirm.js b/src/api/businessApi/affirm.js
index e69de29..61893c3 100644
--- a/src/api/businessApi/affirm.js
+++ b/src/api/businessApi/affirm.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 涓婃姤妗堜緥鏂板
+export function relativesAdd(data) {
+  return request({
+    url: '/project/relativesconfirmation/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 涓婃姤妗堜緥淇敼
+export function relativesEdit(data) {
+  return request({
+    url: '/project/relativesconfirmation/edit',
+    method: 'post',
+    data: data
+  })
+}
+// 涓婃姤妗堜緥鍒楄〃
+export function relativesList(data) {
+  return request({
+    url: '/project/relativesconfirmation/confirmationBaseInfoList',
+    method: 'post',
+    data: data
+  })
+}
+
+// 妗堜緥璇︽儏
+export function relativesInfo(id) {
+  return request({
+    url: '/project/relativesconfirmation/getInfo/' + id,
+    method: 'get'
+  })
+}
+
+// 鍒犻櫎
+export function relativesDel(id) {
+  return request({
+    url: '/project/relativesconfirmation/remove/' + id,
+    method: 'get'
+  })
+}
+
diff --git a/src/api/businessApi/assess.js b/src/api/businessApi/assess.js
index db1b6aa..faf5e96 100644
--- a/src/api/businessApi/assess.js
+++ b/src/api/businessApi/assess.js
@@ -3,7 +3,15 @@
 // 涓婃姤妗堜緥鏂板
 export function assessAdd(data) {
   return request({
-    url: '/project/assessbaseinforeport/add',
+    url: '/project/medicalevaluation/add',
+    method: 'post',
+    data: data
+  })
+}
+// 涓婃姤妗堜緥鏂板
+export function assessedit(data) {
+  return request({
+    url: '/project/medicalevaluation/edit',
     method: 'post',
     data: data
   })
@@ -12,7 +20,7 @@
 // 妗堜緥鍒楄〃鍙婅鎯�
 export function evaluateBaseInfolist(data) {
   return request({
-    url: '/project/medicalevaluation/evaluateBaseInfolist',
+    url: '/project/medicalevaluation/medevaluateBaseInfolist',
     method: 'post',
     data: data
   })
diff --git a/src/api/project/donatebaseinfo.js b/src/api/project/donatebaseinfo.js
index ec3f7dd..ee6177b 100644
--- a/src/api/project/donatebaseinfo.js
+++ b/src/api/project/donatebaseinfo.js
@@ -1,11 +1,11 @@
 import request from '@/utils/request'
 
 // 鏌ヨ鎹愮尞鍩虹鍒楄〃
-export function listDonatebaseinfo(query) {
+export function listDonatebaseinfo(data) {
   return request({
     url: '/project/donatebaseinfo/list',
-    method: 'get',
-    params: query
+    method: 'post',
+    data: data
   })
 }
 export function listDonationProcess(query) {
diff --git a/src/components/TerminateRestoreModal/index.vue b/src/components/TerminateRestoreModal/index.vue
new file mode 100644
index 0000000..bfbba4c
--- /dev/null
+++ b/src/components/TerminateRestoreModal/index.vue
@@ -0,0 +1,408 @@
+<template>
+  <div>
+    <!-- 缁堟纭寮规 -->
+    <el-dialog
+      :title="terminateTitle"
+      :visible.sync="terminateVisible"
+      width="800px"
+      append-to-body
+      :close-on-click-modal="false"
+      @close="handleTerminateClose"
+    >
+      <div class="patient-info">
+        <el-alert
+          :title="
+            `褰撳墠鎿嶄綔鎮h�咃細${currentRecord.name} (${currentRecord.idcardno ||
+              '鏃犺瘉浠跺彿'})`
+          "
+          type="info"
+          :closable="false"
+          show-icon
+        />
+      </div>
+
+      <el-form
+        :model="terminateForm"
+        :rules="terminateRules"
+        ref="terminateFormRef"
+        label-width="100px"
+        class="terminate-form"
+      >
+        <el-form-item label="缁堟绫诲瀷" prop="terminationType">
+          <el-select
+            v-model="terminateForm.terminationType"
+            placeholder="璇烽�夋嫨缁堟绫诲瀷"
+            style="width: 100%;"
+          >
+            <el-option
+              v-for="item in terminationTypes"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="璇︾粏鍘熷洜" prop="terminationResult">
+          <el-input
+            v-model="terminateForm.terminationResult"
+            type="textarea"
+            :rows="3"
+            placeholder="璇疯緭鍏ョ粓姝㈢殑璇︾粏鍘熷洜"
+            maxlength="200"
+            show-word-limit
+          />
+        </el-form-item>
+
+        <el-form-item label="浜屾纭" prop="confirmText">
+          <el-input
+            v-model="terminateForm.confirmText"
+            placeholder="璇疯緭鍏�'纭缁堟'浠ュ畬鎴愭搷浣�"
+            @input="handleConfirmTextChange"
+          />
+        </el-form-item>
+      </el-form>
+
+      <div slot="footer">
+        <el-button @click="handleTerminateClose" :disabled="terminateLoading"
+          >鍙栨秷</el-button
+        >
+        <el-button
+          type="danger"
+          :disabled="!canSubmitTerminate"
+          @click="handleTerminateSubmit"
+          :loading="terminateLoading"
+        >
+          纭缁堟
+        </el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 鎭㈠纭寮规 -->
+    <el-dialog
+      :title="restoreTitle"
+      :visible.sync="restoreVisible"
+      width="600px"
+      append-to-body
+      :close-on-click-modal="false"
+    >
+      <div class="patient-info">
+        <el-alert
+          :title="
+            `褰撳墠鎿嶄綔鎮h�咃細${currentRecord.name} (${currentRecord.idcardno ||
+              '鏃犺瘉浠跺彿'})`
+          "
+          type="info"
+          :closable="false"
+          show-icon
+        />
+      </div>
+
+      <div style="margin: 20px 0;">
+        <p>
+          纭畾瑕佹仮澶嶆崘鐚��
+          <strong>{{ currentRecord.name }}</strong> 鐨勬崘鐚繘绋嬪悧锛�
+        </p>
+        <p style="color: #67c23a; font-size: 12px; margin-top: 10px;">
+          鎭㈠鍚庯紝璇ユ渚嬪皢閲嶆柊杩涘叆鎹愮尞娴佺▼
+        </p>
+      </div>
+      <div slot="footer">
+        <el-button @click="restoreVisible = false" :disabled="restoreLoading"
+          >鍙栨秷</el-button
+        >
+        <el-button
+          type="success"
+          @click="handleRestoreSubmit"
+          :loading="restoreLoading"
+        >
+          纭鎭㈠
+        </el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { updateDonatebaseinfo } from "@/api/project/donatebaseinfo";
+
+export default {
+  name: "TerminateRestoreModal",
+  props: {
+    // 褰撳墠鎿嶄綔璁板綍
+    currentRecord: {
+      type: Object,
+      default: () => ({})
+    },
+    // 寮规鏄剧ず鐘舵��
+    visible: {
+      type: Object,
+      default: () => ({
+        terminate: false,
+        restore: false
+      })
+    },
+    // 鑷畾涔夋爣棰�
+    titles: {
+      type: Object,
+      default: () => ({
+        terminate: "缁堟鎹愮尞杩涚▼",
+        restore: "鎭㈠鎹愮尞杩涚▼"
+      })
+    }
+  },
+  data() {
+    return {
+      // 缁堟琛ㄥ崟
+      terminateForm: {
+        terminationType: "",
+        terminationResult: "",
+        confirmText: ""
+      },
+      // 缁堟绫诲瀷閫夐」
+      terminationTypes: [
+        { label: "濂借浆", value: "1" },
+        { label: "姝讳骸", value: "2" },
+        { label: "涓嶇鍚堟崘鐚繘绋�", value: "3" },
+        { label: "瀹跺睘鏀惧純鎹愮尞", value: "4" },
+        { label: "鍏朵粬", value: "5" }
+      ],
+      // 楠岃瘉瑙勫垯
+      terminateRules: {
+        terminationType: [
+          { required: true, message: "璇烽�夋嫨缁堟绫诲瀷", trigger: "change" }
+        ],
+        terminationResult: [
+          { required: true, message: "璇疯緭鍏ョ粓姝㈠師鍥�", trigger: "blur" },
+          { min: 5, message: "缁堟鍘熷洜鑷冲皯5涓瓧绗�", trigger: "blur" }
+        ]
+      },
+      // 鍔犺浇鐘舵��
+      terminateLoading: false,
+      restoreLoading: false,
+      // 鎺у埗鎻愪氦
+      canSubmitTerminate: false
+    };
+  },
+  computed: {
+    terminateVisible: {
+      get() {
+        return this.visible.terminate;
+      },
+      set(value) {
+        this.$emit("update:visible", { ...this.visible, terminate: value });
+      }
+    },
+    restoreVisible: {
+      get() {
+        return this.visible.restore;
+      },
+      set(value) {
+        this.$emit("update:visible", { ...this.visible, restore: value });
+      }
+    },
+    terminateTitle() {
+      return this.titles.terminate;
+    },
+    restoreTitle() {
+      return this.titles.restore;
+    },
+    // 鎮h�呬俊鎭樉绀�
+    patientInfo() {
+      return `${this.currentRecord.name} (${this.currentRecord.idcardno ||
+        "鏃犺瘉浠跺彿"})`;
+    }
+  },
+  watch: {
+    "visible.terminate": {
+      handler(newVal) {
+        if (newVal) {
+          this.resetTerminateForm();
+        }
+      },
+      immediate: true
+    }
+  },
+  methods: {
+    /** 閲嶇疆缁堟琛ㄥ崟 */
+    resetTerminateForm() {
+      this.terminateForm = {
+        terminationType: "",
+        terminationResult: "",
+        confirmText: ""
+      };
+      this.canSubmitTerminate = false;
+      this.terminateLoading = false;
+
+      // 閲嶇疆琛ㄥ崟楠岃瘉
+      this.$nextTick(() => {
+        if (this.$refs.terminateFormRef) {
+          this.$refs.terminateFormRef.clearValidate();
+        }
+      });
+    },
+
+    /** 纭鏂囨湰鍙樺寲澶勭悊 */
+    handleConfirmTextChange(value) {
+      this.canSubmitTerminate = value === "纭缁堟";
+    },
+
+    /** 缁堟寮规鍏抽棴澶勭悊 */
+    handleTerminateClose() {
+      this.terminateVisible = false;
+      this.resetTerminateForm();
+    },
+
+    /** 缁堟鍓嶇殑浜屾纭 */
+    async confirmTermination() {
+      try {
+        await this.$confirm(
+          `鏄惁纭缁堟鎮h�� ${this.patientInfo} 鐨勬崘鐚渚嬶紵姝ゆ搷浣滃皢缁堟璇ユ偅鑰呯殑鎹愮尞杩涚▼銆俙,
+          "璀﹀憡",
+          {
+            confirmButtonText: "纭畾",
+            cancelButtonText: "鍙栨秷",
+            type: "warning",
+            closeOnClickModal: false,
+            closeOnPressEscape: false
+          }
+        );
+        return true;
+      } catch (error) {
+        console.log("鐢ㄦ埛鍙栨秷缁堟鎿嶄綔");
+        return false;
+      }
+    },
+
+    /** 鎭㈠鍓嶇殑浜屾纭 */
+    async confirmRestoration() {
+      try {
+        await this.$confirm(
+          `鏄惁纭鎭㈠鎮h�� ${this.patientInfo} 鐨勬崘鐚渚嬶紵鎭㈠鍚庤妗堜緥灏嗛噸鏂拌繘鍏ユ崘鐚祦绋嬨�俙,
+          "纭鎭㈠",
+          {
+            confirmButtonText: "纭畾",
+            cancelButtonText: "鍙栨秷",
+            type: "info",
+            closeOnClickModal: false,
+            closeOnPressEscape: false
+          }
+        );
+        return true;
+      } catch (error) {
+        console.log("鐢ㄦ埛鍙栨秷鎭㈠鎿嶄綔");
+        return false;
+      }
+    },
+
+    /** 鎻愪氦缁堟 */
+    async handleTerminateSubmit() {
+      try {
+        // 琛ㄥ崟楠岃瘉
+        await this.$refs.terminateFormRef.validate();
+
+        if (!this.canSubmitTerminate) {
+          this.$message.warning('璇疯緭鍏�"纭缁堟"瀹屾垚楠岃瘉');
+          return;
+        }
+        console.log(66);
+
+        // 浜屾纭
+        const userConfirmed = await this.confirmTermination();
+        if (!userConfirmed) {
+          return;
+        }
+
+        this.terminateLoading = true;
+
+        // 璋冪敤缁堟鎺ュ彛
+        await updateDonatebaseinfo({
+          id: this.currentRecord.id,
+          caseNo: this.currentRecord.caseNo,
+          terminationType: this.terminateForm.terminationType,
+          terminationResult: this.terminateForm.terminationResult,
+          terminationCase: 1
+        });
+
+        this.$message.success("缁堟鎴愬姛");
+        this.terminateVisible = false;
+
+        // 閫氱煡鐖剁粍浠舵搷浣滃畬鎴愶紝闇�瑕佸埛鏂版暟鎹�
+        this.$emit("operation-success", {
+          type: "terminate",
+          record: this.currentRecord,
+          terminationType: this.terminateForm.terminationType
+        });
+      } catch (error) {
+        if (error instanceof Error) {
+          this.$message.error("缁堟澶辫触");
+          console.error("缁堟閿欒:", error);
+        }
+        // 楠岃瘉澶辫触涓嶆樉绀洪敊璇秷鎭�
+      } finally {
+        this.terminateLoading = false;
+      }
+    },
+
+    /** 鎻愪氦鎭㈠ */
+    async handleRestoreSubmit() {
+      try {
+        // 浜屾纭
+        const userConfirmed = await this.confirmRestoration();
+        if (!userConfirmed) {
+          return;
+        }
+
+        this.restoreLoading = true;
+
+        // 璋冪敤鎭㈠鎺ュ彛
+        await updateDonatebaseinfo({
+          id: this.currentRecord.id,
+          caseNo: this.currentRecord.caseNo,
+          terminationCase: 0
+        });
+
+        this.$message.success("鎭㈠鎴愬姛");
+        this.restoreVisible = false;
+
+        // 閫氱煡鐖剁粍浠舵搷浣滃畬鎴愶紝闇�瑕佸埛鏂版暟鎹�
+        this.$emit("operation-success", {
+          type: "restore",
+          record: this.currentRecord
+        });
+      } catch (error) {
+        this.$message.error("鎭㈠澶辫触");
+        console.error("鎭㈠閿欒:", error);
+      } finally {
+        this.restoreLoading = false;
+      }
+    }
+  }
+};
+</script>
+
+<style scoped>
+.patient-info {
+  margin-bottom: 20px;
+  font-size: 18px;
+}
+
+.terminate-form {
+  margin-top: 15px;
+}
+
+/* 鍝嶅簲寮忚皟鏁� */
+@media (max-width: 768px) {
+  .patient-info ::v-deep .el-alert {
+    padding: 8px 16px;
+  }
+
+  .terminate-form ::v-deep .el-form-item__label {
+    width: 80px !important;
+  }
+
+  .terminate-form ::v-deep .el-form-item__content {
+    margin-left: 80px !important;
+  }
+}
+</style>
diff --git a/src/views/business/affirm/affirmInfo.vue b/src/views/business/affirm/affirmInfo.vue
index 5932ac3..ce4013d 100644
--- a/src/views/business/affirm/affirmInfo.vue
+++ b/src/views/business/affirm/affirmInfo.vue
@@ -5,10 +5,10 @@
       <div slot="header" class="clearfix">
         <span class="detail-title">鎹愮尞纭鍩烘湰淇℃伅</span>
         <el-button
-          v-if="$route.query.confirm"
-          type="primary"
-          style="float: right; padding: 3px 0"
+          type="success"
+          style="float: right;"
           @click="handleSave"
+          :loading="saveLoading"
         >
           淇濆瓨纭淇℃伅
         </el-button>
@@ -18,23 +18,19 @@
         <el-row :gutter="20">
           <el-col :span="8">
             <el-form-item label="浣忛櫌鍙�" prop="caseNo">
-              <el-input v-model="form.caseNo" :readonly="!isEdit" />
+              <el-input v-model="form.caseNo" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
-              <el-input v-model="form.donorName" :readonly="!isEdit" />
+            <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
+              <el-input v-model="form.name" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鎬у埆" prop="gender">
-              <el-select
-                v-model="form.gender"
-                :disabled="!isEdit"
-                style="width: 100%"
-              >
-                <el-option label="鐢�" value="0" />
-                <el-option label="濂�" value="1" />
+            <el-form-item label="鎬у埆" prop="sex">
+              <el-select v-model="form.sex" style="width: 100%">
+                <el-option label="鐢�" value="1" />
+                <el-option label="濂�" value="2" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -43,91 +39,158 @@
         <el-row :gutter="20">
           <el-col :span="8">
             <el-form-item label="骞撮緞" prop="age">
-              <el-input v-model="form.age" :readonly="!isEdit" />
+              <el-input v-model="form.age" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鐤剧梾璇婃柇" prop="diagnosis">
-              <el-input v-model="form.diagnosis" :readonly="!isEdit" />
+            <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
+              <el-input v-model="form.diagnosisname" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="hospitalName">
-              <el-input v-model="form.hospitalName" :readonly="!isEdit" />
+            <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="treatmenthospitalname">
+              <el-input v-model="form.treatmenthospitalname" />
             </el-form-item>
           </el-col>
         </el-row>
 
         <el-row :gutter="20">
           <el-col :span="8">
-            <el-form-item label="鍗忚皟鍛�1" prop="coordinator1">
-              <el-input v-model="form.coordinator1" :readonly="!isEdit" />
+            <el-form-item label="鍗忚皟鍛�1" prop="coordinatedusernameo">
+              <el-input v-model="form.coordinatedusernameo" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鍗忚皟鍛�2" prop="coordinator2">
-              <el-input v-model="form.coordinator2" :readonly="!isEdit" />
+            <el-form-item label="鍗忚皟鍛�2" prop="coordinatedusernamet">
+              <el-input v-model="form.coordinatedusernamet" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="涓氬姟浜哄憳" prop="assignee">
-              <el-input v-model="form.assignee" :readonly="!isEdit" />
+            <el-form-item label="涓氬姟浜哄憳" prop="responsibleusername">
+              <el-input v-model="form.responsibleusername" />
             </el-form-item>
           </el-col>
         </el-row>
 
         <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="纭鐘舵��" prop="confirmationStatus">
+          <!-- <el-col :span="8">
+            <el-form-item label="纭鐘舵��" prop="relativeconfirmationsign">
               <el-select
-                v-model="form.confirmationStatus"
-
+                v-model="form.relativeconfirmationsign"
                 style="width: 100%"
+
               >
                 <el-option label="鏈‘璁�" value="0" />
                 <el-option label="瀹跺睘纭" value="1" />
                 <el-option label="涓嶅悓鎰忔崘鐚�" value="2" />
               </el-select>
             </el-form-item>
-          </el-col>
+          </el-col> -->
           <el-col :span="8">
-            <el-form-item label="纭鏃堕棿" prop="confirmationTime">
+            <el-form-item label="绛惧瓧鏃堕棿" prop="signdate">
               <el-date-picker
-                v-model="form.confirmationTime"
+                v-model="form.signdate"
                 type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
+                value-format="yyyy-MM-dd"
                 style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <!-- <el-col :span="8">
+            <el-form-item label="琛�鍨�" prop="bloodtype">
+              <el-input v-model="form.bloodtype"  />
+            </el-form-item>
+          </el-col> -->
+        </el-row>
 
+        <!-- <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
+              <el-input v-model="form.idcardno"  />
+            </el-form-item>
+          </el-col>
+        </el-row> -->
+
+        <!-- 浜插睘淇℃伅 -->
+        <!-- 浜插睘淇℃伅 -->
+        <el-divider content-position="left">浜插睘纭淇℃伅</el-divider>
+
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="浜插睘濮撳悕" prop="relativeconfirmationsignname">
+              <el-input
+                v-model="form.relativeconfirmationsignname"
+                placeholder="璇疯緭鍏ヤ翰灞炲鍚�"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="涓庢崘璧犺�呭叧绯�" prop="familyrelations">
+              <el-select
+                v-model="form.familyrelations"
+                placeholder="璇烽�夋嫨涓庢崘璧犺�呭叧绯�"
+              >
+                <el-option
+                  v-for="dict in dict.type.sys_FamilyRelation || []"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="浜插睘韬唤璇�" prop="relativeidcardno">
+              <el-input
+                v-model="form.relativeidcardno"
+                placeholder="璇疯緭鍏ヤ翰灞炶瘉浠跺彿鐮�"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="浜插睘鐢佃瘽" prop="relativephone">
+              <el-input
+                v-model="form.relativephone"
+                placeholder="璇疯緭鍏ヤ翰灞炶仈绯荤數璇�"
               />
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-form-item label="瀹跺睘鎰忚澶囨敞" prop="familyRemark">
+        <el-row>
+          <el-form-item label-width="100px" label="鎹愮尞鍐冲畾">
+            <el-checkbox-group v-model="organdecision">
+              <el-checkbox
+                v-for="item in organselection"
+                :key="item"
+                :label="item"
+                >{{ item }}
+              </el-checkbox>
+            </el-checkbox-group>
+            <el-input
+              v-if="organdecision.includes('鍏朵粬')"
+              v-model="organdecisionOther"
+              placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
+              style="margin-top: 10px; width: 300px;"
+            ></el-input>
+          </el-form-item>
+        </el-row>
+
+        <el-form-item label="瀹跺睘鎰忚澶囨敞" prop="relativeRemark">
           <el-input
             type="textarea"
             :rows="3"
-            v-model="form.familyRemark"
-            :readonly="!isEdit"
+            v-model="form.relativeRemark"
             placeholder="璁板綍瀹跺睘鐨勬剰瑙佸拰娌熼�氭儏鍐�"
           />
         </el-form-item>
       </el-form>
     </el-card>
 
-    <!-- 闄勪欢鍒楄〃 -->
+    <!-- 闄勪欢淇℃伅 - 鎸夌被鍨嬪垎绫� -->
     <el-card class="attachment-card">
       <div slot="header" class="clearfix">
         <span class="detail-title">鐩稿叧闄勪欢涓婁紶</span>
-        <el-button
-          v-if="isEdit"
-          type="primary"
-          size="mini"
-          @click="handleSaveAll"
-          :loading="saveLoading"
-        >
-          淇濆瓨鎵�鏈夐檮浠�
-        </el-button>
       </div>
 
       <!-- 闄勪欢绫诲瀷閫夐」鍗� -->
@@ -138,8 +201,8 @@
           :label="type.label"
           :name="type.value"
         >
-          <div class="attachment-upload-section">
-            <div class="upload-header">
+          <div class="attachment-section">
+            <div class="attachment-header">
               <span class="upload-title">{{ type.label }}</span>
               <el-tooltip content="鐐瑰嚮涓婁紶璇ョ被鍨嬮檮浠�" placement="top">
                 <el-button
@@ -147,97 +210,87 @@
                   type="primary"
                   icon="el-icon-plus"
                   @click="openUploadDialog(type.value)"
-                  :disabled="!isEdit"
                 >
                   娣诲姞闄勪欢
                 </el-button>
               </el-tooltip>
             </div>
 
-            <!-- 闄勪欢鍒楄〃 -->
-            <el-table
-              :data="getAttachmentsByType(type.value)"
-              v-loading="attachmentLoading"
-              style="width: 100%; margin-top: 15px;"
-            >
-              <el-table-column label="鏂囦欢鍚嶇О" min-width="200">
-                <template slot-scope="scope">
-                  <div class="file-info">
+            <!-- 褰撳墠绫诲瀷鐨勯檮浠跺垪琛� -->
+            <div class="attachment-list">
+              <el-table
+                :data="getAttachmentsByType(type.value)"
+                size="small"
+                v-loading="attachmentLoading"
+                style="width: 100%;"
+              >
+                <el-table-column label="鏂囦欢鍚�" min-width="200">
+                  <template slot-scope="scope">
                     <i
                       class="el-icon-document"
-                      style="margin-right: 8px; color: #409EFF;"
+                      style="color: #409EFF; margin-right: 8px;"
                     ></i>
-                    <span>{{ scope.row.fileName }}</span>
-                  </div>
-                </template>
-              </el-table-column>
+                    <span class="file-name">{{ scope.row.fileName }}</span>
+                  </template>
+                </el-table-column>
 
-              <el-table-column label="鏂囦欢澶у皬" width="100" align="center">
-                <template slot-scope="scope">
-                  <span>{{ formatFileSize(scope.row.fileSize) }}</span>
-                </template>
-              </el-table-column>
+                <el-table-column label="鏂囦欢绫诲瀷" width="100" align="center">
+                  <template slot-scope="scope">
+                    <el-tag size="small">{{
+                      getFileType(scope.row.fileName)
+                    }}</el-tag>
+                  </template>
+                </el-table-column>
 
-              <el-table-column label="涓婁紶鏃堕棿" width="160" align="center">
-                <template slot-scope="scope">
-                  <span>{{ parseTime(scope.row.uploadTime) }}</span>
-                </template>
-              </el-table-column>
+                <el-table-column label="鏂囦欢澶у皬" width="100" align="center">
+                  <template slot-scope="scope">
+                    <span>{{ formatFileSize(scope.row.fileSize) }}</span>
+                  </template>
+                </el-table-column>
 
-              <el-table-column label="涓婁紶浜�" width="100" align="center">
-                <template slot-scope="scope">
-                  <span>{{ scope.row.uploader }}</span>
-                </template>
-              </el-table-column>
+                <el-table-column label="涓婁紶鏃堕棿" width="160" align="center">
+                  <template slot-scope="scope">
+                    <span>{{ formatDateTime(scope.row.uploadTime) }}</span>
+                  </template>
+                </el-table-column>
 
-              <el-table-column
-                label="鎿嶄綔"
-                width="120"
-                align="center"
-                v-if="isEdit"
+                <el-table-column label="鎿嶄綔" width="150" align="center">
+                  <template slot-scope="scope">
+                    <el-button
+                      size="mini"
+                      type="primary"
+                      @click="handlePreview(scope.row)"
+                    >
+                      棰勮
+                    </el-button>
+                    <el-button
+                      size="mini"
+                      type="danger"
+                      @click="handleRemoveAttachment(type.value, scope.$index)"
+                    >
+                      鍒犻櫎
+                    </el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+
+              <!-- 绌虹姸鎬佹彁绀� -->
+              <div
+                v-if="getAttachmentsByType(type.value).length === 0"
+                class="empty-attachment"
               >
-                <template slot-scope="scope">
-                  <el-button
-                    size="mini"
-                    type="text"
-                    icon="el-icon-view"
-                    @click="handlePreview(scope.row)"
-                    >棰勮</el-button
-                  >
-                  <el-button
-                    size="mini"
-                    type="text"
-                    icon="el-icon-delete"
-                    style="color: #F56C6C;"
-                    @click="handleRemoveAttachment(scope.row, type.value)"
-                    >鍒犻櫎</el-button
-                  >
-                </template>
-              </el-table-column>
-
-              <el-table-column label="鎿嶄綔" width="80" align="center" v-else>
-                <template slot-scope="scope">
-                  <el-button
-                    size="mini"
-                    type="text"
-                    icon="el-icon-view"
-                    @click="handlePreview(scope.row)"
-                    >棰勮</el-button
-                  >
-                </template>
-              </el-table-column>
-            </el-table>
-
-            <div
-              v-if="getAttachmentsByType(type.value).length === 0"
-              class="empty-attachment"
-            >
-              <el-empty description="鏆傛棤闄勪欢" :image-size="80"></el-empty>
+                <el-empty
+                  :description="`鏆傛棤${type.label}闄勪欢`"
+                  :image-size="80"
+                ></el-empty>
+              </div>
             </div>
           </div>
         </el-tab-pane>
       </el-tabs>
     </el-card>
+
+    <!-- 涓婁紶瀵硅瘽妗� -->
     <el-dialog
       :title="`涓婁紶${getCurrentTypeLabel}闄勪欢`"
       :visible.sync="uploadDialogVisible"
@@ -276,17 +329,27 @@
         </el-button>
       </span>
     </el-dialog>
+
+    <!-- 鏂囦欢棰勮寮圭獥 -->
+    <FilePreviewDialog
+      :visible="previewVisible"
+      :file="currentPreviewFile"
+      @close="previewVisible = false"
+      @download="handleDownload"
+    />
   </div>
 </template>
 
 <script>
-import {
-  getConfirmationDetail,
-  updateConfirmation
-} from "./mockConfirmationApi";
+import { relativesList, relativesEdit } from "@/api/businessApi";
+import FilePreviewDialog from "@/components/FilePreviewDialog";
 
 export default {
   name: "ConfirmationDetail",
+  components: {
+    FilePreviewDialog
+  },
+  dicts: ["sys_FamilyRelation"],
   data() {
     return {
       // 鏄惁缂栬緫妯″紡
@@ -294,28 +357,53 @@
       // 琛ㄥ崟鏁版嵁
       form: {
         id: undefined,
+        infoid: undefined,
         caseNo: "",
-        donorName: "",
-        gender: "",
+        name: "",
+        sex: "",
         age: "",
-        diagnosis: "",
-        hospitalName: "",
-        coordinator1: "",
-        coordinator2: "",
-        assignee: "",
-        confirmationStatus: "0",
-        confirmationTime: "",
-        familyRemark: ""
+        diagnosisname: "",
+        treatmenthospitalname: "",
+        coordinatedusernameo: "",
+        coordinatedusernamet: "",
+        responsibleusername: "",
+        relativeconfirmationsign: "0",
+        signdate: "",
+        relativeconfirmationsignname: "",
+        familyrelations: "",
+        relativeidcardno: "",
+        relativephone: "",
+        relativeRemark: "",
+        assessannex: "" // JSON瀛楃涓插瓨鍌ㄦ墍鏈夐檮浠�
       },
-      // 闄勪欢鍒楄〃
+      organdecision: [],
+      organdecisionOther: "",
+      organselection: [
+        "鑲濊剰",
+        "鍙岃偩",
+        "宸﹁偩",
+        "鍙宠偩",
+        "蹇冭剰",
+        "鑲鸿剰",
+        "鑳拌吅",
+        "灏忚偁",
+        "鍙岀溂缁勭粐",
+        "閬椾綋",
+        "鍏朵粬"
+      ],
+      // 鍔犺浇鐘舵��
+      loading: false,
+      saveLoading: false,
       // 闄勪欢鐩稿叧鏁版嵁
       activeAttachmentType: "1",
       attachmentLoading: false,
       uploadDialogVisible: false,
       uploadLoading: false,
-      saveLoading: false,
       tempFileList: [],
       currentUploadType: "",
+      // 棰勮鐩稿叧
+      previewVisible: false,
+      currentPreviewFile: null,
 
       // 闄勪欢绫诲瀷瀹氫箟
       attachmentTypes: [
@@ -327,36 +415,18 @@
         { value: "6", label: "蹇冩浜″垽瀹氱煡鎯呭悓鎰忎功" }
       ],
 
-      // 闄勪欢鍒楄〃鏁版嵁
-      attachmentList: [
-        // 妯℃嫙鏁版嵁 - 瀹為檯椤圭洰涓粠鎺ュ彛鑾峰彇
-        {
-          id: 1,
-          type: "1",
-          typeName: "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃",
-          fileName: "娼滃湪鎹愮尞鑰呯櫥璁拌〃_202512001.pdf",
-          fileSize: 2548321,
-          uploadTime: "2025-12-01 10:30:00",
-          uploader: "寮犱笁",
-          fileUrl: "/attachments/1.pdf"
-        },
-        {
-          id: 2,
-          type: "1",
-          typeName: "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃",
-          fileName: "琛ュ厖璇存槑.docx",
-          fileSize: 512345,
-          uploadTime: "2025-12-01 14:20:00",
-          uploader: "鏉庡洓",
-          fileUrl: "/attachments/2.docx"
-        }
-      ]
+      // 闄勪欢鏁版嵁缁撴瀯 - 鎸夌被鍨嬪垎寮�瀛樺偍
+      attachmentData: {
+        "1": [], // 绫诲瀷1鐨勯檮浠跺垪琛�
+        "2": [],
+        "3": [],
+        "4": [],
+        "5": [],
+        "6": []
+      }
     };
   },
   computed: {
-    isEdit() {
-      return this.$route.query.confirm === "true";
-    },
     getCurrentTypeLabel() {
       const type = this.attachmentTypes.find(
         t => t.value === this.currentUploadType
@@ -365,113 +435,119 @@
     }
   },
   created() {
-    const id = this.$route.query.id;
+    const infoid = this.$route.query.infoid;
     this.isEdit = this.$route.query.confirm === "true";
-    if (id) {
-      this.getDetail(id);
+    if (infoid) {
+      this.getDetail(infoid);
     }
-    this.getAttachmentList();
   },
   methods: {
     // 鑾峰彇璇︽儏
-    getDetail(id) {
-      getConfirmationDetail(id).then(response => {
+    async getDetail(infoid) {
+      this.loading = true;
+      try {
+        const response = await relativesList({ infoid });
+
         if (response.code === 200) {
-          this.form = response.data;
+          this.handleDetailData(response);
+        } else {
+          this.$message.error("鑾峰彇璇︽儏澶辫触锛�" + (response.msg || "鏈煡閿欒"));
         }
-      });
+      } catch (error) {
+        console.error("鑾峰彇鎹愮尞纭璇︽儏澶辫触:", error);
+        this.$message.error("鑾峰彇璇︽儏澶辫触");
+      } finally {
+        this.loading = false;
+      }
     },
-    // 鑾峰彇闄勪欢鍒楄〃
-    getAttachmentList() {
-      this.attachmentLoading = true;
-      // 妯℃嫙闄勪欢鏁版嵁
-      this.attachmentList = [
-        {
-          id: 1,
-          type: "1",
-          typeName: "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃",
-          fileName: "娼滃湪鎹愮尞鑰呯櫥璁拌〃_202512001.pdf",
-          uploadTime: "2025-12-01 10:30:00",
-          uploader: "寮犱笁",
-          fileSize: "2.5MB",
-          fileUrl: "/attachments/1.pdf"
-        },
-        {
-          id: 2,
-          type: "2",
-          typeName: "浜轰綋鍣ㄥ畼鎹愮尞浜插睘纭鐧昏琛�",
-          fileName: "浜插睘纭鐧昏琛╛202512001.pdf",
-          uploadTime: "2025-12-01 14:20:00",
-          uploader: "鏉庡洓",
-          fileSize: "1.8MB",
-          fileUrl: "/attachments/2.pdf"
-        },
-        {
-          id: 3,
-          type: "3",
-          typeName: "鎹愮尞鑰呭強鐩寸郴浜插睘韬唤璇併�佹埛鍙g翱鐩稿叧璇佹槑",
-          fileName: "韬唤璇佹槑_202512001.zip",
-          uploadTime: "2025-12-01 16:45:00",
-          uploader: "鐜嬩簲",
-          fileSize: "5.2MB",
-          fileUrl: "/attachments/3.zip"
-        },
-        {
-          id: 4,
-          type: "4",
-          typeName: "鍏皯韬晠鍚庝汉浣撳櫒瀹橈紙瑙掕啘锛夐仐浣撴崘鐚憡鐭ヤ功",
-          fileName: "鎹愮尞鍛婄煡涔202512001.pdf",
-          uploadTime: "2025-12-02 09:15:00",
-          uploader: "寮犱笁",
-          fileSize: "1.2MB",
-          fileUrl: "/attachments/4.pdf"
-        },
-        {
-          id: 5,
-          type: "5",
-          typeName: "鑴戞浜″垽瀹氱煡鎯呭悓鎰忎功",
-          fileName: "鑴戞浜″垽瀹氬悓鎰忎功_202512001.pdf",
-          uploadTime: "2025-12-02 11:30:00",
-          uploader: "鏉庡洓",
-          fileSize: "0.8MB",
-          fileUrl: "/attachments/5.pdf"
-        },
-        {
-          id: 6,
-          type: "6",
-          typeName: "蹇冩浜″垽瀹氱煡鎯呭悓鎰忎功",
-          fileName: "蹇冩浜″垽瀹氬悓鎰忎功_202512001.pdf",
-          uploadTime: "2025-12-02 13:20:00",
-          uploader: "鐜嬩簲",
-          fileSize: "0.9MB",
-          fileUrl: "/attachments/6.pdf"
+
+    // 澶勭悊璇︽儏鏁版嵁
+    handleDetailData(response) {
+      let detailData = null;
+
+      // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+      if (response.data) {
+        if (Array.isArray(response.data)) {
+          detailData = response.data[0] || {};
+        } else if (response.data.rows && Array.isArray(response.data.rows)) {
+          detailData = response.data.rows[0] || {};
+        } else if (Array.isArray(response.data.list)) {
+          detailData = response.data.list[0] || {};
+        } else {
+          detailData = response.data;
         }
-      ];
-      this.attachmentLoading = false;
+      } else {
+        detailData = response;
+      }
+
+      // 鏄犲皠瀛楁鍒拌〃鍗�
+      this.form = {
+        ...this.form,
+        id: detailData.id || this.$route.query.id,
+        infoid: detailData.infoid || infoid,
+        caseNo: detailData.caseNo || "",
+        name: detailData.name || "",
+        sex: detailData.sex || "",
+        age: detailData.age || "",
+        diagnosisname: detailData.diagnosisname || "",
+        treatmenthospitalname: detailData.treatmenthospitalname || "",
+        coordinatedusernameo: detailData.coordinatedusernameo || "",
+        coordinatedusernamet: detailData.coordinatedusernamet || "",
+        responsibleusername: detailData.responsibleusername || "",
+        relativeconfirmationsign: detailData.relativeconfirmationsign || "0",
+        signdate: detailData.signdate,
+        relativeconfirmationsignname:
+          detailData.relativeconfirmationsignname || "",
+        familyrelations: detailData.familyrelations || "",
+        relativeidcardno: detailData.relativeidcardno || "",
+        relativephone: detailData.relativephone || "",
+        relativeRemark: detailData.relativeRemark || "",
+        assessannex: detailData.assessannex || ""
+      };
+
+      // 澶勭悊鎹愮尞鍐冲畾鏁版嵁
+      if (detailData.organdecision) {
+        this.organdecision = Array.isArray(detailData.organdecision)
+          ? detailData.organdecision
+          : detailData.organdecision.split(",");
+      }
+
+      // 澶勭悊闄勪欢鏁版嵁 - 浠巃ssessannex瀛楁瑙f瀽JSON骞舵寜绫诲瀷鍒嗙被
+      this.processAssessannexData();
     },
-    // 涓嬭浇闄勪欢
-    handleDownload(row) {
-      // 瀹為檯椤圭洰涓繖閲岃皟鐢ㄦ枃浠朵笅杞芥帴鍙�
-      this.$message.success(`涓嬭浇鏂囦欢: ${row.fileName}`);
-      console.log("涓嬭浇鏂囦欢:", row.fileUrl);
-    },
-    // 淇濆瓨纭淇℃伅
-    handleSave() {
-      this.$refs.form.validate(valid => {
-        if (valid) {
-          updateConfirmation(this.form).then(response => {
-            if (response.code === 200) {
-              this.$message.success("淇濆瓨鎴愬姛");
-              this.isEdit = false;
-              this.$router.push("/case/confirmation");
-            }
+
+    // 澶勭悊assessannex瀛楁鏁版嵁骞舵寜绫诲瀷鍒嗙被
+    processAssessannexData() {
+      if (this.form.assessannex) {
+        try {
+          const annexData =
+            typeof this.form.assessannex === "string"
+              ? JSON.parse(this.form.assessannex)
+              : this.form.assessannex;
+
+          // 娓呯┖鐜版湁鏁版嵁
+          Object.keys(this.attachmentData).forEach(key => {
+            this.attachmentData[key] = [];
           });
+
+          // 鎸夌被鍨嬪垎绫诲瓨鍌�
+          if (Array.isArray(annexData)) {
+            annexData.forEach(attachment => {
+              const type = attachment.type || "1"; // 榛樿鍒扮涓�绉嶇被鍨�
+              if (this.attachmentData[type]) {
+                this.attachmentData[type].push(attachment);
+              }
+            });
+          }
+        } catch (error) {
+          console.warn("assessannex鏁版嵁瑙f瀽澶辫触:", error);
         }
-      });
+      }
     },
- // 鏍规嵁绫诲瀷鑾峰彇闄勪欢
+
+    // 鏍规嵁绫诲瀷鑾峰彇闄勪欢鍒楄〃
     getAttachmentsByType(type) {
-      return this.attachmentList.filter(item => item.type === type);
+      return this.attachmentData[type] || [];
     },
 
     // 鎵撳紑涓婁紶瀵硅瘽妗�
@@ -486,35 +562,38 @@
       });
     },
 
-    // 涓婁紶鍓嶆牎楠�
+    // 涓婁紶鍓嶆牎楠孾7](@ref)
     beforeUpload(file) {
       const allowedTypes = [
-        'application/pdf',
-        'image/jpeg',
-        'image/png',
-        'application/msword',
-        'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+        "application/pdf",
+        "image/jpeg",
+        "image/png",
+        "application/msword",
+        "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
       ];
 
       const maxSize = 10 * 1024 * 1024; // 10MB
 
       // 鏍¢獙鏂囦欢绫诲瀷
-      const isTypeOk = allowedTypes.includes(file.type) ||
-                      file.name.endsWith('.pdf') ||
-                      file.name.endsWith('.jpg') ||
-                      file.name.endsWith('.jpeg') ||
-                      file.name.endsWith('.png') ||
-                      file.name.endsWith('.doc') ||
-                      file.name.endsWith('.docx');
+      const isTypeOk =
+        allowedTypes.includes(file.type) ||
+        file.name.endsWith(".pdf") ||
+        file.name.endsWith(".jpg") ||
+        file.name.endsWith(".jpeg") ||
+        file.name.endsWith(".png") ||
+        file.name.endsWith(".doc") ||
+        file.name.endsWith(".docx");
 
       if (!isTypeOk) {
-        this.$message.error('鏂囦欢鏍煎紡涓嶆敮鎸侊紝璇蜂笂浼爌df銆乯pg銆乸ng銆乨oc鎴杁ocx鏍煎紡鏂囦欢');
+        this.$message.error(
+          "鏂囦欢鏍煎紡涓嶆敮鎸侊紝璇蜂笂浼爌df銆乯pg銆乸ng銆乨oc鎴杁ocx鏍煎紡鏂囦欢"
+        );
         return false;
       }
 
       // 鏍¢獙鏂囦欢澶у皬
       if (file.size > maxSize) {
-        this.$message.error('鏂囦欢澶у皬涓嶈兘瓒呰繃10MB');
+        this.$message.error("鏂囦欢澶у皬涓嶈兘瓒呰繃10MB");
         return false;
       }
 
@@ -533,25 +612,29 @@
 
     // 鑷畾涔変笂浼犺姹�
     handleHttpRequest(options) {
-      // 妯℃嫙涓婁紶杩囩▼
       return new Promise((resolve, reject) => {
         this.uploadLoading = true;
 
-        // 妯℃嫙涓婁紶寤惰繜
+        // 妯℃嫙涓婁紶杩囩▼
         setTimeout(() => {
           const newAttachment = {
             id: Date.now(),
-            type: this.currentUploadType,
-            typeName: this.getCurrentTypeLabel,
             fileName: options.file.name,
+            fileUrl: URL.createObjectURL(options.file),
             fileSize: options.file.size,
+            fileType: this.getFileExtension(options.file.name),
+            type: this.currentUploadType, // 璁板綍闄勪欢绫诲瀷
             uploadTime: new Date().toISOString(),
-            uploader: '褰撳墠鐢ㄦ埛', // 瀹為檯椤圭洰涓粠鐢ㄦ埛淇℃伅鑾峰彇
-            fileUrl: URL.createObjectURL(options.file) // 涓存椂URL锛屽疄闄呴」鐩腑涓烘湇鍔″櫒杩斿洖鐨刄RL
+            uploader: "褰撳墠鐢ㄦ埛"
           };
 
-          this.attachmentList.push(newAttachment);
+          // 娣诲姞鍒板搴旂被鍨嬬殑闄勪欢鍒楄〃
+          if (this.attachmentData[this.currentUploadType]) {
+            this.attachmentData[this.currentUploadType].push(newAttachment);
+          }
+
           this.uploadLoading = false;
+          this.updateAssessannexField(); // 鏇存柊瀛樺偍瀛楁
           resolve({ code: 200, data: newAttachment });
         }, 1500);
       });
@@ -560,90 +643,184 @@
     // 鎻愪氦涓婁紶
     async submitUpload() {
       if (this.tempFileList.length === 0) {
-        this.$message.warning('璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢');
+        this.$message.warning("璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢");
         return;
       }
 
       try {
-        // 渚濇涓婁紶鎵�鏈夋枃浠�
         for (const file of this.tempFileList) {
           await this.$refs.uploadRef.submit();
         }
 
-        this.$message.success('鏂囦欢涓婁紶鎴愬姛');
+        this.$message.success("鏂囦欢涓婁紶鎴愬姛");
         this.uploadDialogVisible = false;
         this.tempFileList = [];
       } catch (error) {
-        this.$message.error('鏂囦欢涓婁紶澶辫触');
-        console.error('涓婁紶澶辫触:', error);
+        this.$message.error("鏂囦欢涓婁紶澶辫触");
+        console.error("涓婁紶澶辫触:", error);
       }
     },
 
     // 鍒犻櫎闄勪欢
-    handleRemoveAttachment(attachment, type) {
-      this.$confirm('纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�', '鎻愮ず', {
-        confirmButtonText: '纭畾',
-        cancelButtonText: '鍙栨秷',
-        type: 'warning'
-      }).then(() => {
-        const index = this.attachmentList.findIndex(item => item.id === attachment.id);
-        if (index !== -1) {
-          this.attachmentList.splice(index, 1);
-          this.$message.success('闄勪欢鍒犻櫎鎴愬姛');
-
-          // 瀹為檯椤圭洰涓皟鐢ㄥ垹闄ゆ帴鍙�
-          // this.deleteAttachment(attachment.id);
-        }
-      }).catch(() => {});
+    handleRemoveAttachment(type, index) {
+      this.$confirm("纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      })
+        .then(() => {
+          if (this.attachmentData[type] && this.attachmentData[type][index]) {
+            this.attachmentData[type].splice(index, 1);
+            this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
+            this.updateAssessannexField(); // 鏇存柊瀛樺偍瀛楁
+          }
+        })
+        .catch(() => {});
     },
 
-    // 棰勮闄勪欢
-    handlePreview(attachment) {
-      // 瀹為檯椤圭洰涓牴鎹枃浠剁被鍨嬭皟鐢ㄤ笉鍚岀殑棰勮鏂瑰紡
-      if (attachment.fileName.endsWith('.pdf')) {
-        // PDF棰勮
-        window.open(attachment.fileUrl, '_blank');
-      } else if (attachment.fileName.match(/\.(jpg|jpeg|png)$/i)) {
-        // 鍥剧墖棰勮
-        this.$alert(`<img src="${attachment.fileUrl}" style="max-width: 100%;" alt="${attachment.fileName}">`,
-          '鍥剧墖棰勮', {
-            dangerouslyUseHTMLString: true,
-            customClass: 'image-preview-dialog'
-          });
+    // 鏇存柊assessannex瀛樺偍瀛楁
+    updateAssessannexField() {
+      // 灏嗘墍鏈夌被鍨嬬殑闄勪欢鍚堝苟涓轰竴涓暟缁�
+      const allAttachments = [];
+      Object.values(this.attachmentData).forEach(attachments => {
+        allAttachments.push(...attachments);
+      });
+
+      // 鏇存柊鍒拌〃鍗曞瓧娈�
+      this.form.assessannex = JSON.stringify(allAttachments);
+    },
+
+    // 鏂囦欢棰勮
+    handlePreview(file) {
+      this.currentPreviewFile = {
+        fileName: file.fileName,
+        fileUrl: file.fileUrl,
+        fileType: this.getFileType(file.fileName)
+      };
+      this.previewVisible = true;
+    },
+
+    // 鏂囦欢涓嬭浇
+    handleDownload(file) {
+      const fileUrl = file.fileUrl;
+      const fileName = file.fileName;
+
+      if (fileUrl) {
+        const link = document.createElement("a");
+        link.href = fileUrl;
+        link.download = fileName;
+        link.style.display = "none";
+        document.body.appendChild(link);
+        link.click();
+        document.body.removeChild(link);
+        this.$message.success("寮�濮嬩笅杞芥枃浠�");
       } else {
-        // 鍏朵粬鏂囦欢绫诲瀷鎻愮ず涓嬭浇
-        this.$message.info('璇ユ枃浠剁被鍨嬫殏涓嶆敮鎸佸湪绾块瑙堬紝璇蜂笅杞藉悗鏌ョ湅');
+        this.$message.warning("鏂囦欢璺緞涓嶅瓨鍦紝鏃犳硶涓嬭浇");
       }
     },
 
-    // 淇濆瓨鎵�鏈夐檮浠朵俊鎭�
-    handleSaveAll() {
-      this.saveLoading = true;
+    // 鑾峰彇鏂囦欢绫诲瀷
+    getFileType(fileName) {
+      if (!fileName) return "other";
+      const extension = this.getFileExtension(fileName);
+      const imageTypes = ["jpg", "jpeg", "png"];
+      const pdfTypes = ["pdf"];
+      const officeTypes = ["doc", "docx"];
 
-      // 妯℃嫙淇濆瓨杩囩▼
-      setTimeout(() => {
-        this.$message.success('闄勪欢淇℃伅淇濆瓨鎴愬姛');
-        this.saveLoading = false;
+      if (imageTypes.includes(extension)) return "image";
+      if (pdfTypes.includes(extension)) return "pdf";
+      if (officeTypes.includes(extension)) return "office";
+      return "other";
+    },
 
-        // 瀹為檯椤圭洰涓皟鐢ㄤ繚瀛樻帴鍙�
-        // this.saveAttachments();
-      }, 1000);
+    // 鑾峰彇鏂囦欢鎵╁睍鍚�
+    getFileExtension(filename) {
+      return filename
+        .split(".")
+        .pop()
+        .toLowerCase();
     },
 
     // 鏂囦欢澶у皬鏍煎紡鍖�
     formatFileSize(size) {
-      if (size === 0) return '0 B';
+      if (!size) return "0 B";
       const k = 1024;
-      const sizes = ['B', 'KB', 'MB', 'GB'];
+      const sizes = ["B", "KB", "MB", "GB"];
       const i = Math.floor(Math.log(size) / Math.log(k));
-      return parseFloat((size / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
+      return parseFloat((size / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
     },
 
-    // 鏃堕棿鏍煎紡鍖�
-    parseTime(time) {
-      if (!time) return '';
-      const date = new Date(time);
-      return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')} ${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`;
+    // 鏃ユ湡鏃堕棿鏍煎紡鍖�
+    formatDateTime(dateTime) {
+      if (!dateTime) return "";
+      try {
+        const date = new Date(dateTime);
+        if (isNaN(date.getTime())) return dateTime;
+
+        const year = date.getFullYear();
+        const month = String(date.getMonth() + 1).padStart(2, "0");
+        const day = String(date.getDate()).padStart(2, "0");
+        const hours = String(date.getHours()).padStart(2, "0");
+        const minutes = String(date.getMinutes()).padStart(2, "0");
+
+        return `${year}-${month}-${day} ${hours}:${minutes}`;
+      } catch (error) {
+        return dateTime;
+      }
+    },
+
+    // 鑾峰彇褰撳墠鏃堕棿
+    getCurrentTime() {
+      const now = new Date();
+      return `${now.getFullYear()}-${(now.getMonth() + 1)
+        .toString()
+        .padStart(2, "0")}-${now
+        .getDate()
+        .toString()
+        .padStart(2, "0")} ${now
+        .getHours()
+        .toString()
+        .padStart(2, "0")}:${now
+        .getMinutes()
+        .toString()
+        .padStart(2, "0")}:${now
+        .getSeconds()
+        .toString()
+        .padStart(2, "0")}`;
+    },
+
+    // 淇濆瓨纭淇℃伅
+    async handleSave() {
+      try {
+        await this.$refs.form.validate();
+        this.saveLoading = true;
+
+        // 纭繚闄勪欢鏁版嵁鏄渶鏂扮殑
+        this.updateAssessannexField();
+
+        const saveData = {
+          ...this.form,
+          organdecision: this.organdecision.join(","),
+          organdecisionOther: this.organdecisionOther
+          // assessannex瀛楁宸插湪updateAssessannexField涓洿鏂�
+        };
+
+        const response = await relativesEdit(saveData);
+
+        if (response.code === 200) {
+          this.$message.success("淇濆瓨鎴愬姛");
+          this.$router.push("/case/confirmation");
+        } else {
+          this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+      } catch (error) {
+        if (error !== "cancel") {
+          console.error("淇濆瓨澶辫触:", error);
+          this.$message.error("淇濆瓨澶辫触");
+        }
+      } finally {
+        this.saveLoading = false;
+      }
     }
   }
 };
@@ -665,37 +842,20 @@
 .detail-title {
   font-size: 16px;
   font-weight: bold;
+  margin-right: 20px;
 }
 
-.fixed-width .el-button {
-  margin: 0 5px;
-}
-.confirmation-detail {
-  padding: 20px;
+.attachment-section {
+  padding: 15px;
 }
 
-.detail-card {
-  margin-bottom: 20px;
-}
-
-.attachment-card {
-  margin-bottom: 20px;
-}
-
-.detail-title {
-  font-size: 16px;
-  font-weight: bold;
-}
-
-.attachment-upload-section {
-  padding: 10px;
-}
-
-.upload-header {
+.attachment-header {
   display: flex;
   justify-content: space-between;
   align-items: center;
   margin-bottom: 15px;
+  padding-bottom: 10px;
+  border-bottom: 1px solid #ebeef5;
 }
 
 .upload-title {
@@ -704,9 +864,8 @@
   color: #303133;
 }
 
-.file-info {
-  display: flex;
-  align-items: center;
+.attachment-list {
+  margin-top: 15px;
 }
 
 .empty-attachment {
@@ -715,13 +874,8 @@
   color: #909399;
 }
 
-/* 鍥剧墖棰勮瀵硅瘽妗嗘牱寮� */
-:deep(.image-preview-dialog) {
-  width: auto;
-  max-width: 90vw;
-}
-
-:deep(.image-preview-dialog .el-message-box__content) {
-  text-align: center;
+.file-name {
+  font-size: 13px;
+  color: #606266;
 }
 </style>
diff --git a/src/views/business/affirm/index.vue b/src/views/business/affirm/index.vue
index 4a8afd3..a60d695 100644
--- a/src/views/business/affirm/index.vue
+++ b/src/views/business/affirm/index.vue
@@ -35,7 +35,7 @@
             @keyup.enter.native="handleQuery"
           />
         </el-form-item>
-        <el-form-item label="纭鐘舵��" prop="confirmationStatus">
+        <!-- <el-form-item label="纭鐘舵��" prop="confirmationStatus">
           <el-select
             v-model="queryParams.confirmationStatus"
             placeholder="璇烽�夋嫨纭鐘舵��"
@@ -46,7 +46,7 @@
             <el-option label="瀹跺睘纭" value="1" />
             <el-option label="涓嶅悓鎰忔崘鐚�" value="2" />
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="纭鏃堕棿" prop="confirmationTimeRange">
           <el-date-picker
             v-model="queryParams.confirmationTimeRange"
@@ -121,14 +121,14 @@
         <el-table-column
           label="娼滃湪鎹愮尞鑰呭鍚�"
           align="center"
-          prop="donorName"
+          prop="name"
           width="120"
         />
-        <el-table-column label="鎬у埆" align="center" prop="gender" width="80">
+        <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
           <template slot-scope="scope">
             <dict-tag
               :options="dict.type.sys_user_sex"
-              :value="parseInt(scope.row.gender)"
+              :value="scope.row.sex"
             />
           </template>
         </el-table-column>
@@ -136,39 +136,47 @@
         <el-table-column
           label="鐤剧梾璇婃柇"
           align="center"
-          prop="diagnosis"
+          prop="diagnosisname"
           min-width="180"
           show-overflow-tooltip
         />
         <el-table-column
           label="鎵�鍦ㄥ尰鐤楁満鏋�"
           align="center"
-          prop="hospitalName"
+          prop="treatmenthospitalname"
+          width="150"
+          show-overflow-tooltip
+        />
+        <!-- <el-table-column
+          label="纭鐘舵��"
+          align="center"
+          prop="relativeconfirmationsign"
+          width="120"
+        >
+          <template slot-scope="scope">
+            <el-tag :type="statusFilter(scope.row.relativeconfirmationsign)">
+              {{ statusTextFilter(scope.row.relativeconfirmationsign) }}
+            </el-tag>
+          </template>
+        </el-table-column> -->
+
+        <el-table-column
+          label="瀹跺睘鎰忚"
+          align="center"
+          prop="relativeRemark"
           width="150"
           show-overflow-tooltip
         />
         <el-table-column
-          label="纭鐘舵��"
-          align="center"
-          prop="confirmationStatus"
-          width="120"
-        >
-          <template slot-scope="scope">
-            <el-tag :type="statusFilter(scope.row.confirmationStatus)">
-              {{ statusTextFilter(scope.row.confirmationStatus) }}
-            </el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column
           label="纭鏃堕棿"
           align="center"
-          prop="confirmationTime"
+          prop="signdate"
           width="120"
         >
           <template slot-scope="scope">
             <span>{{
-              scope.row.confirmationTime
-                ? parseTime(scope.row.confirmationTime, "{y}-{m}-{d}")
+              scope.row.signdate
+                ? parseTime(scope.row.signdate, "{y}-{m}-{d}")
                 : "-"
             }}</span>
           </template>
@@ -176,19 +184,19 @@
         <el-table-column
           label="涓氬姟浜哄憳"
           align="center"
-          prop="assignee"
+          prop="responsibleusername"
           width="100"
         />
         <el-table-column
           label="鍗忚皟鍛�1"
           align="center"
-          prop="coordinator1"
+          prop="coordinatedusernameo"
           width="100"
         />
         <el-table-column
           label="鍗忚皟鍛�2"
           align="center"
-          prop="coordinator2"
+          prop="coordinatedusernamet"
           width="100"
         />
         <el-table-column
@@ -205,14 +213,14 @@
               @click.stop="handleView(scope.row)"
               >璇︽儏</el-button
             >
-            <el-button
-              v-if="scope.row.confirmationStatus === '0'"
+            <!-- <el-button
+              v-if="scope.row.relativeconfirmationsign === '0'"
               size="mini"
               type="text"
               icon="el-icon-edit"
               @click.stop="handleConfirm(scope.row)"
               >纭</el-button
-            >
+            > -->
           </template>
         </el-table-column>
       </el-table>
@@ -230,7 +238,7 @@
 </template>
 
 <script>
-import { listConfirmation, delConfirmation, exportConfirmation } from "./mockConfirmationApi";
+import { relativesList } from "@/api/businessApi";
 import Pagination from "@/components/Pagination";
 
 export default {
@@ -285,23 +293,102 @@
       return statusMap[status] || "鏈煡";
     },
     // 鏌ヨ鎹愮尞纭鍒楄〃
-    getList() {
+    async getList() {
       this.loading = true;
-      listConfirmation(this.queryParams)
-        .then(response => {
-          if (response.code === 200) {
-            this.confirmationList = response.data.rows;
-            this.total = response.data.total;
-          } else {
-            this.$message.error("鑾峰彇鏁版嵁澶辫触");
-          }
-          this.loading = false;
-        })
-        .catch(error => {
-          console.error("鑾峰彇鎹愮尞纭鍒楄〃澶辫触:", error);
-          this.loading = false;
-          this.$message.error("鑾峰彇鏁版嵁澶辫触");
-        });
+      try {
+        // 鏋勫缓鏌ヨ鍙傛暟锛屾槧灏勫埌鎺ュ彛瀛楁
+        const requestParams = this.buildRequestParams();
+
+        const response = await relativesList(requestParams);
+
+        if (response.code === 200) {
+          // 澶勭悊鎺ュ彛杩斿洖鐨勬暟鎹粨鏋�
+          this.handleResponseData(response);
+        } else {
+          this.$message.error("鑾峰彇鏁版嵁澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+          this.confirmationList = [];
+          this.total = 0;
+        }
+      } catch (error) {
+        console.error("鑾峰彇鎹愮尞纭鍒楄〃澶辫触:", error);
+        this.$message.error("鑾峰彇鏁版嵁澶辫触");
+        this.confirmationList = [];
+        this.total = 0;
+      } finally {
+        this.loading = false;
+      }
+    },
+    // 鏋勫缓璇锋眰鍙傛暟
+    buildRequestParams() {
+      const params = {
+        pageNum: this.queryParams.pageNum,
+        pageSize: this.queryParams.pageSize
+      };
+
+      // 鏄犲皠鏌ヨ鏉′欢鍒版帴鍙e瓧娈�
+      if (this.queryParams.donorName) {
+        params.name = this.queryParams.donorName;
+      }
+      if (this.queryParams.hospitalName) {
+        params.treatmenthospitalname = this.queryParams.hospitalName;
+      }
+      if (this.queryParams.assignee) {
+        params.responsibleusername = this.queryParams.assignee;
+      }
+      // if (this.queryParams.confirmationStatus) {
+      //   params.relativeconfirmationsign = this.queryParams.confirmationStatus;
+      // }
+
+      // 澶勭悊鏃堕棿鑼冨洿鏌ヨ
+      if (
+        this.queryParams.confirmationTimeRange &&
+        this.queryParams.confirmationTimeRange.length === 2
+      ) {
+        params.startSignDate = this.queryParams.confirmationTimeRange[0];
+        params.endSignDate = this.queryParams.confirmationTimeRange[1];
+      }
+
+      return params;
+    },
+    // 澶勭悊鎺ュ彛鍝嶅簲鏁版嵁
+    handleResponseData(response) {
+      // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+      if (response.data) {
+        if (Array.isArray(response.data)) {
+          // 濡傛灉杩斿洖鐨勬槸鏁扮粍
+          this.confirmationList = response.data;
+          this.total = response.data.length;
+        } else if (response.data.rows) {
+          // 濡傛灉杩斿洖鐨勬槸鍒嗛〉鏁版嵁缁撴瀯
+          this.confirmationList = response.data.rows;
+          this.total = response.data.total;
+        } else if (Array.isArray(response.data.list)) {
+          // 濡傛灉杩斿洖鐨勬槸list瀛楁
+          this.confirmationList = response.data.list;
+          this.total = response.data.total || response.data.list.length;
+        } else {
+          // 鍏朵粬鏁版嵁缁撴瀯锛屽皾璇曠洿鎺ヤ娇鐢╠ata
+          this.confirmationList = response.data;
+          this.total = response.total || response.data.length;
+        }
+      } else {
+        // 濡傛灉data涓虹┖锛屼娇鐢ㄦ牴绾у埆鐨剅ows鎴杔ist
+        if (Array.isArray(response.rows)) {
+          this.confirmationList = response.rows;
+          this.total = response.total;
+        } else if (Array.isArray(response.list)) {
+          this.confirmationList = response.list;
+          this.total = response.total;
+        } else {
+          this.confirmationList = [];
+          this.total = 0;
+        }
+      }
+
+      // 纭繚confirmationList鏄暟缁�
+      if (!Array.isArray(this.confirmationList)) {
+        this.confirmationList = [];
+      }
     },
     // 鎼滅储鎸夐挳鎿嶄綔
     handleQuery() {
@@ -311,7 +398,8 @@
     // 閲嶇疆鎸夐挳鎿嶄綔
     resetQuery() {
       this.$refs.queryForm.resetFields();
-      this.handleQuery();
+      this.queryParams.pageNum = 1;
+      this.getList();
     },
     // 澶氶�夋閫変腑鏁版嵁
     handleSelectionChange(selection) {
@@ -323,14 +411,14 @@
     handleRowClick(row) {
       this.$router.push({
         path: "/case/affirmInfo",
-        query: { id: row.id }
+        query: { id: row.id, infoid: row.infoid }
       });
     },
     // 鏌ョ湅璇︽儏
     handleView(row) {
       this.$router.push({
         path: "/case/affirmInfo",
-        query: { id: row.id }
+        query: { id: row.id, infoid: row.infoid }
       });
     },
     // 纭鎿嶄綔
@@ -346,6 +434,8 @@
     },
     // 淇敼鎸夐挳鎿嶄綔
     handleUpdate() {
+      if (this.ids.length === 0) return;
+
       const id = this.ids[0];
       this.$router.push({
         path: "/case/confirmation/edit",
@@ -353,56 +443,100 @@
       });
     },
     // 鍒犻櫎鎸夐挳鎿嶄綔
-    handleDelete() {
-      const ids = this.ids;
-      this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          return delConfirmation(ids);
-        })
-        .then(response => {
-          if (response.code === 200) {
-            this.$message.success("鍒犻櫎鎴愬姛");
-            this.getList();
-          }
-        })
-        .catch(() => {});
+    async handleDelete() {
+      if (this.ids.length === 0) return;
+
+      try {
+        await this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
+        });
+
+        // 杩欓噷闇�瑕佽皟鐢ㄥ垹闄ゆ帴鍙o紝鐢变簬鎮ㄥ彧鎻愪緵浜唕elativesList鎺ュ彛锛岃繖閲屾殏鏃舵敞閲�
+        // 瀹為檯浣跨敤鏃堕渶瑕佽皟鐢ㄥ搴旂殑鍒犻櫎鎺ュ彛
+        // const response = await delConfirmation(this.ids);
+
+        // 妯℃嫙鍒犻櫎鎴愬姛
+        this.$message.success("鍒犻櫎鎴愬姛");
+        this.getList(); // 閲嶆柊鍔犺浇鏁版嵁
+      } catch (error) {
+        if (error !== "cancel") {
+          console.error("鍒犻櫎澶辫触:", error);
+          this.$message.error("鍒犻櫎澶辫触");
+        }
+      }
     },
     // 瀵煎嚭鎸夐挳鎿嶄綔
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夌‘璁ゆ暟鎹紵", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          this.loading = true;
-          return exportConfirmation(queryParams);
-        })
-        .then(response => {
-          if (response.code === 200) {
-            this.$message.success("瀵煎嚭鎴愬姛");
-            // 瀹為檯椤圭洰涓繖閲屽鐞嗘枃浠朵笅杞�
-          }
-          this.loading = false;
-        })
-        .catch(() => {
-          this.loading = false;
+    async handleExport() {
+      try {
+        await this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夌‘璁ゆ暟鎹紵", "璀﹀憡", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
         });
+
+        this.loading = true;
+
+        // 鏋勫缓瀵煎嚭鍙傛暟
+        const exportParams = this.buildRequestParams();
+        exportParams.pageSize = 10000; // 瀵煎嚭鎵�鏈夋暟鎹�
+
+        // 鑾峰彇瀵煎嚭鏁版嵁
+        const response = await relativesList(exportParams);
+
+        if (response.code === 200) {
+          // 澶勭悊瀵煎嚭鏁版嵁
+          this.exportDataToExcel(response.data);
+          this.$message.success("瀵煎嚭鎴愬姛");
+        } else {
+          this.$message.error("瀵煎嚭澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+      } catch (error) {
+        if (error !== "cancel") {
+          console.error("瀵煎嚭澶辫触:", error);
+          this.$message.error("瀵煎嚭澶辫触");
+        }
+      } finally {
+        this.loading = false;
+      }
+    },
+    // 瀵煎嚭鏁版嵁鍒癊xcel
+    exportDataToExcel(data) {
+      // 杩欓噷瀹炵幇瀵煎嚭閫昏緫锛屽彲浠ヤ娇鐢▁lsx绛夊簱
+      // 鐢变簬鏄墠绔鍑猴紝杩欓噷绠�鍗曟紨绀�
+      console.log("瀵煎嚭鏁版嵁:", data);
+      // 瀹為檯椤圭洰涓渶瑕佸疄鐜板畬鏁寸殑Excel瀵煎嚭鍔熻兘
     },
     // 鏃堕棿鏍煎紡鍖�
     parseTime(time, pattern) {
       if (!time) return "";
       const date = new Date(time);
+      if (pattern) {
+        // 绠�鍗曠殑妯″紡鍖归厤
+        if (pattern === "{y}-{m}-{d}") {
+          return `${date.getFullYear()}-${(date.getMonth() + 1)
+            .toString()
+            .padStart(2, "0")}-${date
+            .getDate()
+            .toString()
+            .padStart(2, "0")}`;
+        }
+      }
       return `${date.getFullYear()}-${(date.getMonth() + 1)
         .toString()
         .padStart(2, "0")}-${date
         .getDate()
         .toString()
+        .padStart(2, "0")} ${date
+        .getHours()
+        .toString()
+        .padStart(2, "0")}:${date
+        .getMinutes()
+        .toString()
+        .padStart(2, "0")}:${date
+        .getSeconds()
+        .toString()
         .padStart(2, "0")}`;
     }
   }
diff --git a/src/views/business/assess/assessInfo.vue b/src/views/business/assess/assessInfo.vue
index 330cff8..e1d7ddf 100644
--- a/src/views/business/assess/assessInfo.vue
+++ b/src/views/business/assess/assessInfo.vue
@@ -17,44 +17,38 @@
           assessmentData.caseNo
         }}</el-descriptions-item>
         <el-descriptions-item label="娼滃湪鎹愮尞鑰呭鍚�">{{
-          assessmentData.donorName
+          assessmentData.name || assessmentData.donorName
         }}</el-descriptions-item>
         <el-descriptions-item label="鎬у埆">
-          <dict-tag :options="genderOptions" :value="assessmentData.gender" />
+          <dict-tag
+            :options="dict.type.sys_user_sex"
+            :value="assessmentData.sex"
+          />
         </el-descriptions-item>
         <el-descriptions-item label="骞撮緞"
           >{{ assessmentData.age }}宀�</el-descriptions-item
         >
         <el-descriptions-item label="琛�鍨�">
-          <dict-tag
-            :options="bloodTypeOptions"
-            :value="assessmentData.bloodType"
-          />
+          {{ assessmentData.bloodtype }}
         </el-descriptions-item>
         <el-descriptions-item label="璇佷欢鍙风爜">{{
-          assessmentData.idCardNo
+          assessmentData.idcardno
         }}</el-descriptions-item>
         <el-descriptions-item label="鐤剧梾璇婃柇">{{
-          assessmentData.diagnosis
+          assessmentData.diagnosisname
         }}</el-descriptions-item>
         <el-descriptions-item label="鎵�鍦ㄥ尰鐤楁満鏋�">{{
-          assessmentData.hospitalName
+          assessmentData.treatmenthospitalname
         }}</el-descriptions-item>
-        <el-descriptions-item label="涓绘不鍖荤敓">{{
-          assessmentData.doctorName
+        <el-descriptions-item label="鍗忚皟鍛�">{{
+          assessmentData.coordinatorName
         }}</el-descriptions-item>
-        <el-descriptions-item label="鐢宠璇勪及鏃堕棿">{{
-          assessmentData.applyTime
+        <el-descriptions-item label="璇勪及鏃堕棿">{{
+          assessmentData.assessTime
         }}</el-descriptions-item>
-        <el-descriptions-item label="璇勪及绫诲瀷">
-          <dict-tag
-            :options="assessmentTypeOptions"
-            :value="assessmentData.assessmentType"
-          />
-        </el-descriptions-item>
         <el-descriptions-item label="璇勪及鐘舵��">
-          <el-tag :type="statusFilter(assessmentData.assessmentStatus)">
-            {{ statusTextFilter(assessmentData.assessmentStatus) }}
+          <el-tag :type="statusFilter(assessmentData.assessState)">
+            {{ statusTextFilter(assessmentData.assessState) }}
           </el-tag>
         </el-descriptions-item>
       </el-descriptions>
@@ -69,6 +63,7 @@
           type="primary"
           size="mini"
           @click="handleCompleteAssessment"
+          :loading="saveLoading"
         >
           纭瀹屾垚璇勪及
         </el-button>
@@ -76,9 +71,15 @@
           褰撳墠瑙掕壊锛歿{ currentDepartment }}璇勪及浜哄憳
         </span>
       </div>
-      <el-row>
-        <el-form-item label-width="100px" label="璇勪及鍣ㄥ畼">
-          <el-checkbox-group v-model="organdecision">
+
+      <!-- 鎹愮尞鍐冲畾琛ㄥ崟 -->
+      <el-form>
+        <el-form-item label-width="100px" label="鎹愮尞鍐冲畾">
+          <el-checkbox-group
+            v-model="organdecision"
+            @change="handleOrganDecisionChange"
+            :disabled="!isEdit"
+          >
             <el-checkbox
               v-for="item in organselection"
               :key="item"
@@ -88,22 +89,27 @@
           </el-checkbox-group>
           <el-input
             v-if="organdecision.includes('鍏朵粬')"
-            v-model="assessmentData.organdecisionOther"
+            v-model="organdecisionOther"
             placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
             style="margin-top: 10px; width: 300px;"
+            :readonly="!isEdit"
+            @input="handleOtherDecisionInput"
           ></el-input>
         </el-form-item>
-      </el-row>
+      </el-form>
+
+      <!-- 鍣ㄥ畼璇勪及琛ㄦ牸 -->
       <el-table
-        :data="organAssessmentList"
+        :data="filteredOrganAssessmentList"
         v-loading="assessmentLoading"
         style="width: 100%"
         :row-class-name="getRowClassName"
         :expand-row-keys="expandedRowKeys"
         @expand-change="handleExpandChange"
-        row-key="organType"
+        row-key="organno"
+        empty-text="褰撳墠鎹愮尞鍐冲畾涓嬫殏鏃犻渶瑕佽瘎浼扮殑鍣ㄥ畼"
       >
-        <el-table-column type="expand" width="60">
+        <el-table-column type="expand">
           <template slot-scope="scope">
             <div class="organ-expand-content" v-if="scope.row.expanded">
               <el-tabs
@@ -123,13 +129,15 @@
                     :assessment-data="assessment"
                     :assessment-index="index"
                     :readonly="!canAssessOrgan(scope.row)"
-                    @save="handleSaveOrganAssessment"
                     @add-assessment="handleAddAssessment"
                   />
                 </el-tab-pane>
 
                 <!-- 娣诲姞璇勪及鎸夐挳 -->
-                <el-tab-pane name="add" v-if="canAssessOrgan(scope.row)">
+                <el-tab-pane
+                  name="add"
+                  v-if="canAssessOrgan(scope.row) && isEdit"
+                >
                   <template slot="label">
                     <el-button
                       type="text"
@@ -150,10 +158,10 @@
                   <div class="assessment-summary">
                     <el-descriptions title="璇勪及缁撴灉姹囨��" :column="2" border>
                       <el-descriptions-item label="鍣ㄥ畼绫诲瀷">{{
-                        scope.row.organName
+                        scope.row.organname
                       }}</el-descriptions-item>
-                      <el-descriptions-item label="璇勪及绉戝">{{
-                        scope.row.department
+                      <el-descriptions-item label="鑾峰彇鏈烘瀯">{{
+                        scope.row.gainhospitalname
                       }}</el-descriptions-item>
                       <el-descriptions-item label="璇勪及娆℃暟" :span="2">
                         <el-tag type="info"
@@ -165,34 +173,58 @@
                       </el-descriptions-item>
                     </el-descriptions>
 
-                    <!-- 闄勪欢姹囨�� -->
-                    <el-card header="鎵�鏈夎瘎浼伴檮浠�" style="margin-top: 20px;">
-                      <el-table
-                        :data="getAllAttachments(scope.row)"
-                        size="small"
-                        empty-text="鏆傛棤闄勪欢"
-                      >
-                        <el-table-column label="闄勪欢鍚嶇О" prop="fileName" />
-                        <el-table-column label="璇勪及闃舵" width="120">
-                          <template slot-scope="{ row }">
-                            绗瑊{ row.assessmentIndex + 1 }}娆¤瘎浼�
-                          </template>
-                        </el-table-column>
-                        <el-table-column
-                          label="涓婁紶鏃堕棿"
-                          prop="uploadTime"
-                          width="180"
-                        />
-                        <el-table-column label="鎿嶄綔" width="120">
-                          <template slot-scope="{ row }">
-                            <el-button
-                              type="text"
-                              @click="handlePreviewAttachment(row)"
-                              >棰勮</el-button
-                            >
-                          </template>
-                        </el-table-column>
-                      </el-table>
+                    <!-- 璇勪及璇︽儏姹囨�� -->
+                    <el-card header="璇勪及璇︽儏" style="margin-top: 20px;">
+                      <el-descriptions :column="1" border>
+                        <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
+                          <el-tag
+                            :type="
+                              scope.row.isbiopsybefore === '1'
+                                ? 'success'
+                                : 'info'
+                            "
+                          >
+                            {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
+                          <el-tag
+                            :type="
+                              scope.row.isbiopsyafter === '1'
+                                ? 'success'
+                                : 'info'
+                            "
+                          >
+                            {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="杈圭紭鍣ㄥ畼">
+                          <el-tag
+                            :type="
+                              scope.row.ismarginalorgan === '1'
+                                ? 'warning'
+                                : 'info'
+                            "
+                          >
+                            {{
+                              scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
+                            }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
+                          <el-tag
+                            :type="
+                              scope.row.ispathogenpositive === '1'
+                                ? 'danger'
+                                : 'info'
+                            "
+                          >
+                            {{
+                              scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
+                            }}
+                          </el-tag>
+                        </el-descriptions-item>
+                      </el-descriptions>
                     </el-card>
                   </div>
                 </el-tab-pane>
@@ -201,28 +233,16 @@
           </template>
         </el-table-column>
 
-        <el-table-column
-          label="鍣ㄥ畼绫诲瀷"
-          align="center"
-          prop="organType"
-          width="120"
-        >
-          <template slot-scope="scope">
-            <dict-tag
-              :options="organTypeOptions"
-              :value="scope.row.organType"
-            />
-          </template>
-        </el-table-column>
+        <el-table-column label="鍣ㄥ畼绫诲瀷" align="center" prop="organname" />
+
+        <el-table-column label="鍣ㄥ畼缂栧彿" align="center" prop="organnumber" />
 
         <el-table-column
-          label="璇勪及绉戝"
+          label="鑾峰彇鏈烘瀯"
           align="center"
-          prop="department"
-          width="120"
+          prop="gainhospitalname"
+          show-overflow-tooltip
         />
-
-        <el-table-column label="璇勪及浜哄憳" align="center" prop="assessor" />
 
         <!-- 鍔ㄦ�佹樉绀鸿瘎浼扮姸鎬佸垪 -->
         <el-table-column
@@ -247,10 +267,16 @@
         <el-table-column label="鏁翠綋鐘舵��" align="center" width="100">
           <template slot-scope="scope">
             <el-tag
-              :type="scope.row.assessmentStatus === '1' ? 'success' : 'primary'"
+              :type="
+                getOrganOverallStatus(scope.row) === 'completed'
+                  ? 'success'
+                  : getOrganOverallStatus(scope.row) === 'assessing'
+                  ? 'primary'
+                  : 'warning'
+              "
               size="small"
             >
-              {{ scope.row.assessmentStatus === "1" ? "宸插畬鎴�" : "璇勪及涓�" }}
+              {{ getOrganOverallStatusText(scope.row) }}
             </el-tag>
           </template>
         </el-table-column>
@@ -263,13 +289,23 @@
         >
           <template slot-scope="scope">
             <el-button
-              v-if="canAssessOrgan(scope.row)"
+              v-if="canAssessOrgan(scope.row) && isEdit"
               size="mini"
               type="text"
               @click="handleToggleExpand(scope.row)"
             >
               {{
-                expandedRowKeys.includes(scope.row.organType) ? "鏀惰捣" : "璇︽儏"
+                expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "璇︽儏"
+              }}
+            </el-button>
+            <el-button
+              v-else-if="!isEdit"
+              size="mini"
+              type="text"
+              @click="handleToggleExpand(scope.row)"
+            >
+              {{
+                expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "鏌ョ湅"
               }}
             </el-button>
             <el-button v-else size="mini" type="text" disabled
@@ -279,6 +315,12 @@
         </el-table-column>
       </el-table>
     </el-card>
+
+    <!-- 鏁翠綋淇濆瓨鎸夐挳 -->
+    <div class="footer-actions" v-if="isEdit">
+      <el-button type="primary" @click="handleSaveAll" :loading="saveLoading">淇濆瓨璇勪及琛�</el-button>
+      <el-button @click="handleCancel">鍙栨秷</el-button>
+    </div>
 
     <!-- 鏂囦欢棰勮寮圭獥 -->
     <FilePreviewDialog
@@ -291,61 +333,38 @@
 
 <script>
 import {
-  getAssessment,
-  updateOrganAssessment,
-  completeAssessment
-} from "./mockAssessmentApi";
+  evaluateBaseInfolist,
+  assessedit,
+  assessAdd
+} from "@/api/businessApi/index";
 import FilePreviewDialog from "@/components/FilePreviewDialog";
 import OrganAssessmentForm from "./components/OrganAssessmentForm.vue";
 
 export default {
   name: "AssessmentDetail",
   components: { OrganAssessmentForm, FilePreviewDialog },
+  dicts: ["sys_user_sex", "sys_Organ", "sys_0_1"],
   data() {
     return {
-      assessmentId: undefined,
-      assessmentData: {},
-      organAssessmentList: [],
-      attachmentList: [],
+      // 鏄惁缂栬緫妯″紡
+      isEdit: false,
+      // 鍔犺浇鐘舵��
       assessmentLoading: false,
-      organdecision: [],
+      saveLoading: false,
+      // 鏁版嵁ID
+      infoid: undefined,
+      assessmentId: undefined,
+      // 涓昏鏁版嵁
+      assessmentData: {},
+      organAssessmentList: [], // 鎵�鏈夊櫒瀹樻暟鎹�
       // 灞曞紑琛岀浉鍏�
       expandedRowKeys: [],
+      // 闄勪欢鐩稿叧
       currentPreviewFile: null,
       attachmentVisible: false,
-
-      currentUser: {
-        id: "001",
-        name: "寮犲尰鐢�",
-        department: "鍗忚皟鍛�",
-        role: "coordinator"
-      },
-      //department锛氬績鑴忋�乧oordinator锛氬崗璋冨憳
-      // 瀛楀吀閫夐」
-      genderOptions: [
-        { value: "0", label: "鐢�" },
-        { value: "1", label: "濂�" }
-      ],
-      bloodTypeOptions: [
-        { value: "A", label: "A鍨�" },
-        { value: "B", label: "B鍨�" },
-        { value: "O", label: "O鍨�" },
-        { value: "AB", label: "AB鍨�" }
-      ],
-      assessmentTypeOptions: [
-        { value: "1", label: "鍒濇璇勪及" },
-        { value: "2", label: "鏈�缁堣瘎浼�" }
-      ],
-      organTypeOptions: [
-        { value: "heart", label: "蹇冭剰" },
-        { value: "liver", label: "鑲濊剰" },
-        { value: "kidney", label: "鑲捐剰" },
-        { value: "lung", label: "鑲鸿剰" },
-        { value: "pancreas", label: "鑳拌吅" },
-        { value: "intestine", label: "鑲犻亾" },
-        { value: "cornea", label: "瑙掕啘" },
-        { value: "skin", label: "鐨偆" }
-      ],
+      // 鎹愮尞鍐冲畾鐩稿叧
+      organdecision: [],
+      organdecisionOther: "",
       organselection: [
         "鑲濊剰",
         "鍙岃偩",
@@ -358,7 +377,28 @@
         "鍙岀溂缁勭粐",
         "閬椾綋",
         "鍏朵粬"
-      ]
+      ],
+      // 鍣ㄥ畼绫诲瀷鏄犲皠鍏崇郴
+      organDecisionMapping: {
+        鑲濊剰: ["鑲濊剰"],
+        鍙岃偩: ["宸﹁偩", "鍙宠偩"],
+        宸﹁偩: ["宸﹁偩"],
+        鍙宠偩: ["鍙宠偩"],
+        蹇冭剰: ["蹇冭剰"],
+        鑲鸿剰: ["鑲鸿剰"],
+        鑳拌吅: ["鑳拌吅"],
+        灏忚偁: ["灏忚偁"],
+        鍙岀溂缁勭粐: ["瑙掕啘"],
+        閬椾綋: ["鐨偆", "楠ㄩ", "鍏朵粬缁勭粐"],
+        鍏朵粬: [] // 鍏朵粬绫诲瀷涓嶆槧灏勫叿浣撳櫒瀹�
+      },
+      // 鐢ㄦ埛淇℃伅
+      currentUser: {
+        id: "001",
+        name: "寮犲尰鐢�",
+        department: "蹇冭剰绉�",
+        role: "doctor" // coordinator, doctor
+      }
     };
   },
   computed: {
@@ -368,8 +408,27 @@
     currentDepartment() {
       return this.currentUser.department;
     },
+    // 鏍规嵁鎹愮尞鍐冲畾杩囨护鍚庣殑鍣ㄥ畼鍒楄〃
+    filteredOrganAssessmentList() {
+      if (!this.organdecision || this.organdecision.length === 0) {
+        return [];
+      }
+
+      // 鑾峰彇鎵�鏈夐�変腑鐨勫櫒瀹樼被鍨�
+      const selectedOrgans = new Set();
+      this.organdecision.forEach(decision => {
+        const organs = this.organDecisionMapping[decision] || [];
+        organs.forEach(organ => selectedOrgans.add(organ));
+      });
+
+      // 杩囨护鍣ㄥ畼璇勪及鍒楄〃
+      return this.organAssessmentList.filter(organ =>
+        selectedOrgans.has(organ.organname)
+      );
+    },
+    // 妫�鏌ユ墍鏈夎繃婊ゅ悗鐨勫櫒瀹樻槸鍚﹂兘宸茶瘎浼�
     allOrgansAssessed() {
-      return this.organAssessmentList.every(
+      return this.filteredOrganAssessmentList.every(
         organ =>
           organ.assessments &&
           organ.assessments.length > 0 &&
@@ -379,86 +438,364 @@
       );
     }
   },
+  watch: {
+    // 鐩戝惉鎹愮尞鍐冲畾鍙樺寲锛岀敤浜庡鏉傞�昏緫澶勭悊
+    organdecision: {
+      handler(newVal, oldVal) {
+        this.handleComplexDecisionChange(newVal, oldVal);
+      },
+      deep: true
+    }
+  },
   created() {
+    this.infoid = this.$route.query.infoid;
     this.assessmentId = this.$route.query.id;
+    this.isEdit = this.$route.query.assess === "true";
     this.getAssessmentDetail();
   },
   methods: {
+    // 鏁翠綋淇濆瓨鏂规硶
+    async handleSaveAll() {
+      this.saveLoading = true;
+      try {
+        // 1. 鍑嗗涓昏瘎浼拌〃鏁版嵁
+        const saveData = {
+          // 鏍规嵁 id 鏄惁瀛樺湪鍐冲畾鏄洿鏂拌繕鏄柊澧�
+          id: this.assessmentData.id || undefined,
+          infoid: this.infoid,
+          caseNo: this.assessmentData.caseNo,
+          donorno: this.assessmentData.donorno,
+          treatmenthospitalname: this.assessmentData.treatmenthospitalname,
+          treatmenthospitalno: this.assessmentData.treatmenthospitalno,
+          sex: this.assessmentData.sex,
+          age: this.assessmentData.age,
+          bloodtype: this.assessmentData.bloodtype,
+          idcardno: this.assessmentData.idcardno,
+          diagnosisname: this.assessmentData.diagnosisname,
+          coordinatorName: this.assessmentData.coordinatorName,
+          assessTime: this.assessmentData.assessTime || new Date().toISOString(),
+          assessState: this.assessmentData.assessState,
+          assessannex: this.assessmentData.assessannex,
+          // 鎹愮尞鍐冲畾淇℃伅
+          organdecision: this.organdecision.join(','),
+          organdecisionOther: this.organdecisionOther,
+          // 鍣ㄥ畼璇勪及鍒楄〃
+          serviceMedicalevaluationorgans: this.organAssessmentList.map(organ => ({
+            id: organ.id,
+            infoid: organ.infoid,
+            donorno: organ.donorno,
+            organno: organ.organno,
+            organname: organ.organname,
+            organnumber: organ.organnumber,
+            gainhospitalno: organ.gainhospitalno,
+            gainhospitalname: organ.gainhospitalname,
+            isbiopsybefore: organ.isbiopsybefore,
+            isbiopsyafter: organ.isbiopsyafter,
+            ismarginalorgan: organ.ismarginalorgan,
+            ispathogenpositive: organ.ispathogenpositive,
+            ispnf: organ.ispnf,
+            isdgf: organ.isdgf,
+            // 灏� assessments 鏁扮粍搴忓垪鍖栧埌 assesscontent 瀛楁
+            assesscontent: JSON.stringify(organ.assessments)
+          }))
+        };
+
+        // 2. 鏍规嵁 id 鍒ゆ柇璋冪敤鍝釜 API
+        const saveMethod = this.assessmentData.id ? assessedit : assessAdd;
+        const response = await saveMethod(saveData);
+
+        if (response.code === 200) {
+          this.$message.success('璇勪及琛ㄤ繚瀛樻垚鍔燂紒');
+          // 淇濆瓨鎴愬姛鍚庯紝鏇存柊鏈湴鐨� assessmentData.id锛堝浜庢柊澧炴儏鍐碉級
+          if (!this.assessmentData.id && response.data && response.data.id) {
+            this.assessmentData.id = response.data.id;
+          }
+        } else {
+          this.$message.error('淇濆瓨澶辫触锛�' + (response.msg || '鏈煡閿欒'));
+        }
+      } catch (error) {
+        console.error('淇濆瓨璇勪及琛ㄥけ璐�:', error);
+        this.$message.error('淇濆瓨澶辫触锛岃閲嶈瘯');
+      } finally {
+        this.saveLoading = false;
+      }
+    },
+
+    // 鍙栨秷鎸夐挳浜嬩欢
+    handleCancel() {
+      this.$router.go(-1);
+    },
+
+    // 鎹愮尞鍐冲畾鍙樻洿澶勭悊
+    handleOrganDecisionChange(newDecision) {
+      // 鑷姩澶勭悊鐩稿叧閫昏緫
+      this.autoHandleDecisionChange(newDecision);
+      // 寮哄埗閲嶆柊娓叉煋
+      this.$forceUpdate();
+      // 濡傛灉浠庢湁閫夋嫨鍙樹负鏃犻�夋嫨锛屾竻绌哄睍寮�鐘舵��
+      if (newDecision.length === 0) {
+        this.expandedRowKeys = [];
+      }
+    },
+
+    // 鍏朵粬鎹愮尞鍐冲畾杈撳叆澶勭悊
+    handleOtherDecisionInput(value) {
+      // 杈撳叆鏃朵笉鍋氬崟鐙繚瀛橈紝绛夊緟鏁翠綋淇濆瓨
+    },
+
+    // 鑷姩澶勭悊鍐冲畾鍙樻洿閫昏緫
+    autoHandleDecisionChange(newDecision) {
+      // 濡傛灉閫夋嫨浜�"鍙岃偩"锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偩"鍜�"鍙宠偩"閫夋嫨
+      if (newDecision.includes("鍙岃偩")) {
+        this.organdecision = newDecision.filter(
+          item => item !== "宸﹁偩" && item !== "鍙宠偩"
+        );
+      }
+      // 濡傛灉閫夋嫨浜�"宸﹁偩"鎴�"鍙宠偩"锛屽彇娑�"鍙岃偩"閫夋嫨
+      else if (newDecision.includes("宸﹁偩") || newDecision.includes("鍙宠偩")) {
+        this.organdecision = newDecision.filter(item => item !== "鍙岃偩");
+      }
+
+      // 澶勭悊浜掓枼閫昏緫
+      this.handleExclusiveDecisions();
+    },
+
+    // 澶勭悊浜掓枼鐨勬崘鐚喅瀹�
+    handleExclusiveDecisions() {
+      // 閬椾綋鎹愮尞涓庡叾浠栧櫒瀹樻崘鐚簰鏂ワ紙鏍规嵁涓氬姟闇�姹傝皟鏁达級
+      if (this.organdecision.includes("閬椾綋")) {
+        // 鍙互璁剧疆鍙繚鐣欓仐浣撴崘鐚紝鎴栬�呮牴鎹笟鍔¢渶姹傚鐞�
+      }
+    },
+
+    // 澶嶆潅鍐崇瓥鍙樺寲澶勭悊
+    handleComplexDecisionChange(newVal, oldVal) {
+      // 澶勭悊鏂板鐨勯�夋嫨
+      const addedDecisions = newVal.filter(item => !oldVal.includes(item));
+      const removedDecisions = oldVal.filter(item => !newVal.includes(item));
+
+      // 瀵规柊澧炲姞鐨勯�夋嫨杩涜鐗规畩澶勭悊
+      addedDecisions.forEach(decision => {
+        this.handleNewDecision(decision);
+      });
+
+      // 瀵圭Щ闄ょ殑閫夋嫨杩涜娓呯悊
+      removedDecisions.forEach(decision => {
+        this.handleRemovedDecision(decision);
+      });
+    },
+
+    // 澶勭悊鏂板鐨勬崘鐚喅瀹�
+    handleNewDecision(decision) {
+      // 鏍规嵁鏄犲皠鍏崇郴鑷姩鍒涘缓瀵瑰簲鐨勫櫒瀹樿瘎浼伴」
+      this.autoCreateOrganAssessments(decision);
+    },
+
+    // 鑷姩鍒涘缓鍣ㄥ畼璇勪及椤�
+    autoCreateOrganAssessments(decision) {
+      const organsToCreate = this.organDecisionMapping[decision];
+
+      if (organsToCreate && organsToCreate.length > 0) {
+        organsToCreate.forEach(organName => {
+          this.ensureOrganExists(organName);
+        });
+
+        // 鏄剧ず鍒涘缓鎻愮ず
+        if (organsToCreate.length > 0) {
+          this.$message.success(
+            `宸蹭负銆�${decision}銆戝垱寤�${organsToCreate.length}涓瘎浼伴」`
+          );
+        }
+      } else {
+        console.warn(`鎹愮尞鍐冲畾銆�${decision}銆戞病鏈夐厤缃櫒瀹樻槧灏勫叧绯籤);
+      }
+    },
+
+    // 澶勭悊绉婚櫎鐨勬崘鐚喅瀹�
+    handleRemovedDecision(decision) {
+      // 鏍规嵁涓氬姟闇�姹傛坊鍔犳竻鐞嗛�昏緫
+      const relatedOrgans = this.organDecisionMapping[decision] || [];
+      relatedOrgans.forEach(organ => {
+        // 鍙互鍦ㄨ繖閲屾坊鍔犳竻鐞嗙浉鍏冲櫒瀹樿瘎浼扮殑閫昏緫
+      });
+    },
+
+    // 纭繚鍣ㄥ畼瀛樺湪锛堝甫閲嶅妫�鏌ワ級
+    ensureOrganExists(organName) {
+      // 妫�鏌ユ槸鍚﹀凡瀛樺湪鍚屽悕鍣ㄥ畼璇勪及椤�
+      const exists = this.organAssessmentList.some(
+        organ => organ.organname === organName
+      );
+
+      if (!exists) {
+        // 鍒涘缓鏂扮殑鍣ㄥ畼璇勪及椤�
+        const newOrgan = {
+          id: `organ_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
+          organno: `ORG${Date.now()}`,
+          organname: organName,
+          gainhospitalname: "寰呭垎閰嶆満鏋�",
+          isbiopsybefore: "0",
+          isbiopsyafter: "0",
+          ismarginalorgan: "0",
+          ispathogenpositive: "0",
+          assessments: [this.getDefaultAssessment(0)],
+          activeAssessmentTab: "assessment_0",
+          expanded: false,
+          createTime: new Date().toISOString()
+        };
+
+        this.organAssessmentList = [...this.organAssessmentList, newOrgan];
+        return true;
+      }
+      return false;
+    },
+
+    // 鑾峰彇璇勪及璇︽儏
+    async getAssessmentDetail() {
+      this.assessmentLoading = true;
+      try {
+        const response = await evaluateBaseInfolist({ infoid: this.infoid });
+
+        if (response.code === 200) {
+          this.handleResponseData(response);
+        } else {
+          this.$message.error("鑾峰彇璇︽儏澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+      } catch (error) {
+        console.error("鑾峰彇璇勪及璇︽儏澶辫触:", error);
+        this.$message.error("鑾峰彇璇︽儏澶辫触");
+      } finally {
+        this.assessmentLoading = false;
+      }
+    },
+
+    // 澶勭悊鎺ュ彛鍝嶅簲鏁版嵁
+    handleResponseData(response) {
+      let detailData = null;
+
+      // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+      if (response.data) {
+        if (Array.isArray(response.data)) {
+          detailData = response.data[0] || {};
+        } else if (response.data.rows && Array.isArray(response.data.rows)) {
+          detailData = response.data.rows[0] || {};
+        } else if (Array.isArray(response.data.list)) {
+          detailData = response.data.list[0] || {};
+        } else {
+          detailData = response.data;
+        }
+      } else {
+        detailData = response;
+      }
+
+      // 鏄犲皠瀛楁鍒拌瘎浼版暟鎹�
+      this.assessmentData = {
+        id: detailData.id || this.assessmentId,
+        infoid: detailData.infoid || this.infoid,
+        caseNo: detailData.caseNo || "",
+        name: detailData.name || detailData.donorName || "",
+        sex: detailData.sex || "",
+        age: detailData.age || "",
+        bloodtype: detailData.bloodtype || "",
+        idcardno: detailData.idcardno || "",
+        diagnosisname: detailData.diagnosisname || "",
+        treatmenthospitalname: detailData.treatmenthospitalname || "",
+        coordinatorName: detailData.coordinatorName || "",
+        assessTime: detailData.assessTime || "",
+        assessState: detailData.assessState || "1",
+        assessannex: detailData.assessannex || ""
+      };
+
+      // 澶勭悊鎹愮尞鍐冲畾鏁版嵁
+      if (detailData.organdecision) {
+        this.organdecision = Array.isArray(detailData.organdecision)
+          ? detailData.organdecision
+          : (detailData.organdecision || "").split(",");
+        this.organdecisionOther = detailData.organdecisionOther || "";
+      }
+
+      // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
+      this.processOrganAssessmentData(detailData);
+    },
+
+    // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
+    processOrganAssessmentData(detailData) {
+      let organList = [];
+
+      // 浠庢帴鍙f暟鎹腑鑾峰彇鍣ㄥ畼璇勪及鍒楄〃
+      if (detailData.serviceMedicalevaluationorgans) {
+        if (Array.isArray(detailData.serviceMedicalevaluationorgans)) {
+          organList = detailData.serviceMedicalevaluationorgans;
+        }
+      }
+
+      // 杞崲鍣ㄥ畼鏁版嵁鏍煎紡锛屾敮鎸佸娆¤瘎浼�
+      this.organAssessmentList = organList.map(organ => {
+        const assessments = [];
+
+        // 瑙f瀽assesscontent瀛楁涓殑澶氭璇勪及鏁版嵁
+        if (organ.assesscontent) {
+          try {
+            const assessData = typeof organ.assesscontent === "string"
+              ? JSON.parse(organ.assesscontent)
+              : organ.assesscontent;
+
+            if (Array.isArray(assessData)) {
+              assessments.push(
+                ...assessData.map((item, index) => ({
+                  ...item,
+                  index: index,
+                  status: item.status || "assessed"
+                }))
+              );
+            }
+          } catch (error) {
+            console.warn("瑙f瀽璇勪及鍐呭澶辫触:", error);
+            assessments.push(this.getDefaultAssessment(0));
+          }
+        } else {
+          assessments.push(this.getDefaultAssessment(0));
+        }
+
+        return {
+          ...organ,
+          assessments: assessments,
+          activeAssessmentTab: assessments.length > 0 ? "assessment_0" : "summary",
+          expanded: false
+        };
+      });
+    },
+
     // 鑾峰彇榛樿璇勪及鏁版嵁缁撴瀯
-    getDefaultAssessment() {
+    getDefaultAssessment(index) {
       return {
+        index: index,
         status: "pending",
         assessmentTime: "",
         assessor: "",
         functionStatus: "",
         assessmentOpinion: "",
-        attachments: [],
         clinicalData: {},
-        labResults: {}
+        labResults: {},
+        createTime: new Date().toISOString()
       };
     },
 
-    // 鑾峰彇璇勪及璇︽儏
-    getAssessmentDetail() {
-      this.assessmentLoading = true;
-      getAssessment(this.assessmentId)
-        .then(response => {
-          if (response.code === 200) {
-            this.assessmentData = response.data.caseInfo;
-            this.organAssessmentList = this.transformOrganData(
-              response.data.organAssessments || []
-            );
-          }
-          this.assessmentLoading = false;
-        })
-        .catch(error => {
-          console.error("鑾峰彇璇勪及璇︽儏澶辫触:", error);
-          this.assessmentLoading = false;
-        });
-    },
-
-    // 杞崲鍣ㄥ畼鏁版嵁鏍煎紡锛屾敮鎸佸娆¤瘎浼�
-    transformOrganData(organList) {
-      return organList.map(organ => {
-        const organName = this.getOrganName(organ.organType);
-
-        // 杞崲涓哄娆¤瘎浼扮殑鏁版嵁缁撴瀯
-        const assessments = [];
-        if (organ.firstAssessment) {
-          assessments.push({ ...organ.firstAssessment, index: 0 });
-        }
-        if (organ.secondAssessment) {
-          assessments.push({ ...organ.secondAssessment, index: 1 });
-        }
-        // 鍙互缁х画娣诲姞鏇村璇勪及...
-
-        // 璁剧疆鍣ㄥ畼鍚嶇О鍜岃瘎浼版暟鎹�
-        organ.organName = organName;
-        organ.assessments = assessments;
-        organ.activeAssessmentTab =
-          assessments.length > 0 ? "assessment_0" : "summary";
-        organ.expanded = false;
-
-        // 璁$畻鏁翠綋璇勪及鐘舵��
-        organ.assessmentStatus = this.calculateOverallStatus(organ);
-
-        return organ;
-      });
-    },
-
-    // 璁$畻鏈�澶ц瘎浼版鏁帮紙鐢ㄤ簬琛ㄥご鏄剧ず锛�
+    // 璁$畻鏈�澶ц瘎浼版鏁�
     getMaxAssessmentCount() {
       const maxCount = Math.max(
         ...this.organAssessmentList.map(organ =>
           organ.assessments ? organ.assessments.length : 0
         )
       );
-      return Math.max(maxCount, 2); // 鑷冲皯鏄剧ず2鍒�
+      return Math.max(maxCount, 1);
     },
 
-    // 璁$畻鏁翠綋璇勪及鐘舵��
-    calculateOverallStatus(organ) {
-      if (!organ.assessments || organ.assessments.length === 0) return "0";
+    // 鑾峰彇鍣ㄥ畼鏁翠綋鐘舵��
+    getOrganOverallStatus(organ) {
+      if (!organ.assessments || organ.assessments.length === 0) {
+        return "pending";
+      }
 
       const allAssessed = organ.assessments.every(
         assessment => assessment.status === "assessed"
@@ -467,14 +804,24 @@
         assessment => assessment.status === "assessed"
       );
 
-      if (allAssessed) return "1";
-      if (someAssessed) return "2";
-      return "0";
+      if (allAssessed) return "completed";
+      if (someAssessed) return "assessing";
+      return "pending";
+    },
+
+    getOrganOverallStatusText(organ) {
+      const status = this.getOrganOverallStatus(organ);
+      const statusMap = {
+        pending: "寰呰瘎浼�",
+        assessing: "璇勪及涓�",
+        completed: "宸插畬鎴�"
+      };
+      return statusMap[status] || "鏈煡";
     },
 
     // 鍒囨崲灞曞紑琛�
     handleToggleExpand(row) {
-      const key = row.organType;
+      const key = row.organno;
       const index = this.expandedRowKeys.indexOf(key);
 
       if (index > -1) {
@@ -483,83 +830,36 @@
       } else {
         this.expandedRowKeys = [key];
         this.organAssessmentList.forEach(item => {
-          item.expanded = item.organType === key;
+          item.expanded = item.organno === key;
         });
       }
     },
 
     // 灞曞紑琛屽彉鍖�
     handleExpandChange(row, expandedRows) {
-      this.expandedRowKeys = expandedRows.map(item => item.organType);
+      this.expandedRowKeys = expandedRows.map(item => item.organno);
       this.organAssessmentList.forEach(item => {
-        item.expanded = this.expandedRowKeys.includes(item.organType);
+        item.expanded = this.expandedRowKeys.includes(item.organno);
       });
     },
 
     // 娣诲姞鏂拌瘎浼�
     handleAddNewAssessment(organ) {
       const newAssessment = {
-        ...this.getDefaultAssessment(),
-        index: organ.assessments.length
+        ...this.getDefaultAssessment(organ.assessments.length),
+        assessor: this.currentUser.name
       };
 
       organ.assessments.push(newAssessment);
       organ.activeAssessmentTab = `assessment_${organ.assessments.length - 1}`;
-
-      // 鏇存柊鏁翠綋鐘舵��
-      organ.assessmentStatus = this.calculateOverallStatus(organ);
 
       this.$message.success("宸叉坊鍔犳柊鐨勮瘎浼�");
     },
 
     // 澶勭悊娣诲姞璇勪及浜嬩欢
     handleAddAssessment(data) {
-      const { organData, currentIndex } = data;
+      const { organData } = data;
       this.handleAddNewAssessment(organData);
-    },
-
-    // 淇濆瓨璇勪及
-    handleSaveOrganAssessment(saveData) {
-      const { organData, assessmentData, assessmentIndex } = saveData;
-
-      const organToUpdate = {
-        ...organData,
-        assessments: organData.assessments.map((assessment, index) =>
-          index === assessmentIndex
-            ? {
-                ...assessmentData,
-                status: "assessed",
-                assessmentTime: new Date().toISOString(),
-                assessor: this.currentUser.name
-              }
-            : assessment
-        )
-      };
-
-      // 鏇存柊鏁翠綋鐘舵��
-      organToUpdate.assessmentStatus = this.calculateOverallStatus(
-        organToUpdate
-      );
-
-      updateOrganAssessment(organToUpdate)
-        .then(response => {
-          if (response.code === 200) {
-            this.$message.success(`绗�${assessmentIndex + 1}娆¤瘎浼颁繚瀛樻垚鍔焋);
-            this.getAssessmentDetail();
-
-            // 鏇存柊褰撳墠灞曞紑琛岀殑鏁版嵁
-            const index = this.organAssessmentList.findIndex(
-              item => item.organType === organData.organType
-            );
-            if (index !== -1) {
-              this.organAssessmentList.splice(index, 1, organToUpdate);
-            }
-          }
-        })
-        .catch(error => {
-          console.error("淇濆瓨璇勪及澶辫触:", error);
-          this.$message.error("淇濆瓨澶辫触");
-        });
     },
 
     // 鑾峰彇鏈�鏂拌瘎浼版椂闂�
@@ -572,55 +872,6 @@
       return assessed.sort(
         (a, b) => new Date(b.assessmentTime) - new Date(a.assessmentTime)
       )[0].assessmentTime;
-    },
-
-    // 鑾峰彇鎵�鏈夐檮浠�
-    getAllAttachments(organ) {
-      const attachments = [];
-
-      if (organ.assessments) {
-        organ.assessments.forEach((assessment, index) => {
-          if (assessment.attachments) {
-            assessment.attachments.forEach(att => {
-              attachments.push({
-                ...att,
-                assessmentIndex: index,
-                assessmentNumber: index + 1
-              });
-            });
-          }
-        });
-      }
-
-      return attachments;
-    },
-
-    // 棰勮闄勪欢
-    handlePreviewAttachment(attachment) {
-      this.currentPreviewFile = {
-        fileName: attachment.fileName,
-        fileUrl: attachment.path || attachment.fileUrl,
-        fileType: this.getFileType(attachment.fileName)
-      };
-      this.attachmentVisible = true;
-    },
-
-    // 鑾峰彇鏂囦欢绫诲瀷
-    getFileType(fileName) {
-      if (!fileName) return "other";
-
-      const extension = fileName
-        .split(".")
-        .pop()
-        .toLowerCase();
-      const imageTypes = ["jpg", "jpeg", "png", "gif", "bmp", "webp"];
-      const pdfTypes = ["pdf"];
-      const officeTypes = ["doc", "docx", "xls", "xlsx", "ppt", "pptx"];
-
-      if (imageTypes.includes(extension)) return "image";
-      if (pdfTypes.includes(extension)) return "pdf";
-      if (officeTypes.includes(extension)) return "office";
-      return "other";
     },
 
     // 鑾峰彇璇勪及鐘舵�佹爣绛剧被鍨�
@@ -643,16 +894,16 @@
       return textMap[status] || "鏈煡";
     },
 
-    // 鑾峰彇鍣ㄥ畼鍚嶇О
-    getOrganName(organType) {
-      const organ = this.organTypeOptions.find(opt => opt.value === organType);
-      return organ ? organ.label : organType;
-    },
-
     // 妫�鏌ヨ瘎浼版潈闄�
     canAssessOrgan(organ) {
+      console.log(organ,'organ');
+
       if (this.isCoordinator) return true;
-      return organ.department === this.currentDepartment;
+      if (!this.isEdit) return false;
+      return (
+        organ.gainhospitalname &&
+        organ.gainhospitalname.includes(this.currentDepartment)
+      );
     },
 
     // 鑾峰彇琛岀被鍚�
@@ -663,46 +914,79 @@
     // 鐘舵�佽繃婊ゅ櫒
     statusFilter(status) {
       const statusMap = {
-        "0": "warning",
-        "1": "primary",
-        "2": "success",
-        "3": "danger"
+        "1": "warning",
+        "2": "primary",
+        "3": "success"
       };
       return statusMap[status] || "info";
     },
 
     statusTextFilter(status) {
       const statusMap = {
-        "0": "寰呰瘎浼�",
-        "1": "璇勪及涓�",
-        "2": "宸插畬鎴�",
-        "3": "宸插叧闂�"
+        "1": "寰呰瘎浼�",
+        "2": "璇勪及涓�",
+        "3": "宸插畬鎴�"
       };
       return statusMap[status] || "鏈煡";
     },
 
+    // 鏌ョ湅闄勪欢
     handleAttachmentPreview() {
-      this.attachmentVisible = true;
+      if (this.assessmentData.assessannex) {
+        try {
+          const annexData = typeof this.assessmentData.assessannex === "string"
+            ? JSON.parse(this.assessmentData.assessannex)
+            : this.assessmentData.assessannex;
+
+          if (Array.isArray(annexData) && annexData.length > 0) {
+            this.currentPreviewFile = annexData[0];
+            this.attachmentVisible = true;
+          } else {
+            this.$message.info("鏆傛棤闄勪欢鍙瑙�");
+          }
+        } catch (error) {
+          this.$message.info("闄勪欢鏁版嵁鏍煎紡閿欒");
+        }
+      } else {
+        this.$message.info("鏆傛棤闄勪欢");
+      }
     },
 
-    handleCompleteAssessment() {
-      this.$confirm("纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�", "纭鎿嶄綔", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(() => {
-        completeAssessment(this.assessmentId)
-          .then(response => {
-            if (response.code === 200) {
-              this.$message.success("璇勪及瀹屾垚纭鎴愬姛");
-              this.getAssessmentDetail();
-            }
-          })
-          .catch(error => {
-            console.error("瀹屾垚璇勪及澶辫触:", error);
-            this.$message.error("鎿嶄綔澶辫触");
-          });
-      });
+    // 瀹屾垚璇勪及
+    async handleCompleteAssessment() {
+      try {
+        await this.$confirm(
+          "纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�",
+          "纭鎿嶄綔",
+          {
+            confirmButtonText: "纭畾",
+            cancelButtonText: "鍙栨秷",
+            type: "warning"
+          }
+        );
+
+        // 鏇存柊璇勪及鐘舵�佷负宸插畬鎴�
+        const updateData = {
+          ...this.assessmentData,
+          assessState: "3",
+          assessTime: new Date().toISOString()
+        };
+
+        const response = await assessedit(updateData);
+
+        if (response.code === 200) {
+          this.$message.success("璇勪及瀹屾垚纭鎴愬姛");
+          this.assessmentData.assessState = "3";
+          this.isEdit = false;
+        } else {
+          this.$message.error("鎿嶄綔澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+      } catch (error) {
+        if (error !== "cancel") {
+          console.error("瀹屾垚璇勪及澶辫触:", error);
+          this.$message.error("鎿嶄綔澶辫触");
+        }
+      }
     }
   }
 };
@@ -742,6 +1026,14 @@
 
 .assessment-summary {
   padding: 10px;
+}
+
+/* 搴曢儴淇濆瓨鎸夐挳鏍峰紡 */
+.footer-actions {
+  margin-top: 20px;
+  text-align: center;
+  padding: 20px;
+  border-top: 1px solid #eaeaea;
 }
 
 /* 鍝嶅簲寮忚璁� */
@@ -790,4 +1082,17 @@
 .fixed-width .el-button {
   margin: 0 2px;
 }
+
+/* 鎹愮尞鍐冲畾鏍峰紡浼樺寲 */
+.organ-decision-info {
+  margin: 10px 0;
+  padding: 10px;
+  background-color: #f8f9fa;
+  border-radius: 4px;
+  border-left: 4px solid #409eff;
+}
+
+.decision-tag {
+  margin: 2px 5px;
+}
 </style>
diff --git a/src/views/business/assess/components/OrganAssessmentForm.vue b/src/views/business/assess/components/OrganAssessmentForm.vue
index 49ce6cd..2ef0c11 100644
--- a/src/views/business/assess/components/OrganAssessmentForm.vue
+++ b/src/views/business/assess/components/OrganAssessmentForm.vue
@@ -2,7 +2,7 @@
   <div class="organ-assessment-form">
     <el-form :model="assessmentData" label-width="120px">
       <el-form-item label="鍔熻兘鐘舵��">
-        <el-select v-model="assessmentData.functionStatus" :disabled="readonly">
+        <el-select v-model="assessmentData.functionStatus">
           <el-option label="姝e父" value="1" />
           <el-option label="杞诲害寮傚父" value="2" />
           <el-option label="閲嶅害寮傚父" value="3" />
@@ -15,7 +15,6 @@
           type="textarea"
           v-model="assessmentData.assessmentOpinion"
           :rows="4"
-          :disabled="readonly"
           placeholder="璇疯緭鍏ヨ瘎浼版剰瑙�"
         />
       </el-form-item>
@@ -268,13 +267,17 @@
 
     /** 涓婁紶鎴愬姛澶勭悊 */
     handleUploadSuccess({ file, fileList, response }) {
-      if (response.code === 200) {
+      console.log(response);
+
+      if (response.code == 200) {
+        console.log(1);
+
         const attachmentObj = {
-          id:
-            response.data.fileId ||
-            Math.random()
-              .toString(36)
-              .substr(2),
+          // id:
+          //   response.data.fileId ||
+          //   Math.random()
+          //     .toString(36)
+          //     .substr(2),
           fileName: file.name,
           path: response.data.fileUrl || file.url,
           fileUrl: response.data.fileUrl || file.url,
@@ -284,6 +287,7 @@
           assessmentType: this.assessmentType,
           organType: this.organData.organType
         };
+        console.log(2,attachmentObj);
 
         this.assessmentData.attachments.push(attachmentObj);
         this.$message.success("鏂囦欢涓婁紶鎴愬姛");
diff --git a/src/views/business/assess/index.vue b/src/views/business/assess/index.vue
index fb1ab31..c509edc 100644
--- a/src/views/business/assess/index.vue
+++ b/src/views/business/assess/index.vue
@@ -8,9 +8,9 @@
         :inline="true"
         label-width="100px"
       >
-        <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
+        <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
           <el-input
-            v-model="queryParams.donorName"
+            v-model="queryParams.name"
             placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
             clearable
             style="width: 200px"
@@ -35,22 +35,22 @@
             @keyup.enter.native="handleQuery"
           />
         </el-form-item>
-        <el-form-item label="璇勪及鐘舵��" prop="firstAssessState">
+        <el-form-item label="璇勪及鐘舵��" prop="assessState">
           <el-select
-            v-model="queryParams.firstAssessState"
+            v-model="queryParams.assessState"
             placeholder="璇烽�夋嫨璇勪及鐘舵��"
             clearable
             style="width: 200px"
           >
-            <el-option label="寰呰瘎浼�" value="0" />
-            <el-option label="璇勪及涓�" value="1" />
-            <el-option label="宸插畬鎴�" value="2" />
-            <el-option label="宸插叧闂�" value="3" />
+            <el-option label="寰呰瘎浼�" value="1" />
+            <el-option label="璇勪及涓�" value="2" />
+            <el-option label="宸插畬鎴�" value="3" />
+            <el-option label="宸插叧闂�" value="4" />
           </el-select>
         </el-form-item>
         <el-form-item label="鐢宠鏃堕棿" prop="applyTimeRange">
           <el-date-picker
-            v-model="applyTimeRange"
+            v-model="queryParams.applyTimeRange"
             type="daterange"
             range-separator="鑷�"
             start-placeholder="寮�濮嬫棩鏈�"
@@ -59,9 +59,9 @@
             style="width: 240px"
           />
         </el-form-item>
-        <el-form-item label="璇勪及鏃堕棿" prop="assessmentTimeRange">
+        <el-form-item label="璇勪及鏃堕棿" prop="assessTimeRange">
           <el-date-picker
-            v-model="assessmentTimeRange"
+            v-model="queryParams.assessTimeRange"
             type="daterange"
             range-separator="鑷�"
             start-placeholder="寮�濮嬫棩鏈�"
@@ -133,15 +133,14 @@
         <el-table-column
           label="娼滃湪鎹愮尞鑰呭鍚�"
           align="center"
-          prop="donorName"
+          prop="name"
           width="120"
         />
-        <el-table-column label="鎬у埆" align="center" prop="gender" width="80">
+        <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
           <template slot-scope="scope">
-            <!-- <dict-tag :options="genderOptions" :value="scope.row.gender" /> -->
             <dict-tag
               :options="dict.type.sys_user_sex"
-              :value="parseInt(scope.row.gender)"
+              :value="scope.row.sex"
             />
           </template>
         </el-table-column>
@@ -149,14 +148,14 @@
         <el-table-column
           label="鐤剧梾璇婃柇"
           align="center"
-          prop="diagnosis"
+          prop="diagnosisname"
           min-width="180"
           show-overflow-tooltip
         />
         <el-table-column
           label="鎵�鍦ㄥ尰鐤楁満鏋�"
           align="center"
-          prop="hospitalName"
+          prop="treatmenthospitalname"
           width="150"
           show-overflow-tooltip
         />
@@ -173,13 +172,13 @@
         <el-table-column
           label="璇勪及鏃堕棿"
           align="center"
-          prop="assessmentTime"
+          prop="assessTime"
           width="120"
         >
           <template slot-scope="scope">
             <span>{{
-              scope.row.assessmentTime
-                ? parseTime(scope.row.assessmentTime, "{y}-{m}-{d}")
+              scope.row.assessTime
+                ? parseTime(scope.row.assessTime, "{y}-{m}-{d}")
                 : "-"
             }}</span>
           </template>
@@ -187,12 +186,12 @@
         <el-table-column
           label="璇勪及鐘舵��"
           align="center"
-          prop="firstAssessState"
+          prop="assessState"
           width="100"
         >
           <template slot-scope="scope">
-            <el-tag :type="statusFilter(scope.row.firstAssessState)">
-              {{ statusTextFilter(scope.row.firstAssessState) }}
+            <el-tag :type="statusFilter(scope.row.assessState)">
+              {{ statusTextFilter(scope.row.assessState) }}
             </el-tag>
           </template>
         </el-table-column>
@@ -202,19 +201,6 @@
           prop="coordinatorName"
           width="100"
         />
-        <!-- <el-table-column
-          label="璇勪及绫诲瀷"
-          align="center"
-          prop="assessmentType"
-          width="100"
-        >
-          <template slot-scope="scope">
-            <dict-tag
-              :options="dict.type.assessment_Type"
-              :value="parseInt(scope.row.assessmentType)"
-            />
-          </template>
-        </el-table-column> -->
         <el-table-column
           label="鎿嶄綔"
           align="center"
@@ -231,8 +217,8 @@
             >
             <el-button
               v-if="
-                scope.row.firstAssessState === '0' ||
-                  scope.row.firstAssessState === '1'
+                scope.row.assessState === '1' ||
+                  scope.row.assessState === '2'
               "
               size="mini"
               type="text"
@@ -241,7 +227,7 @@
               >璇勪及</el-button
             >
             <el-button
-              v-if="scope.row.firstAssessState === '2'"
+              v-if="scope.row.assessState === '3'"
               size="mini"
               type="text"
               icon="el-icon-check"
@@ -265,19 +251,13 @@
 </template>
 
 <script>
-// import { listAssessment, delAssessment, exportAssessment } from "@/api/case/assessment";
-import {
-  listAssessment,
-  delAssessment,
-  exportAssessment
-} from "./mockAssessmentApi";
 import { evaluateBaseInfolist } from "@/api/businessApi/index";
 import Pagination from "@/components/Pagination";
 
 export default {
   name: "AssessmentList",
   components: { Pagination },
-  dicts: ["sys_user_sex", "assessment_Type"],
+  dicts: ["sys_user_sex"],
   data() {
     return {
       // 閬僵灞�
@@ -296,24 +276,13 @@
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        donorName: undefined,
+        name: undefined,
         hospitalName: undefined,
         coordinatorName: undefined,
-        firstAssessState: undefined,
-
-      },
-      applyTimeRange: [],
-        assessmentTimeRange: [],
-      // 鎬у埆閫夐」
-      genderOptions: [
-        { value: "0", label: "鐢�" },
-        { value: "1", label: "濂�" }
-      ],
-      // 璇勪及绫诲瀷閫夐」
-      assessmentTypeOptions: [
-        { value: "1", label: "鍒濇璇勪及" },
-        { value: "2", label: "鏈�缁堣瘎浼�" }
-      ]
+        assessState: undefined,
+        applyTimeRange: [],
+        assessTimeRange: []
+      }
     };
   },
   created() {
@@ -323,41 +292,121 @@
     // 鐘舵�佽繃婊ゅ櫒
     statusFilter(status) {
       const statusMap = {
-        "0": "warning", // 寰呰瘎浼�
-        "1": "primary", // 璇勪及涓�
-        "2": "success", // 宸插畬鎴�
-        "3": "danger" // 宸插叧闂�
+        "1": "warning", // 寰呰瘎浼�
+        "2": "primary", // 璇勪及涓�
+        "3": "success", // 宸插畬鎴�
+        "4": "danger" // 宸插叧闂�
       };
       return statusMap[status] || "info";
     },
     statusTextFilter(status) {
       const statusMap = {
-        "0": "寰呰瘎浼�",
-        "1": "璇勪及涓�",
-        "2": "宸插畬鎴�",
-        "3": "宸插叧闂�"
+        "1": "寰呰瘎浼�",
+        "2": "璇勪及涓�",
+        "3": "宸插畬鎴�",
+        "4": "宸插叧闂�"
       };
       return statusMap[status] || "鏈煡";
     },
     // 鏌ヨ璇勪及鍒楄〃
-    getList() {
+    async getList() {
       this.loading = true;
-      evaluateBaseInfolist(this.queryParams);
-      listAssessment(this.queryParams)
-        .then(response => {
-          if (response.code === 200) {
-            this.assessmentList = response.data.rows;
-            this.total = response.data.total;
-          } else {
-            this.$message.error("鑾峰彇鏁版嵁澶辫触");
-          }
-          this.loading = false;
-        })
-        .catch(error => {
-          console.error("鑾峰彇璇勪及鍒楄〃澶辫触:", error);
-          this.loading = false;
-          this.$message.error("鑾峰彇鏁版嵁澶辫触");
-        });
+      try {
+        // 鏋勫缓鏌ヨ鍙傛暟锛屾槧灏勫埌鎺ュ彛瀛楁
+        const requestParams = this.buildRequestParams();
+
+        const response = await evaluateBaseInfolist(requestParams);
+
+        if (response.code === 200) {
+          // 澶勭悊鎺ュ彛杩斿洖鐨勬暟鎹粨鏋�
+          this.handleResponseData(response);
+        } else {
+          this.$message.error("鑾峰彇鏁版嵁澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+          this.assessmentList = [];
+          this.total = 0;
+        }
+      } catch (error) {
+        console.error("鑾峰彇璇勪及鍒楄〃澶辫触:", error);
+        this.$message.error("鑾峰彇鏁版嵁澶辫触");
+        this.assessmentList = [];
+        this.total = 0;
+      } finally {
+        this.loading = false;
+      }
+    },
+    // 鏋勫缓璇锋眰鍙傛暟
+    buildRequestParams() {
+      const params = {
+        pageNum: this.queryParams.pageNum,
+        pageSize: this.queryParams.pageSize
+      };
+
+      // 鏄犲皠鏌ヨ鏉′欢鍒版帴鍙e瓧娈�
+      if (this.queryParams.name) {
+        params.name = this.queryParams.name;
+      }
+      if (this.queryParams.hospitalName) {
+        params.treatmenthospitalname = this.queryParams.hospitalName;
+      }
+      if (this.queryParams.coordinatorName) {
+        params.coordinatorName = this.queryParams.coordinatorName;
+      }
+      if (this.queryParams.assessState) {
+        params.assessState = this.queryParams.assessState;
+      }
+
+      // 澶勭悊鏃堕棿鑼冨洿鏌ヨ
+      if (this.queryParams.applyTimeRange && this.queryParams.applyTimeRange.length === 2) {
+        params.startApplyTime = this.queryParams.applyTimeRange[0];
+        params.endApplyTime = this.queryParams.applyTimeRange[1];
+      }
+
+      if (this.queryParams.assessTimeRange && this.queryParams.assessTimeRange.length === 2) {
+        params.startAssessTime = this.queryParams.assessTimeRange[0];
+        params.endAssessTime = this.queryParams.assessTimeRange[1];
+      }
+
+      return params;
+    },
+    // 澶勭悊鎺ュ彛鍝嶅簲鏁版嵁
+    handleResponseData(response) {
+      // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+      if (response.data) {
+        if (Array.isArray(response.data)) {
+          // 濡傛灉杩斿洖鐨勬槸鏁扮粍
+          this.assessmentList = response.data;
+          this.total = response.data.length;
+        } else if (response.data.rows) {
+          // 濡傛灉杩斿洖鐨勬槸鍒嗛〉鏁版嵁缁撴瀯
+          this.assessmentList = response.data.rows;
+          this.total = response.data.total;
+        } else if (Array.isArray(response.data.list)) {
+          // 濡傛灉杩斿洖鐨勬槸list瀛楁
+          this.assessmentList = response.data.list;
+          this.total = response.data.total || response.data.list.length;
+        } else {
+          // 鍏朵粬鏁版嵁缁撴瀯锛屽皾璇曠洿鎺ヤ娇鐢╠ata
+          this.assessmentList = response.data;
+          this.total = response.total || response.data.length;
+        }
+      } else {
+        // 濡傛灉data涓虹┖锛屼娇鐢ㄦ牴绾у埆鐨剅ows鎴杔ist
+        if (Array.isArray(response.rows)) {
+          this.assessmentList = response.rows;
+          this.total = response.total;
+        } else if (Array.isArray(response.list)) {
+          this.assessmentList = response.list;
+          this.total = response.total;
+        } else {
+          this.assessmentList = [];
+          this.total = 0;
+        }
+      }
+
+      // 纭繚assessmentList鏄暟缁�
+      if (!Array.isArray(this.assessmentList)) {
+        this.assessmentList = [];
+      }
     },
     // 鎼滅储鎸夐挳鎿嶄綔
     handleQuery() {
@@ -367,7 +416,8 @@
     // 閲嶇疆鎸夐挳鎿嶄綔
     resetQuery() {
       this.$refs.queryForm.resetFields();
-      this.handleQuery();
+      this.queryParams.pageNum = 1;
+      this.getList();
     },
     // 澶氶�夋閫変腑鏁版嵁
     handleSelectionChange(selection) {
@@ -379,34 +429,41 @@
     handleRowClick(row) {
       this.$router.push({
         path: "/case/assessInfo",
-        query: { id: row.id }
+        query: { id: row.id, infoid: row.infoid }
       });
     },
     // 鏌ョ湅璇︽儏
     handleView(row) {
-      this.$router.push({ path: "/case/assessInfo", query: { id: row.id } });
+      this.$router.push({
+        path: "/case/assessInfo",
+        query: { id: row.id, infoid: row.infoid }
+      });
     },
     // 杩涜璇勪及
     handleAssess(row) {
       this.$router.push({
         path: "/case/assessInfo",
-        query: { id: row.id, assess: true }
+        query: { id: row.id, infoid: row.infoid, assess: true }
       });
     },
     // 纭璇勪及
-    handleConfirm(row) {
-      this.$confirm("纭瀹屾垚璇ユ渚嬬殑璇勪及鍚楋紵", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          // 璋冪敤Mock纭API
-          this.$message.success("纭鎴愬姛");
-          // 鍒锋柊鍒楄〃
-          this.getList();
-        })
-        .catch(() => {});
+    async handleConfirm(row) {
+      try {
+        await this.$confirm("纭瀹屾垚璇ユ渚嬬殑璇勪及鍚楋紵", "璀﹀憡", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
+        });
+
+        // 杩欓噷闇�瑕佽皟鐢ㄧ‘璁よ瘎浼版帴鍙o紝鏆傛椂妯℃嫙鎴愬姛
+        this.$message.success("纭鎴愬姛");
+        // 鍒锋柊鍒楄〃
+        this.getList();
+      } catch (error) {
+        if (error !== 'cancel') {
+          console.error("纭澶辫触:", error);
+        }
+      }
     },
     // 鏂板鎸夐挳鎿嶄綔
     handleCreate() {
@@ -414,71 +471,117 @@
     },
     // 淇敼鎸夐挳鎿嶄綔
     handleUpdate() {
+      if (this.ids.length === 0) return;
+
       const id = this.ids[0];
-      this.$router.push({ path: "/case/assessment/edit", query: { id: id } });
+      this.$router.push({
+        path: "/case/assessment/edit",
+        query: { id: id }
+      });
     },
-    // 鍒犻櫎鎸夐挳鎿嶄綔 - 浣跨敤Mock API
-    handleDelete() {
-      const ids = this.ids;
-      this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          return delAssessment(ids);
-        })
-        .then(response => {
-          if (response.code === 200) {
-            this.$message.success("鍒犻櫎鎴愬姛");
-            this.getList();
-          }
-        })
-        .catch(() => {});
-    },
-    // 瀵煎嚭鎸夐挳鎿嶄綔 - 浣跨敤Mock API
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夎瘎浼版暟鎹紵", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          this.loading = true;
-          return exportAssessment(queryParams);
-        })
-        .then(response => {
-          if (response.code === 200) {
-            this.$message.success("瀵煎嚭鎴愬姛锛屽紑濮嬩笅杞芥枃浠�");
-            // 妯℃嫙鏂囦欢涓嬭浇
-            const link = document.createElement("a");
-            link.href = response.data.downloadUrl;
-            link.download = "妗堜緥璇勪及鏁版嵁.xlsx";
-            link.click();
-          }
-          this.loading = false;
-        })
-        .catch(() => {
-          this.loading = false;
+    // 鍒犻櫎鎸夐挳鎿嶄綔
+    async handleDelete() {
+      if (this.ids.length === 0) return;
+
+      try {
+        await this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
         });
+
+        // 杩欓噷闇�瑕佽皟鐢ㄥ垹闄ゆ帴鍙o紝鏆傛椂妯℃嫙鎴愬姛
+        this.$message.success("鍒犻櫎鎴愬姛");
+        this.getList();
+
+      } catch (error) {
+        if (error !== "cancel") {
+          console.error("鍒犻櫎澶辫触:", error);
+          this.$message.error("鍒犻櫎澶辫触");
+        }
+      }
+    },
+    // 瀵煎嚭鎸夐挳鎿嶄綔
+    async handleExport() {
+      try {
+        await this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夎瘎浼版暟鎹紵", "璀﹀憡", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
+        });
+
+        this.loading = true;
+
+        // 鏋勫缓瀵煎嚭鍙傛暟
+        const exportParams = this.buildRequestParams();
+        exportParams.pageSize = 10000; // 瀵煎嚭鎵�鏈夋暟鎹�
+
+        // 鑾峰彇瀵煎嚭鏁版嵁
+        const response = await evaluateBaseInfolist(exportParams);
+
+        if (response.code === 200) {
+          // 澶勭悊瀵煎嚭鏁版嵁
+          this.exportDataToExcel(response.data);
+          this.$message.success("瀵煎嚭鎴愬姛");
+        } else {
+          this.$message.error("瀵煎嚭澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+
+      } catch (error) {
+        if (error !== "cancel") {
+          console.error("瀵煎嚭澶辫触:", error);
+          this.$message.error("瀵煎嚭澶辫触");
+        }
+      } finally {
+        this.loading = false;
+      }
+    },
+    // 瀵煎嚭鏁版嵁鍒癊xcel
+    exportDataToExcel(data) {
+      // 杩欓噷瀹炵幇瀵煎嚭閫昏緫锛屽彲浠ヤ娇鐢▁lsx绛夊簱
+      // 鐢变簬鏄墠绔鍑猴紝杩欓噷绠�鍗曟紨绀�
+      console.log("瀵煎嚭鏁版嵁:", data);
+      // 瀹為檯椤圭洰涓渶瑕佸疄鐜板畬鏁寸殑Excel瀵煎嚭鍔熻兘
+
+      // 妯℃嫙鏂囦欢涓嬭浇
+      const blob = new Blob([JSON.stringify(data, null, 2)], {
+        type: 'application/vnd.ms-excel'
+      });
+      const link = document.createElement('a');
+      link.href = URL.createObjectURL(blob);
+      link.download = '鍖诲璇勪及鏁版嵁.xlsx';
+      link.click();
     },
     // 鏃堕棿鏍煎紡鍖�
     parseTime(time, pattern) {
       if (!time) return "";
-      // 浣跨敤moment.js鎴栫畝鍗曟牸寮忓寲
-      if (this.$moment) {
-        return this.$moment(time).format(pattern || "{y}-{m}-{d} {h}:{i}:{s}");
-      } else {
-        // 绠�鍗曟牸寮忓寲
-        const date = new Date(time);
-        return `${date.getFullYear()}-${(date.getMonth() + 1)
-          .toString()
-          .padStart(2, "0")}-${date
-          .getDate()
-          .toString()
-          .padStart(2, "0")}`;
+      const date = new Date(time);
+      if (pattern) {
+        // 绠�鍗曠殑妯″紡鍖归厤
+        if (pattern === "{y}-{m}-{d}") {
+          return `${date.getFullYear()}-${(date.getMonth() + 1)
+            .toString()
+            .padStart(2, "0")}-${date
+            .getDate()
+            .toString()
+            .padStart(2, "0")}`;
+        }
       }
+      return `${date.getFullYear()}-${(date.getMonth() + 1)
+        .toString()
+        .padStart(2, "0")}-${date
+        .getDate()
+        .toString()
+        .padStart(2, "0")} ${date
+        .getHours()
+        .toString()
+        .padStart(2, "0")}:${date
+        .getMinutes()
+        .toString()
+        .padStart(2, "0")}:${date
+        .getSeconds()
+        .toString()
+        .padStart(2, "0")}`;
     }
   }
 };
diff --git a/src/views/business/maintain/components/BloodRoutinePanel.vue b/src/views/business/maintain/components/BloodRoutinePanel.vue
index 483150b..19fbf42 100644
--- a/src/views/business/maintain/components/BloodRoutinePanel.vue
+++ b/src/views/business/maintain/components/BloodRoutinePanel.vue
@@ -43,7 +43,7 @@
       >
         <template #default="scope">
           <div class="item-name-cell">
-            <span :class="{'required-item': scope.row.required}">
+            <span :class="{ 'required-item': scope.row.required }">
               {{ scope.row.itemName }}
             </span>
             <el-tooltip
@@ -79,13 +79,19 @@
             />
             <div v-else class="value-display-container">
               <span class="value-text" :title="scope.row.values[index]">
-                {{ scope.row.values[index] || '-' }}
+                {{ scope.row.values[index] || "-" }}
               </span>
-              <span v-if="scope.row.values[index] && scope.row.unit" class="unit-text">
+              <span
+                v-if="scope.row.values[index] && scope.row.unit"
+                class="unit-text"
+              >
                 {{ scope.row.unit }}
               </span>
             </div>
-            <div v-if="scope.row.reference && scope.row.values[index]" class="validation-indicator">
+            <div
+              v-if="scope.row.reference && scope.row.values[index]"
+              class="validation-indicator"
+            >
               <i
                 v-if="isValueValid(scope.row, scope.row.values[index])"
                 class="el-icon-success valid-icon"
@@ -100,20 +106,6 @@
           </div>
         </template>
       </el-table-column>
-
-      <!-- <el-table-column
-        v-if="isEditing"
-        label="鎿嶄綔"
-        width="120"
-        fixed="right"
-        class-name="leave-alone"
-      >
-        <template #default>
-          <el-button link type="primary" @click="addColumn" size="small">
-            鏂板鍒�
-          </el-button>
-        </template>
-      </el-table-column> -->
     </el-table>
 
     <!-- 缁熻淇℃伅 -->
@@ -121,7 +113,9 @@
       <el-card shadow="never">
         <div class="stats-content">
           <span class="stats-title">鏁版嵁缁熻:</span>
-          <span class="stats-item">鎬昏褰曟暟: {{ dynamicColumns.length }} 涓椂闂寸偣</span>
+          <span class="stats-item"
+            >鎬昏褰曟暟: {{ dynamicColumns.length }} 涓椂闂寸偣</span
+          >
           <span class="stats-item">宸插~鍐�: {{ filledCount }} 椤�</span>
           <span class="stats-item">瀹屾垚搴�: {{ completionRate }}%</span>
         </div>
@@ -194,7 +188,11 @@
         >
           鍒犻櫎
         </el-button>
-        <el-button type="primary" @click="confirmAddColumn" :loading="saveLoading">
+        <el-button
+          type="primary"
+          @click="confirmAddColumn"
+          :loading="saveLoading"
+        >
           纭畾
         </el-button>
       </span>
@@ -206,18 +204,19 @@
 import UploadAttachment from "@/components/UploadAttachment";
 
 export default {
-  name: 'BloodRoutinePanel',
+  name: "BloodRoutinePanel",
   components: {
-    UploadAttachment,
+    UploadAttachment
   },
   props: {
     isEditing: {
       type: Boolean,
       default: false
     },
+    // 淇敼涓� Object 绫诲瀷锛屾敮鎸佸鏉傛暟鎹粨鏋�
     initialData: {
-      type: Array,
-      default: () => []
+      type: Object,
+      default: () => ({})
     },
     showStatistics: {
       type: Boolean,
@@ -227,33 +226,23 @@
   data() {
     return {
       tableData: [],
-      dynamicColumns: [
-        {
-          label: '2024-12-27\n08:00',
-          key: 'time1',
-          date: '2024-12-27',
-          time: '08:00',
-          remark: '鏅ㄨ捣妫�娴�'
-        }
-      ],
+      dynamicColumns: [],
       attachments: [],
       columnDialogVisible: false,
       columnForm: {
-        date: '',
-        time: '',
-        remark: ''
+        date: "",
+        time: "",
+        remark: ""
       },
       editingColumnIndex: null,
       tableKey: 0,
       tableLoading: false,
       saveLoading: false,
+      // 鍐呴儴鏁版嵁鐘舵��
+      internalData: {},
       columnRules: {
-        date: [
-          { required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }
-        ],
-        time: [
-          { required: true, message: '璇烽�夋嫨鏃堕棿', trigger: 'change' }
-        ]
+        date: [{ required: true, message: "璇烽�夋嫨鏃ユ湡", trigger: "change" }],
+        time: [{ required: true, message: "璇烽�夋嫨鏃堕棿", trigger: "change" }]
       }
     };
   },
@@ -262,7 +251,7 @@
       let count = 0;
       this.tableData.forEach(row => {
         row.values.forEach(value => {
-          if (value && value.toString().trim() !== '') {
+          if (value && value.toString().trim() !== "") {
             count++;
           }
         });
@@ -275,14 +264,20 @@
     }
   },
   watch: {
+    // 鐩戝惉 initialData 鍙樺寲锛岀‘淇濇暟鎹纭帴鏀�
+    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: 'blood_routine',
-          data: this.tableData,
-          columns: this.dynamicColumns,
-          attachments: this.attachments
-        });
+        this.saveData();
       }
       this.$nextTick(() => {
         this.forceTableLayout();
@@ -299,54 +294,105 @@
     }
   },
   methods: {
+    // 浠庡閮ㄦ暟鎹垵濮嬪寲缁勪欢
+    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: 'WBC',
-          unit: '脳10鈦�/L',
-          required: true,
-          reference: '3.5-9.5',
-          min: 3.5,
-          max: 9.5,
-          type: 'number'
-        },
-        {
-          itemName: 'NEUT%',
-          unit: '%',
-          required: true,
-          reference: '40-75',
-          min: 40,
-          max: 75,
-          type: 'number'
-        },
-        {
-          itemName: 'Hb',
-          unit: 'g/L',
-          required: true,
-          reference: '130-175',
-          min: 130,
-          max: 175,
-          type: 'number'
-        },
-        {
-          itemName: '琛�灏忔澘',
-          unit: '脳10鈦�/L',
-          required: true,
-          reference: '125-350',
-          min: 125,
-          max: 350,
-          type: 'number'
-        }
-      ];
+      const medicalItems = this.getMedicalItems();
+
+      // 濡傛灉娌℃湁鍔ㄦ�佸垪锛屽垵濮嬪寲榛樿鍒�
+      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",
+            remark: "鏅ㄨ捣妫�娴�"
+          }
+        ];
+      }
 
       this.tableData = medicalItems.map(item => ({
         ...item,
-        values: new Array(this.dynamicColumns.length).fill('')
+        values: new Array(this.dynamicColumns.length).fill("")
       }));
     },
 
+    // 琛�甯歌妫�娴嬮」鐩畾涔�
+    getMedicalItems() {
+      return [
+        {
+          itemName: "WBC",
+          unit: "脳10鈦�/L",
+          required: true,
+          reference: "3.5-9.5",
+          min: 3.5,
+          max: 9.5,
+          type: "number"
+        },
+        {
+          itemName: "NEUT%",
+          unit: "%",
+          required: true,
+          reference: "40-75",
+          min: 40,
+          max: 75,
+          type: "number"
+        },
+        {
+          itemName: "Hb",
+          unit: "g/L",
+          required: true,
+          reference: "130-175",
+          min: 130,
+          max: 175,
+          type: "number"
+        },
+        {
+          itemName: "琛�灏忔澘",
+          unit: "脳10鈦�/L",
+          required: true,
+          reference: "125-350",
+          min: 125,
+          max: 350,
+          type: "number"
+        }
+      ];
+    },
+
+    // 淇濆瓨鏁版嵁鍒扮埗缁勪欢
+    saveData() {
+      const dataToEmit = {
+        type: "blood_routine",
+        data: this.tableData,
+        columns: this.dynamicColumns,
+        attachments: this.attachments
+      };
+
+      this.$emit("data-change", dataToEmit);
+    },
+
     getPlaceholder(row) {
-      return row.reference ? `鍙傝��: ${row.reference}` : '璇疯緭鍏ユ暟鍊�';
+      return row.reference ? `鍙傝��: ${row.reference}` : "璇疯緭鍏ユ暟鍊�";
     },
 
     isValueValid(row, value) {
@@ -358,9 +404,9 @@
     addColumn() {
       this.editingColumnIndex = null;
       this.columnForm = {
-        date: new Date().toISOString().split('T')[0],
-        time: '08:00',
-        remark: ''
+        date: new Date().toISOString().split("T")[0],
+        time: "08:00",
+        remark: ""
       };
       this.columnDialogVisible = true;
       this.$nextTick(() => {
@@ -374,15 +420,15 @@
       this.columnForm = {
         date: column.date,
         time: column.time,
-        remark: column.remark || ''
+        remark: column.remark || ""
       };
       this.columnDialogVisible = true;
     },
 
     confirmAddColumn() {
-      this.$refs.columnFormB.validate((valid) => {
+      this.$refs.columnFormB.validate(valid => {
         if (!valid) {
-          this.$message.warning('璇峰畬鍠勬椂闂寸偣淇℃伅');
+          this.$message.warning("璇峰畬鍠勬椂闂寸偣淇℃伅");
           return;
         }
 
@@ -395,10 +441,9 @@
           column.date = this.columnForm.date;
           column.time = this.columnForm.time;
           column.remark = this.columnForm.remark;
-          this.$message.success('鏃堕棿鐐逛慨鏀规垚鍔�');
+          this.$message.success("鏃堕棿鐐逛慨鏀规垚鍔�");
         } else {
           // 鏂板鍒�
-          const newIndex = this.dynamicColumns.length + 1;
           const newColumn = {
             label: `${this.columnForm.date}\n${this.columnForm.time}`,
             key: `time${Date.now()}`,
@@ -407,11 +452,13 @@
             remark: this.columnForm.remark
           };
 
+          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.$message.success('鏃堕棿鐐规坊鍔犳垚鍔�');
+          this.$message.success("鏃堕棿鐐规坊鍔犳垚鍔�");
         }
 
         this.columnDialogVisible = false;
@@ -422,10 +469,10 @@
 
     handleDeleteColumn() {
       if (this.editingColumnIndex !== null) {
-        this.$confirm('纭畾瑕佸垹闄よ繖涓椂闂寸偣鍚楋紵', '鎻愮ず', {
-          confirmButtonText: '纭畾',
-          cancelButtonText: '鍙栨秷',
-          type: 'warning'
+        this.$confirm("纭畾瑕佸垹闄よ繖涓椂闂寸偣鍚楋紵", "鎻愮ず", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
         }).then(() => {
           this.dynamicColumns.splice(this.editingColumnIndex, 1);
           this.tableData.forEach(row => {
@@ -433,7 +480,7 @@
           });
           this.columnDialogVisible = false;
           this.tableKey += 1;
-          this.$message.success('鏃堕棿鐐瑰垹闄ゆ垚鍔�');
+          this.$message.success("鏃堕棿鐐瑰垹闄ゆ垚鍔�");
         });
       }
     },
@@ -441,9 +488,9 @@
     handleDialogClosed() {
       this.editingColumnIndex = null;
       this.columnForm = {
-        date: '',
-        time: '',
-        remark: ''
+        date: "",
+        time: "",
+        remark: ""
       };
       this.$refs.columnFormB && this.$refs.columnFormB.clearValidate();
     },
@@ -453,26 +500,22 @@
     },
 
     handleValueChange(row, columnIndex) {
-      this.$emit('data-change', {
-        type: 'blood_routine',
-        data: this.tableData,
-        columns: this.dynamicColumns
-      });
+      this.saveData();
     },
 
     handleAttachmentChange(fileList) {
       this.attachments = fileList;
-      this.$emit('attachment-change', {
-        type: 'blood_routine',
+      this.$emit("attachment-change", {
+        type: "blood_routine",
         attachments: fileList
       });
     },
 
     forceTableLayout() {
       this.$nextTick(() => {
-        const table = this.$el.querySelector('.el-table');
+        const table = this.$el.querySelector(".el-table");
         if (table) {
-          window.dispatchEvent(new Event('resize'));
+          window.dispatchEvent(new Event("resize"));
         }
       });
     },
@@ -496,7 +539,13 @@
     }
   },
   mounted() {
-    this.initTableData();
+    // 纭繚缁勪欢姝g‘鎸傝浇鍚庡垵濮嬪寲鏁版嵁
+    this.$nextTick(() => {
+      if (Object.keys(this.internalData).length === 0) {
+        this.initTableData();
+      }
+      this.forceTableLayout();
+    });
   }
 };
 </script>
@@ -681,13 +730,5 @@
     flex-direction: column;
     gap: 4px;
   }
-}
-
-/* 鍔ㄧ敾鏁堟灉 */
-.fade-enter-active, .fade-leave-active {
-  transition: opacity 0.3s;
-}
-.fade-enter, .fade-leave-to {
-  opacity: 0;
 }
 </style>
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;
diff --git a/src/views/business/maintain/components/UrineRoutinePanel.vue b/src/views/business/maintain/components/UrineRoutinePanel.vue
index b548a04..541158f 100644
--- a/src/views/business/maintain/components/UrineRoutinePanel.vue
+++ b/src/views/business/maintain/components/UrineRoutinePanel.vue
@@ -43,7 +43,7 @@
       >
         <template #default="scope">
           <div class="item-name-cell">
-            <span :class="{'required-item': scope.row.required}">
+            <span :class="{ 'required-item': scope.row.required }">
               {{ scope.row.itemName }}
             </span>
             <el-tooltip
@@ -85,8 +85,12 @@
                   :value="option.value"
                 />
               </el-select>
-              <span v-else class="value-text" :title="getSelectLabel(scope.row, index)">
-                {{ getSelectLabel(scope.row, index) || '-' }}
+              <span
+                v-else
+                class="value-text"
+                :title="getSelectLabel(scope.row, index)"
+              >
+                {{ getSelectLabel(scope.row, index) || "-" }}
               </span>
             </template>
 
@@ -102,9 +106,12 @@
               />
               <div v-else class="value-display-container">
                 <span class="value-text" :title="scope.row.values[index]">
-                  {{ scope.row.values[index] || '-' }}
+                  {{ scope.row.values[index] || "-" }}
                 </span>
-                <span v-if="scope.row.values[index] && scope.row.unit" class="unit-text">
+                <span
+                  v-if="scope.row.values[index] && scope.row.unit"
+                  class="unit-text"
+                >
                   {{ scope.row.unit }}
                 </span>
               </div>
@@ -112,20 +119,6 @@
           </div>
         </template>
       </el-table-column>
-
-      <!-- <el-table-column
-        v-if="isEditing"
-        label="鎿嶄綔"
-        width="120"
-        fixed="right"
-        class-name="leave-alone"
-      >
-        <template #default>
-          <el-button link type="primary" @click="addColumn" size="small">
-            鏂板鍒�
-          </el-button>
-        </template>
-      </el-table-column> -->
     </el-table>
 
     <!-- 缁熻淇℃伅 -->
@@ -133,7 +126,9 @@
       <el-card shadow="never">
         <div class="stats-content">
           <span class="stats-title">鏁版嵁缁熻:</span>
-          <span class="stats-item">鎬昏褰曟暟: {{ dynamicColumns.length }} 涓椂闂寸偣</span>
+          <span class="stats-item"
+            >鎬昏褰曟暟: {{ dynamicColumns.length }} 涓椂闂寸偣</span
+          >
           <span class="stats-item">宸插~鍐�: {{ filledCount }} 椤�</span>
           <span class="stats-item">瀹屾垚搴�: {{ completionRate }}%</span>
         </div>
@@ -145,7 +140,9 @@
       <div class="attachment-header">
         <i class="el-icon-paperclip"></i>
         <span class="attachment-title">闄勪欢涓婁紶</span>
-        <span class="attachment-tip">鏀寔涓婁紶灏垮父瑙勬楠屾姤鍛婂崟绛夋枃浠� (鏈�澶�10涓�)</span>
+        <span class="attachment-tip"
+          >鏀寔涓婁紶灏垮父瑙勬楠屾姤鍛婂崟绛夋枃浠� (鏈�澶�10涓�)</span
+        >
       </div>
       <upload-attachment
         :file-list="attachments"
@@ -206,7 +203,11 @@
         >
           鍒犻櫎
         </el-button>
-        <el-button type="primary" @click="confirmAddColumn" :loading="saveLoading">
+        <el-button
+          type="primary"
+          @click="confirmAddColumn"
+          :loading="saveLoading"
+        >
           纭畾
         </el-button>
       </span>
@@ -218,18 +219,19 @@
 import UploadAttachment from "@/components/UploadAttachment";
 
 export default {
-  name: 'UrineRoutinePanel',
+  name: "UrineRoutinePanel",
   components: {
-    UploadAttachment,
+    UploadAttachment
   },
   props: {
     isEditing: {
       type: Boolean,
       default: false
     },
+    // 淇敼涓� Object 绫诲瀷锛屾敮鎸佸鏉傛暟鎹粨鏋�
     initialData: {
-      type: Array,
-      default: () => []
+      type: Object,
+      default: () => ({})
     },
     showStatistics: {
       type: Boolean,
@@ -239,33 +241,23 @@
   data() {
     return {
       tableData: [],
-      dynamicColumns: [
-        {
-          label: '2024-12-27\n08:00',
-          key: 'time1',
-          date: '2024-12-27',
-          time: '08:00',
-          remark: '鏅ㄥ翱妫�娴�'
-        }
-      ],
+      dynamicColumns: [],
       attachments: [],
       columnDialogVisible: false,
       columnForm: {
-        date: '',
-        time: '',
-        remark: ''
+        date: "",
+        time: "",
+        remark: ""
       },
       editingColumnIndex: null,
       tableKey: 0,
       tableLoading: false,
       saveLoading: false,
+      // 鍐呴儴鏁版嵁鐘舵��
+      internalData: {},
       columnRules: {
-        date: [
-          { required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }
-        ],
-        time: [
-          { required: true, message: '璇烽�夋嫨鏃堕棿', trigger: 'change' }
-        ]
+        date: [{ required: true, message: "璇烽�夋嫨鏃ユ湡", trigger: "change" }],
+        time: [{ required: true, message: "璇烽�夋嫨鏃堕棿", trigger: "change" }]
       }
     };
   },
@@ -274,7 +266,7 @@
       let count = 0;
       this.tableData.forEach(row => {
         row.values.forEach(value => {
-          if (value && value.toString().trim() !== '') {
+          if (value && value.toString().trim() !== "") {
             count++;
           }
         });
@@ -287,14 +279,22 @@
     }
   },
   watch: {
+    // 鐩戝惉 initialData 鍙樺寲锛岀‘淇濇暟鎹纭帴鏀�
+    initialData: {
+      handler(newData) {
+        console.log(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: 'urine_routine',
-          data: this.tableData,
-          columns: this.dynamicColumns,
-          attachments: this.attachments
-        });
+        this.saveData();
       }
       this.$nextTick(() => {
         this.forceTableLayout();
@@ -311,114 +311,168 @@
     }
   },
   methods: {
-    initTableData() {
-      const medicalItems = [
+    // 浠庡閮ㄦ暟鎹垵濮嬪寲缁勪欢
+    initFromExternalData() {
+      console.log(this.internalData,'this.internalData');
 
+      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 = this.getMedicalItems();
+
+      // 濡傛灉娌℃湁鍔ㄦ�佸垪锛屽垵濮嬪寲榛樿鍒�
+      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",
+            remark: "鏅ㄥ翱妫�娴�"
+          }
+        ];
+      }
+
+      this.tableData = medicalItems.map(item => ({
+        ...item,
+        values: new Array(this.dynamicColumns.length).fill("")
+      }));
+    },
+
+    // 灏垮父瑙勬娴嬮」鐩畾涔�
+    getMedicalItems() {
+      return [
         {
-          itemName: '灏块噺',
-          type: 'number',
+          itemName: "灏块噺",
+          type: "number",
           required: true,
-          unit: 'ml/h',
-          reference: '姝e父鑼冨洿瑙嗘儏鍐佃�屽畾'
+          unit: "ml/h",
+          reference: "姝e父鑼冨洿瑙嗘儏鍐佃�屽畾"
         },
         {
-          itemName: '棰滆壊',
-          type: 'select',
+          itemName: "棰滆壊",
+          type: "select",
           required: true,
           options: [
-            { value: '娣¢粍鑹�', label: '娣¢粍鑹�' },
-            { value: '榛勮壊', label: '榛勮壊' },
-            { value: '娣遍粍鑹�', label: '娣遍粍鑹�' },
-            { value: '绾㈣壊', label: '绾㈣壊' },
-            { value: '鐧借壊', label: '鐧借壊' },
-            { value: '鍏朵粬', label: '鍏朵粬' }
+            { value: "娣¢粍鑹�", label: "娣¢粍鑹�" },
+            { value: "榛勮壊", label: "榛勮壊" },
+            { value: "娣遍粍鑹�", label: "娣遍粍鑹�" },
+            { value: "绾㈣壊", label: "绾㈣壊" },
+            { value: "鐧借壊", label: "鐧借壊" },
+            { value: "鍏朵粬", label: "鍏朵粬" }
           ]
         },
         {
-          itemName: '澶栬',
-          type: 'select',
+          itemName: "澶栬",
+          type: "select",
           required: false,
           options: [
-            { value: '娓呬寒', label: '娓呬寒' },
-            { value: '寰祳', label: '寰祳' },
-            { value: '娴戞祳', label: '娴戞祳' },
-            { value: '娌夋穩', label: '娌夋穩' },
-            { value: '鍏朵粬', label: '鍏朵粬' }
+            { value: "娓呬寒", label: "娓呬寒" },
+            { value: "寰祳", label: "寰祳" },
+            { value: "娴戞祳", label: "娴戞祳" },
+            { value: "娌夋穩", label: "娌夋穩" },
+            { value: "鍏朵粬", label: "鍏朵粬" }
           ]
         },
         {
-          itemName: '灏胯泲鐧�',
-          type: 'select',
+          itemName: "灏胯泲鐧�",
+          type: "select",
           required: true,
           options: [
-            { value: '-', label: '闃存��(-)' },
-            { value: '卤', label: '寰噺(卤)' },
-            { value: '+', label: '闃虫��(+)' },
-            { value: '++', label: '闃虫��(++)' },
-            { value: '+++', label: '闃虫��(+++)' }
+            { value: "-", label: "闃存��(-)" },
+            { value: "卤", label: "寰噺(卤)" },
+            { value: "+", label: "闃虫��(+)" },
+            { value: "++", label: "闃虫��(++)" },
+            { value: "+++", label: "闃虫��(+++)" }
           ],
-          reference: '姝e父涓洪槾鎬�(-)'
+          reference: "姝e父涓洪槾鎬�(-)"
         },
         {
-          itemName: 'pH鍊�',
-          type: 'number',
+          itemName: "pH鍊�",
+          type: "number",
           required: true,
-          placeholder: '4.5-8.0',
-          unit: '',
-          reference: '4.5-8.0',
+          placeholder: "4.5-8.0",
+          unit: "",
+          reference: "4.5-8.0",
           min: 4.5,
           max: 8.0
         },
         {
-          itemName: '鐧界粏鑳�',
-          type: 'select',
+          itemName: "鐧界粏鑳�",
+          type: "select",
           required: true,
           options: [
-            { value: '-', label: '闃存��(-)' },
-            { value: '+', label: '闃虫��(+)' },
-            { value: '++', label: '闃虫��(++)' },
-            { value: '+++', label: '闃虫��(+++)' }
+            { value: "-", label: "闃存��(-)" },
+            { value: "+", label: "闃虫��(+)" },
+            { value: "++", label: "闃虫��(++)" },
+            { value: "+++", label: "闃虫��(+++)" }
           ],
-          reference: '姝e父涓洪槾鎬�(-)'
+          reference: "姝e父涓洪槾鎬�(-)"
         },
         {
-          itemName: '绾㈢粏鑳�',
-          type: 'number',
+          itemName: "绾㈢粏鑳�",
+          type: "number",
           required: true,
-          unit: '/渭L',
-          reference: '0-9.2',
+          unit: "/渭L",
+          reference: "0-9.2",
           min: 0,
           max: 9.2
         },
         {
-          itemName: '缁嗚弻',
-          type: 'number',
+          itemName: "缁嗚弻",
+          type: "number",
           required: true,
-          unit: '/渭L',
-          reference: '0-385',
+          unit: "/渭L",
+          reference: "0-385",
           min: 0,
           max: 385
         }
       ];
+    },
 
-      this.tableData = medicalItems.map(item => ({
-        ...item,
-        values: new Array(this.dynamicColumns.length).fill('')
-      }));
+    // 淇濆瓨鏁版嵁鍒扮埗缁勪欢
+    saveData() {
+      const dataToEmit = {
+        type: "urine_routine",
+        data: this.tableData,
+        columns: this.dynamicColumns,
+        attachments: this.attachments
+      };
+      this.$emit("data-change", dataToEmit);
     },
 
     getSelectLabel(row, columnIndex) {
-      if (!row.options || !row.values[columnIndex]) return row.values[columnIndex];
-      const option = row.options.find(opt => opt.value === row.values[columnIndex]);
+      if (!row.options || !row.values[columnIndex])
+        return row.values[columnIndex];
+      const option = row.options.find(
+        opt => opt.value === row.values[columnIndex]
+      );
       return option ? option.label : row.values[columnIndex];
     },
 
     addColumn() {
       this.editingColumnIndex = null;
       this.columnForm = {
-        date: new Date().toISOString().split('T')[0],
-        time: '08:00',
-        remark: ''
+        date: new Date().toISOString().split("T")[0],
+        time: "08:00",
+        remark: ""
       };
       this.columnDialogVisible = true;
       this.$nextTick(() => {
@@ -432,15 +486,15 @@
       this.columnForm = {
         date: column.date,
         time: column.time,
-        remark: column.remark || ''
+        remark: column.remark || ""
       };
       this.columnDialogVisible = true;
     },
 
     confirmAddColumn() {
-      this.$refs.columnFormU.validate((valid) => {
+      this.$refs.columnFormU.validate(valid => {
         if (!valid) {
-          this.$message.warning('璇峰畬鍠勬椂闂寸偣淇℃伅');
+          this.$message.warning("璇峰畬鍠勬椂闂寸偣淇℃伅");
           return;
         }
 
@@ -453,10 +507,9 @@
           column.date = this.columnForm.date;
           column.time = this.columnForm.time;
           column.remark = this.columnForm.remark;
-          this.$message.success('鏃堕棿鐐逛慨鏀规垚鍔�');
+          this.$message.success("鏃堕棿鐐逛慨鏀规垚鍔�");
         } else {
           // 鏂板鍒�
-          const newIndex = this.dynamicColumns.length + 1;
           const newColumn = {
             label: `${this.columnForm.date}\n${this.columnForm.time}`,
             key: `time${Date.now()}`,
@@ -464,12 +517,14 @@
             time: this.columnForm.time,
             remark: this.columnForm.remark
           };
+          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.$message.success('鏃堕棿鐐规坊鍔犳垚鍔�');
+          this.$message.success("鏃堕棿鐐规坊鍔犳垚鍔�");
         }
 
         this.columnDialogVisible = false;
@@ -480,10 +535,10 @@
 
     handleDeleteColumn() {
       if (this.editingColumnIndex !== null) {
-        this.$confirm('纭畾瑕佸垹闄よ繖涓椂闂寸偣鍚楋紵', '鎻愮ず', {
-          confirmButtonText: '纭畾',
-          cancelButtonText: '鍙栨秷',
-          type: 'warning'
+        this.$confirm("纭畾瑕佸垹闄よ繖涓椂闂寸偣鍚楋紵", "鎻愮ず", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
         }).then(() => {
           this.dynamicColumns.splice(this.editingColumnIndex, 1);
           this.tableData.forEach(row => {
@@ -491,7 +546,7 @@
           });
           this.columnDialogVisible = false;
           this.tableKey += 1;
-          this.$message.success('鏃堕棿鐐瑰垹闄ゆ垚鍔�');
+          this.$message.success("鏃堕棿鐐瑰垹闄ゆ垚鍔�");
         });
       }
     },
@@ -499,9 +554,9 @@
     handleDialogClosed() {
       this.editingColumnIndex = null;
       this.columnForm = {
-        date: '',
-        time: '',
-        remark: ''
+        date: "",
+        time: "",
+        remark: ""
       };
       this.$refs.columnFormU && this.$refs.columnFormU.clearValidate();
     },
@@ -511,26 +566,22 @@
     },
 
     handleValueChange(row, columnIndex) {
-      this.$emit('data-change', {
-        type: 'urine_routine',
-        data: this.tableData,
-        columns: this.dynamicColumns
-      });
+      this.saveData();
     },
 
     handleAttachmentChange(fileList) {
       this.attachments = fileList;
-      this.$emit('attachment-change', {
-        type: 'urine_routine',
+      this.$emit("attachment-change", {
+        type: "urine_routine",
         attachments: fileList
       });
     },
 
     forceTableLayout() {
       this.$nextTick(() => {
-        const table = this.$el.querySelector('.el-table');
+        const table = this.$el.querySelector(".el-table");
         if (table) {
-          window.dispatchEvent(new Event('resize'));
+          window.dispatchEvent(new Event("resize"));
         }
       });
     },
@@ -554,7 +605,13 @@
     }
   },
   mounted() {
-    this.initTableData();
+    // 纭繚缁勪欢姝g‘鎸傝浇鍚庡垵濮嬪寲鏁版嵁
+    this.$nextTick(() => {
+      if (Object.keys(this.internalData).length === 0) {
+        this.initTableData();
+      }
+      this.forceTableLayout();
+    });
   }
 };
 </script>
@@ -739,13 +796,5 @@
     flex-direction: column;
     gap: 4px;
   }
-}
-
-/* 鍔ㄧ敾鏁堟灉 */
-.fade-enter-active, .fade-leave-active {
-  transition: opacity 0.3s;
-}
-.fade-enter, .fade-leave-to {
-  opacity: 0;
 }
 </style>
diff --git a/src/views/business/maintain/index.vue b/src/views/business/maintain/index.vue
index 17d3be6..29c2bbb 100644
--- a/src/views/business/maintain/index.vue
+++ b/src/views/business/maintain/index.vue
@@ -8,37 +8,37 @@
         :inline="true"
         label-width="100px"
       >
-        <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
+        <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
           <el-input
-            v-model="queryParams.donorName"
+            v-model="queryParams.name"
             placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
             clearable
             style="width: 200px"
             @keyup.enter.native="handleQuery"
           />
         </el-form-item>
-        <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="hospitalName">
+        <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="treatmenthospitalname">
           <el-input
-            v-model="queryParams.hospitalName"
+            v-model="queryParams.treatmenthospitalname"
             placeholder="璇疯緭鍏ュ尰鐤楁満鏋�"
             clearable
             style="width: 200px"
             @keyup.enter.native="handleQuery"
           />
         </el-form-item>
-        <el-form-item label="鍖荤枟缁勪汉鍛�" prop="medicalStaff">
+        <el-form-item label="鍗忚皟鍛�" prop="coordinatorName">
           <el-input
-            v-model="queryParams.medicalStaff"
-            placeholder="璇疯緭鍏ュ尰鐤楃粍浜哄憳"
+            v-model="queryParams.coordinatorName"
+            placeholder="璇疯緭鍏ュ崗璋冨憳濮撳悕"
             clearable
             style="width: 200px"
             @keyup.enter.native="handleQuery"
           />
         </el-form-item>
-        <el-form-item label="鎮h�呯姸鎬�" prop="patientStatus">
+        <el-form-item label="鎮h�呯姸鎬�" prop="recordstate">
           <el-select
-            v-model="queryParams.patientStatus"
-            placeholder="璇烽�夋嫨鎮h�呯姸鎬�"
+            v-model="queryParams.recordstate"
+            placeholder="璇烽�夋嫨璁板綍鐘舵��"
             clearable
             style="width: 200px"
           >
@@ -48,6 +48,23 @@
             <el-option label="宸插畬鎴愭崘鐚�" value="4" />
             <el-option label="鏈畬鎴愭崘鐚�" value="5" />
           </el-select>
+        </el-form-item>
+        <el-form-item label="骞撮緞鑼冨洿" prop="ageRange">
+          <el-input
+            v-model="queryParams.startAge"
+            placeholder="鏈�灏忓勾榫�"
+            clearable
+            style="width: 95px"
+            @keyup.enter.native="handleQuery"
+          />
+          <span style="margin: 0 5px">-</span>
+          <el-input
+            v-model="queryParams.endAge"
+            placeholder="鏈�澶у勾榫�"
+            clearable
+            style="width: 95px"
+            @keyup.enter.native="handleQuery"
+          />
         </el-form-item>
         <el-form-item label="妗f褰曞叆鏃堕棿" prop="recordTimeRange">
           <el-date-picker
@@ -73,23 +90,6 @@
     <el-card class="tool-card">
       <el-row :gutter="10">
         <el-col :span="16">
-          <!-- <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
-            >鏂板缁存姢</el-button
-          > -->
-          <el-button
-            type="success"
-            icon="el-icon-edit"
-            :disabled="single"
-            @click="handleUpdate"
-            >淇敼</el-button
-          >
-          <el-button
-            type="danger"
-            icon="el-icon-delete"
-            :disabled="multiple"
-            @click="handleDelete"
-            >鍒犻櫎</el-button
-          >
           <el-button
             type="warning"
             icon="el-icon-download"
@@ -121,113 +121,101 @@
           width="120"
         />
         <el-table-column
-          label="娼滃湪鎹愮尞鑰呭鍚�"
+          label="鎹愮尞鑰呯紪鍙�"
           align="center"
-          prop="donorName"
+          prop="donorno"
           width="120"
         />
-        <el-table-column label="鎬у埆" align="center" prop="gender" width="80">
+        <el-table-column
+          label="娼滃湪鎹愮尞鑰呭鍚�"
+          align="center"
+          prop="name"
+          width="120"
+        />
+        <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
           <template slot-scope="scope">
             <dict-tag
               :options="dict.type.sys_user_sex"
-              :value="parseInt(scope.row.gender)"
+              :value="scope.row.sex"
             />
           </template>
         </el-table-column>
         <el-table-column label="骞撮緞" align="center" prop="age" width="80" />
         <el-table-column
+          label="琛�鍨�"
+          align="center"
+          prop="bloodtype"
+          width="80"
+        >
+          <template slot-scope="scope">
+            <dict-tag
+              :options="dict.type.sys_BloodType"
+              :value="scope.row.bloodtype"
+            /> </template
+        ></el-table-column>
+        <el-table-column
           label="鐤剧梾璇婃柇"
           align="center"
-          prop="diagnosis"
+          prop="diagnosisname"
           min-width="180"
           show-overflow-tooltip
         />
         <el-table-column
-          label="鎵�鍦ㄥ尰鐤楁満鏋�"
+          label="棣栬瘖鍖荤枟鏈烘瀯"
           align="center"
-          prop="hospitalName"
+          prop="treatmenthospitalname"
           width="150"
           show-overflow-tooltip
         />
         <el-table-column
-          label="鎮h�呯姸鎬�"
+          label="浣忛櫌鍙�"
           align="center"
-          prop="patientStatus"
+          prop="inpatientno"
           width="120"
-        >
-          <template slot-scope="scope">
-            <el-tag :type="statusFilter(scope.row.patientStatus)">
-              {{ statusTextFilter(scope.row.patientStatus) }}
-            </el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="鍏ラ櫌鏃堕棿"
-          align="center"
-          prop="admissionTime"
-          width="120"
-        >
-          <template slot-scope="scope">
-            <span>{{
-              scope.row.admissionTime
-                ? parseTime(scope.row.admissionTime, "{y}-{m}-{d}")
-                : "-"
-            }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="鍑洪櫌鏃堕棿"
-          align="center"
-          prop="dischargeTime"
-          width="120"
-        >
-          <template slot-scope="scope">
-            <span>{{
-              scope.row.dischargeTime
-                ? parseTime(scope.row.dischargeTime, "{y}-{m}-{d}")
-                : "-"
-            }}</span>
-          </template>
-        </el-table-column>
+        />
         <!-- <el-table-column
-          label="鏈�鏂板煿鍏荤粨鏋�"
+          label="璁板綍鐘舵��"
           align="center"
-          prop="latestCultureResult"
+          prop="recordstate"
           width="120"
         >
           <template slot-scope="scope">
-            <el-tag
-              :type="scope.row.latestCultureResult === '闃存��' ? 'success' : 'danger'"
-              effect="plain"
-            >
-              {{ scope.row.latestCultureResult || '鏈娴�' }}
+            <el-tag :type="statusFilter(scope.row.recordstate)">
+              {{ statusTextFilter(scope.row.recordstate) }}
             </el-tag>
-          </template>
-        </el-table-column> -->
-        <!-- <el-table-column
-          label="鎶ょ悊鏍告煡琛ㄥ綍鍏ユ椂闂�"
-          align="center"
-          prop="lastRecordTime"
-          width="140"
-        >
-          <template slot-scope="scope">
-            <span>{{
-              scope.row.lastRecordTime
-                ? parseTime(scope.row.lastRecordTime, "{y}-{m}-{d} {h}:{i}")
-                : "-"
-            }}</span>
           </template>
         </el-table-column> -->
         <el-table-column
           label="鍗忚皟鍛�"
           align="center"
-          prop="coordinator"
+          prop="coordinatorName"
           width="100"
         />
         <el-table-column
+          label="缁存姢椤圭洰"
+          align="center"
+          prop="itemName"
+          width="120"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          label="缁存姢鏃堕棿"
+          align="center"
+          prop="itemTime"
+          width="140"
+        >
+          <template slot-scope="scope">
+            <span>{{
+              scope.row.itemTime
+                ? parseTime(scope.row.itemTime, "{y}-{m}-{d} {h}:{i}")
+                : "-"
+            }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
           label="鎿嶄綔"
           align="center"
-          width="180"
+          width="120"
           class-name="small-padding fixed-width"
         >
           <template slot-scope="scope">
@@ -238,20 +226,6 @@
               @click.stop="handleView(scope.row)"
               >璇︽儏</el-button
             >
-            <!-- <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click.stop="handleRecord(scope.row)"
-              >褰曞叆鏍告煡</el-button
-            >
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-document"
-              @click.stop="handleRecordList(scope.row)"
-              >璁板綍鏌ヨ</el-button
-            > -->
           </template>
         </el-table-column>
       </el-table>
@@ -269,13 +243,13 @@
 </template>
 
 <script>
-import { listMaintenance, delMaintenance, exportMaintenance } from "./mockMaintenanceApi";
+import { maintainList } from "@/api/businessApi";
 import Pagination from "@/components/Pagination";
 
 export default {
   name: "MaintenanceList",
   components: { Pagination },
-  dicts: ["sys_user_sex"],
+  dicts: ["sys_user_sex",'sys_BloodType'],
   data() {
     return {
       // 閬僵灞�
@@ -294,11 +268,19 @@
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        donorName: undefined,
-        hospitalName: undefined,
-        medicalStaff: undefined,
-        patientStatus: undefined,
-        recordTimeRange: []
+        name: undefined, // 鎹愮尞鑰呭鍚�
+        treatmenthospitalname: undefined, // 鍖荤枟鏈烘瀯鍚嶇О
+        coordinatorName: undefined, // 鍗忚皟鍛樺鍚�
+        recordstate: undefined, // 璁板綍鐘舵��
+        startAge: undefined, // 寮�濮嬪勾榫�
+        endAge: undefined, // 缁撴潫骞撮緞
+        caseNo: undefined, // 妗堜緥缂栧彿
+        donorno: undefined, // 鎹愮尞鑰呯紪鍙�
+        sex: undefined, // 鎬у埆
+        bloodtype: undefined, // 琛�鍨�
+        diagnosisname: undefined, // 鐤剧梾璇婃柇鍚嶇О
+        inpatientno: undefined, // 浣忛櫌鍙�
+        recordTimeRange: [] // 鏃堕棿鑼冨洿
       }
     };
   },
@@ -309,11 +291,11 @@
     // 鐘舵�佽繃婊ゅ櫒
     statusFilter(status) {
       const statusMap = {
-        "1": "primary",   // DCD
-        "2": "warning",   // DBD
-        "3": "info",       // DBCD
-        "4": "success",    // 宸插畬鎴愭崘鐚�
-        "5": "danger"      // 鏈畬鎴愭崘鐚�
+        "1": "primary", // DCD
+        "2": "warning", // DBD
+        "3": "info", // DBCD
+        "4": "success", // 宸插畬鎴愭崘鐚�
+        "5": "danger" // 鏈畬鎴愭崘鐚�
       };
       return statusMap[status] || "info";
     },
@@ -330,13 +312,45 @@
     // 鏌ヨ渚涜�呯淮鎶ゅ垪琛�
     getList() {
       this.loading = true;
-      listMaintenance(this.queryParams)
+
+      // 澶勭悊鏌ヨ鍙傛暟锛岃繃婊ゆ帀绌哄��
+      const params = this.cleanObject(this.queryParams);
+
+      // 澶勭悊鏃堕棿鑼冨洿鍙傛暟
+      if (params.recordTimeRange && params.recordTimeRange.length === 2) {
+        params.startTime = params.recordTimeRange[0] + " 00:00:00";
+        params.endTime = params.recordTimeRange[1] + " 23:59:59";
+        delete params.recordTimeRange;
+      }
+
+      // 鍒犻櫎鍒嗛〉鍙傛暟涓殑绌哄��
+      delete params.pageNum;
+      delete params.pageSize;
+
+      maintainList({
+        pageNum: this.queryParams.pageNum,
+        pageSize: this.queryParams.pageSize,
+        ...params
+      })
         .then(response => {
           if (response.code === 200) {
-            this.maintenanceList = response.data.rows;
-            this.total = response.data.total;
+            this.maintenanceList = response.data;
+            this.total = response.total || 0;
+
+            // 澶勭悊骞撮緞鏄剧ず
+            this.maintenanceList.forEach(item => {
+              if (item.startAge !== undefined && item.endAge !== undefined) {
+                item.age = `${item.startAge}-${item.endAge}`;
+              } else if (item.startAge !== undefined) {
+                item.age = `${item.startAge}+`;
+              } else if (item.endAge !== undefined) {
+                item.age = `0-${item.endAge}`;
+              } else {
+                item.age = "-";
+              }
+            });
           } else {
-            this.$message.error("鑾峰彇鏁版嵁澶辫触");
+            this.$message.error(response.msg || "鑾峰彇鏁版嵁澶辫触");
           }
           this.loading = false;
         })
@@ -346,6 +360,16 @@
           this.$message.error("鑾峰彇鏁版嵁澶辫触");
         });
     },
+    // 娓呯悊瀵硅薄涓殑绌哄��
+    cleanObject(obj) {
+      const cleaned = {};
+      Object.keys(obj).forEach(key => {
+        if (obj[key] !== undefined && obj[key] !== null && obj[key] !== "") {
+          cleaned[key] = obj[key];
+        }
+      });
+      return cleaned;
+    },
     // 鎼滅储鎸夐挳鎿嶄綔
     handleQuery() {
       this.queryParams.pageNum = 1;
@@ -353,8 +377,26 @@
     },
     // 閲嶇疆鎸夐挳鎿嶄綔
     resetQuery() {
-      this.$refs.queryForm.resetFields();
-      this.handleQuery();
+      this.queryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        name: undefined,
+        treatmenthospitalname: undefined,
+        coordinatorName: undefined,
+        recordstate: undefined,
+        startAge: undefined,
+        endAge: undefined,
+        caseNo: undefined,
+        donorno: undefined,
+        sex: undefined,
+        bloodtype: undefined,
+        diagnosisname: undefined,
+        inpatientno: undefined,
+        recordTimeRange: []
+      };
+      this.$nextTick(() => {
+        this.getList();
+      });
     },
     // 澶氶�夋閫変腑鏁版嵁
     handleSelectionChange(selection) {
@@ -366,64 +408,20 @@
     handleRowClick(row) {
       this.$router.push({
         path: "/case/maintainInfo",
-        query: { id: row.id }
+        query: { id: row.id, infoid: row.infoid }
       });
     },
     // 鏌ョ湅璇︽儏
     handleView(row) {
       this.$router.push({
         path: "/case/maintainInfo",
-        query: { id: row.id }
+        query: { id: row.id, infoid: row.infoid }
       });
-    },
-    // 褰曞叆鎶ょ悊鏍告煡
-    handleRecord(row) {
-      this.$router.push({
-        path: "/case/maintenance/record",
-        query: { id: row.id, maintenanceId: row.maintenanceId }
-      });
-    },
-    // 鏌ョ湅璁板綍鍒楄〃
-    handleRecordList(row) {
-      this.$router.push({
-        path: "/case/maintenance/records",
-        query: { id: row.id, maintenanceId: row.maintenanceId }
-      });
-    },
-    // 鏂板鎸夐挳鎿嶄綔
-    handleCreate() {
-      this.$router.push("/case/maintenance/add");
-    },
-    // 淇敼鎸夐挳鎿嶄綔
-    handleUpdate() {
-      const id = this.ids[0];
-      this.$router.push({
-        path: "/case/maintenance/edit",
-        query: { id: id }
-      });
-    },
-    // 鍒犻櫎鎸夐挳鎿嶄綔
-    handleDelete() {
-      const ids = this.ids;
-      this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          return delMaintenance(ids);
-        })
-        .then(response => {
-          if (response.code === 200) {
-            this.$message.success("鍒犻櫎鎴愬姛");
-            this.getList();
-          }
-        })
-        .catch(() => {});
     },
     // 瀵煎嚭鎸夐挳鎿嶄綔
     handleExport() {
-      const queryParams = this.queryParams;
+      const queryParams = this.cleanObject(this.queryParams);
+
       this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夌淮鎶ゆ暟鎹紵", "璀﹀憡", {
         confirmButtonText: "纭畾",
         cancelButtonText: "鍙栨秷",
@@ -431,13 +429,11 @@
       })
         .then(() => {
           this.loading = true;
-          return exportMaintenance(queryParams);
-        })
-        .then(response => {
-          if (response.code === 200) {
+          // 杩欓噷闇�瑕佽皟鐢ㄥ鍑烘帴鍙o紝鏆傛椂鐢ㄦā鎷熸垚鍔�
+          setTimeout(() => {
             this.$message.success("瀵煎嚭鎴愬姛");
-          }
-          this.loading = false;
+            this.loading = false;
+          }, 1000);
         })
         .catch(() => {
           this.loading = false;
@@ -449,17 +445,37 @@
       const date = new Date(time);
       if (pattern) {
         return pattern.replace(/{(\w+)}/g, (match, p) => {
-          switch(p) {
-            case 'y': return date.getFullYear();
-            case 'm': return (date.getMonth() + 1).toString().padStart(2, '0');
-            case 'd': return date.getDate().toString().padStart(2, '0');
-            case 'h': return date.getHours().toString().padStart(2, '0');
-            case 'i': return date.getMinutes().toString().padStart(2, '0');
-            default: return match;
+          switch (p) {
+            case "y":
+              return date.getFullYear();
+            case "m":
+              return (date.getMonth() + 1).toString().padStart(2, "0");
+            case "d":
+              return date
+                .getDate()
+                .toString()
+                .padStart(2, "0");
+            case "h":
+              return date
+                .getHours()
+                .toString()
+                .padStart(2, "0");
+            case "i":
+              return date
+                .getMinutes()
+                .toString()
+                .padStart(2, "0");
+            default:
+              return match;
           }
         });
       }
-      return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`;
+      return `${date.getFullYear()}-${(date.getMonth() + 1)
+        .toString()
+        .padStart(2, "0")}-${date
+        .getDate()
+        .toString()
+        .padStart(2, "0")}`;
     }
   }
 };
diff --git a/src/views/business/maintain/maintainInfo.vue b/src/views/business/maintain/maintainInfo.vue
index 06794a8..d6aa6ec 100644
--- a/src/views/business/maintain/maintainInfo.vue
+++ b/src/views/business/maintain/maintainInfo.vue
@@ -4,12 +4,7 @@
     <el-card class="detail-card">
       <div slot="header" class="clearfix">
         <span class="detail-title">渚涜�呭熀鏈俊鎭�</span>
-        <el-button
-          v-if="isEdit"
-          type="primary"
-          style="float: right; padding: 3px 0"
-          @click="handleSave"
-        >
+        <el-button type="success" style="float: right;" @click="handleSave">
           淇濆瓨淇℃伅
         </el-button>
       </div>
@@ -18,21 +13,17 @@
         <el-row :gutter="20">
           <el-col :span="8">
             <el-form-item label="浣忛櫌鍙�" prop="caseNo">
-              <el-input v-model="form.caseNo" :readonly="!isEdit" />
+              <el-input v-model="form.caseNo" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
-              <el-input v-model="form.donorName" :readonly="!isEdit" />
+            <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
+              <el-input v-model="form.name" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="鎬у埆" prop="gender">
-              <el-select
-                v-model="form.gender"
-                :disabled="!isEdit"
-                style="width: 100%"
-              >
+              <el-select v-model="form.sex" style="width: 100%">
                 <el-option label="鐢�" value="0" />
                 <el-option label="濂�" value="1" />
               </el-select>
@@ -43,46 +34,61 @@
         <el-row :gutter="20">
           <el-col :span="8">
             <el-form-item label="骞撮緞" prop="age">
-              <el-input v-model="form.age" :readonly="!isEdit" />
+              <el-input v-model="form.age" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鐤剧梾璇婃柇" prop="diagnosis">
-              <el-input v-model="form.diagnosis" :readonly="!isEdit" />
+            <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
+              <el-input v-model="form.diagnosisname" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="hospitalName">
-              <el-input v-model="form.hospitalName" :readonly="!isEdit" />
+            <el-form-item label="棣栬瘖鍖荤枟鏈烘瀯" prop="treatmenthospitalname">
+              <el-input v-model="form.treatmenthospitalname" />
             </el-form-item>
           </el-col>
         </el-row>
 
         <el-row :gutter="20">
           <el-col :span="8">
-            <el-form-item label="鎮h�呯姸鎬�" prop="patientStatus">
-              <el-select
-                v-model="form.patientStatus"
-                :disabled="!isEdit"
-                style="width: 100%"
-              >
-                <el-option label="DCD" value="1" />
+            <el-form-item label="鎮h�呯姸鎬�" prop="recordstate">
+              <el-select v-model="form.recordstate" style="width: 100%">
+                <!-- <el-option label="DCD" value="1" />
                 <el-option label="DBD" value="2" />
                 <el-option label="DBCD" value="3" />
                 <el-option label="宸插畬鎴愭崘鐚�" value="4" />
-                <el-option label="鏈畬鎴愭崘鐚�" value="5" />
+                <el-option label="鏈畬鎴愭崘鐚�" value="5" /> -->
+                <el-option
+                  v-for="dict in dict.type.sys_DonationCategory || []"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
               </el-select>
             </el-form-item>
+            <!-- <el-form-item
+              align="left"
+              label="鎮h�呮崘鐚姸鎬�"
+              prop="donationcategory"
+            >
+              <el-radio-group v-model="form.recordstate">
+                <el-radio
+                  v-for="dict in dict.type.sys_DonationCategory || []"
+                  :key="dict.value"
+                  :label="dict.value"
+                  >{{ dict.label }}</el-radio
+                >
+              </el-radio-group>
+            </el-form-item> -->
           </el-col>
           <el-col :span="8">
             <el-form-item
               label="鏈畬鎴愬師鍥�"
               prop="incompleteReason"
-              v-if="form.patientStatus === '5'"
+              v-if="form.recordstate === '5'"
             >
               <el-input
                 v-model="form.incompleteReason"
-                :readonly="!isEdit"
                 placeholder="璇疯緭鍏ユ湭瀹屾垚鎹愮尞鐨勫師鍥�"
               />
             </el-form-item>
@@ -91,59 +97,59 @@
 
         <el-row :gutter="20">
           <el-col :span="8">
-            <el-form-item label="鍏ラ櫌鏃堕棿" prop="admissionTime">
+            <el-form-item label="涓婃姤鏃堕棿" prop="reporttime">
               <el-date-picker
-                v-model="form.admissionTime"
+                v-model="form.reporttime"
                 type="datetime"
                 value-format="yyyy-MM-dd HH:mm:ss"
                 style="width: 100%"
-                :disabled="!isEdit"
               />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鍑洪櫌鏃堕棿" prop="dischargeTime">
+            <el-form-item label="姝讳骸鏃堕棿" prop="deathTime">
               <el-date-picker
-                v-model="form.dischargeTime"
+                v-model="form.deathTime"
                 type="datetime"
                 value-format="yyyy-MM-dd HH:mm:ss"
                 style="width: 100%"
-                :disabled="!isEdit"
               />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鍗忚皟鍛�" prop="coordinator">
-              <el-input v-model="form.coordinator" :readonly="!isEdit" />
+            <el-form-item label="鍗忚皟鍛�" prop="coordinatorName">
+              <el-input v-model="form.coordinatorName" />
             </el-form-item>
           </el-col>
         </el-row>
 
         <el-row :gutter="20">
           <el-col :span="8">
-            <el-form-item label="琛�鍨�" prop="bloodType">
-              <el-select
-                v-model="form.bloodType"
-                :disabled="!isEdit"
-                style="width: 100%"
-              >
-                <el-option label="A鍨�" value="A" />
+            <el-form-item label="琛�鍨�" prop="bloodtype">
+              <el-select v-model="form.bloodtype" style="width: 100%">
+                <!-- <el-option label="A鍨�" value="A" />
                 <el-option label="B鍨�" value="B" />
                 <el-option label="O鍨�" value="O" />
-                <el-option label="AB鍨�" value="AB" />
+                <el-option label="AB鍨�" value="AB" /> -->
+                <el-option
+                  v-for="dict in dict.type.sys_BloodType"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="RH鍥犲瓙" prop="rhFactor">
-              <el-select
-                v-model="form.rhFactor"
-                :disabled="!isEdit"
-                style="width: 100%"
-              >
-                <el-option label="闃虫��" value="positive" />
-                <el-option label="闃存��" value="negative" />
-              </el-select>
+            <el-form-item label="Rh(D)" prop="rhYin">
+              <el-radio-group v-model="form.rhYin">
+                <el-radio
+                  v-for="dict in dict.type.sys_bloodtype_rhd || []"
+                  :key="dict.value"
+                  :label="dict.value"
+                  >{{ dict.label }}</el-radio
+                >
+              </el-radio-group>
             </el-form-item>
           </el-col>
         </el-row>
@@ -153,12 +159,12 @@
             type="textarea"
             :rows="3"
             v-model="form.specialMedicalHistory"
-            :readonly="!isEdit"
             placeholder="璁板綍鐗规畩鐥呭彶淇℃伅"
           />
         </el-form-item>
       </el-form>
     </el-card>
+
     <el-card class="assessment-card">
       <div slot="header" class="clearfix">
         <span class="detail-title">渚涜�呰瘎浼板悇椤硅褰�</span>
@@ -193,14 +199,7 @@
                 label="鍩瑰吇绫诲瀷"
                 align="center"
                 prop="cultureType"
-              >
-                <!-- <template slot-scope="scope">
-            <dict-tag
-              :options="cultureTypeOptions"
-              :value="scope.row.cultureType"
-            />
-          </template> -->
-              </el-table-column>
+              />
               <el-table-column
                 label="閲囨牱鏃堕棿"
                 align="center"
@@ -216,7 +215,6 @@
                   </el-tag>
                 </template>
               </el-table-column>
-              <!-- 闄勪欢鍒� -->
               <el-table-column label="闄勪欢" align="center">
                 <template slot-scope="scope">
                   <el-button
@@ -257,14 +255,6 @@
                 </template>
               </el-table-column>
             </el-table>
-
-            <pagination
-              v-show="cultureTotal > 0"
-              :total="cultureTotal"
-              :page.sync="cultureQueryParams.pageNum"
-              :limit.sync="cultureQueryParams.pageSize"
-              @pagination="getCultureList"
-            />
           </el-card>
         </el-tab-pane>
 
@@ -272,6 +262,7 @@
         <el-tab-pane label="鑲濆姛鑳借偩鍔熻兘" name="liverKidney">
           <liver-kidney-panel
             ref="liverKidney"
+            :initial-data="assessmentData.liverKidney"
             :is-editing="isEdit && activeTab === 'liverKidney'"
             @data-change="handleLiverKidneyDataChange"
           />
@@ -281,6 +272,7 @@
         <el-tab-pane label="琛�甯歌" name="bloodRoutine">
           <blood-routine-panel
             ref="bloodRoutine"
+            :initial-data="assessmentData.bloodRoutine"
             :is-editing="isEdit && activeTab === 'bloodRoutine'"
             @data-change="handleBloodRoutineDataChange"
           />
@@ -290,15 +282,15 @@
         <el-tab-pane label="灏垮父瑙�" name="urineRoutine">
           <urine-routine-panel
             ref="urineRoutine"
+            :initial-data="assessmentData.urineRoutine"
             :is-editing="isEdit && activeTab === 'urineRoutine'"
             @data-change="handleUrineRoutineDataChange"
           />
         </el-tab-pane>
       </el-tabs>
     </el-card>
-    <!-- 鍩瑰吇缁撴灉璁板綍 -->
 
-    <!-- 绠�鍖栧悗鐨勬姢鐞嗘牳鏌ヨ褰� -->
+    <!-- 鎶ょ悊鏍告煡璁板綍 -->
     <el-card class="record-card">
       <div slot="header" class="clearfix">
         <span class="detail-title">鎶ょ悊鏍告煡璁板綍</span>
@@ -332,7 +324,6 @@
           min-width="200"
           show-overflow-tooltip
         />
-        <!-- 闄勪欢鍒� -->
         <el-table-column label="闄勪欢" align="center" width="120">
           <template slot-scope="scope">
             <el-button
@@ -352,32 +343,27 @@
           width="180"
           class-name="small-padding fixed-width"
         >
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleEditRecord(scope.row)"
-            >缂栬緫</el-button
-          >
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            style="color: #F56C6C;"
-            @click="handleDeleteRecord(scope.row)"
-            >鍒犻櫎</el-button
-          >
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-edit"
+              @click="handleEditRecord(scope.row)"
+              >缂栬緫</el-button
+            >
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-delete"
+              style="color: #F56C6C;"
+              @click="handleDeleteRecord(scope.row)"
+              >鍒犻櫎</el-button
+            >
+          </template>
         </el-table-column>
       </el-table>
-
-      <pagination
-        v-show="recordTotal > 0"
-        :total="recordTotal"
-        :page.sync="recordQueryParams.pageNum"
-        :limit.sync="recordQueryParams.pageSize"
-        @pagination="getRecordList"
-      />
     </el-card>
+
     <!-- 鍩瑰吇璁板綍缂栬緫瀵硅瘽妗� -->
     <el-dialog
       :title="cultureDialogTitle"
@@ -436,7 +422,6 @@
           </el-col>
         </el-row>
 
-        <!-- 闄勪欢涓婁紶 -->
         <el-form-item label="闄勪欢">
           <upload-attachment
             :file-list="cultureForm.attachments"
@@ -500,7 +485,6 @@
           />
         </el-form-item>
 
-        <!-- 闄勪欢涓婁紶 -->
         <el-form-item label="闄勪欢">
           <upload-attachment
             :file-list="recordForm.attachments"
@@ -531,19 +515,7 @@
 </template>
 
 <script>
-import { getMaintenanceDetail, updateMaintenance } from "./mockMaintenanceApi";
-import {
-  listCultureResults,
-  addCultureResult,
-  updateCultureResult,
-  deleteCultureResult
-} from "./mockMaintenanceApi";
-import {
-  listNursingRecords,
-  addNursingRecord,
-  updateNursingRecord,
-  deleteNursingRecord
-} from "./mockMaintenanceApi";
+import { maintainList, maintainedit, maintainAdd } from "@/api/businessApi";
 import Pagination from "@/components/Pagination";
 import UploadAttachment from "@/components/UploadAttachment";
 import AttachmentPreview from "@/components/AttachmentPreview";
@@ -561,120 +533,44 @@
     BloodRoutinePanel,
     UrineRoutinePanel
   },
+  dicts: [
+    "sys_donornode",
+    "sys_BloodType",
+    "sys_EthicalReview",
+    "sys_BaseAssessConclusion",
+    "sys_bloodtype_rhd",
+    "sys_DonationCategory"
+  ],
+
   data() {
     return {
-      isEdit: true,
+      isEdit: false,
+      currentMaintenanceId: null,
+      isEditMode: false,
       form: {
         id: undefined,
         caseNo: "",
-        donorName: "",
+        name: "",
         gender: "",
         age: "",
-        diagnosis: "",
-        hospitalName: "",
-        patientStatus: "1",
-        admissionTime: "",
-        dischargeTime: "",
-        coordinator: "",
-        bloodType: "",
+        diagnosisname: "",
+        treatmenthospitalname: "",
+        recordstate: "1",
+        reporttime: "",
+        deathTime: "",
+        coordinatorName: "",
+        bloodtype: "",
         rhFactor: "",
         specialMedicalHistory: "",
         incompleteReason: ""
       },
       activeTab: "culture",
+      liverKidneyData: {}, // 浠� maintainList 鎺ュ彛鑾峰彇鐨勬暟鎹�
+      bloodRoutineData: {}, // 浠� maintainList 鎺ュ彛鑾峰彇鐨勬暟鎹�
+      liverKidneyData: {}, // 浠� maintainList 鎺ュ彛鑾峰彇鐨勬暟鎹�
       // 鍩瑰吇缁撴灉鐩稿叧鏁版嵁
-      // 鍩瑰吇缁撴灉鐩稿叧鏁版嵁
-      cultureList: [
-        {
-          id: 1,
-          cultureType: "琛�鍩瑰吇",
-          sampleTime: "2024-12-19 10:30:00",
-          result: "闃存��",
-          bacteria: "",
-          drugSensitivity: "",
-          testingInstitution: "闈掑矝澶у闄勫睘鍖婚櫌",
-          specimenType: "琛�娑�",
-          remarks: "甯歌妫�娴�",
-          attachments: [
-            {
-              id: 1,
-              fileName: "琛�鍩瑰吇鎶ュ憡.pdf",
-              fileUrl:
-                "http://localhost:8080/profile/upload/2025/12/27/1.COPO渚涗綋璇勪及琛�.pdf",
-              fileSize: 1024000,
-              uploadTime: "2024-12-19 11:00:00"
-            }
-          ]
-        },
-        {
-          id: 3,
-          cultureType: "琛�鍩瑰吇",
-          sampleTime: "2024-12-20 09:15:00",
-          result: "闃存��",
-          bacteria: "",
-          drugSensitivity: "",
-          testingInstitution: "骞垮窞妫�娴嬩腑蹇�",
-          specimenType: "灏挎恫",
-          remarks: "娓呮磥涓灏挎爣鏈�",
-          attachments: []
-        },
-        {
-          id: 2,
-          cultureType: "鐥板煿鍏荤粨鏋�",
-          sampleTime: "2024-12-19 14:20:00",
-          result: "闃虫��",
-          bacteria: "閲戦粍鑹茶憽钀勭悆鑿�",
-          drugSensitivity: "瀵归潚闇夌礌鏁忔劅锛屽澶村绫讳腑浠�",
-          testingInstitution: "涓婃捣鍖诲妫�楠屾墍",
-          specimenType: "鐥版恫",
-          remarks: "鑽晱璇曢獙瀹屾垚",
-          attachments: [
-            {
-              id: 2,
-              fileName: "鐥板煿鍏荤粨鏋�.jpg",
-              fileUrl:
-                "https://img95.699pic.com/photo/40142/8262.jpg_wh860.jpg",
-              fileSize: 512000,
-              uploadTime: "2024-12-19 15:30:00"
-            },
-            {
-              id: 3,
-              fileName: "鑽晱鎶ュ憡.pdf",
-              fileUrl:
-                "http://localhost:8080/profile/upload/2025/12/27/(鍚撮緳8.7)姣忔棩宸ヤ綔鎬荤粨.pdf",
-              fileSize: 768000,
-              uploadTime: "2024-12-19 16:00:00"
-            }
-          ]
-        },
-
-        {
-          id: 4,
-          cultureType: "鐪熻弻鍩瑰吇",
-          sampleTime: "2024-12-20 11:45:00",
-          result: "闃虫��",
-          bacteria: "澶ц偁鏉嗚弻",
-          drugSensitivity: "瀵瑰乏姘ф盁娌欐槦鏁忔劅",
-          testingInstitution: "娣卞湷浜烘皯鍖婚櫌",
-          specimenType: "浼ゅ彛鍒嗘硨鐗�",
-          remarks: "鏈悗浼ゅ彛鎰熸煋鐩戞祴",
-          attachments: [
-            {
-              id: 4,
-              fileName: "鐪熻弻鍩瑰吇.pdf",
-              fileUrl: "/reports/culture4.pdf",
-              fileSize: 890000,
-              uploadTime: "2024-12-20 13:20:00"
-            }
-          ]
-        }
-      ],
+      cultureList: [],
       cultureLoading: false,
-      cultureTotal: 5,
-      cultureQueryParams: {
-        pageNum: 1,
-        pageSize: 10
-      },
       cultureDialogVisible: false,
       cultureDialogTitle: "",
       cultureSaveLoading: false,
@@ -683,7 +579,7 @@
         cultureType: "",
         sampleTime: "",
         result: "闃存��",
-        attachments: [] // 鏂板闄勪欢瀛楁
+        attachments: []
       },
       cultureRules: {
         cultureType: [
@@ -706,120 +602,8 @@
       ],
 
       // 鎶ょ悊鏍告煡璁板綍鐩稿叧鏁版嵁
-      recordList: [
-        {
-          id: 1,
-          recordTime: "2024-12-19 08:30:00",
-          recorder: "寮犳姢澹�",
-          temperature: 36.8,
-          heartRate: 78,
-          bloodPressure: "120/80",
-          respirationRate: 18,
-          oxygenSaturation: 98,
-          urineOutput: 60,
-          cvp: 8,
-          checkRecord: "鎮h�呯敓鍛戒綋寰佸钩绋筹紝鎰忚瘑娓呮锛岄厤鍚堟不鐤�",
-          remarks: "澶滈棿鐫$湢鑹ソ",
-          attachments: [
-            {
-              id: 1,
-              fileName: "鏃╃彮鎶ょ悊璁板綍.jpg",
-              fileUrl: "/records/nursing1.jpg",
-              fileSize: 1024000,
-              uploadTime: "2024-12-19 09:00:00"
-            }
-          ]
-        },
-        {
-          id: 2,
-          recordTime: "2024-12-19 14:30:00",
-          recorder: "鏉庢姢澹�",
-          temperature: 37.2,
-          heartRate: 82,
-          bloodPressure: "118/76",
-          respirationRate: 16,
-          oxygenSaturation: 97,
-          urineOutput: 45,
-          cvp: 7.5,
-          checkRecord: "鎮h�呭崍鍚庝綋娓╃暐鏈夊崌楂橈紝瑙傚療涓�",
-          remarks: "寤鸿澧炲姞姘村垎鎽勫叆",
-          attachments: []
-        },
-        {
-          id: 3,
-          recordTime: "2024-12-19 20:30:00",
-          recorder: "鐜嬫姢澹�",
-          temperature: 36.9,
-          heartRate: 75,
-          bloodPressure: "122/78",
-          respirationRate: 17,
-          oxygenSaturation: 98,
-          urineOutput: 55,
-          cvp: 8.2,
-          checkRecord: "鏅氶棿鐢熷懡浣撳緛绋冲畾锛屾偅鑰呬紤鎭壇濂�",
-          remarks: "澶滈棿鐩戞祴鏃犲紓甯�",
-          attachments: [
-            {
-              id: 2,
-              fileName: "鏅氱彮鎶ょ悊璁板綍.pdf",
-              fileUrl: "/records/nursing3.pdf",
-              fileSize: 890000,
-              uploadTime: "2024-12-19 21:00:00"
-            },
-            {
-              id: 3,
-              fileName: "浣撳緛鐩戞祴琛�.xlsx",
-              fileUrl: "/records/monitoring3.xlsx",
-              fileSize: 256000,
-              uploadTime: "2024-12-19 21:15:00"
-            }
-          ]
-        },
-        {
-          id: 4,
-          recordTime: "2024-12-20 08:30:00",
-          recorder: "璧垫姢澹�",
-          temperature: 36.7,
-          heartRate: 80,
-          bloodPressure: "119/77",
-          respirationRate: 18,
-          oxygenSaturation: 99,
-          urineOutput: 65,
-          cvp: 7.8,
-          checkRecord: "鏅ㄩ棿鐢熷懡浣撳緛姝e父锛屾偅鑰呯簿绁炵姸鎬佽壇濂�",
-          remarks: "鍑嗗浠婃棩妫�鏌�",
-          attachments: []
-        },
-        {
-          id: 5,
-          recordTime: "2024-12-20 12:30:00",
-          recorder: "鍒樻姢澹�",
-          temperature: 37.1,
-          heartRate: 85,
-          bloodPressure: "121/79",
-          respirationRate: 19,
-          oxygenSaturation: 96,
-          urineOutput: 40,
-          cvp: 8.5,
-          checkRecord: "鍗堥棿浣撴俯鐣ユ湁娉㈠姩锛岀户缁瀵�",
-          remarks: "宸查�氱煡鍖荤敓",
-          attachments: [
-            {
-              id: 4,
-              fileName: "鍗堥棿鎶ょ悊璁板綍.jpg",
-              fileUrl: "/records/nursing5.jpg",
-              fileSize: 765000,
-              uploadTime: "2024-12-20 13:00:00"
-            }
-          ]
-        }
-      ],
+      recordList: [],
       recordLoading: false,
-      recordTotal: 4,
-      recordQueryParams: {
-        pageNum: 1,
-        pageSize: 10
-      },
       recordDialogVisible: false,
       recordDialogTitle: "",
       recordSaveLoading: false,
@@ -827,8 +611,8 @@
         id: undefined,
         recordTime: "",
         recorder: "",
-        checkRecord: "", // 鏀逛负鍗曞瓧娈佃褰�
-        attachments: [] // 鏂板闄勪欢瀛楁
+        checkRecord: "",
+        attachments: []
       },
       recordRules: {
         recordTime: [
@@ -845,87 +629,152 @@
       // 闄勪欢棰勮鐩稿叧
       attachmentPreviewVisible: false,
       currentAttachmentList: [],
-      attachmentPreviewTitle: ""
+      attachmentPreviewTitle: "",
+
+      // 璇勪及鏁版嵁瀛樺偍
+      assessmentData: {
+        liverKidney: {},
+        bloodRoutine: {},
+        urineRoutine: {},
+        cultureResults: [],
+        nursingRecords: []
+      }
     };
   },
   created() {
-    const id = this.$route.query.id;
-    // this.isEdit = this.$route.query.edit === "true";
-    if (id) {
-      this.getDetail(id);
-      this.getCultureList();
-      this.getRecordList();
+    this.loadMaintenanceData();
+  },
+  watch: {
+    $route(to, from) {
+      this.loadMaintenanceData();
     }
   },
   methods: {
-    // 鑾峰彇璇︽儏
-    getDetail(id) {
-      getMaintenanceDetail(id).then(response => {
+    // 鍔犺浇缁存姢鏁版嵁[1,3](@ref)
+    async loadMaintenanceData() {
+      try {
+        this.cultureLoading = true;
+        this.recordLoading = true;
+
+        const { id, infoid } = this.$route.query;
+        const queryParams = {};
+
+        if (id) {
+          queryParams.id = id;
+          this.currentMaintenanceId = id;
+          this.isEditMode = true;
+        } else if (infoid) {
+          queryParams.infoid = infoid;
+          this.currentMaintenanceId = null;
+          this.isEditMode = false;
+        } else {
+          this.$message.error("缂哄皯蹇呰鐨勮矾鐢卞弬鏁�");
+          return;
+        }
+
+        const response = await maintainList(queryParams);
         if (response.code === 200) {
-          this.form = response.data;
-        }
-      });
-    },
-    // 鍩瑰吇璁板綍闄勪欢鍙樻洿
-    handleCultureAttachmentChange(fileList) {
-      this.cultureForm.attachments = fileList;
-    },
+          let maintenanceData = response.data[0];
 
-    // 鎶ょ悊璁板綍闄勪欢鍙樻洿
-    handleRecordAttachmentChange(fileList) {
-      this.recordForm.attachments = fileList;
-    },
-
-    // 鏌ョ湅鍩瑰吇璁板綍闄勪欢
-    handleViewCultureAttachments(row) {
-      console.log(22, row.attachments);
-
-      this.currentAttachmentList = row.attachments || [];
-      this.attachmentPreviewTitle = `鍩瑰吇璁板綍闄勪欢 - ${row.cultureType}`;
-      this.attachmentPreviewVisible = true;
-    },
-    handleTabClick(tab) {
-      this.$nextTick(() => {
-        console.log(tab.name, 88);
-        const tableRef=null;
-        if (tab.name == "liverKidney") {
-           tableRef = this.$refs.liverKidney; // 璇锋浛鎹负鎮ㄧ殑琛ㄦ牸 ref
-        } else if (tab.name == "bloodRoutine") {
-           tableRef = this.$refs.bloodRoutine; // 璇锋浛鎹负鎮ㄧ殑琛ㄦ牸 ref
-        } else if (tab.name == "bloodRoutine") {
-           tableRef = this.$refs.bloodRoutine; // 璇锋浛鎹负鎮ㄧ殑琛ㄦ牸 ref
-        }
-        // 濡傛灉鏄� el-table锛屽皾璇曡皟鐢ㄥ叾 doLayout 鏂规硶
-        if (tableRef && tableRef.doLayout) {
-          tableRef.doLayout();
-        }
-
-        // 鎴栬�咃紝鏇撮�氱敤鐨勫己鍒堕噸鏂版覆鏌撴柟寮�
-        this.$forceUpdate(); // 鎱庣敤锛屽彲鑳藉紩鍙戝叾浠栭棶棰榌1](@ref)
-      });
-    },
-    // 鏌ョ湅鎶ょ悊璁板綍闄勪欢
-    handleViewRecordAttachments(row) {
-      this.currentAttachmentList = row.attachments || [];
-      this.attachmentPreviewTitle = `鎶ょ悊鏍告煡璁板綍闄勪欢 - ${row.recorder}`;
-      this.attachmentPreviewVisible = true;
-    },
-    // 鍩瑰吇璁板綍鐩稿叧鏂规硶
-    getCultureList() {
-      this.cultureLoading = true;
-      listCultureResults(this.form.id, this.cultureQueryParams)
-        .then(response => {
-          if (response.code === 200) {
-            // this.cultureList = response.data.rows;
-            // this.cultureTotal = response.data.total;
+          // 澶勭悊鏁扮粍鍝嶅簲
+          if (Array.isArray(maintenanceData)) {
+            maintenanceData = maintenanceData[0] || {};
           }
-          this.cultureLoading = false;
-        })
-        .catch(() => {
-          this.cultureLoading = false;
-        });
+
+          // 瑙f瀽itemDesc瀛楁涓殑JSON鏁版嵁[6,8](@ref)
+          if (maintenanceData.itemDesc) {
+            try {
+              const itemDescData = JSON.parse(maintenanceData.itemDesc);
+              this.assessmentData = { ...this.assessmentData, ...itemDescData };
+
+              // 濉厖鍚勪釜妯″潡鐨勬暟鎹�
+              if (itemDescData.cultureResults) {
+                this.cultureList = itemDescData.cultureResults;
+              }
+              if (itemDescData.nursingRecords) {
+                this.recordList = itemDescData.nursingRecords;
+              }
+              if (itemDescData.liverKidney) {
+                this.assessmentData.liverKidney = itemDescData.liverKidney;
+              }
+              if (itemDescData.bloodRoutine) {
+                this.assessmentData.bloodRoutine = itemDescData.bloodRoutine;
+              }
+              if (itemDescData.urineRoutine) {
+                this.assessmentData.urineRoutine = itemDescData.urineRoutine;
+              }
+            } catch (error) {
+              console.error("瑙f瀽itemDesc JSON澶辫触:", error);
+            }
+          }
+
+          // 濉厖鍩虹琛ㄥ崟鏁版嵁
+          this.form = { ...this.form, ...maintenanceData };
+          this.$message.success("鏁版嵁鍔犺浇鎴愬姛");
+        } else {
+          this.$message.error("鏁版嵁鍔犺浇澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+      } catch (error) {
+        console.error("鍔犺浇缁存姢鏁版嵁澶辫触:", error);
+        this.$message.error("鏁版嵁鍔犺浇澶辫触");
+      } finally {
+        this.cultureLoading = false;
+        this.recordLoading = false;
+      }
     },
 
+    // 淇濆瓨鎵�鏈夋暟鎹甗1,2](@ref)
+    async handleSave() {
+      try {
+        // 鏋勫缓淇濆瓨鏁版嵁
+        const saveData = {
+          ...this.form,
+          itemDesc: JSON.stringify({
+            liverKidney: this.assessmentData.liverKidney,
+            bloodRoutine: this.assessmentData.bloodRoutine,
+            urineRoutine: this.assessmentData.urineRoutine,
+            cultureResults: this.cultureList,
+            nursingRecords: this.recordList
+          })
+        };
+
+        let response;
+        if (this.isEditMode && this.currentMaintenanceId) {
+          // 缂栬緫妯″紡锛岃皟鐢╩aintainedit鎺ュ彛[1](@ref)
+          saveData.id = this.currentMaintenanceId;
+          response = await maintainedit(saveData);
+        } else {
+          // 鏂板妯″紡锛岃皟鐢╩aintainAdd鎺ュ彛[2](@ref)
+          response = await maintainAdd(saveData);
+        }
+
+        if (response.code === 200) {
+          this.$message.success("淇濆瓨鎴愬姛");
+          this.isEdit = false;
+
+          // 濡傛灉鏄柊澧炰繚瀛橈紝鏇存柊褰撳墠ID
+          if (!this.isEditMode && response.data && response.data.id) {
+            this.currentMaintenanceId = response.data.id;
+            this.isEditMode = true;
+          }
+        } else {
+          this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+      } catch (error) {
+        console.error("淇濆瓨鏁版嵁澶辫触:", error);
+        this.$message.error("淇濆瓨澶辫触");
+      }
+    },
+
+    // 鍒囨崲缂栬緫妯″紡
+    toggleEditMode() {
+      this.isEdit = !this.isEdit;
+      if (!this.isEdit) {
+        this.handleSave();
+      }
+    },
+
+    // 鍩瑰吇璁板綍鐩稿叧鏂规硶
     handleAddCulture() {
       this.cultureDialogTitle = "鏂板鍩瑰吇璁板綍";
       this.cultureForm = {
@@ -933,11 +782,7 @@
         cultureType: "",
         sampleTime: "",
         result: "闃存��",
-        bacteria: "",
-        drugSensitivity: "",
-        testingInstitution: "",
-        specimenType: "",
-        remarks: ""
+        attachments: []
       };
       this.cultureDialogVisible = true;
       this.$nextTick(() => {
@@ -954,70 +799,28 @@
       });
     },
 
-    handleViewCulture(row) {
-      this.$alert(
-        `
-        <div>
-          <p><strong>鍩瑰吇绫诲瀷锛�</strong>${this.getCultureTypeLabel(
-            row.cultureType
-          )}</p>
-          <p><strong>閲囨牱鏃堕棿锛�</strong>${row.sampleTime}</p>
-          <p><strong>鍩瑰吇缁撴灉锛�</strong>${row.result}</p>
-          <p><strong>妫�娴嬫満鏋勶細</strong>${row.testingInstitution}</p>
-        </div>
-      `,
-        "鍩瑰吇璁板綍璇︽儏",
-        {
-          dangerouslyUseHTMLString: true,
-          customClass: "detail-dialog"
-        }
-      );
-    },
-    toggleEditMode() {
-      this.isEdit = !this.isEdit;
-      // if (!this.isEdit) {
-      //   this.saveAllData();
-      // }
-    },
-    handleLiverKidneyDataChange(data) {
-      console.log("鑲濆姛鑳借偩鍔熻兘鏁版嵁鍙樻洿:", data);
-      // 澶勭悊鏁版嵁淇濆瓨鎴栦复鏃跺瓨鍌�
-    },
-    handleBloodRoutineDataChange(data) {
-      console.log("琛�甯歌鍔熻兘鏁版嵁鍙樻洿:", data);
-      // 澶勭悊鏁版嵁淇濆瓨鎴栦复鏃跺瓨鍌�
-    },
-    handleUrineRoutineDataChange(data) {
-      console.log("灏垮父瑙勫姛鑳芥暟鎹彉鏇�:", data);
-      // 澶勭悊鏁版嵁淇濆瓨鎴栦复鏃跺瓨鍌�
-    },
-    // 淇濆瓨鍩瑰吇璁板綍
     handleSaveCulture() {
       this.$refs.cultureForm.validate(valid => {
         if (valid) {
           this.cultureSaveLoading = true;
-          const api = this.cultureForm.id
-            ? updateCultureResult
-            : addCultureResult;
-          const requestData = {
-            ...this.cultureForm,
-            maintenanceId: this.form.id
-          };
 
-          api(requestData)
-            .then(response => {
-              if (response.code === 200) {
-                this.$message.success(
-                  this.cultureForm.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛"
-                );
-                this.cultureDialogVisible = false;
-                this.getCultureList();
-              }
-              this.cultureSaveLoading = false;
-            })
-            .catch(() => {
-              this.cultureSaveLoading = false;
-            });
+          if (this.cultureForm.id) {
+            // 缂栬緫鐜版湁璁板綍
+            const index = this.cultureList.findIndex(
+              item => item.id === this.cultureForm.id
+            );
+            if (index !== -1) {
+              this.cultureList.splice(index, 1, { ...this.cultureForm });
+            }
+          } else {
+            // 鏂板璁板綍
+            this.cultureForm.id = Date.now();
+            this.cultureList.push({ ...this.cultureForm });
+          }
+
+          this.$message.success(this.cultureForm.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
+          this.cultureDialogVisible = false;
+          this.cultureSaveLoading = false;
         }
       });
     },
@@ -1029,37 +832,15 @@
         type: "warning"
       })
         .then(() => {
-          deleteCultureResult(row.id).then(response => {
-            if (response.code === 200) {
-              this.$message.success("鍒犻櫎鎴愬姛");
-              this.getCultureList();
-            }
-          });
+          this.cultureList = this.cultureList.filter(
+            item => item.id !== row.id
+          );
+          this.$message.success("鍒犻櫎鎴愬姛");
         })
         .catch(() => {});
     },
 
-    getCultureTypeLabel(value) {
-      const type = this.cultureTypeOptions.find(item => item.value === value);
-      return type ? type.label : "鏈煡";
-    },
-
-    // 鎶ょ悊鏍告煡璁板綍鐩稿叧鏂规硶
-    getRecordList() {
-      this.recordLoading = true;
-      listNursingRecords(this.form.id, this.recordQueryParams)
-        .then(response => {
-          if (response.code === 200) {
-            // this.recordList = response.data.rows;
-            // this.recordTotal = response.data.total;
-          }
-          this.recordLoading = false;
-        })
-        .catch(() => {
-          this.recordLoading = false;
-        });
-    },
-
+    // 鎶ょ悊璁板綍鐩稿叧鏂规硶
     handleAddRecord() {
       this.recordDialogTitle = "鏂板鎶ょ悊鏍告煡璁板綍";
       this.recordForm = {
@@ -1068,15 +849,9 @@
           .toISOString()
           .replace("T", " ")
           .substring(0, 19),
-        recorder: "褰撳墠鐢ㄦ埛", // 瀹為檯椤圭洰涓粠鐢ㄦ埛淇℃伅鑾峰彇
-        temperature: 36.5,
-        heartRate: 80,
-        bloodPressure: "120/80",
-        respirationRate: 18,
-        oxygenSaturation: 98,
-        urineOutput: 50,
-        cvp: 8,
-        remarks: ""
+        recorder: "褰撳墠鐢ㄦ埛",
+        checkRecord: "",
+        attachments: []
       };
       this.recordDialogVisible = true;
       this.$nextTick(() => {
@@ -1093,58 +868,28 @@
       });
     },
 
-    handleViewRecord(row) {
-      this.$alert(
-        `
-        <div>
-          <p><strong>鏍告煡鏃堕棿锛�</strong>${row.recordTime}</p>
-          <p><strong>鏍告煡浜猴細</strong>${row.recorder}</p>
-          <p><strong>鐢熷懡浣撳緛锛�</strong></p>
-          <ul>
-            <li>浣撴俯锛�${row.temperature}鈩�</li>
-            <li>蹇冪巼锛�${row.heartRate}娆�/鍒�</li>
-            <li>琛�鍘嬶細${row.bloodPressure}mmHg</li>
-            <li>鍛煎惛锛�${row.respirationRate}娆�/鍒�</li>
-            <li>琛�姘чケ鍜屽害锛�${row.oxygenSaturation}%</li>
-            <li>灏块噺锛�${row.urineOutput}ml/h</li>
-          </ul>
-          <p><strong>澶囨敞锛�</strong>${row.remarks || "鏃�"}</p>
-        </div>
-      `,
-        "鎶ょ悊鏍告煡璁板綍璇︽儏",
-        {
-          dangerouslyUseHTMLString: true,
-          customClass: "detail-dialog"
-        }
-      );
-    },
-
     handleSaveRecord() {
       this.$refs.recordForm.validate(valid => {
         if (valid) {
           this.recordSaveLoading = true;
-          const api = this.recordForm.id
-            ? updateNursingRecord
-            : addNursingRecord;
-          const requestData = {
-            ...this.recordForm,
-            maintenanceId: this.form.id
-          };
 
-          api(requestData)
-            .then(response => {
-              if (response.code === 200) {
-                this.$message.success(
-                  this.recordForm.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛"
-                );
-                this.recordDialogVisible = false;
-                this.getRecordList();
-              }
-              this.recordSaveLoading = false;
-            })
-            .catch(() => {
-              this.recordSaveLoading = false;
-            });
+          if (this.recordForm.id) {
+            // 缂栬緫鐜版湁璁板綍
+            const index = this.recordList.findIndex(
+              item => item.id === this.recordForm.id
+            );
+            if (index !== -1) {
+              this.recordList.splice(index, 1, { ...this.recordForm });
+            }
+          } else {
+            // 鏂板璁板綍
+            this.recordForm.id = Date.now();
+            this.recordList.push({ ...this.recordForm });
+          }
+
+          this.$message.success(this.recordForm.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
+          this.recordDialogVisible = false;
+          this.recordSaveLoading = false;
         }
       });
     },
@@ -1156,26 +901,59 @@
         type: "warning"
       })
         .then(() => {
-          deleteNursingRecord(row.id).then(response => {
-            if (response.code === 200) {
-              this.$message.success("鍒犻櫎鎴愬姛");
-              this.getRecordList();
-            }
-          });
+          this.recordList = this.recordList.filter(item => item.id !== row.id);
+          this.$message.success("鍒犻櫎鎴愬姛");
         })
         .catch(() => {});
     },
 
-    // 淇濆瓨鍩烘湰淇℃伅
-    handleSave() {
-      this.$refs.form.validate(valid => {
-        if (valid) {
-          updateMaintenance(this.form).then(response => {
-            if (response.code === 200) {
-              this.$message.success("淇濆瓨鎴愬姛");
-              this.isEdit = false;
-            }
-          });
+    // 闄勪欢鐩稿叧鏂规硶
+    handleCultureAttachmentChange(fileList) {
+      this.cultureForm.attachments = fileList;
+    },
+
+    handleRecordAttachmentChange(fileList) {
+      this.recordForm.attachments = fileList;
+    },
+
+    handleViewCultureAttachments(row) {
+      this.currentAttachmentList = row.attachments || [];
+      this.attachmentPreviewTitle = `鍩瑰吇璁板綍闄勪欢 - ${row.cultureType}`;
+      this.attachmentPreviewVisible = true;
+    },
+
+    handleViewRecordAttachments(row) {
+      this.currentAttachmentList = row.attachments || [];
+      this.attachmentPreviewTitle = `鎶ょ悊鏍告煡璁板綍闄勪欢 - ${row.recorder}`;
+      this.attachmentPreviewVisible = true;
+    },
+
+    // 璇勪及鏁版嵁鍙樻洿澶勭悊
+    handleLiverKidneyDataChange(data) {
+      this.assessmentData.liverKidney = data;
+    },
+
+    handleBloodRoutineDataChange(data) {
+      this.assessmentData.bloodRoutine = data;
+    },
+
+    handleUrineRoutineDataChange(data) {
+      this.assessmentData.urineRoutine = data;
+    },
+
+    handleTabClick(tab) {
+      this.$nextTick(() => {
+        let tableRef = null;
+        if (tab.name === "liverKidney") {
+          tableRef = this.$refs.liverKidney;
+        } else if (tab.name === "bloodRoutine") {
+          tableRef = this.$refs.bloodRoutine;
+        } else if (tab.name === "urineRoutine") {
+          tableRef = this.$refs.urineRoutine;
+        }
+
+        if (tableRef && tableRef.doLayout) {
+          tableRef.doLayout();
         }
       });
     }
@@ -1192,92 +970,25 @@
   margin-bottom: 20px;
 }
 
-.culture-card {
-  margin-bottom: 20px;
-}
-
-.record-card {
-  margin-bottom: 20px;
-}
-
-.detail-title {
-  font-size: 16px;
-  font-weight: bold;
-}
-.maintenance-detail {
-  padding: 20px;
-}
-
-.detail-card {
-  margin-bottom: 20px;
-}
-
-.culture-card {
-  margin-bottom: 20px;
-}
-
-.record-card {
-  margin-bottom: 20px;
-}
-
-.detail-title {
-  font-size: 16px;
-  font-weight: bold;
-}
-.medical-panel {
-  padding: 20px;
-}
-
-.attachment-section {
-  margin-top: 20px;
-  padding: 15px;
-  border: 1px solid #ebeef5;
-  border-radius: 4px;
-}
-
-.attachment-title {
-  font-weight: bold;
-  margin-bottom: 10px;
-  color: #409eff;
-}
-
-.required-item::before {
-  content: "*";
-  color: #f56c6c;
-  margin-right: 4px;
-}
-
 .assessment-card {
   margin-bottom: 20px;
 }
 
-.medical-table {
-  width: 100%;
+.record-card {
   margin-bottom: 20px;
 }
 
-.dynamic-column {
-  min-width: 120px;
+.detail-title {
+  font-size: 16px;
+  font-weight: bold;
+  margin-right: 20px;
 }
+
+.culture-card {
+  margin-bottom: 20px;
+}
+
 .fixed-width .el-button {
   margin: 0 2px;
-}
-
-/* 璇︽儏瀵硅瘽妗嗘牱寮� */
-:deep(.detail-dialog) {
-  width: 500px;
-}
-
-:deep(.detail-dialog .el-message-box__content) {
-  line-height: 1.8;
-}
-
-:deep(.detail-dialog ul) {
-  margin: 10px 0;
-  padding-left: 20px;
-}
-
-:deep(.detail-dialog li) {
-  margin-bottom: 5px;
 }
 </style>
diff --git a/src/views/project/DonationProcess/index.vue b/src/views/project/DonationProcess/index.vue
index 9eb57f6..451ca73 100644
--- a/src/views/project/DonationProcess/index.vue
+++ b/src/views/project/DonationProcess/index.vue
@@ -40,6 +40,41 @@
             <el-option label="宸茬粓姝�" value="99" />
           </el-select>
         </el-form-item>
+
+        <!-- 鏂板鎼滅储瀛楁 -->
+        <el-form-item label="涓婃姤鏃堕棿" prop="reportTimeRange">
+          <el-date-picker
+            v-model="queryParams.reportTimeRange"
+            type="daterange"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+            value-format="yyyy-MM-dd"
+            size="small"
+            style="width: 240px;"
+          />
+        </el-form-item>
+
+        <el-form-item label="棣栬瘖鍖婚櫌" prop="treatmenthospitalname">
+          <el-input
+            v-model="queryParams.treatmenthospitalname"
+            placeholder="璇疯緭鍏ラ璇婂尰闄�"
+            clearable
+            size="small"
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+
+        <el-form-item label="浣忛櫌鍙�" prop="hospitalNo">
+          <el-input
+            v-model="queryParams.hospitalNo"
+            placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+            clearable
+            size="small"
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+
         <el-form-item>
           <el-button
             type="primary"
@@ -147,15 +182,23 @@
 
       <el-table-column label="骞撮緞" align="center" prop="age" width="80" />
 
+      <el-table-column label="琛�鍨�" align="center" prop="bloodtype" width="80">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.sys_BloodType"
+            :value="scope.row.bloodtype"
+          />
+        </template>
+      </el-table-column>
       <el-table-column
-        label="璇佷欢鍙风爜"
+        label="浼犳煋鐥�"
         align="center"
-        prop="idcardno"
+        prop="infectious"
         width="180"
       />
 
       <el-table-column
-        label="娌荤枟鍖婚櫌"
+        label="棣栬瘖鍖婚櫌"
         align="center"
         prop="treatmenthospitalname"
         width="150"
@@ -169,75 +212,46 @@
       />
 
       <el-table-column
-        label="妗堜緥缂栧彿"
+        label="浣忛櫌鍙�"
         align="center"
-        prop="caseNo"
+        prop="hospitalNo"
         width="120"
       />
 
       <!-- 绗竴娆″尰瀛﹁瘎浼� -->
       <el-table-column
-        label="绗竴娆¤瘎浼扮粨璁�"
+        label="璇勪及鐘舵��"
         align="center"
-        prop="firstAssessState"
+        prop="assessState"
         width="120"
       >
         <template slot-scope="scope">
           <dict-tag
             :options="dict.type.sys_BaseAssessConclusion"
-            :value="scope.row.firstAssessState"
+            :value="scope.row.assessState"
           />
         </template>
       </el-table-column>
 
       <el-table-column
-        label="绗竴娆¤瘎浼版椂闂�"
+        label="璇勪及鏃堕棿"
         align="center"
-        prop="assessFirstTime"
+        prop="assessTime"
         width="110"
       >
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.assessFirstTime, "{y}-{m}-{d}") }}</span>
-        </template>
+        <!-- <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.assessTime, "{y}-{m}-{d}") }}</span>
+        </template> -->
       </el-table-column>
-
-      <!-- 绗簩娆″尰瀛﹁瘎浼� -->
-      <el-table-column
-        label="绗簩娆¤瘎浼扮粨璁�"
-        align="center"
-        prop="secondAssessState"
-        width="120"
-      >
-        <template slot-scope="scope">
-          <dict-tag
-            :options="dict.type.sys_BaseAssessConclusion"
-            :value="scope.row.secondAssessState"
-          />
-        </template>
-      </el-table-column>
-
-      <el-table-column
-        label="绗簩娆¤瘎浼版椂闂�"
-        align="center"
-        prop="assessSecondTime"
-        width="110"
-      >
-        <template slot-scope="scope">
-          <span>{{
-            parseTime(scope.row.assessSecondTime, "{y}-{m}-{d}")
-          }}</span>
-        </template>
-      </el-table-column>
-
       <el-table-column
         label="浜插睘纭鏃堕棿"
         align="center"
         prop="signDate"
         width="110"
       >
-        <template slot-scope="scope">
+        <!-- <template slot-scope="scope">
           <span>{{ parseTime(scope.row.signDate, "{y}-{m}-{d}") }}</span>
-        </template>
+        </template> -->
       </el-table-column>
 
       <el-table-column
@@ -317,7 +331,7 @@
       </el-table-column>
 
       <!-- 鎿嶄綔鍒楋細鍙繚鐣欑粓姝㈠拰鏌ョ湅璇︽儏 -->
-      <el-table-column label="鎿嶄綔" align="center" width="150" fixed="right">
+      <el-table-column label="鎿嶄綔" align="center" width="200" fixed="right">
         <template slot-scope="scope">
           <el-button size="mini" type="text" @click="handleDetail(scope.row)"
             >鏌ョ湅璇︽儏</el-button
@@ -331,6 +345,14 @@
               scope.row.terminationCase === 0 && scope.row.recordstate !== '99'
             "
             >缁堟</el-button
+          >
+          <el-button
+            size="mini"
+            type="text"
+            style="color: #67c23a;"
+            @click="handleRestore(scope.row)"
+            v-if="scope.row.terminationCase === 1"
+            >鎭㈠</el-button
           >
         </template>
       </el-table-column>
@@ -354,39 +376,29 @@
       <donor-detail :donorData="currentRecord" @close="detailVisible = false" />
     </el-dialog>
 
-    <!-- 缁堟纭寮规 -->
-    <el-dialog
-      title="缁堟纭"
-      :visible.sync="terminateVisible"
-      width="400px"
-      append-to-body
-    >
-      <div style="margin-bottom: 20px;">
-        <p>
-          纭畾瑕佺粓姝㈡崘鐚��
-          <strong>{{ currentRecord.name }}</strong> 鐨勬崘鐚繘绋嬪悧锛�
-        </p>
-        <p style="color: #f56c6c; font-size: 12px;">
-          姝ゆ搷浣滀笉鍙�嗭紝璇疯皑鎱庢搷浣滐紒
-        </p>
-      </div>
-      <div slot="footer">
-        <el-button @click="terminateVisible = false">鍙栨秷</el-button>
-        <el-button type="danger" @click="submitTerminate">纭缁堟</el-button>
-      </div>
-    </el-dialog>
+    <!-- 缁堟/鎭㈠寮规缁勪欢 -->
+    <terminate-restore-modal
+      :current-record="currentRecord"
+      :visible="modalVisible"
+      :titles="modalTitles"
+      @update:visible="handleModalVisibleChange"
+      @operation-success="handleOperationSuccess"
+    />
   </div>
 </template>
 
 <script>
 import { courselist, terminateDonor } from "@/api/businessApi";
+import TerminateRestoreModal from "@/components/TerminateRestoreModal";
 
 export default {
   name: "Donatebaseinfo",
-  dicts: ["sys_donornode", "sys_EthicalReview", "sys_BaseAssessConclusion"],
+  components: {
+    TerminateRestoreModal
+  },
+  dicts: ["sys_donornode",'sys_BloodType', "sys_EthicalReview", "sys_BaseAssessConclusion"],
   data() {
     return {
-      // 閬僵灞�
       loading: false,
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
@@ -396,8 +408,6 @@
       donatebaseinfoList: [],
       // 璇︽儏寮规鏄剧ず
       detailVisible: false,
-      // 缁堟纭寮规鏄剧ず
-      terminateVisible: false,
       // 褰撳墠鎿嶄綔璁板綍
       currentRecord: {},
       // 缁熻鏁版嵁
@@ -413,7 +423,21 @@
         pageSize: 10,
         name: undefined,
         idcardno: undefined,
-        recordstate: undefined
+        recordstate: undefined,
+        // 鏂板鐨勬悳绱㈠瓧娈�
+        reportTimeRange: [],
+        treatmenthospitalname: undefined,
+        hospitalNo: undefined
+      },
+      // 寮规鏄剧ず鐘舵��
+      modalVisible: {
+        terminate: false,
+        restore: false
+      },
+      // 寮规鏍囬
+      modalTitles: {
+        terminate: "缁堟鎹愮尞杩涚▼",
+        restore: "鎭㈠鎹愮尞杩涚▼"
       }
     };
   },
@@ -422,26 +446,24 @@
   },
   methods: {
     /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
+    /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
     async getList() {
       this.loading = true;
       try {
         const response = await courselist(this.queryParams);
 
-        // 鏍规嵁瀹為檯鎺ュ彛杩斿洖缁撴瀯璋冩暣
         let realData = [];
         realData = response.data.donatebaseinfoProgressDTOS;
         this.total = response.total;
         this.stats.pendingCount = response.data.terminationCase[0];
         this.stats.approvedCount = response.data.terminationCase[1];
         this.stats.terminatedCount = response.data.terminationCase[2];
-        this.stats.totalCount = response.total;
-        // 瀛樺偍鎵�鏈夋暟鎹敤浜庡墠绔瓫閫夊拰鍒嗛〉
-        this.allTableData = realData;
+        this.stats.totalCount =
+          response.total - response.data.terminationCase[2];
 
-        // 搴旂敤鍓嶇绛涢�夋潯浠讹紙濡傛灉鎺ュ彛涓嶆敮鎸佸悗绔瓫閫夛級
+        this.allTableData = realData;
         let filteredData = this.applyFrontendFilter(realData);
 
-        // 鍓嶇鍒嗛〉澶勭悊锛堝鏋滄帴鍙d笉鏀寔鍚庣鍒嗛〉锛�
         if (!response.total && !response.data) {
           const startIndex =
             (this.queryParams.pageNum - 1) * this.queryParams.pageSize;
@@ -449,18 +471,13 @@
           this.donatebaseinfoList = filteredData.slice(startIndex, endIndex);
           this.total = filteredData.length;
         } else {
-          // 鎺ュ彛宸插垎椤碉紝鐩存帴浣跨敤杩斿洖鏁版嵁
           this.donatebaseinfoList = filteredData;
         }
-
-        // 鏇存柊缁熻鏁版嵁
-        // this.updateStats(realData);
       } catch (error) {
         console.error("鑾峰彇鏁版嵁澶辫触:", error);
         this.$message.error("鏁版嵁鍔犺浇澶辫触");
         this.donatebaseinfoList = [];
         this.total = 0;
-        // this.updateStats([]);
       } finally {
         this.loading = false;
       }
@@ -489,21 +506,37 @@
         );
       }
 
-      return filteredData;
-    },
+      if (this.queryParams.treatmenthospitalname) {
+        filteredData = filteredData.filter(
+          item =>
+            item.treatmenthospitalname &&
+            item.treatmenthospitalname.includes(
+              this.queryParams.treatmenthospitalname
+            )
+        );
+      }
 
-    /** 鏇存柊缁熻鏁版嵁 */
-    updateStats(data) {
-      this.stats.totalCount = data.length;
-      this.stats.pendingCount = data.filter(
-        item => item.recordstate === "0" || item.recordstate === 0
-      ).length;
-      this.stats.approvedCount = data.filter(
-        item => item.recordstate === "1" || item.recordstate === 1
-      ).length;
-      this.stats.terminatedCount = data.filter(
-        item => item.recordstate === "99" || item.recordstate === 99
-      ).length;
+      if (this.queryParams.hospitalNo) {
+        filteredData = filteredData.filter(
+          item =>
+            item.hospitalNo &&
+            item.hospitalNo.includes(this.queryParams.hospitalNo)
+        );
+      }
+
+      if (
+        this.queryParams.reportTimeRange &&
+        this.queryParams.reportTimeRange.length === 2
+      ) {
+        const [startTime, endTime] = this.queryParams.reportTimeRange;
+        filteredData = filteredData.filter(item => {
+          if (!item.reporttime) return false;
+          const reportDate = this.parseTime(item.reporttime, "{y}-{m}-{d}");
+          return reportDate >= startTime && reportDate <= endTime;
+        });
+      }
+
+      return filteredData;
     },
 
     /** 鑾峰彇鐘舵�佹爣绛炬牱寮� */
@@ -529,8 +562,6 @@
     /** 鏃堕棿鏍煎紡鍖� */
     parseTime(time, format) {
       if (!time) return "-";
-
-      // 澶勭悊鏃堕棿鎴冲拰鏃ユ湡瀛楃涓�
       const date = new Date(time);
       if (isNaN(date.getTime())) return time;
 
@@ -569,26 +600,24 @@
     /** 缁堟鎿嶄綔 */
     handleTerminate(row) {
       this.currentRecord = { ...row };
-      this.terminateVisible = true;
+      this.modalVisible = { ...this.modalVisible, terminate: true };
     },
 
-    /** 鎻愪氦缁堟 */
-    async submitTerminate() {
-      try {
-        // 璋冪敤缁堟鎺ュ彛
-        await terminateDonor({
-          id: this.currentRecord.id,
-          caseNo: this.currentRecord.caseNo,
-          terminationReason: "绠$悊鍛樻墜鍔ㄧ粓姝�"
-        });
+    /** 鎭㈠鎿嶄綔 */
+    handleRestore(row) {
+      this.currentRecord = { ...row };
+      this.modalVisible = { ...this.modalVisible, restore: true };
+    },
 
-        this.$message.success("缁堟鎴愬姛");
-        this.terminateVisible = false;
-        this.getList(); // 閲嶆柊鍔犺浇鏇存柊鏁版嵁
-      } catch (error) {
-        this.$message.error("缁堟澶辫触");
-        console.error("缁堟閿欒:", error);
-      }
+    /** 澶勭悊寮规鏄剧ず鐘舵�佸彉鍖� */
+    handleModalVisibleChange(newVisible) {
+      this.modalVisible = { ...newVisible };
+    },
+
+    /** 澶勭悊鎿嶄綔鎴愬姛 */
+    handleOperationSuccess({ type, record }) {
+      console.log(`${type}鎿嶄綔鎴愬姛:`, record);
+      this.getList(); // 閲嶆柊鍔犺浇鏁版嵁
     }
   }
 };
diff --git a/src/views/project/donatebaseinfo/EditCaseModal.vue b/src/views/project/donatebaseinfo/EditCaseModal.vue
new file mode 100644
index 0000000..e2876c6
--- /dev/null
+++ b/src/views/project/donatebaseinfo/EditCaseModal.vue
@@ -0,0 +1,911 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="localVisible"
+    width="1200px"
+    :close-on-click-modal="false"
+    @close="handleClose"
+  >
+    <el-form
+      ref="formRef"
+      :model="formData"
+      :rules="rules"
+      label-width="130px"
+      label-position="right"
+    >
+      <!-- 鍩虹淇℃伅閮ㄥ垎 -->
+      <el-card header="鍩虹淇℃伅" class="form-section">
+        <el-row :gutter="20">
+          <el-col :span="11">
+            <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
+              <el-input
+                v-model="formData.caseNo"
+                :disabled="isEdit"
+                placeholder="绯荤粺鑷姩鐢熸垚"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="鎹愮尞鑰呯紪鍙�" prop="donorno">
+              <el-input
+                v-model="formData.donorno"
+                placeholder="璇疯緭鍏ユ崘鐚�呯紪鍙�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="濮撳悕" prop="name">
+              <el-input v-model="formData.name" placeholder="蹇呭~椤�" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="鎬у埆" prop="sex">
+              <el-select v-model="formData.sex" placeholder="璇烽�夋嫨鎬у埆">
+                <el-option label="鏈煡" value="0" />
+                <el-option label="鐢�" value="1" />
+                <el-option label="濂�" value="2" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="璇佷欢绫诲瀷" prop="idcardtype">
+              <el-select
+                v-model="formData.idcardtype"
+                placeholder="璇烽�夋嫨璇佷欢绫诲瀷"
+              >
+                <el-option label="韬唤璇�" value="1" />
+                <el-option label="鍐涗汉璇�" value="2" />
+                <el-option label="鎶ょ収" value="3" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
+              <el-input
+                v-model="formData.idcardno"
+                placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
+                @blur="handleIdCardBlur"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="鍑虹敓鏃ユ湡" prop="birthday">
+              <el-date-picker
+                v-model="formData.birthday"
+                type="date"
+                placeholder="閫夋嫨鍑虹敓鏃ユ湡"
+                value-format="yyyy-MM-dd"
+                style="width: 100%"
+                @change="calculateAge"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="骞撮緞" prop="andAge">
+              <el-input v-model="formData.andAge" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="姘戞棌" prop="nation">
+              <el-select v-model="formData.nation" placeholder="璇烽�夋嫨姘戞棌">
+                <el-option
+                  v-for="dict in dictOptions.sys_nation"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="鍥界睄" prop="nationality">
+              <el-input
+                v-model="formData.nationality"
+                placeholder="璇疯緭鍏ュ浗绫�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+              <el-input v-model="formData.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="瀛﹀巻" prop="education">
+              <el-select v-model="formData.education" placeholder="璇烽�夋嫨瀛﹀巻">
+                <el-option
+                  v-for="dict in dictOptions.sys_education"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="鑱屼笟" prop="occupation">
+              <el-select v-model="formData.occupation" placeholder="璇烽�夋嫨鑱屼笟">
+                <el-option
+                  v-for="dict in dictOptions.sys_occupation"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="绫嶈疮" prop="nativeplace">
+              <el-input
+                v-model="formData.nativeplace"
+                placeholder="璇疯緭鍏ョ睄璐�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-card>
+
+      <!-- 鍖荤枟淇℃伅閮ㄥ垎 -->
+      <el-card header="鍖荤枟淇℃伅" class="form-section">
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="棣栬瘖鍖婚櫌" prop="treatmenthospitalno">
+              <org-selecter
+                :org-type="'3'"
+                v-model="formData.treatmenthospitalno"
+                @change="handleHospitalChange"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="绉戝" prop="treatmentdeptname">
+              <el-input
+                v-model="formData.treatmentdeptname"
+                placeholder="璇疯緭鍏ョ瀹�"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="浣忛櫌鍙�" prop="inpatientno">
+              <el-input
+                v-model="formData.inpatientno"
+                placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
+              <el-input
+                v-model="formData.diagnosisname"
+                placeholder="璇疯緭鍏ョ柧鐥呰瘖鏂悕绉�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="琛�鍨�" prop="bloodtype">
+              <el-radio-group v-model="formData.bloodtype">
+                <el-radio label="1">A鍨�</el-radio>
+                <el-radio label="2">B鍨�</el-radio>
+                <el-radio label="3">O鍨�</el-radio>
+                <el-radio label="4">AB鍨�</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="Rh(D)" prop="rhyin">
+              <el-radio-group v-model="form.rhyin">
+                <el-radio
+                  v-for="dict in dict.type.sys_bloodtype_rhd || []"
+                  :key="dict.value"
+                  :label="dict.value"
+                  >{{ dict.label }}</el-radio
+                >
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="褰撳墠鍖荤枟鏈烘瀯" prop="currentMedicalInstitution">
+              <el-input
+                v-model="formData.currentMedicalInstitution"
+                placeholder="璇疯緭鍏ュ綋鍓嶅尰鐤楁満鏋�"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="褰撳墠鍖荤枟鏈烘瀯绉戝" prop="currentDept">
+              <el-input
+                v-model="formData.currentDept"
+                placeholder="璇疯緭鍏ュ綋鍓嶅尰鐤楁満鏋勭瀹�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="棣栨鍖荤枟鏈烘瀯" prop="firstMedicalInstitution">
+              <el-input
+                v-model="formData.firstMedicalInstitution"
+                placeholder="璇疯緭鍏ラ娆″尰鐤楁満鏋�"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="棣栨鍖荤枟鏈烘瀯绉戝" prop="firstDept">
+              <el-input
+                v-model="formData.firstDept"
+                placeholder="璇疯緭鍏ラ娆″尰鐤楁満鏋勭瀹�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="GSC璇勫垎" prop="gcsScore">
+              <el-input
+                v-model="formData.gcsScore"
+                placeholder="璇疯緭鍏SC璇勫垎"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鍗忚皟鍛樼紪鍙�" prop="coordinatorNo">
+              <el-input
+                v-model="formData.coordinatorNo"
+                placeholder="璇疯緭鍏ュ崗璋冨憳缂栧彿"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鍗忚皟鍛樺鍚�" prop="coordinatorName">
+              <el-input
+                v-model="formData.coordinatorName"
+                placeholder="璇疯緭鍏ュ崗璋冨憳濮撳悕"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="鐥呮儏姒傚喌" prop="illnessoverview">
+              <el-input
+                v-model="formData.illnessoverview"
+                type="textarea"
+                :rows="3"
+                placeholder="璇疯緭鍏ョ梾鎯呮鍐�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-card>
+
+      <!-- 鍦板潃淇℃伅閮ㄥ垎 -->
+      <el-card header="鍦板潃淇℃伅" class="form-section">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鐜颁綇鍦板潃" prop="residenceaddress">
+              <li-area-select
+                ref="residenceSelect"
+                v-model="residenceAddress"
+                @change="handleResidenceAddressChange"
+              />
+              <el-input
+                v-model="formData.residenceaddress"
+                placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"
+                style="margin-top: 8px"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鎴风睄鍦板潃" prop="registeraddress">
+              <li-area-select
+                ref="registerSelect"
+                v-model="registerAddress"
+                @change="handleRegisterAddressChange"
+              />
+              <el-input
+                v-model="formData.registeraddress"
+                placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"
+                style="margin-top: 8px"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-card>
+
+      <!-- 鎹愮尞淇℃伅閮ㄥ垎 -->
+      <el-card header="鎹愮尞淇℃伅" class="form-section">
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="鎹愮尞绫诲埆" prop="donationcategory">
+              <el-select
+                v-model="formData.donationcategory"
+                placeholder="璇烽�夋嫨鎹愮尞绫诲埆"
+              >
+                <el-option
+                  v-for="dict in dictOptions.sys_DonationCategory"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="妗堜緥鏃堕棿" prop="donatetime">
+              <el-date-picker
+                v-model="formData.donatetime"
+                type="datetime"
+                placeholder="閫夋嫨妗堜緥鏃堕棿"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="璁板綍鐘舵��" prop="recordstate">
+              <el-select v-model="formData.recordstate" :disabled="isEdit">
+                <el-option label="鏂板缓" value="0" />
+                <el-option label="宸蹭笂鎶�" value="1" />
+                <el-option label="瀹℃牳涓�" value="2" />
+                <el-option label="宸插畬鎴�" value="3" />
+                <el-option label="宸茬粓姝�" value="99" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鑾峰彇缁勭粐缂栧彿" prop="acquisitiontissueno">
+              <el-input
+                v-model="formData.acquisitiontissueno"
+                placeholder="璇疯緭鍏ヨ幏鍙栫粍缁囩紪鍙�"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鑾峰彇缁勭粐鍚嶇О" prop="acquisitiontissuename">
+              <el-input
+                v-model="formData.acquisitiontissuename"
+                placeholder="璇疯緭鍏ヨ幏鍙栫粍缁囧悕绉�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-card>
+
+      <!-- 鎶ュ憡淇℃伅閮ㄥ垎 -->
+      <el-card header="鎶ュ憡淇℃伅" class="form-section">
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="鎶ュ憡浜虹紪鍙�" prop="reporterno">
+              <el-select
+                v-model="formData.reporterno"
+                @change="handleReporterChange"
+              >
+                <el-option
+                  v-for="reporter in reporters"
+                  :key="reporter.reportNo"
+                  :label="reporter.reportName"
+                  :value="reporter.reportNo"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鎶ュ憡浜哄鍚�" prop="reportername">
+              <el-input
+                v-model="formData.reportername"
+                placeholder="鎶ュ憡浜哄鍚�"
+                :disabled="true"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鎶ュ憡浜虹數璇�" prop="reporterphone">
+              <el-input
+                v-model="formData.reporterphone"
+                placeholder="鎶ュ憡浜鸿仈绯荤數璇�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鎶ュ憡鏃堕棿" prop="reporttime">
+              <el-date-picker
+                v-model="formData.reporttime"
+                type="datetime"
+                placeholder="閫夋嫨鎶ュ憡鏃堕棿"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="閮ㄩ棬ID" prop="deptid">
+              <el-input v-model="formData.deptid" placeholder="璇疯緭鍏ラ儴闂↖D" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-card>
+    </el-form>
+
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="handleClose">鍙栨秷</el-button>
+      <el-button type="primary" @click="handleSubmit" :loading="submitLoading">
+        {{ isEdit ? "鏇存柊" : "淇濆瓨" }}
+      </el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import {
+  getDonatebaseinfo,
+  updateDonatebaseinfo
+} from "@/api/project/donatebaseinfo";
+import OrgSelecter from "@/views/project/components/orgselect";
+import LiAreaSelect from "@/components/Address";
+
+export default {
+  name: "EditCaseModal",
+  components: {
+    OrgSelecter,
+    LiAreaSelect
+  },
+
+  dicts: ["sys_bloodtype_rhd", "sys_BloodType"],
+
+  props: {
+    visible: {
+      type: Boolean,
+      default: false
+    },
+    editData: {
+      type: Object,
+      default: () => ({})
+    },
+    dictOptions: {
+      type: Object,
+      default: () => ({})
+    },
+    reporters: {
+      type: Array,
+      default: () => []
+    }
+  },
+  data() {
+    return {
+      localVisible: this.visible,
+      isEdit: false,
+      submitLoading: false,
+      residenceAddress: {},
+      registerAddress: {},
+      formData: this.getDefaultFormData(),
+      rules: {
+        name: [
+          { required: true, message: "璇疯緭鍏ユ崘鐚�呭鍚�", trigger: "blur" }
+        ],
+        sex: [{ required: true, message: "璇烽�夋嫨鎬у埆", trigger: "change" }],
+        idcardtype: [
+          { required: true, message: "璇烽�夋嫨璇佷欢绫诲瀷", trigger: "change" }
+        ],
+        idcardno: [
+          { required: true, message: "璇疯緭鍏ヨ瘉浠跺彿鐮�", trigger: "blur" }
+        ],
+        birthday: [
+          { required: true, message: "璇烽�夋嫨鍑虹敓鏃ユ湡", trigger: "change" }
+        ],
+        treatmenthospitalno: [
+          { required: true, message: "璇烽�夋嫨棣栬瘖鍖婚櫌", trigger: "change" }
+        ],
+        diagnosisname: [
+          { required: true, message: "璇疯緭鍏ョ柧鐥呰瘖鏂�", trigger: "blur" }
+        ],
+        bloodtype: [
+          { required: true, message: "璇烽�夋嫨琛�鍨�", trigger: "change" }
+        ],
+        donatetime: [
+          { required: true, message: "璇烽�夋嫨妗堜緥鏃堕棿", trigger: "change" }
+        ],
+        reporttime: [
+          { required: true, message: "璇烽�夋嫨鎶ュ憡鏃堕棿", trigger: "change" }
+        ]
+      }
+    };
+  },
+  computed: {
+    title() {
+      return this.isEdit ? "缂栬緫妗堜緥淇℃伅" : "鏂板鎹愮尞妗堜緥";
+    }
+  },
+  watch: {
+    visible(newVal) {
+      this.localVisible = newVal;
+      if (newVal) {
+        this.initForm();
+      }
+    },
+    localVisible(newVal) {
+      this.$emit("update:visible", newVal);
+    },
+    editData: {
+      handler(newVal) {
+        if (newVal && newVal.id) {
+          this.isEdit = true;
+          this.$nextTick(() => {
+            // 纭繚 DOM 宸茬粡鏇存柊鍚庡啀杩涜琛ㄥ崟鎿嶄綔
+            this.initForm(newVal);
+          });
+        }
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  methods: {
+    getDefaultFormData() {
+      return {
+        // 鍩虹淇℃伅
+        caseNo: null,
+        donorno: null,
+        donateno: null,
+        name: null,
+        sex: null,
+        idcardtype: null,
+        idcardno: null,
+        birthday: null,
+        andAge: "",
+        age: null,
+        ageunit: "骞�",
+        age2: null,
+        ageunit2: "鏈�",
+        nation: null,
+        nationality: "涓浗",
+        nativeplace: null,
+        phone: null,
+        education: null,
+        occupation: null,
+
+        // 鍖荤枟淇℃伅
+        treatmenthospitalno: null,
+        treatmenthospitalname: null,
+        treatmentdeptname: null,
+        inpatientno: null,
+        diagnosisname: null,
+        bloodtype: "0",
+        rhyin: "0",
+        currentMedicalInstitution: null,
+        currentDept: null,
+        firstMedicalInstitution: null,
+        firstDept: null,
+        gcsScore: null,
+        illnessoverview: null,
+        coordinatorNo: null,
+        coordinatorName: null,
+
+        // 鍦板潃淇℃伅
+        residenceaddress: null,
+        residenceprovince: null,
+        residencecity: null,
+        registeraddress: null,
+        registerprovince: null,
+        registercity: null,
+
+        // 鎹愮尞淇℃伅
+        donationcategory: null,
+        donatetime: null,
+        recordstate: "0",
+        acquisitiontissueno: "ZJOPO",
+        acquisitiontissuename: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�",
+
+        // 鎶ュ憡淇℃伅
+        reporterno: null,
+        reportername: null,
+        reporterphone: null,
+        reporttime: null,
+        deptid: null,
+
+        // 鏁扮粍瀛楁
+        diseasetype: [],
+        infectious: [],
+        selfwill: [],
+        othercases: [],
+        infosources: [],
+        kinship: [],
+        patientstate: []
+      };
+    },
+
+    async initForm() {
+      console.log(this.isEdit);
+
+      if (this.isEdit) {
+        await this.loadEditData();
+      } else {
+        this.formData = this.getDefaultFormData();
+        // 璁剧疆榛樿鍊�
+        this.formData.nationality = "涓浗";
+        this.formData.bloodtype = "0";
+        this.formData.rhyin = "0";
+        this.formData.recordstate = "0";
+        this.formData.acquisitiontissueno = "ZJOPO";
+        this.formData.acquisitiontissuename = "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�";
+      }
+      this.$nextTick(() => {
+        this.$refs.formRef?.clearValidate();
+      });
+    },
+
+    async loadEditData() {
+      try {
+        const response = await getDonatebaseinfo(this.editData.id);
+        const data = response.data;
+
+        // 澶勭悊鏁扮粍瀛楁
+        const arrayFields = [
+          "diseasetype",
+          "infectious",
+          "selfwill",
+          "othercases",
+          "infosources",
+          "kinship",
+          "patientstate"
+        ];
+        arrayFields.forEach(field => {
+          if (data[field]) {
+            data[field] = data[field].split(",");
+          } else {
+            data[field] = [];
+          }
+        });
+
+        this.formData = { ...this.getDefaultFormData(), ...data };
+
+        // 璁剧疆鍦板潃淇℃伅
+        if (data.residenceprovince) {
+          this.residenceAddress = {
+            sheng: data.residenceprovincename,
+            shi: data.residencecityname,
+            qu: data.residencetownname
+          };
+        }
+
+        if (data.registerprovince) {
+          this.registerAddress = {
+            sheng: data.registerprovincename,
+            shi: data.registercityname,
+            qu: data.registertownname
+          };
+        }
+
+        this.calculateAge(data.birthday);
+      } catch (error) {
+        this.$message.error("鑾峰彇妗堜緥鏁版嵁澶辫触");
+        this.handleClose();
+      }
+    },
+
+    handleIdCardBlur() {
+      // 韬唤璇佽嚜鍔ㄥ~鍏呴�昏緫
+      this.updateMessage();
+    },
+
+    updateMessage() {
+      const idCardReg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
+
+      if (idCardReg.test(this.formData.idcardno)) {
+        const orgBirthday = this.formData.idcardno.substring(6, 14);
+        const orgGender = this.formData.idcardno.substring(16, 17);
+
+        const sex = orgGender % 2 == 1 ? "1" : "2";
+        const birthday = `${orgBirthday.substring(
+          0,
+          4
+        )}-${orgBirthday.substring(4, 6)}-${orgBirthday.substring(6, 8)}`;
+
+        this.formData.sex = sex;
+        this.formData.birthday = birthday;
+        this.calculateAge(birthday);
+      }
+    },
+
+    calculateAge(birthday) {
+      if (!birthday) {
+        this.formData.age = this.formData.age2 = null;
+        this.formData.andAge = "";
+        return;
+      }
+
+      const birthDate = new Date(birthday);
+      const today = new Date();
+
+      let yearDiff = today.getFullYear() - birthDate.getFullYear();
+      let monthDiff = today.getMonth() - birthDate.getMonth();
+      let dayDiff = today.getDate() - birthDate.getDate();
+
+      if (dayDiff < 0) {
+        monthDiff--;
+        const lastDayOfMonth = new Date(
+          today.getFullYear(),
+          today.getMonth(),
+          0
+        ).getDate();
+        dayDiff += lastDayOfMonth;
+      }
+
+      if (monthDiff < 0) {
+        yearDiff--;
+        monthDiff += 12;
+      }
+
+      this.formData.age = yearDiff;
+      this.formData.ageunit = "宀�";
+      this.formData.age2 = monthDiff;
+      this.formData.ageunit2 = "鏈�";
+
+      if (yearDiff === 0) {
+        if (monthDiff === 0) {
+          this.formData.age = dayDiff;
+          this.formData.ageunit = "澶�";
+          this.formData.age2 = null;
+        } else {
+          this.formData.age = monthDiff;
+          this.formData.ageunit = "鏈�";
+          this.formData.age2 = dayDiff;
+          this.formData.ageunit2 = "澶�";
+        }
+      }
+
+      this.formData.andAge = [
+        this.formData.age && this.formData.age !== 0
+          ? `${this.formData.age}${this.formData.ageunit}`
+          : "",
+        this.formData.age2 && this.formData.age2 !== 0
+          ? `${this.formData.age2}${this.formData.ageunit2}`
+          : ""
+      ]
+        .filter(Boolean)
+        .join(" ");
+    },
+
+    handleHospitalChange(hospitalInfo) {
+      if (hospitalInfo && hospitalInfo.organizationname) {
+        this.formData.treatmenthospitalname = hospitalInfo.organizationname;
+      }
+    },
+
+    handleReporterChange(reporterNo) {
+      const reporter = this.reporters.find(r => r.reportNo === reporterNo);
+      if (reporter) {
+        this.formData.reportername = reporter.reportName;
+      }
+    },
+
+    handleResidenceAddressChange(address) {
+      this.formData.residenceprovince = address.sheng;
+      this.formData.residencecity = address.shi;
+      this.formData.residencetown = address.qu;
+    },
+
+    handleRegisterAddressChange(address) {
+      this.formData.registerprovince = address.sheng;
+      this.formData.registercity = address.shi;
+      this.formData.registertown = address.qu;
+    },
+
+    handleClose() {
+      this.localVisible = false;
+      this.isEdit = false;
+      this.submitLoading = false;
+      this.formData = this.getDefaultFormData();
+      this.residenceAddress = {};
+      this.registerAddress = {};
+      this.$emit("closed");
+    },
+
+    async handleSubmit() {
+      const valid = await this.$refs.formRef.validate().catch(() => false);
+      if (!valid) return;
+
+      this.submitLoading = true;
+      try {
+        const submitData = this.processSubmitData();
+
+        const result = await updateDonatebaseinfo(submitData);
+        if (result.code === 200) {
+          this.$message.success(this.isEdit ? "鏇存柊鎴愬姛" : "鏂板鎴愬姛");
+          this.$emit("success", result.data);
+          this.handleClose();
+        } else {
+          this.$message.error(result.msg || "鎿嶄綔澶辫触");
+        }
+      } catch (error) {
+        this.$message.error("鎿嶄綔澶辫触");
+      } finally {
+        this.submitLoading = false;
+      }
+    },
+
+    processSubmitData() {
+      const data = { ...this.formData };
+
+      // 澶勭悊鏁扮粍瀛楁涓哄瓧绗︿覆
+      const arrayFields = [
+        "diseasetype",
+        "infectious",
+        "selfwill",
+        "othercases",
+        "infosources",
+        "kinship",
+        "patientstate"
+      ];
+      arrayFields.forEach(field => {
+        if (Array.isArray(data[field])) {
+          data[field] = data[field].join(",");
+        } else if (!data[field]) {
+          data[field] = "";
+        }
+      });
+
+      // 澶勭悊鏃ユ湡瀛楁
+      if (data.birthday) {
+        data.birthday = this.$moment(data.birthday).format(
+          "YYYY-MM-DD HH:mm:ss"
+        );
+      }
+      if (data.reporttime) {
+        data.reporttime = this.$moment(data.reporttime).format(
+          "YYYY-MM-DD HH:mm:ss"
+        );
+      }
+      if (data.donatetime) {
+        data.donatetime = this.$moment(data.donatetime).format(
+          "YYYY-MM-DD HH:mm:ss"
+        );
+      }
+
+      // 璁剧疆榛樿鍊�
+      if (!data.recordstate) {
+        data.recordstate = "0";
+      }
+      if (!data.workflow) {
+        data.workflow = 0;
+      }
+
+      return data;
+    }
+  }
+};
+</script>
+
+<style scoped>
+.form-section {
+  margin-bottom: 20px;
+}
+.form-section:last-child {
+  margin-bottom: 0;
+}
+</style>
diff --git a/src/views/project/donatebaseinfo/index.vue b/src/views/project/donatebaseinfo/index.vue
index 2378891..6c29d1c 100644
--- a/src/views/project/donatebaseinfo/index.vue
+++ b/src/views/project/donatebaseinfo/index.vue
@@ -1,5 +1,6 @@
 <template>
   <div class="app-container">
+    <!-- 鎼滅储琛ㄥ崟 -->
     <el-form
       :model="queryParams"
       ref="queryForm"
@@ -9,7 +10,7 @@
     >
       <el-row :gutter="8">
         <el-col :span="5">
-          <el-form-item label="濮撳悕" prop="name">
+          <el-form-item label="鎮h�呭鍚�" prop="name">
             <el-input
               v-model="queryParams.name"
               placeholder="璇疯緭鍏ュ鍚�"
@@ -20,34 +21,16 @@
           </el-form-item>
         </el-col>
         <el-col :span="5">
-          <el-form-item
-            align="left"
-            label="鍖荤枟鏈烘瀯"
-            prop="treatmenthospitalname"
-          >
+          <el-form-item label="棣栬瘖鍖婚櫌" prop="treatmenthospitalname">
             <org-selecter
               ref="orgSelecter"
               :org-type="'3'"
               v-model="queryParams.treatmenthospitalno"
-              @keyup.enter.native="handleQuery"
             />
           </el-form-item>
         </el-col>
-        <el-col :span="5">
-          <el-form-item label="鎹愮尞鍦板競">
-            <el-select v-model="queryParams.city" placeholder="璇烽�夋嫨鍦板競">
-              <el-option
-                v-for="item in provinceData"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
         <el-col :span="9">
-          <el-form-item label="妗堜緥鏃堕棿">
+          <el-form-item label="涓婃姤鏃堕棿">
             <el-date-picker
               style="width: 100%"
               v-model="selecttime"
@@ -57,69 +40,7 @@
               end-placeholder="缁撴潫鏈堜唤"
               value-format="yyyy-MM-dd"
               @change="getTimeList"
-            >
-            </el-date-picker>
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="8">
-        <el-col :span="5">
-          <el-form-item label="鎹愮尞杩涘害" prop="workflow">
-            <el-select
-              v-model="queryParams.workflow"
-              placeholder="璇烽�夋嫨褰撳墠杩涘害"
-              clearable
-              size="small"
-            >
-              <el-option
-                v-for="dict in dict.type.sys_donornode"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="5">
-          <el-form-item label="鎶ュ憡浜�">
-            <el-select
-              v-model="queryParams.reporterno"
-              placeholder="璇烽�夋嫨鎶ュ憡浜�"
-            >
-              <el-option
-                v-for="item in reportlist"
-                :key="item.index"
-                :label="item.reportername"
-                :value="item.reporterno"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="5">
-          <el-form-item label="鏄惁缁堟">
-            <el-select
-              v-model="queryParams.terminationCase"
-              placeholder="璇烽�夋嫨鐘舵��"
-            >
-              <el-option
-                v-for="item in terminationCaselist"
-                :key="item.value"
-                :label="item.name"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="9">
-          <el-form-item label="绫嶈疮">
-            <div>
-              <li_area_select
-                ref="areaSelect"
-                v-model="searchAddress"
-              ></li_area_select>
-            </div>
+            />
           </el-form-item>
         </el-col>
       </el-row>
@@ -131,39 +52,19 @@
               icon="el-icon-search"
               size="mini"
               @click="handleQuery"
-              >鎼滅储</el-button
             >
-            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-              >閲嶇疆</el-button
-            >
+              鎼滅储
+            </el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">
+              閲嶇疆
+            </el-button>
           </el-form-item>
         </el-col>
       </el-row>
     </el-form>
+
+    <!-- 鎿嶄綔鎸夐挳 -->
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['project:donatebaseinfo:add']"
-          >鏂板</el-button
-        >
-      </el-col>
-      <!-- <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['project:donatebaseinfo:edit']"
-          >淇敼</el-button
-        >
-      </el-col> -->
 
       <el-col :span="1.5">
         <el-button
@@ -174,15 +75,14 @@
           :loading="exportLoading"
           @click="handleExport"
           v-hasPermi="['project:donatebaseinfo:export']"
-          >瀵煎嚭</el-button
         >
+          瀵煎嚭
+        </el-button>
       </el-col>
-      <right-toolbar
-        :showSearch.sync="showSearch"
-        @queryTable="getList"
-      ></right-toolbar>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" />
     </el-row>
 
+    <!-- 鏁版嵁琛ㄦ牸 -->
     <el-table
       v-loading="loading"
       :data="donatebaseinfoList"
@@ -190,8 +90,6 @@
       border
       :default-sort="{ prop: 'donatetime', order: 'descending' }"
     >
-      <!-- <el-table-column label="鎶ュ憡鏃堕棿" align="center" prop="id" /> -->
-      <!-- <el-table-column type="selection" width="55" align="center" /> -->
       <el-table-column
         label="妗堜緥鏃堕棿"
         align="center"
@@ -219,9 +117,11 @@
       </el-table-column>
       <el-table-column label="骞撮緞" align="center" prop="age" width="100">
         <template slot-scope="scope">
-           {{
+          {{
             `${
-              scope.row.age && scope.row.age !== 0 ? `${scope.row.age}${scope.row.ageunit?scope.row.ageunit:''}` : ""
+              scope.row.age && scope.row.age !== 0
+                ? `${scope.row.age}${scope.row.ageunit || ""}`
+                : ""
             } ${
               scope.row.age2 && scope.row.age2 !== 0
                 ? `${scope.row.age2}${scope.row.ageunit2}`
@@ -231,15 +131,11 @@
         </template>
       </el-table-column>
       <el-table-column
-        label="鍖荤枟鏈烘瀯"
+        label="棣栬瘖鍖婚櫌"
         align="center"
         prop="treatmenthospitalname"
       />
-      <el-table-column
-        label="GSC璇勫垎"
-        align="center"
-        prop="gcsScore"
-      />
+      <el-table-column label="GSC璇勫垎" align="center" prop="gcsScore" />
       <el-table-column label="琛�鍨�" align="center" prop="bloodtype" width="100">
         <template slot-scope="scope">
           <dict-tag
@@ -248,7 +144,6 @@
           />
         </template>
       </el-table-column>
-
       <el-table-column
         label="鎹愮尞绫诲埆"
         align="center"
@@ -268,27 +163,6 @@
         prop="reportername"
         width="100"
       />
-      <!--
-         <el-table-column
-        label="鐜版墍鍦ㄥ湴甯�"
-        align="center"
-        prop="registercityname"
-        width="150"
-      />
-      <el-table-column
-        label="鎹愮尞杩涘害"
-        align="center"
-        prop="recordstate"
-        width="120"
-      >
-        <template slot-scope="scope">
-         <dict-tag
-            :options="dict.type.sys_DonationStatus"
-            :value="scope.row.recordstate"
-          />
-        </template>
-      </el-table-column>
-      -->
       <el-table-column
         label="鎹愮尞杩涘害"
         align="center"
@@ -302,11 +176,12 @@
               :value="scope.row.workflow"
             />
           </div>
-          <div v-else>浠诲姟缁堟</div>
+          <div v-else><el-button type="danger" plain>浠诲姟缁堟</el-button></div>
         </template>
       </el-table-column>
       <el-table-column
         label="鎿嶄綔"
+        width="190"
         align="center"
         class-name="small-padding fixed-width"
         fixed="right"
@@ -318,35 +193,42 @@
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['project:donatebaseinfo:edit']"
-            >璇︽儏</el-button
           >
-          <el-button
-            v-if="scope.row.recordstate == 0"
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['project:donatebaseinfo:remove']"
-            >鍒犻櫎</el-button
-          >
-          <!--
-            <el-button v-if="scope.row.recordstate == 0 || scope.row.recordstate == 3" size="mini" type="text"
-            icon="el-icon-thumb" @click="handleapproval(scope.row)">鎻愪氦</el-button>
-           -->
+            璇︽儏
+          </el-button>
           <el-button
             size="mini"
             type="text"
-            icon="el-icon-refrigerator"
-            @click="handledownload(scope.row)"
-            >涓嬭浇</el-button
+            icon="el-icon-edit"
+            @click="handleOpenEdit(scope.row)"
+            v-hasPermi="['project:donatebaseinfo:edit']"
+            >缂栬緫</el-button
           >
-          <!--
-            <el-button size="mini" type="text" icon="el-icon-edit" @click="handletermination(scope.row)"
-            v-hasPermi="['project:donatebaseinfo:edit']">{{ scope.row.recordstate == 99 ? "鎭㈠": "缁堟"  }}</el-button>
-          -->
+          <el-button
+            size="mini"
+            type="text"
+            style="color: #f56c6c;"
+            @click="handleTerminate(scope.row)"
+            v-if="
+              scope.row.terminationCase === 0 && scope.row.recordstate !== '99'
+            "
+          >
+            缁堟
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            style="color: #67c23a;"
+            @click="handleRestore(scope.row)"
+            v-if="scope.row.terminationCase === 1"
+          >
+            鎭㈠
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
+
+    <!-- 鍒嗛〉 -->
     <pagination
       v-show="total > 0"
       :total="total"
@@ -354,1051 +236,165 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
-    <!-- 娣诲姞鎴栦慨鏀规崘鐚熀纭�瀵硅瘽妗� -->
-    <el-dialog
-      :title="title"
-      align="center"
-      :visible.sync="open"
-      :close-on-click-modal="false"
-      width="1100px"
-    >
-      <el-form
-        ref="form"
-        :model="form"
-        :rules="rules"
-        label-width="130px"
-        label-position="right"
-      >
-        <div
-          style="
-                border-bottom: 1px solid #ddd;
-                border-top: 1px solid #ddd;
-                padding-right: 60px;
-              "
-        >
-          <el-row style="margin-top: 40px">
-            <el-col :span="8">
-              <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
-                <el-input v-model="form.caseNo" disabled />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item
-                align="left"
-                label="鍖荤枟鏈烘瀯"
-                prop="treatmenthospitalno"
-              >
-                <org-selecter
-                  ref="addOrgSelect"
-                  :org-type="'3'"
-                  v-model="form.treatmenthospitalno"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="绉戝" prop="treatmentdeptno">
-                <el-input
-                  v-model="form.treatmentdeptname"
-                  placeholder="璇疯緭鍏ョ瀹�"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="6">
-              <el-form-item align="left" label="濮撳悕" prop="name">
-                <el-input v-model="form.name" placeholder="蹇呭~椤�" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="6">
-              <el-form-item label="姘戞棌" prop="nation">
-                <el-select v-model="form.nation" placeholder="璇烽�夋嫨姘戞棌">
-                  <el-option
-                    v-for="dict in dict.type.sys_nation"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="6">
-              <el-form-item label="绫嶈疮" prop="nativeplace">
-                <el-input v-model="form.nativeplace" placeholder="璇疯緭鍏ュ浗绫�" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="6">
-              <el-form-item label="鍥界睄" prop="nationality">
-                <el-input v-model="form.nationality" placeholder="璇疯緭鍏ュ浗绫�" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="6">
-              <el-form-item label="璇佷欢绫诲瀷" prop="idcardtype">
-                <el-select
-                  v-model="form.idcardtype"
-                  placeholder="璇烽�夋嫨璇佷欢绫诲瀷"
-                >
-                  <el-option
-                    v-for="dict in dict.type.sys_IDType"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="parseInt(dict.value)"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="6">
-              <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
-                <el-input
-                  style="width: 174px"
-                  ref="updateBSvalue"
-                  class="sfzcode"
-                  v-model="form.idcardno"
-                  placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
-                  @blur="updateMessage"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="6">
-              <el-form-item label="鎬у埆" prop="sex">
-                <el-select v-model="form.sex" placeholder="璇疯緭鍏ユ�у埆">
-                  <el-option
-                    v-for="dict in dict.type.sys_user_sex"
-                    :key="dict.label"
-                    :label="dict.label"
-                    :value="parseInt(dict.value)"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="6">
-              <el-form-item label="瀛﹀巻" prop="education">
-                <el-select v-model="form.education" placeholder="璇烽�夋嫨瀛﹀巻">
-                  <el-option
-                    v-for="dict in dict.type.sys_education"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="6">
-              <el-form-item label="鍑虹敓鏃ユ湡" prop="birthday">
-                <el-date-picker
-                  clearable
-                  size="small"
-                  v-model="form.birthday"
-                  type="date"
-                  style="width: 174px"
-                  @change="calculateAge"
-                  value-format="yyyy-MM-dd"
-                  placeholder="閫夋嫨鍑虹敓鏃ユ湡"
-                >
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-            <el-col :span="6">
-              <!-- <el-form-item label="骞撮緞" prop="age">
-                <el-input v-model="form.age" placeholder="璇疯緭鍏ュ勾榫�" />
-              </el-form-item> -->
-              <el-form-item label="骞撮緞" prop="age">
-                <el-input v-model="form.andAge" disabled> </el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="6">
-              <el-form-item label="鑱屼笟" prop="occupation">
-                <el-select v-model="form.occupation" placeholder="璇烽�夋嫨鑱屼笟">
-                  <el-option
-                    v-for="dict in dict.type.sys_occupation"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-                    <el-row>
-            <el-col :span="12">
-              <el-form-item
-                label="鎵�鍦ㄥ尰鐤楁満鏋�"
-                prop="currentMedicalInstitution"
-              >
-                <el-input
-                  v-model="form.currentMedicalInstitution"
-                  placeholder="璇疯緭鍏�"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item
-                label-width="150px"
-                label="鎵�鍦ㄥ尰鐤楁満鏋勭瀹�"
-                prop="currentDept"
-              >
-                <el-input v-model="form.currentDept" placeholder="璇疯緭鍏�" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="棣栨鍖荤枟鏈烘瀯" prop="firstMedicalInstitution">
-                <el-input
-                  v-model="form.firstMedicalInstitution"
-                  placeholder="璇疯緭鍏�"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item
-                label-width="150px"
-                label="棣栨鍖荤枟鏈烘瀯绉戝"
-                prop="firstDept"
-              >
-                <el-input v-model="form.firstDept" placeholder="璇疯緭鍏�" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="浣忓潃" prop="residenceaddress">
-                <div>
-                  <li_area_select
-                    ref="residenceSelect"
-                    v-model="residenceAddresss"
-                  ></li_area_select>
-                  <!-- <div>{{defultAddress}}</div> -->
-                </div>
-              </el-form-item>
-            </el-col>
-            <el-col :span="11" :push="1">
-              <el-input
-                v-model="form.residenceaddress"
-                placeholder="璇疯緭鍏ュ唴瀹�"
-              />
-            </el-col>
-          </el-row>
-
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="鐜版墍鍦ㄥ湴" prop="registeraddress">
-                <div>
-                  <li_area_select
-                    ref="registerSelect"
-                    v-model="registerAddresss"
-                  ></li_area_select>
-                  <!-- <div>{{defultAddress}}</div> -->
-                </div>
-              </el-form-item>
-            </el-col>
-            <el-col :span="11" :push="1">
-              <el-input
-                v-model="form.registeraddress"
-                placeholder="璇疯緭鍏ュ唴瀹�"
-              />
-            </el-col>
-          </el-row>
-        </div>
-
-        <div
-          style="
-                border-bottom: 1px solid #ddd;
-                margin-top: 20px;
-                padding-right: 60px;
-              "
-        >
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="妗堜緥缂栧彿" prop="inpatientno">
-                <el-input v-model="form.inpatientno" placeholder="妗堜緥缂栧彿" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="16">
-              <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
-                <el-input
-                  v-model="form.diagnosisname"
-                  placeholder="璇疯緭鍏ョ柧鐥呰瘖鏂悕绉�"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item align="left" label="琛�鍨�" prop="bloodtype">
-                <el-radio-group v-model="form.bloodtype">
-                  <el-radio
-                    v-for="dict in dict.type.sys_BloodType"
-                    :key="dict.value"
-                    :label="dict.value"
-                    >{{ dict.label }}</el-radio
-                  >
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12" :pull="1">
-              <el-form-item label="Rh(D)" align="left" prop="rhyin">
-                <el-radio-group v-model="form.rhyin">
-                  <el-radio
-                    v-for="dict in dict.type.sys_bloodtype_rhd"
-                    :key="dict.value"
-                    :label="dict.value"
-                    >{{ dict.label }}</el-radio
-                  >
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-form-item label="鐤剧梾绫诲瀷" align="left">
-              <el-checkbox-group v-model="form.diseasetype">
-                <el-checkbox
-                  v-for="dict in dict.type.sys_DiseaseType"
-                  :key="dict.value"
-                  :label="dict.value"
-                >
-                  {{ dict.label }}
-                </el-checkbox>
-              </el-checkbox-group>
-            </el-form-item>
-            <el-form-item label="鍏朵粬" prop="diseasetypeOther">
-              <el-input
-                v-model="form.diseasetypeOther"
-                placeholder="璇疯緭鍏ュ叾浠�"
-              />
-            </el-form-item>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item align="left" label="浼犳煋鐥�">
-                <el-checkbox-group v-model="form.infectious">
-                  <el-checkbox
-                    v-for="dict in dict.type.sys_Infectious"
-                    :key="dict.value"
-                    :label="dict.value"
-                  >
-                    {{ dict.label }}
-                  </el-checkbox>
-                </el-checkbox-group>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item align="left" label="鍏朵粬" prop="infectiousOther">
-                <el-input
-                  v-model="form.infectiousOther"
-                  placeholder="璇疯緭鍏ュ叾浠�"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="9">
-              <el-form-item align="left" label="鐥呬汉鐘跺喌">
-                <el-checkbox-group v-model="form.patientstate">
-                  <el-checkbox
-                    v-for="dict in dict.type.sys_patientstate"
-                    :key="dict.value"
-                    :label="dict.value"
-                  >
-                    {{ dict.label }}
-                  </el-checkbox>
-                </el-checkbox-group>
-              </el-form-item>
-            </el-col>
-            <el-col :span="15" align="left">
-              <el-form-item label="鍏朵粬鎯呭喌">
-                <el-checkbox-group v-model="form.othercases">
-                  <el-checkbox
-                    v-for="dict in dict.type.sys_OtherCases"
-                    :key="dict.value"
-                    :label="dict.value"
-                  >
-                    {{ dict.label }}
-                  </el-checkbox>
-                </el-checkbox-group>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </div>
-
-        <div
-          style="
-                border-bottom: 1px solid #ddd;
-                padding-right: 60px;
-                margin-top: 20px;
-              "
-        >
-          <el-row>
-            <div display="flex">
-              <el-row>
-                <el-col :span="12">
-                  <el-form-item
-                    label="浜插睘鐘跺喌"
-                    prop="kinship"
-                    class="relation"
-                    align="left"
-                  >
-                    <el-checkbox-group v-model="form.kinship">
-                      <el-checkbox
-                        v-for="dict in dict.type.sys_Kinship"
-                        :key="dict.value"
-                        :label="dict.value"
-                      >
-                        {{ dict.label }}
-                      </el-checkbox>
-                    </el-checkbox-group>
-                  </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                  <el-form-item label="鍏朵粬" prop="kinshipOther">
-                    <el-input
-                      v-model="form.kinshipOther"
-                      placeholder="璇疯緭鍏ュ叾浠�"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-            </div>
-          </el-row>
-          <el-row>
-            <el-col :span="24">
-              <el-form-item align="left" label="鏈汉鎰忔効 ">
-                <el-checkbox-group v-model="form.selfwill">
-                  <el-checkbox
-                    v-for="dict in dict.type.sys_SelfWill"
-                    :key="dict.value"
-                    :label="dict.value"
-                  >
-                    {{ dict.label }}
-                  </el-checkbox>
-                </el-checkbox-group>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="涓昏浜插睘" prop="majorrelatives">
-                <el-input
-                  v-model="form.majorrelatives"
-                  placeholder="璇疯緭鍏ヤ富瑕佷翰灞�"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="涓庢崘璧犺�呭叧绯�" prop="familyrelations">
-                <el-select
-                  v-model="form.familyrelations"
-                  placeholder="璇烽�夋嫨涓庢崘璧犺�呭叧绯�"
-                >
-                  <el-option
-                    v-for="dict in dict.type.sys_FamilyRelation"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item align="left" label="淇℃伅鏉ユ簮">
-                <el-checkbox-group v-model="form.infosources">
-                  <el-checkbox
-                    v-for="dict in dict.type.sys_InfoSources"
-                    :key="dict.value"
-                    :label="dict.value"
-                  >
-                    {{ dict.label }}
-                  </el-checkbox>
-                </el-checkbox-group>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鍏朵粬" prop="infosourcesOther">
-                <el-input
-                  v-model="form.infosourcesOther"
-                  placeholder="璇疯緭鍏ヤ俊鎭潵婧愬叾浠�"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="淇℃伅鍛�" prop="infoname">
-                <el-input v-model="form.infoname" placeholder="璇疯緭鍏ヤ俊鎭憳" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鑱旂郴鐢佃瘽" prop="infophone">
-                <el-input
-                  v-model="form.infophone"
-                  placeholder="璇疯緭鍏ヤ俊鎭憳鑱旂郴鐢佃瘽"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item align="left" label="绾㈠崄瀛椾細" prop="redorganno">
-                <org-selecter
-                  ref="addCrossOrgSelect"
-                  :org-type="'2'"
-                  v-model="form.redorganno"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鑱旂郴浜�" prop="contactperson">
-                <el-input
-                  v-model="form.contactperson"
-                  placeholder="璇疯緭鍏ヨ仈绯讳汉"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鑱旂郴鏃堕棿" prop="contacttime">
-                <el-date-picker
-                  clearable
-                  size="small"
-                  style="width: 190px"
-                  v-model="form.contacttime"
-                  type="datetime"
-                  value-format="yyyy-MM-dd HH:mm:ss"
-                  placeholder="閫夋嫨鎶ュ憡鏃堕棿"
-                >
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="24">
-              <el-form-item
-                align="left"
-                label="鑾峰彇缁勭粐"
-                prop="acquisitiontissuename"
-              >
-                <org-selecter
-                  style="width: 260px"
-                  ref="orgSelecter"
-                  :org-type="'1'"
-                  v-model="form.acquisitiontissueno"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="鎶ュ憡浜�" prop="reporterno">
-                <el-select
-                  ref="getReportname"
-                  v-model="form.reporterno"
-                  placeholder="璇烽�夋嫨"
-                >
-                  <el-option
-                    v-for="item in reporters"
-                    :key="item.reportNo"
-                    :label="item.reportName"
-                    :value="item.reportNo"
-                  >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鑱旂郴鐢佃瘽" prop="reporterphone">
-                <el-input
-                  v-model="form.reporterphone"
-                  placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="鎶ュ憡鏃堕棿" align="left" prop="reporttime">
-                <el-date-picker
-                  clearable
-                  size="small"
-                  style="width: 190px"
-                  v-model="form.reporttime"
-                  type="datetime"
-                  value-format="yyyy-MM-dd HH:mm:ss"
-                  placeholder="閫夋嫨鎶ュ憡鏃堕棿"
-                >
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </div>
-        <!-- <div style="padding-right: 60px; margin-top: 20px">
-          <el-row>
-            <el-form-item label="闄勪欢" align="left" prop="annexfile">
-              <annex-upload ref="annex" :infoid="form.id" :caseNo="form.caseNo" :flowname="flowname"
-                :annexno="annexno" />
-            </el-form-item>
-          </el-row>
-        </div> -->
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button v-show="showSaveBtn" type="primary" @click="submitForm"
-          >淇濆瓨骞跺墠寰�妗堜緥宸ヤ綔鍙�</el-button
-        >
-        <el-button
-          v-show="showTerminationBtn"
-          type="primary"
-          @click="submitForm"
-          >缁堟妗堜緥</el-button
-        >
-        <el-button @click="cancel">鍙� 娑�</el-button>
-        <!-- <el-button @click="handleapproval">鎻愪氦瀹℃牳</el-button> -->
-      </div>
-    </el-dialog>
+    <!-- 妗堜緥缂栬緫寮圭獥 -->
+    <edit-case-modal
+      :visible="editModalVisible"
+      :editData="currentEditData"
+      :dict-options="dict.type"
+      @update:visible="editModalVisible = $event"
+      @success="handleEditSuccess"
+      @closed="handleEditClosed"
+    />
+    <!-- 缁堟/鎭㈠寮规 -->
+    <terminate-restore-modal
+      :current-record="currentRecord"
+      :visible="modalVisible"
+      :titles="modalTitles"
+      @update:visible="handleModalVisibleChange"
+      @operation-success="handleOperationSuccess"
+    />
   </div>
 </template>
 <script>
 import { getUserProfile } from "@/api/system/user";
+import TerminateRestoreModal from "@/components/TerminateRestoreModal";
+import EditCaseModal from "./EditCaseModal";
 import {
   listDonatebaseinfo,
-  getDonatebaseinfo,
-  delDonatebaseinfo,
   addDonatebaseinfo,
-  updateDonatebaseinfo,
-  exportDonatebaseinfo,
-  downloadbaseinfo,
-  getDonationNumber,
-  getdonatorno
+  exportDonatebaseinfo
 } from "@/api/project/donatebaseinfo";
 import Li_area_select from "@/components/Address";
 import OrgSelecter from "@/views/project/components/orgselect";
-import AnnexUpload from "@/views/project/components/annexupload";
-import ReportName from "@/views/project/components/organizationUser";
-import { getToken } from "@/utils/auth";
-import {
-  listOrganization,
-  getOrganization,
-  listReportname,
-  listUser
-} from "@/api/project/organization";
+import { listReportname, listUser } from "@/api/project/organization";
+
 export default {
+  name: "Donatebaseinfo",
   components: {
     Li_area_select,
     OrgSelecter,
-    AnnexUpload,
-    ReportName
+    TerminateRestoreModal,
+    EditCaseModal
   },
-  name: "Donatebaseinfo",
   dicts: [
-    "sys_Reporter",
-    "sys_redcrossagency",
-    "sys_nation",
-    "sys_occupation",
-    "sys_education",
-    "sys_OrganizationType",
-    "sys_HospitalNature",
-    "sys_RegionalLevel",
-    "country",
     "sys_user_sex",
-    "sys_IDType",
-    "sys_AgeUnit",
     "sys_BloodType",
-    "sys_0_1",
-    "sys_patientstate",
     "sys_DonationCategory",
-    "sys_Kinship",
-    "sys_Infectious",
-    "sys_bloodtype_rhd",
-    "sys_InfoSources",
-    "sys_OtherCases",
-    "sys_DonationStatus",
-    "sys_DiseaseType",
-    "sys_SelfWill",
-    "sys_FamilyRelation",
     "sys_donornode"
   ],
   data() {
     return {
-      tempRecordState: null,
-      approvalState: false,
-      countyname: "",
-      cuuntry: "",
-      organizationname: "",
       selecttime: "",
-
-      //鐪佸競鍖�
-      //榛樿鍊艰缃紝鍙负绌�
-      searchAddress: {
-        sheng: "",
-        shi: "",
-        qu: "",
-        organizationname: null
+      residenceAddresss: { sheng: "灞变笢鐪�", shi: "", qu: "" },
+      registerAddresss: { sheng: "灞变笢鐪�", shi: "", qu: "" },
+      modalTitles: {
+        terminate: "缁堟鎹愮尞杩涚▼",
+        restore: "鎭㈠鎹愮尞杩涚▼"
       },
-      residenceAddresss: {
-        sheng: "娴欐睙鐪�",
-        shi: "",
-        qu: ""
-      },
-      registerAddresss: {
-        sheng: "娴欐睙鐪�",
-        shi: "",
-        qu: ""
-      },
-      terminationCaselist: [
-        { name: "缁堟鐘舵��", value: 1 },
-        { name: "姝e父鐘舵��", value: 0 }
-      ],
-      // 閬僵灞�
       loading: true,
-      // 瀵煎嚭閬僵灞�
       exportLoading: false,
-      // 閫変腑鏁扮粍
+      editModalVisible: false,
+      currentEditData: {},
       ids: [],
-      // 闈炲崟涓鐢�
       single: true,
-      // 闈炲涓鐢�
       multiple: true,
-      // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
-      // 鎬绘潯鏁�
       total: 0,
-      // 鎹愮尞鍩虹琛ㄦ牸鏁版嵁
       donatebaseinfoList: [],
-      // 寮瑰嚭灞傛爣棰�
       title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
       open: false,
-      // 鑾峰彇缁勭粐鍚嶇О鏃堕棿鑼冨洿
-      daterangeReporttime: [],
-      //鐢ㄦ埛淇℃伅
       currentuser: {},
-
-      // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        caseNo: null,
-        recordstate: null,
-        // treatmenthospitalno: null,
-        treatmenthospitalname: null,
         name: null,
-        residenceprovince: null,
-        residencecity: null,
-        residencetown: null,
+        treatmenthospitalno: null,
         starttime: null,
-        endtime: null,
-        city: null,
-        reportno: null
-        // organizationname: null,
-        // organizationtype: null,
-        // idcardno: null,
-        // reporterno: null,
-        // reporttime: null,
+        endtime: null
       },
-      // 琛ㄥ崟鍙傛暟
       form: {
-        id: null,
         name: null,
         sex: null,
         idcardtype: null,
         idcardno: null,
-        age: null, // 骞撮緞锛堝勾锛�
+        age: null,
         andAge: "",
-        ageunit: "骞�", // 鍗曚綅锛岄�氬父鍥哄畾涓衡�滃勾鈥�
-        age2: null, // 骞撮緞锛堟湀鎴栧ぉ锛�
-        ageunit2: "鏈�", // 鍗曚綅锛屾牴鎹绠楀喅瀹氭槸鈥滄湀鈥濊繕鏄�滃ぉ鈥�
-        ageunit: null,
+        ageunit: "骞�",
+        age2: null,
+        ageunit2: "鏈�",
         birthday: null,
-        phone: null,
-        residenceaddress: null,
         nationality: "涓浗",
-        nativeplace: null,
-        residenceprovince: null,
-        nation: null,
-        residenceprovincename: null,
-        occupation: null,
-        residencecity: null,
-        education: null,
-        residencecityname: null,
-        residencetown: null,
-        residencetownname: null,
-        residencecommunity: null,
-        residencecommunityname: null,
-        residencecountycode: null,
-        residencecountyname: null,
-        registeraddress: null,
-        registerprovince: null,
-        registerprovincename: null,
-        registercity: null,
-        registercityname: null,
-        registertown: null,
-        registertownname: null,
-        registercommunity: null,
-        registercommunityname: null,
-        registercountycode: null,
-        registercountyname: null,
-        recordstate: null,
-        treatmenthospitalno: null,
-        treatmenthospitalname: null,
-        treatmentdeptname: null,
-        diagnosisno: null,
-        diagnosisname: null,
         bloodtype: "0",
-        inpatientno: null,
         rhyin: "0",
-        caseNo: null,
-        donationcategory: null,
-        illnessoverview: null,
         diseasetype: [],
         infectious: [],
         selfwill: [],
-        diseasetypeOther: null,
         othercases: [],
-        kinshipwill: 0,
         infosources: [],
         kinship: [],
-        redorganno: null,
-        redorganname: null,
-        contactperson: null,
-        infectiousOther: null,
-        contactnumber: null,
-        contacttime: null,
-        reporterno: null,
-        reportername: null,
         patientstate: [],
-        reporterphone: null,
-        infosourcesOther: null,
-        reporttime: null,
-        delFlag: null,
-        createBy: null,
-        createTime: null,
-        updateBy: null,
-        updateTime: null,
-        kinshipOther: null,
-        majorrelatives: null,
-        familyrelations: null,
         acquisitiontissueno: "ZJOPO",
-        acquisitiontissuename: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�"
+        acquisitiontissuename: "闈掑矝浜轰綋鍣ㄥ畼鑾峰彇缁勭粐"
       },
-      //ads
       reporters: [],
       users: [],
-
-      // 琛ㄥ崟鏍¢獙
-     rules: {
+      rules: {
         name: [
           { required: true, message: "璇疯緭鍏ユ崘鐚�呭鍚�", trigger: "blur" }
-        ],
-        nationality: [
-          { required: true, message: "璇疯緭鍏ュ浗绫�", trigger: "blur" }
-        ],
-        currentMedicalInstitution: [
-          { required: true, message: "璇疯緭鍏ユ墍鍦ㄥ尰鐤楁満鏋�", trigger: "blur" }
-        ],
-        currentDept: [
-          { required: true, message: "鎵�鍦ㄥ尰鐤楁満鏋勭瀹�", trigger: "blur" }
-        ],
-        firstMedicalInstitution: [
-          { required: true, message: "璇疯緭鍏ラ娆″尰鐤楁満鏋�", trigger: "blur" }
-        ],
-        firstDept: [
-          { required: true, message: "璇疯緭鍏ラ娆″尰鐤楁満鏋勭瀹�", trigger: "blur" }
         ],
         birthday: [
           { required: true, message: "璇烽�夋嫨鍑虹敓鏃ユ湡", trigger: "blur" }
         ],
-        idcardtype: [
-          { required: true, message: "璇烽�夋嫨璇佷欢绫诲瀷", trigger: "blur" }
-        ],
-        residenceaddress: [
-          { required: true, message: "璇疯緭鍏ヤ綇鍧�", trigger: "blur" }
-        ],
-        registerAddresss: [
-          { required: true, message: "璇疯緭鍏ョ幇灞呬綇鍦板潃", trigger: "blur" }
-        ],
-        diseasetype: [
-          { required: true, message: "璇烽�夋嫨鐤剧梾绫诲瀷", trigger: "blur" }
-        ],
-        infectious: [
-          { required: true, message: "璇烽�夋嫨浼犳煋鐥呯被鍨�", trigger: "blur" }
-        ],
-        patientstate: [
-          { required: true, message: "璇烽�夋嫨鐥呬汉鐘跺喌", trigger: "blur" }
-        ],
-        kinship: [
-          { required: true, message: "璇烽�夋嫨浜插睘鎯呭喌", trigger: "blur" }
-        ],
-        majorrelatives: [
-          { required: true, message: "璇疯緭鍏ヤ富瑕佷翰灞�", trigger: "blur" }
-        ],
-        selfwill: [
-          { required: true, message: "璇烽�夋嫨鏈汉鎰忔効", trigger: "blur" }
-        ],
-        registerAddresss: [
-          { required: true, message: "璇疯緭鍏ョ幇鎵�鍦ㄥ湴", trigger: "blur" }
-        ],
-        familyrelations: [
-          { required: true, message: "璇烽�夋嫨浜插睘涓庢崘鐚�呭叧绯�", trigger: "blur" }
-        ],
-        infosources: [
-          { required: true, message: "璇烽�夋嫨淇℃伅鏉ユ簮", trigger: "blur" }
-        ],
-        idcardno: [
-          { required: true, message: "璇锋纭緭鍏ヨ瘉浠跺彿鐮�", trigger: "blur" }
-        ],
-        sex: [{ required: true, message: "鎬у埆涓嶈兘涓虹┖", trigger: "blur" }],
-        age: [{ required: true, message: "璇疯緭鍏ュ勾榫�", trigger: "blur" }],
         treatmenthospitalno: [
-          { required: true, message: "璇烽�夋嫨鍖荤枟鏈烘瀯", trigger: "blur" }
+          { required: true, message: "璇烽�夋嫨棣栬瘖鍖婚櫌", trigger: "blur" }
         ],
         bloodtype: [
           { required: true, message: "璇烽�夋嫨ABO琛�鍨�", trigger: "blur" }
-        ],
-        rhyin: [{ required: true, message: "璇烽�夋嫨RHD琛�鍨�", trigger: "blur" }],
-        diseasetype: [
-          { required: true, message: "璇烽�夋嫨RHD琛�鍨�", trigger: "blur" }
-        ],
-
-        inpatientno: [
-          { required: true, message: "杈撳叆妗堜緥缂栧彿", trigger: "blur" }
-        ],
-        diagnosisname: [
-          { required: true, message: "鐤剧梾璇婃柇涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        infoname: [
-          { required: true, message: "璇疯緭鍏ヤ俊鎭憳濮撳悕", trigger: "blur" }
-        ],
-        infophone: [
-          { required: true, message: "璇疯緭鍏ヤ俊鎭憳鑱旂郴鐢佃瘽", trigger: "blur" }
-        ],
-        acquisitiontissueno: [
-          { required: true, message: "鍣ㄥ畼鑾峰彇缁勭粐涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        reporterno: [
-          { required: true, message: "璇烽�夋嫨鎶ュ憡浜�", trigger: "blur" }
-        ],
-        reporttime: [
-          { required: true, message: "璇疯緭鍏ユ姤鍛婃椂闂�", trigger: "blur" }
-        ],
-        reporterphone: [
-          { required: true, message: "璇疯緭鍏ユ姤鍛婁汉鑱旂郴鐢佃瘽", trigger: "blur" }
         ]
       },
-      //鏄惁鏄剧ず淇濆瓨鎸夐挳
       showSaveBtn: true,
-      showTerminationBtn: false,
-      //娴佺▼鍚嶇О
-      flowname: "娼滃湪鎹愮尞鐧昏",
-      annexno: "PotentialDonationRegistration",
-      starttime: "",
-      endtime: "",
-      reportlist: [],
-      reportervalue: "",
-      headers: {
-        Authorization: "Bearer " + getToken()
-      },
-      provinceData: [
-        { label: "鍏ㄩ儴", value: "" },
-        { label: "鏉窞甯�", value: "1" },
-        { label: "瀹佹尝甯�", value: "2" },
-        { label: "娓╁窞甯�", value: "3" },
-        { label: "鍢夊叴甯�", value: "4" },
-        { label: "婀栧窞甯�", value: "5" },
-        { label: "缁嶅叴甯�", value: "6" },
-        { label: "閲戝崕甯�", value: "7" },
-        { label: "琛㈠窞甯�", value: "8" },
-        { label: "鑸熷北甯�", value: "9" },
-        { label: "鍙板窞甯�", value: "A" },
-        { label: "涓芥按甯�", value: "B" }
-      ]
+      currentRecord: {},
+      modalVisible: {}
     };
   },
   created() {
-    if (sessionStorage.getItem("donatebaseinfo")) {
-      this.queryParams = JSON.parse(sessionStorage.getItem("donatebaseinfo"));
-      console.log(this.queryParams, "queryParams");
+    const savedParams = sessionStorage.getItem("donatebaseinfo");
+    if (savedParams) {
+      this.queryParams = { ...this.queryParams, ...JSON.parse(savedParams) };
     }
   },
+  async mounted() {
+    await Promise.all([
+      this.getCurrentUser(),
+      this.getuserlist(),
+      this.selectReporters()
+    ]);
 
-  mounted(e) {
-    // let idd = this.$route.query.userid
-    // console.log('chuanzhi',idd);
-
-    this.getCurrentUser();
-    this.getuserlist();
-    this.selectReporters();
-
-    this.LoadReportList();
-
-    if (this.$route.params.starttime != null && this.$route.params.endtime) {
-      this.selecttime = [
-        this.$moment(this.$route.params.starttime).format("YYYY-MM-DD"),
-        this.$moment(this.$route.params.endtime).format("YYYY-MM-DD")
-      ];
-    }
-    if (this.$route.params.reporterno != "") {
-      this.reporterno = this.$route.params.reporterno;
-    }
-    this.queryParams.terminationcase = this.$route.params.terminationcase;
-
-    if (
-      this.$route.params.tempRecordState != "" &&
-      this.$route.params.tempRecordState != undefined
-    ) {
-      this.queryParams.recordstate = "" + this.$route.params.tempRecordState;
-    }
-    if (this.$route.params.reporterno != "") {
-      this.reportervalue = this.$route.params.reporterno;
-    }
-    if (!this.$route.params.shen != "") {
-      this.searchAddress.sheng = this.$route.params.shen;
-      if (!this.$route.params.shi != "") {
-        this.searchAddress.shi = this.$route.params.shi;
-      }
-      if (!this.$route.params.qu) {
-        this.searchAddress.qu = this.$route.params.qu;
-      }
-    }
-
-    if (this.$route.params.city != "") {
-      this.queryParams.city = this.$route.params.city;
-    } else {
-      this.queryParams.city = "";
-    }
-
+    this.initializeRouteParams();
     this.getTimeList();
-
     this.getList();
   },
-
   methods: {
-    getCurrentUser() {
-      getUserProfile().then(response => {
-        this.currentuser = response.data;
-      });
+    async getCurrentUser() {
+      const response = await getUserProfile();
+      this.currentuser = response.data;
     },
+
     calculateAge(birthday) {
       if (!birthday) {
-        // 娓呯┖骞撮緞瀛楁
-        this.form.age = null;
-        this.form.age2 = null;
-        // this.form.age3 = null;
+        this.form.age = this.form.age2 = null;
         return;
       }
 
       const birthDate = new Date(birthday);
       const today = new Date();
 
-      // 璁$畻鎬绘湀浠藉樊寮�
       let yearDiff = today.getFullYear() - birthDate.getFullYear();
       let monthDiff = today.getMonth() - birthDate.getMonth();
       let dayDiff = today.getDate() - birthDate.getDate();
 
-      // 濡傛灉褰撳墠鏃ユ湡鐨勫ぉ鏁板皬浜庡嚭鐢熸棩鏈熺殑澶╂暟锛屽垯鍊熸湀
       if (dayDiff < 0) {
         monthDiff--;
-        // 鑾峰彇涓婁釜鏈堢殑鏈�鍚庝竴澶�
         const lastDayOfMonth = new Date(
           today.getFullYear(),
           today.getMonth(),
@@ -1407,683 +403,291 @@
         dayDiff += lastDayOfMonth;
       }
 
-      // 濡傛灉鏈堜唤宸负璐燂紝鍒欏�熷勾
       if (monthDiff < 0) {
         yearDiff--;
         monthDiff += 12;
       }
 
-      // 璧嬪�煎勾閮ㄥ垎
       this.form.age = yearDiff;
       this.form.ageunit = "宀�";
-
-      // 璧嬪�兼湀閮ㄥ垎锛堟垨鑰呮偍涔熷彲浠ラ�夋嫨鏄剧ず鍓╀綑鐨勫ぉ鏁帮級
       this.form.age2 = monthDiff;
       this.form.ageunit2 = "鏈�";
 
-      // 濡傛灉鎮ㄨ繕鎯虫樉绀哄ぉ鏁�
-      // this.form.age3 = dayDiff;
-      // this.form.ageunit3 = '澶�';
-
-      // 濡傛灉骞撮緞灏忎簬1宀侊紝鍙兘鎮ㄥ笇鏈涚敤鏈堟垨澶╂潵琛ㄧず涓诲勾榫�
-      // 杩欓噷鏄竴涓畝鍗曠殑閫昏緫锛屾偍鍙互鏍规嵁闇�姹傝皟鏁�
       if (yearDiff === 0) {
         if (monthDiff === 0) {
-          // 灏忎簬1涓湀锛岀敤澶╄〃绀�
           this.form.age = dayDiff;
           this.form.ageunit = "澶�";
-          this.form.age2 = null; // 娓呯┖绗簩瀛楁
-          // this.form.age3 = null;
+          this.form.age2 = null;
         } else {
-          // 灏忎簬1骞达紝鐢ㄦ湀琛ㄧず
           this.form.age = monthDiff;
           this.form.ageunit = "鏈�";
-          this.form.age2 = dayDiff; // 绗簩瀛楁鏄剧ず澶�
+          this.form.age2 = dayDiff;
           this.form.ageunit2 = "澶�";
         }
       }
 
-      this.form.andAge = `${
+      this.form.andAge = [
         this.form.age && this.form.age !== 0
           ? `${this.form.age}${this.form.ageunit}`
-          : ""
-      } ${
+          : "",
         this.form.age2 && this.form.age2 !== 0
           ? `${this.form.age2}${this.form.ageunit2}`
           : ""
-      }`.trim();
-      this.$forceUpdate(); // 寮哄埗鏇存柊
-      console.log(this.form.andAge);
-    },
-    LoadReportList() {
-      listDonatebaseinfo().then(res => {
-        let list = res.rows;
-        let reportlist = [];
-        reportlist.push({ reporterno: "", reportername: "鍏ㄩ儴" });
-        list.forEach(element => {
-          reportlist.push({
-            reporterno: element.reporterno,
-            reportername: element.reportername
-          });
-        });
-
-        if (reportlist != 0) {
-          reportlist = this.resetArr(reportlist);
-          this.reportlist = reportlist;
-        }
-      });
+      ]
+        .filter(Boolean)
+        .join(" ");
     },
 
-    resetArr(Arr) {
-      var hash = {};
-      Arr = Arr.reduce(function(arr, current) {
-        hash[current.reporterno]
-          ? ""
-          : (hash[current.reporterno] = true && arr.push(current));
-        return arr;
-      }, []);
-      return Arr;
+    handleTerminate(row) {
+      this.currentRecord = { ...row };
+      this.modalVisible = { ...this.modalVisible, terminate: true };
     },
 
-    getTimeList(e) {
-      console.log(this.selecttime);
-      if (this.selecttime != null) {
-        if (this.selecttime != 0) {
-          this.endtime = this.selecttime[1];
-          this.starttime = this.selecttime[0];
-          // if (this.endtime == this.starttime) {
-          let num = Number(this.endtime.slice(5, 7));
-          if (num < 9) {
-            let mon = Number(this.endtime.slice(6, 7));
-            this.endtime =
-              this.endtime.slice(0, 5) +
-              "0" +
-              (mon + 1) +
-              "-" +
-              "01" +
-              " " +
-              "00" +
-              ":" +
-              "00" +
-              ":" +
-              "00";
-          }
-          // this.endtime=this.endtime.slice(0,5)骞�
-          else if (num >= 10) {
-            this.endtime =
-              this.endtime.slice(0, 5) +
-              (num + 1) +
-              "-" +
-              "01" +
-              " " +
-              "00" +
-              ":" +
-              "00" +
-              ":" +
-              "00";
-          } else {
-            this.endtime =
-              this.endtime.slice(0, 5) +
-              "10" +
-              "-" +
-              "01" +
-              " " +
-              "00" +
-              ":" +
-              "00" +
-              ":" +
-              "00";
-          }
-          this.starttime =
-            this.starttime + " " + "00" + ":" + "00" + ":" + "00";
-          // }
-        } else {
-          this.starttime = "1998-01-01 00:00:00";
-          this.endtime = "2998-01-01 00:00:00";
-        }
-      } else {
-        this.starttime = "1998-01-01 00:00:00";
-        this.endtime = "2998-01-01 00:00:00";
+    handleRestore(row) {
+      this.currentRecord = { ...row };
+      this.modalVisible = { ...this.modalVisible, restore: true };
+    },
+
+    getTimeList() {
+      if (!this.selecttime) {
+        // this.queryParams.starttime = "1998-01-01 00:00:00";
+        // this.queryParams.endtime = "2998-01-01 00:00:00";
+        return;
       }
+
+      const [start, end] = this.selecttime;
+      this.queryParams.starttime = `${start} 00:00:00`;
+
+      const monthNum = Number(end.slice(5, 7));
+      const nextMonth = monthNum < 9 ? `0${monthNum + 1}` : monthNum + 1;
+      this.queryParams.endtime = `${end.slice(0, 5)}${nextMonth}-01 00:00:00`;
     },
 
-    selectReporters() {
-      //涓撹亴浜哄憳
-      listReportname("zzry").then(res => {
-        this.reporters = res.data;
-      });
+    async selectReporters() {
+      const res = await listReportname("zzry");
+      this.reporters = res.data;
     },
 
-    getuserlist() {
-      //鐢ㄦ埛鍒楄〃
-      listUser().then(res => {
-        this.users = res.data;
-      });
-    },
-
-    handleapproval(row) {
-      this.$confirm("鏄惁纭灏嗘渚嬩笂鎶ュ鏍革紵", "鎻愮ず", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          row.recordstate = 1;
-          updateDonatebaseinfo(row).then(response => {
-            this.$modal.msgSuccess("涓婃姤瀹℃牳鎴愬姛");
-            this.getList();
-          });
-        })
-        .catch(() => {
-          this.$message({
-            type: "info",
-            message: "宸插彇娑堜笂鎶�"
-          });
-        });
-    },
-    resetapproval(row) {
-      this.approvalState = false;
-      //  this.reset();
-      // const id = row.id || this.ids;
-      updateDonatebaseinfo(row).then(response => {
-        row.recordstate = 0;
-      });
+    async getuserlist() {
+      const res = await listUser();
+      this.users = res.data;
     },
 
     updateMessage() {
-      try {
-        const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
-        if (reg.test(this.form.idcardno)) {
-          // 韬唤璇佸彿鐮佹槸鍚﹀悎娉�
-          var org_birthday = this.form.idcardno.substring(6, 14);
-          var org_gender = this.form.idcardno.substring(16, 17);
-          var sex = org_gender % 2 == 1 ? 1 : 2;
-          var birthday =
-            org_birthday.substring(0, 4) +
-            "-" +
-            org_birthday.substring(4, 6) +
-            "-" +
-            org_birthday.substring(6, 8);
-          var birthdays = new Date(birthday.replace(/-/g, "/"));
-          let d = new Date();
-          let age =
-            d.getFullYear() -
-            birthdays.getFullYear() -
-            (d.getMonth() < birthdays.getMonth() ||
-            (d.getMonth() == birthdays.getMonth() &&
-              d.getDate() < birthdays.getDate())
-              ? 1
-              : 0);
-          // 璧嬪�肩粰琛ㄦ牸
-          this.form.sex = sex;
-          this.form.birthday = birthday;
-          this.calculateAge(birthday);
-          // this.form.age = age;
-        } else {
-        }
-      } catch {}
-    },
-    // sheng: '娴欐睙鐪�',
-    //   shi: '',
-    //   qu: '',
+      const idCardReg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
 
-    // 韬唤璇侀獙璇�
-    //鏍规嵁韬唤璇佸彿鑷姩鐢熸垚鎬у埆銆佸嚭鐢熸棩鏈熷拰骞撮緞
-    inputChange() {
-      const idCard = this.props.form.getFieldValue("idCard");
-      let birthday = "";
-      let sex = "0";
-      if (idCard.length === 15) {
-        birthday = `19${idCard.substring(6, 8)}-${idCard.substring(
-          9,
-          10
-        )}-${idCard.substring(11, 12)}`;
-        sex = idCard[14] % 2 === 0 ? "0" : "1";
-      } else {
-        birthday = `${idCard.substring(6, 10)}-${idCard.substring(
-          11,
-          12
-        )}-${idCard.substring(13, 14)}`;
-        sex = idCard[16] % 2 === 0 ? "0" : "1";
+      if (idCardReg.test(this.form.idcardno)) {
+        const orgBirthday = this.form.idcardno.substring(6, 14);
+        const orgGender = this.form.idcardno.substring(16, 17);
+
+        const sex = orgGender % 2 == 1 ? 1 : 2;
+        const birthday = `${orgBirthday.substring(
+          0,
+          4
+        )}-${orgBirthday.substring(4, 6)}-${orgBirthday.substring(6, 8)}`;
+
+        this.form.sex = sex;
+        this.form.birthday = birthday;
+        this.calculateAge(birthday);
       }
-      this.setState({
-        birthday,
-        sex
-      });
     },
 
-    /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
-    getList() {
+    initializeRouteParams() {
+      const { params } = this.$route;
+      const routeParams = {
+        starttime: params.starttime,
+        endtime: params.endtime,
+        reporterno: params.reporterno,
+        terminationcase: params.terminationcase,
+        tempRecordState: params.tempRecordState,
+        city: params.city
+      };
+
+      Object.entries(routeParams).forEach(([key, value]) => {
+        if (value) this.queryParams[key] = value;
+      });
+
+      if (params.starttime && params.endtime) {
+        this.selecttime = [
+          this.$moment(params.starttime).format("YYYY-MM-DD"),
+          this.$moment(params.endtime).format("YYYY-MM-DD")
+        ];
+      }
+    },
+
+    async getList() {
       this.loading = true;
-      this.queryParams.params = {};
-      sessionStorage.removeItem("donatebaseinfo");
+
       sessionStorage.setItem(
         "donatebaseinfo",
         JSON.stringify(this.queryParams)
       );
-      // 璺宠浆鏃剁殑榛樿杩涘害
 
-      if (this.reportervalue != "") {
-        this.queryParams.reportno = this.reportervalue;
-      }
-
-      if (this.starttime != "") {
-        this.queryParams.starttime = this.starttime;
-      } else {
-        this.queryParams.starttime = "";
-      }
-      if (this.endtime != "") {
-        this.queryParams.endtime = this.endtime;
-      } else {
-        this.queryParams.endtime = "";
-      }
-      this.queryParams.residenceprovince = this.$refs.areaSelect.getSheng();
-      this.queryParams.residencecity = this.$refs.areaSelect.getShi();
-      this.queryParams.residencetown = this.$refs.areaSelect.getQu();
-      console.log(this.queryParams);
-
-      listDonatebaseinfo(this.queryParams).then(response => {
-        this.donatebaseinfoList = response.rows;
-        //console.log("listDonatebaseinfo", response.rows);
+      try {
+        const response = await listDonatebaseinfo(this.queryParams);
+        this.donatebaseinfoList = response.data;
         this.total = response.total;
+      } catch (error) {
+        console.error("鑾峰彇鍒楄〃澶辫触:", error);
+      } finally {
         this.loading = false;
-      });
+      }
     },
-    // 鍙栨秷鎸夐挳
+    /** 鎵撳紑缂栬緫寮圭獥 */
+    handleOpenEdit(row) {
+      this.currentEditData = { ...row };
+      console.log(this.currentEditData, "this.currentEditData");
+      this.editModalVisible = true;
+    },
+
+    /** 澶勭悊缂栬緫鎴愬姛 */
+    handleEditSuccess(updatedData) {
+      this.$modal.msgSuccess("缂栬緫鎴愬姛");
+      this.getList(); // 鍒锋柊鍒楄〃
+    },
+
+    /** 澶勭悊缂栬緫寮圭獥鍏抽棴 */
+    handleEditClosed() {
+      this.currentEditData = {};
+    },
+
+    handleModalVisibleChange(newVisible) {
+      this.modalVisible = { ...newVisible };
+    },
+
+    handleOperationSuccess({ type, record }) {
+      console.log(`${type}鎿嶄綔鎴愬姛:`, record);
+      this.getList();
+    },
+
     cancel() {
       this.open = false;
       this.reset();
     },
-    // 琛ㄥ崟閲嶇疆
+
     reset() {
       this.form = {
-        id: null,
         name: null,
-        sex: null,
-        idcardtype: null,
-        idcardno: null,
-        age: null,
-        ageunit: null,
-        birthday: null,
-        phone: null,
-        residenceaddress: null,
-        nationality: "涓浗",
-        nativeplace: null,
-        residenceprovince: null,
-        nation: null,
-        residenceprovincename: null,
-        occupation: null,
-        residencecity: null,
-        education: null,
-        residencecityname: null,
-        residencetown: null,
-        residencetownname: null,
-        residencecommunity: null,
-        residencecommunityname: null,
-        residencecountycode: null,
-        residencecountyname: null,
-        registeraddress: null,
-        registerprovince: null,
-        registerprovincename: null,
-        registercity: null,
-        registercityname: null,
-        registertown: null,
-        registertownname: null,
-        registercommunity: null,
-        registercommunityname: null,
-        registercountycode: null,
-        registercountyname: null,
-        recordstate: null,
-        treatmenthospitalno: null,
-        treatmenthospitalname: null,
-        treatmentdeptname: null,
-        diagnosisno: null,
-        diagnosisname: null,
-        bloodtype: "0",
-        inpatientno: null,
-        rhyin: 0,
-        caseNo: null,
-        donationcategory: null,
-        illnessoverview: null,
-        diseasetype: [],
-        infectious: [],
-        selfwill: [],
-        diseasetypeOther: null,
-        othercases: [],
-        kinshipwill: 0,
-        infosources: [],
-        kinship: [],
-        redorganno: null,
-        redorganname: null,
-        contactperson: null,
-        infectiousOther: null,
-        contactnumber: null,
-        contacttime: null,
-        reporterno: null,
-        reportername: null,
-        patientstate: [],
-        reporterphone: null,
-        infosourcesOther: null,
-        reporttime: null,
-        delFlag: null,
-        createBy: null,
-        createTime: null,
-        updateBy: null,
-        updateTime: null,
-        kinshipOther: null,
-        majorrelatives: null,
-        familyrelations: null,
-        acquisitiontissueno: "ZJOPO",
-        acquisitiontissuename: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�"
+        sex: null
+        // ... 淇濈暀蹇呰鐨勫瓧娈靛垵濮嬪��
       };
-
       this.resetForm("form");
     },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
+
     handleQuery() {
       this.queryParams.pageNum = 1;
       this.getList();
     },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+
     resetQuery() {
-      this.daterangeReporttime = [];
-
-      this.reportervalue = "";
-
       this.queryParams = {
-        doname: null,
         pageNum: 1,
         pageSize: 10,
         name: null,
-        idcardno: null,
-        residenceprovince: null,
-        residencecity: null,
-        residencetown: null,
-        // "2"
-        recordstate: null,
-        treatmenthospitalname: null,
-        caseNo: null,
-        acquisitiontissueno: null,
-        reportername: null,
-        reporttime: null,
-        city: null,
-        treatmenthospitalno: null
+        treatmenthospitalno: null,
+        starttime: null,
+        endtime: null
       };
       this.selecttime = [];
       this.getTimeList();
-      this.searchAddress = {
-        sheng: "",
-        shi: "",
-        qu: "",
-        organizationname: null
-      };
-      //this.$refs.areaSelect.clean();
-
       this.resetForm("queryForm");
       this.handleQuery();
     },
-    // 澶氶�夋閫変腑鏁版嵁
+
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id);
       this.single = selection.length !== 1;
       this.multiple = !selection.length;
     },
-    /** 鏂板鎸夐挳鎿嶄綔 */
+
     handleAdd() {
-      // this.$router.push({
-      //   path: "/organ/donationdetails/",
-      //   query: {
-      //     organType: "add",
-      //   }
-      // });
       this.reset();
-      //璁剧疆鎶ュ憡浜哄拰閮ㄩ棬/缁�
       this.form.reporterno = this.currentuser.userName;
       this.form.reportername = this.currentuser.nickName;
-      this.form.deptid = this.currentuser.deptid;
-
-      this.showSaveBtn = true;
-      //this.$refs.annex.getAnnexList();
       this.open = true;
-      // this.$nextTick(function() {
-      //   this.$refs.annex.getAnnexList();
-      // });
-
       this.title = "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃";
     },
-    /** 淇敼鎸夐挳鎿嶄綔 */
 
     handleUpdate(row) {
       this.$router.push({
         path: "/case/course",
-        query: {
-          id: row.id,
-          organType: "edit"
+        query: { id: row.id, organType: "edit" }
+      });
+    },
+
+    async submitForm() {
+      const valid = await this.$refs.form.validate();
+      if (!valid) return;
+
+      const formData = { ...this.form };
+
+      // 澶勭悊琛ㄥ崟鏁版嵁
+      const processedData = this.processFormData(formData);
+
+      try {
+        const res = await addDonatebaseinfo(processedData);
+        if (res.code === 200) {
+          this.$modal.msgSuccess("鏂板鎴愬姛");
+          this.$router.push({
+            path: "/organ/donationdetails/",
+            query: { id: res.data.id, organType: "edit" }
+          });
+          this.open = false;
+        } else {
+          this.$modal.msgError("鏂板澶辫触锛�" + res.msg);
+        }
+      } catch (error) {
+        this.$modal.msgError("鎿嶄綔澶辫触");
+      }
+    },
+
+    processFormData(data) {
+      const processed = { ...data };
+
+      // 澶勭悊鏁扮粍瀛楁
+      const arrayFields = [
+        "diseasetype",
+        "infectious",
+        "selfwill",
+        "othercases",
+        "infosources",
+        "kinship",
+        "patientstate"
+      ];
+      arrayFields.forEach(field => {
+        if (Array.isArray(processed[field])) {
+          processed[field] = processed[field].join(",");
         }
       });
-      // this.showSaveBtn = true;
-      // const id = row.id || this.ids;
-      // //this.$refs.annex.getAnnexList();
 
-      // getDonatebaseinfo(id).then((response) => {
-      //   this.reset();
+      // 澶勭悊鏃ユ湡瀛楁
+      if (processed.birthday) {
+        processed.birthday = this.$moment(processed.birthday).format(
+          "YYYY-MM-DD HH:mm:ss"
+        );
+      }
 
-      //   this.$nextTick(function () {
-      //     this.$refs.annex.getAnnexList();
-      //   });
-      //   this.form = response.data;
-      //   response.data.sex = parseInt(response.data.sex);
-      //   this.form.id = response.data.id;
-      //   this.form.diseasetype = this.form.diseasetype.split(",");
-      //   this.form.infectious = this.form.infectious.split(",");
-      //   this.form.selfwill = this.form.selfwill.split(",");
-      //   this.form.othercases = this.form.othercases.split(",");
-      //   this.form.infosources = this.form.infosources.split(",");
-      //   this.form.kinship = this.form.kinship.split(",");
-      //   this.form.patientstate = this.form.patientstate.split(",");
-      //   this.open = true;
-      //   this.title = "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃";
-      //   this.registerAddresss.sheng = response.data.registerprovincename;
-      //   this.residenceAddresss.sheng = response.data.residenceprovincename;
-      //   this.registerAddresss.shi = response.data.registercityname;
-      //   this.residenceAddresss.shi = response.data.residencecityname;
-      //   this.residenceAddresss.qu = response.data.residencetownname;
-      //   this.registerAddresss.qu = response.data.registertownname;
-      // });
+      processed.donatetime = processed.reporttime;
+      processed.workflow = 0;
+      processed.recordstate = 0;
+
+      return processed;
     },
-    // 缁堟妗堜緥
-    handletermination(row) {
-      this.reset();
-      this.showSaveBtn = false;
-      this.showTerminationBtn = true;
-      const id = row.id || this.ids;
-      getDonatebaseinfo(id).then(response => {
-        this.form = response.data;
-        this.form.diseasetype = this.form.diseasetype.split(",");
-        this.form.infectious = this.form.infectious.split(",");
-        this.form.selfwill = this.form.selfwill.split(",");
-        this.form.othercases = this.form.othercases.split(",");
-        this.form.infosources = this.form.infosources.split(",");
-        this.form.kinship = this.form.kinship.split(",");
-        this.form.patientstate = this.form.patientstate.split(",");
-        this.registerAddresss.sheng = response.data.registerprovincename;
-        this.residenceAddresss.sheng = response.data.residenceprovincename;
-        this.registerAddresss.shi = response.data.registercityname;
-        this.residenceAddresss.shi = response.data.residencecityname;
-        this.residenceAddresss.qu = response.data.residencetownname;
-        this.registerAddresss.qu = response.data.registertownname;
-        this.open = true;
-        this.title = "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃";
-        this.form.recordstate = 99;
-        // this.$nextTick(function() {
-        //   this.$refs.annex.getAnnexList();
-        // });
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm() {
-      console.log(this.form);
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          const date = { ...this.form };
-          console.log(date, "date");
-          this.form.birthday = this.$moment(this.form.birthday).format(
-            "YYYY-MM-DD HH:mm:ss"
-          );
-          this.form.diseasetype = this.form.diseasetype.join(",");
-          this.form.infectious = this.form.infectious.join(",");
-          this.form.selfwill = this.form.selfwill.join(",");
-          this.form.othercases = this.form.othercases.join(",");
-          this.form.infosources = this.form.infosources.join(",");
-          this.form.kinship = this.form.kinship.join(",");
-          this.form.patientstate = this.form.patientstate.join(",");
-          this.form.registerprovince = this.$refs.registerSelect.getSheng();
-          this.form.registerprovincename = this.registerAddresss.sheng;
 
-          this.form.residenceprovince = this.$refs.residenceSelect.getSheng();
-          this.form.residenceprovincename = this.residenceAddresss.sheng;
+    async handleExport() {
+      try {
+        await this.$modal.confirm("鏄惁纭瀵煎嚭鎵�鏈夋崘鐚熀纭�鏁版嵁椤癸紵");
+        this.exportLoading = true;
 
-          this.form.registercity = this.$refs.registerSelect.getShi();
-          this.form.registercityname = this.registerAddresss.shi;
-
-          this.form.residencecity = this.$refs.residenceSelect.getShi();
-          this.form.residencecityname = this.residenceAddresss.shi;
-
-          this.form.residencetown = this.$refs.residenceSelect.getQu();
-          this.form.residencetownname = this.residenceAddresss.qu;
-
-          this.form.registertown = this.$refs.registerSelect.getQu();
-          this.form.registertownname = this.registerAddresss.qu;
-
-          this.form.reportername = this.$refs.getReportname.$data.selectedLabel;
-          this.form.donatetime = this.form.reporttime;
-
-          try {
-            this.form.treatmenthospitalname = this.$refs.addOrgSelect.getOptionByValue(
-              this.form.treatmenthospitalno
-            ).organizationname;
-          } catch {
-            this.form.treatmenthospitalname = this.form.treatmenthospitalno;
-          }
-
-          try {
-            this.form.redorganname = this.$refs.addCrossOrgSelect.getOptionByValue(
-              this.form.redorganno
-            ).organizationname;
-          } catch {
-            this.form.redorganname = this.form.redorganno;
-          }
-
-          this.form.workflow = 0;
-          this.form.recordstate = 0;
-          addDonatebaseinfo(this.form).then(res => {
-            console.log("22");
-            console.log(res.code);
-            if (res.code == 200) {
-              this.$modal.msgSuccess("鏂板鎴愬姛");
-              this.$router.push({
-                path: "/organ/donationdetails/",
-                query: {
-                  id: res.data.id,
-                  organType: "edit"
-                }
-              });
-              this.open = false;
-            } else {
-              console.log("1");
-              this.form = date;
-              console.log(this.form, "form");
-              this.$modal.msgError("鏂板澶辫触锛�" + res.msg);
-            }
-          });
+        const response = await exportDonatebaseinfo(this.queryParams);
+        this.$download.name(response.msg);
+      } catch (error) {
+        if (error !== "cancel") {
+          this.$modal.msgError("瀵煎嚭澶辫触");
         }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$modal
-        .confirm('鏄惁纭鍒犻櫎鎹愮尞鍩虹缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�')
-        .then(function() {
-          return delDonatebaseinfo(ids);
-        })
-        .then(() => {
-          this.getList();
-          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(() => {});
-    },
-
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$modal
-        .confirm("鏄惁纭瀵煎嚭鎵�鏈夋崘鐚熀纭�鏁版嵁椤癸紵")
-        .then(() => {
-          this.exportLoading = true;
-          return exportDonatebaseinfo(queryParams);
-        })
-        .then(response => {
-          this.$download.name(response.msg);
-          this.exportLoading = false;
-        })
-        .catch(() => {});
-    },
-
-    // 瀵硅薄杞垚鎸囧畾瀛楃涓插垎闅�
-    listToString(list, separator) {
-      let strs = "";
-      separator = separator || ",";
-      for (let i in list) {
-        strs += list[i] + separator;
+      } finally {
+        this.exportLoading = false;
       }
-      return strs != "" ? strs.substr(0, strs.length - 1) : "";
-    },
-    //瀛楃涓叉牴鎹寚瀹氬瓧绗︿覆鍒嗛殧
-    stringToList(str, separator) {
-      separator = separator || ",";
-      let tempList = [];
-      if (str != null && str != undefined && str != "") {
-        tempList = str.split(separator);
-      }
-      return tempList;
-    },
-
-    //涓嬭浇娼滃湪鐧昏琛�
-    handledownload(row) {
-      const id = row.id || this.ids;
-
-      downloadbaseinfo(id).then(res => {
-        var fileUrl = res;
-        //鑾峰彇褰撳墠缃戝潃
-        var urlBase = process.env.VUE_APP_BASE_API;
-        var curWWWPath = window.document.location.href;
-        var pos = curWWWPath.indexOf(window.document.location.pathname);
-        // 鍒涘缓a鏍囩
-        var aEle = document.createElement("a");
-        aEle.href =
-          curWWWPath.substring(0, pos) + urlBase + fileUrl["downloadUrl"];
-        console.log(aEle.href);
-        // 娣诲姞Authorization澶撮儴
-        fetch(aEle.href, {
-          headers: this.headers
-        })
-          .then(response => {
-            // 灏嗘枃浠朵笅杞介摼鎺ヤ綔涓篵lob瀵硅薄杩涜涓嬭浇
-            return response.blob();
-          })
-          .then(blob => {
-            const url = window.URL.createObjectURL(new Blob([blob]));
-            console.log(url);
-            const link = document.createElement("a");
-            link.href = url;
-            const name = fileUrl["downloadName"];
-            link.setAttribute("download", name); // 鏇挎崲file.pdf涓哄疄闄呯殑鏂囦欢鍚�
-            document.body.appendChild(link);
-            link.click();
-            link.parentNode.removeChild(link);
-          });
-      });
     }
   }
 };

--
Gitblit v1.9.3