/** * 订阅 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; };