优化完成任务标记
This commit is contained in:
parent
4652242d6b
commit
6b7f8fd31c
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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"
|
||||
|
@ -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') {
|
||||
|
@ -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()
|
||||
});
|
||||
})
|
||||
},
|
||||
|
@ -54,6 +54,7 @@ export default {
|
||||
}
|
||||
});
|
||||
});
|
||||
this.$store.dispatch("forgetTaskCompleteTemp", true);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
41
resources/assets/js/store/getters.js
vendored
41
resources/assets/js/store/getters.js
vendored
@ -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 todayTasks = ownerTasks.filter(task => {
|
||||
const filterTask = (task, chackCompleted = true) => {
|
||||
if (task.complete_at && chackCompleted === true) {
|
||||
return false;
|
||||
}
|
||||
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 {
|
||||
|
11
resources/assets/sass/element.scss
vendored
11
resources/assets/sass/element.scss
vendored
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user