diff --git a/resources/assets/js/pages/login.vue b/resources/assets/js/pages/login.vue
index ffdcd9d5..0b6ac54f 100644
--- a/resources/assets/js/pages/login.vue
+++ b/resources/assets/js/pages/login.vue
@@ -10,7 +10,7 @@
-
+
@@ -94,7 +94,7 @@ export default {
currentLanguage() {
return this.languageList[this.languageType] || 'Language'
},
-
+
welcomeTitle() {
let title = window.systemInfo.title || "Dootask";
if (title == "PublicDooTask") {
@@ -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("请设置服务器")
}
diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue
index de213c48..2f9cb093 100644
--- a/resources/assets/js/pages/manage/components/ProjectList.vue
+++ b/resources/assets/js/pages/manage/components/ProjectList.vue
@@ -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)
},
diff --git a/resources/assets/js/pages/manage/components/TaskMenu.vue b/resources/assets/js/pages/manage/components/TaskMenu.vue
index 937568e0..e9e51aaa 100644
--- a/resources/assets/js/pages/manage/components/TaskMenu.vue
+++ b/resources/assets/js/pages/manage/components/TaskMenu.vue
@@ -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) {
diff --git a/resources/assets/js/pages/manage/dashboard.vue b/resources/assets/js/pages/manage/dashboard.vue
index 9fc38739..5ed538be 100644
--- a/resources/assets/js/pages/manage/dashboard.vue
+++ b/resources/assets/js/pages/manage/dashboard.vue
@@ -31,8 +31,8 @@
{{title}}
-
@@ -103,6 +103,10 @@ export default {
this.$store.dispatch("getTaskForDashboard");
},
+ deactivated() {
+ this.$store.dispatch("forgetTaskCompleteTemp", true);
+ },
+
computed: {
...mapState(['userInfo', 'cacheProjects', 'taskId']),
diff --git a/resources/assets/js/pages/manage/project.vue b/resources/assets/js/pages/manage/project.vue
index 5dacc3f5..831f6c93 100644
--- a/resources/assets/js/pages/manage/project.vue
+++ b/resources/assets/js/pages/manage/project.vue
@@ -21,6 +21,10 @@ export default {
this.project_id = this.$route.params.id;
},
+ deactivated() {
+ this.$store.dispatch("forgetTaskCompleteTemp", true);
+ },
+
computed: {
...mapState(['cacheProjects']),
...mapGetters(['projectParameter']),
diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js
index 280090ce..acf3185c 100644
--- a/resources/assets/js/store/actions.js
+++ b/resources/assets/js/store/actions.js
@@ -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);
+ }
+ },
+
/** *****************************************************************************************/
/** ************************************** 会话 **********************************************/
/** *****************************************************************************************/
diff --git a/resources/assets/js/store/getters.js b/resources/assets/js/store/getters.js
index 39b4a486..3a881d4e 100644
--- a/resources/assets/js/store/getters.js
+++ b/resources/assets/js/store/getters.js
@@ -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;
}
diff --git a/resources/assets/js/store/state.js b/resources/assets/js/store/state.js
index fef890d8..5fdacf6d 100644
--- a/resources/assets/js/store/state.js
+++ b/resources/assets/js/store/state.js
@@ -64,6 +64,7 @@ state.projectId = 0;
state.projectTotal = 0;
state.projectLoad = 0;
state.taskId = 0;
+state.taskCompleteTemps = [];
state.taskContents = [];
state.taskFiles = [];
state.taskLogs = [];