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/decide/DecideInfo.vue |  411 ++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 266 insertions(+), 145 deletions(-)

diff --git a/src/views/business/decide/DecideInfo.vue b/src/views/business/decide/DecideInfo.vue
index 9522c29..ed708d2 100644
--- a/src/views/business/decide/DecideInfo.vue
+++ b/src/views/business/decide/DecideInfo.vue
@@ -1,6 +1,6 @@
 <template>
   <div class="death-judgment-detail">
-    <case-basic-info :case-id="caseId" :show-attachment="true" />
+    <case-basic-info :case-id="caseId" :show-attachment="true":column="3" />
     <!-- 鍏叡淇℃伅妯″潡锛堢嫭绔嬫樉绀猴級 -->
 
     <!-- 鍒ゅ畾绫诲瀷鏍囩椤� -->
@@ -35,7 +35,7 @@
             <el-form-item label="璐熻矗浜�" prop="responsibleusername">
               <el-input
                 v-model="form.responsibleusername"
-                :readonly="!isEdit"
+                :disabled="isReadOnly || !isEdit"
               />
             </el-form-item>
           </el-col>
@@ -43,7 +43,7 @@
         <el-row :gutter="20">
           <el-col :span="8">
             <el-form-item label="鍣ㄥ畼鑾峰彇鏈烘瀯" prop="gainhospitalname">
-              <el-input v-model="form.gainhospitalname" :readonly="!isEdit" />
+              <el-input v-model="form.gainhospitalname" :disabled="isReadOnly || !isEdit" />
             </el-form-item>
           </el-col>
 
@@ -51,12 +51,12 @@
       </el-form>
     </el-card> -->
     <!-- 鑴戞浜″垽瀹氭ā鍧� -->
-    <el-card v-if="activeJudgmentType === 'brain'" class="detail-card">
+    <el-card v-if="activeJudgmentType === 'brain'" class="detail-card paper-card">
       <div slot="header" class="clearfix">
         <span class="detail-title">鑴戞浜″垽瀹氫俊鎭�</span>
 
         <el-button
-          v-if="!isEdit"
+          v-if="!isReadOnly && !isEdit"
           style="float: right; margin-left: 10px;"
           type="primary"
           @click="handleEdit"
@@ -65,73 +65,63 @@
         </el-button>
       </div>
 
-      <el-form :model="form" ref="brainForm" :rules="rules" label-width="120px">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="姝讳骸鍘熷洜" prop="deathreason">
-              <el-input v-model="form.deathreason" :readonly="!isEdit" />
-            </el-form-item>
-          </el-col>
-        </el-row>
+      <el-form :model="form" ref="brainForm" :rules="rules" label-width="120px" class="paper-form">
+        <div class="form-row">
+          <el-form-item label="姝讳骸鍘熷洜" prop="deathreason" class="col-1-3">
+            <el-input v-model="form.deathreason" :disabled="isReadOnly || !isEdit" />
+          </el-form-item>
+          <el-form-item label="姝讳骸鏃堕棿" prop="deathtime" class="col-1-3">
+            <el-date-picker
+              v-model="form.deathtime"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%"
+              :disabled="isReadOnly || !isEdit"
+            />
+          </el-form-item>
+        </div>
 
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="姝讳骸鏃堕棿" prop="deathtime">
-              <el-date-picker
-                v-model="form.deathtime"
-                type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                style="width: 100%"
-                :disabled="!isEdit"
+        <div class="form-row">
+          <el-form-item label="鍒ゅ畾鍖荤敓涓�" prop="deathjudgedocto" class="col-1-3">
+            <el-input v-model="form.deathjudgedocto" :disabled="isReadOnly || !isEdit" />
+          </el-form-item>
+          <el-form-item label="鍒ゅ畾鍖荤敓浜�" prop="deathjudgedoctt" class="col-1-3">
+            <el-input v-model="form.deathjudgedoctt" :disabled="isReadOnly || !isEdit" />
+          </el-form-item>
+        </div>
+        <div class="form-row">
+          <el-form-item label="鍏朵粬鍒ゅ畾鍖荤敓" class="col-full">
+            <div
+              v-for="(doctor, index) in brainExtraDoctors"
+              :key="index"
+              style="display: flex; align-items: center; margin-bottom: 8px; width: 100%;"
+            >
+              <el-input
+                v-model="brainExtraDoctors[index]"
+                placeholder="璇疯緭鍏ュ尰鐢熷鍚�"
+                style="flex: 1; margin-right: 10px;"
+                :disabled="isReadOnly || !isEdit"
               />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鍒ゅ畾鍖荤敓涓�" prop="deathjudgedocto">
