diff --git a/resources/assets/js/pages/manage/calendar.vue b/resources/assets/js/pages/manage/calendar.vue index b9f07447b..1b4423738 100644 --- a/resources/assets/js/pages/manage/calendar.vue +++ b/resources/assets/js/pages/manage/calendar.vue @@ -107,10 +107,12 @@ export default { return task.owner; } let array = cacheTasks.filter(task => filterTask(task)); - let tmps = taskCompleteTemps.filter(task => filterTask(task, false)); - if (tmps.length > 0) { - array = $A.cloneJSON(array) - array.push(...tmps); + if (taskCompleteTemps.length > 0) { + let tmps = cacheTasks.filter(task => taskCompleteTemps.includes(task.id) && filterTask(task, false)); + if (tmps.length > 0) { + array = $A.cloneJSON(array) + array.push(...tmps); + } } return this.transforTasks(array).map(data => { const isAllday = $A.rightExists(data.start_at, "00:00:00") && $A.rightExists(data.end_at, "23:59:59") diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue index e33f0d512..544b18b3f 100644 --- a/resources/assets/js/pages/manage/components/ProjectList.vue +++ b/resources/assets/js/pages/manage/components/ProjectList.vue @@ -640,10 +640,12 @@ export default { myList() { const {allTask, taskCompleteTemps, sortField, sortType} = this; let array = allTask.filter(task => this.myFilter(task)); - let tmps = taskCompleteTemps.filter(task => this.myFilter(task, false)); - if (tmps.length > 0) { - array = $A.cloneJSON(array) - array.push(...tmps); + if (taskCompleteTemps.length > 0) { + let tmps = allTask.filter(task => taskCompleteTemps.includes(task.id) && this.myFilter(task, false)); + if (tmps.length > 0) { + array = $A.cloneJSON(array) + array.push(...tmps); + } } return array.sort((a, b) => { if (sortType == 'asc') { @@ -663,10 +665,12 @@ export default { helpList() { const {allTask, taskCompleteTemps, sortField, sortType} = this; let array = allTask.filter(task => this.helpFilter(task)); - let tmps = taskCompleteTemps.filter(task => this.helpFilter(task, false)); - if (tmps.length > 0) { - array = $A.cloneJSON(array) - array.push(...tmps); + if (taskCompleteTemps.length > 0) { + let tmps = allTask.filter(task => taskCompleteTemps.includes(task.id) && this.helpFilter(task, false)); + if (tmps.length > 0) { + array = $A.cloneJSON(array) + array.push(...tmps); + } } return array.sort((a, b) => { if (sortType == 'asc') { diff --git a/resources/assets/js/pages/manage/components/TaskMenu.vue b/resources/assets/js/pages/manage/components/TaskMenu.vue index 318cc2c1e..2402168ed 100644 --- a/resources/assets/js/pages/manage/components/TaskMenu.vue +++ b/resources/assets/js/pages/manage/components/TaskMenu.vue @@ -157,39 +157,71 @@ export default { }, dropTask(command) { + const cacheTask = this.task; + const completeTemp = (save) => { + if (save) { + this.$store.dispatch("saveTaskCompleteTemp", cacheTask.id) + } else { + this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id) + } + } + // 修改背景色 if ($A.isJson(command)) { if (command.name) { - // 修改背景色 this.updateTask({ color: command.color }).catch(() => {}) } return; } + // 修改工作流状态 if ($A.leftExists(command, 'turn::')) { - // 修改工作流状态 let flow_item_id = $A.leftDelete(command, 'turn::'); if (flow_item_id == this.task.flow_item_id) return; + // + let currentFlow = this.taskFlowItems.find(({id}) => id == this.flow.flow_item_id) || {}; + let updateFlow = this.taskFlowItems.find(({id}) => id == flow_item_id) || {}; + let isComplete = currentFlow.status !== 'end' && updateFlow.status === 'end'; + let isUnComplete = currentFlow.status === 'end' && updateFlow.status !== 'end'; + if (this.updateBefore) { + if (isComplete) { + completeTemp(true) + } else if (isUnComplete) { + completeTemp(false) + } + } this.updateTask({ flow_item_id - }).catch(() => {}) + }).then(() => { + if (isComplete) { + completeTemp(true) + } else if (isUnComplete) { + completeTemp(false) + } + }).catch(() => { + if (isComplete) { + completeTemp(false) + } else if (isUnComplete) { + completeTemp(true) + } + }) return; } - const cacheTask = this.task; + // 其他操作 switch (command) { case 'complete': if (this.task.complete_at) { return; } if (this.updateBefore) { - this.$store.dispatch("saveTaskCompleteTemp", cacheTask) + completeTemp(true) } this.updateTask({ complete_at: $A.formatDate("Y-m-d H:i:s") }).then(() => { - this.$store.dispatch("saveTaskCompleteTemp", cacheTask) + completeTemp(true) }).catch(() => { - this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id) + completeTemp(false) }) break; @@ -198,14 +230,14 @@ export default { return; } if (this.updateBefore) { - this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id) + completeTemp(false) } this.updateTask({ complete_at: false }).then(() => { - this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id) + completeTemp(false) }).catch(() => { - this.$store.dispatch("saveTaskCompleteTemp", cacheTask) + completeTemp(true) }) break; diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 8db152dd4..a18683757 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1737,16 +1737,11 @@ export default { /** * 保存完成任务临时表 * @param state - * @param data + * @param task_id */ - saveTaskCompleteTemp({state}, data) { - if ($A.isJson(data)) { - let index = state.taskCompleteTemps.findIndex(({id}) => id == data.id); - if (index > -1) { - state.taskCompleteTemps.splice(index, 1, data); - } else { - state.taskCompleteTemps.push(data); - } + saveTaskCompleteTemp({state}, task_id) { + if (/^\d+$/.test(task_id) && !state.taskCompleteTemps.includes(task_id)) { + state.taskCompleteTemps.push(task_id) } }, @@ -1758,11 +1753,8 @@ export default { forgetTaskCompleteTemp({state}, task_id) { if (task_id === true) { state.taskCompleteTemps = []; - return; - } - let index = state.taskCompleteTemps.findIndex(({id}) => id == task_id); - if (index > -1) { - state.taskCompleteTemps.splice(index, 1); + } else if (/^\d+$/.test(task_id)) { + state.taskCompleteTemps = state.taskCompleteTemps.filter(id => id != task_id); } }, diff --git a/resources/assets/js/store/getters.js b/resources/assets/js/store/getters.js index 54fb8a057..67b8b2f68 100644 --- a/resources/assets/js/store/getters.js +++ b/resources/assets/js/store/getters.js @@ -128,10 +128,12 @@ export default { return task.owner; } let array = state.cacheTasks.filter(task => filterTask(task)); - let tmps = state.taskCompleteTemps.filter(task => filterTask(task, false)); - if (tmps.length > 0) { - array = $A.cloneJSON(array) - array.push(...tmps); + if (state.taskCompleteTemps.length > 0) { + let tmps = state.cacheTasks.filter(task => state.taskCompleteTemps.includes(task.id) && filterTask(task, false)); + if (tmps.length > 0) { + array = $A.cloneJSON(array) + array.push(...tmps); + } } const todayTasks = array.filter(task => { const start = $A.Date(task.start_at),