From 3ef97a472e4f4e657ea3a4a2eb62c49abd396c68 Mon Sep 17 00:00:00 2001
From: jhy <184825448@qq.com>
Date: Fri, 16 Oct 2026 17:39:04 +0800
Subject: [PATCH] feat: add auth routing and role guards
---
frontend/src/Root.vue | 2 ++
frontend/src/main.ts | 5 +++--
frontend/src/router.ts | 15 +++++++++++++++
frontend/src/views/AdminView.vue | 1 +
frontend/src/views/LoginView.vue | 1 +
frontend/src/views/ProfileView.vue | 1 +
frontend/src/views/RegisterView.vue | 1 +
7 files changed, 24 insertions(+), 2 deletions(-)
create mode 100644 frontend/src/Root.vue
create mode 100644 frontend/src/router.ts
create mode 100644 frontend/src/views/AdminView.vue
create mode 100644 frontend/src/views/LoginView.vue
create mode 100644 frontend/src/views/ProfileView.vue
create mode 100644 frontend/src/views/RegisterView.vue
diff --git a/frontend/src/Root.vue b/frontend/src/Root.vue
new file mode 100644
index 0000000..191c0a2
--- /dev/null
+++ b/frontend/src/Root.vue
@@ -0,0 +1,2 @@
+
+
diff --git a/frontend/src/main.ts b/frontend/src/main.ts
index c409869..ba5d6f8 100644
--- a/frontend/src/main.ts
+++ b/frontend/src/main.ts
@@ -1,5 +1,6 @@
import { createApp } from 'vue'
import './style.css'
import './enhancements.css'
-import App from './App.vue'
-createApp(App).mount('#app')
+import Root from './Root.vue'
+import router from './router'
+createApp(Root).use(router).mount('#app')
diff --git a/frontend/src/router.ts b/frontend/src/router.ts
new file mode 100644
index 0000000..8866a6a
--- /dev/null
+++ b/frontend/src/router.ts
@@ -0,0 +1,15 @@
+import { createRouter, createWebHistory } from 'vue-router'
+import App from './App.vue'
+import { getCurrentUser } from './services/auth'
+import type { UserRole } from './types/auth'
+
+let role:UserRole|undefined
+const router=createRouter({history:createWebHistory(),routes:[
+ {path:'/',component:App},
+ {path:'/login',component:()=>import('./views/LoginView.vue'),meta:{public:true}},
+ {path:'/register',component:()=>import('./views/RegisterView.vue'),meta:{public:true}},
+ {path:'/profile',component:()=>import('./views/ProfileView.vue')},
+ {path:'/admin',component:()=>import('./views/AdminView.vue'),meta:{role:'admin'}},
+]})
+router.beforeEach(async to=>{if(to.meta.public)return true;try{role=(await getCurrentUser()).role}catch{return {path:'/login',query:{redirect:to.fullPath}}}if(to.meta.role&&role!==to.meta.role)return {path:'/profile',query:{forbidden:'1'}};return true})
+export default router
diff --git a/frontend/src/views/AdminView.vue b/frontend/src/views/AdminView.vue
new file mode 100644
index 0000000..395510f
--- /dev/null
+++ b/frontend/src/views/AdminView.vue
@@ -0,0 +1 @@
+管理员用户管理
{{error}}
| 用户名 | 邮箱 | 角色 |
|---|
| {{u.username}} | {{u.email}} | {{u.role}} |
diff --git a/frontend/src/views/LoginView.vue b/frontend/src/views/LoginView.vue
new file mode 100644
index 0000000..25422ae
--- /dev/null
+++ b/frontend/src/views/LoginView.vue
@@ -0,0 +1 @@
+登录
注册账户
diff --git a/frontend/src/views/ProfileView.vue b/frontend/src/views/ProfileView.vue
new file mode 100644
index 0000000..2faf2d1
--- /dev/null
+++ b/frontend/src/views/ProfileView.vue
@@ -0,0 +1 @@
+个人中心
{{error}}
- 用户名
- {{user.username}}
- 昵称
- {{user.nickname||'未设置'}}
- 邮箱
- {{user.email||'未设置'}}
- 角色
- {{user.role}}
diff --git a/frontend/src/views/RegisterView.vue b/frontend/src/views/RegisterView.vue
new file mode 100644
index 0000000..2ca52a5
--- /dev/null
+++ b/frontend/src/views/RegisterView.vue
@@ -0,0 +1 @@
+注册
--
2.43.0