From c4599aa279fd2f90b741608392e056fbae2282d5 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期四, 20 八月 2026 17:16:54 +0800
Subject: [PATCH] 各表单布局调整

---
 src/views/business/course/components/DonorMaintenanceStage.vue |  568 ++++++++++++++++----------------------------------------
 1 files changed, 164 insertions(+), 404 deletions(-)

diff --git a/src/views/business/course/components/DonorMaintenanceStage.vue b/src/views/business/course/components/DonorMaintenanceStage.vue
index e07bdc9..7080781 100644
--- a/src/views/business/course/components/DonorMaintenanceStage.vue
+++ b/src/views/business/course/components/DonorMaintenanceStage.vue
@@ -1,171 +1,13 @@
 <template>
   <div class="maintenance-detail">
-    <!-- 鍩虹淇℃伅 -->
-    <el-card class="detail-card">
-      <div slot="header" class="clearfix">
-        <span class="detail-title">渚涜�呭熀鏈俊鎭�</span>
-      </div>
-
-      <el-form :model="form" ref="form" label-width="120px">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="浣忛櫌鍙�" prop="caseNo">
-              <el-input v-model="form.caseNo" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
-              <el-input v-model="form.name" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鎬у埆" prop="gender">
-              <el-select v-model="form.sex" style="width: 100%">
-                <el-option label="鐢�" value="0" />
-                <el-option label="濂�" value="1" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="骞撮緞" prop="age">
-              <el-input v-model="form.age" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
-              <el-input v-model="form.diagnosisname" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="棣栬瘖鍖荤枟鏈烘瀯" prop="treatmenthospitalname">
-              <el-input v-model="form.treatmenthospitalname" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="鎮h�呯姸鎬�" prop="recordstate">
-              <el-select v-model="form.recordstate" style="width: 100%">
-                <el-option
-                  v-for="dict in dict.type.sys_DonationCategory || []"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item
-              label="鏈畬鎴愬師鍥�"
-              prop="incompleteReason"
-              v-if="form.recordstate === '5'"
-            >
-              <el-input
-                v-model="form.incompleteReason"
-                placeholder="璇疯緭鍏ユ湭瀹屾垚鎹愮尞鐨勫師鍥�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="涓婃姤鏃堕棿" prop="reporttime">
-              <el-date-picker
-                v-model="form.reporttime"
-                type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                style="width: 100%"
-              />
-            </el-form-item>
-          </el-col>
-          <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%"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鍗忚皟鍛�" prop="coordinatorName">
-              <el-input v-model="form.coordinatorName" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="琛�鍨�" prop="bloodtype">
-              <el-select v-model="form.bloodtype" style="width: 100%">
-                <el-option
-                  v-for="dict in dict.type.sys_BloodType"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="Rh(D)" prop="rhYin">
-              <el-radio-group v-model="form.rhYin">
-                <el-radio
-                  v-for="dict in dict.type.sys_bloodtype_rhd || []"
-                  :key="dict.value"
-                  :label="dict.value"
-                  >{{ dict.label }}</el-radio
-                >
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-form-item label="鐗规畩鐥呭彶" prop="specialMedicalHistory">
-          <el-input
-            type="textarea"
-            :rows="3"
-            v-model="form.specialMedicalHistory"
-            placeholder="璁板綍鐗规畩鐥呭彶淇℃伅"
-          />
-        </el-form-item>
-      </el-form>
-    </el-card>
-
     <el-card class="assessment-card">
-      <div slot="header" class="clearfix">
-        <span class="detail-title">渚涜�呰瘎浼板悇椤硅褰�</span>
-        <el-button
-          type="primary"
-          size="mini"
-          @click="toggleEditMode"
-          style="float: right;"
-        >
-          {{ isEdit ? "瀹屾垚缂栬緫" : "寮�濮嬬紪杈�" }}
-        </el-button>
-      </div>
-
       <el-tabs v-model="activeTab" type="card" @tab-click="handleTabClick">
         <!-- 鍩瑰吇缁撴灉璁板綍 -->
         <el-tab-pane label="鍩瑰吇缁撴灉" name="culture">
           <el-card class="culture-card">
             <div slot="header" class="clearfix">
               <span class="detail-title">鍩瑰吇缁撴灉璁板綍</span>
-              <el-button
-                type="primary"
-                size="mini"
-                icon="el-icon-plus"
-                @click="handleAddCulture"
-              >
-                鏂板鍩瑰吇璁板綍
-              </el-button>
+
             </div>
 
             <el-table :data="cultureList" v-loading="cultureLoading">
@@ -181,10 +23,54 @@
               />
               <el-table-column label="鍩瑰吇缁撴灉" align="center" prop="result">
                 <template slot-scope="scope">
