staking.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. import { get, post, postForm } from '@/utils/request'
  2. export interface StakingConfig {
  3. id: number
  4. productName: string
  5. coinUnit: string
  6. minAmount: string
  7. maxAmount: string
  8. lockDays: number
  9. releaseType: number
  10. releasePeriod: number
  11. releaseRate: string
  12. description?: string
  13. status: number
  14. createTime?: string
  15. updateTime?: string
  16. }
  17. export interface AirdropPool {
  18. id: number
  19. title: string
  20. coinUnit: string
  21. totalAmount: string
  22. remainAmount: string
  23. claimType: number
  24. perAmount: string
  25. maxClaimPerUser: number
  26. startTime: string
  27. endTime: string
  28. status: number
  29. }
  30. /** 启用中的质押配置列表 */
  31. export function fetchStakingConfigList() {
  32. return post<StakingConfig[]>('/uc/staking/config/list')
  33. }
  34. /** ID 最小且启用中的质押配置(IDO 预售默认) */
  35. export function fetchMinOpenStakingConfig() {
  36. return post<StakingConfig>('/uc/staking/config/min-open')
  37. }
  38. /** Redis 现货价(ExchangeNew2:latestPrice,与质押闪兑同源) */
  39. export function fetchStakingSpotPrice(coinUnit: string) {
  40. return get<{ coinUnit: string; price: string }>('/uc/staking/spot-price', { coinUnit })
  41. }
  42. /** staking_wallet 表余额(StakingWalletVo) */
  43. export interface StakingWalletBalance {
  44. coinUnit: string
  45. availableBalance: string | number
  46. lockedBalance: string | number
  47. availableBalanceUsdt?: string | number
  48. lockedBalanceUsdt?: string | number
  49. /** 历史累计已释放总量(与 coinUnit 同单位,如 iBit) */
  50. releasedTotal?: string | number
  51. }
  52. /** 查询质押钱包指定币种可用/锁定余额(staking_wallet 表) */
  53. export function fetchStakingWalletBalance(coinUnit: string) {
  54. return postForm<StakingWalletBalance>('/uc/staking/wallet', { coinUnit })
  55. }
  56. /** 发起质押(直接质押 iBit 等) */
  57. export function submitStake(configId: number, amount: string) {
  58. return postForm<unknown>('/uc/staking/stake', { configId, amount })
  59. }
  60. /** IDO 预售:支付 USDT,后端按现价闪兑为质押币后质押 */
  61. export function submitStakeByUsdt(configId: number, usdtAmount: string) {
  62. return postForm<unknown>('/uc/staking/stake', { configId, usdtAmount })
  63. }
  64. export interface StakingOrderItem {
  65. id: number
  66. coinUnit: string
  67. amount: string | number
  68. releasedAmount: string | number
  69. status: number
  70. stakingTime?: string
  71. unlockTime?: string
  72. lastReleaseTime?: string
  73. createTime?: string
  74. }
  75. /** POST /uc/staking/team — IDO 团队总览 */
  76. export interface StakingTeamOverview {
  77. directNum: number
  78. teamNum: number
  79. teamPerformance: number
  80. totalRevenue: number
  81. lockTotal: number
  82. nodeLevel: string
  83. }
  84. /** POST /uc/staking/direct/list — 直推列表项 */
  85. export interface StakingDirectMember {
  86. directAddress: string
  87. level: string
  88. buyAmount: number
  89. reward: number
  90. }
  91. /** 查询质押团队总览(IDO 页卡片、我的团队页头部) */
  92. export function fetchStakingTeamOverview() {
  93. return postForm<StakingTeamOverview>('/uc/staking/team', {})
  94. }
  95. /** 分页查询直推列表 */
  96. export function fetchStakingDirectList(pageNo = 1, pageSize = 20) {
  97. return postForm<SpringPage<StakingDirectMember>>('/uc/staking/direct/list', {
  98. pageNo,
  99. pageSize,
  100. })
  101. }
  102. /** 分页查询我的质押订单,status 支持单个状态或逗号分隔状态,如 "0,1" */
  103. export function fetchStakingOrders(pageNo = 1, pageSize = 20, status?: string | number) {
  104. return postForm<SpringPage<StakingOrderItem>>('/uc/staking/orders', {
  105. pageNo,
  106. pageSize,
  107. ...(status !== undefined ? { status } : {}),
  108. })
  109. }
  110. /** 空投领取资格与任务进度 */
  111. export interface AirdropEligibility {
  112. inviteCount: number
  113. requiredInviteCount: number
  114. inviteTaskCompleted: boolean
  115. hasActiveStaking: boolean
  116. hasPendingAirdrop: boolean
  117. /** 待领取空投总金额 */
  118. claimableAmount?: number | string
  119. /** 待领取币种(多种币种并存时可能为空) */
  120. claimableCoinUnit?: string | null
  121. eligible: boolean
  122. message?: string
  123. }
  124. /** 查询空投领取资格(邀请人数、活跃质押、待领取记录) */
  125. export function fetchAirdropEligibility() {
  126. return post<AirdropEligibility>('/uc/airdrop/eligibility')
  127. }
  128. /** 一键提交名下全部待领取空投(进入审核) */
  129. export function claimAirdrop() {
  130. return post<string>('/uc/airdrop/claim')
  131. }
  132. /** 空投领取/审核记录 */
  133. export interface AirdropRecordItem {
  134. id: number
  135. stakingOrderId?: number
  136. coinUnit?: string
  137. amount: number | string
  138. /** 0待领取 1已发放 2审核中 3已拒绝 */
  139. status: number
  140. claimTime?: string
  141. auditTime?: string
  142. auditRemark?: string
  143. createTime?: string
  144. }
  145. export interface SpringPage<T> {
  146. content: T[]
  147. totalElements: number
  148. totalPages: number
  149. number: number
  150. size: number
  151. last?: boolean
  152. }
  153. /** 分页查询我的空投记录 */
  154. export function fetchAirdropRecords(pageNo = 1, pageSize = 10) {
  155. return postForm<SpringPage<AirdropRecordItem>>('/uc/airdrop/records', { pageNo, pageSize })
  156. }