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/GetWitness/GetWitnessInfo.vue |   82 ++++++++++++++++++++++++++++++++++-------
 1 files changed, 68 insertions(+), 14 deletions(-)

diff --git a/src/views/business/GetWitness/GetWitnessInfo.vue b/src/views/business/GetWitness/GetWitnessInfo.vue
index ccf0995..7ca94a4 100644
--- a/src/views/business/GetWitness/GetWitnessInfo.vue
+++ b/src/views/business/GetWitness/GetWitnessInfo.vue
@@ -14,11 +14,12 @@
 
         <div class="form-row">
           <el-form-item label="鎵嬫湳鍖荤敓" prop="operationdoctor" class="col-1-3">
-            <el-input v-model="form.operationdoctor" />
+            <el-input v-model="form.operationdoctor" :disabled="isReadOnly" />
           </el-form-item>
           <el-form-item label="鎵嬫湳寮�濮嬫椂闂�" prop="operationbegtime" class="col-1-3">
             <el-date-picker
               v-model="form.operationbegtime"
+              :disabled="isReadOnly"
               type="datetime"
               value-format="yyyy-MM-dd HH:mm:ss"
               style="width: 100%"
@@ -27,6 +28,7 @@
           <el-form-item label="鎵嬫湳缁撴潫鏃堕棿" prop="operationendtime" class="col-1-3">
             <el-date-picker
               v-model="form.operationendtime"
+              :disabled="isReadOnly"
               type="datetime"
               value-format="yyyy-MM-dd HH:mm:ss"
               style="width: 100%"
@@ -42,6 +44,7 @@
           >
             <el-date-picker
               v-model="form.abdominalaortacannulatime"
+              :disabled="isReadOnly"
               type="datetime"
               value-format="yyyy-MM-dd HH:mm:ss"
               style="width: 100%"
@@ -54,6 +57,7 @@
           >
             <el-date-picker
               v-model="form.abdominalaortaperfusiontime"
+              :disabled="isReadOnly"
               type="datetime"
               value-format="yyyy-MM-dd HH:mm:ss"
               style="width: 100%"
@@ -65,6 +69,7 @@
           <el-form-item label="闂ㄩ潤鑴夋彃绠℃椂闂�" prop="portalveincannulatime" class="col-1-3">
             <el-date-picker
               v-model="form.portalveincannulatime"
+              :disabled="isReadOnly"
               type="datetime"
               value-format="yyyy-MM-dd HH:mm:ss"
               style="width: 100%"
@@ -73,6 +78,7 @@
           <el-form-item label="闂ㄩ潤鑴夌亴娉ㄦ椂闂�" prop="portalveinperfusiontime" class="col-1-3">
             <el-date-picker
               v-model="form.portalveinperfusiontime"
+              :disabled="isReadOnly"
               type="datetime"
               value-format="yyyy-MM-dd HH:mm:ss"
               style="width: 100%"
@@ -92,6 +98,7 @@
           <el-form-item label="杩涙墜鏈鏃堕棿" prop="coordinatorInOperating" class="col-1-3">
             <el-date-picker
               v-model="form.coordinatorInOperating"
+              :disabled="isReadOnly"
               type="datetime"
               value-format="yyyy-MM-dd HH:mm:ss"
               style="width: 100%"
@@ -100,6 +107,7 @@
           <el-form-item label="鍑烘墜鏈鏃堕棿" prop="coordinatorOutOperating" class="col-1-3">
             <el-date-picker
               v-model="form.coordinatorOutOperating"
+              :disabled="isReadOnly"
               type="datetime"
               value-format="yyyy-MM-dd HH:mm:ss"
               style="width: 100%"
@@ -124,13 +132,13 @@
             </el-form-item>
           </el-col> -->
           <el-form-item label="鏄惁榛樺搥缂呮��" prop="isspendremember" class="col-1-3">
-            <el-select v-model="form.isspendremember" style="width: 100%">
+            <el-select v-model="form.isspendremember" :disabled="isReadOnly" style="width: 100%">
               <el-option label="鏄�" :value="1" />
               <el-option label="鍚�" :value="0" />
             </el-select>
           </el-form-item>
           <el-form-item label="鎭㈠閬椾綋浠" prop="isrestoreremains" class="col-1-3">
