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

149 lines
4.1 KiB

<?php
namespace App\Admin\Metrics\Examples\Follow;
use App\Models\AdminFollowShow;
use App\Models\AdmissionNewStudents;
use App\Models\SecondaryCollege;
use App\Models\Speciality;
use App\Models\UsersMember;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Metrics\Round;
use Illuminate\Support\Facades\DB;
class AllEnrollSpeciality extends Round
{
// 保存自定义参数
protected $data = [];
// 构造方法参数必须设置默认值
public function __construct(array $data = [])
{
$this->data = $data;
parent::__construct();
}
/**
* 初始化卡片内容
*/
protected function init()
{
parent::init();
$this->title('各专业录取统计');
if (!empty($this->data['speciality_id'])) {
$specialityInfo = Speciality::query()->where('id', $this->data['speciality_id'])->first(['speciality_name', 'secondary_college_id']);
$name = "";
if ($specialityInfo) {
$name .= $specialityInfo['speciality_name'];
$collegeName = SecondaryCollege::query()->where('id', $specialityInfo['secondary_college_id'])->value('name');
if ($collegeName) {
$name .= "({$collegeName})";
}
}
} else {
$name = "当前专业:无";
}
$this->subTitle($name);
// 新生数据
$studentsIds = AdmissionNewStudents::query()->where(["is_new_student" => "1"])->pluck('idCard')->toArray();
$all = UsersMember::query()
->where(['enroll_status' => '1'])
->whereIn("idcard", $studentsIds)
->where('speciality_id', $this->data['speciality_id'])
->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;
$this->chartLabels(['总人数', '男生', '女生']);
$this->withContent($total, $man, $girl);
}
/**
* 设置图表数据.
*
* @param array $data
*
* @return $this
*/
public function withChart(array $data)
{
return $this->chart([
'series' => $data,
]);
}
/**
* @param int $percent
*
* @return $this
*/
public function up($percent)
{
return $this->footer(
"<i class=\"feather icon-trending-up text-success\" style=\"padding-left: 15px;\"></i> {$percent}人 为当前年份已导入新生人数"
);
}
/**
* 卡片内容.
*
* @param int $finished
* @param int $pending
* @param int $rejected
*
* @return $this
*/
public function withContent($finished, $pending, $rejected)
{
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
);
}
}