perf: 完成任务暂时继续显示在我的列表
This commit is contained in:
parent
01a1e34e99
commit
e5a1e58159
@ -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("请设置服务器")
|
||||
}
|
||||
|
@ -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)
|
||||
},
|
||||
|
@ -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) {
|
||||
|
@ -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']),
|
||||
|
||||
|
@ -21,6 +21,10 @@ export default {
|
||||
this.project_id = this.$route.params.id;
|
||||
},
|
||||
|
||||
deactivated() {
|
||||
this.$store.dispatch("forgetTaskCompleteTemp", true);
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapState(['cacheProjects']),
|
||||
...mapGetters(['projectParameter']),
|
||||
|
35
resources/assets/js/store/actions.js
vendored
35
resources/assets/js/store/actions.js
vendored
@ -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);
|
||||
}
|
||||
},
|
||||
|
||||
/** *****************************************************************************************/
|
||||
/** ************************************** 会话 **********************************************/
|
||||
/** *****************************************************************************************/
|
||||
|
9
resources/assets/js/store/getters.js
vendored
9
resources/assets/js/store/getters.js
vendored
@ -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;
|
||||
}
|
||||
|
1
resources/assets/js/store/state.js
vendored
1
resources/assets/js/store/state.js
vendored
@ -64,6 +64,7 @@ state.projectId = 0;
|
||||
state.projectTotal = 0;
|
||||
state.projectLoad = 0;
|
||||
state.taskId = 0;
|
||||
state.taskCompleteTemps = [];
|
||||
state.taskContents = [];
|
||||
state.taskFiles = [];
|
||||
state.taskLogs = [];
|
||||
|
Loading…
x
Reference in New Issue
Block a user