MenuPermissionResource.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace App\Filament\Resources;
  3. use App\Filament\Resources\MenuPermissionResource\Pages;
  4. use App\Models\MenuPermission;
  5. use Filament\Resources\Resource;
  6. use Filament\Tables;
  7. use Filament\Tables\Table;
  8. use Filament\Tables\Columns\TextColumn;
  9. use Filament\Tables\Columns\ToggleColumn;
  10. use Filament\Tables\Columns\BadgeColumn;
  11. use Filament\Tables\Filters\SelectFilter;
  12. use Filament\Tables\Filters\TernaryFilter;
  13. use Filament\Actions;
  14. use Filament\Actions\EditAction;
  15. use Filament\Actions\DeleteAction;
  16. use Filament\Actions\BulkAction;
  17. use BackedEnum;
  18. use UnitEnum;
  19. class MenuPermissionResource extends Resource
  20. {
  21. protected static ?string $model = MenuPermission::class;
  22. protected static string|BackedEnum|null $navigationIcon = 'heroicon-o-squares-2x2';
  23. protected static ?string $navigationLabel = '菜单权限管理';
  24. protected static string|UnitEnum|null $navigationGroup = '系统管理';
  25. protected static ?int $navigationSort = 100;
  26. public static function table(Table $table): Table
  27. {
  28. return $table
  29. ->columns([
  30. TextColumn::make('user_id')
  31. ->label('用户ID')
  32. ->searchable()
  33. ->sortable(),
  34. TextColumn::make('menu_key')
  35. ->label('菜单标识')
  36. ->searchable()
  37. ->sortable(),
  38. TextColumn::make('menu_label')
  39. ->label('菜单名称')
  40. ->searchable(),
  41. TextColumn::make('menu_group')
  42. ->label('菜单分组')
  43. ->badge()
  44. ->color('gray'),
  45. TextColumn::make('menu_url')
  46. ->label('菜单URL')
  47. ->limit(50)
  48. ->copyable(),
  49. ToggleColumn::make('is_visible')
  50. ->label('是否可见')
  51. ->sortable(),
  52. TextColumn::make('sort_order')
  53. ->label('排序')
  54. ->sortable(),
  55. TextColumn::make('created_at')
  56. ->label('创建时间')
  57. ->dateTime('Y-m-d H:i')
  58. ->sortable()
  59. ->toggleable(isToggledHiddenByDefault: true),
  60. ])
  61. ->filters([
  62. SelectFilter::make('menu_group')
  63. ->label('菜单分组')
  64. ->options([
  65. '管理' => '管理',
  66. '工具' => '工具',
  67. '分析' => '分析',
  68. ])
  69. ->multiple(),
  70. TernaryFilter::make('is_visible')
  71. ->label('可见状态')
  72. ->placeholder('全部')
  73. ->trueLabel('可见')
  74. ->falseLabel('隐藏'),
  75. ])
  76. ->actions([
  77. EditAction::make(),
  78. DeleteAction::make(),
  79. ])
  80. ->bulkActions([
  81. Actions\BulkActionGroup::make([
  82. Actions\DeleteBulkAction::make(),
  83. BulkAction::make('toggle_visibility')
  84. ->label('批量切换可见性')
  85. ->icon('heroicon-m-eye')
  86. ->action(function ($records) {
  87. foreach ($records as $record) {
  88. $record->update(['is_visible' => !$record->is_visible]);
  89. }
  90. }),
  91. ]),
  92. ])
  93. ->defaultSort('sort_order')
  94. ->paginated([10, 25, 50, 100])
  95. ->poll('30s');
  96. }
  97. public static function getRelations(): array
  98. {
  99. return [
  100. //
  101. ];
  102. }
  103. public static function getPages(): array
  104. {
  105. return [
  106. 'index' => Pages\ListMenuPermissions::route('/'),
  107. 'create' => Pages\CreateMenuPermission::route('/create'),
  108. 'edit' => Pages\EditMenuPermission::route('/{record}/edit'),
  109. ];
  110. }
  111. }