3 changed files with 237 additions and 0 deletions
-
102app/AdminAgent/Controllers/ProductStatisticsController.php
-
134app/AdminAgent/Metrics/Examples/ProductStatistics.php
-
1app/AdminAgent/routes.php
@ -0,0 +1,102 @@ |
|||
<?php |
|||
|
|||
namespace App\AdminAgent\Controllers; |
|||
|
|||
use App\AdminAgent\Metrics\Examples\FinanceStatistics; |
|||
use App\AdminAgent\Metrics\Examples\OrderStatistics; |
|||
use App\AdminAgent\Metrics\Examples\ProductStatistics; |
|||
use App\AdminAgent\Metrics\Examples\UserStatistics; |
|||
use App\Common\OrderStatus; |
|||
use App\Common\ProductStatus; |
|||
use App\Models\AgentProduct; |
|||
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 ProductStatisticsController 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(4, function (Column $column) { |
|||
$column->row(Card::make('总数', function () { |
|||
$count = AgentProduct::query()->where('agent_id',Admin::user()->id)->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; |
|||
})); |
|||
}); |
|||
|
|||
$row->column(4, function (Column $column) { |
|||
$column->row(Card::make('上架', function () { |
|||
$profit = AgentProduct::query()->where('agent_id',Admin::user()->id)->where('status',ProductStatus::ON_SALE)->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">$profit</h2> |
|||
</div> |
|||
HTML; |
|||
})); |
|||
|
|||
}); |
|||
|
|||
$row->column(4, function (Column $column) { |
|||
$column->row(Card::make('下架', function () { |
|||
$unSale = AgentProduct::query() |
|||
->where('agent_id',Admin::user()->id) |
|||
->where('status',ProductStatus::SOLD_OUT) |
|||
->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">$unSale</h2> |
|||
</div> |
|||
HTML; |
|||
})); |
|||
|
|||
}); |
|||
|
|||
}) |
|||
->body(function (Row $row){ |
|||
$row->column(12,new ProductStatistics() |
|||
); |
|||
}); |
|||
} |
|||
} |
|||
@ -0,0 +1,134 @@ |
|||
<?php |
|||
|
|||
namespace App\AdminAgent\Metrics\Examples; |
|||
|
|||
use App\Common\DataTime; |
|||
use App\Common\OrderStatus; |
|||
use App\Models\Order; |
|||
use App\Models\User; |
|||
use Dcat\Admin\Admin; |
|||
use Dcat\Admin\Widgets\Metrics\Bar; |
|||
use Illuminate\Http\Request; |
|||
use Illuminate\Support\Arr; |
|||
use Illuminate\Support\Facades\DB; |
|||
|
|||
class ProductStatistics 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->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")); |
|||
} |
|||
$order = $query->groupBy('statistics_time') |
|||
->orderBy('statistics_time') |
|||
->get(); |
|||
|
|||
$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