<template>
|
<BaseContentLayout>
|
<template #header>
|
<SearchBar @on-submit="search">
|
<template #summary>
|
<CompSubTaskStatistic
|
:loading="sideLoading"
|
:sceneType="sceneTypeId"
|
:subtasks="subtasks"
|
:monitorObjList="curMonitorObjList"
|
/>
|
</template>
|
</SearchBar>
|
</template>
|
<template #aside>
|
<SideList
|
legend
|
:items="subtasks"
|
:loading="sideLoading"
|
@item-click="chooseSubtask"
|
></SideList>
|
</template>
|
<template #main>
|
<el-scrollbar>
|
<ToolBar
|
ref="toolBarRef"
|
class="toolbar-sticky"
|
:title="curSubtask.title"
|
:descriptions="proStatus"
|
:buttons="buttons"
|
:loading="mainLoading"
|
></ToolBar>
|
<div v-if="curProList.length > 0" v-loading="mainLoading">
|
<CompProblemCard
|
:key="i"
|
v-for="(p, i) in curProList"
|
:index="i + 1"
|
:problem="p"
|
:subtask="curSubtask.data"
|
:topTask="topTask"
|
@submit="updateSubtask"
|
@check="handleProblemCheck"
|
></CompProblemCard>
|
</div>
|
<el-empty v-else description="暂无问题" v-loading="mainLoading" />
|
</el-scrollbar>
|
</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>
|
<SceneEditDialog
|
v-model="sceneInfoDialog"
|
:sceneId="curSubtask.data ? curSubtask.data.sceneId : undefined"
|
></SceneEditDialog>
|
</template>
|
|
<script>
|
import ArbitraryPhoto from './components/ArbitraryPhoto.vue';
|
import taskApi from '@/api/fysp/taskApi';
|
import problemApi from '@/api/fysp/problemApi';
|
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';
|
import SceneEditDialog from '@/views/fysp/scene/SceneEditDialog.vue';
|
export default {
|
components: {
|
CompProblemCard,
|
CompSubTaskStatistic,
|
CompProblemAddOrUpd,
|
ArbitraryPhoto,
|
CompDeviceShowTest,
|
SceneEditDialog
|
},
|
data() {
|
return {
|
// 设备图对话框
|
deviceShowDialog: false,
|
// 任意图对话框
|
anyPhotoDialog: false,
|
// 新增问题对话框
|
proAddOrUpdDialogVisible: false,
|
// 基本信息对话框
|
sceneInfoDialog: false,
|
//左侧菜单栏加载状态
|
sideLoading: false,
|
//右侧内容栏加载状态
|
mainLoading: false,
|
// 总任务
|
topTask: {},
|
// 场景类型id
|
sceneTypeId: undefined,
|
// 总任务巡查计划清单
|
curMonitorObjList: [],
|
//子任务列表
|
subtasks: [],
|
//当前选中的任务
|
curSubtask: {},
|
//当前任务的问题列表
|
curProList: [],
|
//操作按钮
|
buttons: [
|
{
|
name: '场景信息',
|
color: 'success',
|
// color: 'primary',
|
click: () => {
|
this.sceneInfoDialog = true;
|
}
|
},
|
{
|
name: '新增问题',
|
// color: 'success',
|
color: 'primary',
|
click: () => {
|
this.proAddOrUpdDialogVisible = true;
|
}
|
},
|
{
|
name: '场景图片',
|
// color: 'warning',
|
color: 'primary',
|
click: () => {
|
this.anyPhotoDialog = true;
|
}
|
},
|
{
|
name: '设施设备',
|
color: 'primary',
|
click: () => {
|
this.openDeviceShowDialog();
|
}
|
}
|
// {
|
// name: '批量审核',
|
// color: 'primary',
|
// click: () => {}
|
// }
|
]
|
};
|
},
|
computed: {
|
//问题状态
|
proStatus() {
|
return ProCheckProxy.proStatusArray(this.curProList);
|
}
|
},
|
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 = {};
|
this.sceneTypeId = formSearch.sceneTypeId;
|
const param = {
|
topTaskId: formSearch.topTask.tguid,
|
sceneTypeId: formSearch.sceneTypeId
|
};
|
taskApi.getSubtaskSummary(param).then((res) => {
|
const list = [];
|
res.forEach((s) => {
|
const t = ProCheckProxy.getSubtaskType(s);
|
list.push({
|
status: s.subtask.status,
|
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;
|
}
|
});
|
taskApi.fetchMonitorObjectVersion(param.topTaskId).then((res) => {
|
this.curMonitorObjList = res;
|
});
|
},
|
//点击左侧菜单任务事件
|
chooseSubtask(s) {
|
// this.currInsGuid = s.data.insGuid
|
this.sideLoading = false;
|
this.mainLoading = true;
|
// const controller = new AbortController();
|
problemApi
|
.getProBySubtask(s.data.stGuid)
|
.then((res) => {
|
this.curProList = res;
|
this.curSubtask = s;
|
})
|
.finally(() => {
|
this.mainLoading = false;
|
});
|
},
|
onAddProCanceled() {},
|
// 问题卡片组件主动发起刷新父组件数据
|
updateSubtask(refresh = false) {
|
this.curSubtask.data.proCheckedNum++;
|
this.curSubtask.type = ProCheckProxy.getSubtaskType(this.curSubtask.data);
|
if (this.proAddOrUpdDialogVisible) {
|
this.proAddOrUpdDialogVisible = false;
|
}
|
this.refreshCurrSubtask(refresh);
|
},
|
// 刷新当前选中子任务
|
refreshCurrSubtask(refresh) {
|
this.sideLoading = false;
|
setTimeout(() => {
|
this.mainLoading = true;
|
problemApi
|
.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;
|
});
|
}, 500);
|
},
|
// 问题审核完成后,更新左侧列表对应子任务状态
|
handleProblemCheck() {
|
const status = ProCheckProxy.calProStatus(this.curProList);
|
this.curSubtask.data.proNum = status.proNum;
|
this.curSubtask.data.proCheckedNum = status.proCheckedNum;
|
this.curSubtask.data.changeNum = status.changeNum;
|
this.curSubtask.data.changeCheckedNum = status.changeCheckedNum;
|
this.curSubtask.type = ProCheckProxy.getSubtaskType(this.curSubtask.data);
|
}
|
},
|
mounted() {}
|
};
|
</script>
|
|
<style scoped>
|
.scrollbar-outer {
|
height: calc(100vh - 60px * 2 - 24px);
|
background-color: aliceblue;
|
}
|
|
.scrollbar-inner {
|
height: calc(100vh - 60px * 2 - 20px * 2 - var(--height-toolbar));
|
}
|
|
.toolbar-sticky {
|
position: sticky;
|
z-index: 2;
|
top: 0;
|
}
|
</style>
|