From 4c9fdc87987140e8b2c3f0dfc2f6608cdb6be774 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 21 十月 2026 17:39:24 +0800
Subject: [PATCH] 青岛维护

---
 src/views/business/ethicalReview/ethicalReviewInfo.vue |  109 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 92 insertions(+), 17 deletions(-)

diff --git a/src/views/business/ethicalReview/ethicalReviewInfo.vue b/src/views/business/ethicalReview/ethicalReviewInfo.vue
index 2e175aa..a68f190 100644
--- a/src/views/business/ethicalReview/ethicalReviewInfo.vue
+++ b/src/views/business/ethicalReview/ethicalReviewInfo.vue
@@ -14,10 +14,11 @@
             <el-input
               v-model="form.initiateTheme"
               placeholder="璇疯緭鍏ュ彂璧蜂富棰�"
+              :disabled="isReadOnly"
             />
           </el-form-item>
           <el-form-item label="鍙戣捣浜�" prop="initiatePerson" class="col-1-3">
-            <el-input v-model="form.initiatePerson" />
+            <el-input v-model="form.initiatePerson" :disabled="isReadOnly" />
           </el-form-item>
           <!-- <el-col :span="8">
             <el-form-item label="瀹℃煡鐘舵��" prop="status">
@@ -37,10 +38,16 @@
 
         <div class="form-row">
           <el-form-item label="浼︾悊瀹℃煡缁撹" prop="expertConclusion" class="col-1-3">
-            <el-select v-model="form.expertConclusion" style="width: 100%">
+            <el-select
+              v-model="form.expertConclusion"
+              style="width: 100%"
+              :disabled="isReadOnly"
+            >
               <el-option label="鍚屾剰" value="1" />
               <el-option label="瀹℃煡涓�" value="2" />
               <el-option label="涓嶅悓鎰�" value="0" />
+              <el-option label="寮冩潈" value="3" />
+              <el-option label="淇敼鍚庡悓鎰�" value="4" />
             </el-select>
           </el-form-item>
           <el-form-item label="浼︾悊瀹℃煡缁撹鏃堕棿" prop="expertTime" class="col-1-3">
@@ -49,6 +56,7 @@
               type="datetime"
               value-format="yyyy-MM-dd HH:mm:ss"
               style="width: 100%"
+              :disabled="isReadOnly"
             />
           </el-form-item>
         </div>
@@ -60,6 +68,7 @@
               :rows="2"
               v-model="form.expertOpinion"
               placeholder="璇疯緭鍏ユ剰瑙�"
+              :disabled="isReadOnly"
             />
           </el-form-item>
         </div>
@@ -71,6 +80,7 @@
               :rows="3"
               v-model="form.remark"
               placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
+              :disabled="isReadOnly"
             />
           </el-form-item>
         </div>
@@ -85,6 +95,7 @@
 
       <!-- 浣跨敤 UploadAttachment 缁勪欢 -->
       <UploadAttachment
+        v-if="!isReadOnly"
         ref="uploadAttachment"
         :file-list="attachmentFileList"
         :limit="10"
@@ -142,6 +153,7 @@
                 涓嬭浇
               </el-button>
               <el-button
+                v-if="!isReadOnly"
                 size="mini"
                 type="danger"
                 @click="handleRemoveAttachment(scope.$index)"
@@ -179,10 +191,16 @@
           >
             鍒锋柊
           </el-button>
-          <el-button size="mini" type="primary" @click="handleAddExpert">
+          <el-button
+            v-if="!isReadOnly"
+            size="mini"
+            type="primary"
+            @click="handleAddExpert"
+          >
             娣诲姞涓撳
           </el-button>
           <el-button
+            v-if="!isReadOnly"
             size="mini"
             type="primary"
             @click="handleSendToNormalExperts"
@@ -191,6 +209,7 @@
             鍙戦�佷笓瀹�
           </el-button>
           <el-button
+            v-if="!isReadOnly"
             size="mini"
             type="success"
             @click="handleSendToChiefExpert"
@@ -376,7 +395,13 @@
           </template>
         </el-table-column>
 
