Files
shoot-miniprograms/src/components/RoundEndTip.vue
2026-02-04 17:45:57 +08:00

173 lines
3.8 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 { ref, onMounted, onBeforeUnmount } from "vue";
const props = defineProps({
isFinal: {
type: Boolean,
default: false,
},
round: {
type: Number,
default: 0,
},
bluePoint: {
type: Number,
default: 0,
},
redPoint: {
type: Number,
default: 0,
},
roundData: {
type: Object,
default: () => ({}),
},
onAutoClose: {
type: Function,
default: () => {},
},
});
const count = ref(props.isFinal ? 10 : 3);
const tiemr = ref(null);
function startCount() {
if (tiemr.value) clearInterval(tiemr.value);
tiemr.value = setInterval(() => {
if (count.value === 0) {
clearInterval(tiemr.value);
props.onAutoClose();
} else count.value -= 1;
}, 1000);
}
onMounted(() => {
startCount();
});
onBeforeUnmount(() => {
if (tiemr.value) clearInterval(tiemr.value);
});
</script>
<template>
<view class="round-end-tip">
<text>{{ round }}轮射箭结束</text>
<block v-if="!isFinal">
<view class="point-view1" v-if="bluePoint !== 0 || redPoint !== 0">
<text>本轮蓝队</text>
<text>{{
(roundData.shoots[1] || []).reduce(
(last, next) => last + next.ring,
0
)
}}</text>
<text>红队</text>
<text>{{
(roundData.shoots[2] || []).reduce(
(last, next) => last + next.ring,
0
)
}}</text>
<text></text>
</view>
<text
v-if="bluePoint === 0 && redPoint === 0"
:style="{ marginTop: '20px' }"
>
连续3个来回双方均无人射箭比赛取消
</text>
<text v-if="bluePoint !== 0 && bluePoint === redPoint">
红队蓝队各得<text :style="{ color: '#fed847', margin: '0 5px' }">{{
redPoint
}}</text
>
</text>
<text v-if="bluePoint > redPoint">
蓝队获胜<text :style="{ color: '#fed847', margin: '0 5px' }">{{
bluePoint
}}</text
>
</text>
<text v-if="bluePoint < redPoint">
红队获胜<text :style="{ color: '#fed847', margin: '0 5px' }">{{
redPoint
}}</text
>
</text>
</block>
<block v-if="isFinal">
<view class="point-view2">
<text>蓝队</text>
<text>{{ bluePoint }}</text>
<text>红队</text>
<text>{{ redPoint }}</text>
<text></text>
</view>
<text>同分僵局最后一箭定江山</text>
<view class="final-shoot">
<text>{{ count }}</text>
<text>秒后蓝红双方</text>
<text>决金箭</text>
<text>一箭决胜负</text>
</view>
</block>
</view>
</template>
<style scoped>
.round-end-tip {
width: 100%;
color: #fff9;
display: flex;
flex-direction: column;
align-items: center;
font-size: 32rpx;
}
.round-end-tip > text:first-child {
font-size: 36rpx;
color: #fff;
}
.point-view1 {
display: flex;
align-items: center;
justify-content: center;
margin-top: 20px;
margin-bottom: 3px;
}
.point-view1 > text:nth-child(2),
.point-view1 > text:nth-child(4) {
color: #fed847;
margin: 0 5px;
}
.point-view2 {
margin: 12px 0;
font-size: 48rpx;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
}
.point-view2 > text:nth-child(2),
.point-view2 > text:nth-child(4) {
color: #fed847;
width: 30px;
text-align: center;
font-size: 30px;
}
.final-shoot {
display: flex;
align-items: center;
justify-content: center;
margin-top: 10px;
font-size: 28rpx;
word-break: keep-all;
}
.final-shoot > text:nth-child(1) {
width: 20px;
text-align: right;
}
.final-shoot > text:nth-child(1),
.final-shoot > text:nth-child(3) {
font-size: 32rpx;
color: #fed847;
margin-left: 10px;
margin-right: 5px;
}
</style>