From 9b2c74ee4f08fad01c2a16bc6e36df073bfa1dd5 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期五, 24 四月 2026 09:12:13 +0800
Subject: [PATCH] 推送

---
 src/api/businessApi/decide.js                               |    7 
 src/views/project/donatebaseinfo/EditCaseModal.vue          |   17 
 src/views/business/decide/DecideInfo.vue                    |  141 -
 src/views/project/donatebaseinfo/index.vue                  |    6 
 src/views/business/affirm/index.vue                         |    4 
 src/views/business/ethicalReview/ethicalReviewInfo.vue      | 1017 +++++++-------
 src/views/business/decide/index.vue                         |    8 
 src/views/business/maintain/index.vue                       |   20 
 src/views/business/appear/index.vue                         |  148 +-
 src/views/business/assess/index.vue                         |    2 
 src/views/business/transfer/index.vue                       |   71 
 src/views/business/ethicalReview/ethicalReviewInfo copy.vue | 1536 ++++++++++++++++++++++
 src/views/project/DonationProcess/index.vue                 |    2 
 src/components/CaseBasicInfo/index.vue                      |  400 +++++
 src/views/business/affirm/affirmInfo.vue                    |   60 
 src/views/business/maintain/maintainInfo.vue                |  227 +-
 src/views/business/appear/caseDetail.vue                    |   16 
 src/views/business/ethicalReview/index.vue                  |   14 
 src/views/business/assess/assessInfo.vue                    |  443 +++--
 19 files changed, 3,059 insertions(+), 1,080 deletions(-)

diff --git a/src/api/businessApi/decide.js b/src/api/businessApi/decide.js
index 9a34d31..5e2e70b 100644
--- a/src/api/businessApi/decide.js
+++ b/src/api/businessApi/decide.js
@@ -16,6 +16,13 @@
     data: data
   })
 }
+export function deathinfoadd(data) {
+  return request({
+    url: '/project/deathinfo/add',
+    method: 'post',
+    data: data
+  })
+}
 // 姝讳骸淇℃伅璇︽儏
 export function deathinfoInfo(id) {
   return request({
diff --git a/src/components/CaseBasicInfo/index.vue b/src/components/CaseBasicInfo/index.vue
new file mode 100644
index 0000000..c7a9c90
--- /dev/null
+++ b/src/components/CaseBasicInfo/index.vue
@@ -0,0 +1,400 @@
+<template>
+  <el-card class="basic-info-card" v-loading="loading">
+    <div slot="header" class="clearfix">
+      <span>妗堜緥鍩烘湰淇℃伅</span>
+      <el-button
+        v-if="showAttachment && hasAttachments"
+        style="float: right; padding: 3px 0"
+        type="text"
+        @click="handleAttachmentPreview"
+      >
+        <i class="el-icon-folder-opened"></i> 鏌ョ湅闄勪欢
+      </el-button>
+    </div>
+
+    <el-descriptions v-if="basicData" :column="column" border>
+      <!-- 1. 妗堜緥缂栧彿 -->
+      <el-descriptions-item label="妗堜緥缂栧彿">
+        {{ basicData.caseNo || "--" }}
+      </el-descriptions-item>
+
+      <!-- 2. 娼滃湪鎹愮尞鑰呭鍚� -->
+      <el-descriptions-item label="鎹愮尞鑰呭鍚�">
+        {{ basicData.name || basicData.donorName || "--" }}
+      </el-descriptions-item>
+
+      <!-- 3. 鎬у埆/骞撮緞 -->
+      <el-descriptions-item label="鎬у埆/骞撮緞">
+        <span v-if="basicData.sex">
+          <dict-tag
+            v-if="useDict"
+            :options="sexOptions"
+            :value="basicData.sex"
+          />
+          <template v-else>{{ basicData.sex == "1" ? "鐢�" : "濂�" }}</template>
+        </span>
+        <span v-if="basicData.age">
+          / {{ basicData.age }}{{ basicData.ageunit || "宀�" }}</span
+        >
+        <span v-if="!basicData.sex && !basicData.age">--</span>
+      </el-descriptions-item>
+
+      <!-- 4. 璇佷欢鍙风爜 -->
+      <el-descriptions-item label="璇佷欢鍙风爜">
+        {{ basicData.idcardno || basicData.idCardNo || "--" }}
+      </el-descriptions-item>
+
+      <!-- 5. 琛�鍨� -->
+      <el-descriptions-item label="琛�鍨�">
+        <template v-if="basicData.bloodType || basicData.bloodtype">
+          {{ basicData.bloodType || basicData.bloodtype }}
+        </template>
+        <template v-else>--</template>
+      </el-descriptions-item>
+
+      <!-- 6. 鐤剧梾璇婃柇 -->
+      <el-descriptions-item label="鐤剧梾璇婃柇">
+        {{ basicData.diagnosisname || basicData.diagnosis || "--" }}
+      </el-descriptions-item>
+
+      <!-- 7. 鎵�鍦ㄥ尰鐤楁満鏋� -->
+      <el-descriptions-item label="鎵�鍦ㄥ尰鐤楁満鏋�">
+        {{ basicData.treatmenthospitalname || basicData.hospitalName || "--" }}
+      </el-descriptions-item>
+
+      <!-- 8. 鍗忚皟鍛� -->
+      <el-descriptions-item label="鍗忚皟鍛�">
+        {{ basicData.coordinatorName || basicData.contactPerson || "--" }}
+      </el-descriptions-item>
+
+      <!-- 9. 涓婃姤鏃堕棿 -->
+      <el-descriptions-item label="涓婃姤鏃堕棿">
+        {{ formatDateTime(basicData.reportTime) || "--" }}
+      </el-descriptions-item>
+
+      <!-- 10. 妗堜緥鐘舵�� -->
+      <el-descriptions-item label="妗堜緥杩涘害">
+        <!-- <el-tag :type="getReportStatusType(basicData.workflow)" size="small">
+          {{ getReportStatusText(basicData.workflow) }}
+        </el-tag> -->
+        <div>
+          <dict-tag
+            :options="dict.type.sys_donornode"
+            :value="basicData.workflow"
+          />
+        </div>
+      </el-descriptions-item>
+
+      <!-- 11. 杞繍鐘舵�侊紙鏍规嵁闇�姹傚彲閫夛級 -->
+      <el-descriptions-item v-if="showTransport" label="杞繍鐘舵��">
+        <el-tag
+          :type="getTransportStatusType(basicData.isTransport)"
+          size="small"
+        >
+          {{ getTransportStatusText(basicData.isTransport) }}
+        </el-tag>
+      </el-descriptions-item>
+    </el-descriptions>
+
+    <!-- 绌虹姸鎬� -->
+    <div v-else class="empty-state">
+      <el-empty description="鏆傛棤妗堜緥淇℃伅" :image-size="100"></el-empty>
+    </div>
+  </el-card>
+</template>
+
+<script>
+import { getDonatebaseinfo } from "@/api/project/donatebaseinfo";
+
+export default {
+  name: "CaseBasicInfoSimple",
+  props: {
+    // 妗堜緥ID
+    caseId: {
+      type: [String, Number],
+      required: true
+    },
+    // 鍒楁暟
+    column: {
+      type: Number,
+      default: 2
+    },
+    // 鏄惁鏄剧ず闄勪欢鎸夐挳
+    showAttachment: {
+      type: Boolean,
+      default: false
+    },
+    // 鏄惁浣跨敤瀛楀吀
+    useDict: {
+      type: Boolean,
+      default: false
+    },
+    // 鏄惁鏄剧ず杞繍鐘舵��
+    showTransport: {
+      type: Boolean,
+      default: false
+    },
+    // 鏄惁鑷姩鍔犺浇
+    autoLoad: {
+      type: Boolean,
+      default: true
+    },
+    // 澶栭儴浼犲叆鐨勬暟鎹紙涓嶈皟鐢ㄦ帴鍙o級
+    externalData: {
+      type: Object,
+      default: null
+    },
+    // 鑷畾涔夊瓧娈靛垪琛�
+    fields: {
+      type: Array,
+      default: () => [
+        "caseNo", // 妗堜緥缂栧彿
+        "name", // 濮撳悕
+        "sexAge", // 鎬у埆/骞撮緞
+        "idcardno", // 璇佷欢鍙风爜
+        "bloodType", // 琛�鍨�
+        "diagnosis", // 鐤剧梾璇婃柇
+        "hospital", // 鍖荤枟鏈烘瀯
+        "coordinator", // 鍗忚皟鍛�
+        "reportTime", // 涓婃姤鏃堕棿
+        "status" // 妗堜緥鐘舵��
+      ]
+    }
+  },
+  dicts: [
+    "sys_user_sex",
+    "sys_BloodType",
+    "sys_DonationCategory",
+    "sys_donornode"
+  ],
+  data() {
+    return {
+      loading: false,
+      basicData: null,
+      // 瀛楀吀閫夐」
+      sexOptions: [],
+      bloodTypeOptions: []
+    };
+  },
+  computed: {
+    hasAttachments() {
+      return (
+        this.basicData &&
+        (this.basicData.assessannex || this.basicData.attachments)
+      );
+    }
+  },
+  watch: {
+    caseId: {
+      handler(newVal) {
+        if (newVal && this.autoLoad && !this.externalData) {
+          this.loadBasicInfo();
+        }
+      },
+      immediate: true
+    },
+    externalData: {
+      handler(newVal) {
+        if (newVal) {
+          this.basicData = this.mapExternalData(newVal);
+        }
+      },
+      immediate: true
+    }
+  },
+  created() {
+    if (this.useDict) {
+      this.loadDicts();
+    }
+
+    if (this.caseId && this.autoLoad && !this.externalData) {
+      this.loadBasicInfo();
+    } else if (this.externalData) {
+      this.basicData = this.mapExternalData(this.externalData);
+    }
+  },
+  methods: {
+    // 鍔犺浇瀛楀吀
+    async loadDicts() {
+      try {
+        // 鍔犺浇鎬у埆瀛楀吀
+        this.sexOptions = [
+          { dictLabel: "鐢�", dictValue: "1" },
+          { dictLabel: "濂�", dictValue: "2" }
+        ];
+
+        // 鍔犺浇琛�鍨嬪瓧鍏�
+        this.bloodTypeOptions = [
+          { dictLabel: "A鍨�", dictValue: "A" },
+          { dictLabel: "B鍨�", dictValue: "B" },
+          { dictLabel: "O鍨�", dictValue: "O" },
+          { dictLabel: "AB鍨�", dictValue: "AB" }
+        ];
+      } catch (error) {
+        console.warn("鍔犺浇瀛楀吀澶辫触:", error);
+      }
+    },
+
+    // 鍔犺浇鍩烘湰淇℃伅
+    async loadBasicInfo() {
+      if (!this.caseId) return;
+
+      this.loading = true;
+      try {
+        const response = await getDonatebaseinfo(this.caseId);
+
+        if (response.code === 200) {
+          this.basicData = this.mapApiData(response.data);
+          console.log(this.basicData );
+
+          this.loading = false;
+        } else {
+          this.$message.error(
+            "鑾峰彇妗堜緥淇℃伅澶辫触锛�" + (response.msg || "鏈煡閿欒")
+          );
+        }
+      } catch (error) {
+        console.error("鍔犺浇妗堜緥鍩烘湰淇℃伅澶辫触:", error);
+        this.$message.error("鍔犺浇澶辫触锛岃閲嶈瘯");
+      } finally {
+        this.loading = false;
+      }
+    },
+
+    // 鏄犲皠API鏁版嵁
+    mapApiData(apiData) {
+      if (!apiData) return null;
+
+      return {
+        // 鏍稿績瀛楁
+        caseNo: apiData.caseNo,
+        name: apiData.name || apiData.donorName,
+        donorName: apiData.donorName,
+        sex: apiData.sex,
+        age: apiData.age,
+        ageunit: apiData.ageunit,
+        workflow: apiData.workflow,
+        bloodType: apiData.bloodType || apiData.bloodtype,
+        idcardno: apiData.idcardno || apiData.idCardNo,
+        diagnosisname: apiData.diagnosisname || apiData.diagnosis,
+        treatmenthospitalname:
+          apiData.treatmenthospitalname || apiData.hospitalName,
+        coordinatorName: apiData.coordinatorName || apiData.contactPerson,
+        reportTime: apiData.reporttime,
+        reportStatus: apiData.reportStatus,
+        isTransport: apiData.isTransport,
+
+        // 闄勪欢瀛楁
+        assessannex: apiData.assessannex,
+        attachments: apiData.attachments
+      };
+    },
+
+    // 鏄犲皠澶栭儴鏁版嵁
+    mapExternalData(externalData) {
+      return this.mapApiData(externalData);
+    },
+
+    // 鏍煎紡鍖栨棩鏈熸椂闂�
+    formatDateTime(dateTimeStr) {
+      if (!dateTimeStr) return "";
+      try {
+        const date = new Date(dateTimeStr);
+        return date
+          .toLocaleString("zh-CN", {
+            year: "numeric",
+            month: "2-digit",
+            day: "2-digit",
+            hour: "2-digit",
+            minute: "2-digit",
+            second: "2-digit"
+          })
+          .replace(/\//g, "-");
+      } catch (e) {
+        return dateTimeStr;
+      }
+    },
+
+    // 涓婃姤鐘舵�佺浉鍏�
+    getReportStatusType(status) {
+      const statusMap = {
+        "1": "warning", // 宸蹭笂鎶�
+        "2": "primary", // 宸查槄璇�
+        "3": "success", // 宸插悓鎰�
+        "4": "danger" // 宸查┏鍥�
+      };
+      return statusMap[status] || "info";
+    },
+
+    getReportStatusText(status) {
+      const statusMap = {
+        "0": "娼滃湪鎹愮尞",
+        "2": "宸查槄璇�",
+        "3": "宸插悓鎰�",
+        "4": "宸查┏鍥�"
+      };
+      return statusMap[status] || "鏈煡";
+    },
+
+    // 杞繍鐘舵�佺浉鍏�
+    getTransportStatusType(status) {
+      const statusMap = {
+        "1": "warning", // 鏃犻渶杞繍
+        "2": "primary", // 闇�杞繍
+        "3": "success", // 杞繍涓�
+        "4": "danger" // 杞繍瀹屾垚
+      };
+      return statusMap[status] || "info";
+    },
+
+    getTransportStatusText(status) {
+      const statusMap = {
+        "1": "鏃犻渶杞繍",
+        "2": "闇�杞繍",
+        "3": "杞繍涓�",
+        "4": "杞繍瀹屾垚"
+      };
+      return statusMap[status] || "鏈煡";
+    },
+
+    // 鏌ョ湅闄勪欢
+    handleAttachmentPreview() {
+      this.$emit("attachment-preview", this.basicData);
+    },
+
+    // 鍒锋柊鏁版嵁
+    async refresh() {
+      await this.loadBasicInfo();
+    },
+
+    // 鑾峰彇鏁版嵁
+    getData() {
+      return this.basicData;
+    }
+  }
+};
+</script>
+
+<style scoped>
+.basic-info-card {
+  margin-bottom: 20px;
+}
+
+.clearfix::after {
+  content: "";
+  display: table;
+  clear: both;
+}
+
+.empty-state {
+  padding: 40px 0;
+  text-align: center;
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+  .basic-info-card {
+    margin: 10px;
+  }
+}
+</style>
diff --git a/src/views/business/affirm/affirmInfo.vue b/src/views/business/affirm/affirmInfo.vue
index f7db6d5..bc14269 100644
--- a/src/views/business/affirm/affirmInfo.vue
+++ b/src/views/business/affirm/affirmInfo.vue
@@ -1,9 +1,11 @@
 <template>
   <div class="confirmation-detail">
+    <case-basic-info :case-id="caseId" :show-attachment="true" />
+
     <el-card class="detail-card">
       <!-- 鍩虹淇℃伅 -->
       <div slot="header" class="clearfix">
-        <span class="detail-title">鎹愮尞纭鍩烘湰淇℃伅</span>
+        <span class="detail-title">鎹愮尞纭淇℃伅</span>
         <el-button
           type="success"
           style="float: right;"
@@ -15,45 +17,6 @@
       </div>
 
       <el-form :model="form" ref="form" label-width="120px">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="浣忛櫌鍙�" prop="caseNo">
-              <el-input v-model="form.caseNo" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <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="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>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="骞撮緞" prop="age">
-              <el-input v-model="form.age" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <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="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="coordinatedusernameo">
@@ -91,7 +54,6 @@
               <el-date-picker
                 v-model="form.signdate"
                 type="datetime"
-                value-format="yyyy-MM-dd"
                 style="width: 100%"
               />
             </el-form-item>
@@ -343,15 +305,18 @@
 <script>
 import { relativesList, relativesEdit, relativesAdd } from "@/api/businessApi";
 import FilePreviewDialog from "@/components/FilePreviewDialog";
-
+import CaseBasicInfo from "@/components/CaseBasicInfo";
 export default {
   name: "ConfirmationDetail",
   components: {
-    FilePreviewDialog
+    FilePreviewDialog,
+    CaseBasicInfo
   },
   dicts: ["sys_FamilyRelation"],
   data() {
     return {
+      caseId: null,
+
       // 鏄惁缂栬緫妯″紡
       isEdit: false,
       // 琛ㄥ崟鏁版嵁
@@ -394,6 +359,7 @@
       // 鍔犺浇鐘舵��
       loading: false,
       saveLoading: false,
+      infoid:null,
       // 闄勪欢鐩稿叧鏁版嵁
       activeAttachmentType: "1",
       attachmentLoading: false,
@@ -435,10 +401,11 @@
     }
   },
   created() {
-    const infoid = this.$route.query.infoid;
+    this.infoid = this.$route.query.infoid;
+    this.caseId = this.$route.query.infoid;
     this.isEdit = this.$route.query.confirm === "true";
-    if (infoid) {
-      this.getDetail(infoid);
+    if (this.infoid) {
+      this.getDetail(this.infoid);
     }
   },
   methods: {
@@ -801,6 +768,7 @@
 
         const saveData = {
           ...this.form,
+          infoid: this.infoid,
           organdecision: this.organdecision.join(","),
           organdecisionOther: this.organdecisionOther
           // assessannex瀛楁宸插湪updateAssessannexField涓洿鏂�
diff --git a/src/views/business/affirm/index.vue b/src/views/business/affirm/index.vue
index 4ab4aed..879a728 100644
--- a/src/views/business/affirm/index.vue
+++ b/src/views/business/affirm/index.vue
@@ -71,7 +71,7 @@
     <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 type="primary" icon="el-icon-plus" @click="handleCreate"
             >鏂板纭</el-button
           >
           <el-button
@@ -87,7 +87,7 @@
             :disabled="multiple"
             @click="handleDelete"
             >鍒犻櫎</el-button
-          >
+          > -->
           <el-button
             type="warning"
             icon="el-icon-download"
diff --git a/src/views/business/appear/caseDetail.vue b/src/views/business/appear/caseDetail.vue
index 362085c..b4c0a47 100644
--- a/src/views/business/appear/caseDetail.vue
+++ b/src/views/business/appear/caseDetail.vue
@@ -63,7 +63,7 @@
     </el-card>
 
     <!-- 鍦板潃淇℃伅妯″潡 -->
-    <el-card class="detail-section">
+    <!-- <el-card class="detail-section">
       <div slot="header" class="section-header">
         <span class="section-title">鍦板潃淇℃伅</span>
       </div>
@@ -75,7 +75,7 @@
           {{ getFullResidenceAddress() }}
         </el-descriptions-item>
       </el-descriptions>
-    </el-card>
+    </el-card> -->
 
     <!-- 鍖荤枟淇℃伅妯″潡 -->
     <el-card class="detail-section">
@@ -86,12 +86,12 @@
         <el-descriptions-item label="鐤剧梾璇婃柇鍚嶇О">{{
           caseData.diagnosisname || "-"
         }}</el-descriptions-item>
-        <el-descriptions-item label="鐥呮儏姒傚喌">{{
+        <!-- <el-descriptions-item label="鐥呮儏姒傚喌">{{
           caseData.illnessoverview || "-"
         }}</el-descriptions-item>
         <el-descriptions-item label="鐥呬汉鐘跺喌">{{
           caseData.patientstate || "-"
-        }}</el-descriptions-item>
+        }}</el-descriptions-item> -->
         <el-descriptions-item label="GCS璇勫垎">{{
           caseData.gcsScore || "-"
         }}</el-descriptions-item>
@@ -118,18 +118,18 @@
         <el-descriptions-item label="娌荤枟鍖婚櫌鍚嶇О">{{
           caseData.treatmenthospitalname || "-"
         }}</el-descriptions-item>
-        <el-descriptions-item label="娌荤枟绉戝鍚嶇О">{{
+        <!-- <el-descriptions-item label="娌荤枟绉戝鍚嶇О">{{
           caseData.treatmentdeptname || "-"
-        }}</el-descriptions-item>
+        }}</el-descriptions-item> -->
         <el-descriptions-item label="浣忛櫌鍙�">{{
           caseData.inpatientno || "-"
         }}</el-descriptions-item>
         <el-descriptions-item label="閮ㄩ棬鍚嶇О">{{
           caseData.deptName || "-"
         }}</el-descriptions-item>
-        <el-descriptions-item label="閮ㄩ棬缂栧彿">{{
+        <!-- <el-descriptions-item label="閮ㄩ棬缂栧彿">{{
           caseData.deptNo || "-"
-        }}</el-descriptions-item>
+        }}</el-descriptions-item> -->
         <el-descriptions-item label="涓婃姤鍖婚櫌">{{
           caseData.toHospital || "-"
         }}</el-descriptions-item>
diff --git a/src/views/business/appear/index.vue b/src/views/business/appear/index.vue
index 4c578c3..18fc743 100644
--- a/src/views/business/appear/index.vue
+++ b/src/views/business/appear/index.vue
@@ -16,10 +16,10 @@
             style="width: 200px"
           />
         </el-form-item>
-        <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
+        <el-form-item label="鎮h�呭鍚�" prop="name">
           <el-input
             v-model="queryParams.name"
-            placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
+            placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
             clearable
             style="width: 200px"
           />
@@ -88,7 +88,26 @@
         width="160"
       />
       <el-table-column
-        label="鎹愮尞鑰呭鍚�"
+        label="鐘舵��"
+        align="center"
+        prop="reportStatus"
+        width="100"
+      >
+        <template #default="scope">
+          <el-tag :type="scope.row.reportStatus | statusFilter">
+            {{ scope.row.reportStatus | statusTextFilter }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="杞繍鐘舵��" align="center" width="100">
+        <template #default="scope">
+          <el-tag :type="getTransportStatusTag(scope.row)">
+            {{ getTransportStatusText(scope.row) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="鎮h�呭鍚�"
         align="center"
         prop="name"
         width="100"
@@ -127,32 +146,8 @@
         prop="treatmenthospitalname"
         width="150"
       />
-      <el-table-column
-        label="鐘舵��"
-        align="center"
-        prop="reportStatus"
-        width="100"
-      >
-        <template #default="scope">
-          <el-tag :type="scope.row.reportStatus | statusFilter">
-            {{ scope.row.reportStatus | statusTextFilter }}
-          </el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="杞繍鐘舵��" align="center" width="100">
-        <template #default="scope">
-          <el-tag :type="getTransportStatusTag(scope.row)">
-            {{ getTransportStatusText(scope.row) }}
-          </el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column
-        label="鎿嶄綔"
-        align="center"
-        fixed="right"
-        class-name="small-padding fixed-width"
-        width="350"
-      >
+
+      <el-table-column label="鎿嶄綔" align="center" fixed="right" width="350">
         <template #default="scope">
           <el-button
             size="mini"
@@ -179,13 +174,13 @@
             icon="el-icon-check"
             @click="handleApprove(scope.row)"
             v-if="scope.row.reportStatus === '2' && scope.row.delFlag === 0"
-            >瀹℃壒</el-button
+            >纭</el-button
           >
           <el-button
             size="mini"
             type="text"
             icon="el-icon-truck"
-            :type="shouldShowTransportButton(scope.row) ? 'primary' : 'text'"
+            :type="getTransportStatustype(scope.row)"
             @click="handleTransport(scope.row)"
             v-if="shouldShowTransportButton(scope.row)"
             :disabled="!canGoToTransport(scope.row)"
@@ -216,9 +211,9 @@
       <case-detail :caseData="currentCase" @close="detailOpen = false" />
     </el-dialog>
 
-    <!-- 瀹℃壒寮规 -->
+    <!-- 纭寮规 -->
     <el-dialog
-      title="妗堜緥瀹℃壒"
+      title="妗堜緥纭"
       :visible.sync="approveOpen"
       width="80vw"
       append-to-body
@@ -236,7 +231,7 @@
           </div>
         </el-aside>
 
-        <!-- 鍙充晶锛氬鎵硅〃鍗� -->
+        <!-- 鍙充晶锛氱‘璁よ〃鍗� -->
         <el-main style="padding: 20px;">
           <el-form
             ref="approveForm"
@@ -244,17 +239,17 @@
             :rules="approveRules"
             label-width="100px"
           >
-            <el-form-item label="瀹℃壒缁撴灉" prop="approveResult">
+            <el-form-item label="纭缁撴灉" prop="approveResult">
               <el-radio-group v-model="approveForm.approveResult">
                 <el-radio label="3">鍚屾剰</el-radio>
                 <el-radio label="4">椹冲洖</el-radio>
               </el-radio-group>
             </el-form-item>
-            <el-form-item label="瀹℃壒鎰忚" prop="approveOpinion">
+            <el-form-item label="纭鎰忚" prop="approveOpinion">
               <el-input
                 type="textarea"
                 v-model="approveForm.approveOpinion"
-                placeholder="璇疯緭鍏ヨ缁嗙殑瀹℃壒鎰忚锛屽寘鎷�氳繃鎴栭┏鍥炵殑鐞嗙敱"
+                placeholder="璇疯緭鍏ヨ缁嗙殑纭鎰忚锛屽寘鎷�氳繃鎴栭┏鍥炵殑鐞嗙敱"
                 :rows="6"
                 maxlength="500"
                 show-word-limit
@@ -305,10 +300,10 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
+              <el-form-item label="鎮h�呭鍚�" prop="name">
                 <el-input
                   v-model="editForm.name"
-                  placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
+                  placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
                 />
               </el-form-item>
             </el-col>
@@ -361,10 +356,10 @@
                   placeholder="璇烽�夋嫨琛�鍨�"
                   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="A鍨�" :value="1" />
+                  <el-option label="B鍨�" :value="2" />
+                  <el-option label="O鍨�" :value="3" />
+                  <el-option label="AB鍨�" :value="4" />
                 </el-select>
               </el-form-item>
             </el-col>
@@ -984,7 +979,7 @@
       caseList: [],
       // 璇︽儏寮规鏄惁鏄剧ず
       detailOpen: false,
-      // 瀹℃壒寮规鏄惁鏄剧ず
+      // 纭寮规鏄惁鏄剧ず
       approveOpen: false,
       // 缂栬緫寮规鏄惁鏄剧ず
       editOpen: false,
@@ -1002,19 +997,19 @@
         name: undefined,
         reportStatus: undefined
       },
-      // 瀹℃壒琛ㄥ崟
+      // 纭琛ㄥ崟
       approveForm: {
         id: null,
         approveResult: "3",
         approveOpinion: ""
       },
-      // 瀹℃壒琛ㄥ崟楠岃瘉
+      // 纭琛ㄥ崟楠岃瘉
       approveRules: {
         approveResult: [
-          { required: true, message: "璇烽�夋嫨瀹℃壒缁撴灉", trigger: "change" }
+          { required: true, message: "璇烽�夋嫨纭缁撴灉", trigger: "change" }
         ],
         approveOpinion: [
-          { required: true, message: "璇疯緭鍏ュ鎵规剰瑙�", trigger: "blur" }
+          { required: true, message: "璇疯緭鍏ョ‘璁ゆ剰瑙�", trigger: "blur" }
         ]
       },
       // 缂栬緫琛ㄥ崟
@@ -1025,7 +1020,7 @@
           { required: true, message: "璇疯緭鍏ユ渚嬬紪鍙�", trigger: "blur" }
         ],
         name: [
-          { required: true, message: "璇疯緭鍏ユ崘鐚�呭鍚�", trigger: "blur" }
+          { required: true, message: "璇疯緭鍏ユ偅鑰呭鍚�", trigger: "blur" }
         ],
         sex: [{ required: true, message: "璇烽�夋嫨鎬у埆", trigger: "change" }],
         age: [{ required: true, message: "璇疯緭鍏ュ勾榫�", trigger: "blur" }],
@@ -1052,7 +1047,7 @@
     statusFilter(reportStatus) {
       const statusMap = {
         "1": "info", // 宸蹭笂鎶�
-        "2": "warning", // 宸查槄璇伙紙寰呭鎵癸級
+        "2": "warning", // 宸查槄璇伙紙寰呯‘璁わ級
         "3": "success", // 宸插悓鎰�
         "4": "danger" // 宸查┏鍥�
       };
@@ -1112,12 +1107,29 @@
         ) {
           return "鏌ョ湅杞繍鍗�";
         } else {
-          return "鍓嶅線杞繍鍗�";
+          return "鍒涘缓杞繍鍗�";
         }
       }
-      return "杞繍";
+      return "鏃犻渶杞繍";
     },
-
+    getTransportStatustype(row) {
+      if (row.isTransport == "1") {
+        return "info"; // 涓嶉渶瑕佽浆杩�
+      }
+      if (
+        row.serviceTransport &&
+        Array.isArray(row.serviceTransport) &&
+        row.serviceTransport.length > 0
+      ) {
+        // 鏍规嵁杞繍鍗曠姸鎬佹樉绀轰笉鍚岄鑹�
+        const transport = row.serviceTransport[0];
+        if (transport.transitStatus) {
+         return "primary"; // 鏈夎浆杩愪俊鎭絾鏃犵姸鎬�
+        }
+        return "primary"; // 鏈夎浆杩愪俊鎭絾鏃犵姸鎬�
+      }
+      return "success"; // 闇�瑕佽浆杩愪絾鏃犺浆杩愪俊鎭�
+    },
     /** 鑾峰彇杞繍鐘舵�佹爣绛炬牱寮� */
     getTransportStatusTag(row) {
       if (row.isTransport === "1") {
@@ -1148,7 +1160,7 @@
         }
         return "primary"; // 鏈夎浆杩愪俊鎭絾鏃犵姸鎬�
       }
-      return "danger"; // 闇�瑕佽浆杩愪絾鏃犺浆杩愪俊鎭�
+      return "success"; // 闇�瑕佽浆杩愪絾鏃犺浆杩愪俊鎭�
     },
 
     /** 鑾峰彇杞繍鐘舵�佹枃鏈� */
@@ -1197,7 +1209,7 @@
           ) {
             // 宸叉湁杞繍鍗曪紝璺宠浆鍒拌浆杩愬崟璇︽儏椤�
             const transport = caseData.serviceTransport[0];
-            this.goToTransportDetail(transport.id, row.caseNo);
+            this.goToTransportDetail(transport.id, row.name);
           } else {
             // 娌℃湁杞繍鍗曪紝璺宠浆鍒板垱寤鸿浆杩愬崟椤甸潰
             this.goToCreateTransport(row);
@@ -1213,12 +1225,11 @@
 
     /** 璺宠浆鍒板垱寤鸿浆杩愬崟椤甸潰 */
     goToCreateTransport(caseData) {
-      // 杩欓噷鍙互璺宠浆鍒板垱寤鸿浆杩愬崟鐨勯〉闈�
       // 鏂瑰紡1锛氬湪鏂伴〉闈㈡墦寮�
       this.$router.push({
         path: "/report/transfer",
         query: {
-          autoCreate: "true",
+          autoCreate: "true", //璺宠浆杞繍鏍囪瘑
           caseId: caseData.id,
           caseNo: caseData.caseNo,
           patName: caseData.name,
@@ -1228,9 +1239,6 @@
           treatmentHospitalName: caseData.treatmenthospitalname
         }
       });
-
-      // 鏂瑰紡2锛氬湪褰撳墠椤甸潰鎵撳紑寮规锛堟帹鑽愶級
-      // this.openTransportDialog(caseData);
     },
 
     /** 鎵撳紑杞繍鍗曞脊妗� */
@@ -1265,12 +1273,12 @@
     },
 
     /** 璺宠浆鍒拌浆杩愬崟璇︽儏椤� */
-    goToTransportDetail(transportId, caseNo) {
+    goToTransportDetail(transportId, name) {
       this.$router.push({
         path: "/report/transfer",
         query: {
-          id: transportId,
-          caseNo: caseNo
+          autoCreate: "true",
+          patName: name
         }
       });
     },
@@ -1380,7 +1388,7 @@
       });
     },
 
-    /** 瀹℃壒鎸夐挳鎿嶄綔 */
+    /** 纭鎸夐挳鎿嶄綔 */
     async handleApprove(row) {
       try {
         const response = await donateInfo(row.id);
@@ -1404,11 +1412,11 @@
         this.approveForm.approveResult = "3";
         this.approveForm.approveOpinion = "";
         this.approveOpen = true;
-        this.$modal.msgError("鑾峰彇璇︽儏澶辫触锛屼絾宸叉墦寮�瀹℃壒绐楀彛");
+        this.$modal.msgError("鑾峰彇璇︽儏澶辫触锛屼絾宸叉墦寮�纭绐楀彛");
       }
     },
 
-    /** 鎻愪氦瀹℃壒 */
+    /** 鎻愪氦纭 */
     async submitApprove() {
       try {
         const valid = await this.$refs.approveForm.validate();
@@ -1424,14 +1432,14 @@
           };
 
           await donateEdit(approveData);
-          this.$modal.msgSuccess("瀹℃壒鎴愬姛");
+          this.$modal.msgSuccess("纭鎴愬姛");
           this.approveOpen = false;
           this.getList();
         }
       } catch (error) {
-        console.error("瀹℃壒澶辫触:", error);
+        console.error("纭澶辫触:", error);
         if (error !== "cancel") {
-          this.$modal.msgError("瀹℃壒澶辫触");
+          this.$modal.msgError("纭澶辫触");
         }
       }
     },
@@ -1774,7 +1782,7 @@
   white-space: nowrap;
 }
 