-        <el-table-column label="鎿嶄綔" width="180" align="center" fixed="right">
+        <el-table-column
+          v-if="!isReadOnly"
+          label="鎿嶄綔"
+          width="180"
+          align="center"
+          fixed="right"
+        >
           <template slot-scope="scope">
             <el-button
               size="mini"
@@ -415,12 +440,17 @@
       </el-table>
     </el-card>
     <div style="text-align: center; margin: 30px 0;">
-      <el-button type="primary" @click="handleSave" :loading="saveLoading">
+      <el-button
+        v-if="!isReadOnly"
+        type="primary"
+        @click="handleSave"
+        :loading="saveLoading"
+      >
         淇濆瓨
       </el-button>
 
       <el-button
-        v-if="form.status != '3'"
+        v-if="!isReadOnly && form.status != '3'"
         type="success"
         @click="handleCompleteReview"
         :loading="completeLoading"
@@ -429,6 +459,7 @@
       </el-button>
 
       <el-button
+        v-if="!isReadOnly"
         type="warning"
         @click="handleSuspendReview"
         :disabled="form.status == '2' || form.status == '3'"
@@ -438,6 +469,7 @@
       </el-button>
 
       <el-button
+        v-if="!isReadOnly"
         type="danger"
         @click="handleEndReview"
         :disabled="form.status == '2'"
@@ -725,7 +757,7 @@
           <el-row :gutter="20" style="margin-top: 20px;">
             <el-col :span="12">
               <div class="history-stat-item">
-                <div class="history-stat-label">鏈帴鏀舵暟閲�</div>
+                <div class="history-stat-label">宸插彂閫佹湭鎺ユ敹鏁伴噺</div>
                 <div class="history-stat-value">
                   {{ expertHistoryData.notAcceptCount || 0 }}
                 </div>
@@ -806,6 +838,7 @@
   sendcall
 } from "@/api/businessApi";
 import { listExternalperson } from "@/api/project/externalperson";
+import { getDonatebaseinfo } from "@/api/project/donatebaseinfo";
 import CaseBasicInfo from "@/components/CaseBasicInfo";
 import UploadAttachment from "@/components/UploadAttachment";
 import FilePreviewDialog from "@/components/FilePreviewDialog";
