You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
2.9 KiB

8 months ago
  1. <template>
  2. <u-popup :show="show"
  3. mode="center"
  4. bgColor="transparent"
  5. @close="$emit('close');$play()">
  6. <view class="box">
  7. <view class="turntable"
  8. :style="{transform: `rotate(${360 * rotate + link}deg)`}">
  9. <view class="item"
  10. :style="{transform: `translate(-50%) rotate(${(360 / 8) * index}deg)`}"
  11. v-for="(item, index) in list">
  12. <view>
  13. {{ $t(`page.turntable.${item.name}`)}}
  14. </view>
  15. <view style="margin-top: 20rpx;">
  16. USDT {{ item.money }}
  17. </view>
  18. </view>
  19. </view>
  20. <view class="z"
  21. @click="start">
  22. <view class="text">
  23. <view style="font-size: 28rpx;font-weight: 900;">
  24. {{ $t(`page.turntable.go`)}}
  25. </view>
  26. <view style="font-size: 20rpx;line-height: 30rpx;">
  27. <!-- 剩余{{ info.bigNum }} -->
  28. {{ $t(`page.turntable.num`, [info.bigNum])}}
  29. </view>
  30. </view>
  31. </view>
  32. </view>
  33. </u-popup>
  34. </template>
  35. <script>
  36. export default {
  37. name:"turntable",
  38. props : ['show', 'info'],
  39. data() {
  40. return {
  41. rotate : 0,
  42. list : [],
  43. link : 0,
  44. inter : null,
  45. };
  46. },
  47. created() {
  48. this.getTurntable()
  49. },
  50. methods : {
  51. start(){
  52. if(this.inter || this.info.bigNum <= 0){
  53. return
  54. }
  55. this.$play()
  56. this.request('clickTurntable').then(res => {
  57. if(res.code == 200){
  58. clearInterval(this.inter)
  59. this.list.forEach((n,i) => {
  60. if(n.id == res.result.id){
  61. this.link = -(360 / 8 * i)
  62. }
  63. })
  64. setTimeout(() => this.inter = null, 1500)
  65. }
  66. this.$emit('start')
  67. }).catch(err => {
  68. clearInterval(this.inter)
  69. setTimeout(() => this.inter = null, 1500)
  70. })
  71. this.link = 0
  72. this.rotate += 6
  73. this.inter = setInterval(() => {
  74. this.rotate += 1
  75. }, 200)
  76. },
  77. getTurntable(){
  78. this.request('getTurntableList').then(res => {
  79. if(res.code == 200){
  80. this.list = res.result
  81. }
  82. })
  83. },
  84. async asyncLoading() { //加载效果
  85. return new Promise((resolve, reject) => {
  86. uni.showLoading({
  87. title: this.$t('page.turntable.loading')
  88. });
  89. setTimeout(() => {
  90. uni.hideLoading();
  91. resolve()
  92. }, 500)
  93. })
  94. },
  95. }
  96. }
  97. </script>
  98. <style scoped lang="scss">
  99. .box{
  100. position: relative;
  101. .turntable{
  102. position: relative;
  103. width: 700rpx;
  104. height: 700rpx;
  105. background-image: url(/static/drone/5db810a1868a7230.png);
  106. background-size: 100% 100%;
  107. transition: transform 1.5s;
  108. .item{
  109. position: absolute;
  110. left: 50%;
  111. transform: translateX(-50%);
  112. top: 50rpx;
  113. transform-origin: 50% 300rpx;
  114. text-align: center;
  115. font-size: 22rpx;
  116. width: 180rpx;
  117. }
  118. }
  119. .z{
  120. position: absolute;
  121. top: 200rpx;
  122. left: 260rpx;
  123. width: 180rpx;
  124. height: 180rpx;
  125. // background-image: url(/static/drone/68a7230.png);
  126. background-image: url(/static/drone/230.png);
  127. background-size: 100% 100%;
  128. .text{
  129. position: absolute;
  130. top: 90rpx;
  131. margin-left: 10rpx;
  132. text-align: center;
  133. line-height: 50rpx;
  134. width: 160rpx;
  135. }
  136. }
  137. }
  138. </style>