mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 11:19:56 +00:00
136 lines
4.3 KiB
Vue
136 lines
4.3 KiB
Vue
<template>
|
|
<div class="page-dashboard">
|
|
<PageTitle :title="$L('仪表盘')"/>
|
|
<div class="dashboard-wrapper">
|
|
<div class="dashboard-hello">{{$L('欢迎您,' + userInfo.nickname)}}</div>
|
|
<div class="dashboard-desc">{{$L('以下是你当前的任务统计数据')}}</div>
|
|
<ul class="dashboard-block">
|
|
<li @click="dashboard='today'">
|
|
<div class="block-title">{{$L('今日待完成')}}</div>
|
|
<div class="block-data">
|
|
<div class="block-num">{{dashboardTask.today.length}}</div>
|
|
<i class="taskfont"></i>
|
|
</div>
|
|
</li>
|
|
<li @click="dashboard='overdue'">
|
|
<div class="block-title">{{$L('超期未完成')}}</div>
|
|
<div class="block-data">
|
|
<div class="block-num">{{dashboardTask.overdue.length}}</div>
|
|
<i class="taskfont"></i>
|
|
</div>
|
|
</li>
|
|
<li @click="dashboard='all'">
|
|
<div class="block-title">{{$L('待完成任务')}}</div>
|
|
<div class="block-data">
|
|
<div class="block-num">{{dashboardTask.all.length}}</div>
|
|
<i class="taskfont"></i>
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
<Tabs v-model="dashboard" style="margin-top: 50px;">
|
|
<TabPane :label="$L('今日待完成')" name="today" @click="dashboard='today'">
|
|
<TaskDashboard :list="list" />
|
|
</TabPane>
|
|
<TabPane :label="$L('超期未完成')" name="overdue" @click="dashboard='overdue'">
|
|
<TaskDashboard :list="list" />
|
|
</TabPane>
|
|
<TabPane :label="$L('待完成任务')" name="all" @click="dashboard='all'">
|
|
<TaskDashboard :list="list" />
|
|
</TabPane>
|
|
</Tabs>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import {mapGetters, mapState} from "vuex";
|
|
import TaskDashboard from "./components/TaskDashboard";
|
|
|
|
export default {
|
|
components: {TaskDashboard},
|
|
data() {
|
|
return {
|
|
nowTime: $A.Time(),
|
|
nowInterval: null,
|
|
|
|
loadIng: 0,
|
|
dashboard: 'today',
|
|
}
|
|
},
|
|
|
|
mounted() {
|
|
this.nowInterval = setInterval(() => {
|
|
this.nowTime = $A.Time();
|
|
}, 1000)
|
|
},
|
|
|
|
destroyed() {
|
|
clearInterval(this.nowInterval)
|
|
},
|
|
|
|
activated() {
|
|
this.$store.dispatch("getTaskForDashboard");
|
|
},
|
|
|
|
deactivated() {
|
|
this.$store.dispatch("forgetTaskCompleteTemp", true);
|
|
},
|
|
|
|
computed: {
|
|
...mapState(['userInfo', 'cacheProjects', 'taskId']),
|
|
|
|
...mapGetters(['dashboardTask', 'transforTasks']),
|
|
|
|
title() {
|
|
const {dashboard} = this;
|
|
switch (dashboard) {
|
|
case 'today':
|
|
return this.$L('今日任务');
|
|
case 'overdue':
|
|
return this.$L('超期任务');
|
|
case 'all':
|
|
return this.$L('待完成任务');
|
|
default:
|
|
return '';
|
|
}
|
|
},
|
|
|
|
list() {
|
|
const {dashboard} = this;
|
|
let data = [];
|
|
switch (dashboard) {
|
|
case 'today':
|
|
data = this.transforTasks(this.dashboardTask.today);
|
|
break
|
|
case 'overdue':
|
|
data = this.transforTasks(this.dashboardTask.overdue);
|
|
break
|
|
case 'all':
|
|
data = this.transforTasks(this.dashboardTask.all);
|
|
break
|
|
}
|
|
return data.sort((a, b) => {
|
|
return $A.Date(a.end_at || "2099-12-31 23:59:59") - $A.Date(b.end_at || "2099-12-31 23:59:59");
|
|
});
|
|
},
|
|
},
|
|
|
|
methods: {
|
|
openTask(task) {
|
|
this.$store.dispatch("openTask", task)
|
|
},
|
|
|
|
openMenu(task) {
|
|
const el = this.$refs[`taskMenu_${task.id}`];
|
|
if (el) {
|
|
el[0].handleClick()
|
|
}
|
|
},
|
|
|
|
expiresFormat(date) {
|
|
return $A.countDownFormat(date, this.nowTime)
|
|
},
|
|
}
|
|
}
|
|
</script>
|