| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- /**
- * 邀请有礼功能相关API
- */
- import { USE_MOCK } from '@/utils/config';
- import { mockInviteRecords, mockInviteStats, mockActivityInfo, mockInviteCode } from '@/mock/invite';
- export enum InviteStatus {
- PENDING = 'pending',
- ACTIVATED = 'activated',
- REWARDED = 'rewarded',
- FAILED = 'failed'
- }
- export enum InviteStatusLabel {
- PENDING = '待激活',
- ACTIVATED = '已激活',
- REWARDED = '奖励已发放',
- FAILED = '发放失败'
- }
- export interface InviteCodeResponse {
- code: string;
- inviteUrl: string;
- expireTime?: string;
- }
- export interface BindInviteParams {
- inviteCode: string;
- }
- export interface BindInviteResponse {
- success: boolean;
- message: string;
- // 双向奖励发放结果
- rewardResult?: {
- inviteeCouponGranted: boolean; // 是否已向被邀请人发券
- inviteeCouponName?: string; // 被邀请人获得的优惠券名称
- inviteeCouponAmount?: number; // 被邀请人获得的优惠券金额
- inviterCouponPending: boolean; // 邀请人奖励是否待发放(需满足条件)
- triggerCondition?: string; // 触发条件说明
- };
- }
- export interface InviteRecord {
- id: string;
- inviteePhone: string;
- inviteeName?: string;
- status: InviteStatus;
- inviteTime: string;
- activateTime?: string;
- rewardTime?: string;
- couponName?: string;
- couponAmount?: number;
- rewardType?: 'inviter' | 'invitee'; // 奖励类型:inviter=邀请人推荐奖励, invitee=被邀请人新人券
- }
- export interface InviteRecordListResponse {
- list: InviteRecord[];
- total: number;
- page: number;
- pageSize: number;
- }
- export interface InviteQueryParams {
- page?: number;
- pageSize?: number;
- status?: InviteStatus;
- }
- export interface InviteStatistics {
- totalInvite: number;
- validInvite: number;
- rewardCount: number;
- pendingCount: number;
- totalRewardAmount: number;
- // 双向奖励统计
- inviterRewardCount?: number; // 邀请人推荐奖励数量
- inviteeRewardCount?: number; // 被邀请人新人券发放数量
- inviterRewardAmount?: number; // 邀请人推荐奖励总金额
- inviteeRewardAmount?: number; // 被邀请人新人券总金额
- }
- export interface ActivityInfo {
- activityId: string;
- title: string;
- description: string;
- couponName: string;
- couponAmount: number;
- startTime: string;
- endTime: string;
- rules: string[];
- isActive: boolean;
- // 双向奖励配置
- dualRewardConfig?: {
- inviteeCouponName: string; // 被邀请人新人券名称
- inviteeCouponAmount: number; // 被邀请人新人券金额
- inviterCouponName: string; // 邀请人推荐奖励券名称
- inviterCouponAmount: number; // 邀请人推荐奖励券金额
- triggerCondition: string; // 触发条件描述(如"好友完成首单")
- };
- }
- export interface PosterResponse {
- posterUrl: string;
- expireTime: string;
- }
- export async function getInviteCode(): Promise<InviteCodeResponse> {
- if (USE_MOCK) {
- return Promise.resolve(mockInviteCode);
- }
- const { get } = await import('@/utils/request');
- return get('/invite/code');
- }
- export async function bindInviteRelation(params: BindInviteParams): Promise<BindInviteResponse> {
- if (USE_MOCK) {
- return Promise.resolve({
- success: true,
- message: '邀请关系绑定成功',
- rewardResult: {
- inviteeCouponGranted: true,
- inviteeCouponName: '新人专属优惠券',
- inviteeCouponAmount: 10,
- inviterCouponPending: true,
- triggerCondition: '好友完成首单后发放'
- }
- });
- }
- const { post } = await import('@/utils/request');
- return post('/invite/bind', params);
- }
- export async function getMyInviteRecords(params: InviteQueryParams = {}): Promise<InviteRecordListResponse> {
- if (USE_MOCK) {
- const { page = 1, pageSize = 10, status } = params;
- let list = [...mockInviteRecords];
- if (status) {
- list = list.filter(item => item.status === status);
- }
- const total = list.length;
- const startIndex = (page - 1) * pageSize;
- return Promise.resolve({
- list: list.slice(startIndex, startIndex + pageSize),
- total,
- page,
- pageSize
- });
- }
- const { get } = await import('@/utils/request');
- return get('/invite/my-records', params);
- }
- export async function getMyInviteStatistics(): Promise<InviteStatistics> {
- if (USE_MOCK) {
- return Promise.resolve(mockInviteStats);
- }
- const { get } = await import('@/utils/request');
- return get('/invite/my-statistics');
- }
- export async function getActivityInfo(): Promise<ActivityInfo> {
- if (USE_MOCK) {
- return Promise.resolve(mockActivityInfo);
- }
- const { get } = await import('@/utils/request');
- return get('/invite/activity-info');
- }
- export async function generatePoster(): Promise<PosterResponse> {
- if (USE_MOCK) {
- return Promise.resolve({
- posterUrl: 'https://example.com/poster/invite_' + Date.now() + '.png',
- expireTime: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString()
- });
- }
- const { get } = await import('@/utils/request');
- return get('/invite/poster');
- }
|