You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aquaculture/app/Admin/Controllers/HomeController.php

91 lines
4.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Admin\Controllers;
use App\Admin\Extensions\Div; // 引入自定义的 Div 类
use App\Http\Controllers\Controller; // 引入基础控制器
use App\Models\SiteCount; // 引入站点统计模型
use App\Models\User; // 引入用户模型
use App\Services\SiteCountService; // 引入站点统计服务
use Carbon\Carbon; // 引入 Carbon 日期时间处理库
use Encore\Admin\Auth\Database\Menu; // 引入菜单模型
use Encore\Admin\Facades\Admin; // 引入 Admin 门面
use Encore\Admin\Layout\Content; // 引入内容布局
use Encore\Admin\Layout\Row; // 引入行布局
use Encore\Admin\Widgets\Box; // 引入盒子组件
class HomeController extends Controller
{
/**
* 显示仪表盘首页.
*
* @param Content $content 内容布局实例
* @param SiteCountService $service 站点统计服务实例
* @return Content 返回内容布局
*/
public function index(Content $content, SiteCountService $service)
{
// 用于更新菜单数据到文件, 可删除
// file_put_contents(database_path('data/menus.json'), Menu::all()->toJson(JSON_UNESCAPED_UNICODE));
// 引入 ECharts 图表库
Admin::js('/js/echarts.min.js');
return $content
->header('仪表盘') // 设置页面标题
->row(function (Row $row) use ($service) { // 创建一行布局
/**
* 今日统计, 今天的特殊情况,需要从缓存 redis 中读取
*
* @var $todaySite SiteCount
*/
$now = Carbon::now(); // 获取当前时间
$today = $now->toDateString(); // 获取今天的日期字符串
$todaySite = SiteCount::query()->firstOrNew(['date' => $today]); // 获取今天的统计记录,如果不存在则创建新记录
$todaySite = $service->syncByCache($todaySite); // 从缓存中同步今天的统计数据
// 七日统计
$lastWeekDate = $now->subDay(7); // 计算七天前的日期
$weekSites = SiteCount::query()
->where('date', '!=', $today) // 排除今天的记录
->where('date', '>', $lastWeekDate) // 只获取最近七天的记录
->get() // 获取记录
->push($todaySite) // 将今天的记录添加到结果集中
->sortBy('date'); // 按日期排序
// 本月统计
$month = $now->format('Y-m'); // 获取当前月份格式YYYY-MM
$monthSites = SiteCount::query()
->where('date', '!=', $today) // 排除今天的记录
->where('date', '>', $month) // 只获取本月的记录
->get() // 获取记录
->push($todaySite) // 将今天的记录添加到结果集中
->sortBy('date'); // 按日期排序
// 创建统计信息的盒子组件
$row->column(4, new Box('今日用户注册来源', new Div('todayRegister'))); // 今日用户注册来源
$row->column(4, new Box('七日用户注册来源', new Div('weekRegister'))); // 七日用户注册来源
$row->column(4, new Box('本月用户注册来源', new Div('monthRegister'))); // 本月用户注册来源
$row->column(4, new Box('今日订单', new Div('todayOrders'))); // 今日订单
$row->column(4, new Box('近期订单量', new Div('weekSites'))); // 近期订单量
$row->column(4, new Box('交易金额', new Div('saleMoney'))); // 交易金额
// 将所有统计数据传递给视图
$allSites = compact('todaySite', 'weekSites', 'monthSites'); // 打包统计数据
$row->column(12, view('admin.chars.echart', $allSites)); // 渲染 ECharts 视图并传递数据
});
}
/**
* 自定义 404 页面.
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function noFound()
{
return redirect('admin'); // 重定向到管理员首页
}
}