mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-29 09:37:37 +08:00
Fix custom usage script summaries (#3129)
Co-authored-by: Zihao Han <hanhan3344@users.noreply.github.com>
This commit is contained in:
@@ -28,6 +28,7 @@ import {
|
||||
CODING_PLAN_PROVIDERS,
|
||||
detectCodingPlanProvider,
|
||||
} from "@/config/codingPlanProviders";
|
||||
import { formatUsageDataSummary } from "@/utils/usageDisplay";
|
||||
|
||||
interface UsageScriptModalProps {
|
||||
provider: Provider;
|
||||
@@ -394,10 +395,13 @@ const UsageScriptModal: React.FC<UsageScriptModalProps> = ({
|
||||
const result = await subscriptionApi.getBalance(baseUrl, apiKey);
|
||||
if (result.success && result.data && result.data.length > 0) {
|
||||
const summary = result.data
|
||||
.map((d) => {
|
||||
const name = d.planName ? `[${d.planName}] ` : "";
|
||||
return `${name}${t("usage.remaining")} ${d.remaining?.toFixed(2)} ${d.unit || ""}`;
|
||||
})
|
||||
.map((d) =>
|
||||
formatUsageDataSummary(d, {
|
||||
invalid: t("usage.invalid"),
|
||||
remaining: t("usage.remaining"),
|
||||
used: t("usage.used"),
|
||||
}),
|
||||
)
|
||||
.join(", ");
|
||||
toast.success(`${t("usageScript.testSuccess")}${summary}`, {
|
||||
duration: 3000,
|
||||
@@ -493,10 +497,13 @@ const UsageScriptModal: React.FC<UsageScriptModalProps> = ({
|
||||
);
|
||||
if (result.success && result.data && result.data.length > 0) {
|
||||
const summary = result.data
|
||||
.map((plan: UsageData) => {
|
||||
const planInfo = plan.planName ? `[${plan.planName}]` : "";
|
||||
return `${planInfo} ${t("usage.remaining")} ${plan.remaining} ${plan.unit}`;
|
||||
})
|
||||
.map((plan: UsageData) =>
|
||||
formatUsageDataSummary(plan, {
|
||||
invalid: t("usage.invalid"),
|
||||
remaining: t("usage.remaining"),
|
||||
used: t("usage.used"),
|
||||
}),
|
||||
)
|
||||
.join(", ");
|
||||
toast.success(`${t("usageScript.testSuccess")}${summary}`, {
|
||||
duration: 3000,
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
import type { UsageData } from "@/types";
|
||||
|
||||
interface UsageSummaryLabels {
|
||||
invalid: string;
|
||||
remaining: string;
|
||||
used: string;
|
||||
}
|
||||
|
||||
function formatNumber(value: number): string {
|
||||
return Number.isInteger(value) ? value.toString() : value.toFixed(2);
|
||||
}
|
||||
|
||||
function formatValue(value: number, unit?: string): string {
|
||||
if (!unit) {
|
||||
return formatNumber(value);
|
||||
}
|
||||
|
||||
return unit === "%"
|
||||
? `${formatNumber(value)}%`
|
||||
: `${formatNumber(value)} ${unit}`;
|
||||
}
|
||||
|
||||
function isNumber(value: unknown): value is number {
|
||||
return typeof value === "number" && Number.isFinite(value);
|
||||
}
|
||||
|
||||
function formatUsed(
|
||||
data: UsageData,
|
||||
labels: UsageSummaryLabels,
|
||||
): string | null {
|
||||
if (!isNumber(data.used)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (isNumber(data.total) && data.total > 0) {
|
||||
const usedPercent = (data.used / data.total) * 100;
|
||||
|
||||
if (data.unit === "%" && data.total === 100) {
|
||||
return `${labels.used} ${formatValue(data.used, "%")}`;
|
||||
}
|
||||
|
||||
return `${labels.used} ${formatNumber(usedPercent)}%`;
|
||||
}
|
||||
|
||||
return `${labels.used} ${formatValue(data.used, data.unit)}`;
|
||||
}
|
||||
|
||||
export function formatUsageDataSummary(
|
||||
data: UsageData,
|
||||
labels: UsageSummaryLabels,
|
||||
): string {
|
||||
const planPrefix = data.planName ? `[${data.planName}] ` : "";
|
||||
|
||||
if (data.isValid === false) {
|
||||
return `${planPrefix}${data.invalidMessage || labels.invalid}`;
|
||||
}
|
||||
|
||||
const parts = [
|
||||
formatUsed(data, labels),
|
||||
isNumber(data.remaining)
|
||||
? `${labels.remaining} ${formatValue(data.remaining, data.unit)}`
|
||||
: null,
|
||||
data.extra || null,
|
||||
].filter((part): part is string => Boolean(part));
|
||||
|
||||
return `${planPrefix}${parts.join(" / ") || labels.invalid}`;
|
||||
}
|
||||
Reference in New Issue
Block a user