细节调整

This commit is contained in:
kron
2025-07-11 00:47:34 +08:00
parent e764160633
commit 566f07080a
17 changed files with 113 additions and 110 deletions

View File

@@ -186,4 +186,11 @@ button::after {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.user-row {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 15px;
padding-top: 20px;
}
</style> </style>

View File

@@ -77,7 +77,7 @@ watch(
/> />
<view v-if="rank > 3" class="rank-view">{{ rank }}</view> <view v-if="rank > 3" class="rank-view">{{ rank }}</view>
<image <image
:src="src" :src="src || '../static/user-icon.png'"
mode="widthFix" mode="widthFix"
:style="{ :style="{
width: size + 'px', width: size + 'px',

View File

@@ -52,19 +52,19 @@ const props = defineProps({
}); });
const showRoundTips = ref(false); const showRoundTips = ref(false);
const startCount = ref(false); // const startCount = ref(false);
const prevLength = ref(0); const prevLength = ref(0);
const timer = ref(null); const timer = ref(null);
watch( // watch(
() => props.start, // () => props.start,
(newVal) => { // (newVal) => {
startCount.value = newVal; // startCount.value = newVal;
}, // },
{ // {
immediate: true, // immediate: true,
} // }
); // );
watch( watch(
() => props.scores, () => props.scores,
@@ -174,7 +174,7 @@ const simulShoot2 = async () => {
? 'green' ? 'green'
: 'red', : 'red',
}" }"
>{{ bow.ring }}</view >{{ index + 1 }}</view
> >
</block> </block>
<block v-for="(bow, index) in blueScores" :key="index"> <block v-for="(bow, index) in blueScores" :key="index">
@@ -205,7 +205,7 @@ const simulShoot2 = async () => {
<text :style="{ color: '#fff', wordBreak: 'break-all' }">{{ <text :style="{ color: '#fff', wordBreak: 'break-all' }">{{
scores.length ? scores[scores.length - 1] : "" scores.length ? scores[scores.length - 1] : ""
}}</text> }}</text>
<StartCountdown :start="startCount" /> <!-- <StartCountdown :start="startCount" /> -->
</view> </view>
</template> </template>

View File

@@ -46,6 +46,9 @@ onShow(() => {
const backToGame = debounce(async () => { const backToGame = debounce(async () => {
const result = await getCurrentGameAPI(); const result = await getCurrentGameAPI();
}); });
const goBack = () => {
uni.navigateBack();
};
</script> </script>
<template> <template>
@@ -62,7 +65,7 @@ const backToGame = debounce(async () => {
<slot></slot> <slot></slot>
</view> </view>
<ScreenHint :show="showHint"> <ScreenHint :show="showHint">
<view v-if="hintType === 1" class="back-to-game"> <view v-if="hintType === 1" class="tip-content">
<text>您还有正在进行中的对局是否进入</text> <text>您还有正在进行中的对局是否进入</text>
<view> <view>
<button hover-class="none" @click="backToGame">进入</button> <button hover-class="none" @click="backToGame">进入</button>
@@ -71,6 +74,16 @@ const backToGame = debounce(async () => {
</button> </button>
</view> </view>
</view> </view>
<view v-if="hintType === 2" class="tip-content">
<text>离开比赛可能会导致比赛失败</text>
<text>确认离开吗</text>
<view>
<button hover-class="none" @click="goBack">离开比赛</button>
<button hover-class="none" @click="() => (showHint = false)">
继续比赛
</button>
</view>
</view>
</ScreenHint> </ScreenHint>
</view> </view>
</template> </template>
@@ -86,7 +99,7 @@ const backToGame = debounce(async () => {
justify-content: space-between; justify-content: space-between;
overflow-x: hidden; overflow-x: hidden;
} }
.back-to-game { .tip-content {
flex-direction: column; flex-direction: column;
display: flex; display: flex;
align-items: center; align-items: center;
@@ -95,14 +108,17 @@ const backToGame = debounce(async () => {
width: 100%; width: 100%;
font-size: 14px; font-size: 14px;
} }
.back-to-game > view { .tip-content > text {
text-align: center;
}
.tip-content > view {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-around; justify-content: space-around;
margin-top: 50rpx; margin-top: 50rpx;
width: 100%; width: 100%;
} }
.back-to-game > view > button { .tip-content > view > button {
padding: 12px; padding: 12px;
border-radius: 20px; border-radius: 20px;
background-color: #fff6; background-color: #fff6;
@@ -110,7 +126,7 @@ const backToGame = debounce(async () => {
width: 45%; width: 45%;
font-size: 16px; font-size: 16px;
} }
.back-to-game > view > button:first-child { .tip-content > view > button:first-child {
background-color: #fed847; background-color: #fed847;
color: #000; color: #000;
} }

View File

@@ -30,18 +30,29 @@ onMounted(() => {
<image src="../static/back.png" mode="widthFix" /> <image src="../static/back.png" mode="widthFix" />
</view> </view>
<view> <view>
<block v-if="'凹造型,感知距离,小试牛刀'.indexOf(title) === -1"> <block
v-if="
'-凹造型-感知距离-小试牛刀'.indexOf(title) === -1 ||
'-凹造型-感知距离-小试牛刀'.indexOf(title) === 10
"
>
<text>{{ title }}</text> <text>{{ title }}</text>
</block> </block>
<block v-if="title && '凹造型,感知距离,小试牛刀'.indexOf(title) !== -1"> <block
v-if="
title &&
'-凹造型-感知距离-小试牛刀'.indexOf(title) !== -1 &&
'-凹造型-感知距离-小试牛刀'.indexOf(title) !== 10
"
>
<view class="first-try-steps"> <view class="first-try-steps">
<text :class="title === '凹造型' ? 'current-step' : ''">凹造型</text> <text :class="title === '-凹造型' ? 'current-step' : ''">凹造型</text>
<text>-</text> <text>-</text>
<text :class="title === '感知距离' ? 'current-step' : ''" <text :class="title === '-感知距离' ? 'current-step' : ''"
>感知距离</text >感知距离</text
> >
<text>-</text> <text>-</text>
<text :class="title === '小试牛刀' ? 'current-step' : ''" <text :class="title === '-小试牛刀' ? 'current-step' : ''"
>小试牛刀</text >小试牛刀</text
> >
</view> </view>
@@ -87,5 +98,6 @@ onMounted(() => {
.current-step { .current-step {
font-size: 16px; font-size: 16px;
color: #fff; color: #fff;
font-weight: bold;
} }
</style> </style>

View File

@@ -133,7 +133,7 @@ const rowCount = new Array(6).fill(0);
display: flex; display: flex;
} }
.container > view:nth-child(2) > view text { .container > view:nth-child(2) > view text {
width: 32px; width: 36px;
text-align: center; text-align: center;
display: block; display: block;
} }
@@ -146,13 +146,13 @@ const rowCount = new Array(6).fill(0);
} }
.container > view:nth-child(3) { .container > view:nth-child(3) {
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
padding-left: 10px; padding-left: 10px;
width: 100%;
} }
.container > view:nth-child(3) > text:first-child { .container > view:nth-child(3) > text {
width: 40px; text-align: center;
} margin: 5px 0;
.container > view:nth-child(3) > text:last-child {
width: 60px;
} }
</style> </style>

View File

@@ -62,15 +62,15 @@ watch(
} }
if (!oldVal && newVal === true) { if (!oldVal && newVal === true) {
remain.value = props.total; remain.value = props.total;
setTimeout(() => { // setTimeout(() => {
timer.value = setInterval(() => { timer.value = setInterval(() => {
if (remain.value > 0) { if (remain.value > 0) {
remain.value--; remain.value--;
} else { } else {
props.onTimeIsUp(); props.onTimeIsUp();
} }
}, 1000); }, 1000);
}, 3000); // }, 3000);
} else { } else {
if (timer.value) clearInterval(timer.value); if (timer.value) clearInterval(timer.value);
} }

View File

@@ -64,19 +64,27 @@ onUnmounted(() => {
<BowPower :power="power" /> <BowPower :power="power" />
</view> </view>
</Guide> </Guide>
<view class="user-row">
<Avatar :src="user.avatar" :size="35" />
<BowPower :power="power" />
</view>
<image <image
class="text-bg" class="text-bg"
src="https://api.shelingxingqiu.com/attachment/2025-07-05/db3skuq1n9rj4fmld4.png" src="https://api.shelingxingqiu.com/attachment/2025-07-05/db3skuq1n9rj4fmld4.png"
mode="widthFix" mode="widthFix"
/> />
<view class="warnning-text" v-if="distance > 0"> <view class="warnning-text">
<text>当前距离{{ distance }}</text> <block v-if="distance > 0">
<text v-if="distance >= 5">已达到距离要求</text> <text>当前距离{{ distance }}</text>
<text v-else>请调整站位</text> <text v-if="distance >= 5">已达到距离要求</text>
<text v-else>请调整站位</text>
</block>
<block v-else>
<text>大人请射箭</text>
</block>
</view> </view>
<view class="debug-text">{{ debugInfo }}</view> <view class="debug-text">{{ debugInfo }}</view>
<view> <view>
<Avatar :src="user.avatar" :size="35" />
<view class="simul" @click="simulShoot" :style="{ color: '#fff' }"> <view class="simul" @click="simulShoot" :style="{ color: '#fff' }">
模拟射箭 模拟射箭
</view> </view>
@@ -92,6 +100,7 @@ onUnmounted(() => {
} }
.text-bg { .text-bg {
width: 100%; width: 100%;
transform: translateY(-50px);
} }
.warnning-text { .warnning-text {
position: fixed; position: fixed;
@@ -100,8 +109,9 @@ onUnmounted(() => {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
width: 54vw;
left: calc(50% - 27vw); left: calc(50% - 27vw);
top: 30%; top: 34%;
} }
.warnning-text > text { .warnning-text > text {
width: 60vw; width: 60vw;
@@ -113,6 +123,7 @@ onUnmounted(() => {
align-items: center; align-items: center;
padding: 15px; padding: 15px;
margin-top: -27vw; margin-top: -27vw;
position: relative;
} }
.debug-text { .debug-text {
position: fixed; position: fixed;

View File

@@ -305,6 +305,14 @@ const setClipboardData = () => {
}); });
}; };
const onBack = () => {
if (battleId.value) {
uni.$showHint(2);
} else {
showModal.value = true;
}
};
onMounted(() => { onMounted(() => {
uni.$on("socket-inbox", onReceiveMessage); uni.$on("socket-inbox", onReceiveMessage);
}); });
@@ -318,11 +326,7 @@ onUnmounted(() => {
</script> </script>
<template> <template>
<Container <Container title="对战" :onBack="onBack" :bgType="battleId ? 1 : 0">
title="对战"
:onBack="() => (showModal = true)"
:bgType="battleId ? 1 : 0"
>
<view class="standby-phase" v-if="step === 1"> <view class="standby-phase" v-if="step === 1">
<Guide> <Guide>
<view class="battle-guide"> <view class="battle-guide">

View File

@@ -83,16 +83,16 @@ onUnmounted(() => {
const nextStep = async () => { const nextStep = async () => {
if (step.value === 0) { if (step.value === 0) {
step.value = 1; step.value = 1;
title.value = "凹造型"; title.value = "-凹造型";
} else if (step.value === 1) { } else if (step.value === 1) {
// btnDisabled.value = true; // btnDisabled.value = true;
step.value = 2; step.value = 2;
title.value = "感知距离"; title.value = "-感知距离";
} else if (step.value === 2) { } else if (step.value === 2) {
step.value = 3; step.value = 3;
title.value = "小试牛刀"; title.value = "-小试牛刀";
} else if (step.value === 3) { } else if (step.value === 3) {
title.value = "新手试炼场"; title.value = "小试牛刀";
await createPractise(total); await createPractise(total);
scores.value = []; scores.value = [];
step.value = 4; step.value = 4;
@@ -208,7 +208,7 @@ const onClose = () => {
/> />
<TestDistance v-if="step === 2" :guide="false" /> <TestDistance v-if="step === 2" :guide="false" />
<view <view
class="infos" class="user-row"
v-if="step === 4" v-if="step === 4"
:style="{ marginBottom: step === 2 ? '40px' : '0' }" :style="{ marginBottom: step === 2 ? '40px' : '0' }"
> >
@@ -256,15 +256,4 @@ const onClose = () => {
width: calc(100% - 20px); width: calc(100% - 20px);
margin: 0 10px; margin: 0 10px;
} }
.infos {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 15px;
padding-top: 20px;
}
.infos > text {
font-size: 20px;
color: #fed847;
}
</style> </style>

View File

@@ -152,7 +152,9 @@ const comingSoon = () => {
<image v-if="i === 3" src="../static/champ3.png" /> <image v-if="i === 3" src="../static/champ3.png" />
<view v-if="i > 3">{{ i }}</view> <view v-if="i > 3">{{ i }}</view>
<image <image
:src="rankData.rank[i - 1].avatar" :src="
rankData.rank[i - 1].avatar || '../static/user-icon.png'
"
mode="aspectFill" mode="aspectFill"
/> />
</view> </view>

View File

@@ -12,7 +12,6 @@ import SButton from "@/components/SButton.vue";
import Avatar from "@/components/Avatar.vue"; import Avatar from "@/components/Avatar.vue";
import ScreenHint from "@/components/ScreenHint.vue"; import ScreenHint from "@/components/ScreenHint.vue";
import Matching from "@/components/Matching.vue"; import Matching from "@/components/Matching.vue";
import SModal from "@/components/SModal.vue";
import TestDistance from "@/components/TestDistance.vue"; import TestDistance from "@/components/TestDistance.vue";
import { matchGameAPI, readyGameAPI } from "@/apis"; import { matchGameAPI, readyGameAPI } from "@/apis";
import { MESSAGETYPES, getMessageTypeName } from "@/constants"; import { MESSAGETYPES, getMessageTypeName } from "@/constants";
@@ -36,7 +35,6 @@ const players = ref([]);
const playersScores = ref({}); const playersScores = ref({});
const halfTimeTip = ref(false); const halfTimeTip = ref(false);
const onComplete = ref(null); const onComplete = ref(null);
const showModal = ref(false);
onLoad(async (options) => { onLoad(async (options) => {
if (options.battleId) { if (options.battleId) {
@@ -143,7 +141,7 @@ async function onReceiveMessage(messages = []) {
} }
const onBack = () => { const onBack = () => {
if (battleId.value) { if (battleId.value) {
showModal.value = true; uni.$showHint(2);
} else { } else {
uni.navigateBack(); uni.navigateBack();
} }
@@ -176,7 +174,7 @@ onUnmounted(() => {
:tips="tips" :tips="tips"
:total="countDown" :total="countDown"
/> />
<view v-if="start" class="infos"> <view v-if="start" class="user-row">
<Avatar :src="user.avatar" :size="35" /> <Avatar :src="user.avatar" :size="35" />
<BowPower :power="power" /> <BowPower :power="power" />
</view> </view>
@@ -219,13 +217,6 @@ onUnmounted(() => {
:onComplete="onComplete" :onComplete="onComplete"
/> />
</block> </block>
<SModal :show="showModal" :onClose="() => (showModal = false)">
<view class="modal">
<view class="modal" :style="{ color: '#fff9' }"
>排位赛进行过程无法退出</view
>
</view>
</SModal>
</view> </view>
<view :style="{ marginBottom: '20px' }"> <view :style="{ marginBottom: '20px' }">
<SButton v-if="battleId && !start" :onClick="readyToGo">准备完毕</SButton> <SButton v-if="battleId && !start" :onClick="readyToGo">准备完毕</SButton>
@@ -238,13 +229,6 @@ onUnmounted(() => {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.infos {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 15px;
padding-top: 15px;
}
.half-time-tip { .half-time-tip {
width: 100%; width: 100%;
display: flex; display: flex;

View File

@@ -95,7 +95,7 @@ onUnmounted(() => {
:start="start" :start="start"
:total="120" :total="120"
/> />
<view class="infos"> <view class="user-row">
<Avatar :src="user.avatar" :size="35" /> <Avatar :src="user.avatar" :size="35" />
<BowPower :power="power" /> <BowPower :power="power" />
</view> </view>
@@ -126,11 +126,4 @@ onUnmounted(() => {
</template> </template>
<style scoped> <style scoped>
.infos {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 15px;
padding-top: 15px;
}
</style> </style>

View File

@@ -93,7 +93,7 @@ onUnmounted(() => {
:tips="`请连续射箭${total}支`" :tips="`请连续射箭${total}支`"
:total="120" :total="120"
/> />
<view class="infos"> <view class="user-row">
<Avatar :src="user.avatar" :size="35" /> <Avatar :src="user.avatar" :size="35" />
<BowPower :power="power" /> <BowPower :power="power" />
</view> </view>
@@ -131,11 +131,4 @@ onUnmounted(() => {
</template> </template>
<style scoped> <style scoped>
.infos {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 15px;
padding-top: 15px;
}
</style> </style>

View File

@@ -39,7 +39,6 @@ const handleSelect = (index) => {
const onScrollView = (e) => { const onScrollView = (e) => {
headerColor.value = e.detail.scrollTop > 100 ? "orange" : ""; headerColor.value = e.detail.scrollTop > 100 ? "orange" : "";
console.log(1111, e.detail);
}; };
const subTitles = ["排位赛积分", "本周MVP次数", "本周十环次数"]; const subTitles = ["排位赛积分", "本周MVP次数", "本周十环次数"];

View File

@@ -262,7 +262,7 @@ const toRankListPage = () => {
/> />
<view v-if="index > 2">{{ index + 1 }}</view> <view v-if="index > 2">{{ index + 1 }}</view>
<image <image
:src="item.avatar" :src="item.avatar || '../static/user-icon.png'"
mode="widthFix" mode="widthFix"
:style="{ borderColor: index < 3 ? topThreeColors[index] : '' }" :style="{ borderColor: index < 3 ? topThreeColors[index] : '' }"
/> />

View File

@@ -12,7 +12,6 @@ import BattleFooter from "@/components/BattleFooter.vue";
import ScreenHint from "@/components/ScreenHint.vue"; import ScreenHint from "@/components/ScreenHint.vue";
import SButton from "@/components/SButton.vue"; import SButton from "@/components/SButton.vue";
import Matching from "@/components/Matching.vue"; import Matching from "@/components/Matching.vue";
import SModal from "@/components/SModal.vue";
import RoundEndTip from "@/components/RoundEndTip.vue"; import RoundEndTip from "@/components/RoundEndTip.vue";
import TestDistance from "@/components/TestDistance.vue"; import TestDistance from "@/components/TestDistance.vue";
import { matchGameAPI, readyGameAPI } from "@/apis"; import { matchGameAPI, readyGameAPI } from "@/apis";
@@ -43,7 +42,6 @@ const redPoints = ref(0);
const bluePoints = ref(0); const bluePoints = ref(0);
const showRoundTip = ref(false); const showRoundTip = ref(false);
const onComplete = ref(null); const onComplete = ref(null);
const showModal = ref(false);
const isFinalShoot = ref(false); const isFinalShoot = ref(false);
onLoad(async (options) => { onLoad(async (options) => {
@@ -172,7 +170,7 @@ async function onReceiveMessage(messages = []) {
} }
const onBack = () => { const onBack = () => {
if (battleId.value) { if (battleId.value) {
showModal.value = true; uni.$showHint(2);
} else { } else {
uni.navigateBack(); uni.navigateBack();
} }
@@ -248,11 +246,6 @@ onUnmounted(() => {
:onComplete="onComplete" :onComplete="onComplete"
/> />
</block> </block>
<SModal :show="showModal" :onClose="() => (showModal = false)">
<view class="modal" :style="{ color: '#fff9' }"
>排位赛进行过程无法退出</view
>
</SModal>
</view> </view>
<view :style="{ marginBottom: '20px' }"> <view :style="{ marginBottom: '20px' }">
<SButton v-if="battleId && !start" :onClick="readyToGo">准备完毕</SButton> <SButton v-if="battleId && !start" :onClick="readyToGo">准备完毕</SButton>