no message

This commit is contained in:
kuaifan 2021-06-20 00:11:01 +08:00
parent 570583bafd
commit a9c763bb77
7 changed files with 121 additions and 41 deletions

View File

@ -483,7 +483,7 @@ class ProjectController extends AbstractController
$data = []; $data = [];
// 今日待任务 // 今日待完成
$between = [ $between = [
Carbon::today()->startOfDay(), Carbon::today()->startOfDay(),
Carbon::today()->endOfDay() Carbon::today()->endOfDay()
@ -502,7 +502,8 @@ class ProjectController extends AbstractController
* 任务列表 * 任务列表
* *
* @apiParam {String} name 任务名称(包含) * @apiParam {String} name 任务名称(包含)
* @apiParam {Array} time 时间范围,格式:数组,如:[2020-12-12,2020-20-12] * @apiParam {Array} time 时间范围,如:['2020-12-12', '2020-12-30']
* @apiParam {String} time_before 指定时间之前2020-12-30 00:00:00填写此项时time参数无效
*/ */
public function task__lists() public function task__lists()
{ {
@ -512,12 +513,15 @@ class ProjectController extends AbstractController
// //
$name = Request::input('name'); $name = Request::input('name');
$time = Request::input('time'); $time = Request::input('time');
$time_before = Request::input('time_before');
if ($name) { if ($name) {
$builder->where(function($query) use ($name) { $builder->where(function($query) use ($name) {
$query->where('project_tasks.name', 'like', '%,' . $name . ',%'); $query->where('project_tasks.name', 'like', '%,' . $name . ',%');
}); });
} }
if (is_array($time)) { if (Base::isDateOrTime($time_before)) {
$builder->whereNotNull('project_tasks.end_at')->where('project_tasks.end_at', '<', Carbon::parse($time_before));
} elseif (is_array($time)) {
if (Base::isDateOrTime($time[0]) && Base::isDateOrTime($time[1])) { if (Base::isDateOrTime($time[0]) && Base::isDateOrTime($time[1])) {
$between = [ $between = [
Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[0])->startOfDay(),

View File

@ -191,9 +191,9 @@ class Project extends AbstractModel
/** /**
* 查询自己的项目 * 查询自己的项目
* @param $query * @param self $query
* @param null $user * @param null $user
* @return mixed * @return self
*/ */
public function scopeAuthData($query, $user = null) public function scopeAuthData($query, $user = null)
{ {

View File

@ -7,6 +7,7 @@ use App\Module\Base;
use App\Tasks\PushTask; use App\Tasks\PushTask;
use Arr; use Arr;
use Carbon\Carbon; use Carbon\Carbon;
use DB;
use Hhxsv5\LaravelS\Swoole\Task\Task; use Hhxsv5\LaravelS\Swoole\Task\Task;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Request; use Request;
@ -249,14 +250,21 @@ class ProjectTask extends AbstractModel
/** /**
* 查询自己的任务 * 查询自己的任务
* @param $query * @param self $query
* @param null $user * @param null $user
* @return mixed * @return self
*/ */
public function scopeAuthData($query, $user = null) public function scopeAuthData($query, $user = null)
{ {
$pre = DB::getTablePrefix();
$user = $user ?: User::auth(); $user = $user ?: User::auth();
$query->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_pid') $query->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_pid')
->whereExists(function ($der) use ($pre) {
$der->select(DB::raw(1))
->from('project_task_users as B')
->whereColumn('project_task_users.task_pid', '=', 'B.task_pid')
->havingRaw("max({$pre}B.id) = {$pre}project_task_users.id");
})
->whereNull('project_tasks.archived_at') ->whereNull('project_tasks.archived_at')
->where('project_tasks.parent_id', 0) ->where('project_tasks.parent_id', 0)
->where('project_task_users.userid', $user->userid); ->where('project_task_users.userid', $user->userid);

View File

@ -5,17 +5,17 @@
<div class="dashboard-hello">{{$L('欢迎您,' + userInfo.nickname)}}</div> <div class="dashboard-hello">{{$L('欢迎您,' + userInfo.nickname)}}</div>
<div class="dashboard-desc">{{$L('以下是你当前的任务统计数据')}}</div> <div class="dashboard-desc">{{$L('以下是你当前的任务统计数据')}}</div>
<ul class="dashboard-block"> <ul class="dashboard-block">
<li> <li @click="active='today'">
<div class="block-title">{{$L('今日待完成')}}</div> <div class="block-title">{{$L('今日待完成')}}</div>
<div class="block-data"> <div class="block-data">
<div class="block-num">21</div> <div class="block-num">{{projectTaskStatistics.today || '...'}}</div>
<i class="iconfont">&#xe6f4;</i> <i class="iconfont">&#xe6f4;</i>
</div> </div>
</li> </li>
<li> <li @click="active='overdue'">
<div class="block-title">{{$L('超期未完成')}}</div> <div class="block-title">{{$L('超期未完成')}}</div>
<div class="block-data"> <div class="block-data">
<div class="block-num">2</div> <div class="block-num">{{projectTaskStatistics.overdue || '...'}}</div>
<i class="iconfont">&#xe603;</i> <i class="iconfont">&#xe603;</i>
</div> </div>
</li> </li>
@ -27,31 +27,11 @@
</div> </div>
</li> </li>
</ul> </ul>
<div class="dashboard-title">{{$L('今日任务')}}</div> <div class="dashboard-title">{{getTitle}}</div>
<ul class="dashboard-list overlay-y"> <ul class="dashboard-list overlay-y">
<li> <li v-for="item in taskList">
<i class="iconfont">&#xe625;</i> <i class="iconfont">&#xe625;</i>
<div class="item-title">超全!B端通用界面设计法则全方位科普</div> <div class="item-title">{{item.title}}</div>
<div class="item-time"></div>
</li>
<li>
<i class="iconfont">&#xe625;</i>
<div class="item-title">做B端后台产品很复杂?送你一份完整的设计流程和规范!</div>
<div class="item-time"></div>
</li>
<li>
<i class="iconfont">&#xe625;</i>
<div class="item-title">如何设计时间显示更专业?来看大厂总结的方法</div>
<div class="item-time"></div>
</li>
<li>
<i class="iconfont">&#xe625;</i>
<div class="item-title">用实战分析和案例,教你网页配色的终极套路</div>
<div class="item-time"></div>
</li>
<li>
<i class="iconfont">&#xe625;</i>
<div class="item-title">用一篇超全面的文章,帮你了解维也纳艺术团体分离派</div>
<div class="item-time"></div> <div class="item-time"></div>
</li> </li>
</ul> </ul>
@ -64,13 +44,87 @@ import {mapState} from "vuex";
export default { export default {
data() { data() {
return {} return {
}, loadIng: 0,
mounted() {
active: 'today',
}
}, },
activated() {
this.$store.dispatch("getTaskStatistics");
this.getDashboardTask();
},
computed: { computed: {
...mapState(['userInfo', 'projectList']), ...mapState(['userInfo', 'projectList', 'projectTaskStatistics', 'calendarTask']),
getTitle() {
const {active} = this;
switch (active) {
case 'today':
return this.$L('今日任务');
case 'overdue':
return this.$L('超期任务');
default:
return '';
}
},
taskList() {
const {calendarTask, active} = this;
const todayStart = new Date($A.formatDate("Y-m-d 00:00:00")),
todayEnd = new Date($A.formatDate("Y-m-d 23:59:59"));
return calendarTask.filter((item) => {
const start = new Date(item.start);
const end = new Date(item.end);
switch (active) {
case 'today':
return (start >= todayStart && start <= todayEnd) || (end >= todayStart && end <= todayEnd);
case 'overdue':
return end < todayStart;
default:
return false;
}
});
}
},
watch: {
active() {
this.getDashboardTask();
}
},
methods: {
getDashboardTask() {
let payload = {};
switch (this.active) {
case 'today':
payload = {
time: [
$A.formatDate("Y-m-d 00:00:00"),
$A.formatDate("Y-m-d 23:59:59")
],
}
break;
case 'overdue':
payload = {
time_before: $A.formatDate("Y-m-d 00:00:00")
}
break;
default:
return;
}
//
this.loadIng++;
this.$store.dispatch("getTaskList", payload).then(({data}) => {
this.loadIng--;
this.$store.dispatch("saveCalendarTask", data.data)
}).catch(() => {
this.loadIng--;
})
}
} }
} }
</script> </script>

View File

@ -466,6 +466,19 @@ export default {
} }
}, },
/**
* 获取任务统计
* @param state
* @param dispatch
*/
getTaskStatistics({state, dispatch}) {
dispatch("call", {
url: 'project/task/statistics',
}).then(({data}) => {
state.projectTaskStatistics = data;
});
},
/** /**
* 获取任务列表 * 获取任务列表
* @param state * @param state

View File

@ -272,6 +272,7 @@ state.projectLoad = 0;
state.projectList = state.cacheProjectList; state.projectList = state.cacheProjectList;
state.projectDetail = {id: 0, project_column: [], project_user: []}; state.projectDetail = {id: 0, project_column: [], project_user: []};
state.projectOpenTask = {_show: false, id: 0, task_user: [], task_tag: []}; state.projectOpenTask = {_show: false, id: 0, task_user: [], task_tag: []};
state.projectTaskStatistics = {};
state.projectTaskContent = {}; state.projectTaskContent = {};
state.projectTaskFiles = {}; state.projectTaskFiles = {};
state.projectSubTask = {}; state.projectSubTask = {};

View File

@ -8,7 +8,7 @@
.dashboard-wrapper { .dashboard-wrapper {
width: 664px; width: 664px;
max-width: 80%; max-width: 80%;
max-height: 90%; max-height: 80%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.dashboard-hello { .dashboard-hello {