<!-- * @Description: * @Author: 欧阳承珺 * @LastEditors: 欧阳承珺 * @Date: 2022-11-01 14:10:22 * @LastEditTime: 2022-11-14 10:27:40 --> <template> <div> <div v-show="orderStatus !== 'success'"> <p class="text-18px text-[#666] text-center font-400">购买券</p> <div class="py-27px"> <div class="flex justify-between"> <div v-for="(item,idx) in list" :key="idx" class="w-116px h-130px relative cursor-pointer" @click="chooseTicket(item)"> <div :class="`ticket${idx}`" class="w-full h-79px text-14px text-[#fff] leading-79px text-center font-200"><span class="text-36px mr-6px">{{getTickets(item)}}</span>券</div> <div :style="{'border': choosedTicket.productCode === item.productCode ? border[`border${idx}`] : '1px solid #f0f0f0'}" class="w-full mx-auto h-49px text-20px text-black leading-49px text-center font-200">¥{{item.price}}</div> </div> </div> </div> <div class="py-27px"> <p class="text-16px text-[#999] mb-14px">选择支付方式</p> <div class="pay-method" :style="{'border': paymethod === 'alipay' ? '2px solid #3fa9e7' : '1px solid #f0f0f0'}" @click="choosePayMethod('alipay',0)"> <img class="inline-block" src="http://cn-file.17pdf.com/website/pricings/alipay_logo.png"> 支付宝 </div> <div class="pay-method" :style="{'border': paymethod === 'wechat' ? '2px solid #4bcb70' : '1px solid #f0f0f0'}" @click="choosePayMethod('wechat',1)"> <img class="inline-block" src="http://cn-file.17pdf.com/website/pricings/wechat_logo.png"> 微信 </div> </div> <button v-if="paymethod === 'alipay'" class="play-now" style="margin-left: 68px" @click="handlePlayNow">立即支付</button> <div v-else class="text-center"> <div v-if="count <= 0"> <div> <p class="text-18px mb-15px">二维码过期,请刷新</p> <el-button @click="handleFreshWechetCode">刷新</el-button> </div> </div> <div v-else> <client-only> <vue-qr :size="176" :text="qrcode"></vue-qr> </client-only> <p class="text-[#666] text-18px leading-20px">扫一扫 即可支付</p> </div> </div> </div> <div v-show="orderStatus === 'success'"> <div class="pay-tittle"> <p>支付成功</p> </div> <div class="pay-content"> <img src="http://cn-file.17pdf.com/website/pricings/check.png" /> <span>嘿嘿嘿...尽情享受您的特权吧</span> </div> </div> </div> </template> <script> export default { data() { return { list: [], choosedTicket: {}, paymethod: '', border: { border0: '2px solid #9688ff', border1: '2px solid #27d6c5', border2: '2px solid #e1b973', border3: '2px solid #ff6a98' }, qrcode: '', count: 60, orderStatus: false, interval: '' } }, created() { this.getVipList() }, methods: { resetInterfaceStatus() { }, chooseTicket(item) { this.choosedTicket = item }, handleFreshWechetCode() { this.count = 60 this.choosePayMethod('wechat') }, getTickets(item) { return item.productCode.split('.')[1] }, getVipList() { this.$axios.post('pricing/list',{client: 'web',language: 'zh'}).then((res)=> { if(res.code === 200) { this.list = res.result.pricingList.filter(item => item.mode !== 1) // 加云的不展示 this.choosedTicket = this.list[this.list.length - 1] this.paymethod = 'alipay' } }) }, choosePayMethod(type,payment) { this.interval = null clearInterval(this.interval) this.paymethod = type if(type === 'wechat') { const params = { client: 'web', payment, targetType: 'Pricing', targetId: this.choosedTicket.id } this.$axios.post('subscription/create',params).then((res) => { if(res.code === 200) { this.qrcode = res.result.order.qrcodeUrl this.getWechatPayStatus(res.result.order.id) } }) } }, getWechatPayStatus(id) { this.interval = setInterval(() => { if(this.count > 0) { this.$axios.get(`order/getWxOrder?orderId=${id}`).then((res)=>{ this.orderStatus = res?.result?.statusName if(this.orderStatus === 'success') { this.count = 0 setTimeout(() => { this.$emit('close') // 更新个人信息 this.getUserInfo() }, 1000); }else { this.count-- } }) } }, 2000); if(this.count === 0) { this.$once('hook:beforeDestroy',()=> { clearInterval(this.interval) this.interval = null }) } }, handlePlayNow() { const params = { client: 'web', payment: 0, targetType: 'Pricing', targetId: this.choosedTicket.id } this.$axios.post('subscription/create',params).then((res) => { if(res.code === 200) { location.href = res.result.order.pagePayUrl } }) }, getUserInfo() { this.$axios.get('members/getMemberInfo').then((res)=> { if(res.code === 200) { this.$store.commit('setUser',res.result) localStorage.setItem('userInfo',JSON.stringify(res.result)) this.$router.push('/members/me/expenses') } }) }, } } </script> <style lang="scss"> .ticket0 { background: linear-gradient(#b98dff, #7384ff); } .ticket1 { background: linear-gradient(#60b8ff, #27d6c5); } .ticket2 { background: linear-gradient(#ff8e4a, #e1b973); } .ticket3 { background: linear-gradient(#ff8279, #ff6a98); } </style>