5 changed files with 227 additions and 5 deletions
-
14app/AdminAgent/Controllers/HomeController.php
-
13app/AdminAgent/Metrics/Examples/Dashboard.php
-
160app/AdminAgent/Metrics/Examples/OrderExamples.php
-
2config/database.php
-
43resources/views/admin/pages/agent-home.blade.php
@ -0,0 +1,13 @@ |
|||
<?php |
|||
|
|||
namespace App\AdminAgent\Metrics\Examples; |
|||
|
|||
use Dcat\Admin\Admin; |
|||
|
|||
class Dashboard |
|||
{ |
|||
public static function title() |
|||
{ |
|||
return view('admin::pages.agent-home', ['admin' => Admin::user()]); |
|||
} |
|||
} |
|||
@ -0,0 +1,160 @@ |
|||
<?php |
|||
|
|||
namespace App\AdminAgent\Metrics\Examples; |
|||
|
|||
use App\Models\Order; |
|||
use Carbon\Carbon; |
|||
use Dcat\Admin\Admin; |
|||
use Dcat\Admin\Widgets\Metrics\RadialBar; |
|||
use Illuminate\Http\Request; |
|||
use Illuminate\Support\Arr; |
|||
use Illuminate\Support\Facades\DB; |
|||
|
|||
class OrderExamples extends RadialBar |
|||
{ |
|||
/** |
|||
* 初始化卡片内容 |
|||
*/ |
|||
protected function init() |
|||
{ |
|||
parent::init(); |
|||
|
|||
$this->title('订单统计'); |
|||
$this->height(400); |
|||
$this->chartHeight(300); |
|||
} |
|||
|
|||
/** |
|||
* 处理请求 |
|||
* |
|||
* @param Request $request |
|||
* |
|||
* @return mixed|void |
|||
*/ |
|||
public function handle(Request $request) |
|||
{ |
|||
//总订单数
|
|||
$count = Order::query()->where('agent_id',Admin::user()->id)->count(); |
|||
// 卡片内容
|
|||
$this->withContent($count); |
|||
// 卡片底部
|
|||
//今日订单
|
|||
$countToday = Order::query()->where('agent_id',Admin::user()->id)->whereDate('created_at',Carbon::today())->count(); |
|||
$countYesterday = Order::query()->where('agent_id',Admin::user()->id)->whereDate('created_at',Carbon::yesterday())->count(); |
|||
$price = Order::query()->where('agent_id',Admin::user()->id)->whereDate('created_at',Carbon::today())->sum('price'); |
|||
$this->withFooter($countToday, $countYesterday, $price); |
|||
$order = Order::query() |
|||
->select('*') |
|||
->addSelect(DB::raw("COUNT(id) as count_id,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time")) |
|||
->where('agent_id',Admin::user()->id) |
|||
->limit(30) |
|||
->orderBy('created_at', 'asc') |
|||
->groupBy('statistics_time') |
|||
->get() |
|||
->toArray(); |
|||
|
|||
$categories = Arr::pluck($order,'statistics_time'); |
|||
// 图表数据
|
|||
$data = Arr::pluck($order,'count_id'); |
|||
$this->withChart($data,$categories); |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 设置图表数据. |
|||
* |
|||
* @param int $data |
|||
* |
|||
* @return $this |
|||
*/ |
|||
public function withChart(array $data,array $categories) |
|||
{ |
|||
return $this->chart([ |
|||
'series' => [ |
|||
[ |
|||
'name' => '订单量', |
|||
'data' => $data |
|||
] |
|||
], |
|||
'chart' => [ |
|||
'type' => 'line', |
|||
'zoom' => [ |
|||
'enabled' => false |
|||
], |
|||
'toolbar' => [ |
|||
'show' => false |
|||
], |
|||
], |
|||
'colors' => [ |
|||
Admin::color()->green(), |
|||
], |
|||
'dataLabels' => [ |
|||
'enabled' => false |
|||
], |
|||
'stroke' => [ |
|||
'curve' => 'smooth' |
|||
], |
|||
'legend' => [ |
|||
'position' =>'top', |
|||
//'horizontalAlign' => 'right'
|
|||
], |
|||
'fill' => [ |
|||
'opacity' => 1, |
|||
'type' => 'solid', |
|||
], |
|||
'xaxis' => [ |
|||
'categories' => $categories, |
|||
] |
|||
]); |
|||
} |
|||
|
|||
/** |
|||
* 卡片内容 |
|||
* |
|||
* @param string $content |
|||
* |
|||
* @return $this |
|||
*/ |
|||
public function withContent($content) |
|||
{ |
|||
return $this->content( |
|||
<<<HTML |
|||
<div class="d-flex flex-column flex-wrap text-left p-1"> |
|||
<h1 class="font-lg-2 mt-2 mb-0">{$content}</h1> |
|||
<small>总订单数</small> |
|||
</div> |
|||
HTML |
|||
); |
|||
} |
|||
|
|||
/** |
|||
* 卡片底部内容. |
|||
* |
|||
* @param string $new |
|||
* @param string $open |
|||
* @param string $response |
|||
* |
|||
* @return $this |
|||
*/ |
|||
public function withFooter($new, $open, $response) |
|||
{ |
|||
return $this->footer( |
|||
<<<HTML |
|||
<div class="d-flex justify-content-between p-1" style="padding-top: 0!important;"> |
|||
<div class="text-center"> |
|||
<p>今日订单</p> |
|||
<span class="font-lg-1">{$new}</span> |
|||
</div> |
|||
<div class="text-center"> |
|||
<p>昨日订单</p> |
|||
<span class="font-lg-1">{$open}</span> |
|||
</div> |
|||
<div class="text-center"> |
|||
<p>今日成交(元)</p> |
|||
<span class="font-lg-1">{$response}</span> |
|||
</div> |
|||
</div> |
|||
HTML |
|||
); |
|||
} |
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
<style> |
|||
.dashboard-title .links { |
|||
text-align: center; |
|||
margin-bottom: 2.5rem; |
|||
} |
|||
.dashboard-title .links > a { |
|||
padding: 0 25px; |
|||
font-size: 12px; |
|||
font-weight: 600; |
|||
letter-spacing: .1rem; |
|||
text-decoration: none; |
|||
text-transform: uppercase; |
|||
color: #fff;
|
|||
} |
|||
.dashboard-title h1 { |
|||
font-weight: 200; |
|||
font-size: 2.5rem; |
|||
} |
|||
.dashboard-title .avatar { |
|||
background: #fff;
|
|||
border: 2px solid #fff;
|
|||
width: 70px; |
|||
height: 70px; |
|||
} |
|||
</style> |
|||
|
|||
<div class="dashboard-title card bg-primary"> |
|||
<div class="card-body"> |
|||
<div class="text-center "> |
|||
<img class="avatar img-circle shadow mt-1" src="{{config('filesystems.disks.oss.cdnDomain').'/'.$admin->avatar}}"> |
|||
|
|||
<div class="text-center mb-1"> |
|||
<h1 class="mb-3 mt-2 text-white">{{$admin->name}}</h1> |
|||
<div class="links"> |
|||
<a href="{{ admin_url('/auth/users') }}">用户管理</a> |
|||
<a href="{{ admin_url('/order/list') }}" id="doc-link">订单管理</a> |
|||
<a href="{{ admin_url('/advertising/list') }}" id="demo-link">广告管理</a> |
|||
<a href="{{ admin_url('/product/list') }}" id="demo-link">产品管理</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue