5 changed files with 509 additions and 0 deletions
-
103app/Admin/Controllers/AgentStatisticsController.php
-
103app/Admin/Controllers/SupplierStatisticsController.php
-
150app/Admin/Metrics/Examples/AgentStatistics.php
-
151app/Admin/Metrics/Examples/SupplierStatistics.php
-
2app/Admin/routes.php
@ -0,0 +1,103 @@ |
|||
<?php |
|||
|
|||
namespace App\Admin\Controllers; |
|||
|
|||
use App\Admin\Metrics\Examples\AgentStatistics; |
|||
use App\AdminAgent\Metrics\Examples\FinanceStatistics; |
|||
use App\AdminAgent\Metrics\Examples\OrderStatistics; |
|||
use App\AdminAgent\Metrics\Examples\UserStatistics; |
|||
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\Box; |
|||
use Dcat\Admin\Widgets\Card; |
|||
use Dcat\Admin\Widgets\Dropdown; |
|||
use Illuminate\Support\Arr; |
|||
use Illuminate\Support\Str; |
|||
|
|||
class AgentStatisticsController 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) { |
|||
$row->column(6, function (Column $column) { |
|||
$column->row(new \App\Admin\Tools\DataReportDate('data_report')); |
|||
}); |
|||
|
|||
}) |
|||
->body(function (Row $row) { |
|||
// 构建下拉菜单,当点击菜单时发起请求获取数据重新渲染图表
|
|||
$menu = [ |
|||
'1' => '日', |
|||
'30' => '月', |
|||
'365' => '年', |
|||
]; |
|||
$buttonName = '日'; |
|||
if (Arr::exists($menu, \request()->input('time_key', ''))) { |
|||
$buttonName = $menu[\request()->input('time_key')]; |
|||
} |
|||
|
|||
$dropdown = Dropdown::make($menu) |
|||
->button(current($menu)) |
|||
->button($buttonName) |
|||
->click() |
|||
->map(function ($v, $k) { |
|||
$querys = \request()->all(); |
|||
$querys['time_key'] = $k; |
|||
$queryString = http_build_query($querys); |
|||
$str = Str::replaceFirst('admin/', '', request()->path()); |
|||
$url = admin_url($str . '?' . $queryString); |
|||
// 此处设置的 data-xxx 属性会作为post数据发送到后端api
|
|||
return "<a class='switch-bar' data-option='{$k}' href='$url'>{$v}</a>"; |
|||
}); |
|||
|
|||
// 传递自定义参数
|
|||
|
|||
$bar = AgentStatistics::make() |
|||
->fetching('$("#my-box").loading()') // 设置loading效果
|
|||
->fetched('$("#my-box").loading(false)') // 移除loading效果
|
|||
->click('.switch-bar'); // 设置图表点击菜单则重新发起请求,且被点击的目标元素上的 data-xxx 属性会被作为post数据发送到后端API
|
|||
|
|||
$box = Box::make('成本总额图表', $bar) |
|||
->id('my-box') // 设置盒子的ID
|
|||
->tool($dropdown); // 设置下拉菜单按钮
|
|||
|
|||
$row->column(12, $box); |
|||
}); |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,103 @@ |
|||
<?php |
|||
|
|||
namespace App\Admin\Controllers; |
|||
|
|||
use App\Admin\Metrics\Examples\AgentStatistics; |
|||
use App\AdminAgent\Metrics\Examples\FinanceStatistics; |
|||
use App\AdminAgent\Metrics\Examples\OrderStatistics; |
|||
use App\AdminAgent\Metrics\Examples\UserStatistics; |
|||
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\Box; |
|||
use Dcat\Admin\Widgets\Card; |
|||
use Dcat\Admin\Widgets\Dropdown; |
|||
use Illuminate\Support\Arr; |
|||
use Illuminate\Support\Str; |
|||
|
|||
class SupplierStatisticsController 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) { |
|||
$row->column(6, function (Column $column) { |
|||
$column->row(new \App\Admin\Tools\DataReportDate('data_report')); |
|||
}); |
|||
|
|||
}) |
|||
->body(function (Row $row) { |
|||
// 构建下拉菜单,当点击菜单时发起请求获取数据重新渲染图表
|
|||
$menu = [ |
|||
'1' => '日', |
|||
'30' => '月', |
|||
'365' => '年', |
|||
]; |
|||
$buttonName = '日'; |
|||
if (Arr::exists($menu, \request()->input('time_key', ''))) { |
|||
$buttonName = $menu[\request()->input('time_key')]; |
|||
} |
|||
|
|||
$dropdown = Dropdown::make($menu) |
|||
->button(current($menu)) |
|||
->button($buttonName) |
|||
->click() |
|||
->map(function ($v, $k) { |
|||
$querys = \request()->all(); |
|||
$querys['time_key'] = $k; |
|||
$queryString = http_build_query($querys); |
|||
$str = Str::replaceFirst('admin/', '', request()->path()); |
|||
$url = admin_url($str . '?' . $queryString); |
|||
// 此处设置的 data-xxx 属性会作为post数据发送到后端api
|
|||
return "<a class='switch-bar' data-option='{$k}' href='$url'>{$v}</a>"; |
|||
}); |
|||
|
|||
// 传递自定义参数
|
|||
|
|||
$bar = AgentStatistics::make() |
|||
->fetching('$("#my-box").loading()') // 设置loading效果
|
|||
->fetched('$("#my-box").loading(false)') // 移除loading效果
|
|||
->click('.switch-bar'); // 设置图表点击菜单则重新发起请求,且被点击的目标元素上的 data-xxx 属性会被作为post数据发送到后端API
|
|||
|
|||
$box = Box::make('成本总额图表', $bar) |
|||
->id('my-box') // 设置盒子的ID
|
|||
->tool($dropdown); // 设置下拉菜单按钮
|
|||
|
|||
$row->column(12, $box); |
|||
}); |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,150 @@ |
|||
<?php |
|||
|
|||
namespace App\Admin\Metrics\Examples; |
|||
|
|||
use App\Common\OrderStatus; |
|||
use App\Models\Agent; |
|||
use App\Models\Order; |
|||
use App\Models\User; |
|||
use Dcat\Admin\Admin; |
|||
use Dcat\Admin\Widgets\ApexCharts\Chart; |
|||
use Dcat\Admin\Widgets\Metrics\Bar; |
|||
use Illuminate\Http\Request; |
|||
use Illuminate\Support\Arr; |
|||
use Illuminate\Support\Facades\DB; |
|||
|
|||
class AgentStatistics extends Chart |
|||
{ |
|||
public function __construct() |
|||
{ |
|||
parent::__construct(); |
|||
$this->setUpOptions(); |
|||
} |
|||
|
|||
/** |
|||
* 初始化图表配置 |
|||
*/ |
|||
protected function setUpOptions() |
|||
{ |
|||
$this->options([ |
|||
'chart' => [ |
|||
//'width' => '180%',
|
|||
'type' => 'bar', |
|||
'events' => [ |
|||
], |
|||
'toolbar' => ['show' => false], |
|||
], |
|||
'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' => [ |
|||
'fontSize' => '12px' |
|||
] |
|||
], |
|||
], |
|||
'yaxis' => [ |
|||
'show' => true |
|||
], |
|||
'tooltip' => [ |
|||
'x' => ['show' => true], |
|||
], |
|||
]); |
|||
} |
|||
|
|||
/** |
|||
* 处理图表数据 |
|||
*/ |
|||
protected function buildData() |
|||
{ |
|||
$query = Agent::query() |
|||
->select('*'); |
|||
|
|||
|
|||
$dateTime = request('created_at', 0); |
|||
if ($dateTime) { |
|||
$query->whereBetween('created_at',$dateTime); |
|||
} |
|||
|
|||
switch (request('time_key', 0)) { |
|||
case '1': |
|||
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time")); |
|||
break; |
|||
case '30': |
|||
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at)) AS statistics_time")); |
|||
break; |
|||
case '365': |
|||
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at)) AS statistics_time")); |
|||
break; |
|||
default: |
|||
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time")); |
|||
} |
|||
$users = $query->groupBy('statistics_time') |
|||
->orderBy('statistics_time') |
|||
->get(); |
|||
|
|||
$userNum = 0; |
|||
$userArr = []; |
|||
|
|||
foreach ($users as $user) { |
|||
$userNum += $user->sum_price; |
|||
array_push($userArr,$userNum); |
|||
} |
|||
|
|||
|
|||
$this->withData([ |
|||
[ |
|||
'name' => '代理商数量', |
|||
'data' => $userArr |
|||
], |
|||
] |
|||
); |
|||
$this->withCategories( |
|||
Arr::pluck($users,'statistics_time') |
|||
); |
|||
|
|||
} |
|||
|
|||
public function withData(array $data) |
|||
{ |
|||
return $this->option('series', $data); |
|||
} |
|||
|
|||
/** |
|||
* 设置图表类别. |
|||
* |
|||
* @param array $data |
|||
* |
|||
* @return $this |
|||
*/ |
|||
public function withCategories(array $data) |
|||
{ |
|||
return $this->option('xaxis.categories', $data); |
|||
} |
|||
|
|||
/** |
|||
* 渲染图表 |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function render() |
|||
{ |
|||
$this->buildData(); |
|||
|
|||
return parent::render(); |
|||
} |
|||
} |
|||
@ -0,0 +1,151 @@ |
|||
<?php |
|||
|
|||
namespace App\Admin\Metrics\Examples; |
|||
|
|||
use App\Common\OrderStatus; |
|||
use App\Models\Agent; |
|||
use App\Models\Order; |
|||
use App\Models\Supplier; |
|||
use App\Models\User; |
|||
use Dcat\Admin\Admin; |
|||
use Dcat\Admin\Widgets\ApexCharts\Chart; |
|||
use Dcat\Admin\Widgets\Metrics\Bar; |
|||
use Illuminate\Http\Request; |
|||
use Illuminate\Support\Arr; |
|||
use Illuminate\Support\Facades\DB; |
|||
|
|||
class SupplierStatistics extends Chart |
|||
{ |
|||
public function __construct() |
|||
{ |
|||
parent::__construct(); |
|||
$this->setUpOptions(); |
|||
} |
|||
|
|||
/** |
|||
* 初始化图表配置 |
|||
*/ |
|||
protected function setUpOptions() |
|||
{ |
|||
$this->options([ |
|||
'chart' => [ |
|||
//'width' => '180%',
|
|||
'type' => 'bar', |
|||
'events' => [ |
|||
], |
|||
'toolbar' => ['show' => false], |
|||
], |
|||
'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' => [ |
|||
'fontSize' => '12px' |
|||
] |
|||
], |
|||
], |
|||
'yaxis' => [ |
|||
'show' => true |
|||
], |
|||
'tooltip' => [ |
|||
'x' => ['show' => true], |
|||
], |
|||
]); |
|||
} |
|||
|
|||
/** |
|||
* 处理图表数据 |
|||
*/ |
|||
protected function buildData() |
|||
{ |
|||
$query = Supplier::query() |
|||
->select('*'); |
|||
|
|||
|
|||
$dateTime = request('created_at', 0); |
|||
if ($dateTime) { |
|||
$query->whereBetween('created_at',$dateTime); |
|||
} |
|||
|
|||
switch (request('time_key', 0)) { |
|||
case '1': |
|||
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time")); |
|||
break; |
|||
case '30': |
|||
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at)) AS statistics_time")); |
|||
break; |
|||
case '365': |
|||
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at)) AS statistics_time")); |
|||
break; |
|||
default: |
|||
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time")); |
|||
} |
|||
$users = $query->groupBy('statistics_time') |
|||
->orderBy('statistics_time') |
|||
->get(); |
|||
|
|||
$userNum = 0; |
|||
$userArr = []; |
|||
|
|||
foreach ($users as $user) { |
|||
$userNum += $user->sum_price; |
|||
array_push($userArr,$userNum); |
|||
} |
|||
|
|||
|
|||
$this->withData([ |
|||
[ |
|||
'name' => '代理商数量', |
|||
'data' => $userArr |
|||
], |
|||
] |
|||
); |
|||
$this->withCategories( |
|||
Arr::pluck($users,'statistics_time') |
|||
); |
|||
|
|||
} |
|||
|
|||
public function withData(array $data) |
|||
{ |
|||
return $this->option('series', $data); |
|||
} |
|||
|
|||
/** |
|||
* 设置图表类别. |
|||
* |
|||
* @param array $data |
|||
* |
|||
* @return $this |
|||
*/ |
|||
public function withCategories(array $data) |
|||
{ |
|||
return $this->option('xaxis.categories', $data); |
|||
} |
|||
|
|||
/** |
|||
* 渲染图表 |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function render() |
|||
{ |
|||
$this->buildData(); |
|||
|
|||
return parent::render(); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue