chore(points): align types/api with final backend contract - apps/web/src/pages/subscription/constants.ts

This commit is contained in:
2026-09-16 10:20:26 +08:00
parent efa33f210f
commit e404de4fed
+26 -10
View File
@@ -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<string, { name: string; price: number; yearlyPrice: number }> = {
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
}