|
@@ -0,0 +1,167 @@
|
|
|
|
+<template>
|
|
|
|
+ <div class="caseQualityBox">
|
|
|
|
+ <div class="score-box">
|
|
|
|
+ {{ data.score }}分
|
|
|
|
+ <span class="level">{{ scoreLevel }}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <el-table
|
|
|
|
+ :data="tableData"
|
|
|
|
+ default-expand-all
|
|
|
|
+ style="width: 100%">
|
|
|
|
+ <el-table-column type="expand">
|
|
|
|
+ <template slot-scope="props">
|
|
|
|
+ <el-card v-for="(item, index) of props.row.children" :key="index" class="box-card" shadow="hover">
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="24">
|
|
|
|
+ <el-descriptions title="" :column="1" direction="vertical">
|
|
|
|
+ <el-descriptions-item label="质控项目">
|
|
|
|
+ <el-tag>{{ item.error_field }}</el-tag>
|
|
|
|
+ <span class="koufen">-{{ item.score }}分</span>
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
+ <el-descriptions-item label="错误描述">{{ item.notice }}</el-descriptions-item>
|
|
|
|
+ <el-descriptions-item label="质控依据">
|
|
|
|
+ <div v-for="(yItem, yIndex) of item.basis" :key="yIndex" style="margin-bottom: 10px;">
|
|
|
|
+ <div v-if="item.rule_id !== 6">
|
|
|
|
+ <div v-for="(cItem, cIndex) of yItem" :key="cIndex">{{ cItem }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ <a v-else href="javascript:;" class="link" @click="toPage(yItem[1])">{{ yItem[0] }}</a>
|
|
|
|
+ </div>
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
+ </el-descriptions>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </el-card>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column
|
|
|
|
+ label=""
|
|
|
|
+ prop="category">
|
|
|
|
+ </el-table-column>
|
|
|
|
+ </el-table>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+ export default {
|
|
|
|
+ props: {
|
|
|
|
+ data: {
|
|
|
|
+ type: Object,
|
|
|
|
+ default() {
|
|
|
|
+ return {
|
|
|
|
+ score: 0,
|
|
|
|
+ data: {}
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ computed: {
|
|
|
|
+ tableData() {
|
|
|
|
+ let arr = []
|
|
|
|
+ const keys = Object.keys(this.data.data)
|
|
|
|
+ for(let i=0; i<keys.length; i++) {
|
|
|
|
+ let obj = {
|
|
|
|
+ category: keys[i],
|
|
|
|
+ children: this.data.data[keys[i]]
|
|
|
|
+ }
|
|
|
|
+ arr.push(obj)
|
|
|
|
+ }
|
|
|
|
+ return arr
|
|
|
|
+ },
|
|
|
|
+ scoreLevel() {
|
|
|
|
+ /**
|
|
|
|
+ * 甲>90分
|
|
|
|
+ * 乙75-90分
|
|
|
|
+ * 丙<75分
|
|
|
|
+ * */
|
|
|
|
+ let str
|
|
|
|
+ const { score } = this.data
|
|
|
|
+ if (score > 90) {
|
|
|
|
+ str = '甲'
|
|
|
|
+ } else if (score < 75) {
|
|
|
|
+ str = '丙'
|
|
|
|
+ } else {
|
|
|
|
+ str = '乙'
|
|
|
|
+ }
|
|
|
|
+ return str
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ toPage(blbh) {
|
|
|
|
+ const { path } = this.$route
|
|
|
|
+ let routeData = this.$router.resolve({ path, query: { blbh } })
|
|
|
|
+ window.open(routeData.href, '_blank');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+.caseQualityBox {
|
|
|
|
+ width: 340px;
|
|
|
|
+ height: 820px;
|
|
|
|
+ overflow-x: hidden;
|
|
|
|
+ overflow-y: scroll;
|
|
|
|
+ background: #ffffff;
|
|
|
|
+ border: 1px solid #e2e2e2;
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
+ padding: 20px;
|
|
|
|
+ ::v-deep .el-descriptions-item__container .el-descriptions-item__content {
|
|
|
|
+ display: block;
|
|
|
|
+ }
|
|
|
|
+ ::v-deep .el-descriptions-item__label:not(.is-bordered-label) {
|
|
|
|
+ font-weight: 600;
|
|
|
|
+ display: inline-table;
|
|
|
|
+ }
|
|
|
|
+ ::v-deep .el-descriptions-item__content {
|
|
|
|
+ padding-top: 12px;
|
|
|
|
+ }
|
|
|
|
+ .box-card {
|
|
|
|
+ margin-bottom: 10px;
|
|
|
|
+ }
|
|
|
|
+ .score-box {
|
|
|
|
+ width: 100%;
|
|
|
|
+ height: 120px;
|
|
|
|
+ line-height: 120px;
|
|
|
|
+ font-size: 32px;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+ text-align: center;
|
|
|
|
+ border-radius: 5px;
|
|
|
|
+ border: 1px solid #dddddd;
|
|
|
|
+ position: relative;
|
|
|
|
+ overflow: hidden;
|
|
|
|
+ &::before {
|
|
|
|
+ content: "";
|
|
|
|
+ position: absolute;
|
|
|
|
+ width: 200px;
|
|
|
|
+ height: 200px;
|
|
|
|
+ top: -120px;
|
|
|
|
+ right: -160px;
|
|
|
|
+ z-index: 1;
|
|
|
|
+ background-color: red;
|
|
|
|
+ transform: rotate(45deg);
|
|
|
|
+ }
|
|
|
|
+ .level {
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: 5px;
|
|
|
|
+ right: 10px;
|
|
|
|
+ z-index: 2;
|
|
|
|
+ line-height: 30px;
|
|
|
|
+ color: #ffffff;
|
|
|
|
+ font-size: 16px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+.koufen {
|
|
|
|
+ color: red;
|
|
|
|
+ float: right;
|
|
|
|
+ line-height: 32px;
|
|
|
|
+ font-size: 16px;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+}
|
|
|
|
+.link {
|
|
|
|
+ text-decoration: underline;
|
|
|
|
+ &:hover {
|
|
|
|
+ color: #409EFF;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+</style>
|