| | |
| | | <template #header> |
| | | <SearchBar @on-submit="search"> |
| | | <template #summary> |
| | | <CompSubTaskStatistic :subtasks="subtasks" /> |
| | | <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> |
| | | <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" |
| | | @check="handleProblemCheck" |
| | | ></CompProblemCard> |
| | | <el-scrollbar> |
| | | <ToolBar |
| | | :title="curSubtask.title" |
| | | :descriptions="proStatus" |
| | | :buttons="buttons" |
| | | :loading="mainLoading" |
| | | ></ToolBar> |
| | | <el-scrollbar |
| | | v-if="curProList.length > 0" |
| | | class="scrollbar-inner" |
| | | 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> |
| | | </el-scrollbar> |
| | | <el-empty v-else description="暂无问题" v-loading="mainLoading" /> |
| | | </el-scrollbar> |
| | | <el-empty v-else description="暂无记录" v-loading="mainLoading" /> |
| | | </template> |
| | | </BaseContentLayout> |
| | | <CompProblemAddOrUpd |
| | |
| | | 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 |
| | | CompDeviceShowTest, |
| | | SceneEditDialog |
| | | }, |
| | | data() { |
| | | return { |
| | | // 设备图 |
| | | // 设备图对话框 |
| | | deviceShowDialog: false, |
| | | // 任意图 |
| | | // 任意图对话框 |
| | | anyPhotoDialog: false, |
| | | // 新增问题 |
| | | // 新增问题对话框 |
| | | proAddOrUpdDialogVisible: false, |
| | | // 基本信息对话框 |
| | | sceneInfoDialog: false, |
| | | //左侧菜单栏加载状态 |
| | | sideLoading: false, |
| | | //右侧内容栏加载状态 |
| | | mainLoading: false, |
| | | // 总任务 |
| | | topTask: {}, |
| | | // 场景类型id |
| | | sceneTypeId: undefined, |
| | | // 总任务巡查计划清单 |
| | | curMonitorObjList: [], |
| | | //子任务列表 |
| | | subtasks: [], |
| | | //当前选中的任务 |
| | |
| | | //操作按钮 |
| | | buttons: [ |
| | | { |
| | | name: '新增问题', |
| | | name: '场景信息', |
| | | color: 'success', |
| | | // color: 'primary', |
| | | click: () => { |
| | | this.sceneInfoDialog = true; |
| | | } |
| | | }, |
| | | { |
| | | name: '新增问题', |
| | | // color: 'success', |
| | | color: 'primary', |
| | | click: () => { |
| | | this.proAddOrUpdDialogVisible = true; |
| | | } |
| | | }, |
| | | { |
| | | name: '场景图片', |
| | | color: 'warning', |
| | | // color: 'warning', |
| | | color: 'primary', |
| | | click: () => { |
| | | this.anyPhotoDialog = true; |
| | | } |
| | | }, |
| | | { |
| | | name: '设施设备', |
| | | color: 'info', |
| | | color: 'primary', |
| | | click: () => { |
| | | this.openDeviceShowDialog(); |
| | | } |
| | |
| | | //问题状态 |
| | | 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: { |
| | |
| | | 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 = this.getSubtaskType(s); |
| | | const t = ProCheckProxy.getSubtaskType(s); |
| | | list.push({ |
| | | status: s.subtask.status, |
| | | type: t, |
| | | title: s.stName, |
| | | categoly: s.stPlanTime.split('T')[0], |
| | |
| | | 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; |
| | | taskApi.fetchMonitorObjectVersion(param.topTaskId).then((res) => { |
| | | this.curMonitorObjList = res; |
| | | }); |
| | | }, |
| | | //点击左侧菜单任务事件 |
| | | chooseSubtask(s) { |
| | |
| | | this.sideLoading = false; |
| | | this.mainLoading = true; |
| | | // const controller = new AbortController(); |
| | | taskApi |
| | | problemApi |
| | | .getProBySubtask(s.data.stGuid) |
| | | .then((res) => { |
| | | this.curProList = res; |
| | |
| | | this.mainLoading = false; |
| | | }); |
| | | }, |
| | | onAddProCanceled() { |
| | | this.proAddOrUpdDialogVisible = false; |
| | | }, |
| | | onAddProCanceled() {}, |
| | | // 问题卡片组件主动发起刷新父组件数据 |
| | | updateSubtask(refresh = false) { |
| | | this.curSubtask.data.proCheckedNum++; |
| | | this.curSubtask.type = this.getSubtaskType(this.curSubtask.data); |
| | | this.curSubtask.type = ProCheckProxy.getSubtaskType(this.curSubtask.data); |
| | | if (this.proAddOrUpdDialogVisible) { |
| | | this.proAddOrUpdDialogVisible = false; |
| | | } |
| | |
| | | // 刷新当前选中子任务 |
| | | refreshCurrSubtask(refresh) { |
| | | this.sideLoading = false; |
| | | // this.mainLoading = true; |
| | | setTimeout(() => { |
| | | taskApi |
| | | this.mainLoading = true; |
| | | problemApi |
| | | .getProBySubtask(this.curSubtask.data.stGuid) |
| | | .then((res) => { |
| | | if (refresh) { |
| | |
| | | // this.curSubtask = s; |
| | | }) |
| | | .finally(() => { |
| | | // this.mainLoading = false; |
| | | this.mainLoading = false; |
| | | }); |
| | | }, 150); |
| | | }, 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 = this.getSubtaskType(this.curSubtask.data) |
| | | 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> |
| | | .el-scrollbar { |
| | | .scrollbar-outer { |
| | | height: calc(100vh - 60px * 2 - 24px); |
| | | background-color: aliceblue; |
| | | } |
| | | |
| | | .scrollbar-inner { |
| | | height: calc(100vh - 60px * 2 - 20px * 2 - var(--height-toolbar)); |
| | | } |
| | | </style> |