| | |
| | | <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> |
| | | <!-- 基础案例信息 --> |
| | | <case-basic-info :case-id="caseId" :show-attachment="true" /> |
| | | |
| | | <el-card class="organ-assessment-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span>器官评估表</span> |
| | | <el-button |
| | | <!-- <el-button |
| | | v-if="isCoordinator && allOrgansAssessed" |
| | | style="float: right; margin-left: 10px" |
| | | type="primary" |
| | |
| | | </el-button> |
| | | <span v-if="!isCoordinator" class="jstitle"> |
| | | 当前角色:{{ currentDepartment }}评估人员 |
| | | </span> |
| | | </span> --> |
| | | </div> |
| | | |
| | | <!-- 捐献决定表单 --> |
| | |
| | | v-for="(assessment, index) in getOrganAssessments(scope.row)" |
| | | :key="`${scope.row.organno}_${index}`" |
| | | :label="`第${index + 1}次评估`" |
| | | :name="index" |
| | | :name="String(index)" |
| | | > |
| | | <organ-assessment-form |
| | | :organ-data="scope.row" |
| | |
| | | </el-tab-pane> |
| | | |
| | | <!-- 评估汇总Tab --> |
| | | <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> |
| | |
| | | </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="获取机构" |
| | |
| | | <template slot-scope="scope"> |
| | | <el-tag |
| | | :type=" |
| | | getOrganOverallStatus(scope.row) === 'completed' |
| | | getOrganOverallStatus(scope.row) == 'completed' |
| | | ? 'success' |
| | | : getOrganOverallStatus(scope.row) === 'assessing' |
| | | : getOrganOverallStatus(scope.row) == 'assessing' |
| | | ? 'primary' |
| | | : 'warning' |
| | | " |
| | |
| | | <el-button type="primary" @click="handleSaveAll" :loading="saveLoading" |
| | | >保存评估表</el-button |
| | | > |
| | | <el-button @click="handleCancel">取消</el-button> |
| | | <el-button type="success" @click="accomplish" :loading="saveLoading" |
| | | >评估完成</el-button |
| | | > |
| | | </div> |
| | | |
| | | <!-- 文件预览弹窗 --> |
| | |
| | | assessedit, |
| | | assessAdd |
| | | } from "@/api/businessApi/index"; |
| | | import CaseBasicInfo from "@/components/CaseBasicInfo"; |
| | | import FilePreviewDialog from "@/components/FilePreviewDialog"; |
| | | import OrganAssessmentForm from "./components/OrganAssessmentForm.vue"; |
| | | 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"], |
| | | data() { |
| | | return { |
| | | caseId: null, |
| | | // 是否编辑模式 |
| | | isEdit: false, |
| | | // 加载状态 |
| | |
| | | }, |
| | | 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 []; |
| | | } |
| | | |
| | |
| | | return ( |
| | | assessments && |
| | | assessments.length > 0 && |
| | | assessments.every(assessment => assessment.status === "assessed") |
| | | assessments.every(assessment => assessment.status == "assessed") |
| | | ); |
| | | }); |
| | | }, |
| | |
| | | }, |
| | | created() { |
| | | this.infoid = this.$route.query.infoid; |
| | | this.caseId = this.infoid; |
| | | this.assessmentId = this.$route.query.id; |
| | | this.isEdit = this.$route.query.assess === "true"; |
| | | this.isEdit = this.$route.query.assess == "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", // 正常 |
| | | "2": "warning", // 轻度异常 |
| | | "3": "danger", // 重度异常 |
| | | "4": "info" // 无法评估 |
| | | }; |
| | | return typeMap[status] || "info"; |
| | | }, |
| | | // 获取功能状态标签类型 |
| | | getFunctionStatusTagType(status) { |
| | | const typeMap = { |
| | | "1": "success", // 正常 |
| | | "2": "warning", // 轻度异常 |
| | | "3": "danger", // 重度异常 |
| | | "4": "info" // 无法评估 |
| | | }; |
| | | return typeMap[status] || "info"; |
| | | }, |
| | | |
| | | // 获取功能状态文本 |
| | | getFunctionStatusText(status) { |
| | | const textMap = { |
| | | "1": "正常", |
| | | "2": "轻度异常", |
| | | "3": "重度异常", |
| | | "4": "无法评估" |
| | | }; |
| | | return textMap[status] || "未评估"; |
| | | }, |
| | | // 获取功能状态文本 |
| | | getFunctionStatusText(status) { |
| | | const textMap = { |
| | | "1": "正常", |
| | | "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> |
| | |
| | | 下载 |
| | | </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; |
| | | |
| | |
| | | this.$forceUpdate(); |
| | | } |
| | | }, |
| | | accomplish() { |
| | | this.$confirm("是否完成该案例器官评估步骤?", "提醒", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }) |
| | | .then(() => { |
| | | this.form.assessState = 3; |
| | | this.handleSaveAll(); |
| | | }) |
| | | |
| | | .catch(() => {}); |
| | | }, |
| | | // 整体保存方法 |
| | | async handleSaveAll() { |
| | | this.saveLoading = true; |
| | |
| | | }) |
| | | ) |
| | | }; |
| | | |
| | | 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.refreshKey += 1; // 触发重新渲染 |
| | | } else { |
| | |
| | | async handleOrganDecisionChange(newDecision) { |
| | | const oldDecision = [...this.prevOrgandecisionValues]; |
| | | this.autoHandleDecisionChange(newDecision); |
| | | console.log(newDecision); |
| | | |
| | | const removedDecisions = oldDecision.filter( |
| | | item => !newDecision.includes(item) |
| | |
| | | this.prevOrgandecisionValues = [...newDecision]; |
| | | this.$forceUpdate(); |
| | | |
| | | if (newDecision.length === 0) { |
| | | if (newDecision.length == 0) { |
| | | this.expandedRowKeys = []; |
| | | } |
| | | }, |
| | |
| | | |
| | | 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) { |
| | |
| | | // 确保器官存在 |
| | | ensureOrganExists(organValue) { |
| | | const exists = this.organAssessmentList.some( |
| | | organ => organ.organno === organValue && organ.delFlag !== "1" |
| | | organ => organ.organno == organValue && organ.delFlag !== "1" |
| | | ); |
| | | |
| | | if (!exists) { |
| | |
| | | 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 || "未知错误")); |
| | |
| | | } else { |
| | | detailData = response; |
| | | } |
| | | |
| | | this.assessmentData = { |
| | | id: detailData.id || this.assessmentId, |
| | | infoid: detailData.infoid || this.infoid, |
| | |
| | | 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) { |
| | |
| | | |
| | | const assessments = this.getOrganAssessments(organ); |
| | | const activeTab = this.activeTabMap.has(organno) |
| | | ? this.activeTabMap.get(organno) |
| | | ? String(this.activeTabMap.get(organno)) |
| | | : assessments.length > 0 |
| | | ? 0 |
| | | ? "0" |
| | | : "summary"; |
| | | |
| | | return { |
| | |
| | | return { |
| | | index: index, |
| | | status: "pending", |
| | | assessmentTime: "", |
| | | assessmentTime: new Date().toLocaleString("zh-CN"), // 添加默认评估时间 |
| | | assessor: "", |
| | | functionStatus: "", |
| | | assessmentOpinion: "", |
| | |
| | | // 获取器官整体状态 |
| | | 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"; |
| | |
| | | } else { |
| | | this.expandedRowKeys = [key]; |
| | | this.organAssessmentList.forEach(item => { |
| | | item.expanded = item.organno === key; |
| | | item.expanded = item.organno == key; |
| | | }); |
| | | } |
| | | }, |
| | |
| | | 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("已添加新的评估"); |
| | | }, |
| | |
| | | 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); |
| | | } |
| | | }, |
| | |
| | | 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"; |
| | |
| | | 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"); |
| | | } |
| | | |
| | |
| | | // 获取最新评估时间 |
| | | 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 |
| | | ); |
| | | }, |
| | | |
| | | // 获取评估状态标签类型 |
| | |
| | | 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; |
| | | |
| | |
| | | |
| | | const response = await assessedit(updateData); |
| | | |
| | | if (response.code === 200) { |
| | | if (response.code == 200) { |
| | | this.$message.success("评估完成确认成功"); |
| | | this.assessmentData.assessState = "3"; |
| | | this.isEdit = false; |
| | |
| | | .fixed-width .el-button { |
| | | margin: 0 2px; |
| | | } |
| | | |
| | | /* 汇总页面样式 */ |
| | | .assessment-summary { |
| | | padding: 10px; |
| | |
| | | } |
| | | |
| | | .highlight-text { |
| | | color: #409EFF; |
| | | color: #409eff; |
| | | font-weight: 500; |
| | | } |
| | | |
| | |
| | | |
| | | .assessment-card:hover { |
| | | box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); |
| | | border-color: #409EFF; |
| | | border-color: #409eff; |
| | | } |
| | | |
| | | .assessment-title { |
| | |
| | | } |
| | | |
| | | .time-text { |
| | | color: #67C23A; |
| | | color: #67c23a; |
| | | font-weight: 500; |
| | | } |
| | | |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | ::v-deep .el-tabs__item.is-active { |
| | | color: #409EFF; |
| | | color: #409eff; |
| | | font-weight: 600; |
| | | } |
| | | |
| | |
| | | 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; |
| | | } |