微信

index.vue 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <style lang="scss" scoped>
  2. @font-face {
  3. font-family: myFont;
  4. src: url("https://spaceofcheng.oss-cn-beijing.aliyuncs.com/hkhb.ttf");
  5. }
  6. @import "page.scss";
  7. </style>
  8. <template>
  9. <div class="bg mainPage">
  10. <img class="bg-img" :src="bg" alt="" width="100%">
  11. <transition name="fade">
  12. <div class="dialog" v-if="showDialog" @click="close">
  13. <div class="box">
  14. <img class='dialog-bg' @click.stop="close" :src="dialog" alt="">
  15. <div class='dialog-title'>恭喜你!<span>成功获得</span></div>
  16. <div class="dialog-name">{{winning}}</div>
  17. <img class="qrCode" :src="qrCode" alt="">
  18. <div v-if="showBtn" @click="get">
  19. <img class="lq" :src="lq" alt="">
  20. </div>
  21. <div class="desc">长按二维码“城的空间”,进入会员中心查看奖品吧</div>
  22. </div>
  23. </div>
  24. </transition>
  25. <div class="turntable">
  26. <div :class='{ "round": round }' class="turntable-body">
  27. <div v-for='(item, index) in data.prizeList' :key='index' :class='item.class' >
  28. <img :src="item.img" alt="">
  29. <span :class='item.font' v-html="item.PrizeName">{{item.PrizeName}}</span>
  30. </div>
  31. <img :src="turntable" alt="" width="100%" height="100%">
  32. </div>
  33. <img class="pointer" @click="run" :src="pointer" alt="">
  34. <div class="titleText">山的艺墅季 金秋送好礼</div>
  35. <img class="down" :src="down" alt="">
  36. <img class="yf1" :src="yf1" alt="">
  37. <img class="yf2" :src="yf2" alt="">
  38. <img class="yf3" :src="yf3" alt="">
  39. <img class="yf4" :src="yf4" alt="">
  40. <img class="yf5" :src="yf3" alt="">
  41. <img class="yf6" :src="yf4" alt="">
  42. <img class="hx" :src="blackStar" alt="">
  43. <img class="hux" :src="xian" alt="">
  44. <img class="sl" :src="sl" alt="">
  45. <img class="sl2" :src="sl" alt="">
  46. <img class="jx" :src="jx" alt="">
  47. </div>
  48. <div class="paper">
  49. <img :src="paper" alt="" width="100%">
  50. <div class="winningList">
  51. <div class="title">
  52. <img :src="blackStar" alt="">
  53. <span>中奖名单</span>
  54. <img :src="jt" alt="">
  55. </div>
  56. <div class="list">
  57. <div v-for='(item, index) in data.list' :key='index'>
  58. <img :src="item.UserHeadImg" alt="">
  59. <span>
  60. <div>{{item.UserName}}</div>
  61. <div>{{toolClass.dateFormatM(item.CreateDate)}}</div>
  62. </span>
  63. <span>{{item.PrizeName}}</span>
  64. </div>
  65. </div>
  66. </div>
  67. <div class="rule">
  68. <div class="title">
  69. <img :src="sy" alt="">
  70. <span>活动规则</span>
  71. <img :src="jt" alt="">
  72. </div>
  73. <div class="content">
  74. <pre v-html='data.prize.LuckdrawRule'></pre>
  75. </div>
  76. </div>
  77. <img class="bird" :src="bird" alt="">
  78. <img class="quan1" :src="quan" alt="">
  79. <img class="quan2" :src="quan" alt="">
  80. <img class="bl1" :src="bl" alt="">
  81. <img class="bl2" :src="bl" alt="">
  82. <img class="jx2" :src="jx" alt="">
  83. </div>
  84. </div>
  85. </template>
  86. <script>
  87. import turntable from '@/assets/zhuanpan.png'
  88. import pointer from '@/assets/zhizhen.png'
  89. import paper from '@/assets/zhi.png'
  90. import blackStar from '@/assets/heixing.png'
  91. import jt from '@/assets/jiantou.png'
  92. import tx from '@/assets/touxiang.png'
  93. import sy from '@/assets/shuangyuan.png'
  94. import bird from '@/assets/xiaoniao.png'
  95. import yf1 from '@/assets/yinfu1.png'
  96. import yf2 from '@/assets/yinfu2.png'
  97. import yf3 from '@/assets/yinfu3.png'
  98. import yf4 from '@/assets/yinfu4.png'
  99. import xian from '@/assets/huxian.png'
  100. import sl from '@/assets/xiaosenlin.png'
  101. import jx from '@/assets/juxing.png'
  102. import quan from '@/assets/quan.png'
  103. import bl from '@/assets/bolang.png'
  104. import down from '@/assets/down.png'
  105. import dialog from '@/assets/dialog.png'
  106. import lq from '@/assets/lq.png'
  107. import qrCode from '@/assets/qrCode.jpg'
  108. import line1 from '@/assets/line4.png'
  109. import line2 from '@/assets/line5.png'
  110. import line3 from '@/assets/line6.png'
  111. import line4 from '@/assets/line7.png'
  112. import line5 from '@/assets/line8.png'
  113. import line6 from '@/assets/line9.png'
  114. import line7 from '@/assets/line1.png'
  115. import line8 from '@/assets/line2.png'
  116. import line9 from '@/assets/line3.png'
  117. import { createNamespacedHelpers } from 'vuex'
  118. const { mapActions: mapAppActions } = createNamespacedHelpers('app')
  119. export default {
  120. data () {
  121. return {
  122. turntable,
  123. pointer,
  124. paper,
  125. blackStar,
  126. jt,
  127. sl,
  128. jx,
  129. tx,
  130. sy,
  131. yf1,
  132. yf2,
  133. yf3,
  134. yf4,
  135. xian,
  136. bird,
  137. quan,
  138. bl,
  139. down,
  140. dialog,
  141. qrCode,
  142. lq,
  143. line1,
  144. line2,
  145. line3,
  146. line4,
  147. line5,
  148. line6,
  149. line7,
  150. line8,
  151. line9,
  152. round: false,
  153. showDialog: false,
  154. showBtn: false,
  155. winning: '',
  156. jump: '',
  157. style: null,
  158. stylesheet: null
  159. }
  160. },
  161. props: ['prizeData', 'prizeNum', 'data', 'bg', 'activityStatus'],
  162. created () {
  163. this.init()
  164. },
  165. methods: {
  166. ...mapAppActions(['setRunState']),
  167. init () {
  168. let lineList = [this.line1, this.line2, this.line3, this.line4, this.line5, this.line6, this.line7, this.line8, this.line9]
  169. if (Math.ceil(this.data.prizeList.length / lineList.length) > 1) {
  170. let length = Math.ceil(this.data.prizeList.length / lineList.length)
  171. for (let i = 1; i < length; i++) {
  172. lineList = lineList.concat(lineList)
  173. }
  174. }
  175. let deg = 360 / this.data.prizeList.length
  176. let rule = ''
  177. for (let i = 0; i < this.data.prizeList.length; i++) {
  178. this.data.prizeList[i].class = 'prize' + i
  179. this.data.prizeList[i].font = 'font' + i
  180. this.data.prizeList[i].img = lineList[i]
  181. console.log(deg * (i + 1))
  182. rule += `.prize${i}{transform: rotate(${deg * (i + 1)}deg);transform-origin:0 0;} .font${i}{transform: rotate(${(deg / 3)}deg);transform-origin:0 0;}`
  183. }
  184. let style = document.createElement('style')
  185. style.type = 'text/css'
  186. style.innerHTML = rule
  187. document.getElementsByTagName('head')[0].appendChild(style)
  188. },
  189. start () {
  190. if (this.stylesheet) {
  191. document.getElementsByTagName('head')[0].removeChild(this.stylesheet)
  192. }
  193. setTimeout(() => {
  194. let dynamicValue = -3690
  195. dynamicValue -= ((360 / this.data.prizeList.length * (this.prizeNum + 1)) + 360 / this.data.prizeList.length / 2)
  196. let rule = `@keyframes round {0% {transform: rotate(0deg);}100% {transform: rotate(${dynamicValue}deg);}}`
  197. let style = document.createElement('style')
  198. style.type = 'text/css'
  199. style.innerHTML = rule
  200. document.getElementsByTagName('head')[0].appendChild(style)
  201. this.stylesheet = style
  202. this.round = true
  203. }, 50)
  204. this.winning = this.prizeData.prize.PrizeName
  205. this.showBtn = this.prizeData.detail.Url ? 1 : 0
  206. this.jump = this.prizeData.detail.Url
  207. setTimeout(() => {
  208. this.showDialog = true
  209. this.setRunState(2)
  210. }, 10000)
  211. },
  212. get () {
  213. console.log('去领取')
  214. window.location.href = `${window.location.origin}/wechat/user.html#/receiveShared${this.jump}?isAuto=auto`
  215. },
  216. close (data) {
  217. this.showDialog = false
  218. },
  219. run () {
  220. this.$emit('run')
  221. }
  222. },
  223. watch: {
  224. prizeData: {
  225. handler (cur, old) {
  226. console.log(cur)
  227. this.start()
  228. },
  229. immediate: false,
  230. deep: false
  231. }
  232. }
  233. }
  234. </script>