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/assess/assessInfo.vue |  170 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 154 insertions(+), 16 deletions(-)

diff --git a/src/views/business/assess/assessInfo.vue b/src/views/business/assess/assessInfo.vue
index 5a06c99..2607bf8 100644
--- a/src/views/business/assess/assessInfo.vue
+++ b/src/views/business/assess/assessInfo.vue
@@ -1,23 +1,25 @@
 <template>
   <div class="assessment-detail">
     <!-- 鍩虹妗堜緥淇℃伅 -->
-    <case-basic-info :case-id="caseId" :show-attachment="true" />
+    <case-basic-info :case-id="caseId" :show-attachment="true":column="3" />
 
-    <el-card class="organ-assessment-card">
+    <el-card class="organ-assessment-card paper-card">
       <div slot="header" class="clearfix">
         <span>鍣ㄥ畼璇勪及琛�</span>
       </div>
 
       <!-- 鎹愮尞鍐冲畾琛ㄥ崟 -->
-      <el-form>
-        <el-form-item label-width="100px" label="鎹愮尞鍐冲畾">
-          <el-checkbox-group v-model="organdecisionValues" @change="handleOrganDecisionChange" :disabled="!isEdit">
-            <el-checkbox v-for="dict in dict.type.sys_Organ" :key="dict.value" :label="dict.value">{{ dict.label }}
-            </el-checkbox>
-          </el-checkbox-group>
-          <el-input v-if="showOtherInput" v-model="organdecisionOther" placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
-            style="margin-top: 10px; width: 300px;" :readonly="!isEdit" @input="handleOtherDecisionInput"></el-input>
-        </el-form-item>
+      <el-form class="paper-form">
+        <div class="form-row">
+          <el-form-item label-width="100px" label="鎹愮尞鍐冲畾" class="col-full">
+            <el-checkbox-group v-model="organdecisionValues" @change="handleOrganDecisionChange" :disabled="!isEdit || isReadOnly">
+              <el-checkbox v-for="dict in dict.type.sys_Organ" :key="dict.value" :label="dict.value">{{ dict.label }}
+              </el-checkbox>
+            </el-checkbox-group>
+            <el-input v-if="showOtherInput" v-model="organdecisionOther" placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
+              style="margin-top: 10px; width: 300px;" :readonly="!isEdit || isReadOnly" @input="handleOtherDecisionInput"></el-input>
+          </el-form-item>
+        </div>
       </el-form>
 
       <!-- 鍣ㄥ畼璇勪及琛ㄦ牸 -->
@@ -33,13 +35,13 @@
                 <el-tab-pane v-for="(assessment, index) in getOrganAssessments(scope.row)"
                   :key="`${scope.row.organno}_${index}`" :label="`绗�${index + 1}娆¤瘎浼癭" :name="String(index)">
                   <organ-assessment-form :organ-data="scope.row" :assessment-index="index"
-                    :readonly="!canAssessOrgan(scope.row)" :current-user="currentUser"
+                    :readonly="!canAssessOrgan(scope.row) || isReadOnly" :current-user="currentUser"
                     @update-assessment="handleUpdateAssessment" @delete-assessment="handleDeleteAssessment"
                     @save-assessment="handleSaveAssessment" />
                 </el-tab-pane>
 
                 <!-- 娣诲姞璇勪及鎸夐挳 -->
-                <el-tab-pane name="add" v-if="canAssessOrgan(scope.row) && isEdit">
+                <el-tab-pane name="add" v-if="canAssessOrgan(scope.row) && isEdit && !isReadOnly">
                   <template slot="label">
                     <el-button type="text" icon="el-icon-plus" @click.stop="handleAddNewAssessment(scope.row)"
                       size="mini">
@@ -253,7 +255,7 @@
           </template>
         </el-table-column>
 
-        <el-table-column label="鎿嶄綔" align="center" width="150" class-name="small-padding fixed-width">
+        <el-table-column v-if="!isReadOnly" label="鎿嶄綔" align="center" width="150" class-name="small-padding fixed-width">
           <template slot-scope="scope">
             <el-button v-if="canAssessOrgan(scope.row) && isEdit" size="mini" type="text"
               @click="handleToggleExpand(scope.row)">
@@ -273,7 +275,7 @@
     </el-card>
 
     <!-- 鏁翠綋淇濆瓨鎸夐挳 -->
-    <div class="footer-actions" v-if="isEdit">
+    <div class="footer-actions" v-if="isEdit && !isReadOnly">
       <el-button type="primary" @click="handleSaveAll" :loading="saveLoading">淇濆瓨璇勪及琛�</el-button>
       <el-button type="success" @click="accomplish" :loading="saveLoading">璇勪及瀹屾垚</el-button>
     </div>
@@ -289,6 +291,7 @@
   assessedit,
   assessAdd
 } from "@/api/businessApi/index";
+import { getDonatebaseinfo } from "@/api/project/donatebaseinfo";
 import CaseBasicInfo from "@/components/CaseBasicInfo";
 import FilePreviewDialog from "@/components/FilePreviewDialog";
 import OrganAssessmentForm from "@/components/assessInfoComponents/OrganAssessmentForm.vue";
@@ -358,6 +361,10 @@
     };
   },
   computed: {
+    // 鏌ョ湅妯″紡锛氬彧璇伙紝绂佺敤琛ㄥ崟骞堕殣钘忎繚瀛樻寜閽�
+    isReadOnly() {
+      return this.$route.query.mode === "view";
+    },
     isCoordinator() {
       return this.currentUser.role == "coordinator";
     },
@@ -548,7 +555,7 @@
         type: "warning"
       })
         .then(() => {
-          this.form.assessState = 3;
+          this.assessmentData.assessState = 3;
           this.handleSaveAll();
         })
 
@@ -556,8 +563,17 @@
     },
     // 鏁翠綋淇濆瓨鏂规硶
     async handleSaveAll() {
+      if (this.saveLoading) return;
       this.saveLoading = true;
       try {
+        // 鏂板鏃舵牎楠屾槸鍚﹀凡鏈夌浉鍚屾偅鑰�
+        if (!this.assessmentData.id) {
+          const exists = await this.checkPatientExists();
+          if (exists) {
+            this.$message.warning("璇ユ偅鑰呭凡瀛樺湪锛岃鍕块噸澶嶆坊鍔�");
+            return;
+          }
+        }
         const saveData = {
           id: this.assessmentData.id || undefined,
           infoid: this.infoid,
@@ -619,6 +635,29 @@
         this.$message.error("淇濆瓨澶辫触锛岃閲嶈瘯");
       } finally {
         this.saveLoading = false;
+      }
+    },
+    // 鏂板鏃舵牎楠屾槸鍚﹀凡鏈夌浉鍚屾偅鑰咃紙鎸変綇闄㈠彿锛�
+    async checkPatientExists() {
+      let inpatientno = this.assessmentData.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 evaluateBaseInfolist({ inpatientno, pageNum: 1, pageSize: 1 });
+        let list = res.data || [];
+        if (!Array.isArray(list)) {
+          list = list.rows || list.list || [];
+        }
+        return list.some(item => item && item.id != null && item.id !== "");
+      } catch (e) {
+        return false;
       }
     },
 
@@ -1547,4 +1586,103 @@
     margin-bottom: 10px;
   }
 }
+
+/* ===== 绾歌川琛ㄦ牸缃戞牸鏍峰紡 ===== */
+.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