-            <el-select v-model="form.isrestoreremains" style="width: 100%">
+            <el-select v-model="form.isrestoreremains" :disabled="isReadOnly" style="width: 100%">
               <el-option label="鏄�" :value="1" />
               <el-option label="鍚�" :value="0" />
             </el-select>
@@ -142,13 +150,13 @@
 
         <div class="form-row">
           <el-form-item label="璐熻矗浜哄鍚�" prop="responsibleusername" class="col-1-3">
-            <el-input v-model="form.responsibleusername" />
+            <el-input v-model="form.responsibleusername" :disabled="isReadOnly" />
           </el-form-item>
           <el-form-item label="鍗忚皟鍛樹竴" prop="coordinatedusernameo" class="col-1-3">
-            <el-input v-model="form.coordinatedusernameo" />
+            <el-input v-model="form.coordinatedusernameo" :disabled="isReadOnly" />
           </el-form-item>
           <el-form-item label="鍗忚皟鍛樹簩" prop="coordinatedusernamet" class="col-1-3">
-            <el-input v-model="form.coordinatedusernamet" />
+            <el-input v-model="form.coordinatedusernamet" :disabled="isReadOnly" />
           </el-form-item>
         </div>
 
@@ -159,6 +167,7 @@
           <el-form-item label="鑾峰彇鏈烘瀯鍚嶇О" prop="gainhospitalname" class="col-1-3">
             <el-input
               v-model="form.gainhospitalname"
+              :disabled="isReadOnly"
               placeholder="璇疯緭鍏ヨ幏鍙栨満鏋勫悕绉�"
             />
           </el-form-item>
@@ -197,6 +206,7 @@
             <el-form-item label-width="100px" label="鎹愮尞鍣ㄥ畼">
               <el-checkbox-group
                 v-model="selectedOrgans"
+                :disabled="isReadOnly"
                 @change="handleOrganSelectionChange"
               >
                 <el-checkbox
@@ -248,6 +258,7 @@
                       size="small"
                       style="width: 100%"
                       v-model="scope.row.organStartTime"
+                      :disabled="isReadOnly"
                       type="datetime"
                       value-format="yyyy-MM-dd HH:mm:ss"
                       placeholder="閫夋嫨鑾峰彇寮�濮嬫椂闂�"
@@ -267,6 +278,7 @@
                       size="small"
                       style="width: 100%"
                       v-model="scope.row.organgettime"
+                      :disabled="isReadOnly"
                       type="datetime"
                       value-format="yyyy-MM-dd HH:mm:ss"
                       placeholder="閫夋嫨鍣ㄥ畼绂讳綋鏃堕棿"
@@ -298,6 +310,7 @@
                   <template slot-scope="scope">
                     <el-autocomplete
                       v-model="scope.row.gainhospitalname"
+                      :disabled="isReadOnly"
                       :fetch-suggestions="queryHospitalSearch"
                       placeholder="璇烽�夋嫨鎴栬緭鍏ヨ幏鍙栧尰闄�"
                       style="width: 100%"
@@ -315,12 +328,13 @@
                   <template slot-scope="scope">
                     <el-input
                       v-model="scope.row.organgetdoct"
+                      :disabled="isReadOnly"
                       placeholder="鑾峰彇鍖诲笀"
                     />
                   </template>
                 </el-table-column>
 
-                <!-- <el-table-column
+                <el-table-column
                   label="鑾峰彇鐘舵��"
                   align="center"
                   width="120"
@@ -329,6 +343,7 @@
                   <template slot-scope="scope">
                     <el-select
                       v-model="scope.row.organstate"
+                      :disabled="isReadOnly"
                       placeholder="璇烽�夋嫨鑾峰彇鐘舵��"
                       style="width: 100%"
                     >
@@ -340,9 +355,9 @@
                       />
                     </el-select>
                   </template>
-                </el-table-column> -->
+                </el-table-column>
 
-                <el-table-column
+                <!-- <el-table-column
                   label="璇存槑"
                   align="center"
                   prop="notgetreason"
@@ -352,13 +367,15 @@
                     <el-input
                       type="textarea"
                       clearable
+                      :disabled="isReadOnly"
                       v-model="scope.row.notgetreason"
                       placeholder="璇疯緭鍏ユ湭鑾峰彇璇存槑"
                     />
                   </template>
-                </el-table-column>
+                </el-table-column> -->
 
                 <el-table-column
