2026-02-11 17:28:36 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\Admin\AiModelController as AdminAiModelController;
|
|
|
|
|
use App\Http\Controllers\Admin\ArticleController as AdminArticleController;
|
|
|
|
|
use App\Http\Controllers\Admin\AuthController as AdminAuthController;
|
|
|
|
|
use App\Http\Controllers\Admin\DashboardController;
|
2026-02-12 13:06:12 +08:00
|
|
|
use App\Http\Controllers\Admin\FeedbackController as AdminFeedbackController;
|
2026-02-11 17:28:36 +08:00
|
|
|
use App\Http\Controllers\Admin\GuideController as AdminGuideController;
|
|
|
|
|
use App\Http\Controllers\Admin\CategoryController as AdminCategoryController;
|
2026-02-12 13:06:12 +08:00
|
|
|
use App\Http\Controllers\Admin\SiteSettingController as AdminSiteSettingController;
|
2026-02-11 17:28:36 +08:00
|
|
|
use App\Http\Controllers\Admin\UploadController as AdminUploadController;
|
|
|
|
|
use App\Http\Controllers\Admin\SourceController as AdminSourceController;
|
|
|
|
|
use App\Http\Controllers\Admin\ToolController as AdminToolController;
|
2026-02-12 13:06:12 +08:00
|
|
|
use App\Http\Controllers\Site\FeedbackController;
|
2026-02-11 17:28:36 +08:00
|
|
|
use App\Http\Controllers\Site\GuideController;
|
|
|
|
|
use App\Http\Controllers\Site\ModelController;
|
|
|
|
|
use App\Http\Controllers\Site\NewsController;
|
|
|
|
|
use App\Http\Controllers\Site\SeoController;
|
|
|
|
|
use App\Http\Controllers\Site\ToolController;
|
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
|
|
2026-02-12 10:57:53 +08:00
|
|
|
Route::get('/', [ToolController::class, 'index'])->name('home');
|
2026-02-11 17:28:36 +08:00
|
|
|
|
|
|
|
|
Route::get('/tools', [ToolController::class, 'index'])->name('tools.index');
|
2026-02-12 10:57:53 +08:00
|
|
|
Route::get('/tools/list', [ToolController::class, 'list'])->name('tools.list');
|
2026-02-11 17:28:36 +08:00
|
|
|
Route::get('/tools/category/{slug}', [ToolController::class, 'byCategory'])->name('tools.by-category');
|
|
|
|
|
Route::get('/tools/{slug}', [ToolController::class, 'show'])->name('tools.show');
|
|
|
|
|
|
|
|
|
|
Route::get('/models', [ModelController::class, 'index'])->name('models.index');
|
|
|
|
|
Route::get('/models/use-case/{slug}', [ModelController::class, 'byUseCase'])->name('models.by-use-case');
|
|
|
|
|
Route::get('/models/{slug}', [ModelController::class, 'show'])->name('models.show');
|
|
|
|
|
|
|
|
|
|
Route::get('/news', [NewsController::class, 'index'])->name('news.index');
|
|
|
|
|
Route::get('/news/{slug}', [NewsController::class, 'show'])->name('news.show');
|
|
|
|
|
|
|
|
|
|
Route::get('/guides', [GuideController::class, 'index'])->name('guides.index');
|
|
|
|
|
Route::get('/guides/topic/{slug}', [GuideController::class, 'byTopic'])->name('guides.by-topic');
|
|
|
|
|
Route::get('/guides/{slug}', [GuideController::class, 'show'])->name('guides.show');
|
2026-02-12 13:06:12 +08:00
|
|
|
Route::post('/feedback', [FeedbackController::class, 'store'])->name('feedback.store');
|
2026-02-11 17:28:36 +08:00
|
|
|
|
|
|
|
|
Route::get('/robots.txt', [SeoController::class, 'robots'])->name('seo.robots');
|
|
|
|
|
Route::get('/sitemap.xml', [SeoController::class, 'sitemap'])->name('seo.sitemap');
|
|
|
|
|
|
|
|
|
|
Route::prefix('admin')->name('admin.')->group(function (): void {
|
|
|
|
|
Route::middleware('admin.guest')->group(function (): void {
|
|
|
|
|
Route::get('/login', [AdminAuthController::class, 'showLogin'])->name('login');
|
|
|
|
|
Route::post('/login', [AdminAuthController::class, 'login'])->name('login.submit');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Route::get('/captcha', [AdminAuthController::class, 'captcha'])->name('captcha');
|
|
|
|
|
|
|
|
|
|
Route::middleware('admin.auth')->group(function (): void {
|
|
|
|
|
Route::post('/logout', [AdminAuthController::class, 'logout'])->name('logout');
|
|
|
|
|
Route::post('/uploads/markdown-image', [AdminUploadController::class, 'markdownImage'])->name('uploads.markdown-image');
|
2026-02-12 17:10:36 +08:00
|
|
|
Route::post('/markdown/preview', [AdminUploadController::class, 'markdownPreview'])->name('markdown.preview');
|
2026-02-11 17:28:36 +08:00
|
|
|
|
|
|
|
|
Route::get('/', DashboardController::class)->name('dashboard');
|
|
|
|
|
|
|
|
|
|
Route::get('/tools', [AdminToolController::class, 'index'])->name('tools.index');
|
|
|
|
|
Route::get('/tools/create', [AdminToolController::class, 'create'])->name('tools.create');
|
|
|
|
|
Route::post('/tools', [AdminToolController::class, 'store'])->name('tools.store');
|
|
|
|
|
Route::get('/tools/{tool}/edit', [AdminToolController::class, 'edit'])->name('tools.edit');
|
|
|
|
|
Route::put('/tools/{tool}', [AdminToolController::class, 'update'])->name('tools.update');
|
|
|
|
|
Route::post('/tools/{tool}/publish', [AdminToolController::class, 'publish'])->name('tools.publish');
|
|
|
|
|
Route::post('/tools/{tool}/mark-stale', [AdminToolController::class, 'markStale'])->name('tools.mark-stale');
|
|
|
|
|
|
|
|
|
|
Route::get('/models', [AdminAiModelController::class, 'index'])->name('models.index');
|
|
|
|
|
Route::get('/models/create', [AdminAiModelController::class, 'create'])->name('models.create');
|
|
|
|
|
Route::post('/models', [AdminAiModelController::class, 'store'])->name('models.store');
|
|
|
|
|
Route::get('/models/{model}/edit', [AdminAiModelController::class, 'edit'])->name('models.edit');
|
|
|
|
|
Route::put('/models/{model}', [AdminAiModelController::class, 'update'])->name('models.update');
|
|
|
|
|
Route::post('/models/{model}/publish', [AdminAiModelController::class, 'publish'])->name('models.publish');
|
|
|
|
|
Route::post('/models/{model}/mark-stale', [AdminAiModelController::class, 'markStale'])->name('models.mark-stale');
|
|
|
|
|
|
|
|
|
|
Route::get('/articles', [AdminArticleController::class, 'index'])->name('articles.index');
|
|
|
|
|
Route::get('/articles/create', [AdminArticleController::class, 'create'])->name('articles.create');
|
|
|
|
|
Route::post('/articles', [AdminArticleController::class, 'store'])->name('articles.store');
|
|
|
|
|
Route::get('/articles/{article}/edit', [AdminArticleController::class, 'edit'])->name('articles.edit');
|
|
|
|
|
Route::put('/articles/{article}', [AdminArticleController::class, 'update'])->name('articles.update');
|
|
|
|
|
Route::post('/articles/{article}/publish', [AdminArticleController::class, 'publish'])->name('articles.publish');
|
|
|
|
|
Route::post('/articles/{article}/mark-stale', [AdminArticleController::class, 'markStale'])->name('articles.mark-stale');
|
|
|
|
|
|
|
|
|
|
Route::get('/guides', [AdminGuideController::class, 'index'])->name('guides.index');
|
|
|
|
|
Route::get('/guides/create', [AdminGuideController::class, 'create'])->name('guides.create');
|
|
|
|
|
Route::post('/guides', [AdminGuideController::class, 'store'])->name('guides.store');
|
|
|
|
|
Route::get('/guides/{guide}/edit', [AdminGuideController::class, 'edit'])->name('guides.edit');
|
|
|
|
|
Route::put('/guides/{guide}', [AdminGuideController::class, 'update'])->name('guides.update');
|
|
|
|
|
Route::post('/guides/{guide}/publish', [AdminGuideController::class, 'publish'])->name('guides.publish');
|
|
|
|
|
|
|
|
|
|
Route::get('/categories', [AdminCategoryController::class, 'index'])->name('categories.index');
|
|
|
|
|
Route::get('/categories/create', [AdminCategoryController::class, 'create'])->name('categories.create');
|
|
|
|
|
Route::post('/categories', [AdminCategoryController::class, 'store'])->name('categories.store');
|
|
|
|
|
Route::get('/categories/{category}/edit', [AdminCategoryController::class, 'edit'])->name('categories.edit');
|
|
|
|
|
Route::put('/categories/{category}', [AdminCategoryController::class, 'update'])->name('categories.update');
|
|
|
|
|
|
|
|
|
|
Route::get('/sources', [AdminSourceController::class, 'index'])->name('sources.index');
|
|
|
|
|
Route::get('/sources/create', [AdminSourceController::class, 'create'])->name('sources.create');
|
|
|
|
|
Route::post('/sources', [AdminSourceController::class, 'store'])->name('sources.store');
|
|
|
|
|
Route::get('/sources/{source}/edit', [AdminSourceController::class, 'edit'])->name('sources.edit');
|
|
|
|
|
Route::put('/sources/{source}', [AdminSourceController::class, 'update'])->name('sources.update');
|
2026-02-12 13:06:12 +08:00
|
|
|
|
|
|
|
|
Route::get('/settings', [AdminSiteSettingController::class, 'index'])->name('settings.index');
|
2026-02-12 17:10:36 +08:00
|
|
|
Route::get('/settings/{module}', [AdminSiteSettingController::class, 'show'])->name('settings.show');
|
|
|
|
|
Route::put('/settings/{module}', [AdminSiteSettingController::class, 'update'])->name('settings.update');
|
2026-02-12 15:37:49 +08:00
|
|
|
Route::post('/settings/{module}/items', [AdminSiteSettingController::class, 'storeItem'])->name('settings.items.store');
|
2026-02-12 17:10:36 +08:00
|
|
|
Route::get('/settings/{module}/items/{item}/edit', [AdminSiteSettingController::class, 'editItem'])->name('settings.items.edit');
|
|
|
|
|
Route::put('/settings/{module}/items/{item}', [AdminSiteSettingController::class, 'updateItem'])->name('settings.items.update');
|
2026-02-12 15:37:49 +08:00
|
|
|
Route::delete('/settings/{module}/items/{item}', [AdminSiteSettingController::class, 'destroyItem'])->name('settings.items.destroy');
|
2026-02-12 13:06:12 +08:00
|
|
|
|
|
|
|
|
Route::get('/feedback', [AdminFeedbackController::class, 'index'])->name('feedback.index');
|
|
|
|
|
Route::put('/feedback/{feedback}', [AdminFeedbackController::class, 'updateStatus'])->name('feedback.status');
|
2026-02-11 17:28:36 +08:00
|
|
|
});
|
|
|
|
|
});
|