From 8d77f21a89974ce2e41753b49dcb3275c61d7baf Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Sun, 28 Sep 2025 16:27:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Admin/ChartController.php | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Admin/ChartController.php b/app/Http/Controllers/Admin/ChartController.php index 3081f0c..be29179 100644 --- a/app/Http/Controllers/Admin/ChartController.php +++ b/app/Http/Controllers/Admin/ChartController.php @@ -21,6 +21,8 @@ class ChartController extends CommonController * tags={"图表"}, * summary="首页统计", * description="", + * @OA\Parameter(name="start_date", in="query", @OA\Schema(type="string"), required=false, description="开始日期,例如:2022-01-01"), + * @OA\Parameter(name="end_date", in="query", @OA\Schema(type="string"), required=false, description="结束日期,例如:2022-12-31"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Response( * response="200", @@ -30,28 +32,48 @@ class ChartController extends CommonController */ public function home() { + $all = request()->all(); + $startDate = $all['start_date'] ?? null; + $endDate = $all['end_date'] ?? null; + + // 构建查询条件 + $buildQuery = function($type) use ($startDate, $endDate) { + $query = Visit::where('type', $type); + if ($startDate && $endDate) { + $query->whereBetween('date', [$startDate, $endDate]); + } elseif ($startDate) { + $query->where('date', '>=', $startDate); + } elseif ($endDate) { + $query->where('date', '<=', $endDate); + } + return $query; + }; + $list = [ 'common_visit' => [ - 'total' => Visit::where('type', 1)->count(), - 'enter_visit' => Visit::where('type', 1)->whereNotNull('accept_admin_sign')->count(), + 'total' => $buildQuery(1)->count(), + 'enter_visit' => $buildQuery(1)->whereNotNull('accept_admin_sign')->count(), 'today_total' => Visit::where('type', 1)->where('date', date('Y-m-d'))->count(), 'today_enter_visit' => Visit::where('type', 1)->where('date', date('Y-m-d'))->whereNotNull('accept_admin_sign')->count(), ], 'work_visit' => [ - 'total' => Visit::where('type', 2)->count(), - 'enter_visit' => Visit::where('type', 2)->whereNotNull('accept_admin_sign')->count(), + 'total' => $buildQuery(2)->count(), + 'enter_visit' => $buildQuery(2)->whereNotNull('accept_admin_sign')->count(), 'today_total' => Visit::where('type', 2)->where('date', date('Y-m-d'))->count(), 'today_enter_visit' => Visit::where('type', 2)->where('date', date('Y-m-d'))->whereNotNull('accept_admin_sign')->count(), ], 'car_visit' => [ - 'total' => Visit::where('type', 3)->count(), - 'enter_visit' => Visit::where('type', 3)->whereNotNull('accept_admin_sign')->count(), + 'total' => $buildQuery(3)->count(), + 'enter_visit' => $buildQuery(3)->whereNotNull('accept_admin_sign')->count(), 'today_total' => Visit::where('type', 3)->where('date', date('Y-m-d'))->count(), 'today_enter_visit' => Visit::where('type', 3)->where('date', date('Y-m-d'))->whereNotNull('accept_admin_sign')->count(), ], ]; - $startDate = date('Y-m-d', strtotime('-30 day', time())); - $dateList = getDateFromRange($startDate, date('Y-m-d')); + + // 图表日期范围:如果有时间筛选参数,使用筛选参数;否则使用最近30天 + $chartStartDate = $startDate ?: date('Y-m-d', strtotime('-30 day', time())); + $chartEndDate = $endDate ?: date('Y-m-d'); + $dateList = getDateFromRange($chartStartDate, $chartEndDate); $all_date_list = []; foreach ($dateList as &$item) { $all_date_list[] = [