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 @@
+注册