3 changed files with 218 additions and 0 deletions
-
84app/AdminAgent/Controllers/OrderStatisticsController.php
-
133app/AdminAgent/Metrics/Examples/OrderStatistics.php
-
1app/AdminAgent/routes.php
@ -0,0 +1,84 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace App\AdminAgent\Controllers; |
||||
|
|
||||
|
use App\AdminAgent\Metrics\Examples\FinanceStatistics; |
||||
|
use App\AdminAgent\Metrics\Examples\OrderStatistics; |
||||
|
use App\Common\OrderStatus; |
||||
|
use App\Models\Order; |
||||
|
use App\Models\OrderProductItem; |
||||
|
use Dcat\Admin\Admin; |
||||
|
use Dcat\Admin\Layout\Column; |
||||
|
use Dcat\Admin\Layout\Content; |
||||
|
use Dcat\Admin\Layout\Row; |
||||
|
use Dcat\Admin\Http\Controllers\AdminController; |
||||
|
use Dcat\Admin\Widgets\Card; |
||||
|
use Illuminate\Support\Arr; |
||||
|
|
||||
|
class OrderStatisticsController extends AdminController |
||||
|
{ |
||||
|
public function index(Content $content) |
||||
|
{ |
||||
|
Admin::style( |
||||
|
<<<CSS |
||||
|
.col-sm-12.d-flex{ |
||||
|
display: inline-block !important; |
||||
|
} |
||||
|
CSS |
||||
|
); |
||||
|
|
||||
|
//数据
|
||||
|
|
||||
|
//订单
|
||||
|
|
||||
|
|
||||
|
return $content |
||||
|
->body( |
||||
|
<<<HTML |
||||
|
<div class="content-header"> |
||||
|
<section class="content-header breadcrumbs-top"> |
||||
|
<h1 class=" float-left"> |
||||
|
<span class="text-capitalize">订单统计</span> |
||||
|
|
||||
|
</h1> |
||||
|
<div class="clearfix"></div> |
||||
|
|
||||
|
</section> |
||||
|
</div> |
||||
|
HTML |
||||
|
|
||||
|
) |
||||
|
->body(function (Row $row) { |
||||
|
$orders = Order::query()->where('agent_id',Admin::user()->id)->select('*')->selectRaw("count(id) as count_id")->groupBy('status')->get(); |
||||
|
$count = Order::query()->where('agent_id',Admin::user()->id)->count(); |
||||
|
|
||||
|
$row->column(3, function (Column $column) use ($count) { |
||||
|
$column->row(Card::make('总数', function () use ($count) { |
||||
|
return <<<HTML |
||||
|
<div class="d-flex justify-content-between align-items-center mt-1" style="margin-bottom: 2px"> |
||||
|
<h2 class="ml-1 font-large-1 text-primary">$count</h2> |
||||
|
</div> |
||||
|
HTML; |
||||
|
})); |
||||
|
}); |
||||
|
|
||||
|
$arr = OrderStatus::array(); |
||||
|
foreach ($orders as $order) { |
||||
|
$row->column(3, function (Column $column) use ($order,$arr) { |
||||
|
$column->row(Card::make($arr[$order->status], function () use ($order) { |
||||
|
return <<<HTML |
||||
|
<div class="d-flex justify-content-between align-items-center mt-1" style="margin-bottom: 2px"> |
||||
|
<h2 class="ml-1 font-large-1 text-primary">$order->count_id</h2> |
||||
|
</div> |
||||
|
HTML; |
||||
|
})); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
}) |
||||
|
->body(function (Row $row){ |
||||
|
$row->column(12,new OrderStatistics() |
||||
|
); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,133 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace App\AdminAgent\Metrics\Examples; |
||||
|
|
||||
|
use App\Common\DataTime; |
||||
|
use App\Common\OrderStatus; |
||||
|
use App\Models\Order; |
||||
|
use Dcat\Admin\Admin; |
||||
|
use Dcat\Admin\Widgets\Metrics\Bar; |
||||
|
use Illuminate\Http\Request; |
||||
|
use Illuminate\Support\Arr; |
||||
|
use Illuminate\Support\Facades\DB; |
||||
|
|
||||
|
class OrderStatistics extends Bar |
||||
|
{ |
||||
|
/** |
||||
|
* 初始化卡片内容 |
||||
|
*/ |
||||
|
protected function init() |
||||
|
{ |
||||
|
parent::init(); |
||||
|
|
||||
|
$color = Admin::color(); |
||||
|
// 卡片内容宽度
|
||||
|
$this->contentWidth(0, 12); |
||||
|
// 标题
|
||||
|
//$this->title('财务统计');
|
||||
|
$this->chartHeight = 500; |
||||
|
// 设置下拉选项
|
||||
|
$this->dropdown([ |
||||
|
'1' => '日', |
||||
|
'30' => '月', |
||||
|
'365' => '年', |
||||
|
]); |
||||
|
// 设置图表颜色
|
||||
|
$this->chartColors([ |
||||
|
$color->green(), |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 处理请求 |
||||
|
* |
||||
|
* @param Request $request |
||||
|
* |
||||
|
* @return mixed|void |
||||
|
*/ |
||||
|
public function handle(Request $request) |
||||
|
{ |
||||
|
$query = Order::query() |
||||
|
->where('agent_id',Admin::user()->id) |
||||
|
->select('*'); |
||||
|
switch ($request->get('option')) { |
||||
|
case '1': |
||||
|
$query->selectRaw("count(id) as sum_price,date(created_at) AS statistics_time"); |
||||
|
break; |
||||
|
case '30': |
||||
|
$query->selectRaw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at)) AS statistics_time"); |
||||
|
break; |
||||
|
case '365': |
||||
|
$query->selectRaw("count(id) as sum_price,CONCAT(YEAR(created_at)) AS statistics_time"); |
||||
|
break; |
||||
|
default: |
||||
|
$query->selectRaw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time"); |
||||
|
} |
||||
|
$order = $query->groupBy('statistics_time') |
||||
|
->orderBy('created_at') |
||||
|
->get() |
||||
|
->toArray(); |
||||
|
$this->withChart( |
||||
|
Arr::pluck($order,'sum_price') |
||||
|
); |
||||
|
$this->chartLabels( |
||||
|
Arr::pluck($order,'statistics_time') |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 设置图表数据. |
||||
|
* |
||||
|
* @param array $data |
||||
|
* |
||||
|
* @return $this |
||||
|
*/ |
||||
|
public function withChart(array $data) |
||||
|
{ |
||||
|
return $this->chart([ |
||||
|
'series' => [[ |
||||
|
'name' => '订单数', |
||||
|
'data' => $data |
||||
|
]], |
||||
|
'chart' => [ |
||||
|
//'width' => '180%',
|
||||
|
'type' => 'bar', |
||||
|
'events' => [ |
||||
|
], |
||||
|
'toolbar' => ['show' => false], |
||||
|
], |
||||
|
'colors' => $this->colors, |
||||
|
'plotOptions' => [ |
||||
|
'bar' => [ |
||||
|
//'columnWidth' => '45%',
|
||||
|
'distributed' => true, |
||||
|
] |
||||
|
], |
||||
|
'dataLabels' => [ |
||||
|
'enabled' => false |
||||
|
], |
||||
|
'legend' => [ |
||||
|
'show' => false |
||||
|
], |
||||
|
'xaxis' => [ |
||||
|
//'categories' =>
|
||||
|
// [75, 125, 225, 175, 125, 75, 25]
|
||||
|
//,
|
||||
|
'labels' => [ |
||||
|
'show' => true, |
||||
|
'style' => [ |
||||
|
'colors' => $this->colors, |
||||
|
'fontSize' => '12px' |
||||
|
] |
||||
|
], |
||||
|
], |
||||
|
'yaxis' => [ |
||||
|
'show' => true |
||||
|
], |
||||
|
'tooltip' => [ |
||||
|
'x' => ['show' => true], |
||||
|
], |
||||
|
|
||||
|
]); |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue