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
|
|
);
|
|
}
|
|
}
|