From 8d8ede5397bf39ea7eb843bf208d5dbf6b048b9f Mon Sep 17 00:00:00 2001 From: zhangyi <690096405@qq.com> Date: Thu, 18 Jun 2026 16:18:55 +0800 Subject: [PATCH] =?UTF-8?q?update:vip=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 63 +++++++ src/components/AppBackground.vue | 2 +- src/components/BackToGame.vue | 29 ++- src/components/BattleHeader.vue | 48 ++++- src/components/BowData.vue | 29 ++- src/components/BowTarget.vue | 56 +++++- src/components/Header.vue | 22 ++- src/components/PlayerScore.vue | 26 ++- src/components/PointRankItem.vue | 25 ++- src/components/UserHeader.vue | 26 ++- src/pages.json | 6 +- src/pages/friend-battle-result.vue | 79 +++++++- src/pages/friend-battle.vue | 25 ++- src/pages/match-detail.vue | 2 +- src/pages/melee-battle.vue | 8 +- src/pages/melee-bow-data.vue | 57 +++++- src/pages/member/be-vip.vue | 15 +- src/pages/member/order-detail.vue | 42 ++++- src/pages/member/orders.vue | 11 +- src/pages/mine-bow-data.vue | 4 +- src/pages/my-device.vue | 39 +++- src/pages/practise-one.vue | 5 + src/pages/practise-two.vue | 5 + src/pages/practise.vue | 24 ++- src/pages/rank-list.vue | 49 ++++- src/pages/ranking.vue | 69 ++++++- .../team-battle/components/BackToGame.vue | 29 ++- .../team-battle/components/BattleFooter.vue | 4 +- .../team-battle/components/BattleHeader.vue | 48 ++++- .../team-battle/components/BowTarget.vue | 83 ++++++++- .../team-battle/components/TeamAvatars.vue | 40 +++- src/pages/team-battle/index.vue | 20 +- src/pages/team-battle/team-bow-data.vue | 171 ++++++++++++++++++ src/static/vip/svip-jian.png | Bin 44418 -> 15635 bytes src/static/vip/svip-lie.png | Bin 25697 -> 11193 bytes src/static/vip/svip-title.png | Bin 36402 -> 0 bytes src/static/vip/svip-title2.png | Bin 32454 -> 0 bytes src/static/vip/svip-xuan.png | Bin 0 -> 898 bytes src/static/vip/vip-bg.png | Bin 114063 -> 0 bytes src/static/vip/vip-title.png | Bin 38701 -> 0 bytes src/static/vip/vip-title2.png | Bin 33573 -> 0 bytes 41 files changed, 1054 insertions(+), 107 deletions(-) create mode 100644 src/pages/team-battle/team-bow-data.vue delete mode 100644 src/static/vip/svip-title.png delete mode 100644 src/static/vip/svip-title2.png create mode 100644 src/static/vip/svip-xuan.png delete mode 100644 src/static/vip/vip-bg.png delete mode 100644 src/static/vip/vip-title.png delete mode 100644 src/static/vip/vip-title2.png diff --git a/src/App.vue b/src/App.vue index c852548..6b3b1f0 100644 --- a/src/App.vue +++ b/src/App.vue @@ -250,6 +250,69 @@ text-overflow: ellipsis; } + .member-nickname { + position: relative; + display: inline-flex; + max-width: 100%; + overflow: hidden; + } + + .member-nickname__text, + .member-nickname__shine { + display: block; + max-width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .member-nickname--vip .member-nickname__text { + color: #E7BA80; + } + + .member-nickname--svip .member-nickname__text { + background: linear-gradient(90deg, #ffb86c, #ff4fd8, #7c5cff, #35d6ff); + -webkit-background-clip: text; + background-clip: text; + color: transparent; + } + + .member-nickname__shine { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: linear-gradient( + 110deg, + transparent 0%, + transparent 38%, + rgba(255, 255, 255, 0.15) 45%, + rgba(255, 255, 255, 1) 50%, + rgba(255, 255, 255, 0.15) 55%, + transparent 62%, + transparent 100% + ); + background-size: 220% 100%; + background-position: 120% 0; + -webkit-background-clip: text; + background-clip: text; + color: transparent; + pointer-events: none; + animation: memberNicknameShine 3.5s infinite ease-in-out; + } + + @keyframes memberNicknameShine { + 0%, + 50% { + background-position: 120% 0; + } + + 100% { + background-position: -200% 0; + } + } + .modal { height: 100%; display: flex; diff --git a/src/components/AppBackground.vue b/src/components/AppBackground.vue index 32bfcb7..00feb51 100644 --- a/src/components/AppBackground.vue +++ b/src/components/AppBackground.vue @@ -60,7 +60,7 @@ const props = defineProps({ diff --git a/src/components/BackToGame.vue b/src/components/BackToGame.vue index b5a509c..5297d74 100644 --- a/src/components/BackToGame.vue +++ b/src/components/BackToGame.vue @@ -18,12 +18,14 @@ const props = defineProps({ }, }); const loading = ref(false); +const navigating = ref(false); /** 统一获取当前环境 token,用于守卫:无有效 token 时不发起接口请求 */ const getToken = () => uni.getStorageSync(`${uni.getAccountInfoSync().miniProgram.envVersion}_token`); onShow(async () => { + navigating.value = false; if (user.value.id && getToken()) { setTimeout(async () => { const state = await getUserGameState(); @@ -45,28 +47,35 @@ watch( } ); +const navigateOnce = (url) => + new Promise((resolve, reject) => { + navigating.value = true; + uni.navigateTo({ + url, + success: resolve, + fail: (error) => { + navigating.value = false; + reject(error); + }, + }); + }); + const onClick = debounce(async () => { - if (loading.value) return; + if (loading.value || navigating.value) return; try { loading.value = true; const result = await getBattleAPI(); if (result && result.matchId) { await uni.$checkAudio(); if (result.mode <= 3) { - uni.navigateTo({ - url: `/pages/team-battle/index?battleId=${result.matchId}`, - }); + await navigateOnce(`/pages/team-battle/index?battleId=${result.matchId}`); } else { - uni.navigateTo({ - url: `/pages/melee-battle?battleId=${result.matchId}`, - }); + await navigateOnce(`/pages/melee-battle?battleId=${result.matchId}`); } return; } if (game.value.roomID) { - uni.navigateTo({ - url: "/pages/battle-room?roomNumber=" + game.value.roomID, - }); + await navigateOnce("/pages/battle-room?roomNumber=" + game.value.roomID); } else { updateGame(false, ""); } diff --git a/src/components/BattleHeader.vue b/src/components/BattleHeader.vue index b12d84f..1ade377 100644 --- a/src/components/BattleHeader.vue +++ b/src/components/BattleHeader.vue @@ -27,6 +27,14 @@ defineProps({ default: true, }, }); + +const getMemberNicknameClass = (player = {}) => [ + "member-nickname", + player.vip === true && player.sVip !== true ? "member-nickname--vip" : "", + player.sVip === true ? "member-nickname--svip" : "", +]; + +const isMember = (player = {}) => player.vip === true || player.sVip === true;