+                  v-if="!isReadOnly"
                   label="鎿嶄綔"
                   align="center"
                   width="120"
@@ -407,6 +424,7 @@
         >
           <div style="margin-bottom: 10px; text-align: right;">
             <el-button
+              v-if="!isReadOnly"
               size="mini"
               type="primary"
               icon="el-icon-plus"
@@ -436,6 +454,7 @@
                   <el-select
                     v-model="scope.row.fileType"
                     size="small"
+                    :disabled="isReadOnly"
                     @change="updateAttachmentCategory(scope.row, $event)"
                     placeholder="閫夋嫨鍒嗙被"
                   >
@@ -474,6 +493,7 @@
                     >棰勮</el-button
                   >
                   <el-button
+                    v-if="!isReadOnly"
                     size="mini"
                     type="danger"
                     @click="handleRemoveAttachmentByFile(scope.row)"
@@ -491,7 +511,7 @@
         </el-tab-pane>
       </el-tabs>
     </el-card>
-    <div style="text-align: center; margin: 30px 0;">
+    <div v-if="!isReadOnly" style="text-align: center; margin: 30px 0;">
       <el-button type="primary" @click="handleSave" :loading="saveLoading">
         淇濆瓨
       </el-button>
@@ -516,7 +536,7 @@
               <el-input v-model="currentRecord.organname" readonly />
             </el-form-item>
           </el-col>
-          <!-- <el-col :span="12">
+          <el-col :span="12">
             <el-form-item label="鑾峰彇鐘舵��">
               <el-select v-model="currentRecord.organstate" style="width: 100%">
                 <el-option
@@ -527,7 +547,7 @@
                 />
               </el-select>
             </el-form-item>
-          </el-col> -->
+          </el-col>
         </el-row>
 
         <el-row :gutter="20">
@@ -644,6 +664,7 @@
 
 <script>
 import { witnessList, witnessadd, witnessedit } from "@/api/businessApi";
+import { getDonatebaseinfo } from "@/api/project/donatebaseinfo";
 import FilePreviewDialog from "@/components/FilePreviewDialog";
 import CaseBasicInfo from "@/components/CaseBasicInfo";
 import { getToken } from "@/utils/auth";
@@ -781,6 +802,10 @@
     };
   },
   computed: {
+    // 鏌ョ湅妯″紡锛氬彧璇伙紝绂佺敤琛ㄥ崟骞堕殣钘忎繚瀛樻寜閽�
+    isReadOnly() {
+      return this.$route.query.mode === "view";
+    },
     // 褰撳墠鐢ㄦ埛淇℃伅
     currentUser() {
       return JSON.parse(sessionStorage.getItem("user") || "{}");
@@ -818,7 +843,7 @@
         record =>
           !record.organStartTime ||
           !record.organgettime ||
-          !record.gainhospitalno ||
+          !record.gainhospitalname ||
           !record.organgetdoct
       ).length;
     },
@@ -1209,10 +1234,19 @@
     },
     // 淇濆瓨鍩烘湰淇℃伅
     async handleSave() {
+      if (this.saveLoading) return;
       this.$refs.form.validate(async valid => {
         if (valid) {
           this.saveLoading = true;
           try {
+            // 鏂板鏃舵牎楠屾槸鍚﹀凡鏈夌浉鍚屾偅鑰�
+            if (!this.form.id) {
+              const exists = await this.checkPatientExists();
+              if (exists) {
+                this.$message.warning("璇ユ偅鑰呭凡瀛樺湪锛岃鍕块噸澶嶆坊鍔�");
+                return;
+              }
+            }
             console.log(this.procurementData.serviceDonationwitnessorgans);
 
             const saveData = {
@@ -1250,6 +1284,26 @@
         }
       });
     },
+    // 鏂板鏃舵牎楠屾槸鍚﹀凡鏈夌浉鍚屾偅鑰咃紙鎸変綇闄㈠彿锛�
+    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 witnessList({ inpatientno, pageNum: 1, pageSize: 1 });
+        const list = res.data || [];
+        return list.some(item => item && item.id != null && item.id !== "");
+      } catch (e) {
+        return false;
+      }
+    },
     // 淇濆瓨鑾峰彇璁板綍
     async handleSaveProcurement() {
       if (!this.form.id) {

--
Gitblit v1.9.3