drawCard_last.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869
  1. <template style="background-color: red">
  2. <div
  3. style="
  4. height: 100vh;
  5. background: linear-gradient(216deg, #fe854c 0%, #ff9a5a 100%);
  6. box-sizing: border-box;
  7. overflow: scroll;
  8. "
  9. >
  10. <div
  11. class="first2"
  12. :style="{
  13. background: 'url(https://file.rongcyl.cn/festatic/bkm/first2/bg.png)',
  14. height: 'calc(100vh - 160rpx)',
  15. 'background-repeat': 'no-repeat',
  16. 'background-position': 'center center',
  17. 'background-size': '100% 100%',
  18. 'padding-top': safeAreaTop,
  19. 'box-sizing': 'border-box',
  20. overflow: 'scroll',
  21. 'padding-bottom': '160rpx',
  22. }"
  23. >
  24. <div class="text-white bold text-center mt-2">FIRST赏详情</div>
  25. <div class="card relative">
  26. <div class="flex pt-3 px-3">
  27. <image :src="detail.prizeIcon" style="width: 168rpx; height: 169rpx; border-radius: 8px" mode="aspectFill" />
  28. <div class="flex-1 pl-2">
  29. <div class="" style="font-weight: 900">{{ detail.name }}</div>
  30. <div class="flex justify-between">
  31. <div>
  32. <span class="bold" style="color: #ff2c43; font-size: 24rpx">¥</span>
  33. <span class="bold" style="color: #ff2c43; font-size: 38rpx">
  34. {{ ('' + detail.price).split('.')[0] }}
  35. </span>
  36. <span class="bold" style="color: #ff2c43; font-size: 28rpx">
  37. .{{ ('' + detail.price).split('.')[1] }}
  38. </span>
  39. <span style="color: #4e504f; font-size: 14px">/张明信片</span>
  40. </div>
  41. <div class="pt-2">
  42. <img
  43. @click="$navigateTo('/pages/rule/rule', { type: 5 })"
  44. src="https://fudaanfang.oss-cn-hangzhou.aliyuncs.com/festatic/bkm/first2/rule.png"
  45. style="width: 134rpx; height: 48rpx"
  46. />
  47. </div>
  48. </div>
  49. <div class="flex justify-between" style="margin-top: 5px">
  50. <div>
  51. <img
  52. src="https://fudaanfang.oss-cn-hangzhou.aliyuncs.com/festatic/bkm/item.png"
  53. style="width: 40rpx; height: 40rpx; border-radius: 50%; display: inline-block; border: 1px solid #fff"
  54. />
  55. <img
  56. src="https://fudaanfang.oss-cn-hangzhou.aliyuncs.com/festatic/bkm/item.png"
  57. class="relative right-2"
  58. style="width: 40rpx; height: 40rpx; border-radius: 50%; display: inline-block; border: 1px solid #fff"
  59. />
  60. <img
  61. src="https://fudaanfang.oss-cn-hangzhou.aliyuncs.com/festatic/bkm/item.png"
  62. class="relative right-4"
  63. style="width: 40rpx; height: 40rpx; border-radius: 50%; display: inline-block; border: 1px solid #fff"
  64. />
  65. <img
  66. src="https://fudaanfang.oss-cn-hangzhou.aliyuncs.com/festatic/bkm/item.png"
  67. class="relative right-6"
  68. style="width: 40rpx; height: 40rpx; border-radius: 50%; display: inline-block; border: 1px solid #fff"
  69. />
  70. <img
  71. src="https://fudaanfang.oss-cn-hangzhou.aliyuncs.com/festatic/bkm/item.png"
  72. class="relative right-8"
  73. style="width: 40rpx; height: 40rpx; border-radius: 50%; display: inline-block; border: 1px solid #fff"
  74. />
  75. </div>
  76. <div class="flex items-center">
  77. <img
  78. src="https://fudaanfang.oss-cn-hangzhou.aliyuncs.com/festatic/bkm/first2/hot.png"
  79. class="relative right-2"
  80. style="width: 32rpx; height: 32rpx; display: inline-block"
  81. />
  82. <span style="color: #fc5b20" class="fs11">{{ detail.hotNum }}</span>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <div
  88. class="absolute left-0 right-0 bottom-6 mx-auto"
  89. style="
  90. width: 670rpx;
  91. height: 128rpx;
  92. background: url(https://fudaanfang.oss-cn-hangzhou.aliyuncs.com/festatic/bkm/first2/notice_c.png) no-repeat
  93. center center;
  94. background-size: cover;
  95. "
  96. >
  97. <view
  98. class="absolute top-1 left-2"
  99. style="width: 106rpx; height: 28rpx; font-size: 12px; font-weight: 600; color: #ffff00"
  100. >
  101. {{ lockData.userId ? '锁箱中' : '' }}
  102. </view>
  103. <div class="text-white fs12 mt-5 px-2 pt-1 lockBox">
  104. <view class="text" v-if="!lockData.userId">本福袋连续购买10发,即开启保护机制</view>
  105. <view class="info" v-else>
  106. <image class="photo" :src="lockData.userAvtar" mode="aspectFill"></image>
  107. <view class="right">
  108. <view class="row">
  109. <view class="name">{{ lockData.userName }}</view>
  110. <view class="tip">目前已开启自动保护机制</view>
  111. </view>
  112. <view class="row">
  113. 保护倒计时:
  114. <span v-if="lockHour != '00'">
  115. <span class="time">{{ lockHour }}</span>
  116. :
  117. </span>
  118. <span>
  119. <span class="time">{{ lockMin }}</span>
  120. :
  121. </span>
  122. <span>
  123. <span class="time">{{ lockSecond }}</span>
  124. </span>
  125. </view>
  126. </view>
  127. </view>
  128. </div>
  129. </div>
  130. <div
  131. class="absolute left-0 right-0 bottom-1 mx-auto"
  132. style="
  133. width: 690rpx;
  134. height: 12px;
  135. background: #4f5150;
  136. box-shadow: inset 0px 4px 4px 0px rgba(0, 0, 0, 0.8);
  137. border-radius: 22px 22px 22px 22px;
  138. opacity: 1;
  139. "
  140. >
  141. <div
  142. class="absolute top-1 mx-auto"
  143. style="
  144. left: 10rpx;
  145. right: 10rpx;
  146. width: 670rpx;
  147. min-height: 890rpx;
  148. background: linear-gradient(180deg, #ccd3d9 0%, #ffffff 5%);
  149. border-radius: 0px 0px 0px 0px;
  150. opacity: 1;
  151. "
  152. >
  153. <div class="flex justify-around" style="margin: 10px 0">
  154. <img
  155. src="https://file.rongcyl.cn/festatic/bkm/first2/tab1.png"
  156. v-if="tabIndex !== 1"
  157. @click="tabIndex = 1"
  158. style="width: 126rpx; height: 32rpx"
  159. />
  160. <img
  161. v-if="tabIndex == 1"
  162. src="https://file.rongcyl.cn/festatic/bkm/first2/tab1a.png"
  163. @click="tabIndex = 1"
  164. style="width: 126rpx; height: 32rpx"
  165. />
  166. <img
  167. v-if="tabIndex !== 2"
  168. src="https://file.rongcyl.cn/festatic/bkm/first2/tab2.png"
  169. @click="tabIndex = 2"
  170. style="width: 126rpx; height: 32rpx"
  171. />
  172. <img
  173. v-if="tabIndex == 2"
  174. src="https://file.rongcyl.cn/festatic/bkm/first2/tab2a.png"
  175. @click="tabIndex = 2"
  176. style="width: 126rpx; height: 32rpx"
  177. />
  178. <img
  179. v-if="tabIndex != 3"
  180. src="https://file.rongcyl.cn/festatic/bkm/first2/tab3.png"
  181. @click="tabIndex = 3"
  182. style="width: 126rpx; height: 32rpx"
  183. />
  184. <img
  185. v-if="tabIndex == 3"
  186. src="https://file.rongcyl.cn/festatic/bkm/first2/tab3a.png"
  187. @click="tabIndex = 3"
  188. style="width: 126rpx; height: 32rpx"
  189. />
  190. </div>
  191. <div class="cardList list" style="padding: 10rpx 16rpx 20rpx 16rpx" v-if="tabIndex == 1">
  192. <div
  193. :class="['flex', 'items-center', 'justify-center', item.status == 0 ? 'c1' : 'c2']"
  194. v-for="(item, index) in cardList"
  195. @click="clickCard(item)"
  196. >
  197. <numImg v-if="item.status == 0" class="num" :value="item" :type="2" />
  198. <img
  199. v-if="item.status == 2"
  200. src="https://file.rongcyl.cn/festatic/bkm/first2/gift_a.png"
  201. style="width: 60rpx; height: 72rpx"
  202. />
  203. <img
  204. v-if="item.status == 1"
  205. src="https://file.rongcyl.cn/festatic/bkm/first2/lock.png"
  206. style="width: 60rpx; height: 60rpx"
  207. />
  208. <image
  209. v-if="item.check"
  210. class="checkBk"
  211. src="https://file.rongcyl.cn/festatic/bkm/imgv2/first/cardCheck.png"
  212. mode="widthFix"
  213. ></image>
  214. </div>
  215. </div>
  216. <div class="list pt-4" style="position: relative" v-if="tabIndex == 2">
  217. <div v-for="(item, index) in prizeList" :key="index">
  218. <div class="titleTip">概率:{{ item.probability }}%(此概率为当前赏级概率)</div>
  219. <Title :title="$selectDictLabel(rewardType, item.type).split('赏')[0]" />
  220. <div class="flex pl-3 pt-3 mb-3" style="background-color: #f6f0e9">
  221. <div
  222. v-for="(item2, index2) in item.prizeList"
  223. @click="showImg(item2)"
  224. :class="['mr-2', item2.leftNum == 0 ? 'grey' : '']"
  225. style="width: 168rpx; background-color: #f9f6f2; border-radius: 4px; margin-bottom: 10px"
  226. >
  227. <image
  228. :src="item2.icon"
  229. mode="aspectFill"
  230. style="width: 144rpx; height: 144rpx; border-radius: 5px; margin: auto"
  231. />
  232. <div class="fs13 pl-2 prizeName">{{ item2.name }}</div>
  233. <div style="color: #ea6636" class="pl-2">
  234. <span class="fs11">参考价</span>
  235. <span class="fs14 bold">{{ detail.price }}</span>
  236. </div>
  237. </div>
  238. </div>
  239. </div>
  240. </div>
  241. <div class="list winningRecord" style="padding: 20rpx 0" v-if="tabIndex == 3">
  242. <view class="winningRecordCard" v-for="(item, index) in winningRecordList" :key="index">
  243. <image class="photo" :src="item.userAvtar" mode="aspectFill"></image>
  244. <view style="flex: 1">
  245. <view class="row">
  246. <view class="left">
  247. <span class="name">{{ item.userName }}</span>
  248. </view>
  249. <view class="right text1">
  250. <span>{{ item.creatTime }}</span>
  251. </view>
  252. </view>
  253. <view class="row" style="margin-top: 10px">
  254. <view class="left">
  255. <image class="img" :src="item.prizeIcon" mode="aspectFill"></image>
  256. </view>
  257. <view class="right" style="font-size: 14px">
  258. <view class="name">{{ item.prizeName }}</view>
  259. <view class="row">
  260. <view class="type">{{ $selectDictLabel(rewardType, item.prizeType) }} × 1</view>
  261. <span style="font-size: 12px">No.{{ item.id }}</span>
  262. </view>
  263. </view>
  264. </view>
  265. </view>
  266. </view>
  267. </div>
  268. <img
  269. src="https://file.rongcyl.cn/festatic/bkm/first2/dots.png"
  270. class="absolute mx-auto inline-block left-0 right-0"
  271. style="width: 612rpx; height: 24rpx; bottom: -12rpx"
  272. />
  273. </div>
  274. </div>
  275. </div>
  276. <div class="fixed right-2 bottom-20" style="height: 460rpx">
  277. <img
  278. src="https://file.rongcyl.cn/festatic/bkm/first2/fu.png"
  279. style="width: 88rpx; height: 88rpx; margin-bottom: 24rpx"
  280. />
  281. <img
  282. @click="toKnapsack"
  283. src="https://file.rongcyl.cn/festatic/bkm/first2/bag.png"
  284. style="width: 88rpx; height: 88rpx; margin-bottom: 24rpx"
  285. />
  286. <img
  287. @click="refresh"
  288. src="https://file.rongcyl.cn/festatic/bkm/first2/refresh.png"
  289. style="width: 88rpx; height: 88rpx; margin-bottom: 24rpx"
  290. />
  291. <button open-type="share" class="share_btn">
  292. <img
  293. src="https://file.rongcyl.cn/festatic/bkm/first2/share.png"
  294. style="width: 88rpx; height: 88rpx; margin-bottom: 24rpx"
  295. />
  296. </button>
  297. </div>
  298. <div class="buy items-center">
  299. <div class="pica ml-2" style="margin-top: -38rpx">
  300. <img src="https://file.rongcyl.cn/festatic/bkm/first2/pica.png" class="w-full h-full" />
  301. </div>
  302. <div class="flex-1 text-white fs12 ml12 relative bottom-3 pl-3">
  303. <span class="inline-block">已选{{ selectIndex.length }}个 合计:</span>
  304. <span class="inline-block" style="color: #ea6636">
  305. <span class="bold">¥</span>
  306. <span class="fs18 bold">{{ (selectIndex.length * detail.price).toFixed(2) }}</span>
  307. </span>
  308. </div>
  309. <img
  310. @click="submit"
  311. src="https://file.rongcyl.cn/festatic/bkm/first2/bug.png"
  312. class="b_btn relative bottom-3 right-2"
  313. />
  314. </div>
  315. </div>
  316. <paymentPopup ref="paymentPopup" @callBack="paymentSuccess" />
  317. <imgPopup ref="imgPopup" />
  318. </div>
  319. </template>
  320. <script>
  321. import imgPopup from '@/component/imgPopup.vue'
  322. import { rewardType } from '@/utils/commonConfig.js'
  323. import {
  324. prizePoolStatusApi,
  325. drawCardSubmitApi,
  326. raffleDetailApi,
  327. prizeListApi,
  328. prizeUserListApi,
  329. getLockInfoApi,
  330. } from '@/api/drawCard.js'
  331. import { cardType, formatSeconds } from '@/utils/utils.js'
  332. import numImg from '@/component/numImg.vue'
  333. import paymentPopup from '@/component/paymentPopup.vue'
  334. import Title from '@/component/title.vue'
  335. export default {
  336. data() {
  337. return {
  338. rewardType: rewardType,
  339. safeAreaTop: '0px',
  340. tabIndex: 1,
  341. params: {
  342. raffleId: '',
  343. limit: 999,
  344. page: 1,
  345. },
  346. detail: {},
  347. cardList: [],
  348. selectIndex: [],
  349. prizeList: [],
  350. winningRecordList: [],
  351. userId: wx.getStorageSync('userId'),
  352. uuid: '',
  353. socketTimer: null,
  354. lockTimeCountdown: null,
  355. lockData: null,
  356. lockTime: '',
  357. }
  358. },
  359. components: {
  360. Title,
  361. imgPopup,
  362. paymentPopup,
  363. numImg,
  364. },
  365. computed: {
  366. // 锁箱小时
  367. lockHour() {
  368. let tiem = this.lockTime * 1000
  369. let timeText = formatSeconds(tiem)
  370. timeText = timeText.split(':')[0]
  371. return timeText
  372. },
  373. // 锁箱分钟
  374. lockMin() {
  375. let tiem = this.lockTime * 1000
  376. let timeText = formatSeconds(tiem)
  377. timeText = timeText.split(':')[1]
  378. return timeText
  379. },
  380. // 锁箱秒
  381. lockSecond() {
  382. let tiem = this.lockTime * 1000
  383. let timeText = formatSeconds(tiem)
  384. timeText = timeText.split(':')[2]
  385. return timeText
  386. },
  387. },
  388. onLoad(query) {
  389. console.log(query, 'query')
  390. if (query.id) {
  391. this.params.raffleId = query.id
  392. this.init()
  393. }
  394. this.paymentSuccess()
  395. },
  396. mounted() {
  397. this.getSafeAreaTop()
  398. },
  399. methods: {
  400. init() {
  401. // 获取卡牌商品列表
  402. this.getCardList()
  403. // 获取卡包详情
  404. this.getDetail()
  405. //获取奖池
  406. this.getPrizeList()
  407. // 中奖记录
  408. this.getPrizeUserList()
  409. // 初始化锁箱
  410. this.initLock()
  411. // 连接锁箱Socket
  412. this.connectSocket()
  413. },
  414. leave() {
  415. console.log('离开页面')
  416. // 离开页面
  417. // 关闭倒计时
  418. clearInterval(this.lockTimeCountdown)
  419. // 关闭心跳测试
  420. clearInterval(this.socketTimer)
  421. // 关闭对话连接
  422. wx.closeSocket()
  423. },
  424. initLock() {
  425. // 获取锁箱信息
  426. let _this = this
  427. let params = {
  428. raffleId: this.params.raffleId,
  429. }
  430. getLockInfoApi(params).then(res => {
  431. console.log(res, '锁箱')
  432. if (res.data.userId) {
  433. _this.lockData = res.data
  434. _this.lockTime = res.data.expireTime
  435. _this.initLockTimeCountdown()
  436. } else {
  437. _this.lockData = {}
  438. _this.lockTime = ''
  439. }
  440. })
  441. },
  442. initLockTimeCountdown() {
  443. let _this = this
  444. if (_this.lockTimeCountdown) {
  445. clearInterval(_this.lockTimeCountdown)
  446. _this.lockTimeCountdown = null
  447. }
  448. _this.lockTimeCountdown = setInterval(() => {
  449. console.log('22')
  450. _this.lockTime = _this.lockTime - 1
  451. if (_this.lockTime <= 0) {
  452. clearInterval(_this.lockTimeCountdown)
  453. _this.lockTimeCountdown = null
  454. _this.initLock()
  455. }
  456. }, 1000)
  457. },
  458. connectSocket() {
  459. let _this = this
  460. let uuid = uuidv4()
  461. let url = 'wss://mall.rongtongh.cn/websocket/raffleId' + this.params.raffleId + ':' + uuid
  462. function connect() {
  463. wx.connectSocket({
  464. url: url,
  465. })
  466. wx.onSocketOpen(function (res) {
  467. console.log(res, 'WebSocket连接已打开!')
  468. // wx.sendSocketMessage({
  469. // data: JSON.stringify(user),
  470. // })
  471. _this.socketTimer = setInterval(function () {
  472. console.log('发送消息')
  473. wx.sendSocketMessage({
  474. data: '12313',
  475. })
  476. }, 30 * 1000)
  477. })
  478. wx.onSocketMessage(function (res) {
  479. console.log(data, 'WebSocket接受信息')
  480. let data = JSON.parse(res.data)
  481. if (res.data.userId) {
  482. _this.lockData = data
  483. _this.lockTime = data.expireTime
  484. _this.initLockTimeCountdown()
  485. }
  486. })
  487. wx.onSocketClose(function (res) {
  488. console.log('WebSocket连接已关闭!')
  489. setTimeout(() => {
  490. console.log('re connect')
  491. // connect()
  492. }, 2000)
  493. })
  494. }
  495. connect()
  496. },
  497. toKnapsack() {
  498. // 跳转背包界面
  499. wx.navigateTo({
  500. url: '/pages/knapsack/knapsack',
  501. })
  502. },
  503. showImg(value) {
  504. this.$refs.imgPopup.show(value)
  505. },
  506. getPrizeUserList() {
  507. let params = {
  508. limit: 9999,
  509. page: 1,
  510. raffleId: this.params.raffleId,
  511. }
  512. prizeUserListApi(params).then(res => {
  513. this.winningRecordList = res.data
  514. })
  515. },
  516. getCardList() {
  517. prizePoolStatusApi(this.params).then(res => {
  518. console.log(res, '卡牌分页')
  519. for (var i = 0; i < res.data.list.length; i++) {
  520. res.data.list[i].check = false
  521. }
  522. this.cardList = res.data.list
  523. this.selectFormat()
  524. })
  525. },
  526. // 标记已经选中卡牌
  527. selectFormat() {
  528. for (var i = 0; i < this.cardList.length; i++) {
  529. if (this.selectIndex.includes(this.cardList[i].number)) {
  530. this.cardList[i].check = true
  531. }
  532. }
  533. },
  534. getDetail() {
  535. let params = {
  536. raffleId: this.params.raffleId,
  537. }
  538. raffleDetailApi(params).then(res => {
  539. console.log(res, '详情')
  540. this.detail = res.data
  541. })
  542. },
  543. getPrizeList() {
  544. let params = {
  545. raffleId: this.params.raffleId,
  546. }
  547. prizeListApi(params).then(res => {
  548. console.log(res, '奖池预览')
  549. let newArray = res.data
  550. for (var i = 0; i < res.data.length; i++) {
  551. if (res.data[i].type == 21) {
  552. newArray = []
  553. newArray.push(res.data[i])
  554. res.data.splice(i, 1)
  555. newArray.push(...res.data)
  556. break
  557. }
  558. }
  559. this.prizeList = newArray
  560. })
  561. },
  562. // 选中取消选中卡牌
  563. clickCard(item) {
  564. if (item.status == 0) {
  565. item.check = !item.check
  566. }
  567. // 如果是选中
  568. let index = this.selectIndex.indexOf(item.number)
  569. if (item.check && index == -1) {
  570. this.selectIndex.push(item.number)
  571. } else if (!item.check && index != -1) {
  572. this.selectIndex.splice(index, 1)
  573. }
  574. },
  575. // 支付成功后回调
  576. paymentSuccess() {
  577. let _this = this
  578. console.log('刷新抽卡界面')
  579. // 刷新界面
  580. _this.refresh()
  581. },
  582. getSafeAreaTop() {
  583. wx.getSystemInfo({
  584. success: res => {
  585. this.safeAreaTop = res.safeArea.top + 'px'
  586. },
  587. })
  588. },
  589. refresh() {
  590. wx.showLoading()
  591. setTimeout(function () {
  592. wx.hideLoading()
  593. }, 1000)
  594. this.init()
  595. this.selectIndex = []
  596. for (var i = 0; i < this.cardList.length; i++) {
  597. this.cardList[i].check = false
  598. }
  599. },
  600. submit() {
  601. if (this.selectIndex.length == 0) {
  602. wx.showToast({
  603. title: '请选则要购买的卡牌。',
  604. icon: 'none',
  605. })
  606. return
  607. }
  608. let params = {
  609. raffleId: this.params.raffleId,
  610. }
  611. this.$refs.paymentPopup.show(params, this.selectIndex, this.detail)
  612. },
  613. },
  614. }
  615. </script>
  616. <style scoped lang="scss">
  617. .first2 {
  618. padding-top: v-bind(safeAreaBottom);
  619. color: v-bind(color);
  620. .card {
  621. width: 710rpx;
  622. margin: auto;
  623. background-color: #fff;
  624. border-radius: 10px;
  625. height: 400rpx;
  626. margin-top: 18px;
  627. }
  628. .c1 {
  629. background-image: url(https://file.rongcyl.cn/festatic/bkm/imgv2/ka/kabk2.png);
  630. // width: 96rpx;
  631. height: 128rpx;
  632. background-repeat: no-repeat;
  633. background-position: center center;
  634. background-size: contain;
  635. margin-bottom: 14rpx;
  636. position: relative;
  637. .checkBk {
  638. position: absolute;
  639. width: 105%;
  640. }
  641. }
  642. .c2 {
  643. background-image: url(https://file.rongcyl.cn/festatic/bkm/imgv2/ka/kabk4.png);
  644. // width: 96rpx;
  645. height: 128rpx;
  646. background-repeat: no-repeat;
  647. background-position: center center;
  648. background-size: contain;
  649. margin-bottom: 14rpx;
  650. }
  651. .buy {
  652. position: fixed;
  653. left: 0;
  654. right: 0;
  655. bottom: 0;
  656. width: 750rpx;
  657. height: 160rpx;
  658. background: #000000;
  659. opacity: 1;
  660. display: flex;
  661. .pica {
  662. width: 88rpx;
  663. height: 88rpx;
  664. }
  665. .b_btn {
  666. width: 232rpx;
  667. height: 76rpx;
  668. }
  669. }
  670. }
  671. .cardList {
  672. display: grid;
  673. grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
  674. }
  675. .list {
  676. // height: calc(100% - 32rpx - 20px - 20px);
  677. // overflow: auto;
  678. }
  679. .prizeName {
  680. width: 100%;
  681. white-space: nowrap;
  682. text-overflow: ellipsis;
  683. }
  684. .titleTip {
  685. position: absolute;
  686. z-index: 2;
  687. height: 32px;
  688. line-height: 42px;
  689. padding-left: 25vw;
  690. font-size: 12px;
  691. color: #fff;
  692. }
  693. .winningRecord {
  694. .winningRecordCard {
  695. margin-top: 10px;
  696. border-radius: 8px;
  697. background: #f7f0e8;
  698. padding: 10px;
  699. display: flex;
  700. // box-shadow: 1px 1px 3px #b7b7b7;
  701. .photo {
  702. // flex: 1;
  703. margin-right: 8px;
  704. width: 10vw;
  705. height: 10vw;
  706. border-radius: 50%;
  707. }
  708. .row {
  709. display: flex;
  710. justify-content: space-between;
  711. align-items: center;
  712. .left {
  713. display: flex;
  714. align-items: center;
  715. .name {
  716. font-size: 14px;
  717. font-weight: 600;
  718. }
  719. .img {
  720. width: 15vw;
  721. height: 15vw;
  722. border-radius: 2px;
  723. margin-right: 5px;
  724. }
  725. }
  726. .right {
  727. flex: 1;
  728. .name {
  729. font-size: 14px;
  730. height: 10vw;
  731. overflow: hidden;
  732. text-overflow: ellipsis;
  733. display: -webkit-box;
  734. -webkit-box-orient: vertical;
  735. -webkit-line-clamp: 2;
  736. }
  737. }
  738. .type {
  739. padding: 0 2px;
  740. background: #fc5b20;
  741. color: #fff;
  742. font-size: 11px;
  743. border-radius: 2px;
  744. }
  745. .text1 {
  746. color: #666666;
  747. font-size: 12px;
  748. }
  749. }
  750. }
  751. }
  752. .share_btn {
  753. background-color: transparent;
  754. border-width: 0 !important;
  755. border-radius: 0;
  756. overflow: initial;
  757. text-align: start;
  758. padding: 0;
  759. box-shadow: none !important;
  760. -webkit-tap-highlight-color: transparent;
  761. &::after {
  762. border: none;
  763. }
  764. }
  765. .lockBox {
  766. display: flex;
  767. justify-content: center;
  768. align-items: center;
  769. .text {
  770. color: #fff;
  771. font-weight: 600;
  772. font-size: 14px;
  773. }
  774. .info {
  775. display: flex;
  776. width: 100%;
  777. justify-content: center;
  778. .photo {
  779. width: 9vw;
  780. height: 9vw;
  781. border-radius: 50%;
  782. }
  783. .right {
  784. margin-left: 10px;
  785. flex: 1;
  786. display: flex;
  787. flex-direction: column;
  788. align-items: center;
  789. justify-content: center;
  790. .row {
  791. width: 100%;
  792. color: #fff;
  793. font-size: 12px;
  794. margin-bottom: 2px;
  795. position: relative;
  796. display: flex;
  797. align-items: center;
  798. .time {
  799. padding: 2px;
  800. color: #565656;
  801. background: #ffff00;
  802. margin: 0 8px;
  803. border-radius: 5px;
  804. font-weight: 600;
  805. font-size: 12px;
  806. }
  807. .name {
  808. font-size: 13px;
  809. font-weight: 600;
  810. color: #fff;
  811. width: 40%;
  812. white-space: nowrap;
  813. text-overflow: ellipsis;
  814. overflow: hidden;
  815. }
  816. .tip {
  817. font-size: 11px;
  818. position: absolute;
  819. right: 0;
  820. font-weight: 500;
  821. color: #fff;
  822. }
  823. }
  824. }
  825. }
  826. }
  827. </style>