-/* 瀹℃壒寮规鏍峰紡 */
+/* 纭寮规鏍峰紡 */
 .approve-dialog >>> .el-dialog__body {
   padding: 0;
 }
diff --git a/src/views/business/assess/assessInfo.vue b/src/views/business/assess/assessInfo.vue
index 36453c1..346cff1 100644
--- a/src/views/business/assess/assessInfo.vue
+++ b/src/views/business/assess/assessInfo.vue
@@ -1,6 +1,11 @@
 <template>
   <div class="assessment-detail">
-    <el-card class="basic-info-card">
+    <!-- 鍩虹妗堜緥淇℃伅 -->
+    <case-basic-info
+      :case-id="caseId"
+      :show-attachment="true"
+    />
+    <!-- <el-card class="basic-info-card">
       <div slot="header" class="clearfix">
         <span>妗堜緥鍩烘湰淇℃伅</span>
         <el-button
@@ -52,7 +57,7 @@
           </el-tag>
         </el-descriptions-item>
       </el-descriptions>
-    </el-card>
+    </el-card> -->
 
     <el-card class="organ-assessment-card">
       <div slot="header" class="clearfix">
@@ -157,153 +162,205 @@
                 </el-tab-pane>
 
                 <!-- 璇勪及姹囨�籘ab -->
-              <el-tab-pane label="璇勪及姹囨��" name="summary">
-  <div class="assessment-summary">
-    <!-- 鍩烘湰淇℃伅姹囨�� -->
-    <el-descriptions title="鍩烘湰淇℃伅姹囨��" :column="2" border>
-      <el-descriptions-item label="鍣ㄥ畼绫诲瀷">
-        <span class="summary-item">{{ getOrganLabel(scope.row.organno) }}</span>
-      </el-descriptions-item>
-      <el-descriptions-item label="鑾峰彇鏈烘瀯">
-        <span class="summary-item">{{ scope.row.gainhospitalname }}</span>
-      </el-descriptions-item>
-      <el-descriptions-item label="璇勪及娆℃暟" :span="2">
-        <el-tag type="info" size="medium">
-          {{ getAssessmentCount(scope.row) }}娆�
-        </el-tag>
-      </el-descriptions-item>
-      <el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
-        <span class="highlight-text">{{ getLatestAssessmentTime(scope.row) || "-" }}</span>
-      </el-descriptions-item>
-    </el-descriptions>
+                <el-tab-pane label="璇勪及姹囨��" name="summary">
+                  <div class="assessment-summary">
+                    <!-- 鍩烘湰淇℃伅姹囨�� -->
+                    <el-descriptions title="鍩烘湰淇℃伅姹囨��" :column="2" border>
+                      <el-descriptions-item label="鍣ㄥ畼绫诲瀷">
+                        <span class="summary-item">{{
+                          getOrganLabel(scope.row.organno)
+                        }}</span>
+                      </el-descriptions-item>
+                      <el-descriptions-item label="鑾峰彇鏈烘瀯">
+                        <span class="summary-item">{{
+                          scope.row.gainhospitalname
+                        }}</span>
+                      </el-descriptions-item>
+                      <el-descriptions-item label="璇勪及娆℃暟" :span="2">
+                        <el-tag type="info" size="medium">
+                          {{ getAssessmentCount(scope.row) }}娆�
+                        </el-tag>
+                      </el-descriptions-item>
+                      <el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
+                        <span class="highlight-text">{{
+                          getLatestAssessmentTime(scope.row) || "-"
+                        }}</span>
+                      </el-descriptions-item>
+                    </el-descriptions>
 
-    <!-- 璇勪及璇︽儏姹囨�� -->
-    <el-card header="璇勪及璇︽儏鍒楄〃" style="margin-top: 20px;" class="assessment-detail-card">
-      <div v-if="getOrganAssessments(scope.row).length === 0" class="no-assessment">
-        <el-empty description="鏆傛棤璇勪及璁板綍"></el-empty>
-      </div>
+                    <!-- 璇勪及璇︽儏姹囨�� -->
+                    <el-card
+                      header="璇勪及璇︽儏鍒楄〃"
+                      style="margin-top: 20px;"
+                      class="assessment-detail-card"
+                    >
+                      <div
+                        v-if="getOrganAssessments(scope.row).length === 0"
+                        class="no-assessment"
+                      >
+                        <el-empty description="鏆傛棤璇勪及璁板綍"></el-empty>
+                      </div>
 
-      <div v-else>
-        <!-- 姣忔璇勪及璇︽儏 -->
-        <div v-for="(assessment, index) in getOrganAssessments(scope.row)"
-             :key="index"
-             class="assessment-item">
-          <el-card shadow="hover" class="assessment-card">
-            <div slot="header" class="clearfix">
-              <span class="assessment-title">绗瑊{ index + 1 }}娆¤瘎浼�</span>
-              <el-tag
-                :type="getAssessmentTagType(assessment.status)"
-                size="small"
-                class="status-tag"
-              >
-                {{ getAssessmentStatusText(assessment.status) }}
-              </el-tag>
-            </div>
+                      <div v-else>
+                        <!-- 姣忔璇勪及璇︽儏 -->
+                        <div
+                          v-for="(assessment, index) in getOrganAssessments(
+                            scope.row
+                          )"
+                          :key="index"
+                          class="assessment-item"
+                        >
+                          <el-card shadow="hover" class="assessment-card">
+                            <div slot="header" class="clearfix">
+                              <span class="assessment-title"
+                                >绗瑊{ index + 1 }}娆¤瘎浼�</span
+                              >
+                              <el-tag
+                                :type="getAssessmentTagType(assessment.status)"
+                                size="small"
+                                class="status-tag"
+                              >
+                                {{ getAssessmentStatusText(assessment.status) }}
+                              </el-tag>
+                            </div>
 
