SourceFileResource.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace App\Filament\Resources;
  3. use App\Filament\Resources\SourceFileResource\Pages;
  4. use App\Filament\Resources\SourceFileResource\RelationManagers\SourcePapersRelationManager;
  5. use App\Models\SourceFile;
  6. use Filament\Forms;
  7. use Filament\Resources\Resource;
  8. use Filament\Schemas\Schema;
  9. use Filament\Tables;
  10. use Filament\Tables\Table;
  11. use Filament\Actions\ViewAction;
  12. use Illuminate\Database\Eloquent\Model;
  13. use BackedEnum;
  14. use UnitEnum;
  15. class SourceFileResource extends Resource
  16. {
  17. protected static ?string $model = SourceFile::class;
  18. protected static BackedEnum|string|null $navigationIcon = 'heroicon-o-rectangle-stack';
  19. protected static UnitEnum|string|null $navigationGroup = '卷子导入流程';
  20. protected static ?string $navigationLabel = '源文件';
  21. protected static ?int $navigationSort = 5;
  22. public static function canCreate(): bool
  23. {
  24. // 由后台脚本/服务创建,不允许手工创建
  25. return false;
  26. }
  27. public static function canEdit(Model $record): bool
  28. {
  29. return false;
  30. }
  31. public static function form(Schema $schema): Schema
  32. {
  33. return $schema->schema([
  34. Forms\Components\TextInput::make('original_filename')->label('原始文件名')->disabled(),
  35. Forms\Components\TextInput::make('normalized_filename')->label('标准化文件名')->disabled(),
  36. Forms\Components\KeyValue::make('extracted_metadata')->label('文件元数据')->disabled(),
  37. Forms\Components\Textarea::make('raw_markdown')
  38. ->label('原始 Markdown')
  39. ->rows(12)
  40. ->disabled(),
  41. ]);
  42. }
  43. public static function table(Table $table): Table
  44. {
  45. return $table
  46. ->columns([
  47. Tables\Columns\TextColumn::make('original_filename')->label('文件名')->searchable(),
  48. Tables\Columns\TextColumn::make('extracted_metadata.grade')->label('年级')->sortable(),
  49. Tables\Columns\TextColumn::make('extracted_metadata.term')->label('学期')->sortable(),
  50. Tables\Columns\TextColumn::make('extracted_metadata.chapter')->label('章节'),
  51. Tables\Columns\TextColumn::make('created_at')->label('导入时间')->dateTime(),
  52. ])
  53. ->actions([
  54. ViewAction::make(),
  55. ]);
  56. }
  57. public static function getRelations(): array
  58. {
  59. return [
  60. SourcePapersRelationManager::class,
  61. ];
  62. }
  63. public static function getPages(): array
  64. {
  65. return [
  66. 'index' => Pages\ListSourceFiles::route('/'),
  67. 'view' => Pages\ViewSourceFile::route('/{record}'),
  68. ];
  69. }
  70. }