-              <el-input v-model="form.deathjudgedocto" :readonly="!isEdit" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鍒ゅ畾鍖荤敓浜�" prop="deathjudgedoctt">
-              <el-input v-model="form.deathjudgedoctt" :readonly="!isEdit" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="24">
-            <el-form-item label="鍏朵粬鍒ゅ畾鍖荤敓">
-              <div
-                v-for="(doctor, index) in brainExtraDoctors"
-                :key="index"
-                style="display: flex; align-items: center; margin-bottom: 8px;"
-              >
-                <el-input
-                  v-model="brainExtraDoctors[index]"
-                  placeholder="璇疯緭鍏ュ尰鐢熷鍚�"
-                  style="flex: 1; margin-right: 10px;"
-                  :readonly="!isEdit"
-                />
-                <el-button
-                  v-if="isEdit"
-                  type="danger"
-                  icon="el-icon-minus"
-                  circle
-                  size="mini"
-                  @click="removeBrainDoctor(index)"
-                />
-              </div>
               <el-button
-                v-if="isEdit"
-                type="primary"
-                icon="el-icon-plus"
-                size="small"
-                @click="addBrainDoctor"
-              >
-                娣诲姞鍖荤敓
-              </el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
+                v-if="!isReadOnly && isEdit"
+                type="danger"
+                icon="el-icon-minus"
+                circle
+                size="mini"
+                @click="removeBrainDoctor(index)"
+              />
+            </div>
+            <el-button
+              v-if="!isReadOnly && isEdit"
+              type="primary"
+              icon="el-icon-plus"
+              size="small"
+              @click="addBrainDoctor"
+            >
+              娣诲姞鍖荤敓
+            </el-button>
+          </el-form-item>
+        </div>
       </el-form>
 
       <!-- 鑴戞浜¤瘎浼拌〃闄勪欢 -->
@@ -153,6 +143,7 @@
                 <span class="upload-title">{{ type.label }}</span>
                 <el-tooltip content="鐐瑰嚮涓婁紶璇ョ被鍨嬭瘎浼拌〃" placement="top">
                   <el-button
+                    v-if="!isReadOnly"
                     size="mini"
                     type="primary"
                     icon="el-icon-plus"
@@ -225,7 +216,7 @@
                       >涓嬭浇</el-button
                     >
                     <el-button
-                      v-if="isEdit"
+                      v-if="!isReadOnly && isEdit"
                       size="mini"
                       type="text"
                       icon="el-icon-delete"
@@ -253,11 +244,11 @@
     </el-card>
 
     <!-- 蹇冩浜″垽瀹氭ā鍧� -->
-    <el-card v-else class="detail-card">
+    <el-card v-else class="detail-card paper-card">
       <div slot="header" class="clearfix">
         <span class="detail-title">蹇冩浜″垽瀹氫俊鎭�</span>
         <el-button
-          v-if="isEdit"
+          v-if="!isReadOnly && isEdit"
           style="float: right; margin-left: 10px;"
           type="success"
           @click="handleSave"
@@ -266,7 +257,7 @@
           淇濆瓨淇℃伅
         </el-button>
         <el-button
-          v-else
+          v-else-if="!isReadOnly"
           style="float: right; margin-left: 10px;"
           type="primary"
           @click="handleEdit"
@@ -275,79 +266,69 @@
         </el-button>
       </div>
 
