6
0
Fork 0
jiqu-library-server/app/Admin/Metrics/Users.php

210 lines
6.8 KiB
PHP

<?php
namespace App\Admin\Metrics;
use App\Models\UserInfo;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Metrics\Donut;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
class Users extends Donut
{
/**
* 初始化卡片内容
*/
protected function init()
{
parent::init();
$this->title('累计会员');
$this->contentWidth(5, 7);
$this->chartLabels(UserInfo::$agentLevelTexts);
$this->chartHeight(300);
$this->chartOption('chart.width', '300');
$this->chartOption('dataLabels.enabled', true);
// $this->chartOption('plotOptions.pie.donut.total.show', true);
$this->chartMarginBottom(50);
$this->chart->style('float: none;');
$color = Admin::color();
// $dark35 = $color->dark35();
$this->chartColors([
$color->primary(),
$color->warning(),
$color->danger(),
$color->info(),
$color->primary(),
$color->warning(),
$color->danger(),
$color->info(),
]);
}
/**
* 处理请求
*
* @param Request $request
*
* @return mixed|void
*/
public function handle(Request $request)
{
// 卡片内容
$nums = UserInfo::selectRaw('count(1) as num, agent_level')->groupBy('agent_level')->pluck('num', 'agent_level')->toArray();
$this->withContent($nums);
// dd($nums);
foreach (UserInfo::$agentLevelRanks as $rank) {
if (!isset($nums[$rank])) {
$nums[$rank] = 0;
}
}
// 图表数据
ksort($nums);
$this->withChart($nums);
}
/**
* 设置图表数据.
*
* @param array $data
*
* @return $this
*/
public function withChart(array $data)
{
// dd($data);
return $this->chart([
'series' => array_values($data),
'plotOptions' => [
'pie' => [
'donut' => [
'labels'=>[
'show'=>'true',
'total' => [
'show' => true,
'label'=>'会员总数',
],
],
],
],
],
]);
}
/**
* 卡片内容.
*
* @param int $finished
* @param int $pending
* @param int $rejected
* @param int $finished
* @param int $pending
* @param int $rejected
* @param int $rejected
*
* @return $this
*/
public function withContent($userCount)
{
$civilian = Arr::get($userCount, UserInfo::AGENT_LEVEL_CIVILIAN, 0);
$vip = Arr::get($userCount, UserInfo::AGENT_LEVEL_VIP, 0);
$community = Arr::get($userCount, UserInfo::AGENT_LEVEL_COMMUNITY, 0);
$district = Arr::get($userCount, UserInfo::AGENT_LEVEL_DISTRICT, 0);
$city = Arr::get($userCount, UserInfo::AGENT_LEVEL_CITY, 0);
$province = Arr::get($userCount, UserInfo::AGENT_LEVEL_PROVINCE, 0);
$branch = Arr::get($userCount, UserInfo::AGENT_LEVEL_BRANCH, 0);
$director = Arr::get($userCount, UserInfo::AGENT_LEVEL_DIRECTOR, 0);
$totalNum = array_sum($userCount);
return $this->content(
<<<HTML
<div class="col-12 d-flex flex-column flex-wrap text-center" style="max-width: 220px">
<div class="chart-info d-flex justify-content-between mt-1">
<div class="series-info d-flex align-items-center">
<span class="text-bold-600 ml-50">会员总数</span>
</div>
<div class="product-result">
<span>{$totalNum}</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1 mt-1" >
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-primary"></i>
<span class="text-bold-600 ml-50">粉丝</span>
</div>
<div class="product-result">
<span>{$civilian}</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1">
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-warning"></i>
<span class="text-bold-600 ml-50">店铺</span>
</div>
<div class="product-result">
<span>{$vip}</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1">
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-danger"></i>
<span class="text-bold-600 ml-50">社区</span>
</div>
<div class="product-result">
<span>{$community}</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1" >
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-info"></i>
<span class="text-bold-600 ml-50">区级</span>
</div>
<div class="product-result">
<span>{$district}</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1">
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-primary"></i>
<span class="text-bold-600 ml-50">市级</span>
</div>
<div class="product-result">
<span>{$city}</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1">
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-warning"></i>
<span class="text-bold-600 ml-50">省级</span>
</div>
<div class="product-result">
<span>{$province}</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1">
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-danger"></i>
<span class="text-bold-600 ml-50">分公司</span>
</div>
<div class="product-result">
<span>{$branch}</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1">
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-info"></i>
<span class="text-bold-600 ml-50">董事</span>
</div>
<div class="product-result">
<span>{$director}</span>
</div>
</div>
</div>
HTML
);
}
}