Kaynağa Gözat

交易记录

nieyuge 2 yıl önce
ebeveyn
işleme
be3d29d8b8
68 değiştirilmiş dosya ile 1544 ekleme ve 130 silme
  1. BIN
      src/assets/img/icon-box2.png
  2. BIN
      src/assets/img/icon-card-cover-treasure-big.png
  3. BIN
      src/assets/img/icon-flash-active.png
  4. BIN
      src/assets/img/icon-gold-close-box.png
  5. BIN
      src/assets/img/icon-gold-open-box-big.png
  6. BIN
      src/assets/img/icon-gold-open-box.png
  7. BIN
      src/assets/img/icon-loading-channel.png
  8. BIN
      src/assets/img/icon-loading-redbag.png
  9. BIN
      src/assets/img/icon-purple-close-box.png
  10. BIN
      src/assets/img/icon-purple-open-big.png
  11. BIN
      src/assets/img/icon-purple-open-box.png
  12. BIN
      src/assets/img/icon-silver-close-box.png
  13. BIN
      src/assets/img/icon-silver-open-box-big.png
  14. BIN
      src/assets/img/icon-silver-open-box.png
  15. BIN
      src/assets/img/icon-treasure-box.png
  16. BIN
      src/assets/img/img-preview-treasure-link-bg.png
  17. 3 0
      src/assets/svg/icon-back-2.svg
  18. 2 0
      src/assets/svg/icon-btn-box.svg
  19. 2 0
      src/assets/svg/icon-card-cover-treasure-small.svg
  20. 1 0
      src/assets/svg/icon-card-cover-treasure-tasks.svg
  21. 2 0
      src/assets/svg/icon-channel-tips.svg
  22. 16 0
      src/assets/svg/icon-copy-url-teasure.svg
  23. 1 0
      src/assets/svg/icon-create-nfts.svg
  24. 3 0
      src/assets/svg/icon-custom-cover-btn.svg
  25. 3 0
      src/assets/svg/icon-form-amount.svg
  26. 4 0
      src/assets/svg/icon-form-cost.svg
  27. 3 0
      src/assets/svg/icon-form-custom-cover.svg
  28. 1 0
      src/assets/svg/icon-form-follow.svg
  29. 3 0
      src/assets/svg/icon-form-task.svg
  30. 8 0
      src/assets/svg/icon-form-time.svg
  31. 1 0
      src/assets/svg/icon-form-winners.svg
  32. 4 0
      src/assets/svg/icon-green-yes.svg
  33. 3 0
      src/assets/svg/icon-invite-list.svg
  34. 1 0
      src/assets/svg/icon-invite.svg
  35. 13 0
      src/assets/svg/icon-invited-more.svg
  36. 4 0
      src/assets/svg/icon-loading-channel.svg
  37. 3 0
      src/assets/svg/icon-post-edit-luck.svg
  38. 3 0
      src/assets/svg/icon-post-edit-open.svg
  39. 4 0
      src/assets/svg/icon-post-lock.svg
  40. 3 0
      src/assets/svg/icon-refresh-treasure.svg
  41. 5 0
      src/assets/svg/icon-silver-open-box.svg
  42. 4 0
      src/assets/svg/icon-sort-amount.svg
  43. 4 0
      src/assets/svg/icon-sort-time.svg
  44. 1 0
      src/assets/svg/icon-three-line.svg
  45. 3 0
      src/assets/svg/icon-tip-arrow.svg
  46. 5 0
      src/assets/svg/icon-transaction-s.svg
  47. 4 0
      src/assets/svg/icon-treasure-return.svg
  48. 5 0
      src/assets/svg/icon-user1.svg
  49. 3 0
      src/assets/svg/icon-while-user.svg
  50. 3 0
      src/assets/svg/icon-while-yes.svg
  51. 0 19
      src/assets/svg/img-A0.svg
  52. 0 19
      src/assets/svg/img-A1.svg
  53. 0 44
      src/assets/svg/img-B0.svg
  54. 0 44
      src/assets/svg/img-B1.svg
  55. 3 0
      src/assets/svg/img-LT0.svg
  56. 3 0
      src/assets/svg/img-LT1.svg
  57. 3 0
      src/assets/svg/img-P1.svg
  58. 3 0
      src/assets/svg/img-P2.svg
  59. 3 0
      src/assets/svg/img-P3.svg
  60. 2 0
      src/assets/svg/img-T0.svg
  61. 2 0
      src/assets/svg/img-T1.svg
  62. 11 0
      src/assets/svg/img-preview-treasure-01-bg.svg
  63. 476 0
      src/components/currency-list.vue
  64. 534 0
      src/components/popup-transactions.vue
  65. 2 2
      src/components/v-head.vue
  66. 324 2
      src/pages/tabbar/wallet/index.vue
  67. 45 0
      src/pages/tabbar/wallet/transactions.vue
  68. 5 0
      src/router/index.js

BIN
src/assets/img/icon-box2.png


BIN
src/assets/img/icon-card-cover-treasure-big.png


BIN
src/assets/img/icon-flash-active.png


BIN
src/assets/img/icon-gold-close-box.png


BIN
src/assets/img/icon-gold-open-box-big.png


BIN
src/assets/img/icon-gold-open-box.png


BIN
src/assets/img/icon-loading-channel.png


BIN
src/assets/img/icon-loading-redbag.png


BIN
src/assets/img/icon-purple-close-box.png


BIN
src/assets/img/icon-purple-open-big.png


BIN
src/assets/img/icon-purple-open-box.png


BIN
src/assets/img/icon-silver-close-box.png


BIN
src/assets/img/icon-silver-open-box-big.png


BIN
src/assets/img/icon-silver-open-box.png


BIN
src/assets/img/icon-treasure-box.png


BIN
src/assets/img/img-preview-treasure-link-bg.png


+ 3 - 0
src/assets/svg/icon-back-2.svg

@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M20.1427 11.3184V13.3184H8.14273L13.6427 18.8184L12.2227 20.2384L4.30273 12.3184L12.2227 4.39844L13.6427 5.81844L8.14273 11.3184H20.1427Z" fill="black"/>
+</svg>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 2 - 0
src/assets/svg/icon-btn-box.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 2 - 0
src/assets/svg/icon-card-cover-treasure-small.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
src/assets/svg/icon-card-cover-treasure-tasks.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 2 - 0
src/assets/svg/icon-channel-tips.svg


+ 16 - 0
src/assets/svg/icon-copy-url-teasure.svg

@@ -0,0 +1,16 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_27199_78278)">
+<rect width="40" height="40" fill="#1D9BF0"/>
+<g clip-path="url(#clip1_27199_78278)">
+<path d="M27.7853 11.4827L27.7101 11.4075C25.9539 9.65127 23.0801 9.65127 21.3239 11.4075L17.2551 15.4763C15.4988 17.2326 15.4988 20.1057 17.2551 21.862L17.3303 21.9372C17.4765 22.0834 17.6318 22.2154 17.7917 22.3377L19.2811 20.8483C19.1074 20.7457 18.9433 20.6233 18.794 20.474L18.7188 20.3988C17.7655 19.4455 17.7655 17.894 18.7188 16.9407L22.7876 12.8712C23.741 11.9179 25.2925 11.9179 26.2458 12.8712L26.321 12.9465C27.2743 13.8998 27.2743 15.4519 26.321 16.4046L24.48 18.2456C24.7994 19.0348 24.951 19.8759 24.9379 20.7152L27.7847 17.8683C29.541 16.1121 29.541 13.2384 27.7853 11.4827ZM21.7716 17.3454C21.6254 17.1992 21.4702 17.0672 21.3102 16.9454L19.8208 18.4348C19.9945 18.5375 20.1587 18.6599 20.3079 18.8091L20.3831 18.8844C21.3364 19.8377 21.3364 21.3892 20.3831 22.3425L16.3143 26.4119C15.3609 27.3653 13.8095 27.3653 12.8561 26.4119L12.7809 26.3367C11.8276 25.3834 11.8276 23.8319 12.7809 22.8786L14.6219 21.0376C14.3025 20.2484 14.1509 19.4073 14.164 18.568L11.3172 21.4148C9.56094 23.1711 9.56094 26.0448 11.3172 27.801L11.3924 27.8763C13.1486 29.6325 16.0224 29.6325 17.7786 27.8763L21.8474 23.8074C23.6037 22.0512 23.6037 19.1775 21.8474 17.4212L21.7716 17.3454Z" fill="white"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_27199_78278">
+<rect width="40" height="40" rx="20" fill="white"/>
+</clipPath>
+<clipPath id="clip1_27199_78278">
+<rect width="20" height="20" fill="white" transform="translate(10 10.0801)"/>
+</clipPath>
+</defs>
+</svg>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
src/assets/svg/icon-create-nfts.svg


+ 3 - 0
src/assets/svg/icon-custom-cover-btn.svg

@@ -0,0 +1,3 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M17.8749 11.7838L17.1198 12.5169L15.6097 11.0508L16.3648 10.3177C16.4403 10.2444 16.5158 10.1711 16.6668 10.1711C16.7423 10.1711 16.8933 10.2444 16.9688 10.3177L17.9504 11.2707C18.0259 11.4173 18.0259 11.6372 17.8749 11.7838ZM10.5507 15.8891V17.4286H12.1364L16.7423 12.9568L15.2321 11.4906L10.5507 15.8891ZM16.5913 4.96617C16.5913 4.15977 15.9117 3.5 15.0811 3.5H4.51014C3.67956 3.5 3 4.15977 3 4.96617V15.2293C3 16.0357 3.67956 16.6955 4.51014 16.6955H9.04057V15.3026L9.87115 14.4962H4.51014L7.15289 11.1974L9.04057 13.3966L11.6833 10.0977L12.8914 11.6372L16.5913 7.9718V4.96617Z" fill="#2F2F2F"/>
+</svg>

+ 3 - 0
src/assets/svg/icon-form-amount.svg

