/** * 订阅 API 模块 * 对接后端订阅管理接口 */ import apiClient from "./client" /** 套餐类型 */ export type PlanType = "free" | "standard" | "pro" | "enterprise" /** 订阅状态 */ export type SubscriptionStatus = "active" | "expired" | "cancelled" | "trial" /** 账单状态 */ export type BillingStatus = "paid" | "pending" | "failed" | "refunded" /** 计费周期 */ export type BillingCycle = "monthly" | "yearly" /** 套餐信息 */ export interface Plan { id: PlanType name: string price: number | null yearly_price?: number | null description: string recommended: boolean features: string[] } /** 当前订阅信息 */ export interface SubscriptionInfo { id: string plan_id: PlanType plan_name: string status: SubscriptionStatus billing_cycle: BillingCycle current_period_start: string current_period_end: string amount: number auto_renew: boolean created_at: string } /** 账单记录 */ export interface BillingRecord { id: string plan_name: string amount: number billing_cycle: BillingCycle status: BillingStatus payment_method: string created_at: string invoice_url?: string } /** 升级/降级请求 */ export interface ChangePlanRequest { target_plan_id: PlanType billing_cycle: BillingCycle } /** 升级/降级响应 */ export interface ChangePlanResponse { success: boolean message: string new_subscription?: SubscriptionInfo } // ============ API 函数 ============ /** 获取当前订阅信息 */ export const getCurrentSubscription = async (): Promise => { const response = await apiClient.get("/subscription/current") return response.data } /** 获取账单记录列表 */ export const getBillingRecords = async (): Promise => { const response = await apiClient.get("/subscription/billing-records") return response.data } /** 升级/降级套餐 */ export const changePlan = async (request: ChangePlanRequest): Promise => { const response = await apiClient.post("/subscription/change-plan", request) return response.data } /** 取消订阅 */ export const cancelSubscription = async (): Promise<{ success: boolean message: string }> => { const response = await apiClient.post("/subscription/cancel") return response.data } /** 切换自动续费 */ export const toggleAutoRenew = async ( enabled: boolean, ): Promise<{ success: boolean; message: string }> => { const response = await apiClient.post("/subscription/toggle-auto-renew", { enabled, }) return response.data }