diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 2814320..f3d774d 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -9,7 +9,8 @@
"version": "0.1.0",
"dependencies": {
"lucide-vue-next": "^0.468.0",
- "vue": "^3.5.13"
+ "vue": "^3.5.13",
+ "vue-router": "^4.6.4"
},
"devDependencies": {
"@types/node": "^22.10.2",
@@ -1043,6 +1044,12 @@
"he": "^1.2.0"
}
},
+ "node_modules/@vue/devtools-api": {
+ "version": "6.6.4",
+ "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+ "license": "MIT"
+ },
"node_modules/@vue/language-core": {
"version": "2.2.12",
"resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.2.12.tgz",
@@ -1565,6 +1572,21 @@
}
}
},
+ "node_modules/vue-router": {
+ "version": "4.6.4",
+ "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz",
+ "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.6.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "vue": "^3.5.0"
+ }
+ },
"node_modules/vue-tsc": {
"version": "2.2.12",
"resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-2.2.12.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 4ad8c9b..533fa60 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,6 +1,23 @@
{
- "name": "nalati-rag-frontend", "private": true, "version": "0.1.0", "type": "module",
- "scripts": {"dev": "vite", "build": "vue-tsc -b && vite build", "preview": "vite preview"},
- "dependencies": {"lucide-vue-next": "^0.468.0", "vue": "^3.5.13"},
- "devDependencies": {"@types/node": "^22.10.2", "@vitejs/plugin-vue": "^5.2.1", "typescript": "~5.7.2", "vite": "^6.0.5", "vue-tsc": "^2.2.0"}
+ "name": "nalati-rag-frontend",
+ "private": true,
+ "version": "0.1.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vue-tsc -b && vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "lucide-vue-next": "^0.468.0",
+ "vue": "^3.5.13",
+ "vue-router": "^4.6.4"
+ },
+ "devDependencies": {
+ "@types/node": "^22.10.2",
+ "@vitejs/plugin-vue": "^5.2.1",
+ "typescript": "~5.7.2",
+ "vite": "^6.0.5",
+ "vue-tsc": "^2.2.0"
+ }
}
diff --git a/frontend/src/router.ts b/frontend/src/router.ts
index 8866a6a..6171ca7 100644
--- a/frontend/src/router.ts
+++ b/frontend/src/router.ts
@@ -9,6 +9,7 @@ const router=createRouter({history:createWebHistory(),routes:[
{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:'/settings',component:()=>import('./views/AccountSettingsView.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})
diff --git a/frontend/src/views/AccountSettingsView.vue b/frontend/src/views/AccountSettingsView.vue
new file mode 100644
index 0000000..612fd15
--- /dev/null
+++ b/frontend/src/views/AccountSettingsView.vue
@@ -0,0 +1,96 @@
+
+
+
+
+ 返回个人中心
+ 账户设置
+ 正在读取账户资料…
+
+ {{ error }}
+ {{ success }}
+
+
+
+
+
diff --git a/frontend/src/views/ProfileView.vue b/frontend/src/views/ProfileView.vue
index 2faf2d1..e211c86 100644
--- a/frontend/src/views/ProfileView.vue
+++ b/frontend/src/views/ProfileView.vue
@@ -1 +1 @@
-个人中心
{{error}}
- 用户名
- {{user.username}}
- 昵称
- {{user.nickname||'未设置'}}
- 邮箱
- {{user.email||'未设置'}}
- 角色
- {{user.role}}
+个人中心
{{error}}
- 用户名
- {{user.username}}
- 昵称
- {{user.nickname||'未设置'}}
- 邮箱
- {{user.email||'未设置'}}
- 角色
- {{user.role}}
- 注册时间
- {{new Date(user.created_at).toLocaleString()}}
账户设置