From 3d6addd2c0817b30bd328605cb048ca9698742a6 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期五, 28 二月 2025 16:50:17 +0800 Subject: [PATCH] 修复新建子任务时,未提前建立日任务的bug --- src/views/fysp/task/TaskManage.vue | 257 ++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 224 insertions(+), 33 deletions(-) diff --git a/src/views/fysp/task/TaskManage.vue b/src/views/fysp/task/TaskManage.vue index 839a8b9..f844b5e 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,32 +31,122 @@ class="el-scrollbar" v-loading="mainLoading" > - <div><el-text>鐩戠璁″垝</el-text></div> + <el-row justify="space-between"> + <!-- <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> + <el-col :span="curSubTaskList ? 16 : 24"> + <CompMonitorPlan + ref="planRef" + :task="curTask.data" + @date-change="onDateChange" + ></CompMonitorPlan> + </el-col> + <el-col v-if="curSubTaskList" :span="8"> + <CompSubTaskList + create + v-model="curSubTaskList" + :loading="subTaskLoading" + :create-loading="daytaskLoading" + height="56vh" + @add="handleAddSubtask" + @submit="handleSubtaskSubmit" + ></CompSubTaskList> + </el-col> + </el-row> + </el-tab-pane> + <!-- <el-tab-pane label="鐩戠鍦板浘" name="second"> + <CompTaskMap></CompTaskMap> + </el-tab-pane> --> + </el-tabs> + </el-row> <el-divider></el-divider> - <el-button type="primary" size="small" @click="editTask">鍦烘櫙璋冩暣</el-button> - <div><el-text>鐩戠鍦烘櫙</el-text></div> + <el-row justify="space-between"> + <div><el-text>鐩戠鍦烘櫙</el-text></div> + <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%" + destroy-on-close + > + <CompDayTask + :day-task="curDayTask" + :mObjList="curMonitorObjList" + @submit="handleSubtaskSubmit" + ></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> </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 { - components: { CompMonitorObj }, + beforeRouteEnter(to, from, next) { + // 鍦ㄦ覆鏌撹缁勪欢鐨勫搴旇矾鐢辫楠岃瘉鍓嶈皟鐢� + // 涓嶈兘鑾峰彇缁勪欢瀹炰緥 `this` 锛� + // 鍥犱负褰撳畧鍗墽琛屾椂锛岀粍浠跺疄渚嬭繕娌¤鍒涘缓锛� + next((vm) => { + if (from.name == 'monitorObjEdit' && vm.task) { + vm.chooseTask(vm.task); + } else if (from.name == 'monitorTaskCreate') { + vm.search(); + } + }); + }, + components: { + CompMonitorObj, + CompMonitorPlan, + CompDayTask, + CompTaskMap, + CompTaskEdit, + CompSubTaskList + }, data() { return { formSearch: { @@ -73,19 +163,40 @@ tasks: [], // 褰撳墠浠诲姟鐨勭洃绠″璞� curMonitorObjList: [], + // 褰撳墠浠诲姟鐨勫睍绀轰腑鐨勭洃绠″璞� + showMonitorObjList: [], //褰撳墠閫変腑鐨勪换鍔� curTask: {}, //鎿嶄綔鎸夐挳 buttons: [ { - name: '璁″垝璋冩暣', - color: 'success' - }, - { - name: '鍦烘櫙璋冩暣', - color: 'warning' + name: '涓�閿垱寤烘�讳换鍔�', + color: 'success', + click: () => { + this.topTaskAddVisible = true; + } } - ] + // { + // name: '鍦烘櫙璋冩暣', + // color: 'warning' + // } + ], + // 瀛愪换鍔$紪杈戝脊鍑烘 + subTaskDrawer: false, + // 褰撳墠閫夋嫨鐨勬棩浠诲姟 + curDayTask: {}, + curDay: undefined, + daytaskLoading: false, + // 褰撳墠閫夋嫨鐨勬棩浠诲姟涓嬬殑瀛愪换鍔� + curSubTaskList: undefined, + subTaskLoading: false, + // 鎬讳换鍔℃柊澧炲脊鍑烘 + topTaskAddVisible: false + }; + }, + provide() { + return { + topTask: this.curTask }; }, computed: { @@ -129,10 +240,10 @@ type = 0; break; case '姝e湪鎵ц': - type = 1; + type = 5; break; case '宸茬粨鏉�': - type = 2; + type = 6; break; default: type = 0; @@ -141,13 +252,15 @@ return type; }, chooseTask(task) { + 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; @@ -161,6 +274,84 @@ task: encodeURIComponent(JSON.stringify(this.curTask.data)) } }); + }, + editPlan() { + this.$router.push({ + name: 'monitorPlanEdit', + query: { + data: encodeURIComponent(JSON.stringify(this.curMonitorObjList)), + 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)) + } + }); + }, + handleSubtaskSubmit() { + this.subTaskLoading = true; + this.$refs.planRef + .fetchDayTasks() + .finally(() => (this.subTaskLoading = false)); + }, + 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.daytaskLoading = 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.handleSubtaskSubmit(); + }) + .finally(() => (this.daytaskLoading = false)); + } } }, mounted() { @@ -177,6 +368,6 @@ } .el-scrollbar { - height: calc((100vh - 60px * 2 - 20px * 2 - var(--height-toolbar))); + height: calc((100vh - 60px - 20px * 2 - var(--height-toolbar))); } </style> -- Gitblit v1.9.3