diff --git a/package-lock.json b/package-lock.json
index e541914..4f57a85 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2815,6 +2815,16 @@
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"license": "MIT"
},
+ "node_modules/date-fns": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
"node_modules/de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@@ -7394,6 +7404,7 @@
"@tailwindcss/vite": "^4.1.4",
"@xterm/addon-search": "^0.15.0",
"axios": "^1.8.4",
+ "date-fns": "^4.1.0",
"monaco-editor": "^0.52.2",
"pinia": "^3.0.2",
"pinia-plugin-persistedstate": "^4.2.0",
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 60f0bbc..d4b7a7b 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -14,6 +14,7 @@
"@tailwindcss/vite": "^4.1.4",
"@xterm/addon-search": "^0.15.0",
"axios": "^1.8.4",
+ "date-fns": "^4.1.0",
"monaco-editor": "^0.52.2",
"pinia": "^3.0.2",
"pinia-plugin-persistedstate": "^4.2.0",
diff --git a/packages/frontend/src/App.vue b/packages/frontend/src/App.vue
index e5c99b1..6c839bb 100644
--- a/packages/frontend/src/App.vue
+++ b/packages/frontend/src/App.vue
@@ -255,7 +255,7 @@ const isElementVisibleAndFocusable = (element: HTMLElement): boolean => {

-
+
{{ t('nav.dashboard') }}
{{ t('nav.terminal') }}
{{ t('nav.proxies') }}
{{ t('nav.notifications') }}
diff --git a/packages/frontend/src/locales/en.json b/packages/frontend/src/locales/en.json
index b1a93eb..9802c9e 100644
--- a/packages/frontend/src/locales/en.json
+++ b/packages/frontend/src/locales/en.json
@@ -788,5 +788,14 @@
"blockIO": "Block I/O",
"pids": "PIDs"
}
+ },
+ "dashboard": {
+ "recentConnections": "Recent Connections",
+ "lastConnected": "Last connected:",
+ "noRecentConnections": "No recent connection records",
+ "viewAllConnections": "View All Connections",
+ "recentActivity": "Recent Activity",
+ "noRecentActivity": "No recent activity records",
+ "viewFullAuditLog": "View Full Audit Log"
}
}
diff --git a/packages/frontend/src/locales/zh.json b/packages/frontend/src/locales/zh.json
index bf4891f..a439e4f 100644
--- a/packages/frontend/src/locales/zh.json
+++ b/packages/frontend/src/locales/zh.json
@@ -793,5 +793,14 @@
"blockIO": "磁盘 I/O",
"pids": "进程数"
}
+ },
+ "dashboard": {
+ "recentConnections": "最近连接",
+ "lastConnected": "上次连接:",
+ "noRecentConnections": "没有最近连接记录",
+ "viewAllConnections": "查看所有连接",
+ "recentActivity": "最近活动",
+ "noRecentActivity": "没有最近活动记录",
+ "viewFullAuditLog": "查看完整审计日志"
}
}
diff --git a/packages/frontend/src/router/index.ts b/packages/frontend/src/router/index.ts
index f38242a..e97d18f 100644
--- a/packages/frontend/src/router/index.ts
+++ b/packages/frontend/src/router/index.ts
@@ -7,8 +7,8 @@ const routes: Array
= [
{
path: '/',
name: 'Dashboard',
- // component: () => import('../views/DashboardView.vue') // 稍后创建
- component: { template: '仪表盘 (建设中)
' } // 临时占位
+ component: () => import('../views/DashboardView.vue') // 指向实际的仪表盘组件
+ // component: { template: '仪表盘 (建设中)
' } // 移除临时占位
},
// 登录页面 (占位符)
{
diff --git a/packages/frontend/src/views/DashboardView.vue b/packages/frontend/src/views/DashboardView.vue
new file mode 100644
index 0000000..90ab7a4
--- /dev/null
+++ b/packages/frontend/src/views/DashboardView.vue
@@ -0,0 +1,213 @@
+
+
+
+
+
{{ t('nav.dashboard') }}
+
+
+
+
+
+
+
+
{{ t('common.loading') }}
+
+
{{ t('dashboard.noRecentConnections', '没有最近连接记录') }}
+
+
+
+
+
+
+
+
+
{{ t('common.loading') }}
+
+
{{ t('dashboard.noRecentActivity', '没有最近活动记录') }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file