From c8e9849cb5f24848df0174c13bfbbff37bb08a5a Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期二, 21 七月 2026 15:45:30 +0800
Subject: [PATCH] 维护

---
 src/views/business/course/components/MedicalAssessmentStage.vue |  385 ++++++++++++++++++-------------------------------------
 1 files changed, 126 insertions(+), 259 deletions(-)

diff --git a/src/views/business/course/components/MedicalAssessmentStage.vue b/src/views/business/course/components/MedicalAssessmentStage.vue
index c579876..3a4c17d 100644
--- a/src/views/business/course/components/MedicalAssessmentStage.vue
+++ b/src/views/business/course/components/MedicalAssessmentStage.vue
@@ -5,88 +5,43 @@
     <el-card class="organ-assessment-card">
       <div slot="header" class="clearfix">
         <span>鍣ㄥ畼璇勪及琛�</span>
-
-        <span v-if="!isCoordinator" class="jstitle">
-          褰撳墠瑙掕壊锛歿{ currentDepartment }}璇勪及浜哄憳
-        </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-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-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>
 
       <!-- 鍣ㄥ畼璇勪及琛ㄦ牸 -->
-      <el-table
-        :data="filteredOrganAssessmentList"
-        v-loading="assessmentLoading"
-        style="width: 100%"
-        :row-class-name="getRowClassName"
-        :expand-row-keys="expandedRowKeys"
-        @expand-change="handleExpandChange"
-        row-key="organno"
-        empty-text="褰撳墠鎹愮尞鍐冲畾涓嬫殏鏃犻渶瑕佽瘎浼扮殑鍣ㄥ畼"
-      >
+      <el-table :data="filteredOrganAssessmentList" v-loading="assessmentLoading" style="width: 100%"
+        :row-class-name="getRowClassName" :expand-row-keys="expandedRowKeys" @expand-change="handleExpandChange"
+        row-key="organno" empty-text="褰撳墠鎹愮尞鍐冲畾涓嬫殏鏃犻渶瑕佽瘎浼扮殑鍣ㄥ畼">
         <el-table-column type="expand">
           <template slot-scope="scope">
             <div class="organ-expand-content" v-if="scope.row.expanded">
-              <el-tabs
-                v-model="scope.row.activeTab"
-                type="card"
-                class="organ-detail-tabs"
-                @tab-click="handleTabClick(scope.row, $event)"
-              >
+              <el-tabs v-model="scope.row.activeTab" type="card" class="organ-detail-tabs"
+                @tab-click="handleTabClick(scope.row, $event)">
                 <!-- 鍔ㄦ�佺敓鎴愯瘎浼癟ab -->
-                <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"
-                    @update-assessment="handleUpdateAssessment"
-                    @delete-assessment="handleDeleteAssessment"
-                    @save-assessment="handleSaveAssessment"
-                  />
+                <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"
+                    @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">
                   <template slot="label">
-                    <el-button
-                      type="text"
-                      icon="el-icon-plus"
-                      @click.stop="handleAddNewAssessment(scope.row)"
-                      size="mini"
-                    >
+                    <el-button type="text" icon="el-icon-plus" @click.stop="handleAddNewAssessment(scope.row)"
+                      size="mini">
                       鏂板璇勪及
                     </el-button>
                   </template>
@@ -103,12 +58,12 @@
                       <el-descriptions-item label="鍣ㄥ畼绫诲瀷">
                         <span class="summary-item">{{
                           getOrganLabel(scope.row.organno)
-                        }}</span>
+                          }}</span>
                       </el-descriptions-item>
                       <el-descriptions-item label="鑾峰彇鏈烘瀯">
                         <span class="summary-item">{{
                           scope.row.gainhospitalname
-                        }}</span>
+                          }}</span>
                       </el-descriptions-item>
                       <el-descriptions-item label="璇勪及娆℃暟" :span="2">
                         <el-tag type="info" size="medium">
@@ -118,57 +73,36 @@
                       <el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
                         <span class="highlight-text">{{
                           getLatestAssessmentTime(scope.row) || "-"
-                        }}</span>
+                          }}</span>
                       </el-descriptions-item>
                     </el-descriptions>
 
                     <!-- 璇勪及璇︽儏姹囨�� -->
