diff --git a/apps/web/src/pages/subscription/constants.ts b/apps/web/src/pages/subscription/constants.ts index 0e1b1843e..34f2ae02d 100644 --- a/apps/web/src/pages/subscription/constants.ts +++ b/apps/web/src/pages/subscription/constants.ts @@ -1,16 +1,32 @@ -import type { PlanType, BillingCycle } from "@/api/subscription" +/** + * 订阅套餐元数据 + * 价格硬编码兜底,真实价格以 GET /subscription/plans 为准 + */ +import type { PlanId, BillingCycle } from "@/api/subscription/types" -export const PLANS_META: Record = { - free: { name: "体验版", price: 0, yearlyPrice: 0 }, - standard: { name: "标准版", price: 99, yearlyPrice: 990 }, - pro: { name: "专业版", price: 299, yearlyPrice: 2990 }, - enterprise: { name: "企业版", price: 0, yearlyPrice: 0 }, +export const PLANS_META: Record< + PlanId, + { name: string; priceYuan: number; yearlyPriceYuan: number } +> = { + free: { name: "免费版", priceYuan: 0, yearlyPriceYuan: 0 }, + monthly: { name: "月度会员", priceYuan: 19.9, yearlyPriceYuan: 0 }, + quarterly: { name: "季度会员", priceYuan: 39.9, yearlyPriceYuan: 0 }, + yearly: { name: "年度会员", priceYuan: 0, yearlyPriceYuan: 159 }, } -export const getPlanName = (planId: PlanType | string) => PLANS_META[planId]?.name ?? "体验版" +export const getPlanName = (planId: PlanId | string): string => + PLANS_META[planId as PlanId]?.name ?? "免费版" -export const getPlanPrice = (planId: PlanType | string, cycle: BillingCycle) => { - const plan = PLANS_META[planId] +/** + * 获取展示价格(元) + * - monthly 周期:月卡/季卡按自身价格,年卡按月折算 + * - yearly 周期:年卡按年价,其他按年价 * 12 + */ +export const getPlanPrice = (planId: PlanId | string, cycle: BillingCycle): number => { + const plan = PLANS_META[planId as PlanId] if (!plan) return 0 - return cycle === "yearly" ? plan.yearlyPrice : plan.price + if (cycle === "yearly") { + return plan.yearlyPriceYuan > 0 ? plan.yearlyPriceYuan : plan.priceYuan * 12 + } + return plan.priceYuan }