diff --git a/package.json b/package.json index 5139ba9..7bd66df 100644 --- a/package.json +++ b/package.json @@ -15,25 +15,26 @@ "axios": "^1.6.3", "gsap": "^3.12.4", "howler": "^2.2.4", - "pinia": "^2.1.7", + "pinia": "^2.2.0", "qrcode": "^1.5.3", + "swiper": "^11.2.1", "qs": "^6.11.2", "vant": "^3.6.12", "vconsole": "^3.15.1", - "vue": "^3.2.41", + "vue": "^3.4.0", "vue-clipboard3": "^2.0.0", "weixin-js-sdk": "^1.6.5" }, "devDependencies": { "@vant/auto-import-resolver": "^1.0.2", - "@vitejs/plugin-vue": "^3.2.0", + "@vitejs/plugin-vue": "^5.2.4", "postcss-px-to-viewport-8-plugin": "^1.2.3", "sass": "^1.68.0", "sass-loader": "^13.3.2", "unplugin-auto-import": "^0.17.3", "unplugin-vue-components": "^0.26.0", - "vite": "^3.2.3", + "vite": "4.5.10", "vite-plugin-compression": "^0.5.1", - "vite-plugin-html": "^3.2.1" + "vite-plugin-html": "^3.2.2" } } diff --git a/src/api/index.js b/src/api/index.js index 8971192..351a78a 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -2,7 +2,7 @@ import http from './http' // 获取code export function authorize(data, authorization) { - return http.post("/h5/oauth/authorize", + return http.post("/h5/Oauth/authorize", data, true, ); @@ -10,7 +10,7 @@ export function authorize(data, authorization) { // 获取用户信息 export function getUserInfo(data, authorization) { - return http.post("/h5/oauth/getUserInfo", + return http.post("/h5/Oauth/getUserInfo", data, true, ); @@ -54,7 +54,7 @@ export function exchangePrize(data, authorization) { // 分享接口 export function getShareConfig(data, authorization) { - return http.post("/h5/oauth/getShareConfig", + return http.post("/h5/Oauth/getShareConfig", data, true, ); diff --git a/src/assets/font/DouyinSansBold.ttf b/src/assets/font/DouyinSansBold.ttf new file mode 100644 index 0000000..89b91b9 Binary files /dev/null and b/src/assets/font/DouyinSansBold.ttf differ diff --git a/src/assets/font/FZZY_Regular.ttf b/src/assets/font/FZZY_Regular.ttf new file mode 100644 index 0000000..f03a55a Binary files /dev/null and b/src/assets/font/FZZY_Regular.ttf differ diff --git a/src/assets/font/HarmonyOS_Sans_SC_Regular.ttf b/src/assets/font/HarmonyOS_Sans_SC_Regular.ttf index 06eaa1f..5f38b27 100644 Binary files a/src/assets/font/HarmonyOS_Sans_SC_Regular.ttf and b/src/assets/font/HarmonyOS_Sans_SC_Regular.ttf differ diff --git a/src/assets/font/源字体/方正准圆简体.ttf b/src/assets/font/源字体/方正准圆简体.ttf new file mode 100644 index 0000000..f03a55a Binary files /dev/null and b/src/assets/font/源字体/方正准圆简体.ttf differ diff --git a/src/assets/images/index/bg.jpg b/src/assets/images/index/bg.jpg index 4d57252..bdc80b3 100644 Binary files a/src/assets/images/index/bg.jpg and b/src/assets/images/index/bg.jpg differ diff --git a/src/assets/images/index/btn.png b/src/assets/images/index/btn.png new file mode 100644 index 0000000..869eb9d Binary files /dev/null and b/src/assets/images/index/btn.png differ diff --git a/src/assets/images/index/cloud-1.png b/src/assets/images/index/cloud-1.png deleted file mode 100644 index f0c8ad8..0000000 Binary files a/src/assets/images/index/cloud-1.png and /dev/null differ diff --git a/src/assets/images/index/cloud-2.png b/src/assets/images/index/cloud-2.png deleted file mode 100644 index a2db5f2..0000000 Binary files a/src/assets/images/index/cloud-2.png and /dev/null differ diff --git a/src/assets/images/index/island.png b/src/assets/images/index/island.png deleted file mode 100644 index 31a00a1..0000000 Binary files a/src/assets/images/index/island.png and /dev/null differ diff --git a/src/assets/images/index/logo.png b/src/assets/images/index/logo.png index 8997c36..be53484 100644 Binary files a/src/assets/images/index/logo.png and b/src/assets/images/index/logo.png differ diff --git a/src/assets/images/index/prize-btn.png b/src/assets/images/index/prize-btn.png deleted file mode 100644 index 6cede6e..0000000 Binary files a/src/assets/images/index/prize-btn.png and /dev/null differ diff --git a/src/assets/images/index/rule-btn.png b/src/assets/images/index/rule-btn.png deleted file mode 100644 index 40539d2..0000000 Binary files a/src/assets/images/index/rule-btn.png and /dev/null differ diff --git a/src/assets/images/index/start-btn.png b/src/assets/images/index/start-btn.png deleted file mode 100644 index a7dc664..0000000 Binary files a/src/assets/images/index/start-btn.png and /dev/null differ diff --git a/src/assets/images/index/sub-title.png b/src/assets/images/index/sub-title.png deleted file mode 100644 index e6e544e..0000000 Binary files a/src/assets/images/index/sub-title.png and /dev/null differ diff --git a/src/assets/images/index/time.png b/src/assets/images/index/time.png new file mode 100644 index 0000000..97fc0e5 Binary files /dev/null and b/src/assets/images/index/time.png differ diff --git a/src/assets/images/index/title.png b/src/assets/images/index/title.png index 810ba65..d823d63 100644 Binary files a/src/assets/images/index/title.png and b/src/assets/images/index/title.png differ diff --git a/src/assets/images/index/tree-1.png b/src/assets/images/index/tree-1.png deleted file mode 100644 index a93835c..0000000 Binary files a/src/assets/images/index/tree-1.png and /dev/null differ diff --git a/src/assets/images/load/bar-box.png b/src/assets/images/load/bar-box.png deleted file mode 100644 index f4ed63e..0000000 Binary files a/src/assets/images/load/bar-box.png and /dev/null differ diff --git a/src/assets/images/load/bar-icon.png b/src/assets/images/load/bar-icon.png deleted file mode 100644 index 64eb83e..0000000 Binary files a/src/assets/images/load/bar-icon.png and /dev/null differ diff --git a/src/assets/images/load/bar.png b/src/assets/images/load/bar.png deleted file mode 100644 index 625c059..0000000 Binary files a/src/assets/images/load/bar.png and /dev/null differ diff --git a/src/assets/images/load/bg.jpg b/src/assets/images/load/bg.jpg deleted file mode 100644 index 815c1ba..0000000 Binary files a/src/assets/images/load/bg.jpg and /dev/null differ diff --git a/src/assets/images/load/icon.png b/src/assets/images/load/icon.png index b22944f..a616400 100644 Binary files a/src/assets/images/load/icon.png and b/src/assets/images/load/icon.png differ diff --git a/src/assets/images/music-off.png b/src/assets/images/music-off.png index 5aaa066..9d7d3ad 100644 Binary files a/src/assets/images/music-off.png and b/src/assets/images/music-off.png differ diff --git a/src/assets/images/music-on.png b/src/assets/images/music-on.png index aa75b8d..a4ebeaf 100644 Binary files a/src/assets/images/music-on.png and b/src/assets/images/music-on.png differ diff --git a/src/assets/images/orientation-icon.png b/src/assets/images/orientation-icon.png index 488ca4f..592a3ae 100644 Binary files a/src/assets/images/orientation-icon.png and b/src/assets/images/orientation-icon.png differ diff --git a/src/assets/images/prize/cls-btn.png b/src/assets/images/prize/cls-btn.png index a4b74d8..2810f36 100644 Binary files a/src/assets/images/prize/cls-btn.png and b/src/assets/images/prize/cls-btn.png differ diff --git a/src/assets/images/prize/copy-btn.png b/src/assets/images/prize/copy-btn.png index 3b12232..a045425 100644 Binary files a/src/assets/images/prize/copy-btn.png and b/src/assets/images/prize/copy-btn.png differ diff --git a/src/assets/images/prize/copy-btn2.png b/src/assets/images/prize/copy-btn2.png deleted file mode 100644 index a045425..0000000 Binary files a/src/assets/images/prize/copy-btn2.png and /dev/null differ diff --git a/src/assets/images/prize/got-btn.png b/src/assets/images/prize/got-btn.png deleted file mode 100644 index f30b9bd..0000000 Binary files a/src/assets/images/prize/got-btn.png and /dev/null differ diff --git a/src/assets/images/prize/light.png b/src/assets/images/prize/light.png index 8bc53d8..066c5ce 100644 Binary files a/src/assets/images/prize/light.png and b/src/assets/images/prize/light.png differ diff --git a/src/assets/images/prize/lucky-bag.png b/src/assets/images/prize/lucky-bag.png deleted file mode 100644 index e68b08f..0000000 Binary files a/src/assets/images/prize/lucky-bag.png and /dev/null differ diff --git a/src/assets/images/prize/myPrize-box.png b/src/assets/images/prize/myPrize-box.png index 9cad0ae..a2fd1ce 100644 Binary files a/src/assets/images/prize/myPrize-box.png and b/src/assets/images/prize/myPrize-box.png differ diff --git a/src/assets/images/prize/myPrize-box2.png b/src/assets/images/prize/myPrize-box2.png new file mode 100644 index 0000000..d26bb9e Binary files /dev/null and b/src/assets/images/prize/myPrize-box2.png differ diff --git a/src/assets/images/prize/no-get-btn.png b/src/assets/images/prize/no-get-btn.png deleted file mode 100644 index 6e53d3f..0000000 Binary files a/src/assets/images/prize/no-get-btn.png and /dev/null differ diff --git a/src/assets/images/prize/no-prize.png b/src/assets/images/prize/no-prize.png index 53879ca..fa0c016 100644 Binary files a/src/assets/images/prize/no-prize.png and b/src/assets/images/prize/no-prize.png differ diff --git a/src/assets/images/prize/prize-box.png b/src/assets/images/prize/prize-box.png deleted file mode 100644 index 7670f22..0000000 Binary files a/src/assets/images/prize/prize-box.png and /dev/null differ diff --git a/src/assets/images/prize/star.png b/src/assets/images/prize/star.png index ed9a8a4..7ae8cea 100644 Binary files a/src/assets/images/prize/star.png and b/src/assets/images/prize/star.png differ diff --git a/src/assets/images/qa/analysis-icon.png b/src/assets/images/qa/analysis-icon.png deleted file mode 100644 index 25b8024..0000000 Binary files a/src/assets/images/qa/analysis-icon.png and /dev/null differ diff --git a/src/assets/images/qa/bg.jpg b/src/assets/images/qa/bg.jpg deleted file mode 100644 index cd414fc..0000000 Binary files a/src/assets/images/qa/bg.jpg and /dev/null differ diff --git a/src/assets/images/qa/bubble-1.png b/src/assets/images/qa/bubble-1.png deleted file mode 100644 index 69d3386..0000000 Binary files a/src/assets/images/qa/bubble-1.png and /dev/null differ diff --git a/src/assets/images/qa/cls-btn.png b/src/assets/images/qa/cls-btn.png new file mode 100644 index 0000000..9616dd6 Binary files /dev/null and b/src/assets/images/qa/cls-btn.png differ diff --git a/src/assets/images/qa/correct-icon.png b/src/assets/images/qa/correct-icon.png new file mode 100644 index 0000000..220d3af Binary files /dev/null and b/src/assets/images/qa/correct-icon.png differ diff --git a/src/assets/images/qa/correct.png b/src/assets/images/qa/correct.png index c3a4b5b..6ea0790 100644 Binary files a/src/assets/images/qa/correct.png and b/src/assets/images/qa/correct.png differ diff --git a/src/assets/images/qa/create-btn.png b/src/assets/images/qa/create-btn.png index 9d00e13..0f286a9 100644 Binary files a/src/assets/images/qa/create-btn.png and b/src/assets/images/qa/create-btn.png differ diff --git a/src/assets/images/qa/incorrect-icon.png b/src/assets/images/qa/incorrect-icon.png new file mode 100644 index 0000000..2a039b4 Binary files /dev/null and b/src/assets/images/qa/incorrect-icon.png differ diff --git a/src/assets/images/qa/incorrect.png b/src/assets/images/qa/incorrect.png index 17cf7dd..332fdcb 100644 Binary files a/src/assets/images/qa/incorrect.png and b/src/assets/images/qa/incorrect.png differ diff --git a/src/assets/images/qa/next-btn.png b/src/assets/images/qa/next-btn.png deleted file mode 100644 index 2cf92e8..0000000 Binary files a/src/assets/images/qa/next-btn.png and /dev/null differ diff --git a/src/assets/images/qa/paper.png b/src/assets/images/qa/paper.png new file mode 100644 index 0000000..ee75d94 Binary files /dev/null and b/src/assets/images/qa/paper.png differ diff --git a/src/assets/images/qa/question-box.png b/src/assets/images/qa/question-box.png deleted file mode 100644 index c9b7e4d..0000000 Binary files a/src/assets/images/qa/question-box.png and /dev/null differ diff --git a/src/assets/images/qa/result-box.png b/src/assets/images/qa/result-box.png new file mode 100644 index 0000000..0246750 Binary files /dev/null and b/src/assets/images/qa/result-box.png differ diff --git a/src/assets/images/qa/text-bg.png b/src/assets/images/qa/text-bg.png new file mode 100644 index 0000000..9faba5e Binary files /dev/null and b/src/assets/images/qa/text-bg.png differ diff --git a/src/assets/images/qa/tree.png b/src/assets/images/qa/tree.png deleted file mode 100644 index cf98d72..0000000 Binary files a/src/assets/images/qa/tree.png and /dev/null differ diff --git a/src/assets/images/result/bg.jpg b/src/assets/images/result/bg.jpg new file mode 100644 index 0000000..cce3066 Binary files /dev/null and b/src/assets/images/result/bg.jpg differ diff --git a/src/assets/images/result/card.png b/src/assets/images/result/card.png new file mode 100644 index 0000000..a03909e Binary files /dev/null and b/src/assets/images/result/card.png differ diff --git a/src/assets/images/result/cls-btn.png b/src/assets/images/result/cls-btn.png index 3c1ca5f..e5720a3 100644 Binary files a/src/assets/images/result/cls-btn.png and b/src/assets/images/result/cls-btn.png differ diff --git a/src/assets/images/result/create-btn.png b/src/assets/images/result/create-btn.png deleted file mode 100644 index 941a47e..0000000 Binary files a/src/assets/images/result/create-btn.png and /dev/null differ diff --git a/src/assets/images/result/go-draw-btn.png b/src/assets/images/result/go-draw-btn.png index 539fa5b..4451daa 100644 Binary files a/src/assets/images/result/go-draw-btn.png and b/src/assets/images/result/go-draw-btn.png differ diff --git a/src/assets/images/result/go-share-btn.png b/src/assets/images/result/go-share-btn.png index 884c1b9..bc19b1c 100644 Binary files a/src/assets/images/result/go-share-btn.png and b/src/assets/images/result/go-share-btn.png differ diff --git a/src/assets/images/result/poster-1.jpg b/src/assets/images/result/poster-1.jpg deleted file mode 100644 index 0c1fa16..0000000 Binary files a/src/assets/images/result/poster-1.jpg and /dev/null differ diff --git a/src/assets/images/result/poster-2.jpg b/src/assets/images/result/poster-2.jpg deleted file mode 100644 index 14282a0..0000000 Binary files a/src/assets/images/result/poster-2.jpg and /dev/null differ diff --git a/src/assets/images/result/poster-3.jpg b/src/assets/images/result/poster-3.jpg deleted file mode 100644 index 834d03a..0000000 Binary files a/src/assets/images/result/poster-3.jpg and /dev/null differ diff --git a/src/assets/images/result/poster-text.png b/src/assets/images/result/poster-text.png deleted file mode 100644 index 6a7fac0..0000000 Binary files a/src/assets/images/result/poster-text.png and /dev/null differ diff --git a/src/assets/images/result/poster.jpg b/src/assets/images/result/poster.jpg new file mode 100644 index 0000000..1dbfa8b Binary files /dev/null and b/src/assets/images/result/poster.jpg differ diff --git a/src/assets/images/result/r-bg-1.jpg b/src/assets/images/result/r-bg-1.jpg deleted file mode 100644 index 1579dbc..0000000 Binary files a/src/assets/images/result/r-bg-1.jpg and /dev/null differ diff --git a/src/assets/images/result/r-bg-2.jpg b/src/assets/images/result/r-bg-2.jpg deleted file mode 100644 index 0fc9350..0000000 Binary files a/src/assets/images/result/r-bg-2.jpg and /dev/null differ diff --git a/src/assets/images/result/r-bg-3.jpg b/src/assets/images/result/r-bg-3.jpg deleted file mode 100644 index 9a43ecb..0000000 Binary files a/src/assets/images/result/r-bg-3.jpg and /dev/null differ diff --git a/src/assets/images/result/text-1.png b/src/assets/images/result/text-1.png deleted file mode 100644 index 1990d8e..0000000 Binary files a/src/assets/images/result/text-1.png and /dev/null differ diff --git a/src/assets/images/result/text-2.png b/src/assets/images/result/text-2.png deleted file mode 100644 index 870efb4..0000000 Binary files a/src/assets/images/result/text-2.png and /dev/null differ diff --git a/src/assets/images/result/text-3.png b/src/assets/images/result/text-3.png deleted file mode 100644 index 67026e0..0000000 Binary files a/src/assets/images/result/text-3.png and /dev/null differ diff --git a/src/assets/images/result/title.png b/src/assets/images/result/title.png index 7a8cdc6..a9f5f48 100644 Binary files a/src/assets/images/result/title.png and b/src/assets/images/result/title.png differ diff --git a/src/assets/images/rule/arrow.png b/src/assets/images/rule/arrow.png index 51640ad..3959543 100644 Binary files a/src/assets/images/rule/arrow.png and b/src/assets/images/rule/arrow.png differ diff --git a/src/assets/images/rule/cls-btn.png b/src/assets/images/rule/cls-btn.png index a4b74d8..384b92e 100644 Binary files a/src/assets/images/rule/cls-btn.png and b/src/assets/images/rule/cls-btn.png differ diff --git a/src/assets/images/rule/icon.png b/src/assets/images/rule/icon.png index d265cbd..8e3c69b 100644 Binary files a/src/assets/images/rule/icon.png and b/src/assets/images/rule/icon.png differ diff --git a/src/assets/images/rule/rule-box.png b/src/assets/images/rule/rule-box.png index d100052..4165880 100644 Binary files a/src/assets/images/rule/rule-box.png and b/src/assets/images/rule/rule-box.png differ diff --git a/src/assets/images/share.jpg b/src/assets/images/share.jpg index 4f7e0a2..f613cca 100644 Binary files a/src/assets/images/share.jpg and b/src/assets/images/share.jpg differ diff --git a/src/assets/media/bgm.mp3 b/src/assets/media/bgm.mp3 index 966cbc1..d3e6751 100644 Binary files a/src/assets/media/bgm.mp3 and b/src/assets/media/bgm.mp3 differ diff --git a/src/components/Draw.vue b/src/components/Draw.vue index 81f6a18..726c9bd 100644 --- a/src/components/Draw.vue +++ b/src/components/Draw.vue @@ -14,7 +14,7 @@ const { toClipboard } = useClipboard() const money = ref("1.88"); -const code = ref("sss"); +const code = ref("PAKJ2025"); const showResult = ref(false); const hasPrize = ref(false); @@ -85,20 +85,6 @@ const drawFn = (event) => { }, 1000); } } - }).catch(error =>{ - console.log('eroor', error); - hasPrize.value = false; // true 中奖 || false 未中奖 - userStore.updateDraw(); - setTimeout(() => { - Toast.clear(); - showResult.value = true; - gsap.from(".result-container", { - duration: 0.5, - scale: 0.7, - autoAlpha: 0, - }); - gsap.killTweensOf(".draw-light,.draw"); - }, 1000); }) } else { Toast('今日抽奖次数已用完!') @@ -114,7 +100,7 @@ const hide = (event) => { duration: 0.3, autoAlpha: 0, onComplete: () => { - emit("DrawPage", {action:"hide"}); + emit("DrawPage", { action: "hide" }); }, }); }); @@ -122,7 +108,7 @@ const hide = (event) => { const copyFn = (event) => { let e = event.target; toClipboard(code.value) - debounceTap(e, async() => { + debounceTap(e, async () => { Toast(`复制成功:${code.value}`); }); }; @@ -162,17 +148,16 @@ onMounted(() => {
+
恭喜您抽中
¥{{ money }}元
+
奖励抽到手,快乐马上有
-
兑奖码:{{ code }}
-
-
-
-
兑奖流程:前往微信搜索【平安理财服务号】
-
公众号发送“清凉一夏”获取兑换链接,
-
输入兑换码兑换奖品。
-
(兑换码可在主页面“奖品”再次查看并复制)
+ 兑奖码: + {{ code }} +
+
兑换流程:前往微信搜索【平安理财服务号】公众号发送“五一快乐”获取兑奖链接,输入兑换码兑换奖品
+
(兑换码可在主页面“我的奖品” 再次查看并复制)
@@ -183,7 +168,7 @@ onMounted(() => {
- + diff --git a/src/components/Loading.vue b/src/components/Loading.vue index 1830a43..1219f45 100644 --- a/src/components/Loading.vue +++ b/src/components/Loading.vue @@ -13,6 +13,7 @@ const userStore = useMainStore(); const loadNum = ref(0); onMounted(() => { + Preloader({ name: "加载页资源", imgs: loadImg, @@ -24,7 +25,6 @@ onMounted(() => { duration: 0.2, autoAlpha: 1, onComplete: () => { - // 非本地环境 if (import.meta.env.VITE_MODE != "dev") { getMyPrize({}, userStore.token).then((res) => { if (res.code == 0) { @@ -36,16 +36,17 @@ onMounted(() => { } }); } + Preloader({ name: "内页资源", imgs: pageImg, - callback: (progress) => { - // console.log('进度:', progress); + callback: (progress) => { gsap.set(".bar", { width: progress + "%" }); loadNum.value = progress; }, }).then((res) => { console.log("加载完成"); + gsap.to(".LoadPage", { duration: 1, autoAlpha: 0, @@ -66,11 +67,11 @@ onMounted(() => {
-
-
-
+
+
+
+ {{ loadNum }}%
-
{{ loadNum }}%
@@ -85,7 +86,8 @@ onMounted(() => { .load-bg { @include pos(750px, 100%, 0px, 50%); transform: translateY(-50%); - @include bg_pos("load/bg.jpg"); + background-image: -webkit-linear-gradient(-90deg, #ffffff 15%, #4ebbe5 100%); + } .load-container { @@ -94,44 +96,46 @@ onMounted(() => { // transform: translateY(-50%); .load-icon { - @include pos(83px, 101px, 325px, 370px); + @include pos(409px, 215px,199px, 350px); @include bg_pos("load/icon.png"); } .load-box { - @include pos(576px, 36px, 87px, 500px); - border-radius: 20px; - overflow: hidden; - padding: 4.5px; - @include bg_pos("load/bar-box.png"); + @include pos(582px, 45px, 83px, 450px); + border-radius: 25px; + padding: 1px; + border: 1px solid rgb(243, 87, 4); + .bar { - @include box(0%, 27px); - position: relative; - @include bg_pos("load/bar.png"); - background-size: 551px 27px; - .bar-icon { - @include box(35px, 36px); - position: absolute; - top: -4.5px; - left: 95%; - @include bg_pos("load/bar-icon.png"); - } + @include box(0%, 38px); + border-radius: 20px; + border: 1px solid rgb(255, 255, 255); + + background-image: -webkit-linear-gradient(0deg, #f7c86f 0%, #f25501 100%); + } } .load-num { - @include pos(750px, 50px, 0px, 570px); - text-align: center; - font-size: 38px; - color: rgb(255, 255, 255); - line-height: 40px; - font-weight: 700; - background: linear-gradient(to right, #dadada, #ffffff); - background-clip: text; - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - text-shadow: 0.9px 3.897px 0px rgba(44, 182, 255, 0.004); + @include pos(235px, 80px, 256px, 511px); + + @include flexCen(); + + + .num { + font-size: 40px; + color: #f25501; + font-weight: 700; + + /* 文字填充色 */ + text-shadow: + -1px -1px 0 #ffffff, + 1px -1px 0 #ffffff, + -1px 1px 0 #ffffff, + 1px 1px 0 #ffffff; + /* 四个方向阴影叠加 */ + } } .btn { diff --git a/src/components/MyPrize.vue b/src/components/MyPrize.vue index bd5fcc4..93bf537 100644 --- a/src/components/MyPrize.vue +++ b/src/components/MyPrize.vue @@ -2,28 +2,27 @@ import { debounceTap } from "@/plugins"; import gsap from "gsap"; import { Toast } from "vant"; -import useClipboard from "vue-clipboard3"; +import useClipboard from 'vue-clipboard3' import { useMainStore } from "@/store"; import { onMounted } from "vue"; // 页面配置初始化 const emit = defineEmits(["MyPrizePage"]); const userStore = useMainStore(); -const { toClipboard } = useClipboard(); +const { toClipboard } = useClipboard() const money = ref(userStore.prizeMoney); const code = ref(userStore.prizeCode); -const hasPrize = ref(userStore.hasPrize); - const copyFn = (event) => { let e = event.target; - toClipboard(code.value); + toClipboard(code.value) debounceTap(e, () => { Toast(`复制成功:${code.value}`); }); }; + const hide = (event) => { let e = event.target; debounceTap(e, () => { @@ -48,24 +47,22 @@ onMounted(() => { + \ No newline at end of file diff --git a/src/components/Question.vue b/src/components/Question.vue index c121f27..4153a94 100644 --- a/src/components/Question.vue +++ b/src/components/Question.vue @@ -5,51 +5,32 @@ import { data } from "@/data"; import { debounceTap, FYShuffle, mostValue, judgeBigScreen } from "@/plugins"; import { useMainStore } from "@/store"; import { subAnswer } from "@/api"; -import Preloader from "@/plugins/Preloader"; -import { pageResultImg } from "@/data/imgList"; // 页面配置初始化 -const emit = defineEmits(["QuestionPage"]); +const emit = defineEmits([ "QuestionPage"]); const userStore = useMainStore(); + // 当前题目 -const currentId = ref(0); //当前id 0~11 +// const currentId = ref(props.questionId); //当前id 0~4 +const currentId = ref(0); //当前id 0~3 + const questionList = ref(data); //随机打乱题库 -const answerList = ref([]); // 答案库统计 -const activeId = ref(""); // 当前题目所选答案选项 -const showResultBtn = ref(false); const isChecked = ref(false); +const checkedOption = ref(""); +const QaResult = ref(1); //当前答题结果 // 答题事件 const answerFn = (item, event) => { let e = event.target.parentElement; - activeId.value = item.aid; //更新选中状态 - // console.log("选项", item); - debounceTap(e, () => { - let cid = questionList.value[currentId.value].id; - let has = answerList.value.findIndex((obj) => obj.id === cid); - // 答案库中未存在该题的结果则新增,存在则更新最新选项 - if (has == -1) { - answerList.value.push({ - id: cid, - aid: item.aid, - answer: item.text, - }); - } else { - answerList.value[has].aid = item.aid; - answerList.value[has].answer = item.text; - } - gsap.set(".option-tips,.analysis", { autoAlpha: 1 }); + debounceTap(e, () => { gsap.set(".answer-box", { pointerEvents: "none" }); isChecked.value = true; - // console.log("currentId.value", currentId.value); - if (currentId.value == 2) { - // console.log("over"); - gsap.set(".create-btn", { autoAlpha: 1 }); - } else { - gsap.set(".next-btn", { autoAlpha: 1 }); - } + checkedOption.value = item; + console.log("checkedOption", checkedOption.value); + QaResult.value = item.result; + gsap.to(".qp-result ", { duration: 0.5, autoAlpha: 1, delay: 1 }); }); }; @@ -57,12 +38,16 @@ const answerFn = (item, event) => { const nextQuestion = (event) => { let e = event.target; debounceTap(e, () => { - isChecked.value = false; - gsap.set(".option-tips,.analysis", { autoAlpha: 0 }); - currentId.value++; - activeId.value = ""; - gsap.set(".answer-box", { pointerEvents: "initial" }); - gsap.set(".next-btn", { autoAlpha: 0 }); + gsap.to(".qp-result", { + duration: 0.5, + autoAlpha: 0, + onComplete: () => { + isChecked.value = false; + checkedOption.value = ""; + gsap.set(".answer-box", { pointerEvents: "auto" }); + currentId.value++; + }, + }); }); }; @@ -70,8 +55,9 @@ const nextQuestion = (event) => { const viewResult = (event) => { let e = event.target; debounceTap(e, () => { - // 随机生成海报id - userStore.updatePosterId(getRandomNumber([1, 2, 3])); + // 更新海报id + userStore.posterId = currentId.value + 1; + gsap.set(".question-box", { pointerEvents: "none" }); Toast("答题结束"); Toast.loading({ @@ -94,7 +80,7 @@ const viewResult = (event) => { duration: 0.5, autoAlpha: 0, onComplete: () => { - emit("QuestionPage", { action: "showResult" }); + emit("showResult", { action: "showResult" }); }, }); }, 1000); @@ -102,11 +88,11 @@ const viewResult = (event) => { } else { setTimeout(() => { Toast.clear(); - gsap.to(".QuestionPage", { + gsap.to(".QuestionPage,.qp-result", { duration: 0.5, autoAlpha: 0, onComplete: () => { - emit("QuestionPage", { action: "showResult" }); + emit("QuestionPage", { action: 'showResult' }); }, }); }, 1000); @@ -114,41 +100,18 @@ const viewResult = (event) => { }); }; -// 从数组中随机生成一个数字 -const getRandomNumber = (arr) => { - var randomIndex = Math.floor(Math.random() * arr.length); - return arr[randomIndex]; -}; - onMounted(() => { gsap.from(".question-bg", { duration: 0.5, autoAlpha: 0 }); - gsap.from(".question-box", { duration: 0.5, y: 30, autoAlpha: 0 }); - gsap.from(".answer-box", { - duration: 0.5, - y: 30, - autoAlpha: 0, - onComplete: () => { - // 开始加载答题页面资源 - Preloader({ - name: "加载结果页资源", - imgs: pageResultImg, - callback: (progress) => { - // console.log("进度:", progress); - }, - }).then((res) => { - console.log("done!"); - }); - }, - }); - gsap.to(".question-tree", { - duration: 3, - transformOrigin: "0% 70%", - rotation: "-10deg", - repeat: -1, - yoyo: true, - ease: "none", - }); + gsap.from(".question-box", { duration: 0.5, scale: 0.4, autoAlpha: 0 }); }); + +const getClass = (item) => { + if (isChecked.value) { + if (checkedOption.value.aid == item.aid) { + return item.result ? "correct" : "incorrect"; + } + } +}; - \ No newline at end of file + +.qp-result { + @include pos(100%, 1624px, 0px, 0px); + overflow: hidden; + @include flexCen(); + background-color: rgba($color: #000000, $alpha: 0.6); + visibility: hidden; + .qp-result-box { + @include box(569px, 399px); + @include bg_pos("qa/result-box.png"); + position: relative; + .qp-result-icon { + @include pos(112px, 112px, 222px, -28px); + @include bg_pos("qa/correct-icon.png"); + } + .is-incorrect { + @include bg_pos("qa/incorrect-icon.png"); + } + .qp-result-text { + @include pos(569px, 50px, 0px, 104px); + @include flexCen(); + font-size: 35px; + color: #ffffff; + } + .qp-tips-text { + @include pos(569px, 220px, 0px, 150px); + padding: 20px; + font-size: 25px; + line-height: 35px; + text-align: justify; + color: #b3640d; + } + } + + .next-btn { + @include box(190px, 65px); + border: 1px solid #ffffff; + @include flexCen(); + font-size: 35px; + color: #ffffff; + border-radius: 31px; + margin-top: 50px; + } +} + diff --git a/src/components/Result.vue b/src/components/Result.vue index f1bde85..8f1fe36 100644 --- a/src/components/Result.vue +++ b/src/components/Result.vue @@ -2,7 +2,7 @@ import { gsap } from "gsap"; import { debounceTap } from "@/plugins"; import { useMainStore } from "@/store"; -import { posterCreate } from "@/plugins"; + import { Toast } from "vant"; import QRCode from "qrcode"; import { reactive } from "vue"; @@ -10,97 +10,85 @@ import { reactive } from "vue"; // 页面配置初始化 const emit = defineEmits(["ResultPage"]); const userStore = useMainStore(); -const posterId = ref(Math.floor(Math.random() * 3) + 1); //海报背景id:1~3 +const posterId = ref(userStore.posterId); //海报背景id:1~11 -const posterTextSrc = new URL(`../assets/images/result/poster-text.png`, import.meta.url).href +console.log("海报id", posterId.value); -const posterImgList = reactive([ - new URL(`../assets/images/result/poster-1.jpg`, import.meta.url).href, - new URL(`../assets/images/result/poster-2.jpg`, import.meta.url).href, - new URL(`../assets/images/result/poster-3.jpg`, import.meta.url).href, -]); +const posterImgSrc = new URL( + `../assets/images/result/poster.jpg`, + import.meta.url +).href; // 生成二维码逻辑 const eqcodePic = ref(); -onMounted(() => { - console.log("posterId:", posterId.value); - let eqCodeUrl = import.meta.env.VITE_URL; - QRCode.toDataURL(eqCodeUrl) - .then((url) => { - eqcodePic.value = url; - // console.log("eq", eqcodePic.value); - }) - .catch((err) => { - console.error(err); - }); +onMounted(async () => { + // 执行任务队列 + await executeTasks(); +}); - gsap.from(".result-bg", { +// 这是新加的函数封装异步任务 +const executeTasks = async () => { + console.log("二维码生成中..."); + + // 生成二维码 + const eqCodeUrl = import.meta.env.VITE_URL; + eqcodePic.value = await QRCode.toDataURL(eqCodeUrl); + + console.log("生成海报中..."); + + if (posterImgSrc && eqcodePic.value) { + posterCreate({ width: 750, height: 2502 }, [ + { name: "bg", src: posterImgSrc, pos: { w: 750, h: 2502, x: 0, y: 0 } }, + { + name: "eqcode", + src: eqcodePic.value, + pos: { w: 187, h: 187, x: 527, y: 2227 }, + }, + ]); + } else { + Toast.fail({ message: "生成失败" }); + emit("ResultPage", { action: "hide" }); + } +}; + +const showPoster = () => { + gsap.to(".posterPop", { + duration: 0.3, + autoAlpha: 1, + }); + gsap.from(".cls-btn-box", { duration: 0.7, scale: 1.2, autoAlpha: 0, }); - gsap.from(".result-title", { + gsap.from(".poster-box", { duration: 0.7, - y: 20, + scale: 0.6, autoAlpha: 0, - delay:0.3, }); - gsap.from(".r-text", { + gsap.from(".save-tips", { duration: 0.7, - scale: .5, + scale: 0.7, autoAlpha: 0, - delay:0.5, + delay: 0.3, }); - gsap.from(".create-poster", { + gsap.from(".go-draw", { duration: 0.7, - y: 20, + y: -30, autoAlpha: 0, - delay:1, - onComplete:()=>{ - gsap.to('.create-poster',{duration:1,scale:'0.9',repeat:-1,yoyo:true,ease:'bounce.in'}) - - } + delay: 0.5, }); -}); - -// 生成海报逻辑 -const createPoster = (event) => { - let e = event.target.parentElement; - debounceTap(e, () => { - // 海报生成 - posterCreate( - { width: 750, height: 1334 }, //海报尺寸 - // 海报素材,按顺序依次渲染 - [ - // 背景 - { - name: "bg", - src: posterImgList[posterId.value - 1], - pos: { w: 750, h: 1334, x: 0, y: 0 }, - }, - // 二维码 - { - name: "eqcode", - src: eqcodePic.value, - pos: { w: 194, h: 195, x: 502, y: 1090 }, - }, - // 文案 - { - name: "text", - src: posterTextSrc, - pos: { w: 347, h: 155, x: 81, y: 1113 }, - }, - ] - ); - - // gsap.to('.posterPop',{duration:0.5,autoAlpha:1}) + gsap.from(".go-share", { + duration: 0.7, + y: -30, + autoAlpha: 0, + delay: 0.7, }); }; // 去抽奖 const goDraw = (event) => { - let e = event.target.parentElement; - console.log('e',e); + let e = event.target; debounceTap(e, () => { if (userStore.hasDraw) { emit("ResultPage", { action: "showDraw" }); @@ -114,13 +102,32 @@ const goDraw = (event) => { const hidePop = (event) => { let e = event.target; debounceTap(e, () => { - gsap.to(".posterPop", { duration: 0.5, autoAlpha: 0 }); + gsap.to(".posterPop", { + duration: 0.5, + autoAlpha: 0, + onComplete: () => { + emit("ResultPage", { action: "hide" }); + }, + }); + }); +}; + +const hide = (event) => { + let e = event.target; + debounceTap(e, () => { + gsap.to(".posterPop", { + duration: 0.5, + autoAlpha: 0, + onComplete: () => { + emit("ResultPage", { action: "showQuestion" }); + }, + }); }); }; // 展示分享 const goShare = (event) => { - let e = event.target.parentElement; + let e = event.target; debounceTap(e, () => { gsap.to(".sharePop", { duration: 0.5, autoAlpha: 1 }); }); @@ -130,39 +137,95 @@ const goShare = (event) => { const hideShare = () => { gsap.to(".sharePop", { duration: 0.5, autoAlpha: 0 }); }; + +// 海报生成 +const posterCreate = (option, imageArr) => { + let posterUrl = ""; + const { width, height } = option; + Toast.loading({ + message: "海报生成中", + duration: 0, + forbidClick: true, + }); + + let mycanvas = document.createElement("canvas"); // 创建一个canvas画布元素 + let ctx = mycanvas.getContext("2d"); + mycanvas.style.width = `${width}px`; //设置canvas的宽 + mycanvas.style.height = `${height}px`; //设置canvas的高 + mycanvas.width = width; + mycanvas.height = height; + //Promise对象加载资源 + let loader_p = []; + imageArr.map((item) => { + const _p = new Promise((resolve) => { + const img = new Image(); + img.crossOrigin = "Anonymous"; + img.onload = () => { + resolve(img); + }; + img.src = item.src; + }); + loader_p.push(_p); + }); + //Promise的.all方法,当所有预加载的图像加载好的回调函数 + Promise.all(loader_p) + .then((imgList) => { + console.log("imgList", imgList); + + // 图片素材遍历绘制 + imgList.map((item, index) => { + ctx.drawImage( + item, + imageArr[index].pos.x, + imageArr[index].pos.y, + imageArr[index].pos.w, + imageArr[index].pos.h + ); //原生canvas的绘制图片方法,直接百度搜索 `js drawImage`查看方法的参数 + }); + + //海报绘制完 ,转成图片对象 + return mycanvas.toDataURL("image/jpeg", 1); + }) + .then((baseURL) => { + //返回的图片地址,就是最后海报的地址,可以放在DOM显示 + let posterImg = document.querySelector("#posterSrc"); + posterImg.src = baseURL; + setTimeout(() => { + // 展示海报 + showPoster(); + Toast.success({ message: "生成成功!" }); + }, 500); + }) + .catch((error) => { + console.error("生成海报失败"); + gsap.to(".posterPop", { + duration: 0.5, + autoAlpha: 0, + onComplete: () => { + emit("ResultPage", { action: "hide" }); + }, + }); + Toast.fail({ message: "生成失败,请重试!" }); + }); + + // return posterUrl +}; - + \ No newline at end of file + diff --git a/src/components/Rule.vue b/src/components/Rule.vue index c0f8f5a..b86e7f8 100644 --- a/src/components/Rule.vue +++ b/src/components/Rule.vue @@ -17,11 +17,11 @@ let scroll = ref() onMounted(() => { let wrapper = document.querySelector('.wrapper') - scroll.value = new BScroll(wrapper) + scroll.value = new BScroll(wrapper) gsap.from(".RulePage", { duration: 0.2, autoAlpha: 0 }); gsap.from(".rule-container", { duration: 0.5, autoAlpha: 0, scale: 0.7 }); - gsap.to(".rule-arrow", { duration: 2.5, y: 10,repeat:-1,yoyo:true }); + gsap.to(".rule-arrow", { duration: 2.5, y: 10, repeat: -1, yoyo: true }); }); @@ -32,49 +32,53 @@ onMounted(() => {
-
-
活动时间:
-
2024年8月14日8:30-2024年8月16日17:30
-
活动奖励:微信红包
+
+
活动时间:2025年4月27日——4月30日
+
活动奖励:微信红包
+
+
+
活动攻略:
+
+ 1、【打卡理想假期,五一好礼等你】活动共设计5道题目,首页进入后左右滑动选择您想打卡的地点,点击进行答题,答对后即可获取专属打卡海报,并参与抽奖;答错时将跳转回选择打卡地点的页面,重新答题。 +
+
2、活动期间不限制参与答题次数,每人每日有1次抽奖机会。
+
+
+
领奖说明:
+
+ 1、中奖后在中奖页面复制兑换码,前往[平安理财服务号]消息框输入“五一快乐”获取兑换链接,进入链接输入兑换码兑换奖品。如关闭了中奖界面,可在首页-[我的奖品] + 内查看兑换码; +
+
2、成功领奖后,奖品将会在24小时内自动到账,请耐心等候;
+
3、中奖人请在活动结束前进行兑换,逾期视为弃权。
+
+ +
+
其他:
+ 活动期间如遇到任何问题,请在[平安理财服务号]后台咨询,我们会在一个工作日内回复。 +
说明:平安理财有权对活动规则进行解释
+
+
+
活动说明:
+
+ (1)本活动由平安理财有限责任公司主办,为保证活动的公平公正,活动结束后主办方将对中奖用户信息进行核对,用户若有下列任何一种行为或情况的,主办方有权不经另行通知,取消其参与活动以及获奖资格,收回奖品权益,并保留追究其法律责任的权利: +
+
+ (2)以任何机器人软件、蜘蛛软件、爬虫软件、刷奖软件或其它任何自动方式、不正当手段等参与本活动;同一用户(包含相同手机号、相同收货信息、相同移动设备号、相同IP地址等)单日内恶意切换微信账号参加活动,扰乱正常抽奖秩序,影响活动公平性的; +
+
+ (3)有任何违反法律法规、诚实信用、公序良俗、公平公正、平安理财平台规则等行为; +
+
+ (4)平安理财保留调整、暂停和终止本活动的权利,并经公告后生效; +
+
+ (5)用户参与本活动,即视为理解并同意本活动细则。在法律法规及监管规定的范围内,平安理财有权对活动规则进行解释,并根据活动实际情况对本活动的规则进行变动或调整,相关变动或调整将公布在规则页面,并于公布时即时生效。 +
+
+
-
-
活动攻略:
-
- 1、进入活动参加【好“理”在手,邂逅清凉一夏】答题,共设计3道题目,全部选择完毕后即可参与抽奖活动; -
-
2、活动期间不限制参与答题次数,每人每日有1次抽奖机会。
-
-
-
领奖说明:
-
- 1、中奖后在中奖页面复制兑换码,前往[平安理财服务号] 消息框输入“清凉一夏”获取兑换链接,进入链接输入兑换码兑换奖品。如关闭了中奖界面,可在首页-[我的奖品] 内查看兑换码; -
-
2、成功领奖后,奖品将会在24小时内自动到账,请耐心等候;
-
3、中奖人请在活动结束前进行兑换,逾期视为弃权。
-
-
-
其他说明:
-
- 1、本活动由平安理财有限责任公司主办,为保证活动的公平公正,活动结束后主办方将对中奖用户信息进行核对,用户若有下列任何一种行为或情况的,主办方有权不经另行通知,取消其参与活动以及获奖资格,收回奖品权益,井保留追究其法律责任的权利: -
-
- (1) 以任何机器人软件、蜘蛛软件、爬虫软件、刷奖软件或其它任何自动方式不正当手段等参与本活动; -
-
- (2) 同一用户(包含相同手机号、相同收货信息、相同移动设备号、相同IP地址等) 单日内恶意切换微信账号参加活动,扰乱正常抽奖秩序,影响活动公平性的; -
-
- (3) 有任何违反法律法规、诚实信用、公序良俗、公平公正、平安理财平台规则等行为; -
-
- 2、平安理财保留调整、暂停和终止本活动的权利,并经公告后生效; -
-
- 3、用户参与本活动,即视为理解并同意本活动细则。在法律规定的范围内,平安理财有权对活动规则进行解释,并根据活动实际情况对本活动的规则进行变动或调整,相关变动或调整将公布在规则页面,并于公布时即时生效。 -
-
-
-
@@ -84,49 +88,49 @@ onMounted(() => {
- + \ No newline at end of file diff --git a/src/data/imgList.js b/src/data/imgList.js index b0d29cd..dafb00d 100644 --- a/src/data/imgList.js +++ b/src/data/imgList.js @@ -1,69 +1,25 @@ -const load = ["load/icon.png", "load/bg.jpg"]; +const load = [ + "load/icon.png", -const page = [ - "index/logo.png", - "index/rule-btn.png", - "index/sub-title.png", - "index/cloud-2.png", - "index/prize-btn.png", - "index/cloud-1.png", "index/bg.jpg", - "index/start-btn.png", - "index/tree-1.png", - "index/title.png", - "index/island.png", - - "rule/cls-btn.png", - "rule/arrow.png", - "rule/rule-box.png", - "rule/icon.png", + "music-on.png", + "share.jpg", ]; -// 问题页面 -const pageQA = [ - "qa/bubble-1.png", - "qa/analysis-icon.png", - "qa/create-btn.png", - "qa/next-btn.png", - "qa/incorrect.png", - "qa/correct.png", - "qa/question-box.png", - "qa/tree.png", - "qa/bg.jpg", -] +const page = [ -// 结果页面 -const pageResult = [ - "prize/copy-btn2.png", - "prize/copy-btn.png", - "prize/cls-btn.png", - "prize/got-btn.png", - "prize/no-get-btn.png", - "prize/draw-text.png", "prize/tips.png", - "prize/no-prize.png", - "prize/lucky-bag.png", "prize/star.png", + "prize/draw-text.png", "prize/light.png", - "prize/prize-box.png", - "prize/myPrize-box.png", + "prize/myPrize-box2.png", + "prize/no-prize.png", + "prize/cls-btn.png", + "prize/copy-btn.png", "prize/draw-box.png", - "result/cls-btn.png", - "result/poster-text.png", - "result/go-draw-btn.png", - "result/go-share-btn.png", - "result/text-1.png", - "result/title.png", - "result/create-btn.png", - "result/text-3.png", - "result/text-2.png", - "result/r-bg-2.jpg", - "result/r-bg-1.jpg", - "result/r-bg-3.jpg", - // "result/poster-1.jpg", - // "result/poster-3.jpg", - // "result/poster-2.jpg", -] + + +]; // 处理为vite引入图片格式 function imgCreate(url, img) { @@ -71,15 +27,8 @@ function imgCreate(url, img) { img.push(i); } - - - - const loadImg = []; const pageImg = []; -const pageQAImg = []; -const pageResultImg = []; - load.forEach((element) => { imgCreate(element, loadImg); @@ -89,12 +38,4 @@ page.forEach((element) => { imgCreate(element, pageImg); }); -pageQA.forEach((element) => { - imgCreate(element, pageQAImg); -}); - -pageResult.forEach((element) => { - imgCreate(element, pageResultImg); -}); - -export { loadImg, pageImg,pageQAImg,pageResultImg }; +export { loadImg, pageImg }; diff --git a/src/data/index.js b/src/data/index.js index a0f0fda..07c2f38 100644 --- a/src/data/index.js +++ b/src/data/index.js @@ -1,72 +1,78 @@ export const data = [ - { - id: 1, - type: '1', - question: [ - '低波稳健类产品通常是指配置大比例低波资产,不投资权益类资产的产品 \n,受债市波动影响较小且不受股市影响。低波稳健类产品的产品风险评级是哪个?', - ], - answer: [ - { - aid: 'A', - text: [ - 'R1低风险或R2中低风险', - ], - result:'correct', - }, - { - aid: 'B', - text: [ - 'R4及以上高风险', - ], - result:'incorrect', - }, - ], - analysis: ['解析:选择B。虽然市场热点可能带来诱人的收益,但理财的基本原则是风险管理。通过将投资分散在不同的理财产品和市场,可以降低单一投资的风险,争取资产增长的机会。'] - }, - { - id: 2, - question: [ - '经常热衷于购买现金管理类产品的投资者,如果希望进行“稳健的理财进阶”,需要牺牲一定流动性换取收益空间,以下哪类产品可以帮助实现:', - ], - answer: [ - { - aid: 'A', - text: [ - '最短持有期类理财产品', - ], - result:'correct', - }, - { - aid: 'B', - text: [ - '混合类理财产品', - ], - result:'incorrect', - }, - ], - analysis: ['解析:选择B。现金类产品具有高流动性的特征,更适合日常流动资金。但在长期限选择中,固收理财拥有较大的投资范围和空间,运用策略提供稳健体验,有效平衡风险,力争增厚收益机会,闲钱再进阶。因此不同的资金用途记得匹配不同产品噢。'] - }, - { - id: 3, - question: [ - '低波稳健类理财通常会通过估值、资产、策略三方面实现“低波稳健”的特征,以下哪个描述是正确的:', - ], - answer: [ - { - aid: 'A', - text: [ - '精选存单存款等低波资产的理财产品更稳健', - ], - result:'correct', - }, - { - aid: 'B', - text: [ - '混合估值法不能在市场震荡时帮助净值更平稳', - ], - result:'incorrect', - }, - ], - analysis: ['解析:选择A。最短持有期理财产品拥有较为灵活的申赎机制,在持有时间超过最短持有的时间要求后,随时可发起赎回,闲置时力争收益机会,用钱时满足你的流动性需求。'] - }, -] + { + id: 1, + question: [ + "赛龙舟时,鼓手用节奏统一行动,舵手把控方向,划手齐心发力,三者缺一不可。这体现了哪种投资模式?", + ], + answer: [ + { + aid: "A", + text: "平台化高效协作投资模式,集体智慧", + result: 1, + }, + { + aid: "B", + text: "明星基金经理的单打独斗,个人英雄主义", + result: 0, + }, + ], + tips: [`平安理财采取平台化、模块化的投资模式,通过团队作战能更好协调更优势、更广泛的资源,并最终为客户创造可持续的投资收益,截至 2025 年 5月15日已累计为 1700 万名客户创造1092亿元投资收益。`], + }, + { + id: 2, + question: [ + "赛龙舟经常会遇上河道弯曲或河流湍急,常常出现翻船风险,为了确保顺利抵达终点,在拐弯及面对急流时所使用的技巧与投资中的哪种情况相符?", + ], + answer: [ + { + aid: "A", + text: "追求单车变摩托,冒险前进,重仓搏一把", + result: 0, + }, + { + aid: "B", + text: "坚持绝对收益目标,严格风险控制,稳健为先", + result: 1, + }, + ], + tips: [`稳健是资产长期增值的关键,平安理财坚持以绝对收益为目标,截至2025年5月15日,旗下定开/封闭式多个产品线实现历史到期兑付100%正收益(如启航系列、稳健精选系列、启元系列、新安鑫系列、卓越成长系列、卓越稳健系列等)。`], + }, + { + id: 3, + question: [ + "赛龙舟中,队伍需在发令枪响的瞬间同步起桨,冲刺阶段更需高频划桨。这与下列哪种投资策略相符?", + ], + answer: [ + { + aid: "A", + text: "精准把握市场机会,适当追求超额收益", + result: 1, + }, + { + aid: "B", + text: "一旦配置长期不动,顺其自然随遇而安", + result: 0, + }, + ], + tips: [`稳健为先的前提下,平安理财通过多资产、多策略的能力优势,在低利率时代中力争为投资者创造相对不错的超额收益。如鑫享全球动量策略日开180天持有1号A今年以来年`], + }, + { + id: 4, + question: [ + "赛龙舟通常500米,但有一种达到了30公里,号称龙舟马拉松。如果说500米赛龙舟对应的是投资中短期主义,那么龙舟马拉松对应的是哪种情怀?", + ], + answer: [ + { + aid: "A", + text: "投机主义,左右摇摆或见风使舵", + result: 0, + }, + { + aid: "B", + text: "长期主义精神,坚持长期稳健经营理念", + result: 1, + }, + ], + tips: [`行稳方能致远。长期主义是以长远视角进行决策和行动的价值观,其核心在于追求可持续的价值增长,而非短期利益的最大化。这是平安理财自成立以来一直坚持的投资和经营理念。`], + }, +]; diff --git a/src/page/Home/App.vue b/src/page/Home/App.vue index 42b85a2..e3a9ef9 100644 --- a/src/page/Home/App.vue +++ b/src/page/Home/App.vue @@ -1,12 +1,25 @@ @@ -19,27 +32,16 @@ import MyPrize from "@/components/MyPrize"; import Draw from "@/components/Draw"; import Result from "@/components/Result"; import Rule from "@/components/Rule"; -import { - createBGM, - getQueryString, - screenOrientation, - isAndriod, - fontAdpat, -} from "@/plugins"; +import { getQueryString, screenOrientation, fontAdpat } from "@/plugins"; import { authorize, getUserInfo } from "@/api"; import { Toast } from "vant"; import { useMainStore } from "@/store"; const userStore = useMainStore(); -const showLoad = ref(false); -const showIndex = ref(false); -const showQuestion = ref(false); -const showMyPrize = ref(false); -const showDraw = ref(false); -const showRule = ref(false); -const showResult = ref(false); +const musicUrl = new URL(`@/assets/media/bgm.mp3`, import.meta.url).href; +const showLoad = ref(false); const loadFn = (item) => { if (item.action == "hide") { showLoad.value = false; @@ -47,6 +49,7 @@ const loadFn = (item) => { } }; +const showIndex = ref(false); const indexFn = (item) => { if (item.action == "hide") { showIndex.value = false; @@ -63,6 +66,7 @@ const indexFn = (item) => { } }; +const showQuestion = ref(false); const questionFn = (item) => { if (item.action == "hide") { showQuestion.value = false; @@ -74,27 +78,35 @@ const questionFn = (item) => { } }; +const showMyPrize = ref(false); const myPrizeFn = (item) => { if (item.action == "hide") { showMyPrize.value = false; } }; +const posterId = ref(1); + +const showDraw = ref(false); const drawFn = (item) => { if (item.action == "hide") { showDraw.value = false; } }; +const showResult = ref(true); const resultFn = (item) => { if (item.action == "hide") { showResult.value = false; + console.log("hide", showResult.value); } + if (item.action == "showDraw") { showDraw.value = true; } }; +const showRule = ref(false); const ruleFn = (item) => { if (item.action == "hide") { showRule.value = false; @@ -115,27 +127,10 @@ onMounted(() => { if (res.code == 0) { console.log("我的信息:", res.data); userStore.updateToken(res.data); - createBGM(); // 开始加载组件 showLoad.value = true; - - // ios自动播放音乐 - document.addEventListener("DOMContentLoaded", function () { - function audioAutoPlay() { - var audio = document.getElementById("musicBtn"); - audio.play(); - document.addEventListener( - "WeixinJSBridgeReady", - function () { - WeixinJSBridge.invoke("getNetworkType", {}, function (e) { - audio.play(); - }); - }, - false - ); - } - audioAutoPlay(); - }); + iosMusic(); //自动播放音乐 + gsap.set(".music_icon", { autoAlpha: 1 }); return; } else { authorize({ scopeType: 1, redirectUri: url }).then((res) => { @@ -210,30 +205,94 @@ onMounted(() => { }); } } else { - showLoad.value = true; - createBGM(); + // showLoad.value = true; + iosMusic(); //自动播放音乐 + gsap.set(".music_icon", { autoAlpha: 1 }); } }); -const playMusic = () => { - var audioEle = document.getElementById("audio"); - audioEle.play(); +// ios端音乐自动播放 +const iosMusic = () => { + // ios自动播放音乐 + document.addEventListener("DOMContentLoaded", function () { + function audioAutoPlay() { + var audio = document.getElementById("bg-music"); + audio.play(); + document.addEventListener( + "WeixinJSBridgeReady", + function () { + WeixinJSBridge.invoke("getNetworkType", {}, function (e) { + audio.play(); + }); + }, + false + ); + } + audioAutoPlay(); + }); + + musicBtnAni.fromTo( + ".music_icon", + { rotation: "0" }, + { rotation: "+=360", repeat: -1, duration: 7, ease: "none" } + ); + musicBtnAni.play(); +}; + +// 音乐播放 +const musicBtnAni = gsap.timeline(); +const playStatu = ref(true); +const musicPlay = () => { + let audio = document.getElementById("bg-music"); + if (playStatu.value == true) { + musicBtnAni.pause(); + audio.pause(); + playStatu.value = false; + console.log("暂停"); + } else { + musicBtnAni.play(); + audio.play(); + playStatu.value = true; + console.log("播放"); + } +}; + +const firstClick = () => { + let audio = document.getElementById("bg-music"); + + musicBtnAni.play(); + audio.play(); + playStatu.value = true; + console.log("播放"); }; -