-                    <el-card
-                      header="璇勪及璇︽儏鍒楄〃"
-                      style="margin-top: 20px;"
-                      class="assessment-detail-card"
-                    >
-                      <div
-                        v-if="getOrganAssessments(scope.row).length == 0"
-                        class="no-assessment"
-                      >
+                    <el-card header="璇勪及璇︽儏鍒楄〃" style="margin-top: 20px;" class="assessment-detail-card">
+                      <div v-if="getOrganAssessments(scope.row).length == 0" class="no-assessment">
                         <el-empty description="鏆傛棤璇勪及璁板綍"></el-empty>
                       </div>
 
                       <div v-else>
                         <!-- 姣忔璇勪及璇︽儏 -->
-                        <div
-                          v-for="(assessment, index) in getOrganAssessments(
-                            scope.row
-                          )"
-                          :key="index"
-                          class="assessment-item"
-                        >
+                        <div v-for="(assessment, index) in getOrganAssessments(
+                          scope.row
+                        )" :key="index" class="assessment-item">
                           <el-card shadow="hover" class="assessment-card">
                             <div slot="header" class="clearfix">
-                              <span class="assessment-title"
-                                >绗瑊{ index + 1 }}娆¤瘎浼�</span
-                              >
-                              <el-tag
-                                :type="getAssessmentTagType(assessment.status)"
-                                size="small"
-                                class="status-tag"
-                              >
+                              <span class="assessment-title">绗瑊{ index + 1 }}娆¤瘎浼�</span>
+                              <el-tag :type="getAssessmentTagType(assessment.status)" size="small" class="status-tag">
                                 {{ getAssessmentStatusText(assessment.status) }}
                               </el-tag>
                             </div>
 
-                            <el-descriptions
-                              :column="2"
-                              border
-                              class="detail-descriptions"
-                            >
+                            <el-descriptions :column="2" border class="detail-descriptions">
                               <!-- 璇勪及鏃堕棿 -->
                               <el-descriptions-item label="璇勪及鏃堕棿" :span="2">
                                 <span class="time-text">
                                   {{
                                     parseTime(assessment.assessmentTime) ||
-                                      "鏈缃�"
+                                    "鏈缃�"
                                   }}
                                 </span>
                               </el-descriptions-item>
@@ -182,14 +116,10 @@
 
                               <!-- 鍔熻兘鐘舵�� -->
                               <el-descriptions-item label="鍔熻兘鐘舵��">
-                                <el-tag
-                                  :type="
-                                    getFunctionStatusTagType(
-                                      assessment.functionStatus
-                                    )
-                                  "
-                                  size="small"
-                                >
+                                <el-tag :type="getFunctionStatusTagType(
+                                  assessment.functionStatus
+                                )
+                                  " size="small">
                                   {{
                                     getFunctionStatusText(
                                       assessment.functionStatus
@@ -203,34 +133,25 @@
                                 <div class="opinion-content">
                                   {{
                                     assessment.assessmentOpinion ||
-                                      "鏆傛棤璇勪及鎰忚"
+                                    "鏆傛棤璇勪及鎰忚"
                                   }}
                                 </div>
                               </el-descriptions-item>
 
                               <!-- 闄勪欢鏁伴噺 -->
-                              <el-descriptions-item
-                                label="闄勪欢鏁伴噺"
-                                :span="2"
-                                v-if="
-                                  assessment.attachments &&
-                                    assessment.attachments.length > 0
-                                "
-                              >
+                              <el-descriptions-item label="闄勪欢鏁伴噺" :span="2" v-if="
+                                assessment.attachments &&
+                                assessment.attachments.length > 0
+                              ">
                                 <el-tag type="success" size="small">
                                   {{ assessment.attachments.length }}涓�
                                 </el-tag>
-                                <el-button
-                                  type="text"
-                                  size="mini"
-                                  @click="
-                                    showAttachmentList(
-                                      assessment.attachments,
-                                      index + 1
-                                    )
-                                  "
-                                  style="margin-left: 10px;"
-                                >
+                                <el-button type="text" size="mini" @click="
+                                  showAttachmentList(
+                                    assessment.attachments,
+                                    index + 1
+                                  )
+                                  " style="margin-left: 10px;">
                                   鏌ョ湅闄勪欢鍒楄〃
                                 </el-button>
                               </el-descriptions-item>
@@ -241,57 +162,37 @@
                     </el-card>
 
                     <!-- 鍣ㄥ畼鍩烘湰淇℃伅鍗$墖 -->
-                    <el-card
-                      header="鍣ㄥ畼淇℃伅"
-                      style="margin-top: 20px;"
-                      class="organ-info-card"
-                    >
+                    <el-card header="鍣ㄥ畼淇℃伅" style="margin-top: 20px;" class="organ-info-card">
                       <el-descriptions :column="2" border>
                         <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
-                          <el-tag
-                            :type="
-                              scope.row.isbiopsybefore == '1'
-                                ? 'success'
-                                : 'info'
-                            "
-                            size="small"
-                          >
+                          <el-tag :type="scope.row.isbiopsybefore == '1'
+                              ? 'success'
+                              : 'info'
+                            " size="small">
                             {{ scope.row.isbiopsybefore == "1" ? "鏄�" : "鍚�" }}
                           </el-tag>
                         </el-descriptions-item>
                         <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
-                          <el-tag
-                            :type="
-                              scope.row.isbiopsyafter == '1'
-                                ? 'success'
-                                : 'info'
-                            "
-                            size="small"
-                          >
+                          <el-tag :type="scope.row.isbiopsyafter == '1'
+                              ? 'success'
+                              : 'info'
+                            " size="small">
                             {{ scope.row.isbiopsyafter == "1" ? "鏄�" : "鍚�" }}
                           </el-tag>
                         </el-descriptions-item>
                         <el-descriptions-item label="杈圭紭鍣ㄥ畼">
-                          <el-tag
-                            :type="
-                              scope.row.ismarginalorgan == '1'
-                                ? 'warning'
-                                : 'info'
-                            "
-                            size="small"
-                          >
+                          <el-tag :type="scope.row.ismarginalorgan == '1'
+                              ? 'warning'
+                              : 'info'
+                            " size="small">
                             {{ scope.row.ismarginalorgan == "1" ? "鏄�" : "鍚�" }}
                           </el-tag>
                         </el-descriptions-item>
                         <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
-                          <el-tag
-                            :type="
-                              scope.row.ispathogenpositive == '1'
-                                ? 'danger'
-                                : 'info'
-                            "
-                            size="small"
-                          >
+                          <el-tag :type="scope.row.ispathogenpositive == '1'
+                              ? 'danger'
+                              : 'info'
+                            " size="small">
                             {{
                               scope.row.ispathogenpositive == "1" ? "鏄�" : "鍚�"
                             }}
@@ -318,31 +219,16 @@
           </template>
         </el-table-column>
 
-        <el-table-column
-          label="鑾峰彇鏈烘瀯"
-          align="center"
-          prop="gainhospitalname"
-          show-overflow-tooltip
-        />
+        <el-table-column label="鑾峰彇鏈烘瀯" align="center" prop="gainhospitalname" show-overflow-tooltip />
 
         <!-- 鍔ㄦ�佹樉绀鸿瘎浼扮姸鎬佸垪 -->
-        <el-table-column
-          v-for="index in getMaxAssessmentCount()"
-          :key="index"
-          :label="`绗�${index}娆¤瘎浼癭"
-          align="center"
-          width="120"
-        >
+        <el-table-column v-for="index in getMaxAssessmentCount()" :key="index" :label="`绗�${index}娆¤瘎浼癭" align="center"
+          width="120">
           <template slot-scope="scope">
-            <el-tag
-              v-if="getOrganAssessments(scope.row)[index - 1]"
-              :type="
-                getAssessmentTagType(
-                  getOrganAssessments(scope.row)[index - 1].status
-                )
-              "
-              size="small"
-            >
+            <el-tag v-if="getOrganAssessments(scope.row)[index - 1]" :type="getAssessmentTagType(
+              getOrganAssessments(scope.row)[index - 1].status
+            )
+              " size="small">
               {{
                 getAssessmentStatusText(
                   getOrganAssessments(scope.row)[index - 1].status
@@ -355,51 +241,31 @@
 
         <el-table-column label="鏁翠綋鐘舵��" align="center" width="100">
           <template slot-scope="scope">
-            <el-tag
-              :type="
-                getOrganOverallStatus(scope.row) == 'completed'
-                  ? 'success'
-                  : getOrganOverallStatus(scope.row) == 'assessing'
+            <el-tag :type="getOrganOverallStatus(scope.row) == 'completed'
+                ? 'success'
+                : getOrganOverallStatus(scope.row) == 'assessing'
                   ? 'primary'
                   : 'warning'
-              "
-              size="small"
-            >
+              " size="small">
               {{ getOrganOverallStatusText(scope.row) }}
             </el-tag>
           </template>
         </el-table-column>
 
-        <el-table-column
-          label="鎿嶄綔"
-          align="center"
-          width="150"
-          class-name="small-padding fixed-width"
-        >
+        <el-table-column 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)"
-            >
+            <el-button v-if="canAssessOrgan(scope.row) && isEdit" size="mini" type="text"
+              @click="handleToggleExpand(scope.row)">
               {{
                 expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "璇︽儏"
               }}
             </el-button>
-            <el-button
-              v-else-if="!isEdit"
-              size="mini"
-              type="text"
-              @click="handleToggleExpand(scope.row)"
-            >
+            <el-button v-else-if="!isEdit" size="mini" type="text" @click="handleToggleExpand(scope.row)">
               {{
                 expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "鏌ョ湅"
               }}
             </el-button>
-            <el-button v-else size="mini" type="text" disabled
-              >鏃犳潈闄�</el-button
-            >
+            <el-button v-else size="mini" type="text" disabled>鏃犳潈闄�</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -407,18 +273,12 @@
 
     <!-- 鏁翠綋淇濆瓨鎸夐挳 -->
     <div class="footer-actions" v-if="isEdit">
-      <el-button type="primary" @click="handleSaveAll" :loading="saveLoading"
-        >淇濆瓨璇勪及琛�</el-button
-      >
-      <el-button @click="handleCancel">鍙栨秷</el-button>
+      <el-button type="primary" @click="handleSaveAll" :loading="saveLoading">淇濆瓨璇勪及琛�</el-button>
+      <el-button type="success" @click="accomplish" :loading="saveLoading">璇勪及瀹屾垚</el-button>
     </div>
 
     <!-- 鏂囦欢棰勮寮圭獥 -->
-    <FilePreviewDialog
-      :visible="attachmentVisible"
-      :file="currentPreviewFile"
-      @close="attachmentVisible = false"
-    />
+    <FilePreviewDialog :visible="attachmentVisible" :file="currentPreviewFile" @close="attachmentVisible = false" />
   </div>
 </template>
 
@@ -436,7 +296,7 @@
   name: "AssessmentDetail",
   components: { OrganAssessmentForm, FilePreviewDialog, CaseBasicInfo },
   dicts: ["sys_user_sex", "sys_Organ", "sys_0_1"],
-  props: {
+   props: {
     infoid: {
       type: String,
       default: true
@@ -557,9 +417,9 @@
     }
   },
   created() {
+
     this.caseId = this.infoid;
-    this.assessmentId = this.$route.query.id;
-    this.isEdit = this.$route.query.assess == "true";
+    this.isEdit = true;
     this.getAssessmentDetail();
   },
   methods: {
@@ -614,8 +474,8 @@
         <h4>绗�${assessmentNumber}娆¤瘎浼伴檮浠跺垪琛�</h4>
         <ul style="list-style: none; padding-left: 0;">
           ${attachments
-            .map(
-              (item, index) => `
+          .map(
+            (item, index) => `
             <li style="margin: 5px 0; padding: 5px; background: #f5f7fa; border-radius: 4px;">
               <i class="el-icon-document"></i>
               <span style="margin-left: 8px;">${item.fileName}</span>
@@ -629,8 +489,8 @@
               </el-button>
             </li>
           `
-            )
-            .join("")}
+          )
+          .join("")}
         </ul>
       </div>`,
         "闄勪欢鍒楄〃",
@@ -684,7 +544,19 @@
         this.$forceUpdate();
       }
     },
+    accomplish() {
+      this.$confirm("鏄惁瀹屾垚璇ユ渚嬪櫒瀹樿瘎浼版楠わ紵", "鎻愰啋", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      })
+        .then(() => {
+          this.form.assessState = 3;
+          this.handleSaveAll();
+        })
 
+        .catch(() => { });
+    },
     // 鏁翠綋淇濆瓨鏂规硶
     async handleSaveAll() {
       this.saveLoading = true;
@@ -729,7 +601,9 @@
             })
           )
         };
-
+        if (saveData.assessState == 1 || !saveData.assessState) {
+          saveData.assessState = 2;
+        }
         const saveMethod = this.assessmentData.id ? assessedit : assessAdd;
         const response = await saveMethod(saveData);
 
@@ -738,6 +612,7 @@
           if (!this.assessmentData.id && response.data) {
             this.assessmentData.id = response.data;
           }
+          this.getAssessmentDetail()
           this.refreshKey += 1; // 瑙﹀彂閲嶆柊娓叉煋
         } else {
           this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
@@ -853,8 +728,7 @@
         // 鏄剧ず鍒涘缓鎻愮ず
         if (organsToCreate.length > 0) {
           this.$message.success(
-            `宸蹭负銆�${this.getOrganLabel(decision)}銆戝垱寤�${
-              organsToCreate.length
+            `宸蹭负銆�${this.getOrganLabel(decision)}銆戝垱寤�${organsToCreate.length
             }涓瘎浼伴」`
           );
         }
@@ -976,7 +850,7 @@
         detailData = response;
       }
       this.assessmentData = {
-        id: detailData.id || this.assessmentId,
+        id: detailData.id ,
         infoid: detailData.infoid || this.infoid,
         caseNo: detailData.caseNo || "",
         name: detailData.name || detailData.donorName || "",
@@ -1037,8 +911,8 @@
         const activeTab = this.activeTabMap.has(organno)
           ? String(this.activeTabMap.get(organno))
           : assessments.length > 0
-          ? "0"
-          : "summary";
+            ? "0"
+            : "summary";
 
         return {
           ...organ,
@@ -1340,32 +1214,25 @@
       }
     },
 
-    handleCompleteAssessment() {
-      this.$confirm("鏄惁瀹屾垚璇ユ渚嬫墍鏈夊櫒瀹樼殑璇勪及锛�", "鎻愰啋", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          this.assessmentData.assessState = 3;
-          this.saveAssessment();
-        })
-
-        .catch(() => {});
-    },
-
-    // 淇濆瓨璇勪及
-    async saveAssessment() {
+    // 瀹屾垚璇勪及
+    async handleCompleteAssessment() {
       try {
+        await this.$confirm(
+          "纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�",
+          "纭鎿嶄綔",
+          {
+            confirmButtonText: "纭畾",
+            cancelButtonText: "鍙栨秷",
+            type: "warning"
+          }
+        );
+
         const updateData = {
-          ...this.assessmentData
+          ...this.assessmentData,
+          assessState: "3",
+          assessTime: new Date().toISOString()
         };
-        if (
-          this.assessmentData.assessState == 1 ||
-          !this.assessmentData.assessState
-        ) {
-          this.assessmentData.assessState = 2;
-        }
+
         const response = await assessedit(updateData);
 
         if (response.code == 200) {
@@ -1586,7 +1453,7 @@
   background-color: #fafafa;
 }
 
-::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
+::v-deep .el-table--enable-row-hover .el-table__body tr:hover>td {
   background-color: #ecf5ff;
 }
 
@@ -1664,7 +1531,7 @@
   background-color: #e4e7ed;
 }
 
-::v-deep .el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
+::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
   background-color: #fff;
   border-bottom-color: #fff;
 }

--
Gitblit v1.9.3