123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- <?php
- namespace App\Admin\Controllers;
- use Slowlyo\OwlAdmin\Admin;
- use Illuminate\Http\Request;
- use App\Services\CoachInfoRecordService;
- use Slowlyo\OwlAdmin\Controllers\AdminController;
- /**
- * @group 后台
- * 技师信息记录
- *
- * @property CoachInfoRecordService $service
- */
- class CoachInfoRecordController extends AdminController
- {
- protected string $serviceName = CoachInfoRecordService::class;
- public function list()
- {
- $crud = $this->baseCRUD()
- ->filterTogglable(false)
- ->headerToolbar([
- $this->createButton('dialog'),
- ...$this->baseHeaderToolBar()
- ])
- ->columns([
- amis()->TableColumn('id', 'ID')->sortable(),
- amis()->TableColumn('coach_id', '技师编号'),
- amis()->TableColumn('nickname', '昵称'),
- amis()->TableColumn('avatar', '头像'),
- amis()->TableColumn('gender', '性别'),
- amis()->TableColumn('mobile', '服务电话'),
- amis()->TableColumn('birthday', '出生日期'),
- amis()->TableColumn('work_years', '从业年份')->sortable(),
- amis()->TableColumn('intention_city', '意向城市'),
- amis()->TableColumn('introduction', '个人简介'),
- amis()->TableColumn('auditor', '审核人'),
- amis()->TableColumn('audit_time', '审核时间'),
- amis()->TableColumn('audit_remark', '审核回执'),
- amis()->TableColumn('state', '状态'),
- amis()->TableColumn('created_at', admin_trans('admin.created_at'))->type('datetime')->sortable(),
- amis()->TableColumn('updated_at', admin_trans('admin.updated_at'))->type('datetime')->sortable(),
- $this->rowActions('dialog')
- ]);
- return $this->baseList($crud);
- }
- public function form($isEdit = false)
- {
- return $this->baseForm()->body([
- amis()->TextControl('coach_id', '技师编号'),
- amis()->TextControl('nickname', '昵称'),
- amis()->TextControl('avatar', '头像'),
- amis()->TextControl('gender', '性别'),
- amis()->TextControl('mobile', '服务电话'),
- amis()->TextControl('birthday', '出生日期'),
- amis()->TextControl('work_years', '从业年份'),
- amis()->TextControl('intention_city', '意向城市'),
- amis()->TextControl('introduction', '个人简介'),
- amis()->TextControl('auditor', '审核人'),
- amis()->TextControl('audit_time', '审核时间'),
- amis()->TextControl('audit_remark', '审核回执'),
- amis()->TextControl('state', '状态'),
- ]);
- }
- public function detail()
- {
- return $this->baseDetail()->body([
- amis()->TextControl('id', 'ID')->static(),
- amis()->TextControl('coach_id', '技师编号')->static(),
- amis()->TextControl('nickname', '昵称')->static(),
- amis()->TextControl('avatar', '头像')->static(),
- amis()->TextControl('gender', '性别')->static(),
- amis()->TextControl('mobile', '服务电话')->static(),
- amis()->TextControl('birthday', '出生日期')->static(),
- amis()->TextControl('work_years', '从业年份')->static(),
- amis()->TextControl('intention_city', '意向城市')->static(),
- amis()->TextControl('introduction', '个人简介')->static(),
- amis()->TextControl('auditor', '审核人')->static(),
- amis()->TextControl('audit_time', '审核时间')->static(),
- amis()->TextControl('audit_remark', '审核回执')->static(),
- amis()->TextControl('state', '状态')->static(),
- amis()->TextControl('created_at', admin_trans('admin.created_at'))->static(),
- amis()->TextControl('updated_at', admin_trans('admin.updated_at'))->static(),
- ]);
- }
- /**
- * [审核]审核技师申请
- *
- * @description 审核技师的申请记录,可通过或驳回
- *
- * @header x-xsrf-token required CSRF令牌 Example: your_csrf_token
- *
- * @bodyParam info_record_id integer required 申请记录ID Example: 1
- * @bodyParam info_record_state integer required 审核状态(2:通过 3:驳回) Example: 2
- * @bodyParam audit_remark string required 审核意见 Example: 资料符合要求,审核通过
- *
- * @response scenario=success {
- * "code": 200,
- * "message": "操作成功"
- * }
- *
- * @response status=400 scenario="已审核" {
- * "message": "该申请已审核"
- * }
- *
- * @response status=404 scenario="不存在" {
- * "message": "申请记录不存在"
- * }
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function audit(Request $request)
- {
- $validated = $request->validate([
- 'id' => 'required|integer|exists:coach_info_records,id',
- 'info_record_state' => 'required|integer|in:2,3', // 2:通过 3:驳回
- 'audit_remark' => 'nullable|string|max:255', // 改为可选
- ]);
- $result = $this->service->audit(
- $validated['id'],
- $validated['info_record_state'],
- $validated['audit_remark'] ?? '', // 添加默认值
- Admin::user()->id
- );
- return $this->autoResponse($result);
- }
- /**
- * [技师基本信息]修改技师基本信息
- *
- * @description 修改技师的基本信息,包括昵称、性别、手机号等基础字段
- *
- * @header x-xsrf-token required CSRF令牌 Example: your_csrf_token
- *
- * @bodyParam id integer required 记录ID Example: 1
- * @bodyParam nickname string nullable 昵称(2-20个字符) Example: 张三
- * @bodyParam avatar string nullable 头像图片 Example: path/to/avatar.jpg
- * @bodyParam formal_photo string nullable 正装照片 Example: path/to/formal.jpg
- * @bodyParam gender integer nullable 性别(1:男 2:女) Example: 1
- * @bodyParam mobile string nullable 手机号 Example: 13800138000
- * @bodyParam birthday date nullable 出生日期 Example: 1990-01-01
- * @bodyParam work_years integer nullable 工作年限(0-99) Example: 5
- * @bodyParam intention_city string nullable 意向城市 Example: 北京
- * @bodyParam introduction string nullable 个人简介(最多255字符) Example: 专业按摩师,从业5年
- * @bodyParam life_photos array nullable 生活照片数组
- * @bodyParam life_photos.* string required 生活照片路径 Example: path/to/photo.jpg
- *
- * @response scenario=success {
- * "code": 200,
- * "message": "修改成功"
- * }
- *
- * @response status=404 scenario="不存在" {
- * "message": "记录不存在"
- * }
- *
- * @response status=422 scenario="验证失败" {
- * "message": "验证错误",
- * "errors": {
- * "nickname": ["昵称不能少于2个字符"],
- * "gender": ["性别只能是1(男)或2(女)"],
- * "mobile": ["手机号格式不正确"]
- * }
- * }
- */
- public function updateInfo(Request $request)
- {
- $validated = $request->validate([
- 'id' => 'required|integer|exists:coach_info_records,id',
- 'nickname' => 'nullable|string|min:2|max:20',
- 'avatar' => 'nullable|string',
- 'formal_photo' => 'nullable|string',
- 'gender' => 'nullable|integer|in:1,2',
- 'mobile' => 'nullable|string|regex:/^1[3-9]\d{9}$/',
- 'birthday' => 'nullable|date',
- 'work_years' => 'nullable|integer|min:0|max:99',
- 'intention_city' => 'nullable|string|max:50',
- 'introduction' => 'nullable|string|max:255',
- 'life_photos' => 'nullable|string'
- ], [
- 'nickname.min' => '昵称不能少于2个字符',
- 'nickname.max' => '昵称不能超过20个字符',
- 'gender.in' => '性别只能是1(男)或2(女)',
- 'mobile.regex' => '手机号格式不正确',
- 'work_years.min' => '工作年限不能小于0年',
- 'work_years.max' => '工作年限不能超过99年',
- ]);
- $result = $this->service->updateInfo($validated);
- return $this->autoResponse($result);
- }
- }
|