|
|
|
@ -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 |