From f19e5267cc23b1c714dc746239864f33ed715dd9 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 05 十二月 2025 17:55:02 +0800
Subject: [PATCH] 完成地图制作任务功能初版
---
src/views/fysp/task/TaskManage.vue | 303 ++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 265 insertions(+), 38 deletions(-)
diff --git a/src/views/fysp/task/TaskManage.vue b/src/views/fysp/task/TaskManage.vue
index 4239a94..3274b74 100644
--- a/src/views/fysp/task/TaskManage.vue
+++ b/src/views/fysp/task/TaskManage.vue
@@ -1,9 +1,8 @@
<template>
<BaseContentLayout>
<template #header>
- <FYSearchBar @search="search">
+ <!-- <FYSearchBar @search="search">
<template #options>
- <!-- 鍖哄幙 -->
<FYOptionLocation
:allOption="true"
:level="3"
@@ -11,13 +10,14 @@
v-model:value="formSearch.locations"
></FYOptionLocation>
</template>
- <!-- <template #buttons>
- <slot name="buttons"></slot>
- </template> -->
- </FYSearchBar>
+ </FYSearchBar> -->
</template>
<template #aside>
- <SideList :items="tasks" :loading="sideLoading" @item-click="chooseTask"></SideList>
+ <SideList
+ :items="tasks"
+ :loading="sideLoading"
+ @item-click="chooseTask"
+ ></SideList>
</template>
<template #main>
<ToolBar
@@ -31,37 +31,126 @@
class="el-scrollbar"
v-loading="mainLoading"
>
- <el-row justify="space-between">
- <div><el-text>鐩戠璁″垝</el-text></div>
- <el-button type="warning" size="small" @click="editPlan">璁″垝璋冩暣</el-button>
- <CompMonitorPlan :task="curTask.data"></CompMonitorPlan>
+ <!-- <div><el-text>鐩戠璁″垝</el-text></div>
+ <el-button type="warning" size="small" @click="editPlan"
+ >璁″垝璋冩暣</el-button
+ > -->
+ <!-- <el-tabs model-value="first">
+ <el-tab-pane label="宸℃煡璁″垝" name="first"> -->
+ <el-row justify="space-between" style="padding: 16px 0px 16px 16px">
+ <el-text size="large">宸℃煡璁″垝</el-text>
+ <!-- <el-button type="primary" size="small" @click="sceneMapDialog = true">
+ 杩涘叆鍦烘櫙鍦板浘<el-icon class="el-icon--right"><Right /></el-icon>
+ </el-button> -->
</el-row>
+ <div class="plan-container">
+ <el-row>
+ <el-col :span="curSubTaskList ? 16 : 24">
+ <CompMonitorPlan
+ :loading="daytaskLoading"
+ ref="planRef"
+ :task="curTask.data"
+ :day-task-list="curDayTaskList"
+ @date-change="onDateChange"
+ ></CompMonitorPlan>
+ </el-col>
+ <el-col v-if="curSubTaskList" :span="8">
+ <!-- <el-affix target=".plan-container" :offset="140"> -->
+ <CompSubTaskList
+ create
+ v-model="curSubTaskList"
+ :date="curDay"
+ :loading="subTaskLoading"
+ :create-loading="daytaskCreateLoading"
+ height="66vh"
+ @openMap="sceneMapDialog = true"
+ @add="handleAddSubtask"
+ @submit="onSubtaskUpdate"
+ @remove="onSubtaskUpdate"
+ ></CompSubTaskList>
+ <!-- </el-affix> -->
+ </el-col>
+ </el-row>
+ </div>
+ <!-- </el-tab-pane>
+ <el-tab-pane label="鍦烘櫙鍦板浘" name="second"> -->
+ <!-- <CompTaskMap :plans="curMonitorObjList"></CompTaskMap> -->
+ <!-- </el-tab-pane>
+ </el-tabs> -->
<el-divider></el-divider>
<el-row justify="space-between">
<div><el-text>鐩戠鍦烘櫙</el-text></div>
- <el-button type="warning" size="small" @click="editTask">鍦烘櫙璋冩暣</el-button>
+ <el-button type="warning" size="small" @click="editTask"
+ >鍦烘櫙璋冩暣</el-button
+ >
</el-row>
<CompMonitorObj :data="curMonitorObjList"></CompMonitorObj>
- <!-- <div><el-text>鐩戠鍦烘櫙</el-text></div>
- <div>
- <el-space wrap>
- <ItemMonitorObj
- v-for="item in curMonitorObjList"
- :key="item.movid"
- :item="item"
- ></ItemMonitorObj>
- </el-space>
- </div> -->
</el-scrollbar>
- <el-empty v-else description="鏆傛棤璁板綍" v-loading="mainLoading" />
+ <div v-else>
+ <el-empty description="鏆傛棤璁板綍" v-loading="mainLoading" />
+ <el-row v-if="!mainLoading" justify="center">
+ <el-button
+ type="primary"
+ size="default"
+ @click="navToTaskCreate(curTask.data)"
+ >娣诲姞鐩戠鍦烘櫙</el-button
+ >
+ </el-row>
+ </div>
</template>
</BaseContentLayout>
+ <el-drawer
+ v-model="subTaskDrawer"
+ title="鏃ヨ鍒掔鐞�"
+ direction="btt"
+ size="96%"
+ >
+ <CompDayTask
+ :day-task="curDayTask"
+ :mObjList="curMonitorObjList"
+ @submit="onSubtaskUpdate"
+ ></CompDayTask>
+ </el-drawer>
+ <el-dialog
+ v-model="topTaskAddVisible"
+ width="600"
+ title="涓�閿垱寤烘�讳换鍔�"
+ destroy-on-close
+ :close-on-click-modal="false"
+ :close-on-press-escape="false"
+ :show-close="false"
+ >
+ <CompTaskEdit
+ @submit="navToTaskCreate"
+ @cancel="topTaskAddVisible = false"
+ ></CompTaskEdit>
+ </el-dialog>
+ <el-drawer
+ v-model="sceneMapDialog"
+ title="鍦烘櫙鍦板浘"
+ direction="btt"
+ size="100%"
+ body-class="el-drawer__custom"
+ >
+ <CompTaskMap
+ :plans="curMonitorObjList"
+ :day-task="curDayTask"
+ @submit="onSubtaskUpdate"
+ ></CompTaskMap>
+ </el-drawer>
</template>
<script>
+import { unref } from 'vue';
+import { useCloned } from '@vueuse/core';
+import dayjs from 'dayjs';
import taskApi from '@/api/fysp/taskApi';
import CompMonitorObj from './components/CompMonitorObj.vue';
import CompMonitorPlan from './components/CompMonitorPlan.vue';
+import CompDayTask from './components/CompDayTask.vue';
+import CompTaskMap from './components/CompTaskMap.vue';
+import CompTaskEdit from './components/CompTaskEdit.vue';
+import CompSubTaskList from './components/CompSubTaskList.vue';
export default {
beforeRouteEnter(to, from, next) {
// 鍦ㄦ覆鏌撹缁勪欢鐨勫搴旇矾鐢辫楠岃瘉鍓嶈皟鐢�
@@ -70,10 +159,19 @@
next((vm) => {
if (from.name == 'monitorObjEdit' && vm.task) {
vm.chooseTask(vm.task);
+ } else if (from.name == 'monitorTaskCreate') {
+ vm.search();
}
});
},
- components: { CompMonitorObj, CompMonitorPlan },
+ components: {
+ CompMonitorObj,
+ CompMonitorPlan,
+ CompDayTask,
+ CompTaskMap,
+ CompTaskEdit,
+ CompSubTaskList
+ },
data() {
return {
formSearch: {
@@ -94,26 +192,59 @@
showMonitorObjList: [],
//褰撳墠閫変腑鐨勪换鍔�
curTask: {},
+ //褰撳墠閫変腑鐨勬棩浠诲姟
+ curDayTaskList: [],
+ daytaskLoading: false,
//鎿嶄綔鎸夐挳
buttons: [
- // {
- // name: '璁″垝璋冩暣',
- // color: 'success'
- // },
+ {
+ name: '涓�閿垱寤烘�讳换鍔�',
+ color: 'success',
+ click: () => {
+ this.topTaskAddVisible = true;
+ }
+ }
// {
// name: '鍦烘櫙璋冩暣',
// color: 'warning'
// }
- ]
+ ],
+ // 瀛愪换鍔$紪杈戝脊鍑烘
+ subTaskDrawer: false,
+ // 褰撳墠閫夋嫨鐨勬棩浠诲姟
+ curDayTask: {},
+ curDay: undefined,
+ daytaskCreateLoading: false,
+ // 褰撳墠閫夋嫨鐨勬棩浠诲姟涓嬬殑瀛愪换鍔�
+ curSubTaskList: undefined,
+ subTaskLoading: false,
+ // 鎬讳换鍔℃柊澧炲脊鍑烘
+ topTaskAddVisible: false,
+ // 鍦烘櫙鍦板浘寮瑰嚭妗�
+ sceneMapDialog: false
+ };
+ },
+ provide() {
+ return {
+ topTask: this.curTask
};
},
computed: {
// 鎬讳换鍔$姸鎬佺粺璁�
taskStatus() {
+ let total = 0,
+ inspected = 0;
+ this.curMonitorObjList.forEach((obj) => {
+ total += parseInt(obj.monitornum);
+ inspected += obj.extension1 ? parseInt(obj.extension1) : 0;
+ });
return [
- { name: '鍦烘櫙鏁�', value: 100 },
- { name: '鏈贰鏌�', value: 0 },
- { name: '宸插贰鏌�', value: 0 }
+ { name: '鍦烘櫙鏁�', value: total },
+ {
+ name: '鏈贰鏌�',
+ value: total - inspected > 0 ? total - inspected : 0
+ },
+ { name: '宸插贰鏌�', value: inspected }
];
}
},
@@ -148,10 +279,10 @@
type = 0;
break;
case '姝e湪鎵ц':
- type = 1;
+ type = 5;
break;
case '宸茬粨鏉�':
- type = 2;
+ type = 6;
break;
default:
type = 0;
@@ -163,13 +294,29 @@
this.task = task;
this.sideLoading = false;
this.mainLoading = true;
+ this.curSubTaskList = undefined;
+ this.curTask = task;
taskApi
.fetchMonitorObjectVersion(task.data.tguid)
.then((res) => {
this.curMonitorObjList = res;
- this.curTask = task;
})
.finally(() => {
+ this.mainLoading = false;
+ this.fetchDayTasks();
+ });
+ },
+ fetchDayTasks() {
+ // 鑾峰彇鏃ヤ换鍔$粺璁′俊鎭�
+ this.dayTaskLoading = true;
+ this.mainLoading = true;
+ return taskApi
+ .fetchDayTasks(this.curTask.data.tguid)
+ .then((res) => {
+ this.curDayTaskList = res;
+ })
+ .finally(() => {
+ this.dayTaskLoading = false;
this.mainLoading = false;
});
},
@@ -182,14 +329,84 @@
}
});
},
- editPlan(){
+ editPlan() {
this.$router.push({
name: 'monitorPlanEdit',
query: {
data: encodeURIComponent(JSON.stringify(this.curMonitorObjList)),
- task: encodeURIComponent(JSON.stringify(this.curTask.data)),
+ task: encodeURIComponent(JSON.stringify(this.curTask.data))
}
});
+ },
+ onDateChange(dayTask, day) {
+ this.curDay = day;
+ if (dayTask) {
+ this.subTaskLoading = true;
+ // this.subTaskDrawer = true;
+ this.curDayTask = dayTask;
+ taskApi
+ .fetchSubtaskByDayTask(dayTask.guid)
+ .then((res) => {
+ this.curSubTaskList = res;
+ })
+ .finally(() => (this.subTaskLoading = false));
+ } else {
+ this.curSubTaskList = [];
+ this.curDayTask = {};
+ }
+ },
+ navToTaskCreate(value) {
+ this.topTaskAddVisible = false;
+ this.$router.push({
+ name: 'monitorTaskCreate',
+ query: {
+ task: encodeURIComponent(JSON.stringify(value))
+ }
+ });
+ },
+ onSubtaskUpdate() {
+ // this.subTaskLoading = true;
+ // this.$refs.planRef
+ // .fetchDayTasks()
+ // .finally(() => (this.subTaskLoading = false));
+ this.fetchDayTasks();
+ },
+ handleAddSubtask() {
+ // 鍒ゆ柇褰撴棩鏄惁鏈夋棩浠诲姟锛岃嫢娌℃湁锛屽厛鍒涘缓鍦ㄨ烦杞瓙浠诲姟鍒涘缓鐣岄潰
+ if (this.curDayTask.guid) {
+ this.subTaskDrawer = true;
+ } else {
+ const _dayTask = useCloned(this.curTask.data).cloned.value;
+ const taskDate = dayjs(this.curDay);
+ _dayTask.tsguid = _dayTask.tguid;
+ _dayTask.tguid = null;
+ _dayTask.levelnum = null;
+ _dayTask.name = `${taskDate.format('YYYY骞碝M鏈圖D鏃�')}${
+ _dayTask.cityname
+ }${_dayTask.districtname}${_dayTask.typename}浠诲姟`;
+ _dayTask.starttime = taskDate.startOf('day').toDate();
+ _dayTask.endtime = taskDate.endOf('day').millisecond(0).toDate();
+ _dayTask.settime = dayjs().toDate();
+ _dayTask.t1stverifytime = dayjs().toDate();
+ _dayTask.runingstatus = '鏈墽琛�';
+ this.daytaskCreateLoading = true;
+ taskApi
+ .putTask(_dayTask)
+ .then((res) => {
+ this.curDayTask = {
+ guid: res.data.tguid,
+ tsGuid: res.data.tsguid,
+ changedTaskNum: 0,
+ check: true,
+ completeTaskNum: 0,
+ date: res.data.starttime,
+ totalTaskNum: 0
+ };
+ this.subTaskDrawer = true;
+ this.onSubtaskUpdate();
+ })
+ .finally(() => (this.daytaskCreateLoading = false));
+ }
}
},
mounted() {
@@ -206,6 +423,16 @@
}
.el-scrollbar {
- height: calc((100vh - 60px * 2 - 20px * 2 - var(--height-toolbar)));
+ height: calc((100vh - 60px - 20px * 2 - var(--height-toolbar)));
+ padding-right: 8px;
+}
+
+.plan-container {
+ /* background-color: aliceblue; */
+}
+</style>
+<style>
+.el-drawer__custom {
+ padding: 0px !important;
}
</style>
--
Gitblit v1.9.3