@@ -0,0 +1,3 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4 12.0058V13.5734C4 14.8694 6.6875 15.9231 10 15.9231C13.3125 15.9231 16 14.8694 16 13.5734V12.0058C14.7094 13.0741 12.35 13.5734 10 13.5734C7.65 13.5734 5.29062 13.0741 4 12.0058ZM4 8.15454V10.049C4 11.3449 6.6875 12.3986 10 12.3986C13.3125 12.3986 16 11.3449 16 10.049V8.15454C14.7094 9.4028 12.3469 10.049 10 10.049C7.65313 10.049 5.29062 9.4028 4 8.15454ZM10 3C6.6875 3 4 4.31434 4 5.93706C4 7.55979 6.6875 8.87413 10 8.87413C13.3125 8.87413 16 7.55979 16 5.93706C16 4.31434 13.3125 3 10 3Z" fill="#2F2F2F"/>
+</svg>

+ 4 - 0
src/assets/svg/icon-form-cost.svg

@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M11 13.575V14.5455C11 15.3477 12.5677 16 14.5 16C16.4323 16 18 15.3477 18 14.5455V13.575C17.2471 14.2364 15.8708 14.5455 14.5 14.5455C13.1292 14.5455 11.7529 14.2364 11 13.575ZM11 11.1909V12.3636C11 13.1659 12.5677 13.8182 14.5 13.8182C16.4323 13.8182 18 13.1659 18 12.3636V11.1909C17.2471 11.9636 15.869 12.3636 14.5 12.3636C13.131 12.3636 11.7529 11.9636 11 11.1909ZM14.5 8C12.5677 8 11 8.81364 11 9.81818C11 10.8227 12.5677 11.6364 14.5 11.6364C16.4323 11.6364 18 10.8227 18 9.81818C18 8.81364 16.4323 8 14.5 8Z" fill="#2F2F2F"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.42061 15.1282H5.4046C5.36893 15.2284 5.31128 15.3204 5.23468 15.397C5.09904 15.5326 4.91508 15.6088 4.72326 15.6088C4.53144 15.6088 4.34747 15.5326 4.21184 15.397C4.0762 15.2614 4 15.0774 4 14.8856C4 14.8202 4.01049 14.7614 4.02325 14.7114C4.33797 12.5974 5.72065 10.833 7.60544 9.98625C6.73631 9.26192 6.18262 8.1708 6.18262 6.95024C6.18262 4.76854 7.95117 3 10.1329 3C11.9921 3 13.5513 4.28442 13.9716 6.01437C13.5574 6.03701 13.1526 6.08619 12.7643 6.16045C12.6313 5.7191 12.3901 5.32421 12.0716 5.00682C12.3898 5.32432 12.6308 5.71925 12.7636 6.16059C12.6833 6.17595 12.6037 6.19239 12.5248 6.20988C12.2083 5.18971 11.2556 4.44651 10.1329 4.44651C8.75252 4.44651 7.62914 5.5699 7.62914 6.95024C7.62914 7.92308 8.18723 8.76842 9 9.18266V11.0304C7.15844 11.4847 5.73735 13.02 5.45165 14.9216L5.42061 15.1282ZM4.24375 14.8867C4.24375 15.0139 4.29418 15.1359 4.38397 15.226L4.38341 15.2254C4.29328 15.1353 4.24264 15.013 4.24264 14.8856C4.24264 14.842 4.25033 14.8004 4.26132 14.7602C4.56633 12.6796 5.9484 10.9491 7.82382 10.1557C7.91323 10.1179 8.00376 10.0822 8.09535 10.0487L8.09682 10.0497C6.08391 10.7858 4.582 12.5814 4.26243 14.7613C4.25144 14.8016 4.24375 14.8432 4.24375 14.8867Z" fill="#2F2F2F"/>
+</svg>

+ 3 - 0
src/assets/svg/icon-form-custom-cover.svg

@@ -0,0 +1,3 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M17.8749 11.7838L17.1198 12.5169L15.6097 11.0508L16.3648 10.3177C16.4403 10.2444 16.5158 10.1711 16.6668 10.1711C16.7423 10.1711 16.8933 10.2444 16.9688 10.3177L17.9504 11.2707C18.0259 11.4173 18.0259 11.6372 17.8749 11.7838ZM10.5507 15.8891V17.4286H12.1364L16.7423 12.9568L15.2321 11.4906L10.5507 15.8891ZM16.5913 4.96617C16.5913 4.15977 15.9117 3.5 15.0811 3.5H4.51014C3.67956 3.5 3 4.15977 3 4.96617V15.2293C3 16.0357 3.67956 16.6955 4.51014 16.6955H9.04057V15.3026L9.87115 14.4962H4.51014L7.15289 11.1974L9.04057 13.3966L11.6833 10.0977L12.8914 11.6372L16.5913 7.9718V4.96617Z" fill="#2F2F2F"/>
+</svg>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
src/assets/svg/icon-form-follow.svg


+ 3 - 0
src/assets/svg/icon-form-task.svg

@@ -0,0 +1,3 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4.267 4.82609L4.27273 15.7875L15.7324 15.7826L15.7273 4.82122L13.8182 4.82609V5.4287C13.819 5.75195 13.6858 6.06233 13.4476 6.29171C13.2095 6.52109 12.886 6.65072 12.548 6.65217H7.452C6.75136 6.65217 6.18182 6.10313 6.18182 5.4287V4.82609H4.267ZM12.548 5.43478L12.5455 4.22348L7.452 4.21739L7.45455 4.22348V5.4287L12.548 5.43478ZM13.64 3.6087H15.7241C16.0613 3.60789 16.3851 3.73512 16.6243 3.96246C16.8635 4.1898 16.9987 4.49866 17 4.82122V15.7875C16.9995 16.1089 16.8658 16.417 16.6282 16.6443C16.3905 16.8716 16.0684 16.9995 15.7324 17H4.26764C3.56891 17 3 16.4558 3 15.7875V4.82122C3.00017 4.49979 3.13369 4.19157 3.37124 3.96423C3.6088 3.73689 3.93096 3.60902 4.267 3.6087H6.36C6.58082 3.24591 6.98491 3 7.452 3H12.548C13.0151 3 13.4198 3.24652 13.64 3.6087ZM9.17585 11.4432L11.9743 8.20321C12.0799 8.08088 12.2271 8.00801 12.3835 8.00062C12.5399 7.99324 12.6926 8.05195 12.8081 8.16383C12.9236 8.27572 12.9924 8.43162 12.9994 8.59723C13.0064 8.76285 12.951 8.92461 12.8453 9.04694L9.60606 12.7969C9.49393 12.9263 9.33577 13 9.17054 13H9.167C9.08447 12.9995 9.00296 12.9806 8.92774 12.9447C8.85252 12.9087 8.78526 12.8565 8.7303 12.7913L7.14992 10.9163C7.04568 10.7926 6.99209 10.6302 7.00095 10.4647C7.0098 10.2992 7.08037 10.1442 7.19713 10.0338C7.31389 9.92341 7.46727 9.86665 7.62354 9.87603C7.77981 9.88541 7.92616 9.96014 8.0304 10.0838L9.17585 11.4432Z" fill="#2F2F2F"/>
+</svg>

+ 8 - 0
src/assets/svg/icon-form-time.svg

@@ -0,0 +1,8 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<mask id="path-1-outside-1_24371_182246" maskUnits="userSpaceOnUse" x="2" y="2" width="16" height="16" fill="black">
+<rect fill="white" x="2" y="2" width="16" height="16"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3 10C3 6.14 6.14 3 10 3C13.86 3 17 6.14 17 10C17 13.86 13.86 17 10 17C6.14 17 3 13.86 3 10ZM4.0045 10C4.0045 13.3055 6.694 15.9955 10 15.9955C13.3055 15.9955 15.9955 13.3055 15.9955 10C15.9955 6.694 13.3055 4.0045 10 4.0045C6.694 4.0045 4.0045 6.694 4.0045 10ZM10.001 9.99788H12.5005C12.778 9.99788 13.0025 10.2204 13.0025 10.4979C13.0025 10.7754 12.778 10.9979 12.5005 10.9979H9.50104C9.22404 10.9979 9.00104 10.7754 9.00104 10.4979V6.49887C9.00104 6.22187 9.22354 5.99688 9.50104 5.99688C9.77854 5.99688 10.001 6.22137 10.001 6.49887V9.99788Z"/>
+</mask>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3 10C3 6.14 6.14 3 10 3C13.86 3 17 6.14 17 10C17 13.86 13.86 17 10 17C6.14 17 3 13.86 3 10ZM4.0045 10C4.0045 13.3055 6.694 15.9955 10 15.9955C13.3055 15.9955 15.9955 13.3055 15.9955 10C15.9955 6.694 13.3055 4.0045 10 4.0045C6.694 4.0045 4.0045 6.694 4.0045 10ZM10.001 9.99788H12.5005C12.778 9.99788 13.0025 10.2204 13.0025 10.4979C13.0025 10.7754 12.778 10.9979 12.5005 10.9979H9.50104C9.22404 10.9979 9.00104 10.7754 9.00104 10.4979V6.49887C9.00104 6.22187 9.22354 5.99688 9.50104 5.99688C9.77854 5.99688 10.001 6.22137 10.001 6.49887V9.99788Z" fill="#2F2F2F"/>
+<path d="M10.001 9.99788H9.80104V10.1979H10.001V9.99788ZM10 2.8C6.02954 2.8 2.8 6.02954 2.8 10H3.2C3.2 6.25046 6.25046 3.2 10 3.2V2.8ZM17.2 10C17.2 6.02954 13.9705 2.8 10 2.8V3.2C13.7495 3.2 16.8 6.25046 16.8 10H17.2ZM10 17.2C13.9705 17.2 17.2 13.9705 17.2 10H16.8C16.8 13.7495 13.7495 16.8 10 16.8V17.2ZM2.8 10C2.8 13.9705 6.02954 17.2 10 17.2V16.8C6.25046 16.8 3.2 13.7495 3.2 10H2.8ZM10 15.7955C6.80447 15.7955 4.2045 13.1951 4.2045 10H3.8045C3.8045 13.4159 6.58353 16.1955 10 16.1955V15.7955ZM15.7955 10C15.7955 13.195 13.195 15.7955 10 15.7955V16.1955C13.416 16.1955 16.1955 13.416 16.1955 10H15.7955ZM10 4.2045C13.1951 4.2045 15.7955 6.80447 15.7955 10H16.1955C16.1955 6.58353 13.4159 3.8045 10 3.8045V4.2045ZM4.2045 10C4.2045 6.80446 6.80446 4.2045 10 4.2045V3.8045C6.58354 3.8045 3.8045 6.58354 3.8045 10H4.2045ZM12.5005 9.79788H10.001V10.1979H12.5005V9.79788ZM13.2025 10.4979C13.2025 10.1089 12.8875 9.79788 12.5005 9.79788V10.1979C12.6686 10.1979 12.8025 10.3319 12.8025 10.4979H13.2025ZM12.5005 11.1979C12.8875 11.1979 13.2025 10.8869 13.2025 10.4979H12.8025C12.8025 10.6639 12.6686 10.7979 12.5005 10.7979V11.1979ZM9.50104 11.1979H12.5005V10.7979H9.50104V11.1979ZM8.80104 10.4979C8.80104 10.886 9.11372 11.1979 9.50104 11.1979V10.7979C9.33437 10.7979 9.20104 10.6648 9.20104 10.4979H8.80104ZM8.80104 6.49887V10.4979H9.20104V6.49887H8.80104ZM9.50104 5.79688C9.11192 5.79688 8.80104 6.11259 8.80104 6.49887H9.20104C9.20104 6.33116 9.33517 6.19688 9.50104 6.19688V5.79688ZM10.201 6.49887C10.201 6.11196 9.89004 5.79688 9.50104 5.79688V6.19688C9.66705 6.19688 9.80104 6.33079 9.80104 6.49887H10.201ZM10.201 9.99788V6.49887H9.80104V9.99788H10.201Z" fill="#2F2F2F" mask="url(#path-1-outside-1_24371_182246)"/>
+</svg>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
src/assets/svg/icon-form-winners.svg


