优化完成任务标记

This commit is contained in:
kuaifan 2022-01-11 14:18:49 +08:00
parent 4652242d6b
commit 6b7f8fd31c
8 changed files with 84 additions and 52 deletions

View File

@ -160,7 +160,8 @@ export default {
// //
this.repoData = (this.releases.assets || []).find(({name}) => $A.strExists(name, hostName)); this.repoData = (this.releases.assets || []).find(({name}) => $A.strExists(name, hostName));
if (this.repoData) { if (this.repoData) {
console.log("有客户端"); let latestVersion = $A.leftDelete(this.releases.tag_name.toLowerCase(), "v")
console.log("Exist client: " + latestVersion);
this.status = 1; this.status = 1;
} }
} }

View File

@ -37,7 +37,7 @@
disable-click/> disable-click/>
</div> </div>
<div class="calendar-menu" :style="calendarMenuStyles"> <div class="calendar-menu" :style="calendarMenuStyles">
<TaskMenu ref="calendarTaskMenu" :task="calendarTask"/> <TaskMenu ref="calendarTaskMenu" :task="calendarTask" updateBefore/>
</div> </div>
</div> </div>
</template> </template>
@ -83,16 +83,33 @@ export default {
this.setRenderRange(); this.setRenderRange();
}, },
deactivated() {
this.$store.dispatch("forgetTaskCompleteTemp", true);
},
computed: { computed: {
...mapState(['userId', 'cacheTasks']), ...mapState(['userId', 'cacheTasks', 'taskCompleteTemps']),
...mapGetters(['transforTasks']), ...mapGetters(['transforTasks']),
list() { list() {
const datas = this.transforTasks(this.cacheTasks.filter(({complete_at, owner, end_at}) => { const {cacheTasks, taskCompleteTemps} = this;
return !complete_at && owner && end_at; const filterTask = (task, chackCompleted = true) => {
})); if (task.complete_at && chackCompleted === true) {
return datas.map(data => { return false;
}
if (!task.end_at) {
return false;
}
return task.owner;
}
let array = cacheTasks.filter(task => filterTask(task));
let tmps = taskCompleteTemps.filter(task => filterTask(task, false));
if (tmps.length > 0) {
array = $A.cloneJSON(array)
array.push(...tmps);
}
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")
const task = { const task = {
id: data.id, id: data.id,
@ -106,12 +123,12 @@ export default {
color: "#515a6e", color: "#515a6e",
bgColor: data.color || '#E3EAFD', bgColor: data.color || '#E3EAFD',
borderColor: data.p_color, borderColor: data.p_color,
complete_at: data.complete_at,
priority: '', priority: '',
preventClick: true, preventClick: true,
preventCheckHide: true, preventCheckHide: true,
isChecked: false, isChecked: !!data.complete_at,
// //
complete_at: data.complete_at,
start_at: data.start_at, start_at: data.start_at,
end_at: data.end_at, end_at: data.end_at,
_time: data._time, _time: data._time,
@ -128,7 +145,11 @@ export default {
if (data.flow_item_name) { if (data.flow_item_name) {
task.title = `[${data.flow_item_name}] ${task.title}` task.title = `[${data.flow_item_name}] ${task.title}`
} }
if (data.overdue) { if (data.complete_at) {
task.color = "#c3c2c2"
task.bgColor = "#f3f3f3"
task.borderColor = "#e3e3e3"
} else if (data.overdue) {
task.title = `[${this.$L('超期')}] ${task.title}` task.title = `[${this.$L('超期')}] ${task.title}`
task.color = "#f56c6c" task.color = "#f56c6c"
task.bgColor = data.color || "#fef0f0" task.bgColor = data.color || "#fef0f0"

View File

@ -611,9 +611,10 @@ export default {
myList() { myList() {
const {cacheTasks, taskCompleteTemps, sortField, sortType} = this; const {cacheTasks, taskCompleteTemps, sortField, sortType} = this;
let array = cacheTasks.filter(task => this.myFilter(task)); let array = cacheTasks.filter(task => this.myFilter(task));
if (taskCompleteTemps.length > 0) { let tmps = taskCompleteTemps.filter(task => this.myFilter(task, false));
if (tmps.length > 0) {
array = $A.cloneJSON(array) array = $A.cloneJSON(array)
array.push(...taskCompleteTemps.filter(task => this.myFilter(task, false))); array.push(...tmps);
} }
return array.sort((a, b) => { return array.sort((a, b) => {
if (sortType == 'asc') { if (sortType == 'asc') {
@ -633,9 +634,10 @@ export default {
helpList() { helpList() {
const {cacheTasks, taskCompleteTemps, sortField, sortType} = this; const {cacheTasks, taskCompleteTemps, sortField, sortType} = this;
let array = cacheTasks.filter(task => this.helpFilter(task)); let array = cacheTasks.filter(task => this.helpFilter(task));
if (taskCompleteTemps.length > 0) { let tmps = taskCompleteTemps.filter(task => this.helpFilter(task, false));
if (tmps.length > 0) {
array = $A.cloneJSON(array) array = $A.cloneJSON(array)
array.push(...taskCompleteTemps.filter(task => this.helpFilter(task, false))); array.push(...tmps);
} }
return array.sort((a, b) => { return array.sort((a, b) => {
if (sortType == 'asc') { if (sortType == 'asc') {

View File

@ -95,6 +95,10 @@ export default {
type: Boolean, type: Boolean,
default: true default: true
}, },
updateBefore: {
type: Boolean,
default: false
},
size: { size: {
type: String, type: String,
default: 'small' default: 'small'
@ -174,20 +178,34 @@ export default {
const cacheTask = this.task; const cacheTask = this.task;
switch (command) { switch (command) {
case 'complete': case 'complete':
if (this.task.complete_at) return; if (this.task.complete_at) {
return;
}
if (this.updateBefore) {
this.$store.dispatch("saveTaskCompleteTemp", cacheTask)
}
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) this.$store.dispatch("saveTaskCompleteTemp", cacheTask)
}).catch(() => {
this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id)
}) })
break; break;
case 'uncomplete': case 'uncomplete':
if (!this.task.complete_at) return; if (!this.task.complete_at) {
return;
}
if (this.updateBefore) {
this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id)
}
this.updateTask({ this.updateTask({
complete_at: false complete_at: false
}).then(() => { }).then(() => {
this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id) this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id)
}).catch(() => {
this.$store.dispatch("saveTaskCompleteTemp", cacheTask)
}) })
break; break;
@ -205,8 +223,9 @@ export default {
}, },
updateTask(updata) { updateTask(updata) {
return new Promise(resolve => { return new Promise((resolve, reject) => {
if (this.loadIng) { if (this.loadIng) {
reject()
return; return;
} }
// //
@ -220,6 +239,7 @@ export default {
}).catch(({msg}) => { }).catch(({msg}) => {
$A.modalError(msg); $A.modalError(msg);
this.$store.dispatch("getTaskOne", this.task.id); this.$store.dispatch("getTaskOne", this.task.id);
reject()
}); });
}) })
}, },

View File

@ -54,6 +54,7 @@ export default {
} }
}); });
}); });
this.$store.dispatch("forgetTaskCompleteTemp", true);
}); });
} }
} }

View File

@ -108,47 +108,36 @@ export default {
} }
}, },
/**
* 我所有的任务未完成
* @param state
* @returns {unknown[]}
*/
ownerTasks(state) {
return state.cacheTasks.filter(({complete_at, owner}) => {
if (complete_at) {
return false;
}
return owner;
})
},
/** /**
* 仪表盘任务数据 * 仪表盘任务数据
* @param state * @param state
* @param getters
* @returns {{overdue: *, today: *}} * @returns {{overdue: *, today: *}}
*/ */
dashboardTask(state, getters) { dashboardTask(state) {
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"));
let {ownerTasks} = getters; const filterTask = (task, chackCompleted = true) => {
if (state.taskCompleteTemps.length > 0) { if (task.complete_at && chackCompleted === true) {
ownerTasks = $A.cloneJSON(ownerTasks) return false;
ownerTasks.push(...state.taskCompleteTemps); }
}
const todayTasks = ownerTasks.filter(task => {
if (!task.end_at) { if (!task.end_at) {
return false; return false;
} }
return task.owner;
}
let array = state.cacheTasks.filter(task => filterTask(task));
let tmps = state.taskCompleteTemps.filter(task => filterTask(task, false));
if (tmps.length > 0) {
array = $A.cloneJSON(array)
array.push(...tmps);
}
const todayTasks = array.filter(task => {
const start = $A.Date(task.start_at), const start = $A.Date(task.start_at),
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 = ownerTasks.filter(task => { const overdueTasks = array.filter(task => {
if (!task.end_at) {
return false;
}
return $A.Date(task.end_at) <= todayNow; return $A.Date(task.end_at) <= todayNow;
}) })
return { return {

View File

@ -20,16 +20,9 @@ $--dropdown-menuItem-hover-color: #606266;
min-width: 100px; min-width: 100px;
.item { .item {
&.red { &.red {
color: #f00; color: #f00 !important;
> i { > i {
color: #f00; color: #f00 !important;
}
}
&:hover {
&.red {
> i {
color: #f00;
}
} }
} }
} }

View File

@ -65,6 +65,11 @@
} }
.tui-full-calendar-popup { .tui-full-calendar-popup {
box-shadow: none; box-shadow: none;
.tui-full-calendar-section-header {
.tui-full-calendar-ic-checkbox-checked {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAhFBMVEUAAACLz3CLz3CLz3CKzm6Gy2+Lz3CLz3CL0HCLz3CLz3CLz3CLz3CMz3GLz3CKz3CLz3CL0HCJ0G+KznCN0HCL0HCLz3CKz3CLz3CLz3CLz3CMz3CLz3CLz3GL0XCL0HCN0XKLz3CLz3CMz3CLz3CM0HCM0G+FzHCLz3CKz3CMz3CLz3Bod5CFAAAAK3RSTlMA18RAOQ3s8+Pc0rmyq3tpiUwTgBnovyDMjmNSRjUvJQX5yKB0WisKppuUFLaY7gAAAotJREFUeNrtm+FymkAUhc8KqIAgSkyUtkmsmqa97/9+HWeSudpCd8qZ7E0m+73A9/1gxmXx4IK0nbipvDFTN2lT9JDVToLh6gx/sHQSFLfEFZUEp8IFczFgrv5CTChe/TsxYvfy/IkZy7M/c2KGywDUYkgNIBdDciARUxI0YkqDiZgygRNTHKZiyhRiTAyIATEgBsSAGBADYsAnCJgdmtIywKUAOrsA94QzJyKA95/pbALcPV7piADGryzDB+Rnv3IkAhi/UhMBjF9pQwbk3/A3JRXA+7GjAng/DqEC5v3+dMYE8P6nQsIEzFOPnw7g/QpC+R8K4QJ4f5iAzaA/TMAm6fdvZQgY+wW2fn9A0a66Bee/2xLH8kp/Rr1MB/3jAxaP0ALCPzagzPBCM9r/XcYH3K4BLfD4vw75xwdMbqB4CmaD/vEB2ztc0RD+MQHFg+c85fffDPv9AbPUd6Lz+ydCBDyjh1//6WcCGngK1L8a8lMBJTwFfj8XIC16+SnX7Af9bIDUngLSrwFEwaD/VogA5YheDj7/Wv1MgL9g/8XjpwNk+c8Cyq8BYwqePX46QOkGCmi/BowrqFi/Bvg4wYv6y7e4Kz4Rfj5AnzY/WSlcwHAB5+cD9ivKzwfIbEX4qQA99RB+NkDfO4b5sRAigHjzpP0C6u6D9wuo2z/eL+DvXx8Zv4C4gVd/qABxCeFnApQT5+cDpOP8fICcLv2VxbfjlQZUNh+vU/XbBIj6jQLm9wDWlZgFyOaYHJ3Ix/gDQwyIATEgBsSAGODBfuBgPvEwH7m0YkqLVExJYfsQuPcwdjOf+5kPHoFKjKio0e3Hn90WUCyGt7v3Nf0GsjqXYOR1hh6SJsz8v0mg/AZRXmaRKXtJBwAAAABJRU5ErkJggg==);
}
}
.tui-full-calendar-popup-container { .tui-full-calendar-popup-container {
border: 0; border: 0;
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2);