-            <el-descriptions :column="2" border class="detail-descriptions">
-              <el-descriptions-item label="璇勪及鏃堕棿" :span="2">
-                <span class="time-text">{{ assessment.assessmentTime || "-" }}</span>
-              </el-descriptions-item>
+                            <el-descriptions
+                              :column="2"
+                              border
+                              class="detail-descriptions"
+                            >
+                              <el-descriptions-item label="璇勪及鏃堕棿" :span="2">
+                                <span class="time-text">{{
+                                  assessment.assessmentTime || "-"
+                                }}</span>
+                              </el-descriptions-item>
 
-              <el-descriptions-item label="璇勪及浜�">
-                <el-tag type="info" size="small">
-                  {{ assessment.assessor || "鏈~鍐�" }}
-                </el-tag>
-              </el-descriptions-item>
+                              <el-descriptions-item label="璇勪及浜�">
+                                <el-tag type="info" size="small">
+                                  {{ assessment.assessor || "鏈~鍐�" }}
+                                </el-tag>
+                              </el-descriptions-item>
 
-              <el-descriptions-item label="鍔熻兘鐘舵��">
-                <el-tag
-                  :type="getFunctionStatusTagType(assessment.functionStatus)"
-                  size="small"
-                >
-                  {{ getFunctionStatusText(assessment.functionStatus) }}
-                </el-tag>
-              </el-descriptions-item>
+                              <el-descriptions-item label="鍔熻兘鐘舵��">
+                                <el-tag
+                                  :type="
+                                    getFunctionStatusTagType(
+                                      assessment.functionStatus
+                                    )
+                                  "
+                                  size="small"
+                                >
+                                  {{
+                                    getFunctionStatusText(
+                                      assessment.functionStatus
+                                    )
+                                  }}
+                                </el-tag>
+                              </el-descriptions-item>
 
-              <el-descriptions-item label="璇勪及鎰忚" :span="2">
-                <div class="opinion-content">
-                  {{ assessment.assessmentOpinion || "鏆傛棤璇勪及鎰忚" }}
-                </div>
-              </el-descriptions-item>
+                              <el-descriptions-item label="璇勪及鎰忚" :span="2">
+                                <div class="opinion-content">
+                                  {{
+                                    assessment.assessmentOpinion ||
+                                      "鏆傛棤璇勪及鎰忚"
+                                  }}
+                                </div>
+                              </el-descriptions-item>
 
-              <el-descriptions-item label="闄勪欢鏁伴噺" :span="2" v-if="assessment.attachments && assessment.attachments.length > 0">
-                <el-tag type="success" size="small">
-                  {{ assessment.attachments.length }}涓�
-                </el-tag>
-                <el-button
-                  type="text"
-                  size="mini"
-                  @click="showAttachmentList(assessment.attachments, index + 1)"
-                  style="margin-left: 10px;"
-                >
-                  鏌ョ湅闄勪欢鍒楄〃
-                </el-button>
-              </el-descriptions-item>
-            </el-descriptions>
-          </el-card>
-        </div>
-      </div>
-    </el-card>
+                              <el-descriptions-item
+                                label="闄勪欢鏁伴噺"
+                                :span="2"
+                                v-if="
+                                  assessment.attachments &&
+                                    assessment.attachments.length > 0
+                                "
+                              >
+                                <el-tag type="success" size="small">
+                                  {{ assessment.attachments.length }}涓�
+                                </el-tag>
+                                <el-button
+                                  type="text"
+                                  size="mini"
+                                  @click="
+                                    showAttachmentList(
+                                      assessment.attachments,
+                                      index + 1
+                                    )
+                                  "
+                                  style="margin-left: 10px;"
+                                >
+                                  鏌ョ湅闄勪欢鍒楄〃
+                                </el-button>
+                              </el-descriptions-item>
+                            </el-descriptions>
+                          </el-card>
+                        </div>
+                      </div>
+                    </el-card>
 
