schema([ Forms\Components\TextInput::make('name') ->label('用户名称') ->required() ->maxLength(255) ->placeholder('请输入用户名称'), Forms\Components\TextInput::make('email') ->label('邮箱') ->email() ->required() ->maxLength(255) ->placeholder('请输入邮箱地址'), Forms\Components\TextInput::make('password') ->label('密码') ->password() ->required(fn (string $context): bool => $context === 'create') ->dehydrated(fn ($state) => filled($state)) ->minLength(8) ->placeholder('请输入密码(至少8位)') ->helperText('编辑时留空表示不修改密码'), Forms\Components\Select::make('groups') ->label('所属分组') ->multiple() ->relationship('groups', 'name') ->preload() ->placeholder('请选择用户所属的分组') ->helperText('用户可以属于多个分组'), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('id') ->label('ID') ->sortable(), Tables\Columns\TextColumn::make('name') ->label('用户名称') ->searchable() ->sortable(), Tables\Columns\TextColumn::make('email') ->label('邮箱') ->searchable() ->sortable(), Tables\Columns\TextColumn::make('groups.name') ->label('所属分组') ->badge() ->searchable() ->toggleable(), Tables\Columns\TextColumn::make('created_at') ->label('创建时间') ->dateTime('Y-m-d H:i:s') ->sortable() ->toggleable(), Tables\Columns\TextColumn::make('updated_at') ->label('更新时间') ->dateTime('Y-m-d H:i:s') ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ // ]) ->actions([ Tables\Actions\ViewAction::make() ->label('查看'), Tables\Actions\EditAction::make() ->label('编辑'), Tables\Actions\DeleteAction::make() ->label('删除'), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make() ->label('批量删除'), ]), ]) ->defaultSort('created_at', 'desc'); } public static function getRelations(): array { return [ RelationManagers\GroupsRelationManager::class, ]; } public static function getPages(): array { return [ 'index' => Pages\ListUsers::route('/'), 'create' => Pages\CreateUser::route('/create'), 'edit' => Pages\EditUser::route('/{record}/edit'), ]; } }