2
0

fix:修改错误提示

This commit is contained in:
zhongzm
2025-01-10 18:38:08 +08:00
parent 5dcaf7d475
commit b12d8fb218

View File

@@ -5,7 +5,7 @@ import { useAppStore } from '@/store/modules/app';
import type { ECOption } from '@/hooks/common/echarts';
import { useI18n } from 'vue-i18n';
import { useAuthStore } from '@/store/modules/auth';
import { clientAuth } from '@/service/ue/client';
const { t } = useI18n();
const authStore = useAuthStore();
@@ -257,94 +257,122 @@ const updateGaugeData = (opts: ECOption, data: GaugeDisplayData, progressRatio?:
// 添加峰值速率的 ref
const peakTrafficRate = ref(0);
// 添加检查是否可以上网的函数
function checkAndTriggerAuth(dashboardData: any) {
// 检查是否有余额
const hasBalance = dashboardData.balance > 0;
// 检查是否不限制流量
const noTrafficLimit = !dashboardData.trafficEnable;
// 检查是否有剩余流量
const hasRemainingTraffic = dashboardData.trafficEnable &&
(dashboardData.traffic - dashboardData.trafficUsed) > 0;
// 如果满足任一条件,静默触发上网
if (hasBalance || noTrafficLimit || hasRemainingTraffic) {
clientAuth().catch(err => {
console.warn('Auto auth failed:', err);
});
}
}
// 修改 mockDataUpdate 函数,在获取数据后添加检查
async function mockDataUpdate() {
try {
const response = await authStore.getDashboardData();
if (response) {
// 更新余额和设备数据
const numBalance = Number(response.balance);
baseData.value[0] = {
...baseData.value[0],
value: numBalance, // 使用转换后的数字
max: Math.max(numBalance, 100),
displayValue: formatBalance(response.balance),
unit: '元',
subTitle: t('page.headerbanner.deviceCount') + `: ${response.clientNum}`
};
// 先计算剩余流量(字节单位)
const totalTraffic = response.traffic; // 总流量(字节)
const usedTraffic = response.trafficUsed; // 已用流量(字节)
// 计算剩余流量,确保不会出现负数
const remainingTraffic = Math.max(0, totalTraffic - usedTraffic); // 剩余流量(字节)
// 计算进度比例,确保在 0-1 之间
const progressRatio = Math.min(1, Math.max(0, remainingTraffic / totalTraffic));
// 格式化流量显示
const formattedTotal = formatTraffic(totalTraffic);
const formattedUsed = formatTraffic(usedTraffic);
const formattedRemaining = formatTraffic(remainingTraffic);
// 更新流量数据显示
baseData.value[1] = {
...baseData.value[1],
value: remainingTraffic,
max: totalTraffic,
displayValue: `${formattedRemaining.value}${formattedRemaining.unit}`,
unit: '',
description: `${t('page.headerbanner.monthflowr')} (${formattedTotal.value}${formattedTotal.unit})`,
subTitle: t('page.headerbanner.Used') + `: ${formattedUsed.value}${formattedUsed.unit}`
};
// 获取当前速率
const currentActivity = Number(response.activity ?? 0);
// 更新峰值速率
if (currentActivity > peakTrafficRate.value) {
peakTrafficRate.value = currentActivity;
}
// 格式化当前速度和峰值速度
const currentSpeed = formatSpeed(currentActivity);
const peakSpeed = formatSpeed(peakTrafficRate.value);
// 设置速率的最大值
const minMax = 1024; // 1KB/s 作为最小最大值
const dynamicMax = Math.max(
currentSpeed.value * 1.5,
peakSpeed.value,
minMax
);
// 更新速率数据
baseData.value[2] = {
...baseData.value[2],
value: currentSpeed.value,
unit: currentSpeed.unit,
max: dynamicMax,
subTitle: t('page.headerbanner.maxspeed') + `: ${peakSpeed.value}${peakSpeed.unit}`
};
// 统一更新所有图表
updateGauge1(opts => updateGaugeData(opts, baseData.value[0]));
updateGauge2(opts => {
const newOpts = updateGaugeData(opts, baseData.value[1], progressRatio);
// 添加动画配置
return {
...newOpts,
animation: true,
animationDuration: 1000,
animationEasing: 'cubicInOut'
// 检查响应是否有效
if (response && typeof response === 'object') {
// 检查必要的字段是否存在
if (response.balance !== undefined) {
// 更新余额和设备数据
const numBalance = Number(response.balance);
baseData.value[0] = {
...baseData.value[0],
value: numBalance,
max: Math.max(numBalance, 100),
displayValue: formatBalance(response.balance),
unit: '元',
subTitle: t('page.headerbanner.deviceCount') + `: ${response.clientNum || 0}`
};
});
updateGauge3(opts => updateGaugeData(opts, baseData.value[2]));
// 处理流量数据,使用默认值处理可能的空值
const totalTraffic = response.traffic || 0;
const usedTraffic = response.trafficUsed || 0;
const remainingTraffic = Math.max(0, totalTraffic - usedTraffic);
const progressRatio = totalTraffic ? Math.min(1, Math.max(0, remainingTraffic / totalTraffic)) : 0;
// 格式化流量显示
const formattedTotal = formatTraffic(totalTraffic);
const formattedUsed = formatTraffic(usedTraffic);
const formattedRemaining = formatTraffic(remainingTraffic);
// 更新流量数据显示
baseData.value[1] = {
...baseData.value[1],
value: remainingTraffic,
max: totalTraffic,
displayValue: `${formattedRemaining.value}${formattedRemaining.unit}`,
unit: '',
description: `${t('page.headerbanner.monthflowr')} (${formattedTotal.value}${formattedTotal.unit})`,
subTitle: t('page.headerbanner.Used') + `: ${formattedUsed.value}${formattedUsed.unit}`
};
// 获取当前速率
const currentActivity = Number(response.activity ?? 0);
// 更新峰值速率
if (currentActivity > peakTrafficRate.value) {
peakTrafficRate.value = currentActivity;
}
// 格式化当前速度和峰值速度
const currentSpeed = formatSpeed(currentActivity);
const peakSpeed = formatSpeed(peakTrafficRate.value);
// 设置速率的最大值
const minMax = 1024; // 1KB/s 作为最小最大值
const dynamicMax = Math.max(
currentSpeed.value * 1.5,
peakSpeed.value,
minMax
);
// 更新速率数据
baseData.value[2] = {
...baseData.value[2],
value: currentSpeed.value,
unit: currentSpeed.unit,
max: dynamicMax,
subTitle: t('page.headerbanner.maxspeed') + `: ${peakSpeed.value}${peakSpeed.unit}`
};
// 静默执行自动上网检查
try {
await checkAndTriggerAuth(response);
} catch (error) {
console.warn('Auto auth check failed:', error);
}
// 更新图表
updateGauge1(opts => updateGaugeData(opts, baseData.value[0]));
updateGauge2(opts => {
const newOpts = updateGaugeData(opts, baseData.value[1], progressRatio);
return {
...newOpts,
animation: true,
animationDuration: 1000,
animationEasing: 'cubicInOut'
};
});
updateGauge3(opts => updateGaugeData(opts, baseData.value[2]));
} else {
console.warn('Invalid dashboard data structure:', response);
}
}
} catch (error) {
console.error('Failed to fetch dashboard data:', error);
// 只记录真正的错误
if (error instanceof Error) {
console.warn('Dashboard data update failed:', error.message);
}
}
}