+ 4 - 0
src/assets/svg/icon-green-yes.svg

@@ -0,0 +1,4 @@
+<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="6" cy="6" r="6" fill="#08B706"/>
+<path d="M3.6875 6L5.4783 7.79096L8.71773 3.34812" stroke="white" stroke-width="1.2"/>
+</svg>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 3 - 0
src/assets/svg/icon-invite-list.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
src/assets/svg/icon-invite.svg


+ 13 - 0
src/assets/svg/icon-invited-more.svg

@@ -0,0 +1,13 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_27248_33494)">
+<circle opacity="0.2" cx="8" cy="8" r="8" fill="white"/>
+<ellipse cx="4.66406" cy="8" rx="1" ry="1" fill="white"/>
+<circle cx="8" cy="8" r="1" fill="white"/>
+<ellipse cx="11.3281" cy="8" rx="1" ry="1" fill="white"/>
+</g>
+<defs>
+<clipPath id="clip0_27248_33494">
+<rect width="16" height="16" rx="8" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 4 - 0
src/assets/svg/icon-loading-channel.svg

@@ -0,0 +1,4 @@
+<svg width="66" height="66" viewBox="0 0 66 66" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="33" cy="33" r="30" stroke="#424242" stroke-width="5"/>
+<path d="M63 33C63 16.4315 49.5685 3 33 3" stroke="#1D9BF0" stroke-width="5"/>
+</svg>

+ 3 - 0
src/assets/svg/icon-post-edit-luck.svg

@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.05497 9.83636V7.82727C5.05497 6.12727 6.29133 4.89091 7.99133 4.89091H9.2277C10.7732 4.89091 12.1641 6.12727 12.1641 7.82727V9.83636H13.555V7.82727C13.555 5.35455 11.5459 3.5 9.2277 3.5H7.99133C5.51861 3.5 3.66406 5.50909 3.66406 7.82727V9.83636H5.05497ZM14.3273 20.5003H2.89091C2.11818 20.5003 1.5 19.8821 1.5 19.1094V12.0003C1.5 11.2276 2.27273 10.6094 2.89091 10.6094H14.1727C15.1 10.6094 15.5636 11.2276 15.5636 12.0003V19.1094C15.7182 19.8821 15.1 20.5003 14.3273 20.5003ZM20.1177 20.5458L21.8908 18.7097L21.7607 11.2568C22.0825 11.0797 22.381 10.8534 22.6513 10.5734C23.3567 9.84292 23.743 8.86219 23.7253 7.84692C23.7076 6.83165 23.2873 5.865 22.5569 5.15962C21.8264 4.45425 20.8457 4.06793 19.8304 4.08565C18.8151 4.10337 17.8485 4.52368 17.1431 5.25412C16.4377 5.98455 16.0514 6.96528 16.0691 7.98056C16.0869 8.99583 16.5072 9.96248 17.2376 10.6679C17.5176 10.9382 17.8237 11.154 18.1516 11.3198L18.1871 13.359L19.5642 14.6888L18.2344 16.0658L19.6115 17.3957L18.2816 18.7727L20.1177 20.5458ZM19.8592 5.73542C20.1976 5.72951 20.5245 5.85828 20.768 6.09341C21.0115 6.32853 21.1516 6.65075 21.1575 6.98917C21.1634 7.3276 21.0346 7.65451 20.7995 7.89799C20.5644 8.14147 20.2422 8.28157 19.9038 8.28748C19.5653 8.29339 19.2384 8.16461 18.9949 7.92949C18.7515 7.69436 18.6114 7.37215 18.6055 7.03372C18.5995 6.6953 18.7283 6.36839 18.9634 6.12491C19.1986 5.88143 19.5208 5.74132 19.8592 5.73542Z" fill="#424B51"/>
+</svg>

+ 3 - 0
src/assets/svg/icon-post-edit-open.svg

@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M11.5957 5.58382C12.4466 5.58382 13.2627 5.92184 13.8643 6.52352C14.466 7.1252 14.804 7.94125 14.804 8.79215C14.804 9.64306 14.466 10.4591 13.8643 11.0608C13.2627 11.6625 12.4466 12.0005 11.5957 12.0005C10.7448 12.0005 9.92875 11.6625 9.32707 11.0608C8.72539 10.4591 8.38737 9.64306 8.38737 8.79215C8.38737 7.94125 8.72539 7.1252 9.32707 6.52352C9.92875 5.92184 10.7448 5.58382 11.5957 5.58382ZM5.17904 8.00049C5.69237 8.00049 6.16904 8.13799 6.58154 8.38549C6.44404 9.69632 6.82904 10.998 7.61737 12.0155C7.15904 12.8955 6.24237 13.5005 5.17904 13.5005C4.44969 13.5005 3.75022 13.2108 3.23449 12.695C2.71877 12.1793 2.42904 11.4798 2.42904 10.7505C2.42904 10.0211 2.71877 9.32167 3.23449 8.80594C3.75022 8.29022 4.44969 8.00049 5.17904 8.00049ZM18.0124 7.85352C18.7417 7.85352 19.4412 8.14325 19.9569 8.65897C20.4726 9.1747 20.7624 9.87417 20.7624 10.6035C20.7624 11.3329 20.4726 12.0323 19.9569 12.5481C19.4412 13.0638 18.7417 13.3535 18.0124 13.3535C16.949 13.3535 16.0324 12.7485 15.574 11.8685C16.3624 10.851 16.7474 9.54935 16.6099 8.23852C17.0224 7.99102 17.499 7.85352 18.0124 7.85352ZM5.63737 16.791C5.63737 14.8935 8.30487 13.3535 11.5957 13.3535C14.8865 13.3535 17.554 14.8935 17.554 16.791V18.3952H5.63737V16.791ZM0.595703 18.3952V17.0202C0.595703 15.746 2.3282 14.6735 4.67487 14.3619C4.13404 14.9852 3.80404 15.8468 3.80404 16.791V18.3952H0.595703ZM22.5957 18.3952H19.3874V16.791C19.3874 15.8468 19.0574 14.9852 18.5165 14.3619C20.8632 14.6735 22.5957 15.746 22.5957 17.0202V18.3952Z" fill="#424B51"/>
+</svg>

+ 4 - 0
src/assets/svg/icon-post-lock.svg

@@ -0,0 +1,4 @@
+<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M72.0799 86.2749H27.4304C24.4135 86.2749 22 83.6649 22 80.4025V50.388C22 47.1256 25.0169 44.5156 27.4304 44.5156H71.4766C75.0968 44.5156 76.9069 47.1256 76.9069 50.388V80.4025C77.5103 83.6649 75.0968 86.2749 72.0799 86.2749Z" fill="#F3B14D"/>
+<path d="M35.1867 40.4444V33.8186C35.1867 26.8184 40.1651 21.7274 47.0105 21.7274H51.989C58.212 21.7274 63.8128 26.8184 63.8128 33.8186V40.4444H69.4135V33.8186C69.4135 23.6366 61.3236 16 51.989 16H47.0105C37.0536 16 29.5859 24.2729 29.5859 33.8186V40.4444H35.1867Z" fill="#AEB9C2"/>
+</svg>

+ 3 - 0
src/assets/svg/icon-refresh-treasure.svg

@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M17.65 6.35C16.2 4.9 14.21 4 12 4C9.87827 4 7.84344 4.84285 6.34315 6.34315C4.84285 7.84344 4 9.87827 4 12C4 14.1217 4.84285 16.1566 6.34315 17.6569C7.84344 19.1571 9.87827 20 12 20C15.73 20 18.84 17.45 19.73 14H17.65C16.83 16.33 14.61 18 12 18C10.4087 18 8.88258 17.3679 7.75736 16.2426C6.63214 15.1174 6 13.5913 6 12C6 10.4087 6.63214 8.88258 7.75736 7.75736C8.88258 6.63214 10.4087 6 12 6C13.66 6 15.14 6.69 16.22 7.78L13 11H20V4L17.65 6.35Z" fill="#1D9BF0"/>
+</svg>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 5 - 0
src/assets/svg/icon-silver-open-box.svg


