Keep the public site readable after import (nbsp, highlighter, wrapping code, compact pager) and finish the admin extras already in this tree: sticky levels, preview, page cache, and live llms.txt. Co-authored-by: Cursor <cursoragent@cursor.com>
83 lines
3.1 KiB
PHP
83 lines
3.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Filament\Resources\Posts\RelationManagers;
|
|
|
|
use App\Models\Comment;
|
|
use Filament\Actions\Action;
|
|
use Filament\Forms\Components\Textarea;
|
|
use Filament\Forms\Components\TextInput;
|
|
use Filament\Resources\RelationManagers\RelationManager;
|
|
use Filament\Schemas\Schema;
|
|
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(Schema $schema): 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');
|
|
}
|
|
}
|