-                  <el-tag
-                    :type="scope.row.result === '闃存��' ? 'success' : 'danger'"
-                    effect="plain"
+                  <!-- 闃虫�х粨鏋滃甫鎮诞鎻愮ず -->
+                  <el-tooltip
+                    v-if="
+                      scope.row.result === '闃虫��' && scope.row.positiveDetails
+                    "
+                    effect="light"
+                    placement="top"
+                    :open-delay="200"
+                    popper-class="custom-positive-tooltip"
                   >
+                    <div slot="content">
+                      <div
+                        style="font-weight: bold; color: #f56c6c; margin-bottom: 8px;"
+                      >
+                        <i class="el-icon-warning"></i> 闃虫�х粨鏋滆鎯�
+                      </div>
+                      <div
+                        style="color: #606266; line-height: 1.6; white-space: pre-wrap;"
+                      >
+                        {{ scope.row.positiveDetails }}
+                      </div>
+                    </div>
+                    <el-tag
+                      type="danger"
+                      effect="plain"
+                      @click="handleResultClick(scope.row)"
+                      style="cursor: pointer;"
+                    >
+                      {{ scope.row.result }}
+                      <i class="el-icon-info" style="margin-left: 4px;"></i>
+                    </el-tag>
+                  </el-tooltip>
+
+                  <!-- 闃虫�т絾娌℃湁璇︽儏鐨� -->
+                  <el-tag
+                    v-else-if="
+                      scope.row.result === '闃虫��' && !scope.row.positiveDetails
+                    "
+                    type="danger"
+                    effect="plain"
+                    @click="handleResultClick(scope.row)"
+                    style="cursor: pointer;"
+                  >
+                    {{ scope.row.result }}
+                  </el-tag>
+
+                  <!-- 闃存�х粨鏋� -->
+                  <el-tag v-else type="success" effect="plain">
                     {{ scope.row.result }}
                   </el-tag>
                 </template>
@@ -204,28 +90,49 @@
                   <span v-else>鏃犻檮浠�</span>
                 </template>
               </el-table-column>
+            </el-table>
+          </el-card>
+        </el-tab-pane>
+        <el-tab-pane label="鎶ょ悊鏍告煡璁板綍" name="hlihc">
+          <el-card class="record-card">
+            <div slot="header" class="clearfix">
+              <span class="detail-title">鎶ょ悊鏍告煡璁板綍</span>
+
+            </div>
+
+            <el-table :data="recordList" v-loading="recordLoading">
               <el-table-column
-                label="鎿嶄綔"
+                label="鏍告煡鏃堕棿"
                 align="center"
-                width="200"
-                class-name="small-padding fixed-width"
-              >
+                prop="recordTime"
+                width="160"
+              />
+              <el-table-column
+                label="鏍告煡浜�"
+                align="center"
+                prop="recorder"
+                width="100"
+              />
+              <el-table-column
+                label="鏍告煡璁板綍"
+                align="center"
+                prop="checkRecord"
+                min-width="200"
+                show-overflow-tooltip
+              />
+              <el-table-column label="闄勪欢" align="center" width="120">
                 <template slot-scope="scope">
                   <el-button
+                    v-if="
+                      scope.row.attachments && scope.row.attachments.length > 0
+                    "
                     size="mini"
                     type="text"
-                    icon="el-icon-edit"
-                    @click="handleEditCulture(scope.row)"
-                    >缂栬緫</el-button
+                    @click="handleViewRecordAttachments(scope.row)"
                   >
-                  <el-button
-                    size="mini"
-                    type="text"
-                    icon="el-icon-delete"
-                    style="color: #F56C6C;"
-                    @click="handleDeleteCulture(scope.row)"
-                    >鍒犻櫎</el-button
-                  >
+                    鏌ョ湅闄勪欢({{ scope.row.attachments.length }})
+                  </el-button>
+                  <span v-else>鏃犻檮浠�</span>
                 </template>
               </el-table-column>
             </el-table>
@@ -265,226 +172,6 @@
     </el-card>
 
     <!-- 鎶ょ悊鏍告煡璁板綍 -->
