diff --git a/frontend/src/components/payment/SubscriptionPlanCard.vue b/frontend/src/components/payment/SubscriptionPlanCard.vue index d37645642a..55cf3384c5 100644 --- a/frontend/src/components/payment/SubscriptionPlanCard.vue +++ b/frontend/src/components/payment/SubscriptionPlanCard.vue @@ -26,13 +26,13 @@
- $ + {{ planCurrencySymbol }} {{ plan.price }} {{ plan.currency }}
/ {{ validitySuffix }}
- ${{ plan.original_price }} + {{ planCurrencySymbol }}{{ plan.original_price }} {{ discountText }}
@@ -106,6 +106,7 @@ import type { SubscriptionPlan } from '@/types/payment' import type { UserSubscription } from '@/types' import { useAppStore } from '@/stores/app' import { hasPeakRate as groupHasPeakRate, formatPeakRateWindow, serverTimezoneLabel } from '@/utils/peak-rate' +import { currencySymbol } from '@/components/payment/currency' import { platformAccentBarClass, platformBadgeLightClass, @@ -148,6 +149,7 @@ const rateDisplay = computed(() => { }) const appStore = useAppStore() +const planCurrencySymbol = computed(() => currencySymbol(props.plan.currency || 'USD')) const hasPeakRate = computed(() => groupHasPeakRate(props.plan)) diff --git a/frontend/src/components/payment/__tests__/SubscriptionPlanCard.spec.ts b/frontend/src/components/payment/__tests__/SubscriptionPlanCard.spec.ts index 230692d7fb..5e17321359 100644 --- a/frontend/src/components/payment/__tests__/SubscriptionPlanCard.spec.ts +++ b/frontend/src/components/payment/__tests__/SubscriptionPlanCard.spec.ts @@ -2,6 +2,7 @@ import { mount } from "@vue/test-utils"; import { describe, expect, it } from "vitest"; import { createPinia } from "pinia"; import { createI18n } from "vue-i18n"; +import type { SubscriptionPlan } from "@/types/payment"; import SubscriptionPlanCard from "../SubscriptionPlanCard.vue"; const i18n = createI18n({ @@ -25,7 +26,7 @@ const i18n = createI18n({ }, }); -const mountPlanCard = (groupPlatform: string) => +const mountPlanCard = (groupPlatform: string, overrides: Partial = {}) => mount(SubscriptionPlanCard, { props: { plan: { @@ -41,6 +42,7 @@ const mountPlanCard = (groupPlatform: string) => validity_unit: "day", supported_model_scopes: ["claude", "gemini_text", "gemini_image"], is_active: true, + ...overrides, }, }, global: { plugins: [i18n, createPinia()] }, @@ -62,4 +64,13 @@ describe("SubscriptionPlanCard", () => { expect(text).toContain("Gemini"); expect(text).toContain("Imagen"); }); + + it("uses the configured currency symbol while preserving USD for legacy plans", () => { + const cnyPlan = mountPlanCard("openai", { currency: "CNY", original_price: 20 }).text(); + + expect(cnyPlan).toContain("¥10CNY"); + expect(cnyPlan).toContain("¥20CNY"); + expect(mountPlanCard("openai", { currency: "USD" }).text()).toContain("$10USD"); + expect(mountPlanCard("openai", { currency: "" }).text()).toContain("$10"); + }); }); diff --git a/frontend/src/views/admin/orders/AdminPaymentPlansView.vue b/frontend/src/views/admin/orders/AdminPaymentPlansView.vue index 17a17a5f18..93a5303a76 100644 --- a/frontend/src/views/admin/orders/AdminPaymentPlansView.vue +++ b/frontend/src/views/admin/orders/AdminPaymentPlansView.vue @@ -29,9 +29,9 @@