-    <!-- 鍣ㄥ畼鍩烘湰淇℃伅鍗$墖 -->
-    <el-card header="鍣ㄥ畼淇℃伅" style="margin-top: 20px;" class="organ-info-card">
-      <el-descriptions :column="2" border>
-        <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
-          <el-tag
-            :type="
-              scope.row.isbiopsybefore === '1'
-                ? 'success'
-                : 'info'
-            "
-            size="small"
-          >
-            {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
-          </el-tag>
-        </el-descriptions-item>
-        <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
-          <el-tag
-            :type="
-              scope.row.isbiopsyafter === '1'
-                ? 'success'
-                : 'info'
-            "
-            size="small"
-          >
-            {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
-          </el-tag>
-        </el-descriptions-item>
-        <el-descriptions-item label="杈圭紭鍣ㄥ畼">
-          <el-tag
-            :type="
-              scope.row.ismarginalorgan === '1'
-                ? 'warning'
-                : 'info'
-            "
-            size="small"
-          >
-            {{
-              scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
-            }}
-          </el-tag>
-        </el-descriptions-item>
-        <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
-          <el-tag
-            :type="
-              scope.row.ispathogenpositive === '1'
-                ? 'danger'
-                : 'info'
-            "
-            size="small"
-          >
-            {{
-              scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
-            }}
-          </el-tag>
-        </el-descriptions-item>
-      </el-descriptions>
-    </el-card>
-  </div>
-</el-tab-pane>
+                    <!-- 鍣ㄥ畼鍩烘湰淇℃伅鍗$墖 -->
+                    <el-card
+                      header="鍣ㄥ畼淇℃伅"
+                      style="margin-top: 20px;"
+                      class="organ-info-card"
+                    >
+                      <el-descriptions :column="2" border>
+                        <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
+                          <el-tag
+                            :type="
+                              scope.row.isbiopsybefore === '1'
+                                ? 'success'
+                                : 'info'
+                            "
+                            size="small"
+                          >
+                            {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
+                          <el-tag
+                            :type="
+                              scope.row.isbiopsyafter === '1'
+                                ? 'success'
+                                : 'info'
+                            "
+                            size="small"
+                          >
+                            {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="杈圭紭鍣ㄥ畼">
+                          <el-tag
+                            :type="
+                              scope.row.ismarginalorgan === '1'
+                                ? 'warning'
+                                : 'info'
+                            "
+                            size="small"
+                          >
+                            {{
+                              scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
+                            }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
+                          <el-tag
+                            :type="
+                              scope.row.ispathogenpositive === '1'
+                                ? 'danger'
+                                : 'info'
+                            "
+                            size="small"
+                          >
+                            {{
+                              scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
+                            }}
+                          </el-tag>
+                        </el-descriptions-item>
+                      </el-descriptions>
+                    </el-card>
+                  </div>
+                </el-tab-pane>
               </el-tabs>
             </div>
           </template>
@@ -427,15 +484,17 @@
   assessedit,
   assessAdd
 } from "@/api/businessApi/index";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
 import FilePreviewDialog from "@/components/FilePreviewDialog";
 import OrganAssessmentForm from "@/components/assessInfoComponents/OrganAssessmentForm.vue";
 
 export default {
   name: "AssessmentDetail",
-  components: { OrganAssessmentForm, FilePreviewDialog },
+  components: { OrganAssessmentForm, FilePreviewDialog, CaseBasicInfo },
   dicts: ["sys_user_sex", "sys_Organ", "sys_0_1"],
   data() {
     return {
+      caseId: null,
       // 鏄惁缂栬緫妯″紡
       isEdit: false,
       // 鍔犺浇鐘舵��
@@ -550,6 +609,7 @@
   },
   created() {
     this.infoid = this.$route.query.infoid;
+    this.caseId = this.infoid;
     this.assessmentId = this.$route.query.id;
     this.isEdit = this.$route.query.assess === "true";
     this.getAssessmentDetail();
@@ -567,40 +627,42 @@
         this.activeTabMap.set(organ.organno, tab.name);
       }
     },
-// 鑾峰彇鍔熻兘鐘舵�佹爣绛剧被鍨�
-  getFunctionStatusTagType(status) {
-    const typeMap = {
-      "1": "success",  // 姝e父
-      "2": "warning",  // 杞诲害寮傚父
-      "3": "danger",   // 閲嶅害寮傚父
-      "4": "info"      // 鏃犳硶璇勪及
-    };
-    return typeMap[status] || "info";
-  },
+    // 鑾峰彇鍔熻兘鐘舵�佹爣绛剧被鍨�
+    getFunctionStatusTagType(status) {
+      const typeMap = {
+        "1": "success", // 姝e父
+        "2": "warning", // 杞诲害寮傚父
+        "3": "danger", // 閲嶅害寮傚父
+        "4": "info" // 鏃犳硶璇勪及
+      };
+      return typeMap[status] || "info";
+    },
 
-  // 鑾峰彇鍔熻兘鐘舵�佹枃鏈�
-  getFunctionStatusText(status) {
-    const textMap = {
-      "1": "姝e父",
-      "2": "杞诲害寮傚父",
-      "3": "閲嶅害寮傚父",
-      "4": "鏃犳硶璇勪及"
-    };
-    return textMap[status] || "鏈瘎浼�";
-  },
+    // 鑾峰彇鍔熻兘鐘舵�佹枃鏈�
+    getFunctionStatusText(status) {
+      const textMap = {
+        "1": "姝e父",
+        "2": "杞诲害寮傚父",
+        "3": "閲嶅害寮傚父",
+        "4": "鏃犳硶璇勪及"
+      };
+      return textMap[status] || "鏈瘎浼�";
+    },
 
-  // 鏄剧ず闄勪欢鍒楄〃
-  showAttachmentList(attachments, assessmentNumber) {
-    if (!attachments || attachments.length === 0) {
-      this.$message.info(`绗�${assessmentNumber}娆¤瘎浼版殏鏃犻檮浠禶);
-      return;
-    }
+    // 鏄剧ず闄勪欢鍒楄〃
+    showAttachmentList(attachments, assessmentNumber) {
+      if (!attachments || attachments.length === 0) {
+        this.$message.info(`绗�${assessmentNumber}娆¤瘎浼版殏鏃犻檮浠禶);
+        return;
+      }
 
-    this.$alert(
-      `<div>
+      this.$alert(
+        `<div>
         <h4>绗�${assessmentNumber}娆¤瘎浼伴檮浠跺垪琛�</h4>
         <ul style="list-style: none; padding-left: 0;">
-          ${attachments.map((item, index) => `
+          ${attachments
+            .map(
+              (item, index) => `
             <li style="margin: 5px 0; padding: 5px; background: #f5f7fa; border-radius: 4px;">
               <i class="el-icon-document"></i>
               <span style="margin-left: 8px;">${item.fileName}</span>
@@ -613,18 +675,20 @@
                 涓嬭浇
               </el-button>
             </li>
-          `).join('')}
+          `
+            )
+            .join("")}
         </ul>
       </div>`,
-      '闄勪欢鍒楄〃',
-      {
-        dangerouslyUseHTMLString: true,
-        showConfirmButton: false,
-        showCancelButton: true,
-        cancelButtonText: '鍏抽棴'
-      }
-    );
-  },
+        "闄勪欢鍒楄〃",
+        {
+          dangerouslyUseHTMLString: true,
+          showConfirmButton: false,
+          showCancelButton: true,
+          cancelButtonText: "鍏抽棴"
+        }
+      );
+    },
     // 鑾峰彇鍣ㄥ畼鐨勮瘎浼板垪琛�
     getOrganAssessments(organ) {
       if (!organ.assesscontent) return [];
@@ -718,8 +782,8 @@
 
         if (response.code === 200) {
           this.$message.success("璇勪及琛ㄤ繚瀛樻垚鍔燂紒");
-          if (!this.assessmentData.id && response.data && response.data.id) {
-            this.assessmentData.id = response.data.id;
+          if (!this.assessmentData.id && response.data) {
+            this.assessmentData.id = response.data;
           }
           this.refreshKey += 1; // 瑙﹀彂閲嶆柊娓叉煋
         } else {
@@ -957,7 +1021,6 @@
       } else {
         detailData = response;
       }
-
       this.assessmentData = {
         id: detailData.id || this.assessmentId,
         infoid: detailData.infoid || this.infoid,
@@ -1467,7 +1530,7 @@
 }
 
 .highlight-text {
-  color: #409EFF;
+  color: #409eff;
   font-weight: 500;
 }
 
@@ -1502,7 +1565,7 @@
 
 .assessment-card:hover {
   box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
-  border-color: #409EFF;
+  border-color: #409eff;
 }
 
 .assessment-title {
@@ -1517,7 +1580,7 @@
 }
 
 .time-text {
-  color: #67C23A;
+  color: #67c23a;
   font-weight: 500;
 }
 
@@ -1565,7 +1628,7 @@
   background-color: #fafafa;
 }
 
-::v-deep .el-table--enable-row-hover .el-table__body tr:hover>td {
+::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
   background-color: #ecf5ff;
 }
 
@@ -1635,7 +1698,7 @@
 }
 
 ::v-deep .el-tabs__item.is-active {
-  color: #409EFF;
+  color: #409eff;
   font-weight: 600;
 }
 
@@ -1643,7 +1706,7 @@
   background-color: #e4e7ed;
 }
 
-::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
+::v-deep .el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
   background-color: #fff;
   border-bottom-color: #fff;
 }
diff --git a/src/views/business/assess/index.vue b/src/views/business/assess/index.vue
index f2e246d..9450f95 100644
--- a/src/views/business/assess/index.vue
+++ b/src/views/business/assess/index.vue
@@ -131,7 +131,7 @@
           width="120"
         />
         <el-table-column
-          label="娼滃湪鎹愮尞鑰呭鍚�"
+          label="鎹愮尞鑰呭鍚�"
           align="center"
           prop="name"
           width="120"
diff --git a/src/views/business/decide/DecideInfo.vue b/src/views/business/decide/DecideInfo.vue
index 32252de..239e5f9 100644
--- a/src/views/business/decide/DecideInfo.vue
+++ b/src/views/business/decide/DecideInfo.vue
@@ -1,5 +1,6 @@
 <template>
   <div class="death-judgment-detail">
+    <case-basic-info :case-id="caseId" :show-attachment="true" />
     <el-card class="detail-card">
       <!-- 鍩虹淇℃伅 -->
       <div slot="header" class="clearfix">
@@ -26,47 +27,9 @@
       <el-form :model="form" ref="form" :rules="rules" label-width="120px">
         <el-row :gutter="20">
           <el-col :span="8">
-            <el-form-item label="鎹愮尞鑰呯紪鍙�" prop="donorno">
-              <el-input
-                v-model="form.donorno"
-                :readonly="!isEdit"
-                placeholder="鑷姩鐢熸垚鎹愮尞鑰呯紪鍙�"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
-              <el-input v-model="form.name" :readonly="!isEdit" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鎬у埆" prop="sex">
-              <el-select
-                v-model="form.sex"
-                :disabled="!isEdit"
-                style="width: 100%"
-              >
-                <el-option label="鐢�" value="1" />
-                <el-option label="濂�" value="2" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="骞撮緞" prop="age">
-              <el-input v-model="form.age" :readonly="!isEdit" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
-              <el-input v-model="form.diagnosisname" :readonly="!isEdit" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
             <el-form-item label="姝讳骸鍘熷洜" prop="deathreason">
-              <el-select
+              <el-input v-model="form.deathreason" :readonly="!isEdit" />
+              <!-- <el-select
                 v-model="form.deathreason"
                 :disabled="!isEdit"
                 style="width: 100%"
@@ -74,9 +37,24 @@
                 <el-option label="鑴戞浜�" value="brain_death" />
                 <el-option label="蹇冩浜�" value="heart_death" />
                 <el-option label="鍏朵粬" value="other" />
-              </el-select>
+              </el-select> -->
             </el-form-item>
           </el-col>
+          <el-col :span="8">
+            <el-form-item label="璐熻矗浜�" prop="responsibleusername">
+              <el-input
+                v-model="form.responsibleusername"
+                :readonly="!isEdit"
+              />
+            </el-form-item>
+          </el-col>
+          <!-- <el-col :span="8">
+            <el-form-item label="璁板綍鐘舵��" prop="recordstate">
+              <el-tag :type="getStatusTag(form.recordstate)">
+                {{ getStatusText(form.recordstate) }}
+              </el-tag>
+            </el-form-item>
+          </el-col> -->
         </el-row>
 
         <el-row :gutter="20">
@@ -122,7 +100,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="鏄惁鎭㈠閬椾綋浠" prop="isrestoreremains">
+            <el-form-item label="鎭㈠閬椾綋浠" prop="isrestoreremains">
               <el-select
                 v-model="form.isrestoreremains"
                 :disabled="!isEdit"
@@ -135,29 +113,11 @@
           </el-col>
         </el-row>
 
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="璐熻矗浜�" prop="responsibleusername">
-              <el-input
-                v-model="form.responsibleusername"
-                :readonly="!isEdit"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="璁板綍鐘舵��" prop="recordstate">
-              <el-tag :type="getStatusTag(form.recordstate)">
-                {{ getStatusText(form.recordstate) }}
-              </el-tag>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-form-item label="姝讳骸鍒ゅ畾璇存槑" prop="judgmentDescription">
+        <el-form-item label="姝讳骸鍒ゅ畾璇存槑" prop="remark">
           <el-input
             type="textarea"
             :rows="3"
-            v-model="form.judgmentDescription"
+            v-model="form.remark"
             :readonly="!isEdit"
             placeholder="璇︾粏璁板綍姝讳骸鍒ゅ畾杩囩▼鍜屼緷鎹�"
           />
@@ -337,17 +297,27 @@
 </template>
 
 <script>
-import { deathinfoedit, deathinfoInfo } from "@/api/businessApi";
+import {
+  deathinfoedit,
+  deathinfoadd,
+  queryDathInfoBaseInfo
+} from "@/api/businessApi";
 import { getToken } from "@/utils/auth";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
 
 export default {
   name: "DeathJudgmentDetail",
+  components: { CaseBasicInfo },
+
   data() {
     return {
+      caseId: null,
       // 鏄惁缂栬緫妯″紡
       isEdit: false,
       // 淇濆瓨鍔犺浇鐘舵��
       saveLoading: false,
+      infoid: undefined,
+
       // 琛ㄥ崟鏁版嵁
       form: {
         id: undefined,
@@ -365,7 +335,7 @@
         gainhospitalname: "",
         isspendremember: 0,
         isrestoreremains: 0,
-        rememberannex: "",
+        rememberAnnex: "",
         responsibleuserid: "",
         responsibleusername: "",
         recordstate: "0",
@@ -421,13 +391,17 @@
     }
   },
   created() {
+    this.infoid = this.$route.query.infoid;
+    this.caseId = this.infoid;
     const id = this.$route.query.id;
     this.isEdit = this.$route.query.isEdit;
-    if (id && !this.$route.path.includes("/add")) {
-      this.getDetail(id);
-    } else if (this.$route.path.includes("/add")) {
-      this.generateDonorNo();
-    }
+    this.getDetail(this.infoid);
+
+    // if (id && !this.$route.path.includes("/add")) {
+    //   this.getDetail(id);
+    // } else if (this.$route.path.includes("/add")) {
+    //   this.generateDonorNo();
+    // }
     this.getAttachmentList();
   },
   methods: {
@@ -437,13 +411,13 @@
       this.form.donorno = "DONOR" + timestamp.slice(-8);
     },
     // 鑾峰彇璇︽儏
-    async getDetail(id) {
+    async getDetail(infoid) {
       try {
-        const response = await deathinfoInfo(id);
+        const response = await queryDathInfoBaseInfo({ infoid });
         let realData = {};
 
         if (response && response.data) {
-          realData = response.data;
+          realData = response.data[0];
         } else if (response) {
           realData = response;
         }
@@ -462,8 +436,8 @@
         };
 
         // 瑙f瀽闄勪欢淇℃伅
-        if (realData.rememberannex) {
-          this.parseAttachmentData(realData.rememberannex);
+        if (realData.rememberAnnex) {
+          this.parseAttachmentData(realData.rememberAnnex);
         }
       } catch (error) {
         console.error("鑾峰彇姝讳骸鍒ゅ畾璇︽儏澶辫触:", error);
@@ -614,7 +588,7 @@
         }
 
         // 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
-        this.form.rememberannex = this.buildAttachmentJson();
+        this.form.rememberAnnex = this.buildAttachmentJson();
 
         this.$message.success("鏂囦欢涓婁紶鎴愬姛");
         this.uploadDialogVisible = false;
@@ -650,7 +624,7 @@
       //   }
 
       //   // 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
-      //   this.form.rememberannex = this.buildAttachmentJson();
+      //   this.form.rememberAnnex = this.buildAttachmentJson();
 
       //   this.$message.success("鏂囦欢涓婁紶鎴愬姛");
       //   this.uploadDialogVisible = false;
@@ -676,7 +650,7 @@
           if (index !== -1) {
             this.attachmentList.splice(index, 1);
             // 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
-            this.form.rememberannex = this.buildAttachmentJson();
+            this.form.rememberAnnex = this.buildAttachmentJson();
             this.$message.success("璇勪及琛ㄥ垹闄ゆ垚鍔�");
           }
         })
@@ -721,16 +695,25 @@
             // 鏋勫缓鎻愪氦鏁版嵁
             const submitData = {
               ...this.form,
+              infoid: this.infoid,
               // 纭繚闄勪欢鏁版嵁鏈�鏂�
               rememberannex: this.buildAttachmentJson()
             };
+            let response = null;
 
-            const response = await deathinfoedit(submitData);
+            if (submitData.id) {
+              response = await deathinfoedit(submitData);
+            } else {
+              response = await deathinfoadd(submitData);
+            }
+            // const response = await deathinfoedit(submitData);
 
             if (response.code === 200) {
               this.$message.success("淇濆瓨鎴愬姛");
               this.isEdit = false;
-
+              if (!this.form.id) {
+                this.form.id = response.data;
+              }
               if (this.$route.path.includes("/add")) {
                 this.$router.push("/case/deathJudgment");
               }
diff --git a/src/views/business/decide/index.vue b/src/views/business/decide/index.vue
index 02e8add..1430372 100644
--- a/src/views/business/decide/index.vue
+++ b/src/views/business/decide/index.vue
@@ -62,7 +62,7 @@
     <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 type="primary" icon="el-icon-plus" @click="handleCreate"
             >鏂板缓姝讳骸鍒ゅ畾</el-button
           >
           <el-button
@@ -71,7 +71,7 @@
             :disabled="single"
             @click="handleUpdate"
             >淇敼</el-button
-          >
+          > -->
           <el-button
             type="warning"
             icon="el-icon-download"
@@ -439,7 +439,7 @@
     handleView(row) {
       this.$router.push({
         path: "/case/DecideInfo",
-        query: { id: row.id }
+        query: { id: row.id,infoid:row.infoid }
       });
     },
 
@@ -453,7 +453,7 @@
       const id = row.id || this.ids[0];
       this.$router.push({
         path: "/case/DecideInfo",
-        query: { id: id, isEdit: true }
+        query: { id: id,infoid:row.infoid, isEdit: true }
       });
     },
 
diff --git a/src/views/business/ethicalReview/ethicalReviewInfo copy.vue b/src/views/business/ethicalReview/ethicalReviewInfo copy.vue
new file mode 100644
index 0000000..d5828de
--- /dev/null
+++ b/src/views/business/ethicalReview/ethicalReviewInfo copy.vue
@@ -0,0 +1,1536 @@
+<template>
+  <div class="ethics-review-detail">
+    <el-card class="detail-card">
+      <!-- 鍩虹淇℃伅 -->
+      <div slot="header" class="clearfix">
+        <span class="detail-title">浼︾悊瀹℃煡鍩烘湰淇℃伅</span>
+        <div style="float: right;">
+          <el-button type="primary" @click="handleSave" :loading="saveLoading">
+            淇濆瓨
+          </el-button>
+
+          <el-button
+            type="warning"
+            @click="handleEndReview"
+            :disabled="form.ethicsConclusion === 'terminated'"
+          >
+            缁撴潫瀹℃煡
+          </el-button>
+        </div>
+      </div>
+
+      <el-form :model="form" ref="form" :rules="rules" label-width="120px">
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="浣忛櫌鍙�" prop="hospitalNo">
+              <el-input v-model="form.hospitalNo" readonly />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
+              <el-input v-model="form.donorName" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鎬у埆" prop="gender">
+              <el-select v-model="form.gender" style="width: 100%">
+                <el-option label="鐢�" value="0" />
+                <el-option label="濂�" value="1" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="骞撮緞" prop="age">
+              <el-input v-model="form.age" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="16">
+            <el-form-item label="鐤剧梾璇婃柇" prop="diagnosis">
+              <el-input v-model="form.diagnosis" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="浼︾悊缁撹" prop="ethicsConclusion">
+              <el-select v-model="form.ethicsConclusion" style="width: 100%">
+                <el-option label="瀹℃煡涓�" value="reviewing" />
+                <el-option label="鍚屾剰" value="approved" />
+                <el-option
+                  label="淇敼鍚庡悓鎰�"
+                  value="approved_with_modifications"
+                />
+                <el-option label="淇敼鍚庨噸瀹�" value="re-review" />
+                <el-option label="涓嶅悓鎰�" value="disapproved" />
+                <el-option label="缁堟瀹℃煡" value="terminated" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="瀹℃煡鏃堕棿" prop="reviewTime">
+              <el-date-picker
+                v-model="form.reviewTime"
+                type="datetime"
+                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="registrant">
+              <el-input v-model="form.registrant" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="浼︾悊鎰忚" prop="ethicsOpinion">
+              <el-input
+                type="textarea"
+                :rows="3"
+                v-model="form.ethicsOpinion"
+                placeholder="璇疯緭鍏ヤ鸡鐞嗗鏌ユ剰瑙�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-form-item label="鐧昏鏃堕棿" prop="registrationTime">
+          <el-date-picker
+            v-model="form.registrationTime"
+            type="datetime"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            style="width: 100%"
+          />
+        </el-form-item>
+      </el-form>
+    </el-card>
+    <!-- 闄勪欢涓婁紶 -->
+    <el-card class="attachment-card">
+      <div slot="header" class="clearfix">
+        <span class="detail-title">鐩稿叧闄勪欢</span>
+        <el-button type="primary" size="mini" @click="handleUploadAttachment">
+          涓婁紶闄勪欢
+        </el-button>
+      </div>
+
+      <el-table :data="attachments" style="width: 100%">
+        <el-table-column label="鏂囦欢鍚嶇О" min-width="200">
+          <template slot-scope="scope">
+            <div class="file-info">
+              <i
+                class="el-icon-document"
+                style="margin-right: 8px; color: #409EFF;"
+              ></i>
+              <span>{{ scope.row.fileName }}</span>
+            </div>
+          </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="100" align="center">
+          <template slot-scope="scope">
+            <span>{{ formatFileSize(scope.row.fileSize) }}</span>
+          </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>{{ scope.row.uploader }}</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="鎿嶄綔" width="120" align="center">
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-view"
+              @click="handlePreviewAttachment(scope.row)"
+              >棰勮</el-button
+            >
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-download"
+              @click="handleDownloadAttachment(scope.row)"
+              >涓嬭浇</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-card>
+    <!-- 涓撳瀹℃煡鎯呭喌 -->
+    <el-card class="expert-card">
+      <div slot="header" class="clearfix">
+        <span class="detail-title">涓撳瀹℃煡鎯呭喌 (18浣嶄笓瀹� + 1浣嶄富濮斾笓瀹�)</span>
+        <div style="float: right;">
+          <el-button
+            size="mini"
+            type="primary"
+            @click="handleSendToNormalExperts"
+            :disabled="!canSendToNormalExperts"
+          >
+            鍙戦�佷笓瀹�
+          </el-button>
+          <el-button
+            size="mini"
+            type="success"
+            @click="handleSendToChiefExpert"
+            :disabled="!canSendToChiefExpert"
+          >
+            鍙戦�佷富濮斾笓瀹�
+          </el-button>
+          <el-button
+            size="mini"
+            type="warning"
+            @click="handleBatchSend"
+            :disabled="!canBatchSend"
+          >
+            鎵归噺鍙戦��
+          </el-button>
+        </div>
+      </div>
+      <!-- 涓撳缁熻淇℃伅 -->
+      <div
+        class="expert-stats"
+        style="margin-top: 20px; padding: 15px; background: #f5f7fa; border-radius: 4px;"
+      >
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <div class="stat-item">
+              <span class="stat-label">涓撳宸插悓鎰�:</span>
+              <span class="stat-value">{{ approvedNormalExperts }}/18</span>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div class="stat-item">
+              <span class="stat-label">涓诲涓撳鐘舵��:</span>
+              <span class="stat-value">{{ chiefExpertStatus }}</span>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div class="stat-item">
+              <span class="stat-label">鎬诲畬鎴愯繘搴�:</span>
+              <span class="stat-value">{{ completionRate }}%</span>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div class="stat-item">
+              <span class="stat-label">瀹℃煡缁撴灉:</span>
+              <span class="stat-value">
+                <el-tag :type="overallConclusionFilter">
+                  {{ overallConclusionText }}
+                </el-tag>
+              </span>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+      <!-- 涓撳瀹℃煡琛ㄦ牸 -->
+      <el-table
+        :data="expertReviews"
+        v-loading="expertLoading"
+        style="width: 100%"
+        heiht="800"
+        :row-class-name="getExpertRowClassName"
+      >
+        <el-table-column label="搴忓彿" width="60" align="center" type="index" />
+
+        <el-table-column
+          label="涓撳濮撳悕"
+          width="120"
+          align="center"
+          fixed="left"
+        >
+          <template slot-scope="scope">
+            <span>{{ scope.row.expertName }}</span>
+            <el-tag
+              v-if="scope.row.isChief"
+              size="mini"
+              type="danger"
+              style="margin-left: 5px;"
+              >涓诲</el-tag
+            >
+          </template>
+        </el-table-column>
+
+        <el-table-column label="涓撳绫诲瀷" width="100" align="center">
+          <template slot-scope="scope">
+            <span :class="scope.row.isChief ? 'chief-expert' : 'normal-expert'">
+              {{ scope.row.isChief ? "涓诲涓撳" : "涓撳" }}
+            </span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="瀹℃煡鐘舵��" width="100" align="center">
+          <template slot-scope="scope">
+            <el-tag :type="statusFilter(scope.row.reviewStatus)" size="small">
+              {{ statusTextFilter(scope.row.reviewStatus) }}
+            </el-tag>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="涓撳缁撹" width="120" align="center">
+          <template slot-scope="scope">
+            <el-tag
+              v-if="scope.row.expertConclusion"
+              :type="conclusionFilter(scope.row.expertConclusion)"
+              size="small"
+            >
+              {{ conclusionTextFilter(scope.row.expertConclusion) }}
+            </el-tag>
+            <span v-else class="no-data">-</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="瀹℃煡鎰忚" min-width="200" show-overflow-tooltip>
+          <template slot-scope="scope">
+            <span :class="{ 'expert-opinion': scope.row.expertOpinion }">
+              {{ scope.row.expertOpinion || "鏆傛棤鎰忚" }}
+            </span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="瀹℃煡鏃堕棿" width="160" align="center">
+          <template slot-scope="scope">
+            <span>{{
+              scope.row.reviewTime ? parseTime(scope.row.reviewTime) : "鏈鏌�"
+            }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鍙戦�佹椂闂�" width="160" align="center">
+          <template slot-scope="scope">
+            <span>{{
+              scope.row.reviewTime ? parseTime(scope.row.reviewTime) : "鏈彂閫�"
+            }}</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="鎿嶄綔" width="280" align="center" fixed="right">
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-s-promotion"
+              @click="handleSendToExpert(scope.row)"
+              :disabled="scope.row.reviewStatus === 'submitted'"
+              :class="{ 'sent-button': scope.row.reviewStatus === 'submitted' }"
+            >
+              {{ scope.row.reviewStatus === "submitted" ? "宸插彂閫�" : "鍙戦��" }}
+            </el-button>
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-edit"
+              @click="handleEditExpertReview(scope.row)"
+              :disabled="scope.row.reviewStatus !== 'submitted'"
+            >
+              缂栬緫
+            </el-button>
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-view"
+              @click="handleViewExpertReview(scope.row)"
+            >
+              璇︽儏
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-card>
+
+    <!-- 鍙戦�佷笓瀹跺璇濇 -->
+    <el-dialog
+      title="鍙戦�佷笓瀹跺鏌�"
+      :visible.sync="sendDialogVisible"
+      width="500px"
+    >
+      <el-form :model="sendForm" ref="sendForm" label-width="100px">
+        <el-form-item label="涓撳绫诲瀷" prop="expertType">
+          <el-radio-group v-model="sendForm.expertType">
+            <el-radio label="normal">涓撳</el-radio>
+            <el-radio label="chief">涓诲涓撳</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item
+          label="閫夋嫨涓撳"
+          prop="expertIds"
+          v-if="sendForm.expertType === 'normal'"
+        >
+          <el-select
+            v-model="sendForm.expertIds"
+            multiple
+            placeholder="璇烽�夋嫨涓撳"
+            style="width: 100%"
+          >
+            <el-option
+              v-for="expert in availableExperts"
+              :key="expert.id"
+              :label="expert.name"
+              :value="expert.id"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鍙戦�佸唴瀹�" prop="content">
+          <el-input
+            type="textarea"
+            :rows="4"
+            v-model="sendForm.content"
+            placeholder="璇疯緭鍏ュ彂閫佺粰涓撳鐨勫鏌ュ唴瀹硅鏄�"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="sendDialogVisible = false">鍙栨秷</el-button>
+        <el-button type="primary" @click="handleSendConfirm"
+          >纭鍙戦��</el-button
+        >
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import {
+  getEthicsReviewDetail,
+  updateEthicsReview,
+  sendExpertReview,
+  endEthicsReview,
+  uploadAttachment,
+  deleteAttachment,
+  getAttachments
+} from "./ethicsReview";
+import {
+  reviewinitiateBaseInfoList,
+  ethicalreviewedit,
+  ethicalreviewadd
+} from "@/api/businessApi";
+
+export default {
+  name: "EthicsReviewDetail",
+  data() {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: undefined,
+        hospitalNo: "",
+        donorName: "",
+        gender: "",
+        age: "",
+        diagnosis: "",
+        ethicsConclusion: "reviewing",
+        ethicsOpinion: "",
+        reviewTime: "",
+        registrant: "",
+        registrationTime: new Date()
+          .toISOString()
+          .replace("T", " ")
+          .substring(0, 19)
+      },
+      // 琛ㄥ崟楠岃瘉瑙勫垯
+      rules: {
+        donorName: [
+          { required: true, message: "鎹愮尞鑰呭鍚嶄笉鑳戒负绌�", trigger: "blur" }
+        ],
+        ethicsConclusion: [
+          { required: true, message: "浼︾悊缁撹涓嶈兘涓虹┖", trigger: "change" }
+        ],
+        reviewTime: [
+          { required: true, message: "瀹℃煡鏃堕棿涓嶈兘涓虹┖", trigger: "change" }
+        ]
+      },
+      // 淇濆瓨鍔犺浇鐘舵��
+      saveLoading: false,
+
+      // 闄勪欢鏁版嵁
+      attachments: [],
+      expertReviews: [
+        // 涓撳锛�18浣嶏級- 鍒濆鐘舵�佷负鐢宠涓�
+        {
+          id: 1,
+          expertName: "闄舵槉",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 2,
+          expertName: "鍒樻枌",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 3,
+          expertName: "浜庢捣鍒� ",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 4,
+          expertName: "鐜嬬孩姊�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 5,
+          expertName: "鐜嬫槬鍏�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 6,
+          expertName: "鐜嬮潤",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 7,
+          expertName: "杈规枃瓒�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 8,
+          expertName: "闂織鍕�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 9,
+          expertName: "璁稿嚖",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 10,
+          expertName: "璁镐紶灞�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 11,
+          expertName: "寮犵孩宀�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 12,
+          expertName: "鏉ㄨ嫃姘�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 13,
+          expertName: "瀹嬬帀寮�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 14,
+          expertName: "鍛ㄤ紶鍒�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 15,
+          expertName: "鑽嗗嚒娉�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 16,
+          expertName: "鐭枃鎹�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 17,
+          expertName: "钁i渿",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        {
+          id: 18,
+          expertName: "钄¢噾璐�",
+          isChief: false,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        },
+        // 涓诲涓撳锛�1浣嶏級
+        {
+          id: 19,
+          expertName: "瀛斿績娑�",
+          isChief: true,
+          reviewStatus: "applying",
+          expertConclusion: "",
+          expertOpinion: "",
+          reviewTime: ""
+        }
+      ],
+      expertLoading: false,
+      attachmentLoading: false,
+      // 鍙戦�佸璇濇
+      sendDialogVisible: false,
+      sendForm: {
+        expertType: "normal",
+        expertIds: [],
+        content: ""
+      },
+      // 涓婁紶鐩稿叧
+      uploadDialogVisible: false,
+      uploadLoading: false,
+      tempFileList: [],
+      // 鍙敤涓撳鍒楄〃
+      availableExperts: [
+        { id: 1, name: "寮犳暀鎺�", type: "normal" },
+        { id: 2, name: "鏉庢暀鎺�", type: "normal" },
+        { id: 3, name: "鐜嬫暀鎺�", type: "normal" },
+        { id: 4, name: "璧典富濮�", type: "chief" }
+      ]
+    };
+  },
+  computed: {
+    // 璁$畻灞炴�э細涓撳鍚屾剰鏁伴噺
+    approvedNormalExperts() {
+      return this.expertReviews.filter(
+        expert => !expert.isChief && expert.expertConclusion === "approved"
+      ).length;
+    },
+    // 璁$畻灞炴�э細涓诲涓撳鐘舵��
+    chiefExpertStatus() {
+      const chiefExpert = this.expertReviews.find(expert => expert.isChief);
+      return chiefExpert
+        ? this.statusTextFilter(chiefExpert.reviewStatus)
+        : "鏈垎閰�";
+    },
+    // 璁$畻灞炴�э細瀹屾垚杩涘害
+    completionRate() {
+      const totalExperts = this.expertReviews.length;
+      const completedExperts = this.expertReviews.filter(
+        expert => expert.reviewStatus === "submitted"
+      ).length;
+      return totalExperts > 0
+        ? Math.round((completedExperts / totalExperts) * 100)
+        : 0;
+    },
+    // 璁$畻灞炴�э細鎬讳綋缁撹
+    overallConclusionText() {
+      if (this.approvedNormalExperts >= 12) {
+        return "閫氳繃";
+      } else if (this.approvedNormalExperts >= 9) {
+        return "淇敼鍚庨�氳繃";
+      } else {
+        return "涓嶉�氳繃";
+      }
+    },
+    overallConclusionFilter() {
+      if (this.approvedNormalExperts >= 12) {
+        return "success";
+      } else if (this.approvedNormalExperts >= 9) {
+        return "warning";
+      } else {
+        return "danger";
+      }
+    },
+    // 鏄惁鍙互鍙戦�佺粰涓撳
+    canSendToNormalExperts() {
+      return (
+        this.expertReviews.filter(
+          expert => !expert.isChief && expert.reviewStatus === "applying"
+        ).length > 0
+      );
+    },
+    // 鏄惁鍙互鍙戦�佺粰涓诲涓撳锛堥渶瑕佽嚦灏�12涓笓瀹跺悓鎰忥級
+    canSendToChiefExpert() {
+      return (
+        this.approvedNormalExperts >= 12 &&
+        this.expertReviews.filter(
+          expert => expert.isChief && expert.reviewStatus === "applying"
+        ).length > 0
+      );
+    },
+    // 鏄惁鍙互鎵归噺鍙戦��
+    canBatchSend() {
+      return (
+        this.expertReviews.filter(expert => expert.reviewStatus === "applying")
+          .length > 0
+      );
+    },
+    // 鏄惁鍙互鍙戦�佷笓瀹跺鏌�
+    canSendToExperts() {
+      return this.form.id && this.form.ethicsConclusion === "reviewing";
+    },
+    // 褰撳墠鐢ㄦ埛淇℃伅
+    currentUser() {
+      return JSON.parse(sessionStorage.getItem("user") || "{}");
+    }
+  },
+  created() {
+    const id = this.$route.query.id;
+    if (id) {
+      this.getDetail(id);
+      this.getAttachments(id);
+      // 涓嶅啀闇�瑕佷粠鎺ュ彛鑾峰彇涓撳鍒楄〃锛屼娇鐢ㄥ浐瀹氱殑expertReviews鏁版嵁
+    } else if (this.$route.path.includes("/add")) {
+      this.generateHospitalNo();
+      this.form.registrant = this.currentUser.username || "褰撳墠鐢ㄦ埛";
+    }
+  },
+  methods: {
+    // 鐢熸垚浣忛櫌鍙�
+    generateHospitalNo() {
+      const timestamp = Date.now().toString();
+      this.form.hospitalNo = "D" + timestamp.slice(-6);
+    },
+    getExpertRowClassName({ row }) {
+      return row.isChief ? "chief-expert-row" : "normal-expert-row";
+    },
+    // 鑾峰彇璇︽儏
+    getDetail(id) {
+      getEthicsReviewDetail(id)
+        .then(response => {
+          if (response.code === 200) {
+            this.form = response.data;
+          }
+        })
+        .catch(error => {
+          console.error("鑾峰彇浼︾悊瀹℃煡璇︽儏澶辫触:", error);
+          this.$message.error("鑾峰彇璇︽儏澶辫触");
+        });
+    },
+
+    // 鑾峰彇涓撳瀹℃煡鍒楄〃
+    getExpertReviews(ethicsReviewId) {
+      this.expertLoading = true;
+      // 妯℃嫙鏁版嵁 - 瀹為檯椤圭洰涓粠鎺ュ彛鑾峰彇
+      setTimeout(() => {
+        this.expertReviews = [
+          // 涓撳锛�18浣嶏級
+          {
+            id: 1,
+            expertName: "寮犳暀鎺�",
+            isChief: false,
+            reviewStatus: "submitted",
+            expertConclusion: "approved",
+            expertOpinion: "绗﹀悎浼︾悊瑕佹眰",
+            reviewTime: "2025-12-01 10:30:00"
+          },
+          {
+            id: 2,
+            expertName: "鏉庢暀鎺�",
+            isChief: false,
+            reviewStatus: "submitted",
+            expertConclusion: "approved",
+            expertOpinion: "鏂规璁捐鍚堢悊",
+            reviewTime: "2025-12-01 11:20:00"
+          },
+          {
+            id: 3,
+            expertName: "鐜嬫暀鎺�",
+            isChief: false,
+            reviewStatus: "applying",
+            expertConclusion: "",
+            expertOpinion: "",
+            reviewTime: ""
+          },
+          // 涓诲涓撳锛�1浣嶏級
+          {
+            id: 19,
+            expertName: "璧典富濮�",
+            isChief: true,
+            reviewStatus: "applying",
+            expertConclusion: "",
+            expertOpinion: "",
+            reviewTime: ""
+          }
+        ];
+        this.expertLoading = false;
+      }, 500);
+    },
+
+    // 鑾峰彇闄勪欢鍒楄〃
+    getAttachments(ethicsReviewId) {
+      this.attachmentLoading = true;
+      getAttachments(ethicsReviewId)
+        .then(response => {
+          if (response.code === 200) {
+            this.attachments = response.data;
+          }
+          this.attachmentLoading = false;
+        })
+        .catch(error => {
+          console.error("鑾峰彇闄勪欢鍒楄〃澶辫触:", error);
+          this.attachmentLoading = false;
+        });
+    },
+
+    // 鐘舵�佽繃婊ゅ櫒
+    statusFilter(status) {
+      const statusMap = {
+        applying: "info",
+        submitted: "success"
+      };
+      return statusMap[status] || "info";
+    },
+
+    statusTextFilter(status) {
+      const statusMap = {
+        applying: "鐢宠涓�",
+        submitted: "宸叉彁浜�"
+      };
+      return statusMap[status] || "鏈煡";
+    },
+
+    // 缁撹杩囨护鍣�
+    conclusionFilter(conclusion) {
+      const conclusionMap = {
+        approved: "success",
+        approved_with_modifications: "warning",
+        disapproved: "danger"
+      };
+      return conclusionMap[conclusion] || "info";
+    },
+
+    conclusionTextFilter(conclusion) {
+      const conclusionMap = {
+        approved: "鍚屾剰",
+        approved_with_modifications: "淇敼鍚庡悓鎰�",
+        disapproved: "涓嶅悓鎰�"
+      };
+      return conclusionMap[conclusion] || "鏈煡";
+    },
+
+    // 淇濆瓨淇℃伅
+    handleSave() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.saveLoading = true;
+          const apiMethod = this.form.id ? updateEthicsReview : addEthicsReview;
+
+          apiMethod(this.form)
+            .then(response => {
+              if (response.code === 200) {
+                this.$message.success("淇濆瓨鎴愬姛");
+                if (!this.form.id) {
+                  this.form.id = response.data.id;
+                  this.$router.replace({
+                    query: { ...this.$route.query, id: this.form.id }
+                  });
+                }
+              }
+            })
+            .catch(error => {
+              console.error("淇濆瓨澶辫触:", error);
+              this.$message.error("淇濆瓨澶辫触");
+            })
+            .finally(() => {
+              this.saveLoading = false;
+            });
+        }
+      });
+    },
+
+    // 鍙戦�佷笓瀹跺鏌�
+    handleSendToExperts() {
+      this.sendDialogVisible = true;
+    },
+
+    // 鍙戦�佺粰涓撳
+    handleSendToNormalExperts() {
+      const normalExperts = this.expertReviews.filter(
+        expert => !expert.isChief && expert.reviewStatus === "applying"
+      );
+      this.sendForm.expertIds = normalExperts.map(expert => expert.id);
+      this.sendForm.expertType = "normal";
+      this.sendDialogVisible = true;
+    },
+
+    // 鍙戦�佺粰涓诲涓撳
+    handleSendToChiefExpert() {
+      const chiefExpert = this.expertReviews.find(
+        expert => expert.isChief && expert.reviewStatus === "applying"
+      );
+      if (chiefExpert) {
+        this.sendForm.expertIds = [chiefExpert.id];
+        this.sendForm.expertType = "chief";
+        this.sendDialogVisible = true;
+      }
+    },
+
+    // 鎵归噺鍙戦��
+    handleBatchSend() {
+      const applyingExperts = this.expertReviews.filter(
+        expert => expert.reviewStatus === "applying"
+      );
+      this.sendForm.expertIds = applyingExperts.map(expert => expert.id);
+      this.sendForm.expertType = "batch";
+      this.sendDialogVisible = true;
+    },
+
+    // 鍙戦�佺粰鍗曚釜涓撳
+    handleSendToExpert(expert) {
+      this.sendForm.expertIds = [expert.id];
+      this.sendForm.expertType = expert.isChief ? "chief" : "normal";
+      this.sendDialogVisible = true;
+    },
+
+    // 纭鍙戦��
+    handleSendConfirm() {
+      if (this.sendForm.expertIds.length === 0) {
+        this.$message.warning("璇烽�夋嫨瑕佸彂閫佺殑涓撳");
+        return;
+      }
+
+      sendExpertReview({
+        ethicsReviewId: this.form.id,
+        expertIds: this.sendForm.expertIds,
+        content: this.sendForm.content
+      })
+        .then(response => {
+          if (response.code === 200) {
+            this.$message.success("鍙戦�佹垚鍔�");
+            this.sendDialogVisible = false;
+            this.getExpertReviews(this.form.id);
+            this.sendForm = {
+              expertType: "normal",
+              expertIds: [],
+              content: ""
+            };
+          }
+        })
+        .catch(error => {
+          console.error("鍙戦�佸け璐�:", error);
+          this.$message.error("鍙戦�佸け璐�");
+        });
+    },
+
+    // 缁撴潫瀹℃煡
+    handleEndReview() {
+      this.$confirm(
+        "纭畾瑕佺粨鏉熸湰娆′鸡鐞嗗鏌ュ悧锛熺粨鏉熷悗灏嗘棤娉曚慨鏀逛笓瀹跺鏌ョ粨鏋溿��",
+        "鎻愮ず",
+        {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
+        }
+      )
+        .then(() => {
+          endEthicsReview(this.form.id)
+            .then(response => {
+              if (response.code === 200) {
+                this.$message.success("瀹℃煡宸茬粨鏉�");
+                this.form.ethicsConclusion = "terminated";
+              }
+            })
+            .catch(error => {
+              console.error("缁撴潫瀹℃煡澶辫触:", error);
+              this.$message.error("缁撴潫瀹℃煡澶辫触");
+            });
+        })
+        .catch(() => {});
+    },
+
+    // 缂栬緫涓撳瀹℃煡
+    handleEditExpertReview(expert) {
+      this.$prompt("璇疯緭鍏ュ鏌ユ剰瑙�", "缂栬緫涓撳瀹℃煡", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        inputValue: expert.expertOpinion || "",
+        inputValidator: value => {
+          if (!value || value.trim() === "") {
+            return "瀹℃煡鎰忚涓嶈兘涓虹┖";
+          }
+          return true;
+        }
+      })
+        .then(({ value }) => {
+          // 妯℃嫙鏇存柊涓撳瀹℃煡
+          const index = this.expertReviews.findIndex(e => e.id === expert.id);
+          if (index !== -1) {
+            this.expertReviews[index].expertOpinion = value;
+            this.$message.success("瀹℃煡鎰忚宸叉洿鏂�");
+          }
+        })
+        .catch(() => {});
+    },
+
+    // 鏌ョ湅涓撳瀹℃煡璇︽儏
+    handleViewExpertReview(expert) {
+      this.$alert(
+        `
+        <div>
+          <p><strong>涓撳濮撳悕锛�</strong>${expert.expertName}</p>
+          <p><strong>涓撳绫诲瀷锛�</strong>${
+            expert.isChief ? "涓诲涓撳" : "涓撳"
+          }</p>
+          <p><strong>瀹℃煡鐘舵�侊細</strong>${this.statusTextFilter(
+            expert.reviewStatus
+          )}</p>
+          <p><strong>涓撳缁撹锛�</strong>${
+            expert.expertConclusion
+              ? this.conclusionTextFilter(expert.expertConclusion)
+              : "鏈彁浜�"
+          }</p>
+          <p><strong>瀹℃煡鎰忚锛�</strong>${expert.expertOpinion || "鏃�"}</p>
+          <p><strong>瀹℃煡鏃堕棿锛�</strong>${expert.reviewTime || "鏈鏌�"}</p>
+        </div>
+      `,
+        "涓撳瀹℃煡璇︽儏",
+        {
+          dangerouslyUseHTMLString: true,
+          customClass: "expert-review-detail-dialog"
+        }
+      );
+    },
+
+    // 涓婁紶闄勪欢
+    handleUploadAttachment() {
+      this.uploadDialogVisible = true;
+    },
+
+    // 涓婁紶鍓嶆牎楠�
+    beforeUpload(file) {
+      const allowedTypes = [
+        "application/pdf",
+        "image/jpeg",
+        "image/png",
+        "application/msword",
+        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+        "application/vnd.ms-excel",
+        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+      ];
+
+      const maxSize = 10 * 1024 * 1024;
+
+      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") ||
+        file.name.endsWith(".xls") ||
+        file.name.endsWith(".xlsx");
+
+      if (!isTypeOk) {
+        this.$message.error("鏂囦欢鏍煎紡涓嶆敮鎸�");
+        return false;
+      }
+
+      if (file.size > maxSize) {
+        this.$message.error("鏂囦欢澶у皬涓嶈兘瓒呰繃10MB");
+        return false;
+      }
+
+      return true;
+    },
+
+    // 鏂囦欢閫夋嫨鍙樺寲
+    handleFileChange(file, fileList) {
+      this.tempFileList = fileList;
+    },
+
+    // 鎻愪氦涓婁紶
+    submitUpload() {
+      if (this.tempFileList.length === 0) {
+        this.$message.warning("璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢");
+        return;
+      }
+
+      this.uploadLoading = true;
+
+      const uploadPromises = this.tempFileList.map(file => {
+        const formData = new FormData();
+        formData.append("file", file.raw);
+        formData.append("ethicsReviewId", this.form.id);
+
+        return uploadAttachment(formData);
+      });
+
+      Promise.all(uploadPromises)
+        .then(responses => {
+          this.$message.success("鏂囦欢涓婁紶鎴愬姛");
+          this.uploadDialogVisible = false;
+          this.tempFileList = [];
+          this.getAttachments(this.form.id);
+        })
+        .catch(error => {
+          console.error("涓婁紶澶辫触:", error);
+          this.$message.error("鏂囦欢涓婁紶澶辫触");
+        })
+        .finally(() => {
+          this.uploadLoading = false;
+        });
+    },
+
+    // 棰勮闄勪欢
+    handlePreviewAttachment(attachment) {
+      if (attachment.fileName.endsWith(".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"
+          }
+        );
+      } else {
+        this.$message.info("璇ユ枃浠剁被鍨嬫殏涓嶆敮鎸佸湪绾块瑙堬紝璇蜂笅杞藉悗鏌ョ湅");
+      }
+    },
+
+    // 涓嬭浇闄勪欢
+    handleDownloadAttachment(attachment) {
+      const link = document.createElement("a");
+      link.href = attachment.fileUrl;
+      link.download = attachment.fileName;
+      link.click();
+      this.$message.success(`寮�濮嬩笅杞�: ${attachment.fileName}`);
+    },
+
+    // 鍒犻櫎闄勪欢
+    handleRemoveAttachment(attachment) {
+      this.$confirm("纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      })
+        .then(() => {
+          deleteAttachment(attachment.id)
+            .then(response => {
+              if (response.code === 200) {
+                this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
+                this.getAttachments(this.form.id);
+              }
+            })
+            .catch(error => {
+              console.error("鍒犻櫎闄勪欢澶辫触:", error);
+              this.$message.error("鍒犻櫎闄勪欢澶辫触");
+            });
+        })
+        .catch(() => {});
+    },
+
+    // 鑾峰彇鏂囦欢绫诲瀷
+    getFileType(fileName) {
+      const ext = fileName
+        .split(".")
+        .pop()
+        .toLowerCase();
+      const typeMap = {
+        pdf: "PDF",
+        doc: "DOC",
+        docx: "DOCX",
+        xls: "XLS",
+        xlsx: "XLSX",
+        jpg: "JPG",
+        jpeg: "JPEG",
+        png: "PNG"
+      };
+      return typeMap[ext] || ext.toUpperCase();
+    },
+
+    // 鏂囦欢澶у皬鏍煎紡鍖�
+    formatFileSize(size) {
+      if (size === 0) return "0 B";
+      const k = 1024;
+      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];
+    },
+
+    // 鏃堕棿鏍煎紡鍖�
+    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")}`;
+    }
+  }
+};
+</script>
+<style scoped>
+.ethics-review-detail {
+  padding: 20px;
+  background-color: #f5f7fa;
+}
+
+.detail-card {
+  margin-bottom: 20px;
+  border-radius: 8px;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.expert-card {
+  margin-bottom: 20px;
+  border-radius: 8px;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.attachment-card {
+  margin-bottom: 20px;
+  border-radius: 8px;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.detail-title {
+  font-size: 18px;
+  font-weight: 600;
+  color: #303133;
+}
+
+.expert-stats {
+  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+  color: rgb(43, 181, 245);
+  border-radius: 8px;
+  margin-bottom: 20px;
+}
+
+.stat-item {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  padding: 10px;
+}
+
+.stat-label {
+  font-size: 12px;
+  opacity: 0.9;
+  margin-bottom: 5px;
+}
+
+.stat-value {
+  font-size: 18px;
+  font-weight: bold;
+}
+
+.upload-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 15px;
+  padding: 10px;
+  background-color: #f8f9fa;
+  border-radius: 4px;
+}
+
+.upload-title {
+  font-size: 14px;
+  font-weight: 600;
+  color: #303133;
+}
+
+.file-info {
+  display: flex;
+  align-items: center;
+}
+
+.empty-attachment {
+  text-align: center;
+  padding: 40px 0;
+  color: #909399;
+}
+
+/* 琛ㄥ崟鏍峰紡浼樺寲 */
+:deep(.el-form-item__label) {
+  font-weight: 500;
+}
+
+:deep(.el-input__inner) {
+  border-radius: 4px;
+}
+
+:deep(.el-textarea__inner) {
+  border-radius: 4px;
+  resize: vertical;
+}
+
+/* 琛ㄦ牸鏍峰紡浼樺寲 */
+:deep(.el-table) {
+  border-radius: 8px;
+  overflow: hidden;
+}
+
+:deep(.el-table th) {
+  background-color: #f5f7fa;
+  color: #606266;
+  font-weight: 500;
+}
+
+:deep(.el-table .cell) {
+  padding: 8px 12px;
+}
+
+/* 鎸夐挳鏍峰紡浼樺寲 */
+:deep(.el-button--primary) {
+  background: linear-gradient(135deg, #409eff 0%, #3375e0 100%);
+  border: none;
+  border-radius: 4px;
+}
+
+:deep(.el-button--success) {
+  background: linear-gradient(135deg, #67c23a 0%, #529b2f 100%);
+  border: none;
+  border-radius: 4px;
+}
+
+:deep(.el-button--warning) {
+  background: linear-gradient(135deg, #e6a23c 0%, #d18c2a 100%);
+  border: none;
+  border-radius: 4px;
+}
+
+:deep(.el-button--danger) {
+  background: linear-gradient(135deg, #f56c6c 0%, #e05b5b 100%);
+  border: none;
+  border-radius: 4px;
+}
+
+/* 鏍囩鏍峰紡 */
+:deep(.el-tag) {
+  border-radius: 12px;
+  border: none;
+  font-weight: 500;
+}
+
+/* 瀵硅瘽妗嗘牱寮忎紭鍖� */
+:deep(.el-dialog) {
+  border-radius: 8px;
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
+}
+
+:deep(.el-dialog__header) {
+  background: linear-gradient(135deg, #f5f7fa 0%, #e4e7ed 100%);
+  border-bottom: 1px solid #e4e7ed;
+  padding: 15px 20px;
+}
+
+:deep(.el-dialog__title) {
+  font-weight: 600;
+  color: #303133;
+}
+
+/* 涓婁紶缁勪欢鏍峰紡 */
+:deep(.el-upload-dragger) {
+  border: 2px dashed #dcdfe6;
+  border-radius: 6px;
+  background-color: #fafafa;
+  transition: all 0.3s ease;
+}
+
+:deep(.el-upload-dragger:hover) {
+  border-color: #409eff;
+  background-color: #f0f7ff;
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+  .ethics-review-detail {
+    padding: 10px;
+  }
+
+  .expert-stats .el-col {
+    margin-bottom: 10px;
+  }
+
+  .upload-header {
+    flex-direction: column;
+    align-items: flex-start;
+    gap: 10px;
+  }
+}
+
+/* 鍔ㄧ敾鏁堟灉 */
+.fade-enter-active,
+.fade-leave-active {
+  transition: opacity 0.3s ease;
+}
+
+.fade-enter,
+.fade-leave-to {
+  opacity: 0;
+}
+
+/* 鍔犺浇鐘舵�� */
+.loading-container {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 200px;
+}
+
+/* 涓撳绫诲瀷鏍峰紡 */
+.normal-expert {
+  color: #409eff;
+  font-weight: 500;
+}
+
+.chief-expert {
+  color: #f56c6c;
+  font-weight: 600;
+}
+
+/* 涓撳琛屾牱寮� */
+:deep(.normal-expert-row) {
+  background-color: #fafafa;
+}
+
+:deep(.chief-expert-row) {
+  background-color: #fff7e6;
+}
+
+:deep(.normal-expert-row:hover) {
+  background-color: #f0f7ff;
+}
+
+:deep(.chief-expert-row:hover) {
+  background-color: #ffecc2;
+}
+
+/* 鏃犳暟鎹牱寮� */
+.no-data {
+  color: #909399;
+  font-style: italic;
+}
+
+/* 涓撳鎰忚鏍峰紡 */
+.expert-opinion {
+  color: #303133;
+  line-height: 1.5;
+}
+
+/* 宸插彂閫佹寜閽牱寮� */
+.sent-button {
+  color: #67c23a !important;
+}
+
+/* 琛ㄦ牸琛屾偓鍋滄晥鏋� */
+:deep(.el-table__row:hover) {
+  transform: translateY(-1px);
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+  transition: all 0.3s ease;
+}
+
+/* 鑷畾涔夋粴鍔ㄦ潯 */
+:deep(::-webkit-scrollbar) {
+  width: 6px;
+  height: 6px;
+}
+
+:deep(::-webkit-scrollbar-track) {
+  background: #f1f1f1;
+  border-radius: 3px;
+}
+
+:deep(::-webkit-scrollbar-thumb) {
+  background: #c1c1c1;
+  border-radius: 3px;
+}
+
+:deep(::-webkit-scrollbar-thumb:hover) {
+  background: #a8a8a8;
+}
+
+/* 涓撳瀹℃煡琛ㄦ牸鐗规畩鏍峰紡 */
+.expert-table-special :deep(.el-table__row) {
+  transition: all 0.3s ease;
+}
+
+.expert-table-special :deep(.el-table__row:hover) {
+  background-color: #f0f7ff;
+  transform: translateY(-1px);
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+/* 涓诲涓撳琛岄珮浜� */
+:deep(.chief-expert-row) {
+  background-color: #fff7e6 !important;
+}
+
+:deep(.chief-expert-row:hover) {
+  background-color: #ffecc2 !important;
+}
+</style>
diff --git a/src/views/business/ethicalReview/ethicalReviewInfo.vue b/src/views/business/ethicalReview/ethicalReviewInfo.vue
index 4040953..ca2a9c2 100644
--- a/src/views/business/ethicalReview/ethicalReviewInfo.vue
+++ b/src/views/business/ethicalReview/ethicalReviewInfo.vue
@@ -1,7 +1,9 @@
 <template>
   <div class="ethics-review-detail">
+    <case-basic-info :case-id="caseId" :show-attachment="true" />
+
     <el-card class="detail-card">
-      <!-- 鍩虹淇℃伅 -->
+      <!-- 浼︾悊瀹℃煡鍩烘湰淇℃伅 -->
       <div slot="header" class="clearfix">
         <span class="detail-title">浼︾悊瀹℃煡鍩烘湰淇℃伅</span>
         <div style="float: right;">
@@ -12,7 +14,7 @@
           <el-button
             type="warning"
             @click="handleEndReview"
-            :disabled="form.ethicsConclusion === 'terminated'"
+            :disabled="form.status === '2'"
           >
             缁撴潫瀹℃煡
           </el-button>
@@ -22,94 +24,155 @@
       <el-form :model="form" ref="form" :rules="rules" label-width="120px">
         <el-row :gutter="20">
           <el-col :span="8">
-            <el-form-item label="浣忛櫌鍙�" prop="hospitalNo">
-              <el-input v-model="form.hospitalNo" readonly />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
-              <el-input v-model="form.donorName" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鎬у埆" prop="gender">
-              <el-select v-model="form.gender" style="width: 100%">
-                <el-option label="鐢�" value="0" />
-                <el-option label="濂�" value="1" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
+            <el-form-item label="鍙戣捣涓婚" prop="initiateTheme">
+              <el-input
+                v-model="form.initiateTheme"
+                placeholder="璇疯緭鍏ュ彂璧蜂富棰�"
 
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="骞撮緞" prop="age">
-              <el-input v-model="form.age" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="16">
-            <el-form-item label="鐤剧梾璇婃柇" prop="diagnosis">
-              <el-input v-model="form.diagnosis" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="浼︾悊缁撹" prop="ethicsConclusion">
-              <el-select v-model="form.ethicsConclusion" style="width: 100%">
-                <el-option label="瀹℃煡涓�" value="reviewing" />
-                <el-option label="鍚屾剰" value="approved" />
-                <el-option
-                  label="淇敼鍚庡悓鎰�"
-                  value="approved_with_modifications"
-                />
-                <el-option label="淇敼鍚庨噸瀹�" value="re-review" />
-                <el-option label="涓嶅悓鎰�" value="disapproved" />
-                <el-option label="缁堟瀹℃煡" value="terminated" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="瀹℃煡鏃堕棿" prop="reviewTime">
-              <el-date-picker
-                v-model="form.reviewTime"
-                type="datetime"
-                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="registrant">
-              <el-input v-model="form.registrant" />
+            <el-form-item label="鍙戣捣浜�" prop="initiatePerson">
+              <el-input v-model="form.initiatePerson"  />
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="瀹℃煡鐘舵��" prop="status">
+              <el-select
+                v-model="form.status"
+                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 :span="8">
+            <el-form-item label="鍙戣捣鏃堕棿" prop="startTime">
+              <el-date-picker
+                v-model="form.startTime"
+                type="datetime"
+                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="cutOffTime">
+              <el-date-picker
+                v-model="form.cutOffTime"
+                type="datetime"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                style="width: 100%"
+
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <!-- 涓撳鐩稿叧淇℃伅 -->
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="涓撳濮撳悕" prop="expertName">
+              <el-input v-model="form.expertName"  />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="涓撳缂栧彿" prop="expertNo">
+              <el-input v-model="form.expertNo"  />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="涓撳绫诲瀷" prop="expertType">
+              <el-select
+                v-model="form.expertType"
+                style="width: 100%"
+
+              >
+                <el-option label="鏅�氫笓瀹�" value="normal" />
+                <el-option label="涓诲涓撳" value="chief" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="涓撳缁撹" prop="expertConclusion">
+              <el-select
+                v-model="form.expertConclusion"
+                style="width: 100%"
+
+              >
+                <el-option label="鍚屾剰" value="1" />
+                <el-option label="涓嶅悓鎰�" value="0" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="涓撳缁撹鏃堕棿" prop="expertTime">
+              <el-date-picker
+                v-model="form.expertTime"
+                type="datetime"
+                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="orderNo">
+              <el-input-number
+                v-model="form.orderNo"
+                :min="1"
+                :max="20"
+                style="width: 100%"
+
+              />
             </el-form-item>
           </el-col>
         </el-row>
 
         <el-row :gutter="20">
           <el-col :span="24">
-            <el-form-item label="浼︾悊鎰忚" prop="ethicsOpinion">
+            <el-form-item label="涓撳鎰忚" prop="expertOpinion">
               <el-input
                 type="textarea"
-                :rows="3"
-                v-model="form.ethicsOpinion"
-                placeholder="璇疯緭鍏ヤ鸡鐞嗗鏌ユ剰瑙�"
+                :rows="2"
+                v-model="form.expertOpinion"
+                placeholder="璇疯緭鍏ヤ笓瀹舵剰瑙�"
+
               />
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-form-item label="鐧昏鏃堕棿" prop="registrationTime">
-          <el-date-picker
-            v-model="form.registrationTime"
-            type="datetime"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            style="width: 100%"
-          />
-        </el-form-item>
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="澶囨敞" prop="remark">
+              <el-input
+                type="textarea"
+                :rows="3"
+                v-model="form.remark"
+                placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
+
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
       </el-form>
     </el-card>
+
     <!-- 闄勪欢涓婁紶 -->
     <el-card class="attachment-card">
       <div slot="header" class="clearfix">
@@ -176,12 +239,11 @@
         </el-table-column>
       </el-table>
     </el-card>
+
     <!-- 涓撳瀹℃煡鎯呭喌 -->
     <el-card class="expert-card">
       <div slot="header" class="clearfix">
-        <span class="detail-title"
-          >涓撳瀹℃煡鎯呭喌 (18浣嶄笓瀹� + 1浣嶄富濮斾笓瀹�)</span
-        >
+        <span class="detail-title">涓撳瀹℃煡鎯呭喌 (18浣嶄笓瀹� + 1浣嶄富濮斾笓瀹�)</span>
         <div style="float: right;">
           <el-button
             size="mini"
@@ -209,7 +271,8 @@
           </el-button>
         </div>
       </div>
- <!-- 涓撳缁熻淇℃伅 -->
+
+      <!-- 涓撳缁熻淇℃伅 -->
       <div
         class="expert-stats"
         style="margin-top: 20px; padding: 15px; background: #f5f7fa; border-radius: 4px;"
@@ -245,12 +308,13 @@
           </el-col>
         </el-row>
       </div>
+
       <!-- 涓撳瀹℃煡琛ㄦ牸 -->
       <el-table
         :data="expertReviews"
         v-loading="expertLoading"
         style="width: 100%"
-        heiht="300"
+        height="800"
         :row-class-name="getExpertRowClassName"
       >
         <el-table-column label="搴忓彿" width="60" align="center" type="index" />
@@ -320,7 +384,7 @@
         <el-table-column label="鍙戦�佹椂闂�" width="160" align="center">
           <template slot-scope="scope">
             <span>{{
-              scope.row.reviewTime ? parseTime(scope.row.reviewTime) : "鏈彂閫�"
+              scope.row.sendTime ? parseTime(scope.row.sendTime) : "鏈彂閫�"
             }}</span>
           </template>
         </el-table-column>
@@ -357,8 +421,6 @@
           </template>
         </el-table-column>
       </el-table>
-
-
     </el-card>
 
     <!-- 鍙戦�佷笓瀹跺璇濇 -->
@@ -409,58 +471,143 @@
         >
       </div>
     </el-dialog>
+
+    <!-- 涓婁紶闄勪欢瀵硅瘽妗� -->
+    <el-dialog
+      title="涓婁紶闄勪欢"
+      :visible.sync="uploadDialogVisible"
+      width="500px"
+      :close-on-click-modal="false"
+    >
+      <el-upload
+        ref="uploadRef"
+        class="upload-demo"
+        drag
+        :action="uploadAction"
+        :headers="headers"
+        multiple
+        :file-list="tempFileList"
+        :before-upload="beforeUpload"
+        :on-change="handleFileChange"
+        :on-remove="handleTempRemove"
+        :on-success="handleUploadSuccess"
+        :auto-upload="false"
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+        <div class="el-upload__tip" slot="tip">
+          鏀寔涓婁紶pdf銆乯pg銆乸ng銆乨oc銆乨ocx銆亁ls銆亁lsx鏍煎紡鏂囦欢锛屽崟涓枃浠朵笉瓒呰繃10MB
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="uploadDialogVisible = false">鍙栨秷</el-button>
+        <el-button
+          type="primary"
+          @click="submitUpload"
+          :loading="uploadLoading"
+          :disabled="tempFileList.length === 0"
+        >
+          纭涓婁紶
+        </el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
+
 <script>
+import { getToken } from "@/utils/auth";
 import {
-  getEthicsReviewDetail,
-  updateEthicsReview,
-  sendExpertReview,
-  endEthicsReview,
-  uploadAttachment,
-  deleteAttachment,
-  getAttachments
-} from "./ethicsReview";
+  reviewinitiateBaseInfoList,
+  ethicalreviewedit,
+  ethicalreviewadd
+} from "@/api/businessApi";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
 
 export default {
   name: "EthicsReviewDetail",
+  components: { CaseBasicInfo },
+
   data() {
     return {
+      // 椤甸潰妯″紡
+      isEdit: false,
+      // 鍩烘湰淇℃伅
+      infoid: undefined,
+      caseId: null,
+      caseNo: "",
+
       // 琛ㄥ崟鏁版嵁
       form: {
+        // 鍩虹淇℃伅
         id: undefined,
-        hospitalNo: "",
-        donorName: "",
-        gender: "",
-        age: "",
-        diagnosis: "",
-        ethicsConclusion: "reviewing",
-        ethicsOpinion: "",
-        reviewTime: "",
-        registrant: "",
-        registrationTime: new Date()
-          .toISOString()
-          .replace("T", " ")
-          .substring(0, 19)
+        infoid: undefined,
+        caseNo: "",
+        initiateTheme: "",
+        initiatePerson: "",
+
+        // 鐘舵�佸拰鏃堕棿
+        status: "0", // 0:鏂板缓, 1:瀹℃煡涓�, 2:缁撴潫
+        startTime: "",
+        cutOffTime: "",
+        endTime: "",
+
+        // 涓撳淇℃伅
+        expertName: "",
+        expertNo: "",
+        expertType: "normal",
+        expertConclusion: "",
+        expertOpinion: "",
+        expertTime: "",
+        orderNo: 1,
+
+        // 澶囨敞
+        remark: "",
+
+        // 绯荤粺瀛楁
+        createBy: "",
+        createTime: "",
+        updateBy: "",
+        updateTime: "",
+        delFlag: "0"
       },
       // 琛ㄥ崟楠岃瘉瑙勫垯
-      rules: {
-        donorName: [
-          { required: true, message: "鎹愮尞鑰呭鍚嶄笉鑳戒负绌�", trigger: "blur" }
-        ],
-        ethicsConclusion: [
-          { required: true, message: "浼︾悊缁撹涓嶈兘涓虹┖", trigger: "change" }
-        ],
-        reviewTime: [
-          { required: true, message: "瀹℃煡鏃堕棿涓嶈兘涓虹┖", trigger: "change" }
-        ]
-      },
+     rules: {
+  initiateTheme: [
+    { required: true, message: "鍙戣捣涓婚涓嶈兘涓虹┖", trigger: "blur" },
+    { min: 2, max: 100, message: "闀垮害鍦� 2 鍒� 100 涓瓧绗�", trigger: "blur" }
+  ],
+  initiatePerson: [
+    { required: true, message: "鍙戣捣浜轰笉鑳戒负绌�", trigger: "blur" }
+  ],
+  status: [
+    { required: true, message: "瀹℃煡鐘舵�佷笉鑳戒负绌�", trigger: "change" }
+  ],
+  startTime: [
+    { required: true, message: "鍙戣捣鏃堕棿涓嶈兘涓虹┖", trigger: "change" }
+  ],
+  cutOffTime: [
+    { required: true, message: "鎴鏃堕棿涓嶈兘涓虹┖", trigger: "change" }
+  ],
+  expertName: [
+    { max: 50, message: "闀垮害涓嶈兘瓒呰繃 50 涓瓧绗�", trigger: "blur" }
+  ],
+  expertNo: [
+    { max: 50, message: "闀垮害涓嶈兘瓒呰繃 50 涓瓧绗�", trigger: "blur" }
+  ],
+  expertConclusion: [
+    { max: 2, message: "闀垮害涓嶈兘瓒呰繃 2 涓瓧绗�", trigger: "change" }
+  ],
+  remark: [
+    { max: 500, message: "闀垮害涓嶈兘瓒呰繃 500 涓瓧绗�", trigger: "blur" }
+  ]
+},
       // 淇濆瓨鍔犺浇鐘舵��
       saveLoading: false,
 
       // 闄勪欢鏁版嵁
       attachments: [],
-     expertReviews: [
+      // 涓撳瀹℃煡鏁版嵁
+      expertReviews: [
         // 涓撳锛�18浣嶏級- 鍒濆鐘舵�佷负鐢宠涓�
         {
           id: 1,
@@ -469,7 +616,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 2,
@@ -478,7 +626,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 3,
@@ -487,7 +636,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 4,
@@ -496,7 +646,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 5,
@@ -505,7 +656,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 6,
@@ -514,7 +666,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 7,
@@ -523,7 +676,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 8,
@@ -532,7 +686,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 9,
@@ -541,7 +696,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 10,
@@ -550,7 +706,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 11,
@@ -559,7 +716,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 12,
@@ -568,7 +726,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 13,
@@ -577,7 +736,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 14,
@@ -586,7 +746,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 15,
@@ -595,7 +756,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 16,
@@ -604,7 +766,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 17,
@@ -613,7 +776,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         {
           id: 18,
@@ -622,7 +786,8 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         },
         // 涓诲涓撳锛�1浣嶏級
         {
@@ -632,11 +797,13 @@
           reviewStatus: "applying",
           expertConclusion: "",
           expertOpinion: "",
-          reviewTime: ""
+          reviewTime: "",
+          sendTime: ""
         }
       ],
       expertLoading: false,
       attachmentLoading: false,
+
       // 鍙戦�佸璇濇
       sendDialogVisible: false,
       sendForm: {
@@ -644,16 +811,37 @@
         expertIds: [],
         content: ""
       },
+
       // 涓婁紶鐩稿叧
       uploadDialogVisible: false,
       uploadLoading: false,
       tempFileList: [],
+      uploadAction: process.env.VUE_APP_BASE_API + "/common/upload",
+      headers: {
+        Authorization: "Bearer " + getToken()
+      },
+
       // 鍙敤涓撳鍒楄〃
       availableExperts: [
-        { id: 1, name: "寮犳暀鎺�", type: "normal" },
-        { id: 2, name: "鏉庢暀鎺�", type: "normal" },
-        { id: 3, name: "鐜嬫暀鎺�", type: "normal" },
-        { id: 4, name: "璧典富濮�", type: "chief" }
+        { id: 1, name: "闄舵槉", type: "normal" },
+        { id: 2, name: "鍒樻枌", type: "normal" },
+        { id: 3, name: "浜庢捣鍒�", type: "normal" },
+        { id: 4, name: "鐜嬬孩姊�", type: "normal" },
+        { id: 5, name: "鐜嬫槬鍏�", type: "normal" },
+        { id: 6, name: "鐜嬮潤", type: "normal" },
+        { id: 7, name: "杈规枃瓒�", type: "normal" },
+        { id: 8, name: "闂織鍕�", type: "normal" },
+        { id: 9, name: "璁稿嚖", type: "normal" },
+        { id: 10, name: "璁镐紶灞�", type: "normal" },
+        { id: 11, name: "寮犵孩宀�", type: "normal" },
+        { id: 12, name: "鏉ㄨ嫃姘�", type: "normal" },
+        { id: 13, name: "瀹嬬帀寮�", type: "normal" },
+        { id: 14, name: "鍛ㄤ紶鍒�", type: "normal" },
+        { id: 15, name: "鑽嗗嚒娉�", type: "normal" },
+        { id: 16, name: "鐭枃鎹�", type: "normal" },
+        { id: 17, name: "钁i渿", type: "normal" },
+        { id: 18, name: "钄¢噾璐�", type: "normal" },
+        { id: 19, name: "瀛斿績娑�", type: "chief" }
       ]
     };
   },
@@ -724,47 +912,63 @@
           .length > 0
       );
     },
-    // 鏄惁鍙互鍙戦�佷笓瀹跺鏌�
-    canSendToExperts() {
-      return this.form.id && this.form.ethicsConclusion === "reviewing";
-    },
     // 褰撳墠鐢ㄦ埛淇℃伅
     currentUser() {
       return JSON.parse(sessionStorage.getItem("user") || "{}");
     }
   },
   created() {
-    const id = this.$route.query.id;
-    if (id) {
-      this.getDetail(id);
-      this.getAttachments(id);
-      // 涓嶅啀闇�瑕佷粠鎺ュ彛鑾峰彇涓撳鍒楄〃锛屼娇鐢ㄥ浐瀹氱殑expertReviews鏁版嵁
-    } else if (this.$route.path.includes("/add")) {
-      this.generateHospitalNo();
-      this.form.registrant = this.currentUser.username || "褰撳墠鐢ㄦ埛";
-    }
+    this.infoid = this.$route.query.infoid;
+    this.caseId = this.$route.query.infoid;
+    // const id = this.$route.query.id;
+    this.getDetail(this.infoid);
+
+    // if (id && !this.$route.path.includes("/add")) {
+    //   this.getDetail(this.infoid);
+    // } else if (this.$route.path.includes("/add") && this.infoid) {
+    //   this.initNewData();
+    // }
   },
   methods: {
-    // 鐢熸垚浣忛櫌鍙�
-    generateHospitalNo() {
-      const timestamp = Date.now().toString();
-      this.form.hospitalNo = "D" + timestamp.slice(-6);
+    // 鍒濆鍖栨柊澧炴暟鎹�
+    initNewData() {
+      this.form.infoid = this.infoid;
+      this.form.caseNo = this.$route.query.caseNo || "";
+      this.form.initiatePerson = this.currentUser.username || "褰撳墠鐢ㄦ埛";
+      this.form.startTime = new Date()
+        .toISOString()
+        .replace("T", " ")
+        .substring(0, 19);
+      this.form.createBy = this.currentUser.username || "admin";
     },
-    getExpertRowClassName({ row }) {
-      return row.isChief ? "chief-expert-row" : "normal-expert-row";
-    },
+
     // 鑾峰彇璇︽儏
-    getDetail(id) {
-      getEthicsReviewDetail(id)
-        .then(response => {
-          if (response.code === 200) {
-            this.form = response.data;
+    async getDetail(infoid) {
+      try {
+        this.expertLoading = true;
+        const response = await reviewinitiateBaseInfoList({ infoid: infoid });
+
+        if (response.code === 200) {
+          let detailData = {};
+
+          if (response.data) {
+            this.form = response.data[0];
           }
-        })
-        .catch(error => {
-          console.error("鑾峰彇浼︾悊瀹℃煡璇︽儏澶辫触:", error);
-          this.$message.error("鑾峰彇璇︽儏澶辫触");
-        });
+          console.log(this.form, "this.form ");
+
+          this.infoid = detailData.infoid || this.infoid;
+          this.caseNo = detailData.caseNo || "";
+
+          this.$message.success("鏁版嵁鍔犺浇鎴愬姛");
+        } else {
+          this.$message.error("鑾峰彇璇︽儏澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+      } catch (error) {
+        console.error("鑾峰彇浼︾悊瀹℃煡璇︽儏澶辫触:", error);
+        this.$message.error("鏁版嵁鍔犺浇澶辫触");
+      } finally {
+        this.expertLoading = false;
+      }
     },
 
     // 鑾峰彇涓撳瀹℃煡鍒楄〃
@@ -772,46 +976,6 @@
       this.expertLoading = true;
       // 妯℃嫙鏁版嵁 - 瀹為檯椤圭洰涓粠鎺ュ彛鑾峰彇
       setTimeout(() => {
-        this.expertReviews = [
-          // 涓撳锛�18浣嶏級
-          {
-            id: 1,
-            expertName: "寮犳暀鎺�",
-            isChief: false,
-            reviewStatus: "submitted",
-            expertConclusion: "approved",
-            expertOpinion: "绗﹀悎浼︾悊瑕佹眰",
-            reviewTime: "2025-12-01 10:30:00"
-          },
-          {
-            id: 2,
-            expertName: "鏉庢暀鎺�",
-            isChief: false,
-            reviewStatus: "submitted",
-            expertConclusion: "approved",
-            expertOpinion: "鏂规璁捐鍚堢悊",
-            reviewTime: "2025-12-01 11:20:00"
-          },
-          {
-            id: 3,
-            expertName: "鐜嬫暀鎺�",
-            isChief: false,
-            reviewStatus: "applying",
-            expertConclusion: "",
-            expertOpinion: "",
-            reviewTime: ""
-          },
-          // 涓诲涓撳锛�1浣嶏級
-          {
-            id: 19,
-            expertName: "璧典富濮�",
-            isChief: true,
-            reviewStatus: "applying",
-            expertConclusion: "",
-            expertOpinion: "",
-            reviewTime: ""
-          }
-        ];
         this.expertLoading = false;
       }, 500);
     },
@@ -819,17 +983,15 @@
     // 鑾峰彇闄勪欢鍒楄〃
     getAttachments(ethicsReviewId) {
       this.attachmentLoading = true;
-      getAttachments(ethicsReviewId)
-        .then(response => {
-          if (response.code === 200) {
-            this.attachments = response.data;
-          }
-          this.attachmentLoading = false;
-        })
-        .catch(error => {
-          console.error("鑾峰彇闄勪欢鍒楄〃澶辫触:", error);
-          this.attachmentLoading = false;
-        });
+      // 妯℃嫙鑾峰彇闄勪欢
+      setTimeout(() => {
+        this.attachmentLoading = false;
+      }, 500);
+    },
+
+    // 涓撳琛屾牱寮�
+    getExpertRowClassName({ row }) {
+      return row.isChief ? "chief-expert-row" : "normal-expert-row";
     },
 
     // 鐘舵�佽繃婊ゅ櫒
@@ -869,38 +1031,85 @@
     },
 
     // 淇濆瓨淇℃伅
-    handleSave() {
-      this.$refs.form.validate(valid => {
+    async handleSave() {
+      this.$refs.form.validate(async valid => {
         if (valid) {
           this.saveLoading = true;
-          const apiMethod = this.form.id ? updateEthicsReview : addEthicsReview;
+          try {
+            const submitData = {
+              ...this.form,
+              // 纭繚蹇呰瀛楁
+              infoid: this.infoid,
+              caseNo: this.caseNo
+            };
 
-          apiMethod(this.form)
-            .then(response => {
-              if (response.code === 200) {
-                this.$message.success("淇濆瓨鎴愬姛");
-                if (!this.form.id) {
-                  this.form.id = response.data.id;
-                  this.$router.replace({
-                    query: { ...this.$route.query, id: this.form.id }
-                  });
-                }
+            let response = null;
+
+            if (submitData.id) {
+              response = await ethicalreviewedit(submitData);
+            } else {
+              response = await ethicalreviewadd(submitData);
+            }
+
+            if (response.code === 200) {
+              this.$message.success("淇濆瓨鎴愬姛");
+              this.isEdit = false;
+              if (!this.form.id && response.data && response.data.id) {
+                this.form.id = response.data.id;
+                this.$router.replace({
+                  query: { ...this.$route.query, id: this.form.id }
+                });
               }
-            })
-            .catch(error => {
-              console.error("淇濆瓨澶辫触:", error);
-              this.$message.error("淇濆瓨澶辫触");
-            })
-            .finally(() => {
-              this.saveLoading = false;
-            });
+            } else {
+              this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+            }
+          } catch (error) {
+            console.error("淇濆瓨澶辫触:", error);
+            this.$message.error("淇濆瓨澶辫触锛岃閲嶈瘯");
+          } finally {
+            this.saveLoading = false;
+          }
         }
       });
     },
 
-    // 鍙戦�佷笓瀹跺鏌�
-    handleSendToExperts() {
-      this.sendDialogVisible = true;
+    // 缁撴潫瀹℃煡
+    async handleEndReview() {
+      this.$confirm(
+        "纭畾瑕佺粨鏉熸湰娆′鸡鐞嗗鏌ュ悧锛熺粨鏉熷悗灏嗘棤娉曚慨鏀逛笓瀹跺鏌ョ粨鏋溿��",
+        "鎻愮ず",
+        {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
+        }
+      )
+        .then(async () => {
+          try {
+            const updateData = {
+              ...this.form,
+              status: "2",
+              endTime: new Date()
+                .toISOString()
+                .replace("T", " ")
+                .substring(0, 19)
+            };
+
+            const response = await ethicalreviewedit(updateData);
+
+            if (response.code === 200) {
+              this.$message.success("瀹℃煡宸茬粨鏉�");
+              this.form.status = "2";
+              this.form.endTime = updateData.endTime;
+            } else {
+              this.$message.error("鎿嶄綔澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+            }
+          } catch (error) {
+            console.error("缁撴潫瀹℃煡澶辫触:", error);
+            this.$message.error("缁撴潫瀹℃煡澶辫触");
+          }
+        })
+        .catch(() => {});
     },
 
     // 鍙戦�佺粰涓撳
@@ -949,54 +1158,29 @@
         return;
       }
 
-      sendExpertReview({
-        ethicsReviewId: this.form.id,
-        expertIds: this.sendForm.expertIds,
-        content: this.sendForm.content
-      })
-        .then(response => {
-          if (response.code === 200) {
-            this.$message.success("鍙戦�佹垚鍔�");
-            this.sendDialogVisible = false;
-            this.getExpertReviews(this.form.id);
-            this.sendForm = {
-              expertType: "normal",
-              expertIds: [],
-              content: ""
-            };
-          }
-        })
-        .catch(error => {
-          console.error("鍙戦�佸け璐�:", error);
-          this.$message.error("鍙戦�佸け璐�");
-        });
-    },
+      // 妯℃嫙鍙戦��
+      this.$message.success("鍙戦�佹垚鍔�");
+      this.sendDialogVisible = false;
 
-    // 缁撴潫瀹℃煡
-    handleEndReview() {
-      this.$confirm(
-        "纭畾瑕佺粨鏉熸湰娆′鸡鐞嗗鏌ュ悧锛熺粨鏉熷悗灏嗘棤娉曚慨鏀逛笓瀹跺鏌ョ粨鏋溿��",
-        "鎻愮ず",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
+      // 鏇存柊涓撳鐘舵��
+      this.sendForm.expertIds.forEach(expertId => {
+        const index = this.expertReviews.findIndex(
+          expert => expert.id === expertId
+        );
+        if (index !== -1) {
+          this.expertReviews[index].reviewStatus = "submitted";
+          this.expertReviews[index].sendTime = new Date()
+            .toISOString()
+            .replace("T", " ")
+            .substring(0, 19);
         }
-      )
-        .then(() => {
-          endEthicsReview(this.form.id)
-            .then(response => {
-              if (response.code === 200) {
-                this.$message.success("瀹℃煡宸茬粨鏉�");
-                this.form.ethicsConclusion = "terminated";
-              }
-            })
-            .catch(error => {
-              console.error("缁撴潫瀹℃煡澶辫触:", error);
-              this.$message.error("缁撴潫瀹℃煡澶辫触");
-            });
-        })
-        .catch(() => {});
+      });
+
+      this.sendForm = {
+        expertType: "normal",
+        expertIds: [],
+        content: ""
+      };
     },
 
     // 缂栬緫涓撳瀹℃煡
@@ -1052,7 +1236,7 @@
       );
     },
 
-    // 涓婁紶闄勪欢
+    // 涓婁紶闄勪欢鐩稿叧鏂规硶
     handleUploadAttachment() {
       this.uploadDialogVisible = true;
     },
@@ -1100,37 +1284,30 @@
       this.tempFileList = fileList;
     },
 
+    // 绉婚櫎涓存椂鏂囦欢
+    handleTempRemove(file, fileList) {
+      this.tempFileList = fileList;
+    },
+
+    // 涓婁紶鎴愬姛澶勭悊
+    handleUploadSuccess(response, file, fileList) {
+      if (response.code === 200) {
+        this.$message.success("鏂囦欢涓婁紶鎴愬姛");
+        this.uploadDialogVisible = false;
+        this.tempFileList = [];
+      } else {
+        this.$message.error(response.msg || "鏂囦欢涓婁紶澶辫触");
+      }
+    },
+
     // 鎻愪氦涓婁紶
-    submitUpload() {
+    async submitUpload() {
       if (this.tempFileList.length === 0) {
         this.$message.warning("璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢");
         return;
       }
-
+      this.$refs.uploadRef.submit();
       this.uploadLoading = true;
-
-      const uploadPromises = this.tempFileList.map(file => {
-        const formData = new FormData();
-        formData.append("file", file.raw);
-        formData.append("ethicsReviewId", this.form.id);
-
-        return uploadAttachment(formData);
-      });
-
-      Promise.all(uploadPromises)
-        .then(responses => {
-          this.$message.success("鏂囦欢涓婁紶鎴愬姛");
-          this.uploadDialogVisible = false;
-          this.tempFileList = [];
-          this.getAttachments(this.form.id);
-        })
-        .catch(error => {
-          console.error("涓婁紶澶辫触:", error);
-          this.$message.error("鏂囦欢涓婁紶澶辫触");
-        })
-        .finally(() => {
-          this.uploadLoading = false;
-        });
     },
 
     // 棰勮闄勪欢
@@ -1158,29 +1335,6 @@
       link.download = attachment.fileName;
       link.click();
       this.$message.success(`寮�濮嬩笅杞�: ${attachment.fileName}`);
-    },
-
-    // 鍒犻櫎闄勪欢
-    handleRemoveAttachment(attachment) {
-      this.$confirm("纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�", "鎻愮ず", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          deleteAttachment(attachment.id)
-            .then(response => {
-              if (response.code === 200) {
-                this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
-                this.getAttachments(this.form.id);
-              }
-            })
-            .catch(error => {
-              console.error("鍒犻櫎闄勪欢澶辫触:", error);
-              this.$message.error("鍒犻櫎闄勪欢澶辫触");
-            });
-        })
-        .catch(() => {});
     },
 
     // 鑾峰彇鏂囦欢绫诲瀷
@@ -1231,6 +1385,7 @@
   }
 };
 </script>
+
 <style scoped>
 .ethics-review-detail {
   padding: 20px;
@@ -1286,22 +1441,6 @@
   font-weight: bold;
 }
 
-.upload-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 15px;
-  padding: 10px;
-  background-color: #f8f9fa;
-  border-radius: 4px;
-}
-
-.upload-title {
-  font-size: 14px;
-  font-weight: 600;
-  color: #303133;
-}
-
 .file-info {
   display: flex;
   align-items: center;
@@ -1313,133 +1452,6 @@
   color: #909399;
 }
 
-/* 琛ㄥ崟鏍峰紡浼樺寲 */
-:deep(.el-form-item__label) {
-  font-weight: 500;
-}
-
-:deep(.el-input__inner) {
-  border-radius: 4px;
-}
-
-:deep(.el-textarea__inner) {
-  border-radius: 4px;
-  resize: vertical;
-}
-
-/* 琛ㄦ牸鏍峰紡浼樺寲 */
-:deep(.el-table) {
-  border-radius: 8px;
-  overflow: hidden;
-}
-
-:deep(.el-table th) {
-  background-color: #f5f7fa;
-  color: #606266;
-  font-weight: 500;
-}
-
-:deep(.el-table .cell) {
-  padding: 8px 12px;
-}
-
-/* 鎸夐挳鏍峰紡浼樺寲 */
-:deep(.el-button--primary) {
-  background: linear-gradient(135deg, #409eff 0%, #3375e0 100%);
-  border: none;
-  border-radius: 4px;
-}
-
-:deep(.el-button--success) {
-  background: linear-gradient(135deg, #67c23a 0%, #529b2f 100%);
-  border: none;
-  border-radius: 4px;
-}
-
-:deep(.el-button--warning) {
-  background: linear-gradient(135deg, #e6a23c 0%, #d18c2a 100%);
-  border: none;
-  border-radius: 4px;
-}
-
-:deep(.el-button--danger) {
-  background: linear-gradient(135deg, #f56c6c 0%, #e05b5b 100%);
-  border: none;
-  border-radius: 4px;
-}
-
-/* 鏍囩鏍峰紡 */
-:deep(.el-tag) {
-  border-radius: 12px;
-  border: none;
-  font-weight: 500;
-}
-
-/* 瀵硅瘽妗嗘牱寮忎紭鍖� */
-:deep(.el-dialog) {
-  border-radius: 8px;
-  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
-}
-
-:deep(.el-dialog__header) {
-  background: linear-gradient(135deg, #f5f7fa 0%, #e4e7ed 100%);
-  border-bottom: 1px solid #e4e7ed;
-  padding: 15px 20px;
-}
-
-:deep(.el-dialog__title) {
-  font-weight: 600;
-  color: #303133;
-}
-
-/* 涓婁紶缁勪欢鏍峰紡 */
-:deep(.el-upload-dragger) {
-  border: 2px dashed #dcdfe6;
-  border-radius: 6px;
-  background-color: #fafafa;
-  transition: all 0.3s ease;
-}
-
-:deep(.el-upload-dragger:hover) {
-  border-color: #409eff;
-  background-color: #f0f7ff;
-}
-
-/* 鍝嶅簲寮忚璁� */
-@media (max-width: 768px) {
-  .ethics-review-detail {
-    padding: 10px;
-  }
-
-  .expert-stats .el-col {
-    margin-bottom: 10px;
-  }
-
-  .upload-header {
-    flex-direction: column;
-    align-items: flex-start;
-    gap: 10px;
-  }
-}
-
-/* 鍔ㄧ敾鏁堟灉 */
-.fade-enter-active,
-.fade-leave-active {
-  transition: opacity 0.3s ease;
-}
-
-.fade-enter,
-.fade-leave-to {
-  opacity: 0;
-}
-
-/* 鍔犺浇鐘舵�� */
-.loading-container {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  height: 200px;
-}
 /* 涓撳绫诲瀷鏍峰紡 */
 .normal-expert {
   color: #409eff;
@@ -1485,49 +1497,14 @@
   color: #67c23a !important;
 }
 
-/* 琛ㄦ牸琛屾偓鍋滄晥鏋� */
-:deep(.el-table__row:hover) {
-  transform: translateY(-1px);
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-  transition: all 0.3s ease;
-}
-/* 鑷畾涔夋粴鍔ㄦ潯 */
-:deep(::-webkit-scrollbar) {
-  width: 6px;
-  height: 6px;
-}
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+  .ethics-review-detail {
+    padding: 10px;
+  }
 
-:deep(::-webkit-scrollbar-track) {
-  background: #f1f1f1;
-  border-radius: 3px;
-}
-
-:deep(::-webkit-scrollbar-thumb) {
-  background: #c1c1c1;
-  border-radius: 3px;
-}
-
-:deep(::-webkit-scrollbar-thumb:hover) {
-  background: #a8a8a8;
-}
-
-/* 涓撳瀹℃煡琛ㄦ牸鐗规畩鏍峰紡 */
-.expert-table-special :deep(.el-table__row) {
-  transition: all 0.3s ease;
-}
-
-.expert-table-special :deep(.el-table__row:hover) {
-  background-color: #f0f7ff;
-  transform: translateY(-1px);
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-}
-
-/* 涓诲涓撳琛岄珮浜� */
-:deep(.chief-expert-row) {
-  background-color: #fff7e6 !important;
-}
-
-:deep(.chief-expert-row:hover) {
-  background-color: #ffecc2 !important;
+  .expert-stats .el-col {
+    margin-bottom: 10px;
+  }
 }
 </style>
diff --git a/src/views/business/ethicalReview/index.vue b/src/views/business/ethicalReview/index.vue
index e0cb1be..73029df 100644
--- a/src/views/business/ethicalReview/index.vue
+++ b/src/views/business/ethicalReview/index.vue
@@ -75,16 +75,16 @@
     <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 type="primary" icon="el-icon-plus" @click="handleCreate"
             >鏂板缓瀹℃煡</el-button
-          >
-          <el-button
+          > -->
+          <!-- <el-button
             type="success"
             icon="el-icon-edit"
             :disabled="single"
             @click="handleUpdate"
             >淇敼</el-button
-          >
+          > -->
           <el-button
             type="warning"
             icon="el-icon-download"
@@ -361,7 +361,7 @@
     handleView(row) {
       this.$router.push({
         path: "/case/ethicalReviewInfo",
-        query: { id: row.infoid }
+        query: { infoid: row.infoid }
       });
     },
     // 鏂板鎸夐挳鎿嶄綔
@@ -370,10 +370,10 @@
     },
     // 淇敼鎸夐挳鎿嶄綔
     handleUpdate(row) {
-      const id = row.infoid || this.ids[0];
+      const infoid = row.infoid;
       this.$router.push({
         path: "/case/ethicalReviewInfo",
-        query: { id: id }
+        query: { infoid: infoid }
       });
     },
     // 缁撴潫瀹℃煡鎿嶄綔
diff --git a/src/views/business/maintain/index.vue b/src/views/business/maintain/index.vue
index 9ecc0eb..f433c90 100644
--- a/src/views/business/maintain/index.vue
+++ b/src/views/business/maintain/index.vue
@@ -115,7 +115,7 @@
       >
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column
-          label="浣忛櫌鍙�"
+          label="妗堜緥缂栧彿"
           align="center"
           prop="caseNo"
           width="120"
@@ -191,28 +191,34 @@
           prop="coordinatorName"
           width="100"
         />
-        <el-table-column
+        <!-- <el-table-column
           label="缁存姢椤圭洰"
           align="center"
           prop="itemName"
           width="120"
           show-overflow-tooltip
-        />
+        /> -->
         <el-table-column
-          label="缁存姢鏃堕棿"
+          label="鏈�鏂扮淮鎶ゆ椂闂�"
           align="center"
-          prop="itemTime"
+          prop="updateTime"
           width="140"
         >
           <template slot-scope="scope">
             <span>{{
-              scope.row.itemTime
-                ? parseTime(scope.row.itemTime, "{y}-{m}-{d} {h}:{i}")
+              scope.row.updateTime
+                ? parseTime(scope.row.updateTime)
                 : "-"
             }}</span>
           </template>
         </el-table-column>
         <el-table-column
+          label="缁存姢浜哄憳"
+          align="center"
+          prop="updateBy"
+          width="120"
+        />
+        <el-table-column
           label="鎿嶄綔"
           align="center"
           width="120"
diff --git a/src/views/business/maintain/maintainInfo.vue b/src/views/business/maintain/maintainInfo.vue
index c530732..4e03dca 100644
--- a/src/views/business/maintain/maintainInfo.vue
+++ b/src/views/business/maintain/maintainInfo.vue
@@ -1,7 +1,8 @@
 <template>
   <div class="maintenance-detail">
+    <case-basic-info :case-id="caseId" :show-attachment="true" />
     <!-- 鍩虹淇℃伅 -->
-    <el-card class="detail-card">
+    <!-- <el-card class="detail-card">
       <div slot="header" class="clearfix">
         <span class="detail-title">渚涜�呭熀鏈俊鎭�</span>
         <el-button type="success" style="float: right;" @click="handleSave">
@@ -140,11 +141,11 @@
           />
         </el-form-item>
       </el-form>
-    </el-card>
+    </el-card> -->
 
     <el-card class="assessment-card">
       <div slot="header" class="clearfix">
-        <span class="detail-title">渚涜�呰瘎浼板悇椤硅褰�</span>
+        <span class="detail-title">璇勪及鍚勯」璁板綍</span>
         <el-button
           type="primary"
           size="mini"
@@ -234,6 +235,82 @@
             </el-table>
           </el-card>
         </el-tab-pane>
+        <el-tab-pane label="鎶ょ悊鏍告煡璁板綍" name="hlihc">
+          <el-card class="record-card">
+            <div slot="header" class="clearfix">
+              <span class="detail-title">鎶ょ悊鏍告煡璁板綍</span>
+              <el-button
+                type="primary"
+                size="mini"
+                icon="el-icon-plus"
+                @click="handleAddRecord"
+              >
+                鏂板鏍告煡璁板綍
+              </el-button>
+            </div>
+
+            <el-table :data="recordList" v-loading="recordLoading">
+              <el-table-column
+                label="鏍告煡鏃堕棿"
+                align="center"
+                prop="recordTime"
+                width="160"
+              />
+              <el-table-column
+                label="鏍告煡浜�"
+                align="center"
+                prop="recorder"
+                width="100"
+              />
+              <el-table-column
+                label="鏍告煡璁板綍"
+                align="center"
+                prop="checkRecord"
+                min-width="200"
+                show-overflow-tooltip
+              />
+              <el-table-column label="闄勪欢" align="center" width="120">
+                <template slot-scope="scope">
+                  <el-button
+                    v-if="
+                      scope.row.attachments && scope.row.attachments.length > 0
+                    "
+                    size="mini"
+                    type="text"
+                    @click="handleViewRecordAttachments(scope.row)"
+                  >
+                    鏌ョ湅闄勪欢({{ scope.row.attachments.length }})
+                  </el-button>
+                  <span v-else>鏃犻檮浠�</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="鎿嶄綔"
+                align="center"
+                width="180"
+                class-name="small-padding fixed-width"
+              >
+                <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>
+          </el-card>
+        </el-tab-pane>
 
         <!-- 鑲濆姛鑳借偩鍔熻兘 -->
         <el-tab-pane label="鑲濆姛鑳借偩鍔熻兘" name="liverKidney">
@@ -268,78 +345,6 @@
     </el-card>
 
     <!-- 鎶ょ悊鏍告煡璁板綍 -->
-    <el-card class="record-card">
-      <div slot="header" class="clearfix">
-        <span class="detail-title">鎶ょ悊鏍告煡璁板綍</span>
-        <el-button
-          type="primary"
-          size="mini"
-          icon="el-icon-plus"
-          @click="handleAddRecord"
-        >
-          鏂板鏍告煡璁板綍
-        </el-button>
-      </div>
-
-      <el-table :data="recordList" v-loading="recordLoading">
-        <el-table-column
-          label="鏍告煡鏃堕棿"
-          align="center"
-          prop="recordTime"
-          width="160"
-        />
-        <el-table-column
-          label="鏍告煡浜�"
-          align="center"
-          prop="recorder"
-          width="100"
-        />
-        <el-table-column
-          label="鏍告煡璁板綍"
-          align="center"
-          prop="checkRecord"
-          min-width="200"
-          show-overflow-tooltip
-        />
-        <el-table-column label="闄勪欢" align="center" width="120">
-          <template slot-scope="scope">
-            <el-button
-              v-if="scope.row.attachments && scope.row.attachments.length > 0"
-              size="mini"
-              type="text"
-              @click="handleViewRecordAttachments(scope.row)"
-            >
-              鏌ョ湅闄勪欢({{ scope.row.attachments.length }})
-            </el-button>
-            <span v-else>鏃犻檮浠�</span>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="鎿嶄綔"
-          align="center"
-          width="180"
-          class-name="small-padding fixed-width"
-        >
-          <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>
-    </el-card>
 
     <!-- 鍩瑰吇璁板綍缂栬緫瀵硅瘽妗� -->
     <el-dialog
@@ -569,6 +574,8 @@
 import LiverKidneyPanel from "@/components/MaintainComponents/LiverKidneyPanel.vue";
 import BloodRoutinePanel from "@/components/MaintainComponents/BloodRoutinePanel.vue";
 import UrineRoutinePanel from "@/components/MaintainComponents/UrineRoutinePanel.vue";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
+import store from "@/store";
 import dayjs from "dayjs";
 
 export default {
@@ -579,7 +586,8 @@
     FilePreviewDialog,
     LiverKidneyPanel,
     BloodRoutinePanel,
-    UrineRoutinePanel
+    UrineRoutinePanel,
+    CaseBasicInfo
   },
   dicts: [
     "sys_donornode",
@@ -592,7 +600,8 @@
 
   data() {
     return {
-      isEdit: false,
+      caseId: null,
+      isEdit: true,
       currentMaintenanceId: null,
       isEditMode: false,
       form: {
@@ -686,7 +695,8 @@
 
       // 闄勪欢鐩稿叧閰嶇疆
       attachmentLimit: 10,
-      attachmentAccept: ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt",
+      attachmentAccept:
+        ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt",
 
       // 璇勪及鏁版嵁瀛樺偍
       assessmentData: {
@@ -699,6 +709,8 @@
     };
   },
   created() {
+    this.caseId = this.$route.query.infoid;
+
     this.loadMaintenanceData();
   },
   watch: {
@@ -808,10 +820,13 @@
         if (response.code === 200) {
           this.$message.success("淇濆瓨鎴愬姛");
           this.isEdit = false;
-          this.donatebaseinfoEdit({
-            id: this.$route.query.infoid,
-            extracontent: JSON.stringify(this.extracontentinfo)
-          });
+          if (!this.currentMaintenanceId) {
+            this.currentMaintenanceId = response.data;
+          }
+          // this.donatebaseinfoEdit({
+          //   id: this.$route.query.infoid,
+          //   extracontent: JSON.stringify(this.extracontentinfo)
+          // });
           if (!this.isEditMode && response.data && response.data.id) {
             this.currentMaintenanceId = response.data.id;
             this.isEditMode = true;
@@ -853,14 +868,16 @@
     handleEditCulture(row) {
       this.cultureDialogTitle = "缂栬緫鍩瑰吇璁板綍";
       this.cultureForm = { ...row };
-      this.cultureFileList = row.attachments ? row.attachments.map(item => ({
-        uid: item.id || Math.random(),
-        name: item.fileName,
-        fileSize: item.fileSize,
-        url: item.path || item.fileUrl,
-        uploadTime: item.uploadTime,
-        status: "success"
-      })) : [];
+      this.cultureFileList = row.attachments
+        ? row.attachments.map(item => ({
+            uid: item.id || Math.random(),
+            name: item.fileName,
+            fileSize: item.fileSize,
+            url: item.path || item.fileUrl,
+            uploadTime: item.uploadTime,
+            status: "success"
+          }))
+        : [];
       this.cultureDialogVisible = true;
       this.$nextTick(() => {
         this.$refs.cultureForm && this.$refs.cultureForm.clearValidate();
@@ -915,7 +932,7 @@
           .toISOString()
           .replace("T", " ")
           .substring(0, 19),
-        recorder: "褰撳墠鐢ㄦ埛",
+        recorder: store.getters.name,
         checkRecord: "",
         attachments: []
       };
@@ -929,14 +946,16 @@
     handleEditRecord(row) {
       this.recordDialogTitle = "缂栬緫鎶ょ悊鏍告煡璁板綍";
       this.recordForm = { ...row };
-      this.recordFileList = row.attachments ? row.attachments.map(item => ({
-        uid: item.id || Math.random(),
-        name: item.fileName,
-        fileSize: item.fileSize,
-        url: item.path || item.fileUrl,
-        uploadTime: item.uploadTime,
-        status: "success"
-      })) : [];
+      this.recordFileList = row.attachments
+        ? row.attachments.map(item => ({
+            uid: item.id || Math.random(),
+            name: item.fileName,
+            fileSize: item.fileSize,
+            url: item.path || item.fileUrl,
+            uploadTime: item.uploadTime,
+            status: "success"
+          }))
+        : [];
       this.recordDialogVisible = true;
       this.$nextTick(() => {
         this.$refs.recordForm && this.$refs.recordForm.clearValidate();
@@ -1113,7 +1132,10 @@
     /** 鑾峰彇鏂囦欢绫诲瀷 */
     getFileType(fileName) {
       if (!fileName) return "other";
-      const extension = fileName.split(".").pop().toLowerCase();
+      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"];
@@ -1167,7 +1189,10 @@
 
     /** 鑾峰彇鏂囦欢鎵╁睍鍚� */
     getFileExtension(filename) {
-      return filename.split(".").pop().toLowerCase();
+      return filename
+        .split(".")
+        .pop()
+        .toLowerCase();
     },
 
     /** 鏍煎紡鍖栨枃浠跺ぇ灏� */
diff --git a/src/views/business/transfer/index.vue b/src/views/business/transfer/index.vue
index 2a3dffe..f36d0c5 100644
--- a/src/views/business/transfer/index.vue
+++ b/src/views/business/transfer/index.vue
@@ -155,6 +155,18 @@
         prop="caseNo"
         width="140"
       />
+      <el-table-column
+        label="杞繍鐘舵��"
+        align="center"
+        prop="transitStatus"
+        width="100"
+      >
+        <template slot-scope="scope">
+          <el-tag :type="getStatusTagType(scope.row.transitStatus)">
+            {{ getStatusText(scope.row.transitStatus) }}
+          </el-tag>
+        </template>
+      </el-table-column>
       <el-table-column label="鎮h�呬俊鎭�" align="center" width="260">
         <template slot-scope="scope">
           <div class="donor-info">
@@ -194,18 +206,7 @@
         prop="contactPerson"
         width="100"
       />
-      <el-table-column
-        label="杞繍鐘舵��"
-        align="center"
-        prop="transitStatus"
-        width="100"
-      >
-        <template slot-scope="scope">
-          <el-tag :type="getStatusTagType(scope.row.transitStatus)">
-            {{ getStatusText(scope.row.transitStatus) }}
-          </el-tag>
-        </template>
-      </el-table-column>
+
       <el-table-column
         label="鍒涘缓鏃堕棿"
         align="center"
@@ -429,11 +430,7 @@
       append-to-body
     >
       <div class="action-confirm">
-        <p>
-          纭畾瑕亄{ actionText }}杞繍鍗� "{{
-             currentTransport.id
-          }}" 鍚楋紵
-        </p>
+        <p>纭畾瑕亄{ actionText }}杞繍鍗� "{{ currentTransport.id }}" 鍚楋紵</p>
       </div>
       <div slot="footer" class="dialog-footer">
         <el-button @click="actionOpen = false">鍙� 娑�</el-button>
@@ -519,15 +516,15 @@
         pageNum: 1,
         pageSize: 10,
         caseNo: undefined,
-        patName: undefined,
+        patName: undefined
         // 鍙煡璇㈠凡鍚屾剰涓旈渶瑕佽浆杩愮殑妗堜緥
         // reportStatus: "3", // 宸插悓鎰�
-        isTransport: "2" // 闇�瑕佽浆杩�
+        // isTransport: "2" // 闇�瑕佽浆杩�
       }
     };
   },
   created() {
-    this.getList();
+    // this.getList();
     this.checkAutoCreate();
   },
   methods: {
@@ -567,26 +564,31 @@
     },
     checkAutoCreate() {
       const query = this.$route.query;
+      // 涓婃姤璺宠浆杩囨潵杩涜澶勭悊
       if (query.autoCreate === "true") {
-        // 鑷姩鎵撳紑妗堜緥閫夋嫨寮规
-        this.selectCaseOpen = true;
-        this.resetCaseSearch();
-
         // 濡傛灉鏈夌壒瀹氱殑妗堜緥缂栧彿锛屽彲浠ラ鍏堟悳绱�
         if (query.caseNo) {
+          // this.selectCaseOpen = true;
+          this.resetCaseSearch(1);
           this.caseQueryParams.caseNo = query.caseNo;
-          this.searchCaseList();
+          this.searchCaseList(1);
+        } else {
+          this.queryParams.patName = query.patName;
         }
       }
+      this.getList();
     },
     /** 鎼滅储鍙敤妗堜緥 */
-    async searchCaseList() {
+    async searchCaseList(type) {
       this.caseLoading = true;
       try {
         const response = await donateList(this.caseQueryParams);
         if (response.code === 200) {
           this.availableCaseList = response.rows || response.data || [];
           this.caseTotal = response.total || 0;
+          if (type == 1 && response.data[0]) {
+            this.selectCase(response.data[0]);
+          }
         } else {
           this.$modal.msgError(response.msg || "鑾峰彇妗堜緥鍒楄〃澶辫触");
         }
@@ -599,7 +601,7 @@
     },
 
     /** 閲嶇疆妗堜緥鎼滅储 */
-    resetCaseSearch() {
+    resetCaseSearch(type) {
       this.caseQueryParams = {
         pageNum: 1,
         pageSize: 10,
@@ -608,7 +610,12 @@
         // reportStatus: "3",
         isTransport: "2"
       };
-      this.searchCaseList();
+      if (!type) {
+        this.searchCaseList();
+      } else {
+        // 璺ㄩ〉闈㈡柊澧炲彇娑堥檺鍒�
+        this.caseQueryParams.isTransport = null;
+      }
     },
 
     /** 鍒ゆ柇妗堜緥鏄惁宸叉湁杞繍鍗� */
@@ -636,7 +643,7 @@
 
       // 鎵撳紑杞繍鍗曠紪杈戦〉闈紝骞朵紶鍏ラ�変腑鐨勬渚�
       this.currentTransport = this.convertCaseToTransport(caseData);
-      console.log(this.currentTransport,'currentTransport');
+      console.log(this.currentTransport, "currentTransport");
 
       this.isEditing = false;
       this.editOpen = true;
@@ -644,7 +651,7 @@
 
     /** 灏嗘渚嬩俊鎭浆鎹负杞繍鍗曟牸寮� */
     convertCaseToTransport(caseData) {
-      console.log(caseData,'2');
+      console.log(caseData, "2");
 
       return {
         caseNo: caseData.caseNo,
@@ -712,7 +719,7 @@
 
     // 澶氶�夋閫変腑鏁版嵁
     handleSelectionChange(selection) {
-      this.ids = selection.map(item =>  item.id);
+      this.ids = selection.map(item => item.id);
       this.single = selection.length !== 1;
       this.multiple = !selection.length;
     },
@@ -740,7 +747,7 @@
     /** 璇︽儏鎸夐挳鎿嶄綔 */
     handleDetail(row) {
       this.currentTransport = row;
-      this.detailTitle = `杞繍鍗曡鎯� - ${ row.id}`;
+      this.detailTitle = `杞繍鍗曡鎯� - ${row.id}`;
       this.detailOpen = true;
     },
 
diff --git a/src/views/project/DonationProcess/index.vue b/src/views/project/DonationProcess/index.vue
index 16c62a1..392e2ce 100644
--- a/src/views/project/DonationProcess/index.vue
+++ b/src/views/project/DonationProcess/index.vue
@@ -172,7 +172,7 @@
         </template>
       </el-table-column>
 
-      <el-table-column label="濮撳悕" align="center" prop="name" width="100" />
+      <el-table-column label="鎹愮尞鑰呭鍚�" align="center" prop="name" width="100" />
 
       <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
         <template slot-scope="scope">
diff --git a/src/views/project/donatebaseinfo/EditCaseModal.vue b/src/views/project/donatebaseinfo/EditCaseModal.vue
index 8ccfa01..8669cb9 100644
--- a/src/views/project/donatebaseinfo/EditCaseModal.vue
+++ b/src/views/project/donatebaseinfo/EditCaseModal.vue
@@ -45,12 +45,8 @@
             <el-col :span="6">
               <el-form-item label="鎬у埆" prop="sex">
                 <el-select v-model="formData.sex" placeholder="璇烽�夋嫨鎬у埆">
-                  <el-option
-                    v-for="dict in dict.type.sys_user_sex || []"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="parseInt(dict.value)"
-                  />
+                  <el-option label="鐢�" value="1" />
+                  <el-option label="濂�" value="2" />
                 </el-select>
               </el-form-item>
             </el-col>
@@ -357,10 +353,10 @@
 
           <el-row :gutter="20">
             <el-col :span="8">
-              <el-form-item label="GSC璇勫垎" prop="gcsScore">
+              <el-form-item label="GCS璇勫垎" prop="gcsScore">
                 <el-input
                   v-model="formData.gcsScore"
-                  placeholder="璇疯緭鍏SC璇勫垎"
+                  placeholder="璇疯緭鍏CS璇勫垎"
                 />
               </el-form-item>
             </el-col>
@@ -1148,7 +1144,10 @@
 
     async handleSubmit() {
       const valid = await this.$refs.formRef.validate().catch(() => false);
-      if (!valid) return;
+      if (!valid) {
+        this.$message.error("璇风‘璁よ〃鍗曞繀濉俊鎭畬鏁村悗鎻愪氦");
+        return;
+      }
 
       this.submitLoading = true;
       try {
diff --git a/src/views/project/donatebaseinfo/index.vue b/src/views/project/donatebaseinfo/index.vue
index 10928eb..96ceb21 100644
--- a/src/views/project/donatebaseinfo/index.vue
+++ b/src/views/project/donatebaseinfo/index.vue
@@ -10,7 +10,7 @@
     >
       <el-row :gutter="8">
         <el-col :span="5">
-          <el-form-item label="鎮h�呭鍚�" prop="name">
+          <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
             <el-input
               v-model="queryParams.name"
               placeholder="璇疯緭鍏ュ鍚�"
@@ -105,7 +105,7 @@
         prop="caseNo"
         width="200"
       />
-      <el-table-column label="濮撳悕" align="center" prop="name" width="100" />
+      <el-table-column label="鎹愮尞鑰呭鍚�" align="center" prop="name" width="100" />
       <el-table-column label="鎬у埆" align="center" prop="sex" width="100">
         <template slot-scope="scope">
           <dict-tag
@@ -134,7 +134,7 @@
         align="center"
         prop="treatmenthospitalname"
       />
-      <el-table-column label="GSC璇勫垎" align="center" prop="gcsScore" />
+      <el-table-column label="GCS璇勫垎" align="center" prop="gcsScore" />
       <el-table-column label="琛�鍨�" align="center" prop="bloodtype" width="100">
         <template slot-scope="scope">
           <dict-tag

--
Gitblit v1.9.3