2 Commits

6 changed files with 256 additions and 195 deletions

View File

@@ -0,0 +1,54 @@
<script setup>
defineProps({
noBg: {
type: Boolean,
default: false,
}
});
</script>
<template>
<view class="container">
<image class="shooter2" src="../static/shooter2.png" mode="widthFix" />
<view class="bg-box">
<image
class="bg"
v-if="!noBg"
src="../static/long-bubble-border.png"
mode="widthFix"
/>
<slot />
</view>
</view>
</template>
<style scoped>
.container {
display: flex;
align-items: center;
padding: 0 15px;
margin-bottom: 14px;
width: clac(100% - 30px);
}
.container .shooter2 {
width: 150rpx;
height: 162rpx;
}
.container .bg-box {
color: #fff;
font-size: 28rpx;
position: relative;
flex: 1;
min-height: 55px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.container .bg-box .bg {
position: absolute;
left: 0;
right: 0;
width: 100%;
}
</style>

View File

@@ -3,7 +3,7 @@ import { ref, onMounted, computed, onBeforeUnmount } from "vue";
import { onShow, onLoad, onShareAppMessage } from "@dcloudio/uni-app"; import { onShow, onLoad, onShareAppMessage } from "@dcloudio/uni-app";
import Container from "@/components/Container.vue"; import Container from "@/components/Container.vue";
import PlayerSeats from "@/components/PlayerSeats.vue"; import PlayerSeats from "@/components/PlayerSeats.vue";
import Guide from "@/components/Guide.vue"; import GuideTwo from "@/components/GuideTwo.vue";
import SButton from "@/components/SButton.vue"; import SButton from "@/components/SButton.vue";
import Avatar from "@/components/Avatar.vue"; import Avatar from "@/components/Avatar.vue";
import { import {
@@ -238,7 +238,7 @@ onBeforeUnmount(() => {
<template> <template>
<Container :title="`好友约战 - ${roomNumber}`"> <Container :title="`好友约战 - ${roomNumber}`">
<view class="standby-phase"> <view class="standby-phase">
<Guide> <GuideTwo>
<view class="battle-guide"> <view class="battle-guide">
<view class="guide-tips"> <view class="guide-tips">
<text>弓箭手们人都到齐了吗?</text> <text>弓箭手们人都到齐了吗?</text>
@@ -247,48 +247,29 @@ onBeforeUnmount(() => {
}}</text> }}</text>
<text v-if="room.battleType === 2">大乱斗即将开始! </text> <text v-if="room.battleType === 2">大乱斗即将开始! </text>
</view> </view>
<button hover-class="none" open-type="share">邀请</button> <!-- <button hover-class="none" open-type="share">邀请</button> -->
</view> </view>
</Guide> </GuideTwo>
<view v-if="room.battleType === 1 && room.count === 2" class="team-mode"> <view v-if="room.battleType === 1 && room.count === 2" class="team-mode">
<image <image src="https://static.shelingxingqiu.com/attachment/2025-08-05/dbua9nuf5fyeph7cxi.png" mode="widthFix" />
src="https://static.shelingxingqiu.com/attachment/2025-08-05/dbua9nuf5fyeph7cxi.png"
mode="widthFix"
/>
<view> <view>
<view <view v-if="owner.id" class="player" :style="{ transform: 'translateY(-60px)' }">
v-if="owner.id"
class="player"
:style="{ transform: 'translateY(-60px)' }"
>
<Avatar :src="owner.avatar" :size="60" /> <Avatar :src="owner.avatar" :size="60" />
<text>管理员</text> <text>管理员</text>
<text>{{ owner.name }}</text> <text>{{ owner.name }}</text>
</view> </view>
<view <view v-else class="no-player" :style="{ transform: 'translateY(-60px)' }">
v-else
class="no-player"
:style="{ transform: 'translateY(-60px)' }"
>
<image src="../static/question-mark.png" mode="widthFix" /> <image src="../static/question-mark.png" mode="widthFix" />
</view> </view>
<image src="../static/versus.png" mode="widthFix" /> <image src="../static/versus.png" mode="widthFix" />
<view <view v-if="opponent.id" class="player" :style="{ transform: 'translateY(60px)' }">
v-if="opponent.id"
class="player"
:style="{ transform: 'translateY(60px)' }"
>
<Avatar :src="opponent.avatar" :size="60" /> <Avatar :src="opponent.avatar" :size="60" />
<text class="ready" :style="{ opacity: opponent.ready ? 1 : 0 }"> <text class="ready" :style="{ opacity: opponent.ready ? 1 : 0 }">
已准备 已准备
</text> </text>
<text>{{ opponent.name }}</text> <text>{{ opponent.name }}</text>
<button <button v-if="owner.id === user.id" hover-class="none" class="remove-player"
v-if="owner.id === user.id" @click="() => removePlayer(opponent)">
hover-class="none"
class="remove-player"
@click="() => removePlayer(opponent)"
>
<image src="../static/close-white.png" mode="widthFix" /> <image src="../static/close-white.png" mode="widthFix" />
</button> </button>
</view> </view>
@@ -299,31 +280,15 @@ onBeforeUnmount(() => {
</view> </view>
<block v-if="room.battleType === 1 && room.count >= 4"> <block v-if="room.battleType === 1 && room.count >= 4">
<view class="all-players"> <view class="all-players">
<image <image src="https://static.shelingxingqiu.com/attachment/2025-08-13/dc0x1p59iab6cvbhqc.png" mode="widthFix" />
src="https://static.shelingxingqiu.com/attachment/2025-08-13/dc0x1p59iab6cvbhqc.png" <image v-if="room.count === 4" src="../static/title-2v2.png" mode="widthFix" />
mode="widthFix" <image v-if="room.count === 6" src="../static/title-3v3.png" mode="widthFix" />
/>
<image
v-if="room.count === 4"
src="../static/title-2v2.png"
mode="widthFix"
/>
<image
v-if="room.count === 6"
src="../static/title-3v3.png"
mode="widthFix"
/>
<view> <view>
<view v-for="(item, index) in players" :key="index"> <view v-for="(item, index) in players" :key="index">
<Avatar v-if="item.id" :src="item.avatar" :size="36" /> <Avatar v-if="item.id" :src="item.avatar" :size="36" />
<text v-if="owner.id === item.id">管理员</text> <text v-if="owner.id === item.id">管理员</text>
<button <button v-if="owner.id !== item.id && item.id" hover-class="none" class="remove-player"
v-if="owner.id !== item.id && item.id" @click="() => removePlayer(item)" :style="{ top: '-10rpx', right: '-10rpx' }">
hover-class="none"
class="remove-player"
@click="() => removePlayer(item)"
:style="{ top: '-10rpx', right: '-10rpx' }"
>
<image src="../static/close-white.png" mode="widthFix" /> <image src="../static/close-white.png" mode="widthFix" />
</button> </button>
</view> </view>
@@ -331,16 +296,8 @@ onBeforeUnmount(() => {
</view> </view>
<view class="choose-side"> <view class="choose-side">
<view> <view>
<view <view v-for="(item, index) in redTeam" :key="index" class="choose-side-left-item">
v-for="(item, index) in redTeam" <button hover-class="none" v-if="item.id === user.id" @click="chooseTeam(0)">
:key="index"
class="choose-side-left-item"
>
<button
hover-class="none"
v-if="item.id === user.id"
@click="chooseTeam(0)"
>
<image src="../static/close-grey.png" mode="widthFix" /> <image src="../static/close-grey.png" mode="widthFix" />
</button> </button>
<text class="truncate">{{ item.name || "我要加入" }}</text> <text class="truncate">{{ item.name || "我要加入" }}</text>
@@ -354,11 +311,7 @@ onBeforeUnmount(() => {
</view> </view>
</view> </view>
<view> <view>
<view <view v-for="(item, index) in blueTeam" :key="index" class="choose-side-right-item">
v-for="(item, index) in blueTeam"
:key="index"
class="choose-side-right-item"
>
<view v-if="item.id"> <view v-if="item.id">
<Avatar :src="item.avatar" :size="36" /> <Avatar :src="item.avatar" :size="36" />
<text :style="{ opacity: !!item.state ? 1 : 0 }">已准备</text> <text :style="{ opacity: !!item.state ? 1 : 0 }">已准备</text>
@@ -367,31 +320,23 @@ onBeforeUnmount(() => {
<image src="../static/add-grey.png" mode="widthFix" /> <image src="../static/add-grey.png" mode="widthFix" />
</button> </button>
<text class="truncate">{{ item.name || "我要加入" }}</text> <text class="truncate">{{ item.name || "我要加入" }}</text>
<button <button hover-class="none" v-if="item.id === user.id" @click="chooseTeam(0)">
hover-class="none"
v-if="item.id === user.id"
@click="chooseTeam(0)"
>
<image src="../static/close-grey.png" mode="widthFix" /> <image src="../static/close-grey.png" mode="widthFix" />
</button> </button>
</view> </view>
</view> </view>
</view> </view>
</block> </block>
<PlayerSeats <PlayerSeats v-if="room.battleType === 2" :total="room.count || 10" :players="players"
v-if="room.battleType === 2" :removePlayer="removePlayer" />
:total="room.count || 10"
:players="players"
:removePlayer="removePlayer"
/>
<view> <view>
<SButton :disabled="!canClick" :onClick="getReady"> <SButton :disabled="!canClick" :onClick="getReady">
{{ {{
allReady.value allReady.value
? "即将进入对局..." ? "即将进入对局..."
: owner.id === user.id : owner.id === user.id
? "开始对局" ? "开始对局"
: "我准备好了" : "我准备好了"
}} }}
</SButton> </SButton>
<text class="tips">所有人准备好后由房主点击开始</text> <text class="tips">所有人准备好后由房主点击开始</text>
@@ -406,6 +351,7 @@ onBeforeUnmount(() => {
height: calc(100% - 40px); height: calc(100% - 40px);
overflow-x: hidden; overflow-x: hidden;
} }
.tips { .tips {
color: #fff9; color: #fff9;
width: 100%; width: 100%;
@@ -414,6 +360,7 @@ onBeforeUnmount(() => {
margin-top: 10px; margin-top: 10px;
font-size: 12px; font-size: 12px;
} }
.player-unknow { .player-unknow {
width: 40px; width: 40px;
height: 40px; height: 40px;
@@ -425,25 +372,30 @@ onBeforeUnmount(() => {
justify-content: center; justify-content: center;
background-color: #69686866; background-color: #69686866;
} }
.player-unknow > image {
.player-unknow>image {
width: 40%; width: 40%;
} }
.team-mode { .team-mode {
width: calc(100vw - 30px); width: calc(100vw - 30px);
height: 125vw; height: 125vw;
margin: 15px; margin: 15px;
} }
.team-mode > image:first-child {
.team-mode>image:first-child {
position: absolute; position: absolute;
width: calc(100vw - 30px); width: calc(100vw - 30px);
z-index: -1; z-index: -1;
} }
.team-mode > view {
.team-mode>view {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
height: 95%; height: 95%;
} }
.player { .player {
width: 70px; width: 70px;
display: flex; display: flex;
@@ -455,14 +407,16 @@ onBeforeUnmount(() => {
font-size: 14px; font-size: 14px;
position: relative; position: relative;
} }
.player > image {
.player>image {
width: 70px; width: 70px;
height: 70px; height: 70px;
border-radius: 50%; border-radius: 50%;
background-color: #ccc; background-color: #ccc;
margin-bottom: 5px; margin-bottom: 5px;
} }
.player > text:nth-child(2) {
.player>text:nth-child(2) {
color: #000; color: #000;
background-color: #fed847; background-color: #fed847;
font-size: 16rpx; font-size: 16rpx;
@@ -472,21 +426,25 @@ onBeforeUnmount(() => {
margin-top: -16rpx; margin-top: -16rpx;
position: relative; position: relative;
} }
.player > text:nth-child(3) {
.player>text:nth-child(3) {
margin-top: 6rpx; margin-top: 6rpx;
} }
.player > text {
.player>text {
max-width: 100px; max-width: 100px;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
text-align: center; text-align: center;
} }
.player .ready { .player .ready {
background-color: #2c261fb3 !important; background-color: #2c261fb3 !important;
border: 1rpx solid #a3793f66 !important; border: 1rpx solid #a3793f66 !important;
color: #fed847 !important; color: #fed847 !important;
} }
.remove-player { .remove-player {
width: 40rpx; width: 40rpx;
height: 40rpx; height: 40rpx;
@@ -499,13 +457,16 @@ onBeforeUnmount(() => {
top: 0; top: 0;
right: 0; right: 0;
} }
.remove-player > image {
.remove-player>image {
width: 90%; width: 90%;
height: 90%; height: 90%;
} }
.team-mode > view > image:nth-child(2) {
.team-mode>view>image:nth-child(2) {
width: 120px; width: 120px;
} }
.no-player { .no-player {
width: 70px; width: 70px;
height: 70px; height: 70px;
@@ -516,10 +477,12 @@ onBeforeUnmount(() => {
align-items: center; align-items: center;
transform: translateY(60px); transform: translateY(60px);
} }
.no-player > image {
.no-player>image {
width: 20px; width: 20px;
margin-right: 2px; margin-right: 2px;
} }
.btns { .btns {
height: 100%; height: 100%;
display: flex; display: flex;
@@ -527,12 +490,14 @@ onBeforeUnmount(() => {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.battle-guide { .battle-guide {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }
.battle-guide > button:last-child {
.battle-guide>button:last-child {
color: #fed847; color: #fed847;
border: 1px solid #fed847; border: 1px solid #fed847;
margin-right: 10px; margin-right: 10px;
@@ -541,6 +506,7 @@ onBeforeUnmount(() => {
position: relative; position: relative;
font-size: 28rpx; font-size: 28rpx;
} }
.all-players { .all-players {
position: relative; position: relative;
display: flex; display: flex;
@@ -548,68 +514,73 @@ onBeforeUnmount(() => {
align-items: center; align-items: center;
height: 83vw; height: 83vw;
} }
.all-players > image:first-child {
.all-players>image:first-child {
position: absolute; position: absolute;
width: 100%; width: 100%;
} }
.all-players > image:nth-child(2) {
.all-players>image:nth-child(2) {
width: 25vw; width: 25vw;
position: relative; position: relative;
} }
.all-players > view {
.all-players>view {
position: relative; position: relative;
width: 42vw; width: 42vw;
height: 42vw; height: 42vw;
margin-top: 7vw; margin-top: 7vw;
} }
.all-players > view > view {
.all-players>view>view {
position: absolute; position: absolute;
left: 50%; left: 50%;
top: 50%; top: 50%;
} }
/* 4个头像 - 正方形排列 */ /* 4个头像 - 正方形排列 */
.all-players > view > view:nth-child(1):nth-last-child(4) { .all-players>view>view:nth-child(1):nth-last-child(4) {
transform: translate(-50%, -50%) rotate(-30deg) translateY(-21.5vw) transform: translate(-50%, -50%) rotate(-30deg) translateY(-21.5vw) rotate(30deg);
rotate(30deg);
} }
.all-players > view > view:nth-child(2):nth-last-child(3) {
transform: translate(-50%, -50%) rotate(-120deg) translateY(-21.5vw) .all-players>view>view:nth-child(2):nth-last-child(3) {
rotate(120deg); transform: translate(-50%, -50%) rotate(-120deg) translateY(-21.5vw) rotate(120deg);
} }
.all-players > view > view:nth-child(3):nth-last-child(2) {
transform: translate(-50%, -50%) rotate(-210deg) translateY(-21.5vw) .all-players>view>view:nth-child(3):nth-last-child(2) {
rotate(210deg); transform: translate(-50%, -50%) rotate(-210deg) translateY(-21.5vw) rotate(210deg);
} }
.all-players > view > view:nth-child(4):nth-last-child(1) {
transform: translate(-50%, -50%) rotate(-300deg) translateY(-21.5vw) .all-players>view>view:nth-child(4):nth-last-child(1) {
rotate(300deg); transform: translate(-50%, -50%) rotate(-300deg) translateY(-21.5vw) rotate(300deg);
} }
/* 6个头像 - 六边形排列 */ /* 6个头像 - 六边形排列 */
.all-players > view > view:nth-child(1):nth-last-child(6) { .all-players>view>view:nth-child(1):nth-last-child(6) {
transform: translate(-50%, -50%) rotate(-30deg) translateY(-21vw) transform: translate(-50%, -50%) rotate(-30deg) translateY(-21vw) rotate(30deg);
rotate(30deg);
} }
.all-players > view > view:nth-child(2):nth-last-child(5) {
transform: translate(-50%, -50%) rotate(-90deg) translateY(-21vw) .all-players>view>view:nth-child(2):nth-last-child(5) {
rotate(90deg); transform: translate(-50%, -50%) rotate(-90deg) translateY(-21vw) rotate(90deg);
} }
.all-players > view > view:nth-child(3):nth-last-child(4) {
transform: translate(-50%, -50%) rotate(-150deg) translateY(-21vw) .all-players>view>view:nth-child(3):nth-last-child(4) {
rotate(150deg); transform: translate(-50%, -50%) rotate(-150deg) translateY(-21vw) rotate(150deg);
} }
.all-players > view > view:nth-child(4):nth-last-child(3) {
transform: translate(-50%, -50%) rotate(-210deg) translateY(-21vw) .all-players>view>view:nth-child(4):nth-last-child(3) {
rotate(210deg); transform: translate(-50%, -50%) rotate(-210deg) translateY(-21vw) rotate(210deg);
} }
.all-players > view > view:nth-child(5):nth-last-child(2) {
transform: translate(-50%, -50%) rotate(-270deg) translateY(-21vw) .all-players>view>view:nth-child(5):nth-last-child(2) {
rotate(270deg); transform: translate(-50%, -50%) rotate(-270deg) translateY(-21vw) rotate(270deg);
} }
.all-players > view > view:nth-child(6):nth-last-child(1) {
transform: translate(-50%, -50%) rotate(-330deg) translateY(-21vw) .all-players>view>view:nth-child(6):nth-last-child(1) {
rotate(330deg); transform: translate(-50%, -50%) rotate(-330deg) translateY(-21vw) rotate(330deg);
} }
.all-players > view > view > text {
.all-players>view>view>text {
position: absolute; position: absolute;
background-color: #fed847; background-color: #fed847;
font-size: 8px; font-size: 8px;
@@ -621,18 +592,23 @@ onBeforeUnmount(() => {
text-align: center; text-align: center;
color: #333; color: #333;
} }
.choose-side { .choose-side {
display: flex; display: flex;
} }
.choose-side > view {
.choose-side>view {
width: 50%; width: 50%;
} }
.choose-side > view:first-child > view {
.choose-side>view:first-child>view {
background: linear-gradient(270deg, #6a1212 0%, rgba(74, 0, 0, 0) 100%); background: linear-gradient(270deg, #6a1212 0%, rgba(74, 0, 0, 0) 100%);
} }
.choose-side > view:last-child > view {
.choose-side>view:last-child>view {
background: linear-gradient(270deg, rgba(13, 0, 74, 0) 0%, #172a86 100%); background: linear-gradient(270deg, rgba(13, 0, 74, 0) 0%, #172a86 100%);
} }
.choose-side-left-item, .choose-side-left-item,
.choose-side-right-item { .choose-side-right-item {
display: flex; display: flex;
@@ -644,33 +620,39 @@ onBeforeUnmount(() => {
margin: 10px 5px; margin: 10px 5px;
position: relative; position: relative;
} }
.choose-side-left-item { .choose-side-left-item {
justify-content: flex-end; justify-content: flex-end;
} }
.choose-side-left-item > text,
.choose-side-right-item > text { .choose-side-left-item>text,
.choose-side-right-item>text {
margin: 10px; margin: 10px;
max-width: 100px; max-width: 100px;
font-size: 14px; font-size: 14px;
} }
.choose-side-left-item > button:first-child,
.choose-side-right-item > button:last-child { .choose-side-left-item>button:first-child,
.choose-side-right-item>button:last-child {
position: absolute; position: absolute;
top: 0; top: 0;
} }
.choose-side-left-item > button:first-child > image,
.choose-side-right-item > button:last-child > image { .choose-side-left-item>button:first-child>image,
.choose-side-right-item>button:last-child>image {
width: 28px; width: 28px;
} }
.choose-side-left-item > button:first-child {
.choose-side-left-item>button:first-child {
left: 0; left: 0;
} }
.choose-side-right-item > button:last-child { .choose-side-right-item>button:last-child {
right: 0; right: 0;
} }
.choose-side-left-item > button:last-child,
.choose-side-right-item > button:first-child { .choose-side-left-item>button:last-child,
.choose-side-right-item>button:first-child {
background-color: #fff; background-color: #fff;
border-radius: 50%; border-radius: 50%;
width: 38px; width: 38px;
@@ -680,18 +662,21 @@ onBeforeUnmount(() => {
align-items: center; align-items: center;
margin-bottom: 14rpx; margin-bottom: 14rpx;
} }
.choose-side-left-item > button:last-child > image,
.choose-side-right-item > button:first-child > image { .choose-side-left-item>button:last-child>image,
.choose-side-right-item>button:first-child>image {
width: 18px; width: 18px;
} }
.choose-side-left-item > view,
.choose-side-right-item > view { .choose-side-left-item>view,
.choose-side-right-item>view {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
.choose-side-left-item > view > text,
.choose-side-right-item > view > text { .choose-side-left-item>view>text,
.choose-side-right-item>view>text {
font-size: 16rpx; font-size: 16rpx;
border-radius: 20rpx; border-radius: 20rpx;
line-height: 26rpx; line-height: 26rpx;

View File

@@ -2,7 +2,7 @@
import { ref } from "vue"; import { ref } from "vue";
import { onLoad, onShow } from "@dcloudio/uni-app"; import { onLoad, onShow } from "@dcloudio/uni-app";
import Container from "@/components/Container.vue"; import Container from "@/components/Container.vue";
import Guide from "@/components/Guide.vue"; import GuideTwo from "@/components/GuideTwo.vue";
import SButton from "@/components/SButton.vue"; import SButton from "@/components/SButton.vue";
import SModal from "@/components/SModal.vue"; import SModal from "@/components/SModal.vue";
import Signin from "@/components/Signin.vue"; import Signin from "@/components/Signin.vue";
@@ -72,6 +72,13 @@ const onSignin = () => {
if (roomID.value && user.value.id) enterRoom(roomID.value); if (roomID.value && user.value.id) enterRoom(roomID.value);
showSignin.value = false; showSignin.value = false;
}; };
/** 跳转到我的战绩页面 */
const goMyRecord = () => {
uni.navigateTo({
url: '/pages/my-growth',
});
};
onShow(async () => { onShow(async () => {
if (user.value.id) { if (user.value.id) {
const result = await getBattleDataAPI(); const result = await getBattleDataAPI();
@@ -90,16 +97,15 @@ onLoad(async (options) => {
<template> <template>
<Container title="好友约战" :showBackToGame="true"> <Container title="好友约战" :showBackToGame="true">
<view :style="{ width: '100%', height: '100%' }"> <view :style="{ width: '100%', height: '100%' }">
<Guide> <GuideTwo>
<view class="guide-tips"> <text :style="{color: 'rgba(255,217,71,0.8)'}">约上朋友开几局欢乐多不寂寞</text>
<text>约上朋友开几局欢乐多不寂寞</text> <text>一起练升级更快早日加入全国排位赛</text>
<text>一起练升级更快早日加入全国排位赛</text> </GuideTwo>
</view>
</Guide>
<view class="my-data"> <view class="my-data">
<view> <view>
<Avatar :rankLvl="user.rankLvl" :src="user.avatar" :size="30" /> <Avatar :rankLvl="user.rankLvl" :src="user.avatar" :size="30" />
<text class="truncate">{{ user.nickName }}</text> <text class="truncate">{{ user.nickName }}</text>
<text class="my-record-btn" @click="goMyRecord">我的战绩</text>
</view> </view>
<view> <view>
<view> <view>
@@ -119,16 +125,9 @@ onLoad(async (options) => {
<view> <view>
<view class="stars"> <view class="stars">
<block v-for="i in 5" :key="i"> <block v-for="i in 5" :key="i">
<image <image v-if="data.totalWinningRate >= i * 0.2" src="../static/star-full.png" mode="widthFix" />
v-if="data.totalWinningRate >= i * 0.2" <image v-else-if="data.totalWinningRate >= (i - 1) * 0.2 + 0.1" src="../static/star-half.png"
src="../static/star-full.png" mode="widthFix" />
mode="widthFix"
/>
<image
v-else-if="data.totalWinningRate >= (i - 1) * 0.2 + 0.1"
src="../static/star-half.png"
mode="widthFix"
/>
<image v-else src="../static/star-empty.png" mode="widthFix" /> <image v-else src="../static/star-empty.png" mode="widthFix" />
</block> </block>
</view> </view>
@@ -139,19 +138,12 @@ onLoad(async (options) => {
<view class="founded-room"> <view class="founded-room">
<image src="../static/founded-room.png" mode="widthFix" /> <image src="../static/founded-room.png" mode="widthFix" />
<view> <view>
<input <input placeholder="输入房间号" v-model="roomNumber" placeholder-style="color: #ccc" />
placeholder="输入房间号"
v-model="roomNumber"
placeholder-style="color: #ccc"
/>
<view @click="enterRoom(roomNumber)">进入房间</view> <view @click="enterRoom(roomNumber)">进入房间</view>
</view> </view>
</view> </view>
<view class="create-room"> <view class="create-room">
<image <image src="https://static.shelingxingqiu.com/attachment/2025-07-15/dbcejys872iyun92h6.png" mode="widthFix" />
src="https://static.shelingxingqiu.com/attachment/2025-07-15/dbcejys872iyun92h6.png"
mode="widthFix"
/>
<image src="../static/room-notfound-title.png" mode="widthFix" /> <image src="../static/room-notfound-title.png" mode="widthFix" />
<view> <view>
<image :src="user.avatar" mode="widthFix" /> <image :src="user.avatar" mode="widthFix" />
@@ -166,11 +158,7 @@ onLoad(async (options) => {
</SButton> </SButton>
</view> </view>
</view> </view>
<SModal <SModal :show="showModal" :onClose="() => (showModal = false)" height="716rpx">
:show="showModal"
:onClose="() => (showModal = false)"
height="716rpx"
>
<view v-if="warnning" class="warnning"> <view v-if="warnning" class="warnning">
{{ warnning }} {{ warnning }}
</view> </view>
@@ -192,10 +180,12 @@ onLoad(async (options) => {
border-radius: 10px; border-radius: 10px;
padding: 15px; padding: 15px;
} }
.founded-room > image {
.founded-room>image {
width: 16vw; width: 16vw;
} }
.founded-room > view {
.founded-room>view {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@@ -205,14 +195,16 @@ onLoad(async (options) => {
width: 100%; width: 100%;
overflow: hidden; overflow: hidden;
} }
.founded-room > view > input {
.founded-room>view>input {
width: 70%; width: 70%;
text-align: center; text-align: center;
font-size: 14px; font-size: 14px;
height: 40px; height: 40px;
color: #000; color: #000;
} }
.founded-room > view > view {
.founded-room>view>view {
background-color: #fed847; background-color: #fed847;
width: 30%; width: 30%;
line-height: 40px; line-height: 40px;
@@ -223,38 +215,45 @@ onLoad(async (options) => {
color: #000; color: #000;
text-align: center; text-align: center;
} }
.create-room { .create-room {
position: relative; position: relative;
margin: 15px; margin: 15px;
height: 50vw; height: 50vw;
} }
.create-room > image:first-of-type {
.create-room>image:first-of-type {
position: absolute; position: absolute;
width: 100%; width: 100%;
} }
.create-room > image:nth-of-type(2) {
.create-room>image:nth-of-type(2) {
padding: 15px; padding: 15px;
width: 25vw; width: 25vw;
position: relative; position: relative;
} }
.create-room > view:nth-child(3) {
.create-room>view:nth-child(3) {
margin: 12vw auto; margin: 12vw auto;
position: relative; position: relative;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.create-room > view > image:first-child {
.create-room>view>image:first-child {
width: 19vw; width: 19vw;
transform: translateY(-60%); transform: translateY(-60%);
border-radius: 50%; border-radius: 50%;
position: relative; position: relative;
} }
.create-room > view > image:nth-child(2) {
.create-room>view>image:nth-child(2) {
width: 37vw; width: 37vw;
position: relative; position: relative;
} }
.create-room > view > view:nth-child(3) {
.create-room>view>view:nth-child(3) {
position: relative; position: relative;
width: 19vw; width: 19vw;
height: 19vw; height: 19vw;
@@ -265,10 +264,12 @@ onLoad(async (options) => {
align-items: center; align-items: center;
transform: translateY(60%); transform: translateY(60%);
} }
.create-room > view > view:nth-child(3) > image {
.create-room>view>view:nth-child(3)>image {
width: 20px; width: 20px;
margin-right: 2px; margin-right: 2px;
} }
.warnning { .warnning {
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -277,6 +278,7 @@ onLoad(async (options) => {
align-items: center; align-items: center;
color: #fff9; color: #fff9;
} }
.my-data { .my-data {
width: calc(100% - 30px); width: calc(100% - 30px);
margin: 15px; margin: 15px;
@@ -286,12 +288,14 @@ onLoad(async (options) => {
overflow: hidden; overflow: hidden;
background-color: #54431d33; background-color: #54431d33;
} }
.my-data > view {
.my-data>view {
width: 100%; width: 100%;
display: flex; display: flex;
color: #fff9; color: #fff9;
} }
.my-data > view:first-child {
.my-data>view:first-child {
width: calc(100% - 30px); width: calc(100% - 30px);
align-items: flex-end; align-items: flex-end;
padding-bottom: 15px; padding-bottom: 15px;
@@ -299,16 +303,29 @@ onLoad(async (options) => {
margin: 15px; margin: 15px;
margin-bottom: 0; margin-bottom: 0;
} }
.my-data > view:first-child > text {
.my-data>view:first-child>.my-record-btn {
font-weight: 400;
font-size: 24rpx;
color: #76D4FF;
text-align: center;
font-style: normal;
width: auto;
margin-left: auto;
}
.my-data>view:first-child>text {
color: #fff; color: #fff;
font-size: 17px; font-size: 17px;
margin-left: 10px; margin-left: 10px;
width: 120px; width: 120px;
} }
.my-data > view:last-child {
.my-data>view:last-child {
margin-bottom: 15px; margin-bottom: 15px;
} }
.my-data > view:last-child > view {
.my-data>view:last-child>view {
width: 33%; width: 33%;
margin-top: 15px; margin-top: 15px;
display: flex; display: flex;
@@ -316,25 +333,30 @@ onLoad(async (options) => {
align-items: center; align-items: center;
font-size: 12px; font-size: 12px;
} }
.my-data > view:last-child > view > view {
.my-data>view:last-child>view>view {
margin-bottom: 5px; margin-bottom: 5px;
} }
.my-data > view:last-child > view > view > text:first-child {
.my-data>view:last-child>view>view>text:first-child {
color: #fff; color: #fff;
font-size: 20px; font-size: 20px;
margin-right: 5px; margin-right: 5px;
transform: translateY(4px); transform: translateY(4px);
} }
.my-data > view:last-child > view:nth-child(2) {
.my-data>view:last-child>view:nth-child(2) {
border-left: 1px solid #48494e; border-left: 1px solid #48494e;
border-right: 1px solid #48494e; border-right: 1px solid #48494e;
} }
.my-data > view:last-child > view > view {
.my-data>view:last-child>view>view {
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
height: 20px; height: 20px;
} }
.stars > image {
.stars>image {
width: 4vw; width: 4vw;
height: 4vw; height: 4vw;
margin: 0 1px; margin: 0 1px;

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
src/static/share2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

BIN
src/static/shooter2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB