CreateTeacher.php 2.9 KB

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