diff --git a/.github/ISSUE_TEMPLATE/bug-提交.md b/.github/ISSUE_TEMPLATE/bug-提交.md deleted file mode 100644 index 531b81a..0000000 --- a/.github/ISSUE_TEMPLATE/bug-提交.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: Bug 提交 -about: 提交 bug,让面板变得更好。 -title: "[BUG]" -labels: '' -assignees: '' - ---- - -**面板版本(二选一)** -V0 | V1 - -**描述 bug** -在这里描述 bug 的相关信息 - -**屏幕截图** -有屏幕截图可以帮助更快定位到问题 - - -**额外信息** -可附上其他需要的额外信息 diff --git a/.github/ISSUE_TEMPLATE/功能申请.md b/.github/ISSUE_TEMPLATE/功能申请.md deleted file mode 100644 index cbf082e..0000000 --- a/.github/ISSUE_TEMPLATE/功能申请.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -name: 功能申请 -about: 描述需求 -title: "[FEAT]" -labels: '' -assignees: '' - ---- - -**面板版本(二选一)** -V0 | V1 - -**需要什么?** - -**额外信息** diff --git a/.github/ISSUE_TEMPLATE/改善建议.md b/.github/ISSUE_TEMPLATE/改善建议.md deleted file mode 100644 index ed4c5e0..0000000 --- a/.github/ISSUE_TEMPLATE/改善建议.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: 改善建议 -about: 交流面板需要改进的地方 -title: "[SUGGEST]" -labels: '' -assignees: '' - ---- - -**面板版本(二选一)** -V0 | V1 - -**需要改进的?** -* diff --git a/bun.lockb b/bun.lockb index f4c650c..373b666 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 3e2a241..09b3c91 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ "@radix-ui/react-progress": "^1.1.0", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", - "@tanstack/react-query": "^5.61.5", - "@tanstack/react-query-devtools": "^5.61.5", + "@tanstack/react-query": "^5.62.0", + "@tanstack/react-query-devtools": "^5.62.0", "@tanstack/react-table": "^8.20.5", "@types/luxon": "^3.4.2", "class-variance-authority": "^0.7.1", @@ -32,7 +32,7 @@ "luxon": "^3.5.0", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-i18next": "^15.1.2", + "react-i18next": "^15.1.3", "react-router-dom": "^7.0.1", "react-use-websocket": "^4.11.1", "recharts": "^2.13.3", @@ -41,13 +41,13 @@ "tailwindcss-animate": "^1.0.7" }, "devDependencies": { - "@eslint/js": "^9.15.0", + "@eslint/js": "^9.16.0", "@types/node": "^22.10.1", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "@vitejs/plugin-react-swc": "^3.7.2", "autoprefixer": "^10.4.20", - "eslint": "^9.15.0", + "eslint": "^9.16.0", "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-react-refresh": "^0.4.14", "globals": "^15.12.0", diff --git a/src/components/Header.tsx b/src/components/Header.tsx index a3d4623..fa58d08 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -49,6 +49,7 @@ function Header() { } function DashboardLink() { + const { t } = useTranslation(); const { data: userData } = useQuery({ queryKey: ["login-user"], queryFn: () => fetchLoginUser(), @@ -56,8 +57,6 @@ function DashboardLink() { refetchOnWindowFocus: true, }); - if (!userData?.data?.id) return null; - return (
- Dashboard + {!userData?.data?.id && t("login")} + {userData?.data?.id && t("dashboard")}
); diff --git a/src/components/ServerCard.tsx b/src/components/ServerCard.tsx index d077ee1..ab3f00f 100644 --- a/src/components/ServerCard.tsx +++ b/src/components/ServerCard.tsx @@ -8,14 +8,16 @@ import { useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; export default function ServerCard({ + now, serverInfo, }: { + now: number; serverInfo: NezhaServer; }) { const { t } = useTranslation(); const navigate = useNavigate(); const { name, country_code, online, cpu, up, down, mem, stg } = - formatNezhaInfo(serverInfo); + formatNezhaInfo(now, serverInfo); const showFlag = true; diff --git a/src/components/ServerDetailChart.tsx b/src/components/ServerDetailChart.tsx index 7bb9a81..2f55604 100644 --- a/src/components/ServerDetailChart.tsx +++ b/src/components/ServerDetailChart.tsx @@ -77,20 +77,20 @@ export default function ServerDetailChart({ return (
- - - - - - + + + + + +
); } -function CpuChart({ data }: { data: NezhaServer }) { +function CpuChart({ now,data }: { now: number;data: NezhaServer }) { const [cpuChartData, setCpuChartData] = useState([] as cpuChartData[]); - const { cpu } = formatNezhaInfo(data); + const { cpu } = formatNezhaInfo(now,data); useEffect(() => { if (data) { @@ -183,13 +183,13 @@ function CpuChart({ data }: { data: NezhaServer }) { ); } -function ProcessChart({ data }: { data: NezhaServer }) { +function ProcessChart({ now, data }: { now: number; data: NezhaServer }) { const { t } = useTranslation(); const [processChartData, setProcessChartData] = useState( [] as processChartData[], ); - const { process } = formatNezhaInfo(data); + const { process } = formatNezhaInfo(now,data); useEffect(() => { if (data) { @@ -276,11 +276,11 @@ function ProcessChart({ data }: { data: NezhaServer }) { ); } -function MemChart({ data }: { data: NezhaServer }) { +function MemChart({ now,data }: { now: number;data: NezhaServer }) { const { t } = useTranslation(); const [memChartData, setMemChartData] = useState([] as memChartData[]); - const { mem, swap } = formatNezhaInfo(data); + const { mem, swap } = formatNezhaInfo(now,data); useEffect(() => { if (data) { @@ -406,11 +406,11 @@ function MemChart({ data }: { data: NezhaServer }) { ); } -function DiskChart({ data }: { data: NezhaServer }) { +function DiskChart({ now,data }: { now: number;data: NezhaServer }) { const { t } = useTranslation(); const [diskChartData, setDiskChartData] = useState([] as diskChartData[]); - const { disk } = formatNezhaInfo(data); + const { disk } = formatNezhaInfo(now,data); useEffect(() => { if (data) { @@ -503,13 +503,13 @@ function DiskChart({ data }: { data: NezhaServer }) { ); } -function NetworkChart({ data }: { data: NezhaServer }) { +function NetworkChart({ now,data }: { now: number;data: NezhaServer }) { const { t } = useTranslation(); const [networkChartData, setNetworkChartData] = useState( [] as networkChartData[], ); - const { up, down } = formatNezhaInfo(data); + const { up, down } = formatNezhaInfo(now,data); useEffect(() => { if (data) { @@ -632,12 +632,12 @@ function NetworkChart({ data }: { data: NezhaServer }) { ); } -function ConnectChart({ data }: { data: NezhaServer }) { +function ConnectChart({ now,data }: { now: number;data: NezhaServer }) { const [connectChartData, setConnectChartData] = useState( [] as connectChartData[], ); - const { tcp, udp } = formatNezhaInfo(data); + const { tcp, udp } = formatNezhaInfo(now,data); useEffect(() => { if (data) { diff --git a/src/components/ServerDetailOverview.tsx b/src/components/ServerDetailOverview.tsx index 22e1b01..6512b19 100644 --- a/src/components/ServerDetailOverview.tsx +++ b/src/components/ServerDetailOverview.tsx @@ -37,7 +37,7 @@ export default function ServerDetailOverview({ return ; } - const { name, online, uptime, version } = formatNezhaInfo(server); + const { name, online, uptime, version } = formatNezhaInfo(nezhaWsData.now,server); return (
diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 4a54168..8414980 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -6,7 +6,7 @@ export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } -export function formatNezhaInfo(serverInfo: NezhaServer) { +export function formatNezhaInfo(now: number,serverInfo: NezhaServer) { const lastActiveTime = parseISOTimestamp(serverInfo.last_active); return { ...serverInfo, @@ -14,7 +14,7 @@ export function formatNezhaInfo(serverInfo: NezhaServer) { process: serverInfo.state.process_count || 0, up: serverInfo.state.net_out_speed / 1024 / 1024 || 0, down: serverInfo.state.net_in_speed / 1024 / 1024 || 0, - online: Date.now() - lastActiveTime <= 30000, + online: now - lastActiveTime <= 30000, uptime: serverInfo.state.uptime || 0, version: serverInfo.host.version || null, tcp: serverInfo.state.tcp_conn_count || 0, diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 2a120e3..f5f6349 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -1,6 +1,8 @@ { "nezha": "Nezha Monitoring", "overview": "Overview", + "dashboard": "Dashboard", + "login": "Login", "whereTheTimeIs": "Where the time is", "info": { "websocketConnecting": "WebSocket connecting", diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json index 786323b..3995e5e 100644 --- a/src/locales/zh-CN/translation.json +++ b/src/locales/zh-CN/translation.json @@ -1,6 +1,8 @@ { "nezha": "哪吒监控", "overview": "概览", + "dashboard": "管理后台", + "login": "登录", "whereTheTimeIs": "当前时间", "info": { "websocketConnecting": "WebSocket 连接中", diff --git a/src/locales/zh-TW/translation.json b/src/locales/zh-TW/translation.json index 296e5c0..9cececf 100644 --- a/src/locales/zh-TW/translation.json +++ b/src/locales/zh-TW/translation.json @@ -1,6 +1,8 @@ { "nezha": "哪吒監控", "overview": "概覽", + "dashboard": "管理後台", + "login": "登錄", "whereTheTimeIs": "目前時間", "info": { "websocketConnecting": "WebSocket 連接中", diff --git a/src/pages/Server.tsx b/src/pages/Server.tsx index 9ad833a..86f7ba3 100644 --- a/src/pages/Server.tsx +++ b/src/pages/Server.tsx @@ -57,10 +57,10 @@ export default function Servers() { const totalServers = nezhaWsData?.servers?.length || 0; const onlineServers = - nezhaWsData?.servers?.filter((server) => formatNezhaInfo(server).online) + nezhaWsData?.servers?.filter((server) => formatNezhaInfo(nezhaWsData.now,server).online) ?.length || 0; const offlineServers = - nezhaWsData?.servers?.filter((server) => !formatNezhaInfo(server).online) + nezhaWsData?.servers?.filter((server) => !formatNezhaInfo(nezhaWsData.now,server).online) ?.length || 0; const up = nezhaWsData?.servers?.reduce( @@ -112,7 +112,7 @@ export default function Servers() { {showServices && }
{filteredServers.map((serverInfo) => ( - + ))}