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 |  743 ++++++++++++++++++++++++---------------------------------
 1 files changed, 313 insertions(+), 430 deletions(-)

diff --git a/src/views/business/course/components/MedicalAssessmentStage.vue b/src/views/business/course/components/MedicalAssessmentStage.vue
index e05103c..3a4c17d 100644
--- a/src/views/business/course/components/MedicalAssessmentStage.vue
+++ b/src/views/business/course/components/MedicalAssessmentStage.vue
@@ -1,153 +1,47 @@
 <template>
   <div class="assessment-detail">
-    <el-card class="basic-info-card">
-      <div slot="header" class="clearfix">
-        <span>妗堜緥鍩烘湰淇℃伅</span>
-        <el-button
-          style="float: right; padding: 3px 0"
-          type="text"
-          @click="handleAttachmentPreview"
-        >
-          <i class="el-icon-folder-opened"></i> 鏌ョ湅闄勪欢
-        </el-button>
-      </div>
-
-      <el-descriptions :column="2" border>
-        <el-descriptions-item label="浣忛櫌鍙�">{{
-          assessmentData.caseNo
-        }}</el-descriptions-item>
-        <el-descriptions-item label="娼滃湪鎹愮尞鑰呭鍚�">{{
-          assessmentData.name || assessmentData.donorName
-        }}</el-descriptions-item>
-        <el-descriptions-item label="鎬у埆">
-          <dict-tag
-            :options="dict.type.sys_user_sex"
-            :value="assessmentData.sex"
-          />
-        </el-descriptions-item>
-        <el-descriptions-item label="骞撮緞"
-          >{{ assessmentData.age }}宀�</el-descriptions-item
-        >
-        <el-descriptions-item label="琛�鍨�">
-          {{ assessmentData.bloodtype }}
-        </el-descriptions-item>
-        <el-descriptions-item label="璇佷欢鍙风爜">{{
-          assessmentData.idcardno
-        }}</el-descriptions-item>
-        <el-descriptions-item label="鐤剧梾璇婃柇">{{
-          assessmentData.diagnosisname
-        }}</el-descriptions-item>
-        <el-descriptions-item label="鎵�鍦ㄥ尰鐤楁満鏋�">{{
-          assessmentData.treatmenthospitalname
-        }}</el-descriptions-item>
-        <el-descriptions-item label="鍗忚皟鍛�">{{
-          assessmentData.coordinatorName
-        }}</el-descriptions-item>
-        <el-descriptions-item label="璇勪及鏃堕棿">{{
-          assessmentData.assessTime
-        }}</el-descriptions-item>
-        <el-descriptions-item label="璇勪及鐘舵��">
-          <el-tag :type="statusFilter(assessmentData.assessState)">
-            {{ statusTextFilter(assessmentData.assessState) }}
-          </el-tag>
-        </el-descriptions-item>
-      </el-descriptions>
-    </el-card>
+    <!-- 鍩虹妗堜緥淇℃伅 -->
 
     <el-card class="organ-assessment-card">
       <div slot="header" class="clearfix">
         <span>鍣ㄥ畼璇勪及琛�</span>
-        <el-button
-          v-if="isCoordinator && allOrgansAssessed"
-          style="float: right; margin-left: 10px"
-          type="primary"
-          size="mini"
-          @click="handleCompleteAssessment"
-          :loading="saveLoading"
-        >
-          纭瀹屾垚璇勪及
-        </el-button>
-        <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="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>
@@ -157,153 +51,157 @@
                 </el-tab-pane>
 
                 <!-- 璇勪及姹囨�籘ab -->