+ 4 - 0
src/assets/svg/icon-sort-amount.svg

@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M1 12V10H11.4667V12H1ZM1 5H17V7H1V5ZM1 17V15H8.6V17H1Z" fill="black"/>
+<path d="M16.9798 20V19.1831C18.9112 19.0121 20 18.0115 20 16.403C20 15.0288 19.2127 14.1865 17.638 13.8319L16.9798 13.6989V11.3368C17.638 11.4318 18.1054 11.9257 18.1239 12.5273H19.8339C19.8093 11.0708 18.7021 10.0322 16.9798 9.87392V9H16.1125V9.86759C14.2671 10.0196 13.1845 11.0201 13.1845 12.5717C13.1845 13.8889 13.978 14.7691 15.4605 15.1238L16.1125 15.2821V17.7519C15.3313 17.6632 14.8023 17.1819 14.7592 16.5233H13C13.0062 18.0748 14.181 19.0754 16.1125 19.1894V20H16.9798ZM18.2592 16.6056C18.2592 17.2769 17.7856 17.7075 16.9798 17.7582V15.4404C17.8533 15.6177 18.2592 15.9914 18.2592 16.6056ZM14.9622 12.4134C14.9622 11.8117 15.442 11.3685 16.1125 11.3305V13.5153C15.362 13.3506 14.9622 12.9706 14.9622 12.4134Z" fill="black"/>
+</svg>

+ 4 - 0
src/assets/svg/icon-sort-time.svg

@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M1 12V10H8.46667V12H1ZM1 5H15V7H1V5ZM1 17V15H6.6V17H1Z" fill="black"/>
+<path d="M17 8C13.14 8 10 11.13 10 15C10 18.87 13.13 22 17 22C20.86 22 24 18.87 24 15C24 11.13 20.87 8 17 8ZM19.19 17.53L16 15.69V12H17.5V14.82L19.94 16.23L19.19 17.53Z" fill="#609FC9"/>
+</svg>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
src/assets/svg/icon-three-line.svg


+ 3 - 0
src/assets/svg/icon-tip-arrow.svg

@@ -0,0 +1,3 @@
+<svg width="10" height="5" viewBox="0 0 10 5" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M0.5 0H9.5L4.5 5L0.5 0Z" fill="black" fill-opacity="0.6"/>
+</svg>

+ 5 - 0
src/assets/svg/icon-transaction-s.svg

@@ -0,0 +1,5 @@
+<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="17" height="17" rx="8.5" transform="matrix(-1 0 0 1 17 0)" fill="#4CD6D6"/>
+<path d="M9.6611 5.16894L10.7911 4.5L12.6981 7.68105H4.5V6.37508H10.3846L9.6611 5.16688V5.16894Z" fill="white"/>
+<path d="M6.4148 12.4985L7.54684 11.8316L7.54581 11.8295L6.8213 10.6213H12.7079V9.31641H4.50781L6.4148 12.4985Z" fill="white"/>
+</svg>

+ 4 - 0
src/assets/svg/icon-treasure-return.svg

@@ -0,0 +1,4 @@
+<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M0 17C0 7.61116 7.61116 0 17 0C26.3888 0 34 7.61116 34 17C34 26.3888 26.3888 34 17 34C7.61116 34 0 26.3888 0 17Z" fill="#FFB443"/>
+<path d="M14.7368 11.8V7L7 15.4L14.7368 23.8V18.88C20.2632 18.88 24.1316 20.8 26.8947 25C25.7895 19 22.4737 13 14.7368 11.8Z" fill="white"/>
+</svg>

+ 5 - 0
src/assets/svg/icon-user1.svg

@@ -0,0 +1,5 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g opacity="0.4">
+<path d="M8 3C8.66304 3 9.29893 3.26339 9.76777 3.73223C10.2366 4.20107 10.5 4.83696 10.5 5.5C10.5 6.16304 10.2366 6.79893 9.76777 7.26777C9.29893 7.73661 8.66304 8 8 8C7.33696 8 6.70107 7.73661 6.23223 7.26777C5.76339 6.79893 5.5 6.16304 5.5 5.5C5.5 4.83696 5.76339 4.20107 6.23223 3.73223C6.70107 3.26339 7.33696 3 8 3ZM8 9.25C10.7625 9.25 13 10.3688 13 11.75V13H3V11.75C3 10.3688 5.2375 9.25 8 9.25Z" fill="white"/>
+</g>
+</svg>

+ 3 - 0
src/assets/svg/icon-while-user.svg

@@ -0,0 +1,3 @@
+<svg width="9" height="8" viewBox="0 0 9 8" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.5 4C5.60514 4 6.5 3.10514 6.5 2C6.5 0.894857 5.60514 8.16868e-08 4.5 8.16868e-08C4.23734 -7.49976e-05 3.97723 0.0516053 3.73454 0.152088C3.49186 0.252571 3.27135 0.399887 3.08562 0.585619C2.89989 0.771351 2.75257 0.991859 2.65209 1.23454C2.55161 1.47723 2.49992 1.73734 2.5 2C2.5 3.10514 3.39486 4 4.5 4ZM4.5 4.57143C3.16514 4.57143 0.5 5.33714 0.5 6.85714V8H8.5V6.85714C8.5 5.33714 5.83486 4.57143 4.5 4.57143Z" fill="white"/>
+</svg>

+ 3 - 0
src/assets/svg/icon-while-yes.svg

@@ -0,0 +1,3 @@
+<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M3 7.5L7.15975 11.4647L12.8755 3.62562" stroke="white" stroke-width="2"/>
+</svg>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 19
src/assets/svg/img-A0.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 19
src/assets/svg/img-A1.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 44
src/assets/svg/img-B0.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 44
src/assets/svg/img-B1.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 3 - 0
src/assets/svg/img-LT0.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 3 - 0
src/assets/svg/img-LT1.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 3 - 0
src/assets/svg/img-P1.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 3 - 0
src/assets/svg/img-P2.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 3 - 0
src/assets/svg/img-P3.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 2 - 0
src/assets/svg/img-T0.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 2 - 0
src/assets/svg/img-T1.svg


+ 11 - 0
src/assets/svg/img-preview-treasure-01-bg.svg

@@ -0,0 +1,11 @@
+<svg width="375" height="500" viewBox="0 0 375 500" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="375" height="500" fill="url(#paint0_linear_24395_274606)"/>
+<defs>
+<linearGradient id="paint0_linear_24395_274606" x1="187" y1="-7.83211e-09" x2="187.5" y2="500" gradientUnits="userSpaceOnUse">
+<stop offset="0.388068" stop-color="#25180D"/>
+<stop offset="0.554041" stop-color="#5E4025"/>
+<stop offset="0.616047" stop-color="#876635"/>
+<stop offset="0.716041" stop-color="#24180C"/>
+</linearGradient>
+</defs>
+</svg>

+ 476 - 0
src/components/currency-list.vue

@@ -0,0 +1,476 @@
+<!-- 货币列表 -->
+<template>
+    <div class="currency-list-wrapper">
+        <div class="search-input-wrapper">
+            <input class="input" :style="{ width: !showRefresh ? '100%' : '88%' }" v-model="keywords"
+                placeholder="Search name" @input="onInput" />
+
+            <img :src="require('@/assets/svg/icon-form-refresh.svg')" v-if="showRefresh" class="icon"
+                :class="{ 'icon-refresh-rotate': refreshRotate }" @click="refresh">
+
+            <img :src="require('@/assets/svg/icon-clear-search.svg')" class="icon-clear" v-if="keywords"
+                :style="{ right: !showRefresh ? '6%' : '16%' }" @click="clearIpt">
+        </div>
+        <div class="list-wrapper" :style="{ 'paddingBottom': showGeneralLottery ? '50px' : '0' }" ref="listWrapperDom"
+            @scroll="listScroll">
+            <div class="page-list" ref="listContentDom" v-if="!showSearch">
+                <div class="list-item" v-for="(item, index) in currencyInfoList" :key="index">
+
+                    <template v-if="props.page != 'top-up' || item.type != 1">
+                        <div class="item-title" v-if="item.data.length">
+                            <img class="icon"
+                                :src="item.type == 1 ? require('@/assets/svg/icon-currency-category-01.svg') : require('@/assets/svg/icon-currency-category-02.svg')" />
+                            {{ item.type == 1 ? 'Cash' : 'Crypto' }}
+                        </div>
+                        <div class="item-detail" v-for="(data, idx) in item.data" :key="idx"
+                            @click="selectCurrency(data)">
+                            <div class="left">
+                                <img class="icon-currency" :src="data.currencies[0].iconPath" />
+                                <div class="currency-info">
+                                    <div class="name">{{ data.currencies[0].currencyCode == 'USD' ? 'USD' :
+                                            data.currencies[0].tokenSymbol
+                                    }}</div>
+                                    <div class="desc">{{ data.currencies[0].currencyName }}
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="right">
+                                <div class="num">
+                                    <a-tooltip :title="data.totalBalance">
+                                        {{ getBit(data.totalBalance) }}
+                                    </a-tooltip>
+                                </div>
+                                <div class="amount" v-if="data.currencies[0].currencyType == 2">
+                                    <a-tooltip :title="'$' + data.totalUsdEstimateBalance">
+                                        ${{ getBit(data.totalUsdEstimateBalance) }}
+                                    </a-tooltip>
+                                </div>
+                            </div>
+                        </div>
+                    </template>
+                </div>
+                <div class="no-data" v-if="show_empty">
+                    Not found
+                </div>
+            </div>
+            <!-- 显示搜索结果列表 -->
+            <div class="search-list" v-else>
+                <div class="item-detail" v-for="(data, idx) in searchList" :key="idx" @click="selectCurrency(data)">
+                    <div class="left">
+                        <img class="icon-currency" :src="data.currencies[0].iconPath" />
+                        <div class="currency-info">
+                            <div class="name">{{ data.currencies[0].currencyCode == 'USD' ? 'USD' :
+                                    data.currencies[0].tokenSymbol
+                            }}</div>
+                            <div class="desc">{{ data.currencies[0].currencyName }}</div>
+                        </div>
+                    </div>
+                    <div class="right">
+                        <div class="num">
+                            <a-tooltip :title="data.currencies[0].balance">
+                                {{ getBit(data.currencies[0].balance) }}
+                            </a-tooltip>
+                        </div>
+                        <div class="amount" v-if="data.currencies[0].currencyType == 2">
+                            <a-tooltip :title="'$' + data.currencies[0].usdEstimateBalance">
+                                ${{ getBit(data.currencies[0].usdEstimateBalance) }}
+                            </a-tooltip>
+                        </div>
+                    </div>
+                </div>
+                <div class="no-data" v-if="!searchList.length">
+                    Not found
+                </div>
+            </div>
+            <!-- 添加通用奖品 -->
+            <div class="add-general-lottery" v-if="showGeneralLottery" @click="addGeneralLottery">
+                <img class="add-general-lottery-icon" :src="require('@/assets/svg/icon-add-white.svg')" />
+                <span class="add-general-lottery-text">Customize</span>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script setup>
+/* eslint-disable */
+import { defineEmits, ref, onMounted, defineProps, defineExpose } from "vue";
+import { getCurrencyInfo, searchCurrencyInfo, syncChainTokenRechargeRecord } from "@/http/publishApi";
+import { debounce, getBit } from "@/uilts/help";
+
+const props = defineProps({
+    page: {
+        type: String,
+        default: '',
+    },
+    filterEmptyBalance: {
+        type: Boolean,
+        default: false
+    },
+    showRefresh: {
+        type: Boolean,
+        default: true
+    },
+    // 是否显示 通用奖品选项
+    showGeneralLottery: {
+        type: Boolean,
+        default: false
+    }
+})
+let keywords = ref('');
+let showSearch = ref(false);
+let currencyInfoList = ref([]);
+let searchList = ref([]);
+let refreshRotate = ref(false);
+let listWrapperDom = ref(null);
+let listContentDom = ref(null);
+let listReqParams = {
+    params: {
+        pageNum: 1,
+        pageSize: 100,
+    },
+    loadMore: false,
+    requestIng: false
+};
+let show_empty = ref(false);
+const emits = defineEmits(["selectCurrency", "setCurrencyList", "addGeneralLottery"]);
+
+const selectCurrency = (params) => {
+    emits("selectCurrency", params);
+};
+
+const onInput = (val) => {
+    console.log(keywords.value);
+    if (keywords.value) {
+        showSearch.value = true;
+        searchCurrency(keywords.value);
+    } else {
+        showSearch.value = false;
+        searchList.value = [];
+    }
+}
+
+const clearIpt = () => {
+    keywords.value = '';
+    showSearch.value = false;
+    searchList.value = [];
+}
+
+const refresh = () => {
+    if (!refreshRotate.value) {
+        refreshRotate.value = true;
+        setTimeout(() => {
+            refreshRotate.value = false;
+        }, 1000)
+        asyncTokenRechRecord(() => {
+            listReqParams.params.pageNum = 1;
+            getCurrencyInfoList();
+        })
+    }
+}
+
+/**
+ * 搜索结果列表
+ */
+const searchCurrency = debounce(function (searchWords) {
+    searchCurrencyInfo({
+        params: {
+            pageNum: 1,
+            pageSize: 100,
+            searchWords,
+            filterFiatCurrency: props.page == 'top-up'
+        }
+    }).then(res => {
+        if (res.code == 0) {
+            if (res.data.currencyCategories && res.data.currencyCategories.length) {
+                let currencyCategories = res.data.currencyCategories;
+
+                let arr = [];
+                for (let i = 0; i < currencyCategories.length; i++) {
+                    let item = currencyCategories[i];
+                    arr = arr.concat(item.data);
+                }
+
+                currencyCategories[0]['data'] = arr;
+
+                let list = currencyCategories[0];
+
+                if (list && list.data && list.data.length) {
+                    searchList.value = list.data;
+                } else {
+                    searchList.value = [];
+                }
+            } else {
+                searchList.value = [];
+            }
+        }
+    })
+}, 500)
+
+/**
+ * 获取货币列表
+ */
+const getCurrencyInfoList = (_params = {}) => {
+
+    if (listReqParams.requestIng) {
+        return;
+    }
+    listReqParams.requestIng = true;
+    if (_params.pageNum) {
+        listReqParams.params.pageNum = _params.pageNum;
+    }
+    let params = {
+        params: {
+            pageNum: listReqParams.params.pageNum,
+            pageSize: listReqParams.params.pageSize,
+            filterFiatCurrency: props.page == 'top-up',
+            filterEmptyBalance: props.filterEmptyBalance
+        }
+    };
+    getCurrencyInfo(params).then(res => {
+        listReqParams.requestIng = false;
+        if (res.code == 0) {
+            let resData = res.data;
+            if (resData && resData.currencyCategories.length) {
+                if (listReqParams.params.pageNum < 2) {
+                    currencyInfoList.value = res.data.currencyCategories;
+                    emits('setCurrencyList', { list: currencyInfoList.value })
+                    if (resData.currencyCategories.length == 1 && (!resData.currencyCategories[0]['data'] || !resData.currencyCategories[0]['data'].length)) {
+                        show_empty.value = true
+                    }
+                } else {
+                    let data = currencyInfoList.value;
+                    let currencyCategories = resData.currencyCategories;
+
+                    if (currencyCategories.length) {
+                        let tokenData = currencyCategories.find(item => item.type == 2);
+                        if (tokenData && tokenData.data && tokenData.data.length) {
+                            let index = data.findIndex(item => item.type == 2);
+                            let tokenList = data[index]['data'];
+                            data[index]['data'] = tokenList.concat(tokenData.data);
+                            currencyInfoList.value = data;
+                        }
+                    }
+
+                }
+                listReqParams.loadMore = false;
+            } else {
+                show_empty.value = true
+            }
+        }
+    }).catch(err => {
+        listReqParams.requestIng = false;
+    })
+}
+
+
+/**
+ * 同步链上交易
+ */
+const asyncTokenRechRecord = (cb) => {
+    syncChainTokenRechargeRecord({
+        params: {
+            currencyCode: ''
+        }
+    }).then(res => {
+        if (res.code == 0) {
+            cb && cb(res.data)
+        }
+    })
+}
+
+const listScroll = (e) => {
+    let wrapperHeight = listWrapperDom.value.offsetHeight;
+    let listContentHeight = listContentDom.value.offsetHeight;
+    let scrollTop = e.target.scrollTop || 0;
+    if (
+        listReqParams.loadMore === false &&
+        wrapperHeight + scrollTop >= (listContentHeight - 50)
+    ) {
+        listReqParams.loadMore = true;
+        listReqParams.params.pageNum++;
+        getCurrencyInfoList();
+    }
+}
+
+/**
+ * 添加通用奖品 按钮点击
+ */
+const addGeneralLottery = () => {
+    emits('addGeneralLottery');
+}
+
+onMounted(() => {
+    getCurrencyInfoList();
+})
+
+defineExpose({
+    getCurrencyInfoList,
+    refresh
+})
+
+</script>
+
+<style scoped lang="scss">
+.currency-list-wrapper {
+    width: 100%;
+    height: 100%;
+    background-color: #fff;
+    box-sizing: border-box;
+
+    .search-input-wrapper {
+        padding: 10px;
+        box-sizing: border-box;
+        background: #f7f7f7;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        position: relative;
+
+        .input {
+            background: #f1f1f1;
+            border-radius: 110px;
+            width: 88%;
+            height: 40px;
+            box-sizing: border-box;
+            border: none;
+            outline: none;
+            padding: 10px 80px 10px 22px;
+            color: #adadad;
+        }
+
+        input::placeholder {
+            color: #adadad;
+        }
+
+        .icon {
+            width: 32px;
+            cursor: pointer;
+        }
+
+        .icon-refresh-rotate {
+            transform: rotate(360deg);
+            transition-duration: 1s;
+        }
+
+
+        .icon-clear {
+            position: absolute;
+            right: 16%;
+            cursor: pointer;
+        }
+    }
+
+    .list-wrapper {
+        height: calc(100% - 60px);
+        overflow-y: auto;
+
+        .list-item {
+            .item-title {
+                display: flex;
+                align-items: center;
+                height: 42px;
+                padding: 0 10px;
+                box-sizing: border-box;
+                background: #f7f7f7;
+                font-size: 14px;
+                color: #a2a2a2;
+
+                .icon {
+                    width: 24px;
+                    height: 24px;
+                    margin-right: 6px;
+                }
+            }
+        }
+
+        .item-detail {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            padding: 12px 20px;
+            box-sizing: border-box;
+            cursor: pointer;
+
+            .left {
+                display: flex;
+
+                .icon-currency {
+                    width: 24px;
+                    height: 24px;
+                    margin-right: 12px;
+                    margin-top: 4px;
+                }
+
+                .currency-info {
+                    .name {
+                        font-weight: 500;
+                        font-size: 15px;
+                        margin-bottom: 5px;
+                        word-break: break-all;
+                    }
+
+                    .desc {
+                        font-weight: 400;
+                        font-size: 12px;
+                        color: #a2a2a2;
+                    }
+                }
+            }
+
+            .right {
+                text-align: right;
+                max-width: calc(100% - 150px);
+
+                .num,
+                .amount {
+                    word-break: break-all;
+                }
+
+                .num {
+                    font-weight: 500;
+                    font-size: 15px;
+                    margin-bottom: 5px;
+                }
+
+                .amount {
+                    font-weight: 400;
+                    font-size: 12px;
+                    color: #a2a2a2;
+                }
+            }
+        }
+
+        .no-data {
+            font-weight: 500;
+            font-size: 22px;
+            color: #BBBBBB;
+            position: absolute;
+            top: 50%;
+            left: 50%;
+            transform: translate(-50%, -50%);
+        }
+
+        .add-general-lottery {
+            position: absolute;
+            bottom: 0;
+            left: 0;
+            display: flex;
+            width: 100%;
+            height: 50px;
+            align-items: center;
+            justify-content: center;
+            background-color: #1D9BF0;
+            color: #fff;
+            cursor: pointer;
+
+            &-icon {
+                margin-right: 8px;
+            }
+
+            &-text {
+                font-size: 16px;
+            }
+        }
+    }
+}
+</style>

+ 534 - 0
src/components/popup-transactions.vue

@@ -0,0 +1,534 @@
+<template>
+    <div class="com-wrapper" ref="listWrapper" @scroll="listScroll">
+        <template v-if="!dataList.length">
+            <img class="icon-empty" :src="require('@/assets/svg/icon-empty-list.svg')" />
+        </template>
+        <div class="list-wrapper" ref="listContent">
+            <div>
+                <div class="cell" v-for="(item, index) in dataList" :key="index">
+                    <red-dot class="red-dots" v-if="item.unReadMsgCount > 0 && isReadMsg"></red-dot>
+                    <div class="img-wrapper">
+                        <!-- 收入- 任务红包领取 -->
+                        <template
+                            v-if="item.bizType == 1 || item.bizType == 5 || item.bizType == 10 || item.bizType == 11 || item.bizType == 12">
+                            <img class="icon-avatar" style="margin-right: 0"
+                                :src="item.bizType != 12 && item.bizData ? item.bizData.avatarUrl : require('@/assets/svg/icon-treasure-return.svg')" />
+                            <img class="icon-give" style="right: -4px"
+                                :src="item.bizType == 10 || item.bizType == 11 || item.bizType == 12 ? require('@/assets/svg/icon-small-treasure.svg') : require('@/assets/svg/icon-get-giveaways-s.svg')" />
+                        </template>
+
+                        <!-- 收入- 任务红包结余退款, -->
+                        <template v-else-if="item.bizType == 2 || item.bizType == 6">
+                            <img style="margin-left:-4px; width: 38px" :src="
+                                require('@/assets/svg/icon-give-refund-list.svg')
+                            " />
+                        </template>
+                        <!-- 收入 - 提现 -- 失败退款 -->
+                        <template v-else-if="item.bizType == 3">
+                            <img style="margin-left:-4px" :src="
+                                require('@/assets/svg/icon-list-withdraw.svg')
+                            " />
+                        </template>
+                        <!-- 收入-充值 -->
+                        <template v-else-if="item.bizType == 4">
+                            <img style="margin-left:-4px" :src="
+                                require('@/assets/svg/icon-list-top-up.svg')
+                            " />
+                        </template>
+                        <!-- 收入 - 盲盒 -->
+                        <template v-else-if="item.bizType == 7">
+                            <img class="icon-avatar" style="margin-left:-4px" :src="item.bizData.imagePath"
+                                v-if="item.bizData && item.bizData.imagePath" />
+                            <img class="icon-avatar" style="margin-left:-4px"
+                                :src="require('@/assets/svg/icon-wallter-list-blind-box.svg')" v-else />
+                            <img class="icon-give" :src="require('@/assets/svg/icon-list-withdraw-s.svg')" />
+                        </template>
+                        <!-- 收入 - 盲盒 -->
+                        <template v-else-if="item.bizType == 8">
+                            <img class="icon-avatar" style="margin-left:-4px" :src="item.bizData.imagePath"
+                                v-if="item.bizData && item.bizData.imagePath" />
+                            <img class="icon-avatar" style="margin-left:-4px"
+                                :src="require('@/assets/svg/icon-wallter-list-blind-box.svg')" v-else />
+                            <img class="icon-give" :src="require('@/assets/svg/icon-get-giveaways-s.svg')" />
+                        </template>
+                        <!-- 支出 - 提现 -->
+                        <template v-else-if="item.bizType == -1">
+                            <img style="margin-left:-4px" :src="
+                                require('@/assets/svg/icon-list-withdraw.svg')
+                            " />
+                        </template>
+                        <!-- 支出-任务红包余额支付 -->
+                        <template v-else-if="item.bizType == -2">
+                            <img class="icon-avatar" style="margin-left:-4px" :src="
+                                require('@/assets/svg/icon-big-give.svg')
+                            " />
+                            <img class="icon-give" :src="
+                                require('@/assets/svg/icon-list-withdraw-s.svg')
+                            " />
+                        </template>
+                        <!-- 支出-买盲盒 -->
+                        <template v-else-if="item.bizType == -3">
+                            <img style="margin-left:-4px" :src="
+                                require('@/assets/svg/icon-wallter-list-blind-box.svg')
+                            " />
+                        </template>
+                        <template v-else-if="item.bizType == -4">
+                            <img class="icon-avatar" style="margin-left:-4px" :src="
+                                require('@/assets/svg/icon-big-give.svg')
+                            " />
+                            <img class="icon-give" :src="
+                                require('@/assets/svg/icon-list-withdraw-s.svg')
+                            " />
+                        </template>
+                        <!-- 交易链手续费 -->
+                        <template v-else-if="item.bizType == -5">
+                            <img class="icon-avatar" style="margin-left:-4px" :src="item.bizData.imagePath"
+                                v-if="item.bizData && item.bizData.imagePath" />
+                            <img class="icon-avatar" style="margin-left:-4px"
+                                :src="require('@/assets/img/icon-box2.png')" v-else />
+                            <img class="icon-give" :src="require('@/assets/svg/icon-transaction-s.svg')" />
+                        </template>
+                        <!-- 支出-夺宝 -->
+                        <template v-else-if="item.bizType == -6">
+                            <img class="icon-avatar" style="margin-left:-4px" :src="
+                                require('@/assets/svg/icon-big-give.svg')
+                            " />
+                            <img class="icon-give" :src="
+                                require('@/assets/svg/icon-list-withdraw-s.svg')
+                            " />
+                        </template>
+                    </div>
+                    <div class="info-wrapper">
+                        <div class="left">
+                            <div class="nickname">
+                                <template v-if="item.bizType == 1">
+                                    Giveaways ({{ item.bizData.nickName }})
+                                </template>
+                                <template v-else-if="item.bizType == 2">
+                                    Giveaways Refund
+                                </template>
+                                <template v-else-if="item.bizType == 3">
+                                    Withdrawal Refund
+                                </template>
+                                <template v-else-if="item.bizType == 4">
+                                    Deposit
+                                </template>
+                                <template v-else-if="item.bizType == 5">
+                                    Winning the lottery
+                                </template>
+                                <template v-else-if="item.bizType == 6">
+                                    Lottery Refund
+                                </template>
+                                <template v-else-if="item.bizType == 7">
+                                    Sell NFT Mystery box*{{ (item.bizData && item.bizData.nftItemCount || '') }}
+                                </template>
+                                <template v-else-if="item.bizType == 8">
+                                    NFT Refund
+                                </template>
+                                <template v-else-if="item.bizType == 10 || item.bizType == 11">
+                                    Get Treasure Chest
+                                </template>
+                                <template v-else-if="item.bizType == 12">
+                                    Treasure Chest Refund
+                                </template>
+                                <template v-else-if="item.bizType == -1">
+                                    Withdrawal
+                                </template>
+                                <template v-else-if="item.bizType == -2">
+                                    Giveaways
+                                </template>
+                                <template v-else-if="item.bizType == -3">
+                                    Buy NFT Mystery box*{{ (item.bizData && item.bizData.nftItemCount || '') }}
+                                </template>
+                                <template v-else-if="item.bizType == -4">
+                                    Lottery Giveaway
+                                </template>
+                                <template v-else-if="item.bizType == -5">
+                                    Transaction Royalties
+                                </template>
+                                <template v-else-if="item.bizType == -6">
+                                    Send Treasure Chest
+                                </template>
+                            </div>
+                            <div class="time">{{ moment(item.createTimestamp).format('MM-DD HH:mm:ss') }}</div>
+                        </div>
+                        <div class="right">
+                            <div class="msg">
+                                <template v-if="item.bizType == -1">
+                                    <!-- 提现支出-状态(0:已申请,1:支付中,2:提现成功,3:提现失败) -->
+                                    <template
+                                        v-if="item.bizData.withdrawStatus == 0 || item.bizData.withdrawStatus == 1">
+                                        <div>
+                                            <div class="balance"
+                                                :class="{ 'balance-direction': item.trxAmountCurrencyInfo.tokenSymbol.length + ('' + item.trxAmountValue).length > 12 }">
+                                                <span class="amount">
+                                                    <a-tooltip :title="'-' + item.trxAmountValue">
+                                                        -{{ getBit(item.trxAmountValue) || 0 }}
+                                                    </a-tooltip>
+                                                </span>
+                                                <div class="trx-amount-currency-info">
+                                                    <span class="name">{{ item.trxAmountCurrencyInfo.tokenSymbol
+                                                    }}</span>
+                                                    <img :src="item.trxAmountCurrencyInfo.iconPath" alt="">
+                                                </div>
+                                            </div>
+                                            <div class="desc">
+                                                in progress
+                                            </div>
+                                        </div>
+                                    </template>
+                                    <template v-else-if="item.bizData.withdrawStatus == 2">
+                                        <div class="balance"
+                                            :class="{ 'balance-direction': item.trxAmountCurrencyInfo.tokenSymbol.length + ('' + item.trxAmountValue).length > 12 }">
+                                            <span class="amount">
+                                                <a-tooltip :title="'-' + item.trxAmountValue">
+                                                    -{{ getBit(item.trxAmountValue) || 0 }}
+                                                </a-tooltip>
+                                            </span>
+                                            <div class="trx-amount-currency-info">
+                                                <span class="name">{{ item.trxAmountCurrencyInfo.tokenSymbol }}</span>
+                                                <img :src="item.trxAmountCurrencyInfo.iconPath" alt="">
+                                            </div>
+                                        </div>
+                                    </template>
+                                    <template v-else-if="item.bizData.withdrawStatus == 3">
+                                        <div>
+                                            <div class="balance"
+                                                :class="{ 'balance-direction': item.trxAmountCurrencyInfo.tokenSymbol.length + ('' + item.trxAmountValue).length > 12 }">
+                                                <span class="amount">
+                                                    <a-tooltip :title="'-' + item.trxAmountValue">
+                                                        -{{ getBit(item.trxAmountValue) || 0 }}
+                                                    </a-tooltip>
+                                                </span>
+                                                <div class="trx-amount-currency-info">
+                                                    <span class="name">{{ item.trxAmountCurrencyInfo.tokenSymbol
+                                                    }}</span>
+                                                    <img :src="item.trxAmountCurrencyInfo.iconPath" alt="">
+                                                </div>
+                                            </div>
+                                            <div class="desc">
+                                                Withdrawal failed
+                                            </div>
+                                        </div>
+                                    </template>
+                                    <template v-else>
+                                        <div class="balance"
+                                            :class="{ 'balance-direction': item.trxAmountCurrencyInfo.tokenSymbol.length + ('' + item.trxAmountValue).length > 12 }">
+                                            <span class="amount">
+                                                <a-tooltip :title="'-' + item.trxAmountValue">
+                                                    -{{ getBit(item.trxAmountValue) || 0 }}
+                                                </a-tooltip>
+                                            </span>
+                                            <div class="trx-amount-currency-info">
+                                                <span class="name">{{ item.trxAmountCurrencyInfo.tokenSymbol }}</span>
+                                                <img :src="item.trxAmountCurrencyInfo.iconPath" alt="">
+                                            </div>
+                                        </div>
+                                    </template>
+                                </template>
+
+                                <template v-else>
+                                    <div class="balance"
+                                        :class="{ 'balance-direction': item.trxAmountCurrencyInfo.tokenSymbol.length + ('' + item.trxAmountValue).length > 12 }">
+
+                                        <!--支出—— -2:零钱余额支付 、-3: NFT盲盒余额支付 -->
+                                        <span class="amount"
+                                            v-if="item.bizType == -2 || item.bizType == -3 || item.bizType == -4 || item.bizType == -5 || item.bizType == -6">
+                                            <a-tooltip :title="'-' + item.trxAmountValue">
+                                                -{{ getBit(item.trxAmountValue) || 0 }}
+                                            </a-tooltip>
+                                        </span>
+                                        <!-- 收入—— bizType:1、2、3、4 -->
+                                        <span class="amount" v-else>
+                                            <a-tooltip :title="'+' + item.trxAmountValue">
+                                                +{{ getBit(item.trxAmountValue) || 0 }}
+                                            </a-tooltip>
+                                        </span>
+
+                                        <div class="trx-amount-currency-info">
+                                            <span class="name">{{ item.trxAmountCurrencyInfo.tokenSymbol }}</span>
+                                            <img :src="item.trxAmountCurrencyInfo.iconPath" alt="">
+                                        </div>
+                                    </div>
+                                </template>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script setup>
+/* eslint-disable */
+import { onMounted, ref, defineProps, defineEmits } from "vue";
+import redDot from "@/components/red-dot.vue";
+import messageCenter from "@/uilts/messageCenter";
+import MESSAGE_ENUM from "@/uilts/messageCenter/messageEnum";
+import { transactionsList } from "@/http/account";
+import { readAllMsgByType, getAllMessageInfo } from "@/http/messageApi"
+import { getBit } from "@/uilts/help";
+
+let moment = require('moment');
+let dataList = ref([]);
+let listWrapper = ref(null);
+let listContent = ref(null);
+let listReqParams = {
+    params: {
+        pageNum: 1,
+        pageSize: 20,
+    },
+    loadMore: false,
+};
+
+let isReadMsg = ref(true);
+
+const getTransactionsList = () => {
+    transactionsList({
+        params: listReqParams.params,
+    }).then((res) => {
+        console.log(res);
+        if (res.code == 0) {
+            let resData = res.data;
+            if (resData.length) {
+                for (let i = 0; i < resData.length; i++) {
+                    resData[i]["bizData"] = JSON.parse(resData[i]["bizData"]);
+                }
+
+                if (listReqParams.params.pageNum < 2) {
+                    dataList.value = resData;
+                } else {
+                    let data = dataList.value;
+                    data = data.concat(resData);
+                    dataList.value = data;
+                }
+                listReqParams.loadMore = false;
+            }
+        }
+    });
+};
+
+onMounted(() => {
+    messageCenter.send({
+        actionType: MESSAGE_ENUM.IFRAME_RUNTIME_CONNECT_POPUP,
+        data: {}
+    });
+    setTimeout(() => {
+        isReadMsg.value = false;
+        readAllMsgByType({
+            params: {
+                msgType: 2 // 1:任务红包 2:钱包明细
+            }
+        }).then(res => {
+            setMessageCount();
+        })
+    }, 2000)
+    getTransactionsList();
+});
+
+const setMessageCount = () => {
+    getAllMessageInfo({
+        params: {
+        }
+    }).then(res => {
+        if (res.code == 0) {
+            let { unReadCountTotal = 0 } = res.data;
+            if (unReadCountTotal > 0) {
+                let text = unReadCountTotal > 99 ? '99+' : unReadCountTotal + '';
+                messageCenter.send({
+                    actionType: MESSAGE_ENUM.IFRAME_MESSAGE_PAGE_SETBADGEINFO,
+                    data: { text }
+                })
+            } else {
+                messageCenter.send({
+                    actionType: MESSAGE_ENUM.IFRAME_MESSAGE_PAGE_HIDEBADGE,
+                    data: {}
+                })
+            }
+        }
+    });
+}
+
+
+const emits = defineEmits(["back"]);
+
+const back = () => {
+    emits("back", {});
+};
+
+const listScroll = (e) => {
+    let wrapperHeight = listWrapper.value.offsetHeight;
+    let listContentHeight = listContent.value.offsetHeight;
+    let scrollTop = e.target.scrollTop || 0;
+    if (
+        listReqParams.loadMore === false &&
+        wrapperHeight + scrollTop >= listContentHeight - 30
+    ) {
+        listReqParams.loadMore = true;
+        listReqParams.params.pageNum++;
+        getTransactionsList();
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.com-wrapper {
+    height: 100%;
+    position: relative;
+    overflow-y: auto;
+
+    .icon-empty {
+        position: absolute;
+        left: 50%;
+        top: 20%;
+        transform: translateX(-50%);
+    }
+
+    .com-nav-bar {
+        padding: 14px;
+        box-sizing: border-box;
+        display: flex;
+        align-items: center;
+        font-weight: 500;
+        font-size: 13px;
+
+        .icon {
+            width: 16px;
+            margin-right: 6px;
+            cursor: pointer;
+        }
+    }
+
+    .list-wrapper {
+        width: 100%;
+        // height: calc(100% - 51px);
+        // height: 100%;
+
+        .cell {
+            display: flex;
+            justify-content: space-between;
+            min-height: 66px;
+            box-sizing: border-box;
+            padding-left: 20px;
+            position: relative;
+
+            .red-dots {
+                position: absolute;
+                right: 4px;
+                top: 4px;
+            }
+
+            .img-wrapper {
+                position: relative;
+                margin-right: 16px;
+                box-sizing: border-box;
+                margin-top: 11px;
+
+                .icon-avatar {
+                    width: 34px;
+                    height: 34px;
+                    border-radius: 50%;
+                    margin-right: 4px;
+                }
+
+                .icon-give {
+                    position: absolute;
+                    right: -2px;
+                    top: 19px;
+                }
+            }
+
+            .info-wrapper {
+                flex: 1;
+                height: 100%;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                box-sizing: border-box;
+                padding: 10px 12px 10px 0;
+
+                .left {
+                    .nickname {
+                        font-weight: 500;
+                        font-size: 14px;
+                        margin-bottom: 5px;
+                        word-break: break-all;
+                        max-width: 140px;
+                    }
+
+                    .time {
+                        font-size: 12px;
+                        color: #B0B0B0;
+                    }
+                }
+
+                .right {
+                    display: flex;
+                    align-items: center;
+                    cursor: pointer;
+
+                    .msg {
+                        font-weight: 500;
+                        font-size: 14px;
+                        display: flex;
+                        align-items: center;
+
+                        .amount {
+                            color: #E86F00;
+                            max-width: 110px;
+                            min-width: 20px;
+                            display: inline-block;
+                            word-break: break-all;
+                            text-align: right;
+                        }
+
+                        .name {
+                            margin-left: 3px;
+                            max-width: 130px;
+                            line-height: 14px;
+                            font-size: 13px;
+                            word-break: break-all;
+                        }
+
+                        img {
+                            width: 14px;
+                            height: 14px;
+                            margin-left: 4px;
+                        }
+
+                        .balance {
+                            text-align: right;
+                            display: flex;
+                            align-items: center;
+
+                            .trx-amount-currency-info {
+                                display: flex;
+                                align-items: center;
+                            }
+                        }
+
+                        .balance-direction {
+                            flex-direction: column;
+                            align-items: flex-end;
+                        }
+
+                        .desc {
+                            text-align: right;
+                            font-weight: 400;
+                            font-size: 12px;
+                            color: #797979;
+                            margin-top: 4px;
+                        }
+                    }
+
+                    .icon {
+                        width: 18px;
+                        height: 24px;
+                    }
+                }
+            }
+        }
+    }
+}
+</style>

+ 2 - 2
src/components/v-head.vue

@@ -55,7 +55,7 @@ let state = reactive({
     rotate: false
 })
 
-const emit = defineEmits(['on-refresh'])
+const emit = defineEmits(['on-refresh', 'onBack'])
 
 const router = useRouter()
 
@@ -65,7 +65,7 @@ function clickBack() {
     } else {
         router.back()
     }
-
+    emit('onBack')
 }
 
 function clickRefresh() {

+ 324 - 2
src/pages/tabbar/wallet/index.vue

@@ -1,3 +1,325 @@
 <template>
-    <div>111</div>
-</template>
+    <div class="page-wrapper" ref="pageWrapperDom">
+        <div class="content">
+            <div class="balance">
+                <div class="wallet">
+                    <font>Balance Valuation</font>
+                </div>
+            </div>
+            <div class="amount-wrapper">
+                <div class="amount">
+                    <a-tooltip :title="'$' + canWithdrawBalance">
+                        ${{ getBit(canWithdrawBalance) }}
+                    </a-tooltip>
+                </div>
+
+                <div class="right">
+                    <div class="bill" @click="showTransactions">
+                        <red-dot class="red-dot" v-if="unReadCountWallet > 0"></red-dot>
+                        <img :src="require('@/assets/svg/icon-home-list.svg')" />
+                    </div>
+
+                    <img
+                        class="icon"
+                        :src="require('@/assets/svg/icon-home-refresh.svg')"
+                        :class="{ transform_rotate: iconRotate }"
+                        @click="refreshList" />
+                </div>
+            </div>
+        </div>
+
+        <currency-list
+            ref="currencyListDom"
+            v-if="userInfo.accessToken"
+            style="height: calc(100% - 103px);"
+            :showRefresh="false"
+            @selectCurrency="selectCurrency">
+        </currency-list>
+    </div>
+</template>
+
+<script setup>
+import { ref, onMounted } from "vue";
+import { useRouter } from "vue-router";
+import redDot from "@/components/red-dot.vue";
+import CurrencyList from "@/components/currency-list.vue";
+import { getChromeStorageFromExtension } from "@/uilts/chromeExtension";
+import { getBalance } from "@/http/account";
+import { getAllMessageInfo } from "@/http/messageApi"
+import messageCenter from "@/uilts/messageCenter";
+import MESSAGE_ENUM from "@/uilts/messageCenter/messageEnum";
+import Report from "@/log-center/log";
+import { getBit } from "@/uilts/help";
+
+let userInfo = ref({});
+let canWithdrawBalance = ref(0);
+let isRequestWithdrawBalance = ref(false);
+let router = useRouter()
+let currencyListDom = ref('');
+let iconRotate = ref(false)
+
+// 钱包未读数
+let unReadCountWallet = ref(0);
+
+function selectCurrency(_params) {
+    router.push({
+        path: 'currencyDetail',
+        query: {
+            params: JSON.stringify(_params)
+        }
+    });
+}
+
+const init = () => {
+    checkLoginState((res) => {
+        if (res) {
+            getAccountBalance();
+            setMessageCount();
+            if (window.location.pathname.indexOf('popup-page.html') > -1) {
+                return
+            }
+            Report.reportLog({
+                pageSource: Report.pageSource.denetHomePage,
+                businessType: Report.businessType.pageView,
+            }, {
+                type: window.location.href.indexOf('home.html') > -1 ? 'web' : 'extensions'
+            });
+        } else {
+            Report.reportLog({
+                pageSource: Report.pageSource.denetLogin,
+                businessType: Report.businessType.pageView,
+            });
+        }
+    });
+}
+
+const setMessageCount = () => {
+    getAllMessageInfo({
+        params: {}
+    }).then(res => {
+        if (res.code == 0) {
+            let { unReadCountTotal = 0, unReadCountWalletDetail = 0 } = res.data;
+            unReadCountWallet.value = unReadCountWalletDetail;
+            if (unReadCountTotal > 0) {
+                let text = unReadCountTotal > 99 ? '99+' : unReadCountTotal + '';
+                messageCenter.send({
+                    actionType: MESSAGE_ENUM.IFRAME_MESSAGE_PAGE_SETBADGEINFO,
+                    data: { text }
+                })
+            } else {
+                messageCenter.send({
+                    actionType: MESSAGE_ENUM.IFRAME_MESSAGE_PAGE_HIDEBADGE,
+                    data: {}
+                })
+            }
+        }
+    });
+}
+
+
+/**
+ * 获取账户余额
+ */
+const getAccountBalance = () => {
+    isRequestWithdrawBalance.value = false;
+    getBalance({}).then((res) => {
+        isRequestWithdrawBalance.value = true;
+        if (res.code == 0) {
+            if (res.data) {
+                canWithdrawBalance.value = res.data.allAssetValuationUSD;
+            }
+        }
+    });
+};
+
+const getUserInfo = async (cb) => {
+    const res = await getChromeStorageFromExtension("userInfo");
+    cb && cb(res);
+};
+
+/**
+ * 检查登录状态
+ */
+const checkLoginState = (cb) => {
+    getUserInfo((res) => {
+        if (res && res.accessToken) {
+            userInfo.value = res;
+        } else {
+            userInfo.value = {};
+        }
+        cb && cb(res);
+    });
+};
+
+const showTransactions = () => {
+    messageCenter.send({
+        actionType: MESSAGE_ENUM.IFRAME_SHOW_FOOTER_MENU,
+        data: {
+            showMenu: false,
+        }
+    })
+    router.push({ name: 'navWalletTransactions' })
+};
+
+const refreshList = () => {
+    if (iconRotate.value) {
+        return
+    }
+    iconRotate.value = true
+    setTimeout(() => {
+        iconRotate.value = false
+    }, 1000)
+
+    getAccountBalance();
+    if (currencyListDom.value) {
+        currencyListDom.value.refresh && currencyListDom.value.refresh();
+    }
+}
+
+const onMessage = () => {
+    messageCenter.listen(MESSAGE_ENUM.CONTENT_POPUP_PAGE_SHOW, () => {
+        init();
+        if (currencyListDom.value) {
+            currencyListDom.value.getCurrencyInfoList && currencyListDom.value.getCurrencyInfoList();
+        }
+    })
+}
+
+onMounted(() => {
+    onMessage();
+    init();
+});
+
+</script>
+
+<style lang="scss" scoped>
+html,
+body {
+    padding: 0 !important;
+    margin: 0 !important;
+}
+
+.page-wrapper {
+    width: 375px;
+    height: 100%;
+    box-sizing: border-box;
+    overflow-y: auto;
+
+    .nav-bar {
+        padding: 14px;
+        box-sizing: border-box;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+
+        .item {
+            display: flex;
+            align-items: center;
+            font-size: 13px;
+            cursor: pointer;
+
+            img {
+                width: 16px;
+                height: 16px;
+                margin-right: 4px;
+            }
+        }
+
+        .left {
+            font-weight: 500;
+        }
+
+        .right {
+            color: #b6b6b6;
+        }
+    }
+
+    .content {
+        padding: 12px 16px 10px 16px;
+        background: #1D9BF0;
+        box-sizing: border-box;
+
+        .icon-money {
+            width: 70px;
+            height: 70px;
+        }
+
+        .balance {
+            display: flex;
+            justify-content: space-between;
+
+            .wallet {
+                font {
+                    font-size: 13px;
+                    color: #fff;
+                    opacity: 0.7;
+                }
+            }
+        }
+
+        .amount-wrapper {
+            margin-top: 2px;
+            font-weight: 700;
+            font-size: 36px;
+            color: #fff;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+
+            .amount {
+                display: inline-block;
+            }
+
+            .right {
+                display: flex;
+                align-items: center;
+
+                .bill {
+                    height: 24px;
+                    width: 24px;
+                    position: relative;
+
+                    img {
+                        width: 24px;
+                        height: 24px;
+                        cursor: pointer;
+                        position: absolute;
+                        left: 0;
+                        top: 0;
+                    }
+
+                    .red-dot {
+                        position: absolute;
+                        right: 0px;
+                        top: -1px;
+                        z-index: 100;
+                    }
+                }
+
+                .icon {
+                    margin-left: 22px;
+                    cursor: pointer;
+                }
+
+                .transform_rotate {
+                    transform: rotate(360deg);
+                    transition-duration: 1s;
+                }
+            }
+        }
+
+        .msg {
+            margin-top: 10px;
+            font-size: 13px;
+            color: #b6b6b6;
+        }
+    }
+
+
+
+}
+
+.page-wrapper::-webkit-scrollbar {
+    display: none;
+}
+</style>

+ 45 - 0
src/pages/tabbar/wallet/transactions.vue

@@ -0,0 +1,45 @@
+<template>
+    <!-- 公共组件 -->
+    <div class="info">
+        <v-head :title="'Transactions'" :show_more="false" @onBack="clickBack"></v-head>
+        <popup-transactions style="height: calc(100% - 48px);"></popup-transactions>
+    </div>
+</template>
+
+<script setup>
+import VHead from '@/components/v-head.vue';
+import PopupTransactions from "@/components/popup-transactions";
+import messageCenter from "@/uilts/messageCenter";
+import MESSAGE_ENUM from "@/uilts/messageCenter/messageEnum";
+import { ref, onMounted } from 'vue';
+import { useRouter } from "vue-router";
+
+let back_url = ref('/');
+let router = useRouter();
+
+onMounted(() => {
+    let { params = '{}' } = router.currentRoute.value.query;
+    let { backUrl = '/' } = JSON.parse(params);
+
+    if (backUrl == 'back') {
+        back_url.value = '';
+    }
+})
+
+const clickBack = () => {
+    messageCenter.send({
+        actionType: MESSAGE_ENUM.IFRAME_SHOW_FOOTER_MENU,
+        data: {
+            showMenu: true,
+        }
+    })
+}
+</script>
+
+
+<style lang='scss' scoped>
+.info {
+    height: 100%;
+    overflow: hidden;
+}
+</style>

+ 5 - 0
src/router/index.js

@@ -33,6 +33,11 @@ const routes = [
         name: 'navWalletIndex',
         component: () => require('@/pages/tabbar/wallet/index')
     },
+    {
+        path: '/nav-wallet-transactions',
+        name: 'navWalletTransactions',
+        component: () => require('@/pages/tabbar/wallet/transactions')
+    },
 ]
 
 

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor