perf: 完成任务暂时继续显示在我的列表

This commit is contained in:
kuaifan 2022-01-11 12:13:06 +08:00
parent 01a1e34e99
commit e5a1e58159
8 changed files with 124 additions and 58 deletions

View File

@ -10,7 +10,7 @@
<div v-else class="login-subtitle">{{$L('输入您的凭证以访问您的帐户。')}}</div>
<div class="login-input">
<Input v-if="$Electron && cacheServerUrl" :value="cacheServerUrl" prefix="ios-globe-outline" size="large" readonly clearable @on-clear="clearServerUrl"/>
<Input v-if="$Electron && cacheServerUrl" :value="$A.getDomain(cacheServerUrl)" prefix="ios-globe-outline" size="large" readonly clearable @on-clear="clearServerUrl"/>
<Input v-model="email" prefix="ios-mail-outline" :placeholder="$L('输入您的电子邮件')" size="large" @on-enter="onLogin" @on-blur="onBlur" />
<Input v-model="password" prefix="ios-lock-outline" :placeholder="$L('输入您的密码')" type="password" size="large" @on-enter="onLogin" />
@ -185,7 +185,7 @@ export default {
chackServerUrl(tip) {
return new Promise((resolve, reject) => {
if (this.isNotServer()) {
if (this.$Electron && this.isNotServer()) {
if (tip === true) {
$A.messageWarning("请设置服务器")
}

View File

@ -530,6 +530,8 @@ export default {
'projectLoad',
'cacheTasks',
'cacheColumns',
'taskCompleteTemps',
]),
...mapGetters(['projectData', 'projectParameter', 'transforTasks']),
@ -607,23 +609,12 @@ export default {
},
myList() {
const {projectId, cacheTasks, searchText, sortField, sortType} = this;
const array = cacheTasks.filter((task) => {
if (task.project_id != projectId) {
return false;
}
if (!this.projectParameter('completedTask')) {
if (task.complete_at) {
return false;
}
}
if (searchText) {
if (!$A.strExists(task.name, searchText) && !$A.strExists(task.desc, searchText)) {
return false;
}
}
return task.owner;
});
const {cacheTasks, taskCompleteTemps, sortField, sortType} = this;
let array = cacheTasks.filter(task => this.myFilter(task));
if (taskCompleteTemps.length > 0) {
array = $A.cloneJSON(array)
array.push(...taskCompleteTemps.filter(task => this.myFilter(task, false)));
}
return array.sort((a, b) => {
if (sortType == 'asc') {
[a, b] = [b, a];
@ -640,23 +631,12 @@ export default {
},
helpList() {
const {projectId, cacheTasks, searchText, userId, sortField, sortType} = this;
const array = cacheTasks.filter((task) => {
if (task.project_id != projectId || task.parent_id > 0) {
return false;
}
if (!this.projectParameter('completedTask')) {
if (task.complete_at) {
return false;
}
}
if (searchText) {
if (!$A.strExists(task.name, searchText) && !$A.strExists(task.desc, searchText)) {
return false;
}
}
return task.task_user && task.task_user.find(({userid, owner}) => userid == userId && owner == 0);
});
const {cacheTasks, taskCompleteTemps, sortField, sortType} = this;
let array = cacheTasks.filter(task => this.helpFilter(task));
if (taskCompleteTemps.length > 0) {
array = $A.cloneJSON(array)
array.push(...taskCompleteTemps.filter(task => this.helpFilter(task, false)));
}
return array.sort((a, b) => {
if (sortType == 'asc') {
[a, b] = [b, a];
@ -1176,9 +1156,44 @@ export default {
},
toggleCompleted() {
this.$store.dispatch("forgetTaskCompleteTemp", true);
this.$store.dispatch('toggleProjectParameter', 'completedTask');
},
myFilter(task, chackCompleted = true) {
if (task.project_id != this.projectId) {
return false;
}
if (!this.projectParameter('completedTask') && chackCompleted === true) {
if (task.complete_at) {
return false;
}
}
if (this.searchText) {
if (!$A.strExists(task.name, this.searchText) && !$A.strExists(task.desc, this.searchText)) {
return false;
}
}
return task.owner;
},
helpFilter(task, chackCompleted = true) {
if (task.project_id != this.projectId || task.parent_id > 0) {
return false;
}
if (!this.projectParameter('completedTask') && chackCompleted === true) {
if (task.complete_at) {
return false;
}
}
if (this.searchText) {
if (!$A.strExists(task.name, this.searchText) && !$A.strExists(task.desc, this.searchText)) {
return false;
}
}
return task.task_user && task.task_user.find(({userid, owner}) => userid == this.userId && owner == 0);
},
expiresFormat(date) {
return $A.countDownFormat(date, this.nowTime)
},

View File

@ -171,11 +171,14 @@ export default {
})
return;
}
const cacheTask = this.task;
switch (command) {
case 'complete':
if (this.task.complete_at) return;
this.updateTask({
complete_at: $A.formatDate("Y-m-d H:i:s")
}).then(() => {
this.$store.dispatch("saveTaskCompleteTemp", cacheTask)
})
break;
@ -183,6 +186,8 @@ export default {
if (!this.task.complete_at) return;
this.updateTask({
complete_at: false
}).then(() => {
this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id)
})
break;
@ -200,20 +205,23 @@ export default {
},
updateTask(updata) {
if (this.loadIng) {
return;
}
//
Object.keys(updata).forEach(key => this.$set(this.task, key, updata[key]));
//
this.$store.dispatch("taskUpdate", Object.assign(updata, {
task_id: this.task.id,
})).then(({msg}) => {
$A.messageSuccess(msg);
}).catch(({msg}) => {
$A.modalError(msg);
this.$store.dispatch("getTaskOne", this.task.id);
});
return new Promise(resolve => {
if (this.loadIng) {
return;
}
//
Object.keys(updata).forEach(key => this.$set(this.task, key, updata[key]));
//
this.$store.dispatch("taskUpdate", Object.assign(updata, {
task_id: this.task.id,
})).then(({msg}) => {
$A.messageSuccess(msg);
resolve()
}).catch(({msg}) => {
$A.modalError(msg);
this.$store.dispatch("getTaskOne", this.task.id);
});
})
},
archivedOrRemoveTask(type) {

View File

@ -31,8 +31,8 @@
<div class="dashboard-title">{{title}}</div>
<ul class="dashboard-list overlay-y">
<li
v-for="item in list"
:key="item.id"
v-for="(item, index) in list"
:key="index"
:class="{complete: item.complete_at}"
:style="item.color ? {backgroundColor: item.color} : {}"
@click="openTask(item)">
@ -103,6 +103,10 @@ export default {
this.$store.dispatch("getTaskForDashboard");
},
deactivated() {
this.$store.dispatch("forgetTaskCompleteTemp", true);
},
computed: {
...mapState(['userInfo', 'cacheProjects', 'taskId']),

View File

@ -21,6 +21,10 @@ export default {
this.project_id = this.$route.params.id;
},
deactivated() {
this.$store.dispatch("forgetTaskCompleteTemp", true);
},
computed: {
...mapState(['cacheProjects']),
...mapGetters(['projectParameter']),

View File

@ -949,9 +949,6 @@ export default {
reject({msg: 'Parameter error'});
return;
}
if (state.cacheTasks.length == 0 && state.cacheTasks.length > 0) {
state.cacheTasks = state.cacheTasks;
}
if (data.project_id) {
state.projectLoad++;
}
@ -1593,6 +1590,38 @@ export default {
});
},
/**
* 保存完成任务临时表
* @param state
* @param data
*/
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);
}
}
},
/**
* 忘记完成任务临时表
* @param state
* @param task_id 任务ID true标识忘记全部
*/
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);
}
},
/** *****************************************************************************************/
/** ************************************** 会话 **********************************************/
/** *****************************************************************************************/

View File

@ -132,7 +132,12 @@ export default {
const todayStart = $A.Date($A.formatDate("Y-m-d 00:00:00")),
todayEnd = $A.Date($A.formatDate("Y-m-d 23:59:59")),
todayNow = $A.Date($A.formatDate("Y-m-d H:i:s"));
const todayTasks = getters.ownerTasks.filter(task => {
let {ownerTasks} = getters;
if (state.taskCompleteTemps.length > 0) {
ownerTasks = $A.cloneJSON(ownerTasks)
ownerTasks.push(...state.taskCompleteTemps);
}
const todayTasks = ownerTasks.filter(task => {
if (!task.end_at) {
return false;
}
@ -140,7 +145,7 @@ export default {
end = $A.Date(task.end_at);
return (start <= todayStart && todayStart <= end) || (start <= todayEnd && todayEnd <= end) || (start > todayStart && todayEnd > end);
})
const overdueTasks = getters.ownerTasks.filter(task => {
const overdueTasks = ownerTasks.filter(task => {
if (!task.end_at) {
return false;
}

View File

@ -64,6 +64,7 @@ state.projectId = 0;
state.projectTotal = 0;
state.projectLoad = 0;
state.taskId = 0;
state.taskCompleteTemps = [];
state.taskContents = [];
state.taskFiles = [];
state.taskLogs = [];