Merge remote-tracking branch 'origin/alpha' into alpha

This commit is contained in:
CaIon
2025-06-09 19:24:45 +08:00
5 changed files with 148 additions and 129 deletions

View File

@@ -1585,5 +1585,6 @@
"请输入说明": "Please enter the description",
"如:香港线路": "e.g. Hong Kong line",
"请联系管理员在系统设置中配置API信息": "Please contact the administrator to configure API information in the system settings.",
"确定要删除此API信息吗": "Are you sure you want to delete this API information?"
"确定要删除此API信息吗": "Are you sure you want to delete this API information?",
"测速": "Speed Test"
}

View File

@@ -13,6 +13,7 @@ import {
Tabs,
TabPane,
Empty,
Tag
} from '@douyinfe/semi-ui';
import {
IconRefresh,
@@ -25,7 +26,7 @@ import {
IconPulse,
IconStopwatchStroked,
IconTypograph,
IconPieChart2Stroked,
IconPieChart2Stroked
} from '@douyinfe/semi-icons';
import { IllustrationConstruction, IllustrationConstructionDark } from '@douyinfe/semi-illustrations';
import { VChart } from '@visactor/react-vchart';
@@ -495,6 +496,12 @@ const Detail = (props) => {
}
}, [t]);
const handleSpeedTest = useCallback((apiUrl) => {
const encodedUrl = encodeURIComponent(apiUrl);
const speedTestUrl = `https://www.tcptest.cn/http/${encodedUrl}`;
window.open(speedTestUrl, '_blank');
}, []);
const handleInputChange = useCallback((value, name) => {
if (name === 'data_export_default_time') {
setDataExportDefaultTime(value);
@@ -698,22 +705,17 @@ const Detail = (props) => {
}, [dataExportDefaultTime, getTimeInterval]);
const updateChartData = useCallback((data) => {
// 处理原始数据
const processedData = processRawData(data);
const { totalQuota, totalTimes, totalTokens, uniqueModels, timePoints, timeQuotaMap, timeTokensMap, timeCountMap } = processedData;
// 计算趋势数据
const trendDataResult = calculateTrendData(timePoints, timeQuotaMap, timeTokensMap, timeCountMap);
setTrendData(trendDataResult);
// 生成模型颜色映射
const newModelColors = generateModelColors(uniqueModels);
setModelColors(newModelColors);
// 聚合数据
const aggregatedData = aggregateDataByTimeAndModel(data);
// 生成饼图数据
const modelTotals = new Map();
for (let [_, value] of aggregatedData) {
updateMapValue(modelTotals, value.model, value.count);
@@ -724,7 +726,6 @@ const Detail = (props) => {
value: count,
})).sort((a, b) => b.value - a.value);
// 生成线图数据
const chartTimePoints = generateChartTimePoints(aggregatedData, data);
let newLineData = [];
@@ -748,7 +749,6 @@ const Detail = (props) => {
newLineData.sort((a, b) => a.Time.localeCompare(b.Time));
// 更新图表配置
updateChartSpec(
setSpecPie,
newPieData,
@@ -765,7 +765,6 @@ const Detail = (props) => {
'barData'
);
// 更新状态
setPieData(newPieData);
setLineData(newLineData);
setConsumeQuota(totalQuota);
@@ -987,14 +986,24 @@ const Detail = (props) => {
<div key={api.id} className="flex p-2 hover:bg-white rounded-lg transition-colors cursor-pointer">
<div className="flex-shrink-0 mr-3">
<Avatar
size="extra-extra-small"
size="extra-small"
color={api.color}
>
{api.route.substring(0, 2)}
</Avatar>
</div>
<div className="flex-1">
<div className="text-sm font-medium text-gray-900 mb-1">
<div className="text-sm font-medium text-gray-900 mb-1 !font-bold flex items-center gap-2">
<Tag
prefixIcon={<Gauge size={12} />}
size="small"
color="white"
shape='circle'
onClick={() => handleSpeedTest(api.url)}
className="cursor-pointer hover:opacity-80 text-xs"
>
{t('测速')}
</Tag>
{api.route}
</div>
<div