CreateTeacher.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace App\Filament\Resources\TeacherResource\Pages;
  3. use App\Filament\Resources\TeacherResource;
  4. use App\Models\Teacher;
  5. use App\Models\User;
  6. use Filament\Resources\Pages\CreateRecord;
  7. use Illuminate\Support\Facades\DB;
  8. use Illuminate\Support\Facades\Hash;
  9. class CreateTeacher extends CreateRecord
  10. {
  11. protected static string $resource = TeacherResource::class;
  12. protected function mutateFormDataBeforeCreate(array $data): array
  13. {
  14. // 生成教师ID
  15. $data['teacher_id'] = $this->generateTeacherId();
  16. return $data;
  17. }
  18. protected function handleRecordCreation(array $data): Teacher
  19. {
  20. DB::beginTransaction();
  21. try {
  22. // 创建用户记录
  23. $userData = [
  24. 'user_id' => $data['teacher_id'],
  25. 'username' => $data['user']['username'], // 手机号作为登录名(必填)
  26. 'password_hash' => $data['user']['password_hash'],
  27. 'full_name' => $data['name'],
  28. 'role' => 'teacher',
  29. 'is_active' => 1,
  30. ];
  31. // 邮箱是可选的
  32. if (!empty($data['user']['email'])) {
  33. $userData['email'] = $data['user']['email'];
  34. }
  35. $user = User::create($userData);
  36. // 创建教师记录
  37. $teacherData = [
  38. 'teacher_id' => $data['teacher_id'],
  39. 'user_id' => $data['teacher_id'],
  40. 'name' => $data['name'],
  41. 'subject' => $data['subject'],
  42. ];
  43. $teacher = Teacher::create($teacherData);
  44. DB::commit();
  45. return $teacher;
  46. } catch (\Exception $e) {
  47. DB::rollBack();
  48. throw $e;
  49. }
  50. }
  51. protected function getRedirectUrl(): string
  52. {
  53. return $this->getResource()::getUrl('index');
  54. }
  55. protected function getCreatedNotificationTitle(): ?string
  56. {
  57. return '教师创建成功';
  58. }
  59. protected function getCreatedNotification(): ?\Filament\Notifications\Notification
  60. {
  61. return \Filament\Notifications\Notification::make()
  62. ->success()
  63. ->title('教师创建成功')
  64. ->body('教师信息已成功保存。');
  65. }
  66. protected function generateTeacherId(): string
  67. {
  68. $timestamp = time();
  69. $sequence = DB::table('teachers')
  70. ->where('teacher_id', 'like', "tch_{$timestamp}%")
  71. ->count() + 1;
  72. return "tch_{$timestamp}_{$sequence}";
  73. }
  74. public function getTitle(): string
  75. {
  76. return '添加教师';
  77. }
  78. public function getBreadcrumbs(): array
  79. {
  80. return [
  81. '#' => '师生管理',
  82. static::getResource()::getUrl('index') => '教师管理',
  83. static::getResource()::getUrl('create') => '添加教师',
  84. ];
  85. }
  86. }