user()?->can('guide.view') ?? false; } public static function form(Form $form): Form { return $form ->schema([ Forms\Components\Section::make('基本信息') ->schema([ Forms\Components\TextInput::make('name') ->label('指引名称') ->required() ->maxLength(255) ->placeholder('例如: 如何用光'), Forms\Components\Select::make('category') ->label('分类') ->required() ->options([ 'operation' => '操作指引', 'fault_handling' => '故障处理', 'training' => '培训教程', 'safety' => '安全规范', 'maintenance' => '维护保养', ]) ->default('operation'), Forms\Components\Select::make('status') ->label('状态') ->required() ->options([ 'draft' => '草稿', 'published' => '已发布', 'archived' => '已归档', ]) ->default('draft'), Forms\Components\TagsInput::make('tags') ->label('标签') ->placeholder('输入标签后回车') ->helperText('用于分类和搜索的关键词标签'), Forms\Components\Textarea::make('description') ->label('描述') ->maxLength(1000) ->placeholder('简要描述此指引的用途') ->columnSpanFull(), ]) ->columns(2), Forms\Components\Section::make('关联终端') ->schema([ Forms\Components\CheckboxList::make('terminals') ->label('适用终端') ->relationship('terminals', 'name') ->searchable() ->bulkToggleable() ->helperText('选择此指引适用的终端,未关联终端的指引不会在终端显示') ->columns(3), ]) ->description('配置此指引在哪些终端上可见'), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name') ->label('指引名称') ->searchable() ->sortable() ->weight('bold'), Tables\Columns\TextColumn::make('category') ->label('分类') ->badge() ->formatStateUsing(fn(string $state): string => match ($state) { 'operation' => '操作指引', 'fault_handling' => '故障处理', 'training' => '培训教程', 'safety' => '安全规范', 'maintenance' => '维护保养', default => $state, }) ->color(fn(string $state): string => match ($state) { 'operation' => 'primary', 'fault_handling' => 'danger', 'training' => 'info', 'safety' => 'warning', 'maintenance' => 'gray', default => 'gray', }) ->sortable(), Tables\Columns\TextColumn::make('status') ->label('状态') ->badge() ->formatStateUsing(fn(string $state): string => match ($state) { 'draft' => '草稿', 'published' => '已发布', 'archived' => '已归档', default => $state, }) ->color(fn(string $state): string => match ($state) { 'draft' => 'gray', 'published' => 'success', 'archived' => 'warning', default => 'gray', }) ->sortable(), Tables\Columns\TextColumn::make('pages_count') ->label('页数') ->counts('pages') ->sortable(), Tables\Columns\TextColumn::make('terminals_count') ->label('关联终端') ->counts('terminals') ->sortable() ->badge() ->color(fn(int $state): string => $state > 0 ? 'success' : 'gray') ->formatStateUsing(fn(int $state): string => $state > 0 ? "{$state} 个" : '未关联'), Tables\Columns\TextColumn::make('created_at') ->label('创建时间') ->dateTime('Y-m-d H:i') ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ Tables\Filters\SelectFilter::make('category') ->label('分类') ->options([ 'operation' => '操作指引', 'fault_handling' => '故障处理', 'training' => '培训教程', 'safety' => '安全规范', 'maintenance' => '维护保养', ]), Tables\Filters\SelectFilter::make('status') ->label('状态') ->options([ 'draft' => '草稿', 'published' => '已发布', 'archived' => '已归档', ]), ]) ->actions([ 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 getPages(): array { return [ 'index' => Pages\ListGuides::route('/'), 'create' => Pages\CreateGuide::route('/create'), 'edit' => Pages\EditGuide::route('/{record}/edit'), 'manage-pages' => Pages\ManageGuidePages::route('/{record}/manage-pages'), ]; } }