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.
		
		
		
		
		
			
		
			
				
					
					
						
							111 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							111 lines
						
					
					
						
							2.2 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								namespace App\Admin\Metrics\Examples;
							 | 
						|
								
							 | 
						|
								use App\Models\Agent;
							 | 
						|
								use App\Models\Guide;
							 | 
						|
								use App\Models\Supplier;
							 | 
						|
								use Dcat\Admin\Admin;
							 | 
						|
								use Dcat\Admin\Widgets\Metrics\Donut;
							 | 
						|
								
							 | 
						|
								class NewDevices extends Donut
							 | 
						|
								{
							 | 
						|
									protected $labels = ['代理商', '供应商', '地接'];
							 | 
						|
								
							 | 
						|
									/**
							 | 
						|
									 * 初始化卡片内容
							 | 
						|
									 */
							 | 
						|
									protected function init()
							 | 
						|
									{
							 | 
						|
										parent::init();
							 | 
						|
								
							 | 
						|
										$color = Admin::color();
							 | 
						|
										$colors = [$color->primary(), $color->alpha('blue2', 0.5),Admin::color()->yellow()];
							 | 
						|
								
							 | 
						|
										$this->title('入驻比例');;
							 | 
						|
										$this->chartLabels($this->labels);
							 | 
						|
										// 设置图表颜色
							 | 
						|
										$this->chartColors($colors);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/**
							 | 
						|
									 * 渲染模板
							 | 
						|
									 *
							 | 
						|
									 * @return string
							 | 
						|
									 */
							 | 
						|
									public function render()
							 | 
						|
									{
							 | 
						|
										$this->fill();
							 | 
						|
								
							 | 
						|
										return parent::render();
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/**
							 | 
						|
									 * 写入数据.
							 | 
						|
									 *
							 | 
						|
									 * @return void
							 | 
						|
									 */
							 | 
						|
									public function fill()
							 | 
						|
									{
							 | 
						|
										$agent = Agent::query()->count();
							 | 
						|
										$supplier = Supplier::query()->count();
							 | 
						|
										$guide = Guide::query()->count();
							 | 
						|
										$this->withContent($agent, $supplier, $guide);
							 | 
						|
								
							 | 
						|
										// 图表数据
							 | 
						|
										$this->withChart([$agent, $supplier, $guide]);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/**
							 | 
						|
									 * 设置图表数据.
							 | 
						|
									 *
							 | 
						|
									 * @param array $data
							 | 
						|
									 *
							 | 
						|
									 * @return $this
							 | 
						|
									 */
							 | 
						|
									public function withChart(array $data)
							 | 
						|
									{
							 | 
						|
										return $this->chart([
							 | 
						|
											'series' => $data
							 | 
						|
										]);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/**
							 | 
						|
									 * 设置卡片头部内容.
							 | 
						|
									 *
							 | 
						|
									 * @param mixed $desktop
							 | 
						|
									 * @param mixed $mobile
							 | 
						|
									 *
							 | 
						|
									 * @return $this
							 | 
						|
									 */
							 | 
						|
									protected function withContent($desktop, $mobile, $unkonw)
							 | 
						|
									{
							 | 
						|
										$blue = Admin::color()->alpha('blue2', 0.5);
							 | 
						|
										$yellow = Admin::color()->yellow();
							 | 
						|
										$style = 'margin-bottom: 8px';
							 | 
						|
										$labelWidth = 120;
							 | 
						|
								
							 | 
						|
										return $this->content(
							 | 
						|
											<<<HTML
							 | 
						|
								<div class="d-flex pl-1 pr-1 pt-1" style="{$style}">
							 | 
						|
								    <div style="width: {$labelWidth}px">
							 | 
						|
								        <i class="fa fa-circle text-primary"></i> {$this->labels[0]}
							 | 
						|
								    </div>
							 | 
						|
								    <div>{$desktop}</div>
							 | 
						|
								</div>
							 | 
						|
								<div class="d-flex pl-1 pr-1" style="{$style}">
							 | 
						|
								    <div style="width: {$labelWidth}px">
							 | 
						|
								        <i class="fa fa-circle" style="color: $blue"></i> {$this->labels[1]}
							 | 
						|
								    </div>
							 | 
						|
								    <div>{$mobile}</div>
							 | 
						|
								</div>
							 | 
						|
								<div class="d-flex pl-1 pr-1" style="{$style}">
							 | 
						|
								    <div style="width: {$labelWidth}px">
							 | 
						|
								        <i class="fa fa-circle" style="color: $yellow"></i> {$this->labels[2]}
							 | 
						|
								    </div>
							 | 
						|
								    <div>{$unkonw}</div>
							 | 
						|
								</div>
							 | 
						|
								HTML
							 | 
						|
										);
							 | 
						|
									}
							 | 
						|
								}
							 |