From 663a8bb06d55a49bc2c79090e5a426cbce82b79f Mon Sep 17 00:00:00 2001 From: kuaifan Date: Thu, 23 Dec 2021 01:07:22 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=97=B6=E9=97=B4=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/ProjectController.php | 16 ++------------ app/Models/ProjectTask.php | 22 +++++++++++++++++++ .../assets/js/pages/manage/dashboard.vue | 2 +- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index ab3aff5d..d3a0a26b 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -34,16 +34,10 @@ class ProjectController extends AbstractController $data = []; // 今日待完成 - $between = [ - Carbon::today()->startOfDay(), - Carbon::today()->endOfDay() - ]; $data['today'] = ProjectTask::authData(null, true)->whereParentId(0) ->whereNull('archived_at') ->whereNull('complete_at') - ->where(function ($query) use ($between) { - $query->whereBetween('start_at', $between)->orWhereBetween('end_at', $between); - }) + ->betweenTime(Carbon::today()->startOfDay(), Carbon::today()->endOfDay()) ->count(); // 超期未完成 @@ -610,13 +604,7 @@ class ProjectController extends AbstractController $builder->whereNotNull('end_at')->where('end_at', '<', Carbon::parse($time_before)); } elseif (is_array($time)) { if (Base::isDateOrTime($time[0]) && Base::isDateOrTime($time[1])) { - $between = [ - Carbon::parse($time[0])->startOfDay(), - Carbon::parse($time[1])->endOfDay() - ]; - $builder->where(function ($query) use ($between) { - $query->whereBetween('start_at', $between)->orWhereBetween('end_at', $between); - }); + $builder->betweenTime(Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[1])->endOfDay()); } } // diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 0269b6a7..941145ef 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -54,6 +54,7 @@ use Request; * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectTaskUser[] $taskUser * @property-read int|null $task_user_count * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask authData($userid = null, $owner = false) + * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask betweenTime($start, $end) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newQuery() * @method static \Illuminate\Database\Query\Builder|ProjectTask onlyTrashed() @@ -283,6 +284,27 @@ class ProjectTask extends AbstractModel return $query; } + /** + * 指定范围内的任务 + * @param $query + * @param $start + * @param $end + * @return mixed + */ + public function scopeBetweenTime($query, $start, $end) + { + $query->where(function ($q1) use ($start, $end) { + $q1->where(function ($q2) use ($start) { + $q2->where('start_at', '<=', $start)->where('end_at', '>=', $start); + })->orWhere(function ($q2) use ($end) { + $q2->where('start_at', '<=', $end)->where('end_at', '>=', $end); + })->orWhere(function ($q2) use ($start, $end) { + $q2->where('start_at', '>', $start)->where('end_at', '<', $end); + }); + }); + return $query; + } + /** * 添加任务 * @param $data diff --git a/resources/assets/js/pages/manage/dashboard.vue b/resources/assets/js/pages/manage/dashboard.vue index 3f564666..2340f3b9 100644 --- a/resources/assets/js/pages/manage/dashboard.vue +++ b/resources/assets/js/pages/manage/dashboard.vue @@ -172,7 +172,7 @@ export default { data._end_time = end; switch (dashboard) { case 'today': - return (start >= todayStart && start <= todayEnd) || (end >= todayStart && end <= todayEnd); + return (start <= todayStart && todayStart <= end) || (start <= todayEnd && todayEnd <= end) || (start > todayStart && todayEnd > end); case 'overdue': return end <= todayStart; default: