From 595a9802e2e865b4a47737c1cb06582a9270a8f5 Mon Sep 17 00:00:00 2001 From: kron Date: Thu, 19 Jun 2025 01:55:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=86=E8=8A=82=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 23 ++++++++++++ src/components/AppFooter.vue | 5 +++ src/components/BowData.vue | 6 --- src/components/BowTarget.vue | 12 ------ src/components/SButton.vue | 35 ++++++++++++++---- src/components/ScoreResult.vue | 2 +- src/components/ShootProgress.vue | 22 +++++++++-- src/components/StartCountdown.vue | 59 ++++++++++++++++++++++++++++++ src/pages/be-vip.vue | 13 ++++++- src/pages/first-try.vue | 13 +++++-- src/pages/index.vue | 15 +++++++- src/pages/my-device.vue | 6 +-- src/pages/practise-one.vue | 16 +++++++- src/pages/practise-two.vue | 16 +++++++- src/static/btn-loading.png | Bin 0 -> 1770 bytes src/store.js | 4 +- 16 files changed, 201 insertions(+), 46 deletions(-) create mode 100644 src/components/StartCountdown.vue create mode 100644 src/static/btn-loading.png diff --git a/src/App.vue b/src/App.vue index b5db4a8..29f8829 100644 --- a/src/App.vue +++ b/src/App.vue @@ -114,4 +114,27 @@ button::after { animation: scaleOut 0.3s ease-out forwards; transform-origin: center center; } + +@keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@keyframes pumpIn { + from { + transform: scale(2); + } + to { + transform: scale(1); + } +} + +.pump-in { + animation: pumpIn 0.3s ease-out forwards; + transform-origin: center center; +} diff --git a/src/components/AppFooter.vue b/src/components/AppFooter.vue index 120d0f5..458df70 100644 --- a/src/components/AppFooter.vue +++ b/src/components/AppFooter.vue @@ -19,6 +19,11 @@ const tabs = [ function handleTabClick(index) { if (!user.value.id) return props.signin(); + if (index === 0) { + uni.navigateTo({ + url: "/pages/be-vip", + }); + } if (index === 1) { uni.navigateTo({ url: "/pages/my-growth", diff --git a/src/components/BowData.vue b/src/components/BowData.vue index 92d6793..1b25aff 100644 --- a/src/components/BowData.vue +++ b/src/components/BowData.vue @@ -53,7 +53,6 @@ const props = defineProps({ :total="arrows.length" :scores="arrows.map((a) => a.ring)" /> - 长按保存本次靶纸 @@ -70,11 +69,6 @@ const props = defineProps({ align-items: center; z-index: 10; } -.container > text:last-child { - font-size: 14px; - color: #fff9; - margin-top: 20px; -} .header { display: flex; justify-content: space-between; diff --git a/src/components/BowTarget.vue b/src/components/BowTarget.vue index ad96e48..11dd2e9 100644 --- a/src/components/BowTarget.vue +++ b/src/components/BowTarget.vue @@ -173,18 +173,6 @@ function calcRealY(num) { .target > image:last-child { width: 100%; } -@keyframes pumpIn { - from { - transform: scale(2); - } - to { - transform: scale(1); - } -} -.pump-in { - animation: pumpIn 0.3s ease-out forwards; - transform-origin: center center; -} .hit { position: absolute; width: 20px; diff --git a/src/components/SButton.vue b/src/components/SButton.vue index 12b5b18..9389502 100644 --- a/src/components/SButton.vue +++ b/src/components/SButton.vue @@ -1,4 +1,5 @@ @@ -55,9 +68,15 @@ const props = defineProps({ line-height: 44px; font-weight: bold; font-size: 15px; - text-align: center; display: flex; + text-align: center; justify-content: center; align-items: center; } +.loading { + width: 25px; + height: 25px; + background-blend-mode: darken; + animation: rotate 1s linear infinite; +} diff --git a/src/components/ScoreResult.vue b/src/components/ScoreResult.vue index ec81685..25a7a53 100644 --- a/src/components/ScoreResult.vue +++ b/src/components/ScoreResult.vue @@ -131,7 +131,7 @@ setTimeout(() => { .container-header > text:last-child { color: #fff; text-align: center; - margin-top: -100px; + margin-top: -85px; } .container-content { width: calc(100vw - 20px); diff --git a/src/components/ShootProgress.vue b/src/components/ShootProgress.vue index 9a4f52e..7615b9a 100644 --- a/src/components/ShootProgress.vue +++ b/src/components/ShootProgress.vue @@ -1,5 +1,5 @@ diff --git a/src/pages/practise-two.vue b/src/pages/practise-two.vue index e50db10..d5fd44d 100644 --- a/src/pages/practise-two.vue +++ b/src/pages/practise-two.vue @@ -8,6 +8,7 @@ import ScoreResult from "@/components/ScoreResult.vue"; import SButton from "@/components/SButton.vue"; import Avatar from "@/components/Avatar.vue"; import BowPower from "@/components/BowPower.vue"; +import StartCountdown from "@/components/StartCountdown.vue"; import { createPractiseAPI, getHomeData } from "@/apis"; import { MESSAGETYPES } from "@/constants"; import useStore from "@/store"; @@ -15,6 +16,7 @@ import { storeToRefs } from "pinia"; const store = useStore(); const { user } = storeToRefs(store); const { updateUser } = store; +const startCount = ref(false); const start = ref(false); const showScore = ref(false); const scores = ref([]); @@ -25,9 +27,15 @@ const power = ref(0); const onReady = async () => { await createPractiseAPI(total); - start.value = true; currentRound.value = 0; scores.value = []; + startCount.value = true; +}; + +const onStart = () => { + start.value = true; + scores.value = []; + currentRound.value = 0; }; async function onReceiveMessage(content) { @@ -42,6 +50,7 @@ async function onReceiveMessage(content) { } } if (msg.constructor === MESSAGETYPES.ShootSyncMePracticeID) { + start.value = false; practiseResult.value = { ...msg.practice, arrows: JSON.parse(msg.practice.arrows), @@ -104,9 +113,12 @@ onUnmounted(() => { :onClose="onComplete" :result="practiseResult" /> + - 准备好了,直接开始 + 准备好了,直接开始 diff --git a/src/static/btn-loading.png b/src/static/btn-loading.png new file mode 100644 index 0000000000000000000000000000000000000000..fab9a4de5e5243d161f089d3ee821450b264491a GIT binary patch literal 1770 zcmVPx*q)9|UR7gw3mw!+d*A>UV=kD9L?4v*gLcU2z!9i=A%< zK@j>N?RqsV$|nm;Oh=5<=NW;Gb%DZSNc_Lj5O8Q&mtNv&>?! z8w?P*K~MKP5&O(DA~<*~_iHS~J0S5-1@e2^+})iVsE#!SKf$2I0-{Bo@$3tZCF}f) z_00Apw(UQvq`Xc^>-vo5{1lsbKbYsRpykn-Rfom|^QF3JbZhqC9HGH?*G%;cXuX(X zNXtF7K$5E%L<|y#g>b#BrWE}p0`BrZVN2_AW`2~I0hZSJPnU=x!Z!KDM#EL)z)v=aKd5dlAanH=%7s(mt)z`HxAxiOdGdMwj-d1Pj zKR9fB=;)ehx)33nUps1s-Z+tg*0r}NhD_G)t35J29u8DBFmo0GS5@0Jn^K;=8UdSK z<=Z5q6d==LJJXYDd=S2HTaq^YnXb>#=A=+r@*xJj?xS5Cw zJo8_CVX!&x1AvR7@BP`E69Epjtb5d!?2n$e+dFhD_c;bv66gvIHm=DAvm#j>iCI|J zIdC-lX=w!i5c}XSuTBKG?|5#42wUI&%6)Zv``^t@6@>diY>#<6O$2x}8~;DB_1D_p zNJbig4ylRR#b!^B0RQwYF9AiooeFR9~(U{l@qW;5S=FLTy>2tImgLl zEot2y#+k~Mg0NhjU9fZ_z~)C4zn78@Xvqcp!-1-E0PX;xmaOiIrIzH#0U~Ufsm2F8 zjH}|jrie^RExRxtc<^*tq9WYQy|QmceAF$eQp#3mZ51Jw5jU;Z!?E!fnGsJ!ztFs8 zt3oGB3fPwEdWL_+xWH|NuP~_Hli}ZKbZptjjHigu>yC@QJ(66(_cm?^ql5^SkVseM zKRSb9?QIiwR@}UrvtI_zC)UITO?QK?hF64XataI4&VUO30lbvH-L{VlIhXO#h3nDZ}ft`^ZD;f%i6_^ zNf9BZ!i4OC{f^$h0f^BG;4Mg}Jpcdz M07*qoM6N<$g1kRqrvLx| literal 0 HcmV?d00001 diff --git a/src/store.js b/src/store.js index bbdc8fc..07c89e3 100644 --- a/src/store.js +++ b/src/store.js @@ -43,8 +43,8 @@ export default defineStore("store", { } return false; }); + this.user.lvlName = lvlName; } - this.user.lvlName = lvlName; }, updateDevice(deviceId, deviceName) { this.device.deviceId = deviceId; @@ -65,8 +65,8 @@ export default defineStore("store", { } return false; }); + this.user.lvlName = lvlName; } - this.user.lvlName = lvlName; }, },