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.
160 lines
3.3 KiB
160 lines
3.3 KiB
<?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
|
|
);
|
|
}
|
|
}
|