-      <el-form :model="form" ref="heartForm" :rules="rules" label-width="120px">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="蹇冩浜″師鍥�" prop="heartdeathreason">
-              <el-input v-model="form.heartdeathreason" :readonly="!isEdit" />
-            </el-form-item>
-          </el-col>
-        </el-row>
+      <el-form :model="form" ref="heartForm" :rules="rules" label-width="120px" class="paper-form">
+        <div class="form-row">
+          <el-form-item label="蹇冩浜″師鍥�" prop="heartdeathreason" class="col-1-3">
+            <el-input v-model="form.heartdeathreason" :disabled="isReadOnly || !isEdit" />
+          </el-form-item>
+          <el-form-item label="蹇冩浜″垽瀹氬畬鎴愭椂闂�" prop="heartdeathtime" class="col-1-3">
+            <el-date-picker
+              v-model="form.heartdeathtime"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%"
+              :disabled="isReadOnly || !isEdit"
+            />
+          </el-form-item>
+        </div>
 
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="蹇冩浜″垽瀹氬畬鎴愭椂闂�" prop="heartdeathtime">
-              <el-date-picker
-                v-model="form.heartdeathtime"
-                type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                style="width: 100%"
-                :disabled="!isEdit"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鍒ゅ畾鍖荤敓涓�" prop="heartdeathjudgedocto">
+        <div class="form-row">
+          <el-form-item label="鍒ゅ畾鍖荤敓涓�" prop="heartdeathjudgedocto" class="col-1-3">
+            <el-input
+              v-model="form.heartdeathjudgedocto"
+              :disabled="isReadOnly || !isEdit"
+            />
+          </el-form-item>
+          <el-form-item label="鍒ゅ畾鍖荤敓浜�" prop="heartdeathjudgedoctt" class="col-1-3">
+            <el-input
+              v-model="form.heartdeathjudgedoctt"
+              :disabled="isReadOnly || !isEdit"
+            />
+          </el-form-item>
+        </div>
+        <div class="form-row">
+          <el-form-item label="鍏朵粬鍒ゅ畾鍖荤敓" class="col-full">
+            <div
+              v-for="(doctor, index) in heartExtraDoctors"
+              :key="index"
+              style="display: flex; align-items: center; margin-bottom: 8px; width: 100%;"
+            >
               <el-input
-                v-model="form.heartdeathjudgedocto"
-                :readonly="!isEdit"
+                v-model="heartExtraDoctors[index]"
+                placeholder="璇疯緭鍏ュ尰鐢熷鍚�"
+                style="flex: 1; margin-right: 10px;"
+                :disabled="isReadOnly || !isEdit"
               />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鍒ゅ畾鍖荤敓浜�" prop="heartdeathjudgedoctt">
-              <el-input
-                v-model="form.heartdeathjudgedoctt"
-                :readonly="!isEdit"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="24">
-            <el-form-item label="鍏朵粬鍒ゅ畾鍖荤敓">
-              <div
-                v-for="(doctor, index) in heartExtraDoctors"
-                :key="index"
-                style="display: flex; align-items: center; margin-bottom: 8px;"
-              >
-                <el-input
-                  v-model="heartExtraDoctors[index]"
-                  placeholder="璇疯緭鍏ュ尰鐢熷鍚�"
-                  style="flex: 1; margin-right: 10px;"
-                  :readonly="!isEdit"
-                />
-                <el-button
-                  v-if="isEdit"
-                  type="danger"
-                  icon="el-icon-minus"
-                  circle
-                  size="mini"
-                  @click="removeHeartDoctor(index)"
-                />
-              </div>
               <el-button
-                v-if="isEdit"
-                type="primary"
-                icon="el-icon-plus"
-                size="small"
-                @click="addHeartDoctor"
-              >
-                娣诲姞鍖荤敓
-              </el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
+                v-if="!isReadOnly && isEdit"
+                type="danger"
+                icon="el-icon-minus"
+                circle
+                size="mini"
+                @click="removeHeartDoctor(index)"
+              />
+            </div>
+            <el-button
+              v-if="!isReadOnly && isEdit"
+              type="primary"
+              icon="el-icon-plus"
+              size="small"
+              @click="addHeartDoctor"
+            >
+              娣诲姞鍖荤敓
+            </el-button>
+          </el-form-item>
+        </div>
       </el-form>
 
       <!-- 蹇冩浜¤瘎浼拌〃闄勪欢 -->
@@ -369,6 +350,7 @@
                 <span class="upload-title">{{ type.label }}</span>
                 <el-tooltip content="鐐瑰嚮涓婁紶璇ョ被鍨嬭瘎浼拌〃" placement="top">
                   <el-button
+                    v-if="!isReadOnly"
                     size="mini"
                     type="primary"
                     icon="el-icon-plus"
@@ -441,7 +423,7 @@
                       >涓嬭浇</el-button
                     >
                     <el-button
-                      v-if="isEdit"
+                      v-if="!isReadOnly && isEdit"
                       size="mini"
                       type="text"
                       icon="el-icon-delete"
@@ -470,7 +452,7 @@
     <!-- 搴曢儴鎿嶄綔鎸夐挳 -->
     <div style="text-align: center; margin: 30px 0;">
       <el-button
-        v-if="isEdit"
+        v-if="!isReadOnly && isEdit"
         type="primary"
         @click="handleSave"
         :loading="saveLoading"
@@ -478,7 +460,7 @@
         淇濆瓨淇℃伅
       </el-button>
       <el-button
-        v-if="isEdit"
+        v-if="!isReadOnly && isEdit"
         type="success"
         @click="accomplish"
         :loading="saveLoading"
@@ -589,6 +571,7 @@
   deathinfoadd,
   queryDathInfoBaseInfo
 } from "@/api/businessApi";
+import { getDonatebaseinfo } from "@/api/project/donatebaseinfo";
 import { getToken } from "@/utils/auth";
 import CaseBasicInfo from "@/components/CaseBasicInfo";
 import FilePreviewDialog from "@/components/FilePreviewDialog";
@@ -713,6 +696,10 @@
     };
   },
   computed: {
+    // 鏌ョ湅妯″紡锛氬彧璇伙紝绂佺敤琛ㄥ崟骞堕殣钘忎繚瀛樻寜閽�
+    isReadOnly() {
+      return this.$route.query.mode === "view";
+    },
     getCurrentBrainDeathTypeLabel() {
       const type = this.brainDeathAttachmentTypes.find(
         t => t.value === this.currentUploadType
@@ -735,6 +722,9 @@
     if (this.$route.query.judgmentType) {
       this.activeJudgmentType = this.$route.query.judgmentType;
     }
+
+    // 鏌ョ湅妯″紡涓嬮粯璁ゅ彧璇�
+    this.isEdit = !this.isReadOnly;
 
     this.getDetail(this.infoid);
     this.getAttachmentList();
@@ -1197,6 +1187,7 @@
     },
     // 淇濆瓨淇℃伅
     async handleSave() {
+      if (this.saveLoading) return;
       // 鏍规嵁褰撳墠鏍囩閫夋嫨楠岃瘉瑙勫垯
       let formRef =
         this.activeJudgmentType === "brain" ? "brainForm" : "heartForm";
@@ -1241,6 +1232,12 @@
             if (submitData.id) {
               response = await deathinfoedit(submitData);
             } else {
+              // 鏂板鏃舵牎楠屾槸鍚﹀凡鏈夌浉鍚屾偅鑰�
+              const exists = await this.checkPatientExists();
+              if (exists) {
+                this.$message.warning("璇ユ偅鑰呭凡瀛樺湪锛岃鍕块噸澶嶆坊鍔�");
+                return;
+              }
               response = await deathinfoadd(submitData);
             }
 
@@ -1264,6 +1261,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 queryDathInfoBaseInfo({
+          inpatientno,
+          pageNum: 1,
+          pageSize: 1
+        });
+        const list = res.rows || res.data || [];
+        return list.some(item => item && item.id != null && item.id !== "");
+      } catch (e) {
+        return false;
+      }
     },
 
     // 鏂囦欢澶у皬鏍煎紡鍖�
@@ -1398,4 +1420,103 @@
 :deep(.image-preview-dialog .el-message-box__content) {
   text-align: center;
 }
+
+/* ===== 绾歌川琛ㄦ牸缃戞牸鏍峰紡 ===== */
+.paper-card >>> .el-card__body {
+  padding: 16px;
+}
+
+.paper-form {
+  border-left: 1px solid #d0d3db;
+  background: #fff;
+}
+
+.paper-form >>> .form-row {
+  display: flex;
+  width: 100%;
+  border-top: 1px solid #d0d3db;
+  /* 涓婄Щ1px涓庝笂涓�琛岀殑border-bottom閲嶅彔锛屼袱琛屼箣闂村彧鏄剧ず涓�鏉�1px缁嗙嚎 */
+  margin-top: -1px;
+}
+.paper-form >>> .form-row:first-child {
+  margin-top: 0;
+}
+
+/* 琛屽熬绌虹櫧濉厖锛氫笉婊℃暣琛岀殑鍙充晶鑷姩琛ヤ竴涓┖鐧芥牸瀛愶紝缃戞牸淇濇寔闂悎锛堝彸渚ч�傚綋鐣欑櫧锛� */
+.paper-form >>> .form-row::after {
+  content: "";
+  flex: 1 1 0;
+  min-height: 42px;
+  background: linear-gradient(to left, #d0d3db 1px, transparent 1px),
+    linear-gradient(to top, #d0d3db 1px, transparent 1px);
+  background-color: #fff;
+}
+
+.paper-form >>> .el-form-item {
+  flex: 0 0 33.3333%;
+  display: flex;
+  margin: 0;
+  background: #fff;
+  border-right: 1px solid #d0d3db;
+  border-bottom: 1px solid #d0d3db;
+}
+.paper-form >>> .el-form-item::after,
+.paper-form >>> .el-form-item::before {
+  display: none;
+}
+
+.paper-form >>> .col-1-3 { flex: 0 0 33.3333%; }
+.paper-form >>> .col-half { flex: 0 0 50%; }
+.paper-form >>> .col-2-3 { flex: 0 0 66.6666%; }
+.paper-form >>> .col-full { flex: 0 0 100%; }
+
+.paper-form >>> .el-form-item__label {
+  flex: 0 0 150px;
+  width: 150px !important;
+  float: none;
+  padding: 0 8px !important;
+  background: #ecf5ff;
+  border-right: 1px solid #d0d3db;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  text-align: center;
+  font-size: 13px;
+  font-weight: 600;
+  color: #2c3038;
+  line-height: 1.3;
+  white-space: nowrap;
+}
+.paper-form >>> .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label:before {
+  color: #f56c6c;
+  margin-right: 2px;
+}
+
+.paper-form >>> .el-form-item__content {
+  flex: 1;
+  margin-left: 0 !important;
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  padding: 6px 10px;
+  background: #fff;
+  min-height: 42px;
+  line-height: 1.4;
+}
+
+/* 鎺т欢瀹藉害閫備腑锛屼笉閾烘弧鏁存牸锛堝唴瀹圭煭鏃惰緭鍏ユ涓嶅啀鎷夊緱寰堥暱锛� */
+.paper-form >>> .el-form-item__content .el-input,
+.paper-form >>> .el-form-item__content .el-select,
+.paper-form >>> .el-form-item__content .el-cascader {
+  width: 220px;
+  max-width: 100%;
+}
+.paper-form >>> .el-form-item__content .el-date-editor {
+  width: 240px;
+  max-width: 100%;
+}
+.paper-form >>> .el-form-item__content .el-range-editor {
+  width: 360px;
+  max-width: 100%;
+}
 </style>

--
Gitblit v1.9.3