<template>
|
<el-row justify="end" v-loading="loading">
|
<el-descriptions :column="4" size="small" border direction="vertical">
|
<el-descriptions-item
|
label="场景总计"
|
label-class-name="inspection-label"
|
class-name="secondary-content"
|
>
|
<template #label>
|
<el-text size="small"> 场景总计 </el-text>
|
</template>
|
{{ progress.total }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="巡查场景"
|
label-class-name="inspection-label"
|
class-name="secondary-content"
|
>
|
<template #label>
|
<el-text size="small"> 巡查场景 </el-text>
|
</template>
|
{{ progress.completedScenes }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="巡查点次"
|
label-class-name="inspection-label"
|
class-name="secondary-content"
|
>
|
<template #label>
|
<el-text size="small"> 巡查点次 </el-text>
|
</template>
|
{{ progress.completedTimes }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="复查点次"
|
label-class-name="inspection-label"
|
class-name="secondary-content"
|
>
|
<template #label>
|
<el-text size="small"> 复查点次 </el-text>
|
</template>
|
{{ progress.reviewTimes }}
|
</el-descriptions-item>
|
</el-descriptions>
|
|
<el-descriptions
|
class="m-l-4"
|
:column="3"
|
size="small"
|
border
|
direction="vertical"
|
>
|
<el-descriptions-item
|
label="问题数"
|
label-class-name="problem-label"
|
class-name="secondary-content"
|
>
|
<template #label>
|
<el-text size="small"> 问题数 </el-text>
|
</template>
|
{{ summary.proCount }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="整改数"
|
label-class-name="problem-label"
|
class-name="secondary-content"
|
>
|
<template #label>
|
<el-text size="small"> 整改数 </el-text>
|
</template>
|
{{ summary.changeCount }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="整改率"
|
label-class-name="problem-label"
|
:class-name="
|
summary.changePer < 1 ? 'danger-content' : 'secondary-content'
|
"
|
>
|
<template #label>
|
<el-text size="small"> 整改率 </el-text>
|
</template>
|
{{ formatPercent(summary.changePer) }}
|
</el-descriptions-item>
|
</el-descriptions>
|
|
<el-descriptions
|
class="m-l-4"
|
:column="8"
|
size="small"
|
border
|
direction="vertical"
|
>
|
<el-descriptions-item
|
label="无问题"
|
label-class-name="pro-check-label"
|
class-name="secondary-content"
|
>
|
<template #label>
|
<el-text size="small"> 无问题 </el-text>
|
</template>
|
{{ summary.noProblem }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="问题未审核"
|
label-class-name="pro-check-label"
|
:class-name="
|
summary.proUnCheck > 0 ? 'danger-content' : 'secondary-content'
|
"
|
>
|
<template #label>
|
<el-text size="small"> 问题未审核 </el-text>
|
</template>
|
{{ summary.proUnCheck }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="部分审核"
|
label-class-name="pro-check-label"
|
:class-name="
|
summary.proPartCheck > 0 ? 'danger-content' : 'secondary-content'
|
"
|
>
|
<template #label>
|
<el-text size="small"> 部分审核 </el-text>
|
</template>
|
{{ summary.proPartCheck }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="全部审核"
|
label-class-name="pro-check-label"
|
class-name="secondary-content"
|
>
|
<template #label>
|
<el-text size="small"> 全部审核 </el-text>
|
</template>
|
{{ summary.proAllCheck }}
|
</el-descriptions-item>
|
<!-- </el-descriptions>
|
<el-descriptions
|
:column="4"
|
size="small"
|
border
|
direction="vertical"
|
> -->
|
<el-descriptions-item
|
label="未整改"
|
label-class-name="change-check-label"
|
:class-name="
|
summary.UnChange > 0 ? 'danger-content' : 'secondary-content'
|
"
|
>
|
<template #label>
|
<el-text size="small"> 未整改 </el-text>
|
</template>
|
{{ summary.UnChange }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="整改未审核"
|
label-class-name="change-check-label"
|
:class-name="
|
summary.changeUnCheck > 0 ? 'danger-content' : 'secondary-content'
|
"
|
>
|
<template #label>
|
<el-text size="small"> 整改未审核 </el-text>
|
</template>
|
{{ summary.changeUnCheck }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="部分审核"
|
label-class-name="change-check-label"
|
:class-name="
|
summary.changePartCheck > 0 ? 'danger-content' : 'secondary-content'
|
"
|
>
|
<template #label>
|
<el-text size="small"> 部分审核 </el-text>
|
</template>
|
{{ summary.changePartCheck }}
|
</el-descriptions-item>
|
<el-descriptions-item
|
label="全部审核"
|
label-class-name="change-check-label"
|
class-name="secondary-content"
|
>
|
<template #label>
|
<el-text size="small"> 全部审核 </el-text>
|
</template>
|
{{ summary.changeAllCheck }}
|
</el-descriptions-item>
|
</el-descriptions>
|
</el-row>
|
</template>
|
<script>
|
export default {
|
props: {
|
loading: Boolean,
|
sceneType: Number,
|
subtasks: {
|
type: Array,
|
default: () => []
|
},
|
monitorObjList: {
|
type: Array,
|
default: () => []
|
}
|
},
|
computed: {
|
//任务问题审核情况统计信息
|
summary() {
|
const _summary = {
|
total: 0,
|
noProblem: 0,
|
proUnCheck: 0,
|
proPartCheck: 0,
|
proAllCheck: 0,
|
UnChange: 0,
|
changeUnCheck: 0,
|
changePartCheck: 0,
|
changeAllCheck: 0,
|
proCount: 0,
|
changeCount: 0,
|
changePer: 0
|
};
|
this.subtasks.forEach((s) => {
|
_summary.total++;
|
_summary.proCount += s.data.proNum;
|
_summary.changeCount += s.data.changeNum;
|
|
// 问题审核情况
|
if (s.data.proNum == 0) {
|
_summary.noProblem++;
|
} else if (s.data.proCheckedNum == 0) {
|
_summary.proUnCheck++;
|
} else if (s.data.proCheckedNum < s.data.proNum) {
|
_summary.proPartCheck++;
|
} else {
|
_summary.proAllCheck++;
|
}
|
|
// 是否有未整改
|
if (s.data.changeNum < s.data.proNum) {
|
_summary.UnChange++;
|
}
|
// 整改审核情况
|
else if (s.data.proNum == 0) {
|
// _summary.changeAllCheck++;
|
} else if (s.data.changeNum > 0) {
|
if (s.data.changeCheckedNum == 0) {
|
_summary.changeUnCheck++;
|
} else if (s.data.changeCheckedNum < s.data.changeNum) {
|
_summary.changePartCheck++;
|
} else {
|
_summary.changeAllCheck++;
|
}
|
}
|
});
|
|
if (_summary.proCount != 0) {
|
_summary.changePer = _summary.changeCount / _summary.proCount;
|
}
|
return _summary;
|
},
|
// 巡查任务执行进度
|
progress() {
|
const _res = {
|
total: 0,
|
completedScenes: 0,
|
completedTimes: 0,
|
reviewTimes: 0
|
};
|
|
// Fixme 2025.5.30: 目前此处的监管版本信息钟记录的任务完成次数有偏差,所以暂时先改为通过巡查任务本身进行统计
|
/**************************************************************************************/
|
// this.monitorObjList.forEach((m) => {
|
// if (this.sceneType == undefined || m.sceneTypeId == this.sceneType) {
|
// _res.total++;
|
// const times = parseInt(m.extension1);
|
// if (times) {
|
// _res.completedScenes++;
|
// _res.completedTimes += times;
|
// _res.reviewTimes += times - 1;
|
// }
|
// }
|
// });
|
/**************************************************************************************/
|
|
/**************************************************************************************/
|
_res.total = this.monitorObjList.filter(
|
(m) => this.sceneType == undefined || m.sceneTypeId == this.sceneType
|
).length;
|
_res.completedTimes = this.subtasks.length;
|
const map = new Map();
|
const uniqueArr = [];
|
for (let item of this.subtasks) {
|
if (!map.has(item.data.sceneId)) {
|
map.set(item.data.sceneId, true);
|
uniqueArr.push(item);
|
}
|
}
|
_res.completedScenes = uniqueArr.length;
|
_res.reviewTimes = _res.completedTimes - _res.completedScenes;
|
|
/**************************************************************************************/
|
return _res;
|
}
|
},
|
methods: {
|
formatPercent(value) {
|
return Math.round(value * 1000) / 10 + '%';
|
}
|
}
|
};
|
</script>
|
<style scoped>
|
:deep(.el-descriptions__cell) {
|
padding: 0px 4px !important;
|
/* font-size: 13px !important; */
|
}
|
|
:deep(.inspection-label) {
|
background: var(--el-color-success-light-5) !important;
|
/* color: white !important; */
|
}
|
|
:deep(.problem-label) {
|
background: var(--el-color-primary-light-7) !important;
|
}
|
|
:deep(.pro-check-label) {
|
background: var(--el-color-warning-light-7) !important;
|
}
|
|
:deep(.change-check-label) {
|
background: var(--el-color-danger-light-7) !important;
|
}
|
|
:deep(.danger-content) {
|
color: var(--el-color-danger) !important;
|
font-weight: 600 !important;
|
font-size: 17px !important;
|
}
|
|
:deep(.secondary-content) {
|
color: var(--el-text-color-regular) !important;
|
font-size: 12px !important;
|
}
|
</style>
|