海工商新版后台
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.
 
 

120 lines
3.6 KiB

<?php
namespace App\Admin\Metrics\Examples\Follow;
use App\Models\AdmissionNewStudents;
use App\Models\Speciality;
use App\Models\UsersMember;
use Dcat\Admin\Widgets\Metrics\Round;
use Illuminate\Support\Facades\DB;
class AllColleges extends Round
{
public $allData;
// 构造方法参数必须设置默认值
public function __construct($data)
{
$this->allData = $data;
parent::__construct();
}
/**
* 初始化卡片内容
*/
protected function init()
{
parent::init();
$this->title($this->allData['title']);
// 新生数据
$studentsIds = AdmissionNewStudents::query()->where(["is_new_student" => "1"])->pluck('idCard')->toArray();
$all = UsersMember::query()
->where(['enroll_status' => '1'])
->whereIn("idcard", $studentsIds)
->when($this->allData['collagesId'],function ($query) {
$specialityIds = Speciality::query()->where("secondary_college_id", $this->allData['collagesId'])->pluck('id')->toArray();
$query->whereIn('speciality_id', $specialityIds);
})
->select('sex', DB::raw('count(*) as total'))
->groupBy('sex')
->pluck('total', 'sex')
->toArray();
// 总人数
$total = array_sum($all);
// 男生
$man = $all[1] ?? 0;
// 女生
$girl = $all[2] ?? 0;
$manPercent = $total != 0 ? number_format(($man / $total) * 100) : 0;
$girlPercent = $total != 0 ? number_format(($girl / $total) * 100) : 0;
// 卡片内容
$this->withContent($total, $man, $girl)->height('220px');
$this->chartLabels(['男生', '女生']);
// 图表数据
$this->withChart([$manPercent, $girlPercent]);
// 总数
$this->chartTotal('全部', $total);
}
/**
* 设置图表数据.
* @param array $data
* @return $this
*/
public function withChart(array $data): AllColleges
{
return $this->chart([
'series' => $data,
]);
}
/**
* 卡片内容.
* @param int $finished
* @param int $pending
* @param int $rejected
* @return $this
*/
public function withContent(int $finished, int $pending, int $rejected): AllColleges
{
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 mb-1 mt-2" >
<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>{$finished}</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>{$pending}</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>{$rejected}</span>
</div>
</div>
</div>
HTML
);
}
}