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

442 lines
9.9 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 class="bck">
<view style="width: 100%;height: 15px;"></view>
<view class="star1">
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/rank/star1.png" mode="widthFix"></image>
</view>
<view class="star2">
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/rank/star2.png" mode="widthFix"></image>
</view>
<view class="star3">
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/rank/star3.png" mode="widthFix"></image>
</view>
<view class="star4">
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/rank/star4.png" mode="widthFix"></image>
</view>
<view class="center" style="padding: 15px;">
排行榜
</view>
<!-- 金币铜币银币点击切换榜单 -->
<view class="tabbar">
<view class="tabbar-item" @click="switchTab(2)">
<view class="coin-item" :class="{ check: curCoin === 2 }">
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/rank/silver.png" mode="widthFix"></image>
</view>
<view class="coin-text">
银币榜
</view>
</view>
<view class="tabbar-item" @click="switchTab(1)">
<view class="coin-item" :class="{ check: curCoin === 1 }">
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/rank/gold.png" mode="widthFix"></image>
</view>
<view class="coin-text">
金币榜
</view>
</view>
<view class="tabbar-item" @click="switchTab(3)">
<view class="coin-item" :class="{ check: curCoin === 3 }">
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/rank/copper.png" mode="widthFix"></image>
</view>
<view class="coin-text">
铜币榜
</view>
</view>
</view>
<!-- 排行榜列表 -->
<scroll-view scroll-y>
<view class="pd-25">
<view class="rank-list">
<view v-for="(item, index) in curList" key="rank" class="rank-item">
<view class="leftnum" :class="{'rank-weight': index < 3}">
{{index+1}}
</view>
<view class="centeravatar">
<image v-if="index <= 2" class="zhuangshi" src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/rank/皇冠.png" mode="widthFix">
</image>
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/rank/avatar.png" mode="widthFix"></image>
</view>
<view class="centernickname">
{{item.name}}
</view>
<view class="rightbalance">
<view class="price-item">
<view class="price-bck">
<view class="logo-bck">
<image :src="'https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/' + coinType" mode="widthFix">
</image>
</view>
<text>{{item.num}}</text>
</view>
</view>
</view>
</view>
</view>
</view>
</scroll-view>
<view class="mypoint">
<view class="my-bck">
<view class="myavatar">
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/my/rank/avatar.png" mode="aspectFill"></image>
</view>
<view class="mynickname center">
{{app.globalData.userinfo.name}}
</view>
<view class="mybanance">
<view class="">
<image :src="'https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/' + coinType" mode="widthFix"></image>
<text>{{curMyCoinNum.num ? curMyCoinNum.num : 0}}</text>
</view>
</view>
<view class="myrank">
<text>{{curMyCoinNum.hasOwnProperty('i') ? '上海市NO.'+(curMyCoinNum.i+1) : '暂无排名'}}</text>
</view>
</view>
</view>
</view>
</touch-popup>
</view>
</template>
<script setup>
const app = getApp()
import {
ref,
defineExpose,
computed
} from 'vue'
import touchPopup from '@/components/touch-popup/touch-popup'
const popup = ref() // ref组件
const curCoin = ref(1) // 0银币 1金币 2铜币
const rankList = ref({}) // 银币排行榜列表
const mySilverRank = ref({}) // 我的银币排名信息
const myGoldRank = ref({}) // 我的金币排名信息
const myCopperRank = ref({}) // 我的铜币排名信息
/* 计算属性 */
// 获取当前列表的金币、铜币还是银币图标
const coinType = computed(() => {
if (curCoin.value === 2) {
return 'silver.png'
} else if (curCoin.value === 1) {
return 'gold.png'
} else if (curCoin.value === 3) {
return 'copper.png'
}
})
// 当前列表
const curList = computed(() => {
return rankList.value[curCoin.value]
})
// 我的硬币数量
const curMyCoinNum = computed(() => {
if (curCoin.value === 2) {
if (JSON.stringify(mySilverRank.value) === '{}') return 0
return mySilverRank.value
} else if (curCoin.value === 1) {
if (JSON.stringify(myGoldRank.value) === '{}') return 0
return myGoldRank.value
} else if (curCoin.value === 3) {
if (JSON.stringify(myCopperRank.value) === '{}') return 0
return myCopperRank.value
}
})
/* 方法 */
const switchTab = (e) => {
if (curCoin.value === e) return
curCoin.value = e
}
const open = () => {
popup.value.open()
if (JSON.stringify(rankList.value) !== '{}') return
uni.showLoading()
uni.request({
url: app.globalData.requestUrl + '/api/coin/user/top',
header: {
'Authorization': 'Bearer ' + app.globalData.token
},
success: (res) => {
if (res.data.code === 200) {
rankList.value = res.data.data
for (let i = 0; i < res.data.data[1].length; i++) {
if (res.data.data[1][i].user_id == app.globalData.userinfo.id) {
myGoldRank.value = res.data.data[1][i]
myGoldRank.value.i = i
break
}
} // 我的金币排名信息
for (let i = 0; i < res.data.data[2].length; i++) {
if (res.data.data[2][i].user_id == app.globalData.userinfo.id) {
mySilverRank.value = res.data.data[2][i]
mySilverRank.value.i = i
break
}
} // 我的银币排名信息
for (let i = 0; i < res.data.data[3].length; i++) {
if (res.data.data[3][i].user_id == app.globalData.userinfo.id) {
myCopperRank.value = res.data.data[3][i]
myCopperRank.value.i = i
break
}
} // 我的铜币排名信息
} else {
uni.showToast({
title: '获取排行榜列表失败,请重试',
icon: 'none'
})
}
},
complete: () => {
uni.hideLoading()
}
})
}
defineExpose({
open
}) // 暴露方法
</script>
<style scoped>
.rank-weight {
color: #FFD600;
}
.my-bck {
background: linear-gradient(137.8deg, #C2FF8F 0%, #0DFFB9 99.99%);
border-radius: 25px;
height: 50px;
display: flex;
}
.myavatar image {
border: 3px solid #000;
border-radius: 20px;
width: 35px;
height: 35px;
}
.myavatar {
display: flex;
align-items: center;
padding: 0 10px;
}
.mynickname {
font-size: 14px;
}
.mybanance view {
padding: 0 10px;
display: flex;
align-items: center;
justify-content: center;
border-left: 2px solid rgba(0, 0, 0, 0.1);
border-right: 2px solid rgba(0, 0, 0, 0.1);
}
.mybanance image {
width: 15px;
height: auto;
}
.mybanance text {
padding-left: 10px;
}
.mybanance {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
font-weight: bold;
}
.myrank {
padding-right: 15px;
display: flex;
align-items: center;
font-size: 13px;
}
.mypoint {
padding: 0 15px 15px 15px;
}
.price-bck text {
padding: 0 8px 0 5px;
}
.price-bck image {
width: 23px;
height: auto;
}
.price-bck .logo-bck {
display: flex;
}
.price-bck {
height: 18px;
background: linear-gradient(137.8deg, #C2FF8F 0%, #0DFFB9 99.99%);
border-radius: 13px;
display: flex;
align-items: center;
font-size: 12px;
font-weight: 700;
}
.price-item {
flex: 1;
display: flex;
justify-content: center;
}
.leftnum {
font-family: Baloo;
font-size: 25px;
font-weight: 400;
line-height: 39.35px;
width: 50px;
font-weight: bolder;
display: flex;
align-items: center;
justify-content: center;
}
.zhuangshi {
width: 11px !important;
position: absolute;
top: -3px;
}
.centeravatar image {
width: 29px;
height: auto;
}
.centeravatar {
display: flex;
width: 50px;
align-items: center;
justify-content: center;
position: relative;
}
.centernickname {
flex: 2;
font-size: 15px;
display: flex;
padding: 0 20px;
align-items: center;
}
.rightbalance {
display: flex;
align-items: center;
}
.rank-item {
display: flex;
padding: 5px;
}
.rank-list {
display: flex;
flex-direction: column;
border-radius: 15px;
background-color: rgba(255, 255, 255, 0.5);
}
.pd-25 {
padding: 5px 25px;
}
scroll-view {
height: calc(100% - 300px);
}
.coin-text {
font-size: 14px;
padding: 3px 10px;
border-radius: 10px;
background-color: rgba(255, 255, 255, 0.5);
}
.tabbar-item image {
width: 60px;
height: auto;
}
.check image {
width: 75px !important;
}
.tabbar-item {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-end;
height: 105px;
}
.tabbar {
padding: 15px 50px 15px 50px;
display: flex;
}
.star1 image {
width: 80px;
height: auto;
}
.star1 {
position: absolute;
top: 40px;
left: 0;
}
.star2 image {
width: 40px;
height: auto;
}
.star2 {
position: absolute;
top: 45px;
right: 60px;
}
.star3 image {
width: 25px;
height: auto;
}
.star3 {
position: absolute;
top: 70px;
left: 145px;
}
.star4 image {
width: 75px;
height: auto;
}
.star4 {
position: absolute;
top: 90px;
right: 0px;
}
.bck {
height: 100%;
background: linear-gradient(180deg, #FEF0A7 0%, #FFFFFF 68.42%);
}
</style>