staking.ts 4.9 KB

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