jxg/jinxiangguo-home-master/components/popup-mycoin/popup-mycoin.vue

329 lines
8.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view>
<touch-popup ref="popup" background="#FFFDE8" :backShow="true">
<view style="width: 100%;height: 15px;"></view>
<scroll-view scroll-y>
<view class="content">
<view class="center">
您收藏的
</view>
<block v-if="coinList.length > 0">
<view class="center coin-title">
硬币名称:{{coinList[curSwiperIndex].name}}
</view>
<view class="center" style="font-size: 14px;font-weight: 400;">
ID{{coinList[curSwiperIndex].id}}
</view>
<!-- 硬币swiper -->
<z-swiper ref="zSwiper" v-model="coinList" style="padding-top: 15px;height: 180px;" @swiper="swiperCoin" :options="{slidesPerView : 2,centeredSlides : true, effect: 'coverflow'}">
<z-swiper-item v-for="(item,index) in coinList" key="coin1">
<view class="coin-item">
<image :src="item.img" mode="heightFix"></image>
</view>
</z-swiper-item>
</z-swiper>
<!-- 产出地址 -->
<view class="center coin-address">
<view class="">
产出地址
</view>
<view class="">
{{coinList[curSwiperIndex].address}}
</view>
</view>
<!-- 我的收藏 -->
<view class="collect">
<view class="collect-text">
我的收藏
</view>
<scroll-view scroll-y style="height: 165px;">
<view class="mycoin-list">
<view v-for="(item,index) in coinList" key="coin2" class="center"
style="flex-direction: column;">
<view class="mycoin-warp" :class="{'mycoin-warp-check': curCoin.id === item.id}" @click="switchCoin(index, item)">
<view class="mycoin-item">
<image :src="item.img2" mode="widthFix"></image>
</view>
<image v-if="item.pay_status === 1" class="coinstar" src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/mycoin/mycoin-star.png" mode="widthFix"></image>
</view>
<view style="font-size: 8px;padding-bottom: 10px;padding-top: 5px;">
{{dateFormat(item.date)}}
</view>
</view>
</view>
</scroll-view>
<view class="btm-bck">
<text v-if="JSON.stringify(curCoin) === '{}'" class="duihuan-disable">兑换奖励</text>
<text v-else-if="curCoin.apply_status === 0" class="duihuan-available" @click="duihuan">兑换奖励</text>
<text v-else class="duihuan-disable">{{curCoin.pay_status === 0 ? '已申请,审核后自动发放' : '已兑换'}}</text>
</view>
</view>
</block>
<block v-else>
<view class="null-collect center">
暂无收藏品
</view>
</block>
</view>
</scroll-view>
<view style="position: absolute;bottom: 0;left: 0;width: 100%;display: flex;">
<image style="width: 100%;" src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/mycoin/bottom-bck.png" mode="widthFix"></image>
</view>
</touch-popup>
</view>
</template>
<script>
export default {
name: 'mycoin',
data() {
return {
curSwiperIndex: 0
}
},
methods: {
swiperCoin() {
let that = this
this.$refs.zSwiper.swiper.on("slideChange", (swiper) => {
that.curSwiperIndex = swiper.activeIndex;
})
},
slideTo(i) {
this.$refs.zSwiper.swiper.slideTo(i, 1000, false)
}
}
}
</script>
<script setup>
const app = getApp()
import {
ref,
defineExpose,
computed,
nextTick,
getCurrentInstance
} from 'vue'
const {ctx}=getCurrentInstance()
const popup = ref() // ref组件
const coinList = ref([]);
const curCoin = ref({});
const test = () => {
console.log('这里是setup test');
}
const switchCoin = (index, item) => {
curCoin.value = item;
ctx.slideTo(index);
}
const duihuan = () => {
if (JSON.stringify(curCoin.value) === '{}') return;
uni.request({
url: app.globalData.requestUrl + '/api/user/coin/pay',
data: {
coin_id: curCoin.value.id
},
method: 'POST',
header: {
'Authorization': 'Bearer ' + app.globalData.token
},
success: (res) => {
if (res.data.code === 200) {
uni.showToast({
title: '已申请兑换奖励',
icon: 'none'
});
curCoin.value.apply_status = 1;
loadData();
} else {
uni.showToast({
title: res.data.msg,
icon: 'none'
});
}
}
})
}
const dateFormat = (val) => {
let d = new Date(val)
return `${d.getFullYear()}/${d.getMonth()+1}/${d.getDate()}`
}
const loadData = (isOpen = false) => {
if (isOpen) {
uni.showLoading();
}
uni.request({
url: app.globalData.requestUrl + '/api/user/coin/list',
header: {
'Authorization': 'Bearer ' + app.globalData.token
},
success: (res) => {
if (res.data.code === 200) {
console.log(res.data)
for (let i = 0; i < res.data.data.length; i++) {
let coin = res.data.data[i]
if (coin.type === 1) {
coin.img = 'https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/mycoin/gold.png'
coin.img2 = 'https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/gold.png'
} else if (coin.type === 2) {
coin.img = 'https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/mycoin/silver.png'
coin.img2 = 'https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/silver.png'
} else if (coin.type === 3) {
coin.img = 'https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/mycoin/copper.png'
coin.img2 = 'https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/copper.png'
}
res.data.data[i] = coin
}
coinList.value = res.data.data;
if (isOpen) {
popup.value.open();
}
} else {
uni.showToast({
title: res.data.msg,
icon: 'none'
})
}
},
complete() {
if (isOpen) {
uni.hideLoading();
}
}
})
}
const open = () => {
loadData(true);
}
defineExpose({
open
}) // 暴露方法
</script>
<style scoped>
.duihuan-available {
font-size: 13px;
margin-right: 10px;
background-image: linear-gradient(180deg, #C5FF99 0%, #3DFEB7 100%);
-webkit-background-clip: text;
color: transparent;
}
.duihuan-disable {
font-size: 13px;
margin-right: 10px;
color: #FFFFFF80;
}
.coinstar {
position: absolute;
bottom: 0;
right: 0;
width: 18px !important;
height: auto;
}
.mycoin-item image {
width: 38px;
}
.mycoin-warp {
width: 58px;
height: 58px;
display: flex;
align-items: center;
justify-content: center;
background-color: #fff;
border-radius: 16px;
position: relative;
}
.mycoin-warp-check {
background: linear-gradient(315deg, #00EADC 0%, #75FF83 100%);;
}
.mycoin-item {
background-color: #fff;
width: 52px;
height: 52px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 14px;
flex-direction: column;
}
.mycoin-list {
padding: 5px 30px;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
}
.btm-bck {
width: 100%;
height: 32px;
background-color: #000;
background: url('https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/mycoin/collect-bottom-bck.png') no-repeat;
background-size: 180rpx;
background-color: #000;
background-position: left 0 bottom 0;
display: flex;
justify-content: flex-end;
align-items: center;
}
.collect-text {
font-weight: bold;
font-size: 14px;
padding: 10px 15px;
}
.collect {
border-radius: 20px;
overflow: hidden;
margin: 0 15px;
display: flex;
flex-direction: column;
background: url('https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/mycoin/collect-bck.png') no-repeat,
linear-gradient(180deg, #C2FF8F 0%, #08FFB9 100%);
background-size: 550rpx;
background-position: right 0 top 0;
}
.coin-address {
padding: 15px;
font-size: 14px;
display: flex;
flex-direction: column;
}
.coin-item image {
height: 180px;
}
.coin-item {
display: flex;
justify-content: center;
}
.coin-title {
font-size: 22px;
font-weight: 700;
margin-top: 5px;
}
.content {
height: calc(100% - 45px);
background: url('https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/mycoin/top-bck.png') no-repeat;
background-position: top;
background-size: 750rpx;
padding: 15px 0;
}
scroll-view {
height: calc(100% - 15px);
z-index: 1;
position: relative;
}
.null-collect {
position: absolute;
top: 50%;
width: 100%;
}
</style>