微信

index.vue 9.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <template>
  2. <div class="bg mainPage">
  3. <img class="bg-img" :src="bg" alt="" width="100%">
  4. <transition name="fade">
  5. <div class="dialog" v-if="showDialog" @click="close">
  6. <div class="box" @click.stop='stop'>
  7. <img class='dialog-bg' @click.stop="close" :src="dialog" alt="">
  8. <div class='dialog-title'>恭喜你!<span>成功获得</span></div>
  9. <div class="dialog-name">{{winning}}</div>
  10. <img class="qrCode" :src="qrCode" alt="">
  11. <div v-if="showBtn" @click="get">
  12. <img class="lq" :src="lq" alt="">
  13. </div>
  14. <div v-else @click="get">
  15. <img class="lq" :src="lq" alt="">
  16. </div>
  17. <div class="desc">长按二维码“城的空间”,进入会员中心查看奖品吧</div>
  18. </div>
  19. </div>
  20. </transition>
  21. <div class="turntable">
  22. <div :class='{ "round": round }' class="turntable-body">
  23. <div v-for='(item, index) in data.prizeList' :key='index' :class='item.class'>
  24. <img :src="item.img" alt="">
  25. <span :class='item.font'>{{item.PrizeName}}</span>
  26. </div>
  27. <img :src="turntable" alt="" width="100%" height="100%">
  28. </div>
  29. <img class="pointer" @click="run" :src="pointer" alt="">
  30. <img class="down" :src="down" alt="">
  31. <img class="yf1" :src="yf1" alt="">
  32. <img class="yf2" :src="yf2" alt="">
  33. <img class="yf3" :src="yf3" alt="">
  34. <img class="yf4" :src="yf4" alt="">
  35. <img class="yf5" :src="yf3" alt="">
  36. <img class="yf6" :src="yf4" alt="">
  37. <img class="hx" :src="blackStar" alt="">
  38. <img class="hux" :src="xian" alt="">
  39. <img class="sl" :src="sl" alt="">
  40. <img class="sl2" :src="sl" alt="">
  41. <img class="jx" :src="jx" alt="">
  42. </div>
  43. <div class="paper">
  44. <img :src="paper" alt="" width="100%">
  45. <div class="winningList">
  46. <div class="title">
  47. <img :src="blackStar" alt="">
  48. <span>中奖名单</span>
  49. <img :src="jt" alt="">
  50. </div>
  51. <div class="list">
  52. <div v-for='(item, index) in data.list' :key='index'>
  53. <img :src="item.UserHeadImg" alt="">
  54. <span>{{item.PrizeName}}</span>
  55. <span>{{item.UserName}}</span>
  56. </div>
  57. </div>
  58. </div>
  59. <div class="rule">
  60. <div class="title">
  61. <img :src="sy" alt="">
  62. <span>活动规则</span>
  63. <img :src="jt" alt="">
  64. </div>
  65. <div class="content">
  66. <pre style="white-space:pre-line; text-align: left;">{{data.prize.LuckdrawRule}}</pre>
  67. <!-- <div class="mb">抽奖活动</div>
  68. <div v-for="(item,index) in data.prizeList" :key='index'>
  69. <span>{{item.PrizeName}}</span>
  70. <span>{{item.Probability}}%几率</span>
  71. </div>
  72. <div class="mb mt">抽奖方式:通过分享链接,点击立即抽奖按钮,每个活动每人仅可参加一次</div>
  73. <div class="mb">领取方式:线下出示奖品二维码即可扫码核销</div>
  74. <div>领取地点:悦见山G99</div> -->
  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 wxsdk from '@/util/share'
  88. import logo from '@/assets/indexlogo.jpg'
  89. import bg from '@/assets/bg.png'
  90. import turntable from '@/assets/zhuanpan.png'
  91. import pointer from '@/assets/zhizhen.png'
  92. import paper from '@/assets/zhi.png'
  93. import blackStar from '@/assets/heixing.png'
  94. import jt from '@/assets/jiantou.png'
  95. import tx from '@/assets/touxiang.png'
  96. import sy from '@/assets/shuangyuan.png'
  97. import bird from '@/assets/xiaoniao.png'
  98. import yf1 from '@/assets/yinfu1.png'
  99. import yf2 from '@/assets/yinfu2.png'
  100. import yf3 from '@/assets/yinfu3.png'
  101. import yf4 from '@/assets/yinfu4.png'
  102. import xian from '@/assets/huxian.png'
  103. import sl from '@/assets/xiaosenlin.png'
  104. import jx from '@/assets/juxing.png'
  105. import quan from '@/assets/quan.png'
  106. import bl from '@/assets/bolang.png'
  107. import down from '@/assets/down.png'
  108. import dialog from '@/assets/dialog.png'
  109. import lq from '@/assets/lq.png'
  110. import qrCode from '@/assets/qrCode.jpg'
  111. import line1 from '@/assets/line4.png'
  112. import line2 from '@/assets/line5.png'
  113. import line3 from '@/assets/line6.png'
  114. import line4 from '@/assets/line7.png'
  115. import line5 from '@/assets/line8.png'
  116. import line6 from '@/assets/line9.png'
  117. import line7 from '@/assets/line1.png'
  118. import line8 from '@/assets/line2.png'
  119. import line9 from '@/assets/line3.png'
  120. import { mapState, createNamespacedHelpers } from 'vuex'
  121. const { mapActions: mapAppActions } = createNamespacedHelpers('app')
  122. export default {
  123. data () {
  124. return {
  125. bg,
  126. turntable,
  127. pointer,
  128. paper,
  129. blackStar,
  130. jt,
  131. sl,
  132. jx,
  133. tx,
  134. sy,
  135. yf1,
  136. yf2,
  137. yf3,
  138. yf4,
  139. xian,
  140. bird,
  141. quan,
  142. bl,
  143. down,
  144. dialog,
  145. qrCode,
  146. lq,
  147. line1,
  148. line2,
  149. line3,
  150. line4,
  151. line5,
  152. line6,
  153. line7,
  154. line8,
  155. line9,
  156. logo,
  157. isRun: false,
  158. round: false,
  159. showDialog: false,
  160. data: {
  161. userInfo: {},
  162. prize: {},
  163. prizeList: [],
  164. list: []
  165. },
  166. winning: '',
  167. showBtn: false,
  168. jump: ''
  169. }
  170. },
  171. created () {
  172. this.data.userInfo = JSON.parse(localStorage.getItem('userInfo'))
  173. this.getData()
  174. },
  175. computed: {
  176. ...mapState({
  177. userInfo: x => x.app.userInfo,
  178. prize: x => x.app.prize,
  179. list: x => x.app.record,
  180. lotteryId: x => x.app.lotteryId
  181. })
  182. },
  183. methods: {
  184. ...mapAppActions(['getUserInfo', 'getPrize', 'setPrize', 'getRecord']),
  185. getData () {
  186. if (this.data.userInfo.record) {
  187. this.winning = this.data.userInfo.record.PrizeName
  188. this.showDialog = true
  189. if (this.data.userInfo.detail) {
  190. if (this.data.userInfo.detail.Url) {
  191. this.showBtn = 1
  192. this.jump = this.data.userInfo.detail.Url
  193. }
  194. }
  195. }
  196. this.getPrize({ id: this.lotteryId }).then((res) => {
  197. this.data.prize = this.prize
  198. this.data.prizeList = this.data.prize.Prizes
  199. this.init()
  200. })
  201. this.getRecord({ id: this.lotteryId }).then((res) => {
  202. if (this.list.length >= 10) {
  203. this.data.list = this.list.slice(0, 10)
  204. } else {
  205. this.data.list = this.list
  206. }
  207. })
  208. wxsdk({ url: encodeURIComponent(window.location.href.split('#')[0]) }, {
  209. title: '城的空间抽奖',
  210. desc: '抽奖小游戏',
  211. link: window.location.href.split('?')[0],
  212. thu_image: this.logo
  213. })
  214. },
  215. init () {
  216. let lineList = [this.line1, this.line2, this.line3, this.line4, this.line5, this.line6, this.line7, this.line8, this.line9]
  217. if (Math.ceil(this.data.prizeList.length / lineList.length) > 1) {
  218. let length = Math.ceil(this.data.prizeList.length / lineList.length)
  219. for (let i = 1; i < length; i++) {
  220. lineList = lineList.concat(lineList)
  221. }
  222. }
  223. let deg = 360 / this.data.prizeList.length
  224. let rule = ''
  225. for (let i = 0; i < this.data.prizeList.length; i++) {
  226. this.data.prizeList[i].class = 'prize' + i
  227. this.data.prizeList[i].font = 'font' + i
  228. this.data.prizeList[i].img = lineList[i]
  229. console.log(deg * (i + 1))
  230. rule += `.prize${i}{transform: rotate(${deg * (i + 1)}deg);transform-origin:0 0;} .font${i}{transform: rotate(${(deg / 2)}deg);transform-origin:0 0;}`
  231. }
  232. let style = document.createElement('style')
  233. style.type = 'text/css'
  234. style.innerHTML = rule
  235. document.getElementsByTagName('head')[0].appendChild(style)
  236. this.stylesheet = document.styleSheets[document.styleSheets.length - 1]
  237. },
  238. start () {
  239. return new Promise((resolve, reject) => {
  240. if (this.isRun) {
  241. } else {
  242. this.isRun = true
  243. let dynamicValue = -3690
  244. this.setPrize({ id: this.lotteryId, openId: this.data.userInfo.user.OpenId }).then((res) => {
  245. for (let i = 0; i < this.data.prizeList.length; i++) {
  246. if (this.data.prizeList[i].Id === res.prize.Id) {
  247. dynamicValue -= ((360 / this.data.prizeList.length * (i + 1)) + 360 / this.data.prizeList.length / 2)
  248. }
  249. }
  250. let rule = `@keyframes round {0% {transform: rotate(0deg);}100% {transform: rotate(${dynamicValue}deg);}}`
  251. let style = document.createElement('style')
  252. style.type = 'text/css'
  253. style.innerHTML = rule
  254. document.getElementsByTagName('head')[0].appendChild(style)
  255. this.stylesheet = document.styleSheets[document.styleSheets.length - 1]
  256. this.round = true
  257. resolve(res)
  258. })
  259. }
  260. })
  261. },
  262. get () {
  263. console.log('去领取')
  264. window.location.href = this.jump
  265. },
  266. close (data) {
  267. this.showDialog = false
  268. },
  269. run () {
  270. this.start().then((res) => {
  271. this.winning = res.prize.PrizeName
  272. this.showBtn = res.detail.Url ? 1 : 0
  273. this.jump = res.detail.Url
  274. setTimeout(() => {
  275. this.showDialog = true
  276. }, 10000)
  277. })
  278. },
  279. stop () {
  280. console.log('stop')
  281. }
  282. }
  283. }
  284. </script>
  285. <style lang="scss" scoped>
  286. @font-face {
  287. font-family: myFont;
  288. src: url("../../assets/hkhb.ttf");
  289. }
  290. @import "page.scss";
  291. </style>