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 |   80 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 74 insertions(+), 6 deletions(-)

diff --git a/src/views/business/ethicalReview/ethicalReviewInfo.vue b/src/views/business/ethicalReview/ethicalReviewInfo.vue
index 6321ef7..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,7 +38,11 @@
 
         <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" />
@@ -51,6 +56,7 @@
               type="datetime"
               value-format="yyyy-MM-dd HH:mm:ss"
               style="width: 100%"
+              :disabled="isReadOnly"
             />
           </el-form-item>
         </div>
@@ -62,6 +68,7 @@
               :rows="2"
               v-model="form.expertOpinion"
               placeholder="璇疯緭鍏ユ剰瑙�"
+              :disabled="isReadOnly"
             />
           </el-form-item>
         </div>
@@ -73,6 +80,7 @@
               :rows="3"
               v-model="form.remark"
               placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
+              :disabled="isReadOnly"
             />
           </el-form-item>
         </div>
@@ -87,6 +95,7 @@
 
       <!-- 浣跨敤 UploadAttachment 缁勪欢 -->
       <UploadAttachment
+        v-if="!isReadOnly"
         ref="uploadAttachment"
         :file-list="attachmentFileList"
         :limit="10"
@@ -144,6 +153,7 @@
                 涓嬭浇
               </el-button>
               <el-button
+                v-if="!isReadOnly"
                 size="mini"
                 type="danger"
                 @click="handleRemoveAttachment(scope.$index)"
@@ -181,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"
@@ -193,6 +209,7 @@
             鍙戦�佷笓瀹�
           </el-button>
           <el-button
+            v-if="!isReadOnly"
             size="mini"
             type="success"
             @click="handleSendToChiefExpert"
@@ -378,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"
@@ -417,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"
@@ -431,6 +459,7 @@
       </el-button>
 
       <el-button
+        v-if="!isReadOnly"
         type="warning"
         @click="handleSuspendReview"
         :disabled="form.status == '2' || form.status == '3'"
@@ -440,6 +469,7 @@
       </el-button>
 
       <el-button
+        v-if="!isReadOnly"
         type="danger"
         @click="handleEndReview"
         :disabled="form.status == '2'"
@@ -808,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";
@@ -966,6 +997,11 @@
     };
   },
   computed: {
+    // 鏌ョ湅妯″紡锛氬彧璇伙紝绂佺敤琛ㄥ崟骞堕殣钘忎繚瀛樻寜閽�
+    isReadOnly() {
+      return this.$route.query.mode === "view";
+    },
+
     // 璁$畻灞炴�э細鑾峰彇涓撳鍒楄〃锛堢‘淇濆搷搴斿紡锛�
     ethicalreviewopinionsList() {
       return this.form.ethicalreviewopinionsList || [];
@@ -1505,6 +1541,7 @@
 
     // 淇濆瓨淇℃伅
     async handleSave() {
+      if (this.saveLoading) return;
       this.$refs.form.validate(async valid => {
         if (valid) {
           this.saveLoading = true;
@@ -1527,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);
             }
 
@@ -1556,6 +1599,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;
+      }
+    },
+
     // 瀹℃煡瀹屾垚
     async handleCompleteReview() {
       this.$confirm("纭畾瑕佸皢鏈浼︾悊瀹℃煡鐘舵�佽涓哄畬鎴愬悧锛�", "鎻愮ず", {

--
Gitblit v1.9.3