perf: 完成任务暂时继续显示在我的列表
This commit is contained in:
parent
01a1e34e99
commit
e5a1e58159
@ -10,7 +10,7 @@
|
|||||||
<div v-else class="login-subtitle">{{$L('输入您的凭证以访问您的帐户。')}}</div>
|
<div v-else class="login-subtitle">{{$L('输入您的凭证以访问您的帐户。')}}</div>
|
||||||
|
|
||||||
<div class="login-input">
|
<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="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" />
|
<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) {
|
chackServerUrl(tip) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (this.isNotServer()) {
|
if (this.$Electron && this.isNotServer()) {
|
||||||
if (tip === true) {
|
if (tip === true) {
|
||||||
$A.messageWarning("请设置服务器")
|
$A.messageWarning("请设置服务器")
|
||||||
}
|
}
|
||||||
|
@ -530,6 +530,8 @@ export default {
|
|||||||
'projectLoad',
|
'projectLoad',
|
||||||
'cacheTasks',
|
'cacheTasks',
|
||||||
'cacheColumns',
|
'cacheColumns',
|
||||||
|
|
||||||
|
'taskCompleteTemps',
|
||||||
]),
|
]),
|
||||||
|
|
||||||
...mapGetters(['projectData', 'projectParameter', 'transforTasks']),
|
...mapGetters(['projectData', 'projectParameter', 'transforTasks']),
|
||||||
@ -607,23 +609,12 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
myList() {
|
myList() {
|
||||||
const {projectId, cacheTasks, searchText, sortField, sortType} = this;
|
const {cacheTasks, taskCompleteTemps, sortField, sortType} = this;
|
||||||
const array = cacheTasks.filter((task) => {
|
let array = cacheTasks.filter(task => this.myFilter(task));
|
||||||
if (task.project_id != projectId) {
|
if (taskCompleteTemps.length > 0) {
|
||||||
return false;
|
array = $A.cloneJSON(array)
|
||||||
|
array.push(...taskCompleteTemps.filter(task => this.myFilter(task, 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;
|
|
||||||
});
|
|
||||||
return array.sort((a, b) => {
|
return array.sort((a, b) => {
|
||||||
if (sortType == 'asc') {
|
if (sortType == 'asc') {
|
||||||
[a, b] = [b, a];
|
[a, b] = [b, a];
|
||||||
@ -640,23 +631,12 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
helpList() {
|
helpList() {
|
||||||
const {projectId, cacheTasks, searchText, userId, sortField, sortType} = this;
|
const {cacheTasks, taskCompleteTemps, sortField, sortType} = this;
|
||||||
const array = cacheTasks.filter((task) => {
|
let array = cacheTasks.filter(task => this.helpFilter(task));
|
||||||
if (task.project_id != projectId || task.parent_id > 0) {
|
if (taskCompleteTemps.length > 0) {
|
||||||
return false;
|
array = $A.cloneJSON(array)
|
||||||
|
array.push(...taskCompleteTemps.filter(task => this.helpFilter(task, 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);
|
|
||||||
});
|
|
||||||
return array.sort((a, b) => {
|
return array.sort((a, b) => {
|
||||||
if (sortType == 'asc') {
|
if (sortType == 'asc') {
|
||||||
[a, b] = [b, a];
|
[a, b] = [b, a];
|
||||||
@ -1176,9 +1156,44 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
toggleCompleted() {
|
toggleCompleted() {
|
||||||
|
this.$store.dispatch("forgetTaskCompleteTemp", true);
|
||||||
this.$store.dispatch('toggleProjectParameter', 'completedTask');
|
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) {
|
expiresFormat(date) {
|
||||||
return $A.countDownFormat(date, this.nowTime)
|
return $A.countDownFormat(date, this.nowTime)
|
||||||
},
|
},
|
||||||
|
@ -171,11 +171,14 @@ export default {
|
|||||||
})
|
})
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const cacheTask = this.task;
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case 'complete':
|
case 'complete':
|
||||||
if (this.task.complete_at) return;
|
if (this.task.complete_at) return;
|
||||||
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(() => {
|
||||||
|
this.$store.dispatch("saveTaskCompleteTemp", cacheTask)
|
||||||
})
|
})
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -183,6 +186,8 @@ export default {
|
|||||||
if (!this.task.complete_at) return;
|
if (!this.task.complete_at) return;
|
||||||
this.updateTask({
|
this.updateTask({
|
||||||
complete_at: false
|
complete_at: false
|
||||||
|
}).then(() => {
|
||||||
|
this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id)
|
||||||
})
|
})
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -200,6 +205,7 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
updateTask(updata) {
|
updateTask(updata) {
|
||||||
|
return new Promise(resolve => {
|
||||||
if (this.loadIng) {
|
if (this.loadIng) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -210,10 +216,12 @@ export default {
|
|||||||
task_id: this.task.id,
|
task_id: this.task.id,
|
||||||
})).then(({msg}) => {
|
})).then(({msg}) => {
|
||||||
$A.messageSuccess(msg);
|
$A.messageSuccess(msg);
|
||||||
|
resolve()
|
||||||
}).catch(({msg}) => {
|
}).catch(({msg}) => {
|
||||||
$A.modalError(msg);
|
$A.modalError(msg);
|
||||||
this.$store.dispatch("getTaskOne", this.task.id);
|
this.$store.dispatch("getTaskOne", this.task.id);
|
||||||
});
|
});
|
||||||
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
archivedOrRemoveTask(type) {
|
archivedOrRemoveTask(type) {
|
||||||
|
@ -31,8 +31,8 @@
|
|||||||
<div class="dashboard-title">{{title}}</div>
|
<div class="dashboard-title">{{title}}</div>
|
||||||
<ul class="dashboard-list overlay-y">
|
<ul class="dashboard-list overlay-y">
|
||||||
<li
|
<li
|
||||||
v-for="item in list"
|
v-for="(item, index) in list"
|
||||||
:key="item.id"
|
:key="index"
|
||||||
:class="{complete: item.complete_at}"
|
:class="{complete: item.complete_at}"
|
||||||
:style="item.color ? {backgroundColor: item.color} : {}"
|
:style="item.color ? {backgroundColor: item.color} : {}"
|
||||||
@click="openTask(item)">
|
@click="openTask(item)">
|
||||||
@ -103,6 +103,10 @@ export default {
|
|||||||
this.$store.dispatch("getTaskForDashboard");
|
this.$store.dispatch("getTaskForDashboard");
|
||||||
},
|
},
|
||||||
|
|
||||||
|
deactivated() {
|
||||||
|
this.$store.dispatch("forgetTaskCompleteTemp", true);
|
||||||
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(['userInfo', 'cacheProjects', 'taskId']),
|
...mapState(['userInfo', 'cacheProjects', 'taskId']),
|
||||||
|
|
||||||
|
@ -21,6 +21,10 @@ export default {
|
|||||||
this.project_id = this.$route.params.id;
|
this.project_id = this.$route.params.id;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
deactivated() {
|
||||||
|
this.$store.dispatch("forgetTaskCompleteTemp", true);
|
||||||
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(['cacheProjects']),
|
...mapState(['cacheProjects']),
|
||||||
...mapGetters(['projectParameter']),
|
...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'});
|
reject({msg: 'Parameter error'});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (state.cacheTasks.length == 0 && state.cacheTasks.length > 0) {
|
|
||||||
state.cacheTasks = state.cacheTasks;
|
|
||||||
}
|
|
||||||
if (data.project_id) {
|
if (data.project_id) {
|
||||||
state.projectLoad++;
|
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")),
|
const todayStart = $A.Date($A.formatDate("Y-m-d 00:00:00")),
|
||||||
todayEnd = $A.Date($A.formatDate("Y-m-d 23:59:59")),
|
todayEnd = $A.Date($A.formatDate("Y-m-d 23:59:59")),
|
||||||
todayNow = $A.Date($A.formatDate("Y-m-d H:i:s"));
|
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) {
|
if (!task.end_at) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -140,7 +145,7 @@ export default {
|
|||||||
end = $A.Date(task.end_at);
|
end = $A.Date(task.end_at);
|
||||||
return (start <= todayStart && todayStart <= end) || (start <= todayEnd && todayEnd <= end) || (start > todayStart && todayEnd > end);
|
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) {
|
if (!task.end_at) {
|
||||||
return false;
|
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.projectTotal = 0;
|
||||||
state.projectLoad = 0;
|
state.projectLoad = 0;
|
||||||
state.taskId = 0;
|
state.taskId = 0;
|
||||||
|
state.taskCompleteTemps = [];
|
||||||
state.taskContents = [];
|
state.taskContents = [];
|
||||||
state.taskFiles = [];
|
state.taskFiles = [];
|
||||||
state.taskLogs = [];
|
state.taskLogs = [];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user