优化完成任务标记

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));
if (this.repoData) {
console.log("有客户端");
let latestVersion = $A.leftDelete(this.releases.tag_name.toLowerCase(), "v")
console.log("Exist client: " + latestVersion);
this.status = 1;
}
}

View File

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

View File

@ -611,9 +611,10 @@ export default {
myList() {
const {cacheTasks, taskCompleteTemps, sortField, sortType} = this;
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.push(...taskCompleteTemps.filter(task => this.myFilter(task, false)));
array.push(...tmps);
}
return array.sort((a, b) => {
if (sortType == 'asc') {
@ -633,9 +634,10 @@ export default {
helpList() {
const {cacheTasks, taskCompleteTemps, sortField, sortType} = this;
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.push(...taskCompleteTemps.filter(task => this.helpFilter(task, false)));
array.push(...tmps);
}
return array.sort((a, b) => {
if (sortType == 'asc') {

View File

@ -95,6 +95,10 @@ export default {
type: Boolean,
default: true
},
updateBefore: {
type: Boolean,
default: false
},
size: {
type: String,
default: 'small'
@ -174,20 +178,34 @@ export default {
const cacheTask = this.task;
switch (command) {
case 'complete':
if (this.task.complete_at) return;
if (this.task.complete_at) {
return;
}
if (this.updateBefore) {
this.$store.dispatch("saveTaskCompleteTemp", cacheTask)
}
this.updateTask({
complete_at: $A.formatDate("Y-m-d H:i:s")
}).then(() => {
this.$store.dispatch("saveTaskCompleteTemp", cacheTask)
}).catch(() => {
this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id)
})
break;
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({
complete_at: false
}).then(() => {
this.$store.dispatch("forgetTaskCompleteTemp", cacheTask.id)
}).catch(() => {
this.$store.dispatch("saveTaskCompleteTemp", cacheTask)
})
break;
@ -205,8 +223,9 @@ export default {
},
updateTask(updata) {
return new Promise(resolve => {
return new Promise((resolve, reject) => {
if (this.loadIng) {
reject()
return;
}
//
@ -220,6 +239,7 @@ export default {
}).catch(({msg}) => {
$A.modalError(msg);
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 getters
* @returns {{overdue: *, today: *}}
*/
dashboardTask(state, getters) {
dashboardTask(state) {
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"));
let {ownerTasks} = getters;
if (state.taskCompleteTemps.length > 0) {
ownerTasks = $A.cloneJSON(ownerTasks)
ownerTasks.push(...state.taskCompleteTemps);
const filterTask = (task, chackCompleted = true) => {
if (task.complete_at && chackCompleted === true) {
return false;
}
const todayTasks = ownerTasks.filter(task => {
if (!task.end_at) {
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),
end = $A.Date(task.end_at);
return (start <= todayStart && todayStart <= end) || (start <= todayEnd && todayEnd <= end) || (start > todayStart && todayEnd > end);
})
const overdueTasks = ownerTasks.filter(task => {
if (!task.end_at) {
return false;
}
const overdueTasks = array.filter(task => {
return $A.Date(task.end_at) <= todayNow;
})
return {

View File

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

View File

@ -65,6 +65,11 @@
}
.tui-full-calendar-popup {
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 {
border: 0;
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2);