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

197 lines
9.9 KiB

<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Form\Follow\EditEnrollStatusForm;
use App\Admin\Actions\Form\Follow\FollowRecordForm;
use App\Admin\Renderable\UserFamilyMeberTable;
use App\Admin\Renderable\UserFamilyTable;
use App\Models\AdminFollowShow;
use App\Models\AdmissionNewStudents;
use App\Models\SecondaryCollege;
use App\Models\Speciality;
use App\Models\UserFollowRecord;
use App\Models\UserFollowStatus;
use App\Models\UsersMember;
use App\Services\PublicServices;
use Dcat\Admin\Admin;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Grid;
use Dcat\Admin\Widgets\Modal;
use Dcat\Admin\Widgets\Table;
use Illuminate\Support\Facades\DB;
class UserFollowRecordController extends AdminController
{
public $title = '新生名单管理';
protected function grid(): Grid
{
return Grid::make(new UsersMember(), function (Grid $grid) {
$grid->model()->with(['followRecordHasOne']);
$showInfo = AdminFollowShow::query()->where(['user_id' => Admin::user()['id']])->first();
$followList = UserFollowStatus::query()->pluck('name', 'id')->toArray();
$followList[0] = '未联系';
// 设置学生类型默认值
$req = request()->merge(['identity' => !empty(request()->get('identity', 1)) ? request()->get('identity', 1) : 1]);
// 显示该显示的数据
$speciality_id = [];
if ($showInfo) {
if ($showInfo['type'] == '1') {
$speciality_id = Speciality::query()->whereIn("secondary_college_id", $showInfo['secondary_college_id'])->pluck('id')->toArray();;
} else {
$speciality_id = $showInfo['speciality_id'];
}
}
$grid->model()->whereIn('speciality_id', $speciality_id);
$grid->column('id')->sortable();
$grid->column('identity', '学生类型')->display(function () {
$iden = PublicServices::getInstance()->checkIsNewOldStudent($this->idcard);
return $iden == 1 ? "新生" : "老生";
});
$grid->column('mobile', '手机');
$grid->column('unique_number', '用户唯一识别码');
$grid->column('name', '姓名');
$grid->column('idcard', '身份证');
$grid->column('sex', '性别')->display(function () {
return $this->sex == 0 ? "未知" : ($this->sex == 1 ? "" : "");
});
$grid->column('secondary_college_id', '二级学院')->display(function () {
$info = Speciality::query()->where("id", $this->speciality_id)->first();
if (!empty($info)) {
$secondaryInfo = SecondaryCollege::query()->where("id", $info->secondary_college_id)->first();
if (!empty($secondaryInfo)) {
return $secondaryInfo->name;
}
}
})->help("未显示学院时请检查是否已经分配专业");
$grid->column('speciality_id', '专业')->display(function () {
$info = Speciality::where("id", $this->speciality_id)->first();
if (!empty($info)) {
return $info->speciality_name;
}
})->help("未显示专业时请检查是否已经分配专业");
$grid->column('status', '状态')->using([1 => "正常", 2 => "禁用"]);
$grid->column('enroll_status', "录取状态")->using(['1' => '已录取', '2' => '取消录取']);
$grid->column('followRecordHasOne.follow_id', "回访状态")->display(function ($val) {
return (int)$val;
})->using($followList)->expand(function () use ($followList) {
$titles = ['ID', '回访状态', '回访状态', '回访时间', '用户ID'];
$data = UserFollowRecord::query()
->where(['unique_number' => $this['unique_number']])
->orderByDesc('id')
->get(['id', 'follow_id', 'theme', 'follow_time', 'user_id'])
->map(function ($val) use ($followList) {
$val->follow_id = $followList[$val->follow_id] ?? '';
return $val;
})
->toArray();
return Table::make($titles, $data);
});
$grid->column('is_test', " 测试账号 ")->display(function () {
if ($this->is_test == UsersMember::IS_TEST_YES) {
return "";
}
return "";
})->help("为测试账号时则不受系统开放时间限制");
$grid->column('create_time', '注册时间')->display(function () {
if (!empty($this->create_time)) {
return date("Y-m-d H:i:s", $this->create_time);
}
})->sortable();
$grid->filter(function (Grid\Filter $filter) use ($followList, $showInfo) {
$filter->panel();
$filter->expand();
$filter->equal('id', 'ID')->width(2);
$filter->equal('mobile', '手机')->width(2);
$filter->equal('name', '姓名')->width(2);
$filter->equal('idcard', '身份证')->width(2);
$filter->equal('enroll_status', '录取状态')->select(['1' => '已录取', '2' => '取消录取'])->width(2);
$filter->where('follow_status', function ($query) {
$table1 = UsersMember::query()->getModel()->getTable();
$table2 = UserFollowRecord::query()->getModel()->getTable();
$all = DB::table("{$table1} as aa")
->leftJoin("{$table2} as bb", function ($join) {
$join->on("aa.unique_number", "=", "bb.unique_number")->where(["bb.is_abandon" => "1"]);
})
->where(function ($query) {
if ($this->input == 0) {
$query->whereNull("bb.id");
} else {
$query->where(["bb.follow_id" => $this->input]);
}
})
->pluck('aa.unique_number')
->toArray();
$query->whereIn('unique_number', $all);
}, '回访状态')->select($followList)->width(2);
$filter->where("identity", function ($query) {
$studentsIds = AdmissionNewStudents::query()->where([
"is_new_student" => $this->input
])->get()->toArray();
if (!empty($studentsIds)) {
$studentsIds = array_column($studentsIds, "idCard");
}
$query->whereIn('idcard', $studentsIds);
}, '学生类型')->select([
"1" => "新生",
"2" => "老生"
])->default("1")->width(2);
$filter->where("secondary_college_id", function ($query) {
$specialityIds = Speciality::query()->where("secondary_college_id", $this->input)->get()->toArray();
if (!empty($specialityIds)) {
$specialityIds = array_column($specialityIds, "id");
}
$query->whereIn('speciality_id', $specialityIds);
}, '二级学院')->select(function () use ($showInfo) {
return SecondaryCollege::query()->whereIn('id', $showInfo['secondary_college_id'] ?? [])->pluck("name", "id")->toArray();
})->load('speciality_id', '/api/getSpecialityList')->width(3);
$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);
$filter->between('create_time', '注册时间')->datetime()->toTimestamp()->width(3);
});
$grid->withBorder();
$grid->disableCreateButton();
$grid->disableEditButton();
$grid->disableViewButton();
$grid->disableDeleteButton();
$grid->actions(function (Grid\Displayers\Actions $actions) {
if (Admin::user()->isRole('fuDaoYuan') || Admin::user()->isRole('administrator') || Admin::user()->isRole('System')) {
$actions->append(Modal::make()
->xl()
->title('新增回访记录')
->button('<i class="feather icon-plus btn-sm"> 新增回访记录</i>&nbsp;&nbsp;&nbsp;&nbsp;')
->body(FollowRecordForm::make()->payload(['unique_number' => $actions->row['unique_number']])));
}
if (Admin::user()->isRole('AdmissionOffice') || Admin::user()->isRole('administrator') || Admin::user()->isRole('System')) {
$actions->append(Modal::make()
->xl()
->title('修改录取状态')
->button('<i class="feather icon-edit-2 btn-sm"> 修改录取状态</i>&nbsp;&nbsp;&nbsp;&nbsp;')
->body(EditEnrollStatusForm::make()->payload(['unique_number' => $actions->row['unique_number'], 'enroll_status' => $this['enroll_status']])));
}
});
});
}
}