perf: 完成任务时任务暂时继续显示,直到路由发生改变

This commit is contained in:
kuaifan 2022-03-06 13:57:56 +08:00
parent e969b5b7e4
commit b3e9b1c2be
5 changed files with 72 additions and 40 deletions

View File

@ -107,10 +107,12 @@ export default {
return task.owner; return task.owner;
} }
let array = cacheTasks.filter(task => filterTask(task)); let array = cacheTasks.filter(task => filterTask(task));
let tmps = taskCompleteTemps.filter(task => filterTask(task, false)); if (taskCompleteTemps.length > 0) {
if (tmps.length > 0) { let tmps = cacheTasks.filter(task => taskCompleteTemps.includes(task.id) && filterTask(task, false));
array = $A.cloneJSON(array) if (tmps.length > 0) {
array.push(...tmps); array = $A.cloneJSON(array)
array.push(...tmps);
}
} }
return this.transforTasks(array).map(data => { return this.transforTasks(array).map(data => {
const isAllday = $A.rightExists(data.start_at, "00:00:00") && $A.rightExists(data.end_at, "23:59:59") const isAllday = $A.rightExists(data.start_at, "00:00:00") && $A.rightExists(data.end_at, "23:59:59")

View File

@ -640,10 +640,12 @@ export default {
myList() { myList() {
const {allTask, taskCompleteTemps, sortField, sortType} = this; const {allTask, taskCompleteTemps, sortField, sortType} = this;
let array = allTask.filter(task => this.myFilter(task)); let array = allTask.filter(task => this.myFilter(task));
let tmps = taskCompleteTemps.filter(task => this.myFilter(task, false)); if (taskCompleteTemps.length > 0) {
if (tmps.length > 0) { let tmps = allTask.filter(task => taskCompleteTemps.includes(task.id) && this.myFilter(task, false));
array = $A.cloneJSON(array) if (tmps.length > 0) {
array.push(...tmps); array = $A.cloneJSON(array)
array.push(...tmps);
}
} }
return array.sort((a, b) => { return array.sort((a, b) => {
if (sortType == 'asc') { if (sortType == 'asc') {
@ -663,10 +665,12 @@ export default {
helpList() { helpList() {
const {allTask, taskCompleteTemps, sortField, sortType} = this; const {allTask, taskCompleteTemps, sortField, sortType} = this;
let array = allTask.filter(task => this.helpFilter(task)); let array = allTask.filter(task => this.helpFilter(task));
let tmps = taskCompleteTemps.filter(task => this.helpFilter(task, false)); if (taskCompleteTemps.length > 0) {
if (tmps.length > 0) { let tmps = allTask.filter(task => taskCompleteTemps.includes(task.id) && this.helpFilter(task, false));
array = $A.cloneJSON(array) if (tmps.length > 0) {
array.push(...tmps); array = $A.cloneJSON(array)
array.push(...tmps);
}
} }
return array.sort((a, b) => { return array.sort((a, b) => {
if (sortType == 'asc') { if (sortType == 'asc') {

View File

@ -157,39 +157,71 @@ export default {
}, },
dropTask(command) { 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 ($A.isJson(command)) {
if (command.name) { if (command.name) {
//
this.updateTask({ this.updateTask({
color: command.color color: command.color
}).catch(() => {}) }).catch(() => {})
} }
return; return;
} }
//
if ($A.leftExists(command, 'turn::')) { if ($A.leftExists(command, 'turn::')) {
//
let flow_item_id = $A.leftDelete(command, 'turn::'); let flow_item_id = $A.leftDelete(command, 'turn::');
if (flow_item_id == this.task.flow_item_id) return; 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({ this.updateTask({
flow_item_id 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; return;
} }
const cacheTask = this.task; //
switch (command) { switch (command) {
case 'complete': case 'complete':
if (this.task.complete_at) { if (this.task.complete_at) {
return; return;
} }
if (this.updateBefore) { if (this.updateBefore) {
this.$store.dispatch("saveTaskCompleteTemp", cacheTask) completeTemp(true)
} }
this.updateTask({ this.updateTask({
complete_at: $A.formatDate("Y-m-d H:i:s") complete_at: $A.formatDate("Y-m-d H:i:s")
}).then(() => { }).then(() => {
this.$store.dispatch("saveTaskCompleteTemp", cacheTask) completeTemp(true)
}).catch(() => { }).catch(() => {
this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id) completeTemp(false)
}) })
break; break;
@ -198,14 +230,14 @@ export default {
return; return;
} }
if (this.updateBefore) { if (this.updateBefore) {
this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id) completeTemp(false)
} }
this.updateTask({ this.updateTask({
complete_at: false complete_at: false
}).then(() => { }).then(() => {
this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id) completeTemp(false)
}).catch(() => { }).catch(() => {
this.$store.dispatch("saveTaskCompleteTemp", cacheTask) completeTemp(true)
}) })
break; break;

View File

@ -1737,16 +1737,11 @@ export default {
/** /**
* 保存完成任务临时表 * 保存完成任务临时表
* @param state * @param state
* @param data * @param task_id
*/ */
saveTaskCompleteTemp({state}, data) { saveTaskCompleteTemp({state}, task_id) {
if ($A.isJson(data)) { if (/^\d+$/.test(task_id) && !state.taskCompleteTemps.includes(task_id)) {
let index = state.taskCompleteTemps.findIndex(({id}) => id == data.id); state.taskCompleteTemps.push(task_id)
if (index > -1) {
state.taskCompleteTemps.splice(index, 1, data);
} else {
state.taskCompleteTemps.push(data);
}
} }
}, },
@ -1758,11 +1753,8 @@ export default {
forgetTaskCompleteTemp({state}, task_id) { forgetTaskCompleteTemp({state}, task_id) {
if (task_id === true) { if (task_id === true) {
state.taskCompleteTemps = []; state.taskCompleteTemps = [];
return; } else if (/^\d+$/.test(task_id)) {
} state.taskCompleteTemps = state.taskCompleteTemps.filter(id => id != task_id);
let index = state.taskCompleteTemps.findIndex(({id}) => id == task_id);
if (index > -1) {
state.taskCompleteTemps.splice(index, 1);
} }
}, },

View File

@ -128,10 +128,12 @@ export default {
return task.owner; return task.owner;
} }
let array = state.cacheTasks.filter(task => filterTask(task)); let array = state.cacheTasks.filter(task => filterTask(task));
let tmps = state.taskCompleteTemps.filter(task => filterTask(task, false)); if (state.taskCompleteTemps.length > 0) {
if (tmps.length > 0) { let tmps = state.cacheTasks.filter(task => state.taskCompleteTemps.includes(task.id) && filterTask(task, false));
array = $A.cloneJSON(array) if (tmps.length > 0) {
array.push(...tmps); array = $A.cloneJSON(array)
array.push(...tmps);
}
} }
const todayTasks = array.filter(task => { const todayTasks = array.filter(task => {
const start = $A.Date(task.start_at), const start = $A.Date(task.start_at),