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.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							118 lines
						
					
					
						
							2.2 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								namespace App\AdminAgent\Metrics\Examples;
							 | 
						|
								
							 | 
						|
								use App\Models\User;
							 | 
						|
								use Dcat\Admin\Admin;
							 | 
						|
								use Dcat\Admin\Widgets\Metrics\Donut;
							 | 
						|
								use Illuminate\Support\Arr;
							 | 
						|
								
							 | 
						|
								class NewDevices extends Donut
							 | 
						|
								{
							 | 
						|
									protected $labels = ['男性', '女性', '未知'];
							 | 
						|
								
							 | 
						|
									/**
							 | 
						|
									 * 初始化卡片内容
							 | 
						|
									 */
							 | 
						|
									protected function init()
							 | 
						|
									{
							 | 
						|
										parent::init();
							 | 
						|
								
							 | 
						|
										$color = Admin::color();
							 | 
						|
										$colors = [$color->primary(), $color->alpha('blue2', 0.5)];
							 | 
						|
								
							 | 
						|
										$this->title('用户性别');;
							 | 
						|
										$this->chartLabels($this->labels);
							 | 
						|
										// 设置图表颜色
							 | 
						|
										$this->chartColors($colors);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/**
							 | 
						|
									 * 渲染模板
							 | 
						|
									 *
							 | 
						|
									 * @return string
							 | 
						|
									 */
							 | 
						|
									public function render()
							 | 
						|
									{
							 | 
						|
										$this->fill();
							 | 
						|
								
							 | 
						|
										return parent::render();
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/**
							 | 
						|
									 * 写入数据.
							 | 
						|
									 *
							 | 
						|
									 * @return void
							 | 
						|
									 */
							 | 
						|
									public function fill()
							 | 
						|
									{
							 | 
						|
										$gender = User::query()->where('agent_id', Admin::user()->id)->pluck('gender');
							 | 
						|
										$man = $woman = $unkonw = 0;
							 | 
						|
										foreach ($gender as $v) {
							 | 
						|
											if ($v == 1) {
							 | 
						|
												$man++;
							 | 
						|
											} elseif ($v == 2) {
							 | 
						|
												$woman++;
							 | 
						|
											} else {
							 | 
						|
												$unkonw++;
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										$this->withContent($man, $woman, $unkonw);
							 | 
						|
								
							 | 
						|
										// 图表数据
							 | 
						|
										$this->withChart([$man,$woman, $unkonw]);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/**
							 | 
						|
									 * 设置图表数据.
							 | 
						|
									 *
							 | 
						|
									 * @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
							 | 
						|
										);
							 | 
						|
									}
							 | 
						|
								}
							 |