From ac30f0172faaf9d3c1fbd8bee0aa7a8ee031bc8e Mon Sep 17 00:00:00 2001 From: root Date: Mon, 2 Feb 2026 04:50:22 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B9=B3=E9=93=BA=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E7=94=A8=E6=88=B7=E5=88=87=E6=8D=A2=E4=B8=8E=E5=9B=BE?= =?UTF-8?q?=E8=A1=A8TS=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vite-frontend/src/pages/dashboard.tsx | 66 ++++++++++++++++----------- vite-frontend/src/pages/forward.tsx | 9 ++-- vite-frontend/src/types/recharts.d.ts | 11 +++++ 3 files changed, 56 insertions(+), 30 deletions(-) create mode 100644 vite-frontend/src/types/recharts.d.ts diff --git a/vite-frontend/src/pages/dashboard.tsx b/vite-frontend/src/pages/dashboard.tsx index 67b8390..6515618 100644 --- a/vite-frontend/src/pages/dashboard.tsx +++ b/vite-frontend/src/pages/dashboard.tsx @@ -741,31 +741,45 @@ export default function DashboardPage() { tickLine={false} axisLine={{ stroke: '#e5e7eb', strokeWidth: 1 }} /> - { - if (value === 0) return '0'; - if (value < 1024) return `${value}B`; - if (value < 1024 * 1024) return `${(value / 1024).toFixed(1)}K`; - if (value < 1024 * 1024 * 1024) return `${(value / (1024 * 1024)).toFixed(1)}M`; - return `${(value / (1024 * 1024 * 1024)).toFixed(1)}G`; - }} - /> - { - if (active && payload && payload.length) { - return ( -
-

{`时间: ${label}`}

-

- {`流量: ${formatFlow(payload[0]?.value as number || 0)}`} -

-
- ); - } - return null; + { + const v = typeof value === 'number' ? value : Number(value); + if (!Number.isFinite(v)) return String(value); + if (v === 0) return '0'; + if (v < 1024) return `${v}B`; + if (v < 1024 * 1024) return `${(v / 1024).toFixed(1)}K`; + if (v < 1024 * 1024 * 1024) return `${(v / (1024 * 1024)).toFixed(1)}M`; + return `${(v / (1024 * 1024 * 1024)).toFixed(1)}G`; + }} + /> + ; + label?: string | number; + }) => { + if (active && payload && payload.length) { + const firstValue = payload[0]?.value; + const numericValue = typeof firstValue === 'number' ? firstValue : Number(firstValue); + const flowValue = Number.isFinite(numericValue) ? numericValue : 0; + + return ( +
+

{`时间: ${label ?? ''}`}

+

+ {`流量: ${formatFlow(flowValue)}`} +

+
+ ); + } + return null; }} /> ); -} \ No newline at end of file +} diff --git a/vite-frontend/src/pages/forward.tsx b/vite-frontend/src/pages/forward.tsx index 5492ab4..177791c 100644 --- a/vite-frontend/src/pages/forward.tsx +++ b/vite-frontend/src/pages/forward.tsx @@ -1117,6 +1117,8 @@ export default function ForwardPage() { }) ); + const tokenUserId = JwtUtil.getUserIdFromToken(); + // 根据排序顺序获取转发列表 const sortedForwards = useMemo((): Forward[] => { // 确保 forwards 数组存在且有效 @@ -1127,9 +1129,8 @@ export default function ForwardPage() { // 在平铺模式下,只显示当前用户的转发 let filteredForwards = forwards; if (viewMode === 'direct') { - const currentUserId = JwtUtil.getUserIdFromToken(); - if (currentUserId !== null) { - filteredForwards = forwards.filter(forward => forward.userId === currentUserId); + if (tokenUserId !== null) { + filteredForwards = forwards.filter(forward => forward.userId === tokenUserId); } } @@ -1168,7 +1169,7 @@ export default function ForwardPage() { } return sortedByDb; - }, [forwards, forwardOrder, viewMode]); + }, [forwards, forwardOrder, viewMode, tokenUserId]); const sortableForwardIds = useMemo( () => sortedForwards.map(f => f.id).filter(id => id > 0), diff --git a/vite-frontend/src/types/recharts.d.ts b/vite-frontend/src/types/recharts.d.ts new file mode 100644 index 0000000..95994aa --- /dev/null +++ b/vite-frontend/src/types/recharts.d.ts @@ -0,0 +1,11 @@ +declare module 'recharts' { + import * as React from 'react'; + + export const LineChart: React.ComponentType>; + export const Line: React.ComponentType>; + export const XAxis: React.ComponentType>; + export const YAxis: React.ComponentType>; + export const CartesianGrid: React.ComponentType>; + export const Tooltip: React.ComponentType>; + export const ResponsiveContainer: React.ComponentType>; +}