diff --git a/web/src/components/layout/HeaderBar.js b/web/src/components/layout/HeaderBar.js index b7425645..98a7e17b 100644 --- a/web/src/components/layout/HeaderBar.js +++ b/web/src/components/layout/HeaderBar.js @@ -221,7 +221,16 @@ const HeaderBar = () => { .fill(null) .map((_, index) => (
- + + } + />
)); } @@ -272,9 +281,22 @@ const HeaderBar = () => { if (isLoading) { return (
- + } + />
- + + } + />
); @@ -448,22 +470,35 @@ const HeaderBar = () => { /> handleNavLinkClick('home')} className="flex items-center gap-2 group ml-2"> - {isLoading ? ( - - ) : ( + + } + > logo - )} +
- {isLoading ? ( - - ) : ( - + + } + > + {systemName} - )} + {(isSelfUseMode || isDemoSiteMode) && !isLoading && ( { // ========== Hooks - Memoized Values ========== const performanceMetrics = useMemo(() => { const timeDiff = (Date.parse(end_timestamp) - Date.parse(start_timestamp)) / 60000; - const avgRPM = (times / timeDiff).toFixed(3); + const avgRPM = isNaN(times / timeDiff) ? '0' : (times / timeDiff).toFixed(3); const avgTPM = isNaN(consumeTokens / timeDiff) ? '0' : (consumeTokens / timeDiff).toFixed(3); return { avgRPM, avgTPM, timeDiff }; @@ -627,6 +628,7 @@ const Detail = (props) => { const loadQuotaData = useCallback(async () => { setLoading(true); + const startTime = Date.now(); try { let url = ''; let localStartTimestamp = Date.parse(start_timestamp) / 1000; @@ -654,7 +656,11 @@ const Detail = (props) => { showError(message); } } finally { - setLoading(false); + const elapsed = Date.now() - startTime; + const remainingTime = Math.max(0, 500 - elapsed); + setTimeout(() => { + setLoading(false); + }, remainingTime); } }, [start_timestamp, end_timestamp, username, dataExportDefaultTime, isAdminUser]); @@ -1202,10 +1208,24 @@ const Detail = (props) => {
{item.title}
-
{item.value}
+
+ + } + > + {item.value} + +
- {item.trendData && item.trendData.length > 0 && ( + {(loading || (item.trendData && item.trendData.length > 0)) && (