| | |
| | | <template> |
| | | <div class="assessment-detail"> |
| | | <el-card class="basic-info-card"> |
| | | <!-- 基础案例信息 --> |
| | | <case-basic-info |
| | | :case-id="caseId" |
| | | :show-attachment="true" |
| | | /> |
| | | <!-- <el-card class="basic-info-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span>案例基本信息</span> |
| | | <el-button |
| | |
| | | </el-tag> |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | </el-card> |
| | | </el-card> --> |
| | | |
| | | <el-card class="organ-assessment-card"> |
| | | <div slot="header" class="clearfix"> |
| | |
| | | </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">{{ |
| | | 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> |
| | |
| | | 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"], |
| | | data() { |
| | | return { |
| | | caseId: null, |
| | | // 是否编辑模式 |
| | | isEdit: false, |
| | | // 加载状态 |
| | |
| | | }, |
| | | 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.getAssessmentDetail(); |
| | |
| | | this.activeTabMap.set(organ.organno, 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 []; |
| | |
| | | |
| | | 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 { |
| | |
| | | } else { |
| | | detailData = response; |
| | | } |
| | | |
| | | this.assessmentData = { |
| | | id: detailData.id || this.assessmentId, |
| | | infoid: detailData.infoid || this.infoid, |
| | |
| | | } |
| | | |
| | | .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; |
| | | } |