feat: 添加安全仪表板前端页面

- 新增 SecurityPage.vue: 统计卡片、威胁事件表格、封禁管理、风险查询
- 新增 api/security.js: 安全相关API封装
- 路由添加 /security 页面
- 侧边栏添加"安全防护"菜单项

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-27 01:56:22 +08:00
parent 759d99e8af
commit 4ba933b001
22 changed files with 938 additions and 54 deletions

View File

@@ -1,34 +1,34 @@
{
"_email-BsKBHU5S.js": {
"file": "assets/email-BsKBHU5S.js",
"_email-DoKk83fr.js": {
"file": "assets/email-DoKk83fr.js",
"name": "email",
"imports": [
"index.html"
]
},
"_tasks-DpslJtm_.js": {
"file": "assets/tasks-DpslJtm_.js",
"_tasks-Bgkd54ac.js": {
"file": "assets/tasks-Bgkd54ac.js",
"name": "tasks",
"imports": [
"index.html"
]
},
"_update-DcFD-YxU.js": {
"file": "assets/update-DcFD-YxU.js",
"_update-BVJ0Pp6O.js": {
"file": "assets/update-BVJ0Pp6O.js",
"name": "update",
"imports": [
"index.html"
]
},
"_users-CC9BckjT.js": {
"file": "assets/users-CC9BckjT.js",
"_users-Bw5HW1mw.js": {
"file": "assets/users-Bw5HW1mw.js",
"name": "users",
"imports": [
"index.html"
]
},
"index.html": {
"file": "assets/index-CdjS44Uj.js",
"file": "assets/index-CDhtYQo-.js",
"name": "index",
"src": "index.html",
"isEntry": true,
@@ -39,15 +39,16 @@
"src/pages/LogsPage.vue",
"src/pages/AnnouncementsPage.vue",
"src/pages/EmailPage.vue",
"src/pages/SecurityPage.vue",
"src/pages/SystemPage.vue",
"src/pages/SettingsPage.vue"
],
"css": [
"assets/index-EWm4DZW8.css"
"assets/index-DiIt7W4Z.css"
]
},
"src/pages/AnnouncementsPage.vue": {
"file": "assets/AnnouncementsPage-Djmq3Wb7.js",
"file": "assets/AnnouncementsPage-BSLa6sED.js",
"name": "AnnouncementsPage",
"src": "src/pages/AnnouncementsPage.vue",
"isDynamicEntry": true,
@@ -59,12 +60,12 @@
]
},
"src/pages/EmailPage.vue": {
"file": "assets/EmailPage-q6nJlTue.js",
"file": "assets/EmailPage-BHdschU6.js",
"name": "EmailPage",
"src": "src/pages/EmailPage.vue",
"isDynamicEntry": true,
"imports": [
"_email-BsKBHU5S.js",
"_email-DoKk83fr.js",
"index.html"
],
"css": [
@@ -72,7 +73,7 @@
]
},
"src/pages/FeedbacksPage.vue": {
"file": "assets/FeedbacksPage-Drw6uvSR.js",
"file": "assets/FeedbacksPage-CLu2KtuG.js",
"name": "FeedbacksPage",
"src": "src/pages/FeedbacksPage.vue",
"isDynamicEntry": true,
@@ -84,13 +85,13 @@
]
},
"src/pages/LogsPage.vue": {
"file": "assets/LogsPage-DQd9IS3I.js",
"file": "assets/LogsPage-CbeqOQSe.js",
"name": "LogsPage",
"src": "src/pages/LogsPage.vue",
"isDynamicEntry": true,
"imports": [
"_users-CC9BckjT.js",
"_tasks-DpslJtm_.js",
"_users-Bw5HW1mw.js",
"_tasks-Bgkd54ac.js",
"index.html"
],
"css": [
@@ -98,22 +99,34 @@
]
},
"src/pages/ReportPage.vue": {
"file": "assets/ReportPage-Dnk3wsl3.js",
"file": "assets/ReportPage-DVC8Kawd.js",
"name": "ReportPage",
"src": "src/pages/ReportPage.vue",
"isDynamicEntry": true,
"imports": [
"index.html",
"_email-BsKBHU5S.js",
"_tasks-DpslJtm_.js",
"_update-DcFD-YxU.js"
"_email-DoKk83fr.js",
"_tasks-Bgkd54ac.js",
"_update-BVJ0Pp6O.js"
],
"css": [
"assets/ReportPage-TpqQWWvU.css"
]
},
"src/pages/SecurityPage.vue": {
"file": "assets/SecurityPage-CuXCrXIZ.js",
"name": "SecurityPage",
"src": "src/pages/SecurityPage.vue",
"isDynamicEntry": true,
"imports": [
"index.html"
],
"css": [
"assets/SecurityPage-CH3QeiaV.css"
]
},
"src/pages/SettingsPage.vue": {
"file": "assets/SettingsPage-YOW1Apwk.js",
"file": "assets/SettingsPage-cKC6DywW.js",
"name": "SettingsPage",
"src": "src/pages/SettingsPage.vue",
"isDynamicEntry": true,
@@ -125,12 +138,12 @@
]
},
"src/pages/SystemPage.vue": {
"file": "assets/SystemPage-DCcH_SAQ.js",
"file": "assets/SystemPage-2XepJLfC.js",
"name": "SystemPage",
"src": "src/pages/SystemPage.vue",
"isDynamicEntry": true,
"imports": [
"_update-DcFD-YxU.js",
"_update-BVJ0Pp6O.js",
"index.html"
],
"css": [
@@ -138,12 +151,12 @@
]
},
"src/pages/UsersPage.vue": {
"file": "assets/UsersPage-DhTO_5zp.js",
"file": "assets/UsersPage-CGNuB954.js",
"name": "UsersPage",
"src": "src/pages/UsersPage.vue",
"isDynamicEntry": true,
"imports": [
"_users-CC9BckjT.js",
"_users-Bw5HW1mw.js",
"index.html"
],
"css": [