diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 83558a5..86df3ea 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -48,6 +48,41 @@ class AdminPanelProvider extends PanelProvider ->sidebarWidth('13rem') ->maxContentWidth(\Filament\Support\Enums\Width::Full) ->userMenuItems([ + // 工具:同步旧站数据(sablog 增量导入,约 1 分钟) + \Filament\Actions\Action::make('sablog-import') + ->label('同步旧站数据') + ->icon('heroicon-o-arrow-path') + ->color('info') + ->requiresConfirmation() + ->modalDescription('从旧 sablog 库增量导入文章/评论/标签等(幂等,不会产生重复),约需 1 分钟,期间请不要重复点击。') + ->action(function (): void { + $src = config('blog.sablog_source'); + try { + \Illuminate\Support\Facades\Artisan::call('sablog:import', [ + '--host' => $src['host'], + '--port' => $src['port'], + '--database' => $src['database'], + '--username' => $src['username'], + '--password' => $src['password'], + '--prefix' => $src['prefix'], + ]); + $output = trim(\Illuminate\Support\Facades\Artisan::output()); + \App\Blog\Support\PageCacheMiddleware::flush(); + \Filament\Notifications\Notification::make() + ->title('旧站数据同步完成') + ->body(\Illuminate\Support\Str::afterLast($output, '报告:') ?: $output) + ->success() + ->persistent() + ->send(); + } catch (\Throwable $e) { + \Filament\Notifications\Notification::make() + ->title('同步失败') + ->body($e->getMessage()) + ->danger() + ->persistent() + ->send(); + } + }), // 工具:清空缓存(Livewire action,即时通知) \Filament\Actions\Action::make('flush-page-cache') ->label('清空前台缓存') diff --git a/config/blog.php b/config/blog.php index a4cc03e..4f39a66 100644 --- a/config/blog.php +++ b/config/blog.php @@ -58,4 +58,19 @@ return [ */ 'page_cache_ttl' => env('PAGE_CACHE_TTL', 300), + + /* + |-------------------------------------------------------------------------- + | 旧站(sablog)数据库:后台「同步旧站数据」按钮的增量导入来源 + |-------------------------------------------------------------------------- + */ + + 'sablog_source' => [ + 'host' => env('SABLOG_DB_HOST', '10.0.4.7'), + 'port' => env('SABLOG_DB_PORT', '3306'), + 'database' => env('SABLOG_DB_DATABASE', 'neatcn_com'), + 'username' => env('SABLOG_DB_USERNAME', 'neatcn.com'), + 'password' => env('SABLOG_DB_PASSWORD', ''), + 'prefix' => env('SABLOG_DB_PREFIX', 'sablog_'), + ], ];