Files
Mangarr/assets/vue/app/router/index.js
ext.jeremy.guillot@maxicoffee.domains 670e3f5315 feat(system): implémenter la page Logs des erreurs de scraping
- Nouveau domaine `system` avec `logsStore` (Pinia) filtré sur
  status=failed&type=scraping_job, tri, pagination et suppression
- Composant `LogItem` : affiche titre manga, chapitre, date, durée,
  domaine source (lien vers page d'édition), badge type scraping,
  slug utilisé, message d'erreur expandable
- Page `LogsPage` : toolbar avec badge total, dropdown tri, rafraîchir,
  tout supprimer ; charge les ContentSources pour enrichir l'affichage
- Route /system/logs branchée sur LogsPage
- ApiJobRepository : ajout du paramètre `type` dans getJobs
- Job entity : ajout des champs startedAt et completedAt
2026-03-16 14:43:19 +01:00

168 lines
5.4 KiB
JavaScript

import { createRouter, createWebHistory } from 'vue-router';
import ActivityPage from '../domain/activity/presentation/pages/ActivityPage.vue';
import ConversionPage from '../domain/conversion/presentation/pages/ConversionPage.vue';
import NewImportPage from '../domain/import/presentation/pages/NewImportPage.vue';
import AddManga from '../domain/manga/presentation/pages/AddManga.vue';
import DiscoverPage from '../domain/manga/presentation/pages/DiscoverPage.vue';
import HomePage from '../domain/manga/presentation/pages/HomePage.vue';
import MangaDetails from '../domain/manga/presentation/pages/MangaDetails.vue';
import ChapterPage from '../domain/reader/presentation/pages/ChapterPage.vue';
import ScrapperConfigurations from '../domain/setting/presentation/pages/ScrapperConfigurations.vue';
import ScrapperEdit from '../domain/setting/presentation/pages/ScrapperEdit.vue';
import UserPreferencesPage from '../domain/setting/presentation/pages/UserPreferencesPage.vue';
import LogsPage from '../domain/system/presentation/pages/LogsPage.vue';
import Layout from '../shared/components/layout/Layout.vue';
// Placeholder component for new routes
const PlaceholderComponent = {
props: {
title: {
type: String,
required: true
}
},
template: `
<div class="container mx-auto px-4 py-8">
<h1 class="text-2xl font-bold mb-4">{{ title }}</h1>
<p class="text-gray-600">Cette fonctionnalité sera bientôt disponible.</p>
</div>
`
};
const routes = [
{
path: '/',
component: Layout,
children: [
{
path: '',
name: 'home',
redirect: '/manga'
},
{
path: '/manga',
name: 'manga',
component: HomePage
},
{
path: '/manga/details/:id',
name: 'manga-details',
component: MangaDetails
},
{
path: '/manga/add',
name: 'add-manga',
component: AddManga
},
{
path: '/manga/reader/:chapterId',
name: 'reader',
component: ChapterPage,
props: { title: 'Lecteur' }
},
// Import routes
{
path: '/import',
name: 'import',
component: NewImportPage
},
// Pages placeholder avec chargement différé
{
path: '/manga/import',
name: 'manga-import',
component: PlaceholderComponent,
props: { title: 'Import de bibliothèque' }
},
{
path: '/manga/discover',
name: 'discover',
component: DiscoverPage
},
{
path: '/convert',
name: 'convert',
component: ConversionPage
},
{
path: '/activity',
name: 'activity',
component: ActivityPage
},
// Paramètres
{
path: '/settings',
name: 'settings',
component: PlaceholderComponent,
props: { title: 'Paramètres' }
},
{
path: '/settings/general',
name: 'settings-general',
component: PlaceholderComponent,
props: { title: 'Paramètres généraux' }
},
{
path: '/settings/folders',
name: 'settings-folders',
component: PlaceholderComponent,
props: { title: 'Gestion des dossiers' }
},
{
path: '/settings/scrappers',
name: 'scrapper-configurations',
component: ScrapperConfigurations
},
{
path: '/settings/scrappers/new',
name: 'scrapper-new',
component: ScrapperEdit
},
{
path: '/settings/scrappers/edit/:id',
name: 'scrapper-edit',
component: ScrapperEdit
},
{
path: '/settings/ui',
name: 'settings-ui',
component: UserPreferencesPage
},
// Système
{
path: '/system',
name: 'system',
component: PlaceholderComponent,
props: { title: 'Système' }
},
{
path: '/system/status',
name: 'system-status',
component: PlaceholderComponent,
props: { title: 'Status du système' }
},
{
path: '/system/backup',
name: 'system-backup',
component: PlaceholderComponent,
props: { title: 'Sauvegarde' }
},
{
path: '/system/logs',
name: 'system-logs',
component: LogsPage,
},
{
path: '/system/updates',
name: 'system-updates',
component: PlaceholderComponent,
props: { title: 'Mises à jour' }
}
]
}
];
export const router = createRouter({
history: createWebHistory('/'),
routes
});