Files
shoot-miniprograms/src/pages/ranking.vue
2025-06-04 16:26:07 +08:00

316 lines
7.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script setup>
import Container from "@/components/Container.vue";
import { ref } from "vue";
const selectedIndex = ref(0);
const handleSelect = (index) => {
selectedIndex.value = index;
};
const toMatchPage = (gameType, teamSize) => {
uni.navigateTo({
url: `/pages/match-room?gameType=${gameType}&teamSize=${teamSize}`,
});
};
</script>
<template>
<Container title="排行赛">
<view class="container">
<view class="ranking-my-data">
<view>
<view class="user-info">
<view class="avatar" @click="toUserPage">
<image src="../static/avatar-frame.png" mode="widthFix" />
<image src="../static/avatar.png" mode="widthFix" />
</view>
<text>打酱油·路过</text>
</view>
<view class="ranking-season">
<text>第14赛季</text>
<image src="../static/triangle.png" mode="widthFix" />
</view>
</view>
<view class="my-data">
<view>
<text>段位</text>
<text :style="{ color: '#83CDFF' }">砖石 III</text>
</view>
<view>
<text>赛季平均环数</text>
<text :style="{ color: '#FFD947' }">9.7</text>
</view>
<view>
<text>赛季胜率</text>
<text :style="{ color: '#FF507E' }">52%</text>
</view>
</view>
<view class="rank-type">
<image
src="../static/battle1v1.png"
mode="widthFix"
@click="() => toMatchPage(1, 2)"
/>
<image
src="../static/battle5.png"
mode="widthFix"
@click="() => toMatchPage(2, 5)"
/>
<image
src="../static/battle10.png"
mode="widthFix"
@click="() => toMatchPage(2, 10)"
/>
</view>
<view class="data-progress">
<text>1 V 1 163 胜率 51%</text>
<view>
<view :style="{ width: '50%', backgroundColor: '#FF507E' }" />
</view>
</view>
<view class="data-progress">
<text>5人大乱斗 12 得分率 56%</text>
<view>
<view :style="{ width: '60%', backgroundColor: '#FFD947' }" />
</view>
</view>
<view class="data-progress">
<text>10 人大乱斗 12 得分率 5</text>
<view>
<view :style="{ width: '45%', backgroundColor: '#FFD947' }" />
</view>
</view>
<view>查看我的比赛记录</view>
</view>
<view class="ranking-data">
<view>
<view
v-for="(rankType, index) in [
'积分表',
'MVP榜',
'十环榜',
'最牛省份',
]"
:key="index"
:style="{
color: index === selectedIndex ? '#000' : '#fff',
backgroundColor:
index === selectedIndex ? '#FFD947' : 'transparent',
}"
@tap="handleSelect(index)"
>
{{ rankType }}
</view>
</view>
<view
v-for="(rankType, index) in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
:key="index"
:style="{
backgroundColor: index % 2 === 0 ? '#ffffff1f' : 'transparent',
}"
class="rank-item"
>
<image v-if="index === 0" src="../static/champ1.png" />
<image v-if="index === 1" src="../static/champ2.png" />
<image v-if="index === 2" src="../static/champ3.png" />
<view v-if="index > 2">{{ rankType }}</view>
<image src="../static/avatar.png" mode="widthFix" />
<view>
<text>打酱油大声路过</text>
<text>钻石三级20</text>
</view>
<text>8850<text></text></text>
</view>
</view>
</view>
</Container>
</template>
<style scoped>
.container {
width: 100%;
}
.ranking-my-data,
.ranking-data {
display: flex;
flex-direction: column;
align-items: flex-start;
background-color: #54431d33;
border: 1px solid #54431d;
border-radius: 10px;
margin: 0 15px;
margin-bottom: 15px;
}
.ranking-my-data {
padding: 15px;
}
.ranking-my-data > view:first-of-type {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
border-bottom: 1px solid #48494e;
padding-bottom: 15px;
}
.user-info {
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-size: 14px;
}
.avatar {
position: relative;
display: flex;
align-items: center;
justify-content: center;
margin-right: 15px;
}
.avatar > image:first-child {
position: absolute;
width: 40px;
height: 40px;
}
.avatar > image {
width: 30px;
height: 30px;
border-radius: 50%;
}
.ranking-season {
display: flex;
justify-content: center;
align-items: center;
}
.ranking-season > image {
width: 12px;
}
.ranking-season > text {
color: #ffd947;
font-size: 14px;
margin-right: 5px;
}
.my-data {
display: flex;
align-items: center;
justify-content: space-around;
color: #b3b3b3;
width: 100%;
margin-top: 15px;
}
.my-data > view {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
height: 60px;
}
.my-data > view:nth-child(2) {
border-left: 1px solid #48494e;
border-right: 1px solid #48494e;
padding: 0 20px;
}
.my-data > view > text:first-child {
font-size: 14px;
}
.my-data > view > text:last-child {
font-size: 18px;
}
.rank-type {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
margin-top: 15px;
}
.rank-type > image {
width: 32%;
}
.data-progress {
width: 100%;
color: #b3b3b3;
display: flex;
flex-direction: column;
align-items: flex-start;
margin-top: 15px;
}
.data-progress > view {
width: 100%;
height: 5px;
border-radius: 10px;
background-color: #696969;
margin-top: 10px;
}
.data-progress > view > view {
height: 5px;
border-radius: 10px;
}
.ranking-my-data > view:last-child {
color: #39a8ff;
font-size: 14px;
text-align: center;
width: 100%;
padding-top: 15px;
}
.ranking-data > view:first-of-type {
width: calc(100% - 30px);
display: flex;
justify-content: space-around;
font-size: 15px;
padding: 15px;
}
.ranking-data > view:first-of-type > view {
width: 25%;
padding: 7px 10px;
text-align: center;
border-radius: 20px;
}
.rank-item {
width: calc(100% - 30px);
height: 55px;
padding: 0 15px;
display: flex;
justify-content: space-between;
align-items: center;
}
.rank-item > view:first-child {
width: 24px;
height: 24px;
border-radius: 12px;
background-color: #767676;
color: #fff;
text-align: center;
line-height: 24px;
font-size: 14px;
}
.rank-item > image:first-child {
width: 24px;
height: 24px;
}
.rank-item > image:nth-child(2) {
width: 35px;
height: 35px;
}
.rank-item > view:nth-child(3) {
display: flex;
flex-direction: column;
width: 55%;
}
.rank-item > view:nth-child(3) > text:first-child {
color: #fff9;
font-size: 14px;
}
.rank-item > view:nth-child(3) > text:last-child {
color: #fff4;
font-size: 13px;
}
.rank-item > text:last-child {
color: #fff;
}
.rank-item > text:last-child text {
color: #fff4;
font-size: 13px;
margin-left: 3px;
}
</style>