invite.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /**
  2. * 邀请有礼功能相关API
  3. */
  4. import { get, post } from '@/utils/request';
  5. export enum InviteStatus {
  6. PENDING = 'pending',
  7. ACTIVATED = 'activated',
  8. REWARDED = 'rewarded',
  9. FAILED = 'failed'
  10. }
  11. export enum InviteStatusLabel {
  12. PENDING = '待激活',
  13. ACTIVATED = '已激活',
  14. REWARDED = '奖励已发放',
  15. FAILED = '发放失败'
  16. }
  17. export interface InviteCodeResponse {
  18. code: string;
  19. inviteUrl: string;
  20. expireTime?: string;
  21. }
  22. export interface BindInviteParams {
  23. inviteCode: string;
  24. }
  25. export interface BindInviteResponse {
  26. success: boolean;
  27. message: string;
  28. // 双向奖励发放结果
  29. rewardResult?: {
  30. inviteeCouponGranted: boolean; // 是否已向被邀请人发券
  31. inviteeCouponName?: string; // 被邀请人获得的优惠券名称
  32. inviteeCouponAmount?: number; // 被邀请人获得的优惠券金额
  33. inviterCouponPending: boolean; // 邀请人奖励是否待发放(需满足条件)
  34. triggerCondition?: string; // 触发条件说明
  35. };
  36. }
  37. export interface InviteRecord {
  38. id: string;
  39. inviteePhone: string;
  40. inviteeName?: string;
  41. status: InviteStatus;
  42. inviteTime: string;
  43. activateTime?: string;
  44. rewardTime?: string;
  45. couponName?: string;
  46. couponAmount?: number;
  47. rewardType?: 'inviter' | 'invitee'; // 奖励类型:inviter=邀请人推荐奖励, invitee=被邀请人新人券
  48. }
  49. export interface InviteRecordListResponse {
  50. list: InviteRecord[];
  51. total: number;
  52. page: number;
  53. pageSize: number;
  54. }
  55. export interface InviteQueryParams {
  56. page?: number;
  57. pageSize?: number;
  58. status?: InviteStatus;
  59. }
  60. export interface InviteStatistics {
  61. totalInvite: number;
  62. validInvite: number;
  63. rewardCount: number;
  64. pendingCount: number;
  65. totalRewardAmount: number;
  66. // 双向奖励统计
  67. inviterRewardCount?: number; // 邀请人推荐奖励数量
  68. inviteeRewardCount?: number; // 被邀请人新人券发放数量
  69. inviterRewardAmount?: number; // 邀请人推荐奖励总金额
  70. inviteeRewardAmount?: number; // 被邀请人新人券总金额
  71. }
  72. export interface ActivityInfo {
  73. activityId: string;
  74. title: string;
  75. description: string;
  76. couponName: string;
  77. couponAmount: number;
  78. startTime: string;
  79. endTime: string;
  80. rules: string[];
  81. isActive: boolean;
  82. // 双向奖励配置
  83. dualRewardConfig?: {
  84. inviteeCouponName: string; // 被邀请人新人券名称
  85. inviteeCouponAmount: number; // 被邀请人新人券金额
  86. inviterCouponName: string; // 邀请人推荐奖励券名称
  87. inviterCouponAmount: number; // 邀请人推荐奖励券金额
  88. triggerCondition: string; // 触发条件描述(如"好友完成首单")
  89. };
  90. }
  91. export interface PosterResponse {
  92. posterUrl: string;
  93. expireTime: string;
  94. }
  95. export async function getInviteCode(): Promise<InviteCodeResponse> {
  96. return get('/invite/code');
  97. }
  98. export async function bindInviteRelation(params: BindInviteParams): Promise<BindInviteResponse> {
  99. return post('/invite/bind', params);
  100. }
  101. export async function getMyInviteRecords(params: InviteQueryParams = {}): Promise<InviteRecordListResponse> {
  102. return get('/invite/my-records', params);
  103. }
  104. export async function getMyInviteStatistics(): Promise<InviteStatistics> {
  105. return get('/invite/my-statistics');
  106. }
  107. export async function getActivityInfo(): Promise<ActivityInfo> {
  108. return get('/invite/activity-info');
  109. }
  110. export async function generatePoster(): Promise<PosterResponse> {
  111. return get('/invite/poster');
  112. }