repository = $repository; $this->validator = $validator; } /** * 列表 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function index(Request $request) { $lists = $this->repository->paginate($request->get('per_page', self::PAGE_NUM)); return Response::success($lists); } /** * 创建 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource|void * @throws \Illuminate\Validation\ValidationException * Author: Mead */ public function store(Request $request) { $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE)); $this->validate($request, [ 'account' => [ Rule::unique('school_teachers')->whereNull('deleted_at'), Rule::unique('base_admins', 'username')->whereNull('deleted_at'), ], 'email' => [ Rule::unique('school_teachers')->whereNull('deleted_at'), Rule::unique('base_admins')->whereNull('deleted_at') ] ]); $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE))); if ($request->filled('password')) { if ($msg = check_password($request->get('password'))) { return Response::fail($msg); } } else { $data['password'] = $data['account']; } if (!$request->filled('department_id')) { $data['department_id'] = 0; } try { $data['is_register'] = 0; $model = $this->repository->create($data); return Response::success($model); } catch (\Exception $e) { return $this->error($e); } } /** * 详情 * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function show($id) { $data = $this->repository->find($id); return Response::success($data); } /** * 更新 * @param Request $request * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource|void * @throws \Illuminate\Validation\ValidationException * Author: Mead */ public function update(Request $request, $id) { $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE)); $this->validate($request, [ 'account' => [ Rule::unique('school_teachers')->ignore($id)->whereNull('deleted_at'), Rule::unique('base_admins', 'username')->ignore($id, 'type_id')->where('type', Teacher::class)->whereNull('deleted_at'), ], 'email' => [ Rule::unique('school_teachers')->ignore($id)->whereNull('deleted_at'), Rule::unique('base_admins')->ignore($id, 'type_id')->where('type', Teacher::class)->whereNull('deleted_at') ] ]); $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE))); if ($request->filled('password')) { if ($msg = check_password($request->get('password'))) { return Response::fail($msg); } } else { unset($data['password']); } try { $model = $this->repository->update($data, $id); return Response::success($model); } catch (\Exception $e) { return $this->error($e); } } /** * 删除 * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function destroy($id) { $admin = login_admin(); if (!optional($admin)->is_admin) { return $this->error('您暂无权限操作'); } try { $this->repository->skipPresenter()->delete($id); return Response::success(null, T('successfully delete.')); } catch (\Exception $exception) { return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR); } } /** * 批量删除 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function delete(Request $request) { $admin = login_admin(); if (!optional($admin)->is_admin) { return $this->error('您暂无权限操作'); } try { $this->validate($request, [ 'ids' => 'required|array', ]); $ids = $request->get('ids'); $this->repository->whereIn('id', $ids)->delete(); return Response::success(null, T('successfully delete.')); } catch (\Exception $exception) { return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR); } } /** * 导入 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException * Author: Mead */ public function import(Request $request) { $this->validate($request, [ 'id' => 'required|integer' ]); $resource = Resource::query()->where('id', $request->get('id'))->first(); if (!$resource) { return $this->errorFail(); } $this->dispatch(new ImportTeacherJob($resource['disk'], $resource['path'])); return Response::success(null, '正在导入,请稍后'); } /** * 选项 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * Author: Mead */ public function selectOptions(Request $request) { $data = $this->repository->skipPresenter()->all(['name', 'id', 'account']); return Response::success($data); } /** * 导出数据 * Author: Mead */ public function export(Request $request) { $this->validate($request, [ 'ids' => 'required|array', 'fields' => 'sometimes|array', 'type' => 'required' ]); $ids = $request->get('ids'); $name = time(); return (new TeacherExport($request->get('fields', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])))->forIds($ids)->download($name . '.xlsx', null, [ 'Access-Control-Allow-Origin' => '*', 'Access-Control-Allow-Methods' => '*', 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With', 'Access-Control-Expose-Headers' => 'Content-Disposition', 'Content-type' => 'application/octet-stream', 'Content-Disposition' => 'attachment; filename=' . $name . '.xlsx', ]); } /** * 暂停 * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource * @throws \Illuminate\Validation\ValidationException */ public function pause(Request $request) { $this->validate($request, [ 'id' => 'required|integer', 'type' => 'sometimes|nullable|integer', ]); $status = ModelStatusEnum::PAUSE; if ($request->get('type')) { $status = ModelStatusEnum::OK; } $re = Teacher::query()->where('id', $request->get('id'))->update(['status' => $status]); if ($re) { return Response::success([]); } return $this->error('操作失败'); } }