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 => {
Project Logo - + {{ 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 @@ + + + + + \ No newline at end of file