-              <el-tab-pane label="璇勪及姹囨��" name="summary">
-  <div class="assessment-summary">
-    <!-- 鍩烘湰淇℃伅姹囨�� -->
-    <el-descriptions title="鍩烘湰淇℃伅姹囨��" :column="2" border>
-      <el-descriptions-item label="鍣ㄥ畼绫诲瀷">
-        <span class="summary-item">{{ getOrganLabel(scope.row.organno) }}</span>
-      </el-descriptions-item>
-      <el-descriptions-item label="鑾峰彇鏈烘瀯">
-        <span class="summary-item">{{ scope.row.gainhospitalname }}</span>
-      </el-descriptions-item>
-      <el-descriptions-item label="璇勪及娆℃暟" :span="2">
-        <el-tag type="info" size="medium">
-          {{ getAssessmentCount(scope.row) }}娆�
-        </el-tag>
-      </el-descriptions-item>
-      <el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
-        <span class="highlight-text">{{ getLatestAssessmentTime(scope.row) || "-" }}</span>
-      </el-descriptions-item>
-    </el-descriptions>
+                <el-tab-pane label="璇勪及姹囨��" name="summary">
+                  <div class="assessment-summary">
+                    <!-- 鍩烘湰淇℃伅姹囨�� -->
+                    <el-descriptions title="鍩烘湰淇℃伅姹囨��" :column="2" border>
+                      <el-descriptions-item label="鍣ㄥ畼绫诲瀷">
+                        <span class="summary-item">{{
+                          getOrganLabel(scope.row.organno)
+                          }}</span>
+                      </el-descriptions-item>
+                      <el-descriptions-item label="鑾峰彇鏈烘瀯">
+                        <span class="summary-item">{{
+                          scope.row.gainhospitalname
+                          }}</span>
+                      </el-descriptions-item>
+                      <el-descriptions-item label="璇勪及娆℃暟" :span="2">
+                        <el-tag type="info" size="medium">
+                          {{ getAssessmentCount(scope.row) }}娆�
+                        </el-tag>
+                      </el-descriptions-item>
+                      <el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
+                        <span class="highlight-text">{{
+                          getLatestAssessmentTime(scope.row) || "-"
+                          }}</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-empty description="鏆傛棤璇勪及璁板綍"></el-empty>
-      </div>
+                    <!-- 璇勪及璇︽儏姹囨�� -->
+                    <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">
-          <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"
-              >
-                {{ getAssessmentStatusText(assessment.status) }}
-              </el-tag>
-            </div>
+                      <div v-else>
+                        <!-- 姣忔璇勪及璇︽儏 -->
+                        <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">
+                                {{ getAssessmentStatusText(assessment.status) }}
+                              </el-tag>
+                            </div>
 
-            <el-descriptions :column="2" border class="detail-descriptions">
-              <el-descriptions-item label="璇勪及鏃堕棿" :span="2">
-                <span class="time-text">{{ assessment.assessmentTime || "-" }}</span>
-              </el-descriptions-item>
+                            <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>
 
-              <el-descriptions-item label="璇勪及浜�">
-                <el-tag type="info" size="small">
-                  {{ assessment.assessor || "鏈~鍐�" }}
-                </el-tag>
-              </el-descriptions-item>
+                              <!-- 鍘熸湁鐨勮瘎浼颁汉淇℃伅 -->
+                              <el-descriptions-item label="璇勪及浜�">
+                                <el-tag type="info" size="small">
+                                  {{ assessment.assessor || "鏈~鍐�" }}
+                                </el-tag>
+                              </el-descriptions-item>
 
-              <el-descriptions-item label="鍔熻兘鐘舵��">
-                <el-tag
-                  :type="getFunctionStatusTagType(assessment.functionStatus)"
-                  size="small"
-                >
-                  {{ getFunctionStatusText(assessment.functionStatus) }}
-                </el-tag>
-              </el-descriptions-item>
+                              <!-- 鍔熻兘鐘舵�� -->
+                              <el-descriptions-item label="鍔熻兘鐘舵��">
+                                <el-tag :type="getFunctionStatusTagType(
+                                  assessment.functionStatus
+                                )
+                                  " size="small">
+                                  {{
+                                    getFunctionStatusText(
+                                      assessment.functionStatus
+                                    )
+                                  }}
+                                </el-tag>
+                              </el-descriptions-item>
 
