TeachersController.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <?php
  2. namespace App\Http\Controllers\Admin\School;
  3. use App\Exports\School\TeacherExport;
  4. use App\Http\Controllers\Controller;
  5. use App\Jobs\School\ImportTeacherJob;
  6. use App\Repositories\Models\Base\Admin;
  7. use App\Repositories\Models\Base\Resource;
  8. use App\Repositories\Models\School\Teacher;
  9. use App\Services\School\TeacherService;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Validation\Rule;
  12. use Jiannei\Response\Laravel\Support\Facades\Response;
  13. /**
  14. * 老师管理
  15. *
  16. * @package namespace App\Http\Controllers\Mentor;
  17. */
  18. class TeachersController extends Controller
  19. {
  20. protected $service;
  21. public function __construct(TeacherService $service)
  22. {
  23. parent::__construct();
  24. $this->service = $service;
  25. }
  26. /**
  27. * 列表
  28. * @param Request $request
  29. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  30. * @throws \Prettus\Repository\Exceptions\RepositoryException
  31. */
  32. public function index(Request $request)
  33. {
  34. $data = $this->service->handleList($request);
  35. return $this->response->success($data);
  36. }
  37. /**
  38. * 新增
  39. * @param Request $request
  40. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  41. * @throws \Illuminate\Validation\ValidationException
  42. * @throws \Prettus\Validator\Exceptions\ValidatorException
  43. */
  44. public function store(Request $request)
  45. {
  46. $data = $this->validateData($request, [
  47. 'name' => 'required',
  48. 'account' => ['required', Rule::unique('school_teachers')->whereNull('deleted_at')],
  49. 'password' => 'sometimes|min:6',
  50. 'headimg' => 'sometimes',
  51. 'sex' => 'sometimes',
  52. 'mobile' => 'nullable|mobile',
  53. 'email' => 'sometimes|email',
  54. 'department_id' => 'required|integer',
  55. 'year' => 'nullable',
  56. 'status' => 'required',
  57. ], [
  58. 'name' => '姓名',
  59. 'account' => '工号',
  60. 'password' => '密码',
  61. 'headimg' => '头像',
  62. 'sex' => '性别',
  63. 'mobile' => '手机号',
  64. 'email' => '邮箱',
  65. 'department_id' => '部门',
  66. 'status' => '状态'
  67. ]);
  68. $data['password'] = rk($data['account']);
  69. $model = $this->service->handleStore($data);
  70. return $this->response->created($model, '创建成功');
  71. }
  72. /**
  73. * 详情
  74. * @param Request $request
  75. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  76. * @throws \Illuminate\Validation\ValidationException
  77. */
  78. public function show(Request $request)
  79. {
  80. $this->validate($request, ['id' => 'required|integer']);
  81. $model = $this->service->handleProfile($request->get('id'));
  82. return $this->response->success($model);
  83. }
  84. /**
  85. * 编辑
  86. * @param Request $request
  87. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  88. * @throws \Illuminate\Validation\ValidationException
  89. * @throws \Prettus\Validator\Exceptions\ValidatorException
  90. */
  91. public function update(Request $request)
  92. {
  93. $data = $this->validateData($request, [
  94. 'id' => 'required|integer',
  95. 'name' => 'required',
  96. 'account' => [
  97. 'required',
  98. Rule::unique('school_teachers')->ignore($request->get('id', 0))->whereNull('deleted_at')
  99. ],
  100. 'headimg' => 'sometimes',
  101. 'sex' => 'sometimes',
  102. 'mobile' => 'nullable|mobile',
  103. 'email' => 'sometimes|email',
  104. 'department_id' => 'sometimes|integer',
  105. 'year' => 'nullable',
  106. 'status' => 'required',
  107. ], [
  108. 'name' => '姓名',
  109. 'account' => '工号',
  110. 'headimg' => '头像',
  111. 'sex' => '性别',
  112. 'mobile' => '手机号',
  113. 'email' => '邮箱',
  114. 'department_id' => '部门',
  115. 'status' => '状态'
  116. ]);
  117. $model = $this->service->handleUpdate($data);
  118. return $this->response->success($model, '创建成功');
  119. }
  120. /**
  121. * 删除
  122. * @param Request $request
  123. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  124. * @throws \Illuminate\Validation\ValidationException
  125. * @throws \Prettus\Validator\Exceptions\ValidatorException
  126. */
  127. public function destroy(Request $request)
  128. {
  129. $this->validate($request, ['id' => 'required|integer']);
  130. $re = $this->service->handleDelete($request->get('id'));
  131. if ($re) {
  132. return $this->response->ok('删除成功');
  133. }
  134. return $this->response->fail('删除失败');
  135. }
  136. /**
  137. * 批量删除
  138. * @param Request $request
  139. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  140. * @throws \Illuminate\Validation\ValidationException
  141. * @throws \Prettus\Validator\Exceptions\ValidatorException
  142. */
  143. public function batchDelete(Request $request)
  144. {
  145. $ids = $this->validateData($request, ['ids' => 'required|array']);
  146. $re = $this->service->handleBatchDelete($ids);
  147. if ($re) {
  148. return $this->response->ok('删除成功');
  149. }
  150. return $this->response->fail('删除失败');
  151. }
  152. /**
  153. * 选项
  154. * @must
  155. * @param Request $request
  156. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  157. * @throws \Prettus\Repository\Exceptions\RepositoryException
  158. */
  159. public function selectOptions(Request $request)
  160. {
  161. $lists = $this->service->handleSelectOptions($request);
  162. return $this->response->success($lists);
  163. }
  164. /**
  165. * 导入
  166. * @param Request $request
  167. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  168. * @throws \Illuminate\Validation\ValidationException
  169. * Author: Mead
  170. */
  171. public function importTeachers(Request $request)
  172. {
  173. $this->validate($request, [
  174. 'id' => 'required|integer'
  175. ]);
  176. $resource = Resource::query()->where('id', $request->get('id'))->first();
  177. if (!$resource) {
  178. return $this->errorFail();
  179. }
  180. $this->dispatch(new ImportTeacherJob($resource, login_admin_id()));
  181. return Response::success(null, '正在导入,请稍后');
  182. }
  183. /**
  184. * 导出数据
  185. * Author: Mead
  186. */
  187. public function exportTeachers(Request $request)
  188. {
  189. $ids = $this->service->handleIds($request);
  190. $name = time();
  191. return (new TeacherExport($ids, $request->get('fields', false)))->download($name . '.xlsx', null, [
  192. 'Access-Control-Allow-Origin' => '*',
  193. 'Access-Control-Allow-Methods' => '*',
  194. 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With',
  195. 'Access-Control-Expose-Headers' => 'Content-Disposition',
  196. 'Content-type' => 'application/octet-stream',
  197. 'Content-Disposition' => 'attachment; filename=' . $name . '.xlsx',
  198. ]);
  199. }
  200. /**
  201. * 批量修改状态
  202. * @param Request $request
  203. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  204. * @throws \Illuminate\Validation\ValidationException
  205. */
  206. public function updateStatus(Request $request)
  207. {
  208. $data = $this->validateData($request, [
  209. 'ids' => 'required|array',
  210. 'status' => 'required|integer',
  211. ], [
  212. 'status' => '状态'
  213. ]);
  214. $re = Teacher::query()->whereIn('id', $data['ids'])->update(['status' => $data['status']]);
  215. Admin::query()->whereIn('id', Teacher::query()->where('id', $data['ids'])->pluck('admin_id'))->update(['status' => $data['status']]);
  216. if ($re) {
  217. return Response::success([]);
  218. }
  219. return $this->error('操作失败');
  220. }
  221. /**
  222. * 重置密码
  223. * @param Request $request
  224. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  225. * @throws \Illuminate\Validation\ValidationException
  226. */
  227. public function changePassword(Request $request)
  228. {
  229. $data = $this->validateData($request, [
  230. 'id' => 'required|integer',
  231. 'password' => 'required|password_level',
  232. ]);
  233. $id = $request->get('id');
  234. $model = Teacher::query()->find($id);
  235. if (!$model) {
  236. return Response::fail('找不到该用户');
  237. }
  238. $model->password = rk($data['password']);
  239. $model->save();
  240. return Response::success([]);
  241. }
  242. }