首个可运行的版本

This commit is contained in:
2026-06-12 23:14:12 +08:00
commit b3d90c65f8
86 changed files with 4808 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router'
import { useAuthStore } from '@/stores/auth'
const routes: RouteRecordRaw[] = [
{
path: '/login',
name: 'Login',
component: () => import('@/views/auth/LoginView.vue'),
meta: { requiresAuth: false, layout: 'auth' },
},
{
path: '/register',
name: 'Register',
component: () => import('@/views/auth/RegisterView.vue'),
meta: { requiresAuth: false, layout: 'auth' },
},
{
path: '/',
component: () => import('@/layouts/ChatLayout.vue'),
meta: { requiresAuth: true },
children: [
{ path: '', redirect: '/chat' },
{
path: 'chat',
name: 'ChatList',
component: () => import('@/views/chat/ChatListView.vue'),
},
{
path: 'chat/:id',
name: 'ChatRoom',
component: () => import('@/views/chat/ChatRoomView.vue'),
},
],
},
{
path: '/contacts',
component: () => import('@/layouts/MainLayout.vue'),
meta: { requiresAuth: true },
children: [
{ path: '', name: 'Contacts', component: () => import('@/views/contacts/ContactsView.vue') },
{ path: 'search', name: 'Search', component: () => import('@/views/contacts/SearchView.vue') },
],
},
{
path: '/profile',
component: () => import('@/layouts/MainLayout.vue'),
meta: { requiresAuth: true },
children: [
{ path: '', name: 'Profile', component: () => import('@/views/profile/ProfileView.vue') },
],
},
{
path: '/admin',
children: [
{
path: 'login',
name: 'AdminLogin',
component: () => import('@/views/admin/AdminLoginView.vue'),
meta: { layout: 'auth' },
},
{
path: '',
component: () => import('@/layouts/AdminLayout.vue'),
meta: { requiresAdmin: true },
children: [
{ path: '', redirect: '/admin/dashboard' },
{ path: 'dashboard', name: 'AdminDashboard', component: () => import('@/views/admin/AdminDashboardView.vue') },
{ path: 'users', name: 'AdminUsers', component: () => import('@/views/admin/AdminUsersView.vue') },
{ path: 'messages', name: 'AdminMessages', component: () => import('@/views/admin/AdminMessagesView.vue') },
{ path: 'config', name: 'AdminConfig', component: () => import('@/views/admin/AdminConfigView.vue') },
],
},
],
},
]
const router = createRouter({
history: createWebHistory(),
routes,
})
// 路由守卫
router.beforeEach((to, _from, next) => {
const authStore = useAuthStore()
if (to.meta.requiresAuth && !authStore.isAuthenticated) {
next({ name: 'Login', query: { redirect: to.fullPath } })
return
}
if (to.meta.requiresAuth === false && authStore.isAuthenticated) {
next({ name: 'ChatList' })
return
}
next()
})
export default router