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