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.
121 lines
4.8 KiB
121 lines
4.8 KiB
<?php |
|
|
|
namespace App\Admin\Controllers; |
|
|
|
use App\Admin\Metrics\Examples\Follow\AllColleges; |
|
use App\Admin\Metrics\Examples\Follow\AllCollegesCharts; |
|
use App\Admin\Repositories\UserFollowOverview; |
|
use App\Models\AdminFollowShow; |
|
use App\Models\SecondaryCollege; |
|
use App\Models\Speciality; |
|
use App\Models\UserFollowStatus; |
|
use Dcat\Admin\Admin; |
|
use Dcat\Admin\Grid; |
|
use Dcat\Admin\Http\Controllers\AdminController; |
|
use Dcat\Admin\Layout\Column; |
|
use Dcat\Admin\Layout\Content; |
|
use Dcat\Admin\Layout\Row; |
|
use Dcat\Admin\Widgets\Card; |
|
use Illuminate\Http\Request; |
|
|
|
class UserFollowOverviewController extends AdminController |
|
{ |
|
public $title = '回访统计'; |
|
|
|
public function index(Content $content): Content |
|
{ |
|
return $content |
|
->header('数据概览') |
|
->body(function ($row) { |
|
$row->column(12, function (Column $column) { |
|
$column->row(function (Row $row) { |
|
$row->column(6, Card::make('各学院新生录取统计', AllCollegesCharts::make())); |
|
$row->column(6, new AllColleges(['title' => '全校新生录取人数', 'collagesId' => 0])); |
|
}); |
|
}); |
|
}) |
|
->body($this->grid()); |
|
} |
|
|
|
protected function grid(): Grid |
|
{ |
|
return Grid::make(new UserFollowOverview(), function (Grid $grid) { |
|
$grid->disableCreateButton(); |
|
$grid->disableActions(); |
|
$grid->disableRefreshButton(); |
|
$grid->disableRowSelector(); |
|
$grid->disableToolbar(); |
|
$grid->paginate(10); |
|
|
|
$followStatus = UserFollowStatus::query()->get()->toArray(); |
|
$showInfo = AdminFollowShow::query()->where(['user_id' => Admin::user()['id']])->first(); |
|
$collegeAll = SecondaryCollege::query()->whereIn('id', $showInfo['secondary_college_id'] ?? [])->pluck("name", "id")->toArray(); |
|
|
|
|
|
$grid->combine('总录取', ['enroll_number', 'enroll_man_student', 'enroll_girl_student']); |
|
$grid->combine('未联系', ['out_number', 'out_man_student', 'out_girl_student']); |
|
foreach ($followStatus as $k => $v) { |
|
$grid->combine($v['name'], ["total_number{$v['id']}", "man_student{$v['id']}", "girl_student{$v['id']}"]); |
|
} |
|
|
|
$grid->column('secondary_college_id', '二级学院'); |
|
$grid->column('speciality_name', '专业'); |
|
$grid->column('enroll_number', '总人数'); |
|
$grid->column('enroll_man_student', '男生'); |
|
$grid->column('enroll_girl_student', '女生'); |
|
$grid->column('out_number', '总人数'); |
|
$grid->column('out_man_student', '男生'); |
|
$grid->column('out_girl_student', '女生'); |
|
|
|
foreach ($followStatus as $k => $v) { |
|
$grid->column("total_number{$v['id']}", '总人数'); |
|
$grid->column("man_student{$v['id']}", '男生'); |
|
$grid->column("girl_student{$v['id']}", '女生'); |
|
} |
|
|
|
$grid->filter(function (Grid\Filter $filter) use ($collegeAll, $showInfo) { |
|
$filter->panel(); |
|
$filter->expand(); |
|
$filter->equal('secondary_college_id', '二级学院') |
|
->select($collegeAll) |
|
->load('speciality_id', '/api/getSpecialityList') |
|
->width(3) |
|
->ignore(); |
|
$filter->equal('speciality_id', '专业') |
|
->select(function () use ($showInfo) { |
|
$list = Speciality::query()->whereIn('id', $showInfo['speciality_id'] ?? [])->get()->toArray(); |
|
if (empty($list)) { |
|
return []; |
|
} |
|
$select = []; |
|
foreach ($list as $item) { |
|
$college = SecondaryCollege::query()->where("id", $item["secondary_college_id"])->first(); |
|
$select[$item["id"]] = $item["speciality_name"] . "({$college->name})"; |
|
} |
|
|
|
return $select; |
|
}) |
|
->width(3) |
|
->ignore(); |
|
}); |
|
}); |
|
} |
|
|
|
|
|
/** |
|
* @desc 二级联动:学院下面的专业数据 |
|
* @author 何鸠鸠 |
|
*/ |
|
public function getSpecialityList(Request $request): array |
|
{ |
|
$provinceId = $request->get('q'); |
|
|
|
$list = Speciality::query()->where("secondary_college_id", $provinceId)->get()->toArray(); |
|
$select = []; |
|
foreach ($list as $item) { |
|
$college = SecondaryCollege::query()->where("id", $item["secondary_college_id"])->first(); |
|
$select[] = ['id' => $item["id"], 'text' => $item["speciality_name"] . "({$college->name})"]; |
|
} |
|
return $select; |
|
} |
|
}
|
|
|