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.
196 lines
9.8 KiB
196 lines
9.8 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'])->orderByDesc('id'); |
|
|
|
$showInfo = AdminFollowShow::query()->where(['user_id' => Admin::user()['id']])->first(); |
|
$followList = UserFollowStatus::query()->pluck('name', 'id')->toArray(); |
|
$followList[0] = '未联系'; |
|
|
|
// 显示该显示的数据 |
|
$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" => "老生" |
|
])->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->equal('is_test', '测试账号')->select(["1" => "否", "2" => "是"])->width(4); |
|
$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> ') |
|
->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> ') |
|
->body(EditEnrollStatusForm::make()->payload(['unique_number' => $actions->row['unique_number'], 'enroll_status' => $this['enroll_status']]))); |
|
} |
|
}); |
|
}); |
|
} |
|
}
|
|
|