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.
		
		
		
		
		
			
		
			
				
					
					
						
							134 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							134 lines
						
					
					
						
							2.9 KiB
						
					
					
				
								<?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],
							 | 
						|
											],
							 | 
						|
								
							 | 
						|
										]);
							 | 
						|
								    }
							 | 
						|
								}
							 |