-              <el-descriptions-item label="璇勪及鎰忚" :span="2">
-                <div class="opinion-content">
-                  {{ assessment.assessmentOpinion || "鏆傛棤璇勪及鎰忚" }}
-                </div>
-              </el-descriptions-item>
+                              <!-- 璇勪及鎰忚 -->
+                              <el-descriptions-item label="璇勪及鎰忚" :span="2">
+                                <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-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>
-              </el-descriptions-item>
-            </el-descriptions>
-          </el-card>
-        </div>
-      </div>
-    </el-card>
+                              <!-- 闄勪欢鏁伴噺 -->
+                              <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>
+                              </el-descriptions-item>
+                            </el-descriptions>
+                          </el-card>
+                        </div>
+                      </div>
+                    </el-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"
-          >
-            {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
-          </el-tag>
-        </el-descriptions-item>
-        <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
-          <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"
-          >
-            {{
-              scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
-            }}
-          </el-tag>
-        </el-descriptions-item>
-        <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
-          <el-tag
-            :type="
-              scope.row.ispathogenpositive === '1'
-                ? 'danger'
-                : 'info'
-            "
-            size="small"
-          >
-            {{
-              scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
-            }}
-          </el-tag>
-        </el-descriptions-item>
-      </el-descriptions>
-    </el-card>
-  </div>
-</el-tab-pane>
+                    <!-- 鍣ㄥ畼鍩烘湰淇℃伅鍗$墖 -->
+                    <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">
+                            {{ scope.row.isbiopsybefore == "1" ? "鏄�" : "鍚�" }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
+                          <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">
+                            {{ scope.row.ismarginalorgan == "1" ? "鏄�" : "鍚�" }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
+                          <el-tag :type="scope.row.ispathogenpositive == '1'
+                              ? 'danger'
+                              : 'info'
+                            " size="small">
+                            {{
+                              scope.row.ispathogenpositive == "1" ? "鏄�" : "鍚�"
+                            }}
+                          </el-tag>
+                        </el-descriptions-item>
+                      </el-descriptions>
+                    </el-card>
+                  </div>
+                </el-tab-pane>
               </el-tabs>
             </div>
           </template>
@@ -315,33 +213,22 @@
           </template>
         </el-table-column>
 
-        <el-table-column label="鍣ㄥ畼缂栧彿" align="center" prop="organnumber" />
+        <el-table-column label="鍣ㄥ畼缂栧彿" align="center" prop="organnumber">
+          <template slot-scope="scope">
+            {{ getOrganvalue(scope.row.organno) }}
+          </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
@@ -354,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>
@@ -406,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>
 
@@ -427,14 +288,15 @@
   assessedit,
   assessAdd
 } from "@/api/businessApi/index";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
 import FilePreviewDialog from "@/components/FilePreviewDialog";
 import OrganAssessmentForm from "@/components/assessInfoComponents/OrganAssessmentForm.vue";
 
 export default {
   name: "AssessmentDetail",
-  components: { OrganAssessmentForm, FilePreviewDialog },
+  components: { OrganAssessmentForm, FilePreviewDialog, CaseBasicInfo },
   dicts: ["sys_user_sex", "sys_Organ", "sys_0_1"],
-    props: {
+   props: {
     infoid: {
       type: String,
       default: true
@@ -442,13 +304,13 @@
   },
   data() {
     return {
+      caseId: null,
       // 鏄惁缂栬緫妯″紡
       isEdit: false,
       // 鍔犺浇鐘舵��
       assessmentLoading: false,
       saveLoading: false,
       // 鏁版嵁ID
-
       assessmentId: undefined,
       // 涓昏鏁版嵁
       assessmentData: {},
@@ -501,14 +363,14 @@
   },
   computed: {
     isCoordinator() {
-      return this.currentUser.role === "coordinator";
+      return this.currentUser.role == "coordinator";
     },
     currentDepartment() {
       return this.currentUser.department;
     },
     // 鏍规嵁鎹愮尞鍐冲畾杩囨护鍚庣殑鍣ㄥ畼鍒楄〃
     filteredOrganAssessmentList() {
-      if (!this.organdecisionValues || this.organdecisionValues.length === 0) {
+      if (!this.organdecisionValues || this.organdecisionValues.length == 0) {
         return [];
       }
 
@@ -532,7 +394,7 @@
         return (
           assessments &&
           assessments.length > 0 &&
-          assessments.every(assessment => assessment.status === "assessed")
+          assessments.every(assessment => assessment.status == "assessed")
         );
       });
     },
@@ -555,57 +417,65 @@
     }
   },
   created() {
-    this.assessmentId = this.$route.query.id;
-    this.isEdit = this.$route.query.assess === "true";
+
+    this.caseId = this.infoid;
+    this.isEdit = true;
     this.getAssessmentDetail();
   },
   methods: {
     // 鏍规嵁瀛楀吀value鑾峰彇label
     getOrganLabel(organValue) {
-      const dictItem = this.organDict.find(item => item.value === organValue);
+      const dictItem = this.organDict.find(item => item.value == organValue);
       return dictItem ? dictItem.label : organValue;
+    },
+    getOrganvalue(organValue) {
+      const dictItem = this.organDict.find(item => item.value == organValue);
+
+      return dictItem ? dictItem.value : organValue;
     },
 
     // Tab鐐瑰嚮浜嬩欢
     handleTabClick(organ, tab) {
       if (tab.name !== "add") {
-        this.activeTabMap.set(organ.organno, tab.name);
+        this.activeTabMap.set(organ.organno, String(tab.name));
       }
     },
-// 鑾峰彇鍔熻兘鐘舵�佹爣绛剧被鍨�
-  getFunctionStatusTagType(status) {
-    const typeMap = {
-      "1": "success",  // 姝e父
-      "2": "warning",  // 杞诲害寮傚父
-      "3": "danger",   // 閲嶅害寮傚父
-      "4": "info"      // 鏃犳硶璇勪及
-    };
-    return typeMap[status] || "info";
-  },
+    // 鑾峰彇鍔熻兘鐘舵�佹爣绛剧被鍨�
+    getFunctionStatusTagType(status) {
+      const typeMap = {
+        "1": "success", // 姝e父
+        "2": "warning", // 杞诲害寮傚父
+        "3": "danger", // 閲嶅害寮傚父
+        "4": "info" // 鏃犳硶璇勪及
+      };
+      return typeMap[status] || "info";
+    },
 
-  // 鑾峰彇鍔熻兘鐘舵�佹枃鏈�
-  getFunctionStatusText(status) {
-    const textMap = {
-      "1": "姝e父",
-      "2": "杞诲害寮傚父",
-      "3": "閲嶅害寮傚父",
-      "4": "鏃犳硶璇勪及"
-    };
-    return textMap[status] || "鏈瘎浼�";
-  },
+    // 鑾峰彇鍔熻兘鐘舵�佹枃鏈�
+    getFunctionStatusText(status) {
+      const textMap = {
+        "1": "姝e父",
+        "2": "杞诲害寮傚父",
+        "3": "閲嶅害寮傚父",
+        "4": "鏃犳硶璇勪及"
+      };
+      return textMap[status] || "鏈瘎浼�";
+    },
 
-  // 鏄剧ず闄勪欢鍒楄〃
-  showAttachmentList(attachments, assessmentNumber) {
-    if (!attachments || attachments.length === 0) {
-      this.$message.info(`绗�${assessmentNumber}娆¤瘎浼版殏鏃犻檮浠禶);
-      return;
-    }
+    // 鏄剧ず闄勪欢鍒楄〃
+    showAttachmentList(attachments, assessmentNumber) {
+      if (!attachments || attachments.length == 0) {
+        this.$message.info(`绗�${assessmentNumber}娆¤瘎浼版殏鏃犻檮浠禶);
+        return;
+      }
 
-    this.$alert(
-      `<div>
+      this.$alert(
+        `<div>
         <h4>绗�${assessmentNumber}娆¤瘎浼伴檮浠跺垪琛�</h4>
         <ul style="list-style: none; padding-left: 0;">
-          ${attachments.map((item, index) => `
+          ${attachments
+          .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>
@@ -618,24 +488,26 @@
                 涓嬭浇
               </el-button>
             </li>
-          `).join('')}
+          `
+          )
+          .join("")}
         </ul>
       </div>`,
-      '闄勪欢鍒楄〃',
-      {
-        dangerouslyUseHTMLString: true,
-        showConfirmButton: false,
-        showCancelButton: true,
-        cancelButtonText: '鍏抽棴'
-      }
-    );
-  },
+        "闄勪欢鍒楄〃",
+        {
+          dangerouslyUseHTMLString: true,
+          showConfirmButton: false,
+          showCancelButton: true,
+          cancelButtonText: "鍏抽棴"
+        }
+      );
+    },
     // 鑾峰彇鍣ㄥ畼鐨勮瘎浼板垪琛�
     getOrganAssessments(organ) {
       if (!organ.assesscontent) return [];
       try {
         const assessData =
-          typeof organ.assesscontent === "string"
+          typeof organ.assesscontent == "string"
             ? JSON.parse(organ.assesscontent)
             : organ.assesscontent;
 
@@ -672,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;
@@ -717,15 +601,18 @@
             })
           )
         };
-
+        if (saveData.assessState == 1 || !saveData.assessState) {
+          saveData.assessState = 2;
+        }
         const saveMethod = this.assessmentData.id ? assessedit : assessAdd;
         const response = await saveMethod(saveData);
 
-        if (response.code === 200) {
+        if (response.code == 200) {
           this.$message.success("璇勪及琛ㄤ繚瀛樻垚鍔燂紒");
-          if (!this.assessmentData.id && response.data && response.data.id) {
-            this.assessmentData.id = response.data.id;
+          if (!this.assessmentData.id && response.data) {
+            this.assessmentData.id = response.data;
           }
+          this.getAssessmentDetail()
           this.refreshKey += 1; // 瑙﹀彂閲嶆柊娓叉煋
         } else {
           this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
@@ -747,6 +634,7 @@
     async handleOrganDecisionChange(newDecision) {
       const oldDecision = [...this.prevOrgandecisionValues];
       this.autoHandleDecisionChange(newDecision);
+      console.log(newDecision);
 
       const removedDecisions = oldDecision.filter(
         item => !newDecision.includes(item)
@@ -759,7 +647,7 @@
       this.prevOrgandecisionValues = [...newDecision];
       this.$forceUpdate();
 
-      if (newDecision.length === 0) {
+      if (newDecision.length == 0) {
         this.expandedRowKeys = [];
       }
     },
@@ -840,8 +728,7 @@
         // 鏄剧ず鍒涘缓鎻愮ず
         if (organsToCreate.length > 0) {
           this.$message.success(
-            `宸蹭负銆�${this.getOrganLabel(decision)}銆戝垱寤�${
-              organsToCreate.length
+            `宸蹭负銆�${this.getOrganLabel(decision)}銆戝垱寤�${organsToCreate.length
             }涓瘎浼伴」`
           );
         }
@@ -858,7 +745,7 @@
 
       for (const organValue of relatedOrgans) {
         const organIndex = this.organAssessmentList.findIndex(
-          organ => organ.organno === organValue && organ.delFlag !== "1"
+          organ => organ.organno == organValue && organ.delFlag !== "1"
         );
 
         if (organIndex !== -1) {
@@ -900,7 +787,7 @@
     // 纭繚鍣ㄥ畼瀛樺湪
     ensureOrganExists(organValue) {
       const exists = this.organAssessmentList.some(
-        organ => organ.organno === organValue && organ.delFlag !== "1"
+        organ => organ.organno == organValue && organ.delFlag !== "1"
       );
 
       if (!exists) {
@@ -932,7 +819,7 @@
       try {
         const response = await evaluateBaseInfolist({ infoid: this.infoid });
 
-        if (response.code === 200) {
+        if (response.code == 200) {
           this.handleResponseData(response);
         } else {
           this.$message.error("鑾峰彇璇︽儏澶辫触锛�" + (response.msg || "鏈煡閿欒"));
@@ -962,9 +849,8 @@
       } else {
         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 || "",
@@ -1007,7 +893,7 @@
         const organno = organ.organno;
 
         // 濡傛灉 assesscontent 鏄瓧绗︿覆锛岀‘淇濆畠鏄湁鏁堢殑 JSON
-        if (organ.assesscontent && typeof organ.assesscontent === "string") {
+        if (organ.assesscontent && typeof organ.assesscontent == "string") {
           try {
             JSON.parse(organ.assesscontent);
           } catch (error) {
@@ -1023,10 +909,10 @@
 
         const assessments = this.getOrganAssessments(organ);
         const activeTab = this.activeTabMap.has(organno)
-          ? this.activeTabMap.get(organno)
+          ? String(this.activeTabMap.get(organno))
           : assessments.length > 0
-          ? 0
-          : "summary";
+            ? "0"
+            : "summary";
 
         return {
           ...organ,
@@ -1043,7 +929,7 @@
       return {
         index: index,
         status: "pending",
-        assessmentTime: "",
+        assessmentTime: new Date().toLocaleString("zh-CN"), // 娣诲姞榛樿璇勪及鏃堕棿
         assessor: "",
         functionStatus: "",
         assessmentOpinion: "",
@@ -1067,20 +953,20 @@
     // 鑾峰彇鍣ㄥ畼鏁翠綋鐘舵��
     getOrganOverallStatus(organ) {
       const assessments = this.getOrganAssessments(organ);
-      if (assessments.length === 0) {
+      if (assessments.length == 0) {
         return "pending";
       }
 
       const validAssessments = assessments.filter(a => a.delFlag !== "1");
-      if (validAssessments.length === 0) {
+      if (validAssessments.length == 0) {
         return "pending";
       }
 
       const allAssessed = validAssessments.every(
-        assessment => assessment.status === "assessed"
+        assessment => assessment.status == "assessed"
       );
       const someAssessed = validAssessments.some(
-        assessment => assessment.status === "assessed"
+        assessment => assessment.status == "assessed"
       );
 
       if (allAssessed) return "completed";
@@ -1109,7 +995,7 @@
       } else {
         this.expandedRowKeys = [key];
         this.organAssessmentList.forEach(item => {
-          item.expanded = item.organno === key;
+          item.expanded = item.organno == key;
         });
       }
     },
@@ -1127,14 +1013,15 @@
       const assessments = this.getOrganAssessments(organ);
       const newAssessment = {
         ...this.getDefaultAssessment(assessments.length),
-        assessor: this.currentUser.name
+        assessor: this.currentUser.name,
+        assessmentTime: new Date().toLocaleString("zh-CN") // 璁剧疆鍏蜂綋鐨勮瘎浼版椂闂�
       };
 
       const newAssessments = [...assessments, newAssessment];
       this.$set(organ, "assesscontent", JSON.stringify(newAssessments));
 
-      organ.activeTab = assessments.length;
-      this.activeTabMap.set(organ.organno, assessments.length);
+      organ.activeTab = String(assessments.length);
+      this.activeTabMap.set(organ.organno, String(assessments.length));
 
       this.$message.success("宸叉坊鍔犳柊鐨勮瘎浼�");
     },
@@ -1145,32 +1032,25 @@
       this.deleteOrganAssessment(organData, assessmentIndex);
     },
     // 澶勭悊璇勪及淇濆瓨
+    // 鍦� AssessmentDetail.vue 鐨� handleSaveAssessment 鏂规硶涓�
     handleSaveAssessment(data) {
       const { organData, assessmentData, assessmentIndex } = data;
       const assessments = this.getOrganAssessments(organData);
 
-      console.log("淇濆瓨璇勪及鏁版嵁:", data);
-
       if (assessments[assessmentIndex]) {
-        // 鍒涘缓鏂扮殑璇勪及鏁扮粍
         const newAssessments = [...assessments];
         newAssessments[assessmentIndex] = {
           ...assessments[assessmentIndex],
           ...assessmentData,
-          status: "assessed", // 鏍囪涓哄凡璇勪及
-          assessmentTime: new Date().toISOString(), // 璁剧疆璇勪及鏃堕棿
-          delFlag: "0" // 纭繚鍒犻櫎鏍囧織
+          status: "assessed",
+          assessmentTime:
+            assessmentData.assessmentTime || new Date().toLocaleString("zh-CN"),
+          delFlag: "0"
         };
 
-        // 鏇存柊 assesscontent
         this.$set(organData, "assesscontent", JSON.stringify(newAssessments));
-
-        // 寮哄埗閲嶆柊娓叉煋
         this.$forceUpdate();
-
         this.$message.success("璇勪及淇濆瓨鎴愬姛");
-
-        // 妫�鏌ユ槸鍚﹂渶瑕佽嚜鍔ㄥ垏鎹㈠埌涓嬩竴涓瘎浼�
         this.checkAndSwitchTab(organData, assessmentIndex);
       }
     },
@@ -1180,8 +1060,8 @@
       const assessments = this.getOrganAssessments(organData);
       if (currentIndex < assessments.length - 1) {
         // 濡傛灉杩樻湁涓嬩竴涓瘎浼帮紝鑷姩鍒囨崲鍒颁笅涓�涓�
-        organData.activeTab = currentIndex + 1;
-        this.activeTabMap.set(organData.organno, currentIndex + 1);
+        organData.activeTab = String(currentIndex + 1);
+        this.activeTabMap.set(organData.organno, String(currentIndex + 1));
       } else {
         // 濡傛灉娌℃湁涓嬩竴涓瘎浼帮紝鍒囨崲鍒版眹鎬婚〉
         organData.activeTab = "summary";
@@ -1221,14 +1101,14 @@
           this.$set(organ, "assesscontent", JSON.stringify(newAssessments));
 
           // 澶勭悊tab鍒囨崲
-          if (newAssessments.length === 0) {
+          if (newAssessments.length == 0) {
             organ.activeTab = "summary";
             this.activeTabMap.set(organ.organno, "summary");
-          } else if (organ.activeTab === assessmentIndex) {
+          } else if (organ.activeTab == String(assessmentIndex)) {
             const newIndex = Math.max(0, assessmentIndex - 1);
-            organ.activeTab = newIndex;
-            this.activeTabMap.set(organ.organno, newIndex);
-          } else if (organ.activeTab === "summary") {
+            organ.activeTab = String(newIndex);
+            this.activeTabMap.set(organ.organno, String(newIndex));
+          } else if (organ.activeTab == "summary") {
             this.activeTabMap.set(organ.organno, "summary");
           }
 
@@ -1243,16 +1123,18 @@
     // 鑾峰彇鏈�鏂拌瘎浼版椂闂�
     getLatestAssessmentTime(organ) {
       const assessments = this.getOrganAssessments(organ);
-      if (assessments.length === 0) return null;
+      if (assessments.length == 0) return null;
 
       const assessed = assessments.filter(
         a => a.assessmentTime && a.delFlag !== "1"
       );
-      if (assessed.length === 0) return null;
+      if (assessed.length == 0) return null;
 
-      return assessed.sort(
-        (a, b) => new Date(b.assessmentTime) - new Date(a.assessmentTime)
-      )[0].assessmentTime;
+      return this.parseTime(
+        assessed.sort(
+          (a, b) => new Date(b.assessmentTime) - new Date(a.assessmentTime)
+        )[0].assessmentTime
+      );
     },
 
     // 鑾峰彇璇勪及鐘舵�佹爣绛剧被鍨�
@@ -1314,7 +1196,7 @@
       if (this.assessmentData.assessannex) {
         try {
           const annexData =
-            typeof this.assessmentData.assessannex === "string"
+            typeof this.assessmentData.assessannex == "string"
               ? JSON.parse(this.assessmentData.assessannex)
               : this.assessmentData.assessannex;
 
@@ -1353,7 +1235,7 @@
 
         const response = await assessedit(updateData);
 
-        if (response.code === 200) {
+        if (response.code == 200) {
           this.$message.success("璇勪及瀹屾垚纭鎴愬姛");
           this.assessmentData.assessState = "3";
           this.isEdit = false;
@@ -1461,6 +1343,7 @@
 .fixed-width .el-button {
   margin: 0 2px;
 }
+
 /* 姹囨�婚〉闈㈡牱寮� */
 .assessment-summary {
   padding: 10px;
@@ -1472,7 +1355,7 @@
 }
 
 .highlight-text {
-  color: #409EFF;
+  color: #409eff;
   font-weight: 500;
 }
 
@@ -1507,7 +1390,7 @@
 
 .assessment-card:hover {
   box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
-  border-color: #409EFF;
+  border-color: #409eff;
 }
 
 .assessment-title {
@@ -1522,7 +1405,7 @@
 }
 
 .time-text {
-  color: #67C23A;
+  color: #67c23a;
   font-weight: 500;
 }
 
@@ -1640,7 +1523,7 @@
 }
 
 ::v-deep .el-tabs__item.is-active {
-  color: #409EFF;
+  color: #409eff;
   font-weight: 600;
 }
 

--
Gitblit v1.9.3