| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- <?php
- namespace App\Filament\Resources;
- use App\Filament\Resources\TeacherResource\Pages;
- use App\Models\Teacher;
- use App\Models\User;
- use Filament\Forms\Components\TextInput;
- use Filament\Forms\Components\Select;
- use Filament\Forms\Components\Textarea;
- use Filament\Resources\Resource;
- use Filament\Schemas\Schema;
- use Filament\Tables;
- use Filament\Tables\Table;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Hash;
- class TeacherResource extends Resource
- {
- protected static ?string $model = Teacher::class;
- protected static bool $shouldRegisterNavigation = false;
- public static function form(Schema $schema): Schema
- {
- return $schema->schema([
- TextInput::make('teacher_id')
- ->label('教师ID')
- ->disabled()
- ->hidden(fn (?Teacher $record) => blank($record))
- ->formatStateUsing(fn (?Teacher $record): string => $record?->teacher_id ?? ''),
- TextInput::make('name')
- ->label('教师姓名')
- ->required()
- ->maxLength(128)
- ->placeholder('请输入教师姓名'),
- TextInput::make('subject')
- ->label('教授科目')
- ->required()
- ->maxLength(64)
- ->placeholder('例如:数学、语文、英语等'),
- TextInput::make('user.email')
- ->label('邮箱地址(可选)')
- ->email()
- ->placeholder('请输入邮箱地址')
- ->reactive()
- ->afterStateUpdated(fn ($state, callable $set) => $state ? $set('user.username', explode('@', $state)[0] ?? '') : null),
- TextInput::make('user.username')
- ->label('用户名')
- ->required()
- ->maxLength(64)
- ->placeholder('登录用户名'),
- TextInput::make('user.password_hash')
- ->label('密码')
- ->required()
- ->password()
- ->revealable()
- ->dehydrateStateUsing(fn ($state) => Hash::make($state))
- ->placeholder('请输入密码'),
- Textarea::make('remark')
- ->label('备注')
- ->rows(3)
- ->placeholder('请输入备注信息(可选)')
- ->columnSpanFull(),
- ])->columns(2);
- }
- public static function table(Table $table): Table
- {
- return $table
- ->columns([
- Tables\Columns\TextColumn::make('teacher_id')
- ->label('教师ID')
- ->badge()
- ->color('primary')
- ->copyable()
- ->copyMessage('教师ID已复制')
- ->copyMessageDuration(1500)
- ->sortable()
- ->searchable(),
- Tables\Columns\TextColumn::make('name')
- ->label('姓名')
- ->weight('bold')
- ->searchable()
- ->sortable(),
- Tables\Columns\TextColumn::make('subject')
- ->label('教授科目')
- ->badge()
- ->color('info')
- ->sortable(),
- Tables\Columns\TextColumn::make('user.email')
- ->label('邮箱')
- ->copyable()
- ->sortable(),
- Tables\Columns\TextColumn::make('user.username')
- ->label('用户名')
- ->sortable(),
- Tables\Columns\TextColumn::make('students_count')
- ->label('学生数量')
- ->counts('students')
- ->sortable()
- ->alignCenter()
- ->badge()
- ->color('success'),
- Tables\Columns\TextColumn::make('created_at')
- ->label('创建时间')
- ->dateTime('Y-m-d H:i')
- ->sortable()
- ->toggleable(isToggledHiddenByDefault: true),
- ])
- ->filters([
- Tables\Filters\SelectFilter::make('subject')
- ->label('教授科目')
- ->options(fn () => self::subjectOptions())
- ->placeholder('全部科目'),
- ])
- ->actions([])
- ->bulkActions([])
- ->emptyStateHeading('暂无教师记录')
- ->emptyStateDescription('开始添加第一位教师吧')
- ->emptyStateActions([]);
- }
- public static function getPages(): array
- {
- return [
- 'index' => Pages\ListTeachers::route('/'),
- 'create' => Pages\CreateTeacher::route('/create'),
- 'view' => Pages\ViewTeacher::route('/{record}'),
- 'edit' => Pages\EditTeacher::route('/{record}/edit'),
- ];
- }
- protected static function subjectOptions(): array
- {
- return [
- 'math' => '数学',
- 'chinese' => '语文',
- 'english' => '英语',
- 'physics' => '物理',
- 'chemistry' => '化学',
- 'biology' => '生物',
- 'history' => '历史',
- 'geography' => '地理',
- 'politics' => '政治',
- 'other' => '其他',
- ];
- }
- }
|