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