-    <el-card class="record-card">
-      <div slot="header" class="clearfix">
-        <span class="detail-title">鎶ょ悊鏍告煡璁板綍</span>
-        <el-button
-          type="primary"
-          size="mini"
-          icon="el-icon-plus"
-          @click="handleAddRecord"
-        >
-          鏂板鏍告煡璁板綍
-        </el-button>
-      </div>
-
-      <el-table :data="recordList" v-loading="recordLoading">
-        <el-table-column
-          label="鏍告煡鏃堕棿"
-          align="center"
-          prop="recordTime"
-          width="160"
-        />
-        <el-table-column
-          label="鏍告煡浜�"
-          align="center"
-          prop="recorder"
-          width="100"
-        />
-        <el-table-column
-          label="鏍告煡璁板綍"
-          align="center"
-          prop="checkRecord"
-          min-width="200"
-          show-overflow-tooltip
-        />
-        <el-table-column label="闄勪欢" align="center" width="120">
-          <template slot-scope="scope">
-            <el-button
-              v-if="scope.row.attachments && scope.row.attachments.length > 0"
-              size="mini"
-              type="text"
-              @click="handleViewRecordAttachments(scope.row)"
-            >
-              鏌ョ湅闄勪欢({{ scope.row.attachments.length }})
-            </el-button>
-            <span v-else>鏃犻檮浠�</span>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="鎿嶄綔"
-          align="center"
-          width="180"
-          class-name="small-padding fixed-width"
-        >
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleEditRecord(scope.row)"
-              >缂栬緫</el-button
-            >
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              style="color: #F56C6C;"
-              @click="handleDeleteRecord(scope.row)"
-              >鍒犻櫎</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-    </el-card>
-
-    <!-- 鍩瑰吇璁板綍缂栬緫瀵硅瘽妗� -->
-    <el-dialog
-      :title="cultureDialogTitle"
-      :visible.sync="cultureDialogVisible"
-      width="700px"
-      :close-on-click-modal="false"
-    >
-      <el-form
-        :model="cultureForm"
-        ref="cultureForm"
-        :rules="cultureRules"
-        label-width="120px"
-      >
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="鍩瑰吇绫诲瀷" prop="cultureType">
-              <el-select
-                v-model="cultureForm.cultureType"
-                placeholder="璇烽�夋嫨鍩瑰吇绫诲瀷"
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="item in cultureTypeOptions"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.label"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="閲囨牱鏃堕棿" prop="sampleTime">
-              <el-date-picker
-                v-model="cultureForm.sampleTime"
-                type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                placeholder="閫夋嫨閲囨牱鏃堕棿"
-                style="width: 100%"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="鍩瑰吇缁撴灉" prop="result">
-              <el-select
-                v-model="cultureForm.result"
-                placeholder="璇烽�夋嫨鍩瑰吇缁撴灉"
-                style="width: 100%"
-              >
-                <el-option label="闃存��" value="闃存��" />
-                <el-option label="闃虫��" value="闃虫��" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-form-item label="闄勪欢">
-          <UploadAttachment
-            ref="cultureUploadAttachment"
-            :file-list="cultureFileList"
-            :limit="10"
-            :accept="attachmentAccept"
-            :multiple="true"
-            @change="handleCultureAttachmentChange"
-            @upload-success="handleCultureUploadSuccess"
-            @upload-error="handleCultureUploadError"
-            @remove="handleCultureAttachmentRemove"
-          />
-        </el-form-item>
-      </el-form>
-
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="cultureDialogVisible = false">鍙栨秷</el-button>
-        <el-button
-          type="primary"
-          @click="handleSaveCulture"
-          :loading="cultureSaveLoading"
-          >淇濆瓨</el-button
-        >
-      </span>
-    </el-dialog>
-
-    <!-- 鎶ょ悊鏍告煡璁板綍缂栬緫瀵硅瘽妗� -->
-    <el-dialog
-      :title="recordDialogTitle"
-      :visible.sync="recordDialogVisible"
-      width="700px"
-      :close-on-click-modal="false"
-    >
-      <el-form
-        :model="recordForm"
-        ref="recordForm"
-        :rules="recordRules"
-        label-width="120px"
-      >
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="鏍告煡鏃堕棿" prop="recordTime">
-              <el-date-picker
-                v-model="recordForm.recordTime"
-                type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                placeholder="閫夋嫨鏍告煡鏃堕棿"
-                style="width: 100%"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏍告煡浜�" prop="recorder">
-              <el-input
-                v-model="recordForm.recorder"
-                placeholder="璇疯緭鍏ユ牳鏌ヤ汉濮撳悕"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-form-item label="鏍告煡璁板綍" prop="checkRecord">
-          <el-input
-            type="textarea"
-            :rows="4"
-            v-model="recordForm.checkRecord"
-            placeholder="璇疯緭鍏ユ牳鏌ヨ褰曞唴瀹�"
-          />
-        </el-form-item>
-
-        <el-form-item label="闄勪欢">
-          <UploadAttachment
-            ref="recordUploadAttachment"
-            :file-list="recordFileList"
-            :limit="10"
-            :accept="attachmentAccept"
-            :multiple="true"
-            @change="handleRecordAttachmentChange"
-            @upload-success="handleRecordUploadSuccess"
-            @upload-error="handleRecordUploadError"
-            @remove="handleRecordAttachmentRemove"
-          />
-        </el-form-item>
-      </el-form>
-
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="recordDialogVisible = false">鍙栨秷</el-button>
-      </span>
-    </el-dialog>
 
     <!-- 闄勪欢棰勮瀵硅瘽妗� -->
     <el-dialog
