SourceFileResource.php 2.7 KB

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