@@ -964,6 +997,11 @@
     };
   },
   computed: {
+    // 鏌ョ湅妯″紡锛氬彧璇伙紝绂佺敤琛ㄥ崟骞堕殣钘忎繚瀛樻寜閽�
+    isReadOnly() {
+      return this.$route.query.mode === "view";
+    },
+
     // 璁$畻灞炴�э細鑾峰彇涓撳鍒楄〃锛堢‘淇濆搷搴斿紡锛�
     ethicalreviewopinionsList() {
       return this.form.ethicalreviewopinionsList || [];
@@ -1333,7 +1371,9 @@
       console.log(file, "file");
 
       this.currentPreviewFile = {
-        fileName: file,
+        // 绛惧悕闄勪欢 URL 閫氬父鏃犳墿灞曞悕锛堝 .../file-1787645145583锛夛紝
+        // 棰勮缁勪欢渚濊禆鏂囦欢鍚嶆墿灞曞悕璇嗗埆鏂囦欢绫诲瀷锛岃繖閲岃ˉ .png 璁╁叾鎸夊浘鐗囬瑙�
+        fileName: "鎵嬪啓绛惧悕.png",
         fileUrl: file,
         fileType: "png"
       };
@@ -1423,8 +1463,8 @@
     // 瀹℃煡鐘舵�佽繃婊ゅ櫒
     getReviewStatusFilter(status) {
       const statusMap = {
-        "0": "info", // 寰呮帴鏀�
-        "1": "warning", // 鏈帴鏀�
+        "0": "info", // 寰呭彂閫�
+        "1": "warning", // 宸插彂閫�
         "2": "success", // 宸叉帴鏀�
         "3": "danger", // 瓒呮椂
         "4": "danger", // 涓
@@ -1435,8 +1475,8 @@
 
     getReviewStatusText(status) {
       const statusMap = {
-        "0": "寰呮帴鏀�",
-        "1": "鏈帴鏀�",
+        "0": "寰呭彂閫�",
+        "1": "宸插彂閫�",
         "2": "宸叉帴鏀�",
         "3": "瓒呮椂",
         "4": "涓",
@@ -1448,18 +1488,22 @@
     // 缁撹杩囨护鍣�
     getConclusionFilter(conclusion) {
       const conclusionMap = {
+        "0": "danger", // 涓嶅悓鎰�
         "1": "success", // 鍚屾剰
         "2": "warning", // 瀹℃煡涓�
-        "0": "danger" // 涓嶅悓鎰�
+        "3": "info", // 寮冩潈
+        "4": "success" // 淇敼鍚庡悓鎰�
       };
       return conclusionMap[conclusion] || "info";
     },
 
     getConclusionText(conclusion) {
       const conclusionMap = {
+        "0": "涓嶅悓鎰�",
         "1": "鍚屾剰",
         "2": "瀹℃煡涓�",
-        "0": "涓嶅悓鎰�"
+        "3": "寮冩潈",
+        "4": "淇敼鍚庡悓鎰�"
       };
       return conclusionMap[conclusion] || "鏈煡";
     },
@@ -1497,6 +1541,7 @@
 
     // 淇濆瓨淇℃伅
     async handleSave() {
+      if (this.saveLoading) return;
       this.$refs.form.validate(async valid => {
         if (valid) {
           this.saveLoading = true;
@@ -1519,6 +1564,12 @@
             if (submitData.id) {
               response = await ethicalreviewedit(submitData);
             } else {
+              // 鏂板鏃舵牎楠屾槸鍚﹀凡鏈夌浉鍚屾偅鑰�
+              const exists = await this.checkPatientExists();
+              if (exists) {
+                this.$message.warning("璇ユ偅鑰呭凡瀛樺湪锛岃鍕块噸澶嶆坊鍔�");
+                return;
+              }
               response = await ethicalreviewadd(submitData);
             }
 
@@ -1546,6 +1597,31 @@
           }
         }
       });
+    },
+
+    // 鏂板鏃舵牎楠屾槸鍚﹀凡鏈夌浉鍚屾偅鑰咃紙鎸変綇闄㈠彿锛�
+    async checkPatientExists() {
+      let inpatientno = this.form.inpatientno;
+      if (!inpatientno && this.caseId) {
+        try {
+          const caseRes = await getDonatebaseinfo(this.caseId);
+          inpatientno = (caseRes.data && caseRes.data.inpatientno) || "";
+        } catch (e) {
+          inpatientno = "";
+        }
+      }
+      if (!inpatientno) return false;
+      try {
+        const res = await reviewinitiateBaseInfoList({
+          inpatientno,
+          pageNum: 1,
+          pageSize: 1
+        });
+        const list = res.data || [];
+        return list.some(item => item && item.id != null && item.id !== "");
+      } catch (e) {
+        return false;
+      }
     },
 
     // 瀹℃煡瀹屾垚
@@ -2005,7 +2081,7 @@
           deptName: expert.unitname || "",
           title: expert.title || "",
           donorno: expert.telephone || "",
-          receiveStatus: "0", // 寰呮帴鏀�
+          receiveStatus: "0", // 寰呭彂閫�
           expertconclusion: "",
           expertopinion: "",
           conclusionannex: "",
@@ -2204,6 +2280,7 @@
 
               if (index != -1) {
                 this.form.ethicalreviewopinionsList[index].receiveStatus = "1"; // 宸叉帴鏀�
+                this.form.ethicalreviewopinionsList[index].expertconclusion = "2"; // 瀹℃煡涓�
                 this.form.ethicalreviewopinionsList[
                   index
                 ].startTime = this.sendForm.startTime;
@@ -2750,8 +2827,6 @@
 .paper-form {
   border-left: 1px solid #d0d3db;
   background: #fff;
-  /* 瓒呭灞忛檺鍒惰〃鍗曟渶澶у搴︼紝鍙充晶鐣欑櫧锛岄伩鍏嶅瓧娈靛垎甯冭繃寮� */
-  max-width: 1400px;
 }
 
 .paper-form >>> .form-row {

--
Gitblit v1.9.3