Files
laralog/app/Filament/Resources/Posts/RelationManagers/CommentsRelationManager.php
T
ak 5f74dd76e4 feat: 文章/分类/评论关联细节完善
- 文章列表:会员插件注入「付费」徽章列(会员/付费¥xx,停插件即消失)
- 分类:真实文章数(withCount)、名称点击跳文章列表并按分类筛选(ListPosts booted 预置筛选)
- 分类:新增封面(medialibrary)+ 介绍(description 字段/表单);前台分类页顶部展示介绍区;SEO description + BreadcrumbList 结构化数据(GEO)
- 文章编辑:MarkdownEditor 内容区加大(26rem);文章编辑页新增「评论」关系管理页(可审/拒)
- 评论列表:文章列带摘要
- 三套主题补 .category-intro 样式
- 测试更新(付费徽章列)
2026-08-12 22:44:16 +08:00

82 lines
3.1 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Filament\Resources\Posts\RelationManagers;
use App\Models\Comment;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class CommentsRelationManager extends RelationManager
{
protected static string $relationship = 'comments';
protected static ?string $title = '相关评论';
protected static ?string $modelLabel = '评论';
protected static ?string $pluralModelLabel = '评论';
public function form(\Filament\Schemas\Schema $schema): \Filament\Schemas\Schema
{
return $schema
->components([
TextInput::make('author_name')->label('昵称')->disabled(),
TextInput::make('author_email')->label('邮箱')->disabled(),
TextInput::make('author_url')->label('网址')->disabled(),
Textarea::make('content')->label('内容')->disabled()->rows(4),
]);
}
public function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('author_name')->label('昵称'),
TextColumn::make('content')->label('内容')->limit(40),
TextColumn::make('status')->label('状态')
->badge()
->formatStateUsing(fn ($state) => match ($state) {
'published' => '已发布',
'pending' => '待审核',
'spam' => '垃圾',
'rejected' => '已拒绝',
default => $state,
})
->color(fn ($state) => match ($state) {
'published' => 'success',
'pending' => 'warning',
'spam' => 'danger',
'rejected' => 'gray',
default => 'gray',
}),
TextColumn::make('created_at')->label('时间')->dateTime('Y-m-d H:i'),
])
->recordActions([
Action::make('approve')
->label('通过')
->color('success')
->visible(fn (Comment $record) => $record->status !== 'published')
->action(function (Comment $record) {
if ($record->status !== 'published') {
$record->post?->increment('comment_count');
}
$record->update(['status' => 'published']);
}),
Action::make('reject')
->label('拒绝')
->color('danger')
->visible(fn (Comment $record) => $record->status !== 'rejected')
->action(fn (Comment $record) => $record->update(['status' => 'rejected'])),
])
->recordUrl(null)
->recordAction(null)
->defaultSort('created_at', 'desc');
}
}