100 lines
2.5 KiB
TypeScript
100 lines
2.5 KiB
TypeScript
/**
|
|
* 订阅 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<SubscriptionInfo> => {
|
|
const response = await apiClient.get('/subscription/current');
|
|
return response.data;
|
|
};
|
|
|
|
/** 获取账单记录列表 */
|
|
export const getBillingRecords = async (): Promise<BillingRecord[]> => {
|
|
const response = await apiClient.get('/subscription/billing-records');
|
|
return response.data;
|
|
};
|
|
|
|
/** 升级/降级套餐 */
|
|
export const changePlan = async (request: ChangePlanRequest): Promise<ChangePlanResponse> => {
|
|
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;
|
|
};
|