QuestionAssetResource.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace App\Filament\Resources;
  3. use App\Filament\Resources\QuestionAssetResource\Pages;
  4. use App\Models\QuestionAsset;
  5. use BackedEnum;
  6. use Filament\Actions\BulkActionGroup;
  7. use Filament\Actions\EditAction;
  8. use Filament\Actions\ViewAction;
  9. use Filament\Schemas\Components\Section;
  10. use Filament\Forms\Components\Select;
  11. use Filament\Forms\Components\TextInput;
  12. use Filament\Resources\Resource;
  13. use Filament\Schemas\Schema;
  14. use Filament\Tables;
  15. use Filament\Tables\Columns\TextColumn;
  16. use Filament\Tables\Filters\SelectFilter;
  17. use UnitEnum;
  18. class QuestionAssetResource extends Resource
  19. {
  20. protected static ?string $model = QuestionAsset::class;
  21. protected static BackedEnum|string|null $navigationIcon = 'heroicon-o-photo';
  22. protected static ?string $navigationLabel = '素材管理';
  23. protected static ?string $modelLabel = '素材';
  24. protected static ?string $pluralModelLabel = '素材';
  25. protected static UnitEnum|string|null $navigationGroup = '题库管理';
  26. protected static ?int $navigationSort = 5;
  27. public static function form(Schema $schema): Schema
  28. {
  29. return $schema
  30. ->schema([
  31. Section::make('素材信息')
  32. ->schema([
  33. TextInput::make('question_id')->numeric()->required(),
  34. Select::make('asset_type')
  35. ->options([
  36. 'image' => '图片',
  37. 'svg' => 'SVG',
  38. 'latex' => 'LaTeX',
  39. ])
  40. ->required(),
  41. TextInput::make('path')->required()->maxLength(255),
  42. ])
  43. ->columns(2),
  44. ]);
  45. }
  46. public static function table(Tables\Table $table): Tables\Table
  47. {
  48. return $table
  49. ->columns([
  50. TextColumn::make('id')->label('ID')->sortable(),
  51. TextColumn::make('question_id')->label('题目ID')->sortable(),
  52. TextColumn::make('asset_type')->label('类型')->sortable(),
  53. TextColumn::make('path')->label('路径')->limit(60)->wrap(),
  54. TextColumn::make('updated_at')->label('更新')->dateTime(),
  55. ])
  56. ->filters([
  57. SelectFilter::make('asset_type')
  58. ->options([
  59. 'image' => '图片',
  60. 'svg' => 'SVG',
  61. 'latex' => 'LaTeX',
  62. ]),
  63. ])
  64. ->actions([
  65. ViewAction::make(),
  66. EditAction::make(),
  67. ])
  68. ->bulkActions([
  69. BulkActionGroup::make([]),
  70. ]);
  71. }
  72. public static function getPages(): array
  73. {
  74. return [
  75. 'index' => Pages\ListQuestionAssets::route('/'),
  76. 'create' => Pages\CreateQuestionAsset::route('/create'),
  77. 'view' => Pages\ViewQuestionAsset::route('/{record}'),
  78. 'edit' => Pages\EditQuestionAsset::route('/{record}/edit'),
  79. ];
  80. }
  81. }