diff --git a/src/router/index.ts b/src/router/index.ts index 3c3955b..fb38fd5 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,5 +1,6 @@ import { createRouter, createWebHistory } from 'vue-router' import { useAuthStore } from '@/stores/auth' +import { setPageMeta } from '@/utils/seo' const router = createRouter({ history: createWebHistory(), @@ -7,7 +8,8 @@ const router = createRouter({ { path: '/', name: 'Home', - component: () => import('@/views/HomeView.vue') + component: () => import('@/views/HomeView.vue'), + meta: { title: '首页', description: 'Mach-CMS 技术博客与笔记' } }, { path: '/post/:slug', @@ -17,24 +19,25 @@ const router = createRouter({ { path: '/search', name: 'Search', - component: () => import('@/views/SearchView.vue') + component: () => import('@/views/SearchView.vue'), + meta: { title: '搜索' } }, { path: '/login', name: 'Login', component: () => import('@/views/LoginView.vue'), - meta: { guestOnly: true } + meta: { guestOnly: true, title: '登录' } }, { path: '/register', name: 'Register', component: () => import('@/views/RegisterView.vue'), - meta: { guestOnly: true } + meta: { guestOnly: true, title: '注册' } }, { path: '/admin', component: () => import('@/views/admin/AdminLayout.vue'), - meta: { requiresAuth: true }, + meta: { requiresAuth: true, title: '管理后台' }, children: [ { path: '', @@ -43,36 +46,46 @@ const router = createRouter({ { path: 'articles', name: 'AdminArticleList', - component: () => import('@/views/admin/ArticleListView.vue') + component: () => import('@/views/admin/ArticleListView.vue'), + meta: { title: '文章管理' } }, { path: 'articles/new', name: 'AdminArticleCreate', - component: () => import('@/views/admin/ArticleEditorView.vue') + component: () => import('@/views/admin/ArticleEditorView.vue'), + meta: { title: '新建文章' } }, { path: 'articles/edit/:id', name: 'AdminArticleEdit', - component: () => import('@/views/admin/ArticleEditorView.vue') + component: () => import('@/views/admin/ArticleEditorView.vue'), + meta: { title: '编辑文章' } }, { path: 'tags', name: 'AdminTagList', - component: () => import('@/views/admin/TagListView.vue') + component: () => import('@/views/admin/TagListView.vue'), + meta: { title: '标签管理' } }, { path: 'users', name: 'AdminUserList', component: () => import('@/views/admin/UserListView.vue'), - meta: { requiresAdmin: true } + meta: { requiresAdmin: true, title: '用户管理' } }, { path: 'comments', name: 'AdminCommentReview', component: () => import('@/views/admin/CommentReviewView.vue'), - meta: { requiresAdmin: true } + meta: { requiresAdmin: true, title: '评论审核' } } ] + }, + { + path: '/:pathMatch(.*)*', + name: 'NotFound', + component: () => import('@/views/NotFoundView.vue'), + meta: { title: '页面不存在' } } ] }) @@ -91,4 +104,12 @@ router.beforeEach((to, _from, next) => { } }) +// 全局后置钩子设置 meta +router.afterEach((to) => { + const meta = to.meta as { title?: string; description?: string } + if (meta.title) { + setPageMeta({ title: meta.title, description: meta.description }) + } +}) + export default router \ No newline at end of file