components([ TextInput::make('name')->label('套餐名')->required(), TextInput::make('slug')->label('Slug')->required()->unique(ignoreRecord: true), Textarea::make('description')->label('描述')->rows(2)->columnSpanFull(), TextInput::make('price')->label('价格(分)')->numeric()->required()->default(0)->helperText('例:9900 = ¥99'), TextInput::make('duration_days')->label('时长(天)')->numeric()->required()->default(30), KeyValue::make('permissions')->label('权限位')->columnSpanFull(), Toggle::make('active')->label('上架')->default(true), TextInput::make('sort')->label('排序')->numeric()->default(0), ]); } public static function table(Table $table): Table { return $table ->columns([ \Filament\Tables\Columns\TextColumn::make('name')->label('套餐'), \Filament\Tables\Columns\TextColumn::make('price')->label('价格') ->formatStateUsing(fn ($state) => '¥'.number_format((float) $state / 100, 2)), \Filament\Tables\Columns\TextColumn::make('duration_days')->label('时长')->suffix(' 天'), \Filament\Tables\Columns\IconColumn::make('active')->label('上架')->boolean(), \Filament\Tables\Columns\TextColumn::make('sort')->label('排序')->sortable(), ]) ->filters([]) ->recordActions([ \Filament\Actions\EditAction::make(), ]) ->toolbarActions([ \Filament\Actions\BulkActionGroup::make([ \Filament\Actions\DeleteBulkAction::make(), ]), ]); } public static function getPages(): array { return [ 'index' => ListMembershipPlans::route('/'), 'create' => CreateMembershipPlan::route('/create'), 'edit' => EditMembershipPlan::route('/{record}/edit'), ]; } }