chore(points): align types/api with final backend contract - apps/web/src/pages/subscription/constants.ts
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user