<template>
|
<BaseContentLayout>
|
<template #header>
|
<SearchBar @on-submit="search">
|
<template #summary>
|
<CompSubTaskStatistic :subtasks="subtasks" />
|
</template>
|
</SearchBar>
|
</template>
|
<template #aside>
|
<SideList
|
:items="subtasks"
|
:loading="sideLoading"
|
@item-click="chooseSubtask"
|
></SideList>
|
</template>
|
<template #main>
|
<ToolBar
|
:title="curSubtask.title"
|
:descriptions="proStatus"
|
:buttons="buttons"
|
:loading="mainLoading"
|
></ToolBar>
|
<el-scrollbar
|
v-if="curProList.length > 0"
|
class="el-scrollbar"
|
v-loading="mainLoading"
|
>
|
<CompProblemCard
|
:key="i"
|
v-for="(p, i) in curProList"
|
:index="i + 1"
|
:problem="p"
|
:subtask="curSubtask.data"
|
:topTask="topTask"
|
@submit="updateSubtask"
|
></CompProblemCard>
|
</el-scrollbar>
|
<el-empty v-else description="暂无记录" v-loading="mainLoading" />
|
</template>
|
</BaseContentLayout>
|
<CompProblemAddOrUpd
|
title="新增问题"
|
v-if="proAddOrUpdDialogVisible"
|
v-model:visible="proAddOrUpdDialogVisible"
|
:subtask="curSubtask.data"
|
:topTask="topTask"
|
ref="compProblemAddOrUpdRef"
|
@cancel="onAddProCanceled"
|
@submit="updateSubtask"
|
/>
|
<ArbitraryPhoto
|
v-if="anyPhotoDialog"
|
v-model:dialog-visible="anyPhotoDialog"
|
:readonly="true"
|
:subtask="curSubtask.data"
|
ref="arbitraryPhotoRef"
|
></ArbitraryPhoto>
|
<CompDeviceShowTest
|
title="设施设备"
|
v-model:visible="deviceShowDialog"
|
v-if="deviceShowDialog"
|
ref="deviceShowRef"
|
>
|
</CompDeviceShowTest>
|
</template>
|
|
<script>
|
import ArbitraryPhoto from './components/ArbitraryPhoto.vue';
|
import taskApi from '@/api/fysp/taskApi';
|
import ProCheckProxy from './ProCheckProxy';
|
import CompProblemAddOrUpd from './components/CompProblemAddOrUpd.vue';
|
import CompProblemCard from './components/CompProblemCard.vue';
|
import CompSubTaskStatistic from './components/CompSubTaskStatistic.vue';
|
import CompDeviceShowTest from './components/CompDeviceShowTest.vue';
|
export default {
|
components: {
|
CompProblemCard,
|
CompSubTaskStatistic,
|
CompProblemAddOrUpd,
|
ArbitraryPhoto,
|
CompDeviceShowTest
|
},
|
data() {
|
return {
|
// 设备图
|
deviceShowDialog: false,
|
// 任意图
|
anyPhotoDialog: false,
|
// 新增问题
|
proAddOrUpdDialogVisible: false,
|
//左侧菜单栏加载状态
|
sideLoading: false,
|
//右侧内容栏加载状态
|
mainLoading: false,
|
// 总任务
|
topTask: {},
|
//子任务列表
|
subtasks: [],
|
//当前选中的任务
|
curSubtask: {},
|
//当前任务的问题列表
|
curProList: [],
|
//操作按钮
|
buttons: [
|
{
|
name: '新增问题',
|
color: 'success',
|
click: () => {
|
this.proAddOrUpdDialogVisible = true;
|
}
|
},
|
{
|
name: '场景图片',
|
color: 'warning',
|
click: () => {
|
this.anyPhotoDialog = true;
|
}
|
},
|
{
|
name: '设施设备',
|
color: 'info',
|
click: () => {
|
this.openDeviceShowDialog();
|
}
|
}
|
// {
|
// name: '批量审核',
|
// color: 'primary',
|
// click: () => {}
|
// }
|
]
|
};
|
},
|
computed: {
|
//问题状态
|
proStatus() {
|
return ProCheckProxy.proStatusArray(this.curProList);
|
},
|
//任务问题审核情况统计信息
|
summary() {
|
const _summary = [
|
{
|
name: '任务总计',
|
value: 0,
|
type: 'info'
|
},
|
{
|
name: '问题未审核',
|
value: 0,
|
type: 'success',
|
icon: 'SuccessFilled'
|
},
|
{
|
name: '问题部分审核',
|
value: 0,
|
type: 'success',
|
icon: 'SuccessFilled'
|
},
|
{
|
name: '问题全部审核',
|
value: 0,
|
type: 'success',
|
icon: 'SuccessFilled'
|
},
|
{
|
name: '未整改',
|
value: 0,
|
type: 'info',
|
icon: 'WarningFilled'
|
},
|
{
|
name: '整改未审核',
|
value: 0,
|
type: 'info',
|
icon: 'WarningFilled'
|
},
|
{
|
name: '整改部分审核',
|
value: 0,
|
type: 'warning',
|
icon: 'WarningFilled'
|
},
|
{
|
name: '整改全部审核',
|
value: 0,
|
type: 'warning',
|
icon: 'WarningFilled'
|
}
|
];
|
|
this.subtasks.forEach((s) => {
|
_summary[0].value++;
|
|
if (s.data.proNum == 0) {
|
_summary[1].value++;
|
} else if (s.data.proCheckedNum == 0) {
|
_summary[3].value++;
|
} else if (s.data.proCheckedNum < s.data.proNum) {
|
_summary[2].value++;
|
} else {
|
_summary[1].value++;
|
}
|
});
|
_summary.forEach((s, i) => {
|
if (i > 0) {
|
let per = Math.round((s.value / _summary[0].value) * 1000) / 10;
|
if (isNaN(per)) per = 0;
|
s.value = `${s.value}(${per}%)`;
|
}
|
});
|
|
return _summary;
|
}
|
},
|
methods: {
|
// 打开设备图
|
openDeviceShowDialog() {
|
this.deviceShowDialog = true;
|
this.$nextTick(() => {
|
this.$refs.deviceShowRef.init(this.curSubtask.data.scene);
|
});
|
},
|
//查询子任务统计信息
|
search(formSearch) {
|
this.topTask = formSearch.topTask;
|
this.sideLoading = true;
|
this.mainLoading = true;
|
this.curProList = [];
|
this.curSubtask = {};
|
const param = {
|
topTaskId: formSearch.topTask.tguid,
|
sceneTypeId: formSearch.sceneTypeId
|
};
|
taskApi.getSubtaskSummary(param).then((res) => {
|
const list = [];
|
res.forEach((s) => {
|
const t = this.getSubtaskType(s);
|
list.push({
|
type: t,
|
title: s.stName,
|
categoly: s.stPlanTime.split('T')[0],
|
data: s
|
});
|
});
|
this.subtasks = list;
|
if (list.length == 0) {
|
this.sideLoading = false;
|
this.mainLoading = false;
|
}
|
});
|
},
|
//获取任务问题的审核情况
|
getSubtaskType(s) {
|
let type = 0;
|
// 无问题
|
if (s.proNum == 0) {
|
type = 0;
|
}
|
// 问题未审核
|
else if (s.proCheckedNum == 0) {
|
type = 1;
|
}
|
// 问题部分审核
|
else if (s.proCheckedNum < s.proNum) {
|
type = 2;
|
}
|
// 未整改
|
else if (s.changeNum < s.proNum) {
|
type = 3;
|
}
|
// 整改未审核
|
else if (s.changeCheckedNum == 0) {
|
type = 4;
|
}
|
// 整改部分审核
|
else if (s.changeCheckedNum < s.changeNum) {
|
type = 5;
|
}
|
// 完全审核
|
else {
|
type = 6;
|
}
|
return type;
|
},
|
//点击左侧菜单任务事件
|
chooseSubtask(s) {
|
// this.currInsGuid = s.data.insGuid
|
this.sideLoading = false;
|
this.mainLoading = true;
|
// const controller = new AbortController();
|
taskApi
|
.getProBySubtask(s.data.stGuid)
|
.then((res) => {
|
this.curProList = res;
|
this.curSubtask = s;
|
})
|
.finally(() => {
|
this.mainLoading = false;
|
});
|
},
|
onAddProCanceled() {
|
this.proAddOrUpdDialogVisible = false;
|
},
|
// 问题卡片组件主动发起刷新父组件数据
|
updateSubtask(refresh = false) {
|
this.curSubtask.data.proCheckedNum++;
|
this.curSubtask.type = this.getSubtaskType(this.curSubtask.data);
|
if (this.proAddOrUpdDialogVisible) {
|
this.proAddOrUpdDialogVisible = false;
|
}
|
this.refreshCurrSubtask(refresh);
|
},
|
// 刷新当前选中子任务
|
refreshCurrSubtask(refresh) {
|
this.sideLoading = false;
|
this.mainLoading = true;
|
setTimeout(() => {
|
taskApi
|
.getProBySubtask(this.curSubtask.data.stGuid)
|
.then((res) => {
|
if (refresh) {
|
this.curProList = res;
|
return;
|
}
|
const currProLen = this.curProList.length;
|
// 不改变数组对像引用的前提下重新赋值
|
for (let index = 0; index < res.length; index++) {
|
const element = res[index];
|
if (currProLen < index + 1) {
|
this.curProList.push(element);
|
} else {
|
this.curProList[index] = element;
|
}
|
}
|
// this.curSubtask = s;
|
})
|
.finally(() => {
|
this.mainLoading = false;
|
});
|
}, 150);
|
}
|
},
|
mounted() {}
|
};
|
</script>
|
|
<style scoped>
|
.el-scrollbar {
|
height: calc(100vh - 60px * 2 - 20px * 2 - var(--height-toolbar));
|
}
|
</style>
|