@@ -555,22 +242,23 @@
 <script>
 import { maintainList, maintainedit, maintainAdd } from "@/api/businessApi";
 import Pagination from "@/components/Pagination";
-import UploadAttachment from "@/components/UploadAttachment";
 import FilePreviewDialog from "@/components/FilePreviewDialog";
 import LiverKidneyPanel from "@/components/MaintainComponents/LiverKidneyPanel.vue";
 import BloodRoutinePanel from "@/components/MaintainComponents/BloodRoutinePanel.vue";
 import UrineRoutinePanel from "@/components/MaintainComponents/UrineRoutinePanel.vue";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
+import store from "@/store";
 import dayjs from "dayjs";
 
 export default {
   name: "MaintenanceDetail",
   components: {
     Pagination,
-    UploadAttachment,
     FilePreviewDialog,
     LiverKidneyPanel,
     BloodRoutinePanel,
-    UrineRoutinePanel
+    UrineRoutinePanel,
+    CaseBasicInfo
   },
   dicts: [
     "sys_donornode",
@@ -696,6 +384,8 @@
     };
   },
   created() {
+    this.caseId = this.infoid;
+
     this.loadMaintenanceData();
   },
   watch: {
@@ -710,15 +400,24 @@
         this.cultureLoading = true;
         this.recordLoading = true;
 
+        const id = null;
+        const infoid = this.infoid;
         const queryParams = {};
-        console.log(this.infoid, "this.infoid");
 
-        if (this.infoid) {
-          queryParams.infoid = this.infoid;
+        if (id) {
+          queryParams.infoid = infoid;
+          this.currentMaintenanceId = id;
+          this.isEditMode = true;
+        } else if (infoid) {
+          queryParams.infoid = infoid;
+          this.currentMaintenanceId = null;
+          this.isEditMode = false;
         } else {
           this.$message.error("缂哄皯蹇呰鐨勮矾鐢卞弬鏁�");
           return;
         }
+
+        queryParams.infoid = infoid;
         const response = await maintainList(queryParams);
         if (response.code === 200) {
           let maintenanceData = response.data[0];
@@ -772,13 +471,74 @@
       }
     },
 
+    // 淇濆瓨鎵�鏈夋暟鎹�
+    async handleSave() {
+      try {
+        const saveData = {
+          ...this.form,
+          itemDesc: {
+            liverKidney: this.assessmentData.liverKidney,
+            bloodRoutine: this.assessmentData.bloodRoutine,
+            urineRoutine: this.assessmentData.urineRoutine,
+            cultureResults: this.cultureList,
+            nursingRecords: this.recordList
+          }
+        };
+        if (saveData.state == 1 || !saveData.state) {
+          saveData.state = 2;
+        }
+        this.extracontentinfo.specialMedicalHistory = this.form.specialMedicalHistory;
+        let response;
+        if (this.isEditMode && this.currentMaintenanceId) {
+          saveData.id = this.currentMaintenanceId;
+          response = await maintainedit(saveData);
+        } else {
+          response = await maintainAdd(saveData);
+        }
+
+        if (response.code === 200) {
+          this.$message.success("淇濆瓨鎴愬姛");
+          this.isEdit = false;
+          if (!this.currentMaintenanceId) {
+            this.currentMaintenanceId = response.data;
+          }
+          // this.donatebaseinfoEdit({
+          //   id: this.$route.query.infoid,
+          //   extracontent: JSON.stringify(this.extracontentinfo)
+          // });
+          if (!this.isEditMode && response.data && response.data.id) {
+            this.currentMaintenanceId = response.data.id;
+            this.isEditMode = true;
+          }
+        } else {
+          this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+      } catch (error) {
+        console.error("淇濆瓨鏁版嵁澶辫触:", error);
+        this.$message.error("淇濆瓨澶辫触");
+      }
+    },
+
     // 鍒囨崲缂栬緫妯″紡
     toggleEditMode() {
       this.isEdit = !this.isEdit;
       if (!this.isEdit) {
+        this.handleSave();
       }
     },
+    accomplish() {
+      this.$confirm("鏄惁瀹屾垚璇ユ渚嬫崘鐚‘璁ゆ楠わ紵", "鎻愰啋", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      })
+        .then(() => {
+          this.form.state = 3;
+          this.handleSave();
+        })
 
+        .catch(() => {});
+    },
     // 鍩瑰吇璁板綍鐩稿叧鏂规硶
     handleAddCulture() {
       this.cultureDialogTitle = "鏂板鍩瑰吇璁板綍";
@@ -863,7 +623,7 @@
           .toISOString()
           .replace("T", " ")
           .substring(0, 19),
-        recorder: "褰撳墠鐢ㄦ埛",
+        recorder: store.getters.name,
         checkRecord: "",
         attachments: []
       };

--
Gitblit v1.9.3