This commit is contained in:
梁泽军 2025-04-16 17:29:16 +08:00
parent 7e4e3af65f
commit 83a60df68d
75 changed files with 2243 additions and 604 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 603 KiB

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 711 B

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 874 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 574 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 574 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 574 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 855 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 KiB

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

View File

@ -119,7 +119,7 @@ const showVC = () => {
<style lang="scss" scoped> <style lang="scss" scoped>
.IndexPage { .IndexPage {
@include pos(100%, 100vh, 0px, 0px); @include pos(100%, 1624px, 0px, 0px);
overflow: hidden; overflow: hidden;
background: linear-gradient(135deg, #d6d1ca, #e5dccf); background: linear-gradient(135deg, #d6d1ca, #e5dccf);
@ -130,8 +130,8 @@ const showVC = () => {
} }
.index-container { .index-container {
@include pos(750px, 1624px, 0px, 50%); @include pos(750px, 1624px, 0px, 0px);
transform: translateY(-50%); // transform: translateY(-50%);
.index-logo { .index-logo {

View File

@ -40,7 +40,7 @@ onMounted(() => {
Preloader({ Preloader({
name: "内页资源", name: "内页资源",
imgs: pageImg, imgs: pageImg,
callback: (progress) => { callback: (progress) => {
gsap.set(".bar", { width: progress + "%" }); gsap.set(".bar", { width: progress + "%" });
loadNum.value = progress; loadNum.value = progress;
}, },

View File

@ -5,6 +5,7 @@ import { data } from "@/data";
import { debounceTap, FYShuffle, mostValue, judgeBigScreen } from "@/plugins"; import { debounceTap, FYShuffle, mostValue, judgeBigScreen } from "@/plugins";
import { useMainStore } from "@/store"; import { useMainStore } from "@/store";
import { subAnswer } from "@/api"; import { subAnswer } from "@/api";
import { computed } from "vue";
// //
const emit = defineEmits(["hide", "showResult", "QuestionPage"]); const emit = defineEmits(["hide", "showResult", "QuestionPage"]);
@ -29,14 +30,14 @@ const checkedOption = ref('')
// //
const answerFn = (item, event) => { const answerFn = (item, event) => {
let e = event.target.parentElement; let e = event.target.parentElement;
console.log('选项', item);
// console.log('', currentId.value + 1);
debounceTap(e, () => { debounceTap(e, () => {
gsap.set('.answer-box', { pointerEvents: 'none' }) gsap.set('.answer-box', { pointerEvents: 'none' })
isChecked.value = true isChecked.value = true
checkedOption.value = item.aid checkedOption.value = item
if (item.result === 'correct') { console.log('checkedOption', checkedOption.value);
if (item.result) {
gsap.set('.create-btn', { display: 'block' }) gsap.set('.create-btn', { display: 'block' })
} else { } else {
gsap.set('.return-btn', { display: 'block' }) gsap.set('.return-btn', { display: 'block' })
@ -111,13 +112,25 @@ onMounted(() => {
gsap.from('.question-box', { duration: 0.5, scale: 0.4, autoAlpha: 0, }) 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'
}
}
}
</script> </script>
<template> <template>
<div class="QuestionPage" @touchmove.prevent> <div class="QuestionPage" @touchmove.prevent>
<div class="question-bg"></div> <div class="question-bg"></div>
<div class="question-container"> <div class="question-container">
<div class="question-box"> <div class="question-box">
<!-- 问题序号 --> <!-- 问题序号 -->
<div class="qa-question-box"> <div class="qa-question-box">
@ -129,23 +142,24 @@ onMounted(() => {
</div> </div>
<!-- 选项 --> <!-- 选项 -->
<div class="answer-box"> <div class="answer-box">
<div class="answer" <div class="answer" :class="getClass(item)" v-for="item in questionList[currentId].answer" :key="item.aid">
:class="[(isChecked) ? item.result + '-bg' : '', checkedOption == item.aid ? 'checked' : 'no-checked']" <div class="answer-text">
v-for="item in questionList[currentId].answer" :key="item.aid"> {{ item.aid }}.{{ item.text }}
<div class="answer-text-box"> </div>
<div class="answer-text"> <div class="result-icon" v-if="isChecked && (item.aid == checkedOption.aid)">
{{ item.aid }}.{{ item.text }} <div :class="item.result ? 'icon-correct' : 'icon-incorrect'"></div>
</div>
</div> </div>
<!-- 可点击区域 --> <!-- 可点击区域 -->
<div class="click-area" @click="answerFn(item, $event)"></div> <div class="click-area" @click="answerFn(item, $event)"></div>
</div> </div>
</div> </div>
<div class="question-tips" v-for="(t, i) in questionList[currentId].tips" :key="i">{{ t }}</div> <div class="question-tips" v-for="(t, i) in questionList[currentId].tips" :key="i">
{{ isChecked ? `${['回答错误!', '回答正确!'][checkedOption.result]}` : `提示:${t}` }}
<div class="return-btn" @click="nextQuestion($event)"></div> </div>
<div class="create-btn" @click="viewResult($event)"></div>
</div> </div>
<div class="return-btn" @click="nextQuestion($event)"></div>
<div class="create-btn" @click="viewResult($event)"></div>
<div class="qa-megaphone"></div>
</div> </div>
<div class="question-gold-icon-1"></div> <div class="question-gold-icon-1"></div>
</div> </div>
@ -154,56 +168,43 @@ onMounted(() => {
<style lang='scss' scope> <style lang='scss' scope>
.QuestionPage { .QuestionPage {
@include pos(100%, 100%, 0px, 0px); @include pos(100%, 1624px, 0px, 0px);
overflow: hidden; overflow: hidden;
.question-bg { .question-bg {
@include pos(750px, 1624px, 0px, 50%); @include pos(750px, 1624px, 0px, 0px);
transform: translateY(-50%); // transform: translateY(-50%);
background-color: rgba($color: #000000, $alpha: 0.3); @include bg_pos("index/bg.jpg");
} }
.question-container { .question-container {
@include pos(750px, 1624px, 0px, 50%); @include pos(750px, 1624px, 0px, 0px);
transform: translateY(-50%);
@include flexCen(); @include flexCen();
background-color: rgba($color: #000000, $alpha: 0.3);
.question-lantern-icon {
pointer-events: none;
@include pos(349px, 443px, 489px, 49px);
@include bg_pos('qa/lantern-icon.png');
}
.question-box { .question-box {
@include pos(721px, 857px, 20px, 340px); @include pos(721px, 857px, 20px, 340px);
@include bg_pos("qa/paper.png"); @include bg_pos("qa/paper.png");
.qa-question-box { .qa-question-box {
@include pos(563px, 660px, 74px, 126px); @include pos(563px, 660px, 74px, 126px);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
// justify-content: space-around; justify-content: space-around;
justify-content: flex-start; // justify-content: flex-start;
align-items: center; align-items: center;
// //
.question { .question {
.question-text { .question-text {
width: 100%;
font-family: 'HarmonyOS_Sans_SC_Regular'; font-family: 'HarmonyOS_Sans_SC_Regular';
font-size: 34px; font-size: 34px;
color: #9e4b00; color: #9e4b00;
line-height: 50px;
padding: 10px;
text-shadow: 0.675px 2.923px 6px rgba(164, 18, 14, 0.004);
// -webkit-transform: matrix( 0.63514641527437,0,0,0.63514641527437,0,0);
} }
} }
// //
@ -214,89 +215,59 @@ onMounted(() => {
justify-content: space-around; justify-content: space-around;
height: 200px; height: 200px;
//
.checked {
border: 1px solid rgb(255, 238, 186) !important;
background-color: #d42122;
.answer-option {
color: #96100f;
}
.answer-text-box {
color: #fff2b9 !important;
}
}
.no-checked {
background-color: #fff2b9;
.answer-option {
color: #9e4b00;
}
.answer-text-box {
color: #9e4b00 !important;
}
}
//
.answer { .answer {
@include box(350px, 65px); @include box(350px, 65px);
position: relative; position: relative;
border-radius: 32.5px; border-radius: 32.5px;
display: flex; display: flex;
justify-content: space-around; justify-content: center;
align-items: center;
border: 1px solid #fff; border: 1px solid #fff;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); color: #9e4b00;
background-color: #fff2b9;
font-weight: 700;
.answer-text {
font-size: 30px;
@include flexCen()
}
.click-area { .click-area {
@include pos(350px, 65px, 0px, 0px); @include pos(350px, 65px, 0px, 0px);
border-radius: 32.5px; border-radius: 32.5px;
} }
.result-icon {
.option-tips { @include box(49px, 45px);
@include box(60px, 60px); margin-left: 20px;
.correct {
.icon-correct {
@include box(100%, 100%); @include box(100%, 100%);
@include bg_pos("qa/correct.png"); @include bg_pos("qa/correct.png");
} }
.incorrect { .icon-incorrect {
@include box(100%, 100%); @include box(49px, 45px);
@include bg_pos("qa/incorrect.png"); @include bg_pos("qa/incorrect.png");
} }
} }
.answer-text-box {
@include box(270px, 100%);
font-family: 'HarmonyOS_Sans_SC_Regular';
color: #ffe2ad;
font-size: 28px;
display: flex;
flex-direction: column;
justify-content: center;
.answer-text {
width: 100%;
// text-align: center;
padding-left: 40px;
}
}
} }
.correct {
color: #d42122;
}
.incorrect {
color: #fff2b9;
background-color: #d42122;
}
} }
.question-tips { .question-tips {
font-size: 25px; font-size: 25px;
width: 100%; width: 100%;
@ -307,25 +278,26 @@ onMounted(() => {
} }
.return-btn {
@include box(246px, 73px);
@include bg_pos("rule/cls-btn.png");
display: none;
}
.create-btn {
@include box(246px, 73px);
@include bg_pos("qa/create-btn.png");
display: none;
}
} }
} }
.return-btn {
@include pos(363px, 113px, 179px, 887px);
@include bg_pos("qa/cls-btn.png");
display: none;
}
.create-btn {
@include pos(363px, 113px, 179px, 887px);
@include bg_pos("qa/create-btn.png");
display: none;
}
.qa-megaphone {
@include pos(171px, 208px, 562px, 512px);
@include bg_pos("qa/megaphone.png");
pointer-events: none;
}
} }
} }
</style> </style>

View File

@ -8,8 +8,7 @@
<swiper-slide v-for="item in 3" <swiper-slide v-for="item in 3"
:style="{ width: '100%', display: 'flex', justifyContent: 'center', }"> :style="{ width: '100%', display: 'flex', justifyContent: 'center', }">
<div class="card-slide" :class="'card-slide-' + item"> <div class="card-slide" :class="'card-slide-' + item">
<img class="card-img" :class="'card-img-' + item" :src="getLarntenImg(item)" alt="" <img class="card-img" :class="'card-img-' + item" :src="getCardImg(item)" alt="" srcset="">
srcset="">
</div> </div>
</swiper-slide> </swiper-slide>
</swiper> </swiper>
@ -33,11 +32,11 @@ import gsap from "gsap"
const emit = defineEmits(['QuestionList', "showResult"]); const emit = defineEmits(['QuestionList', "showResult"]);
const showQuestion = ref(true) const showQuestion = ref(false)
const questionId = ref(1) const questionId = ref(1)
// //
function getLarntenImg(item) { function getCardImg(item) {
return new URL(`../assets/images/question-list/card-${item}.png`, import.meta.url).href return new URL(`../assets/images/question-list/card-${item}.png`, import.meta.url).href
} }
@ -58,17 +57,36 @@ const onShowQuestion = (event) => {
onMounted(() => { onMounted(() => {
showPoster() entryAnimation()
}) })
const showPoster = () => { const entryAnimation = () => {
gsap.to(".QuestionList", { gsap.from(".QuestionList", {
duration: 0.3, duration: 0.5,
autoAlpha: 1, autoAlpha: 0,
});
gsap.from(".ql-swiper-box", {
duration: 0.75,
autoAlpha: 0,
y: -50,
delay: 0.2,
});
gsap.from(".ql-icon", {
duration: 0.75,
autoAlpha: 0,
x: 50,
delay: 0.2,
});
gsap.from(".ql-start-btn", {
duration: 0.75,
autoAlpha: 0,
y: 50,
delay: 0.5,
onComplete: () => {
gsap.fromTo('.ql-icon', { x: 0 }, { duration: 1, scale: 1.1, x: 25, repeat: -1, yoyo: true, ease: 'bount.in' })
}
}); });
// gsap.fromTo('.larnten-slide', { rotation: 0 }, { duration: 2, rotation: 5, transformOrigin: 'top center', repeat: -1, yoyo: true, ease: 'none' })
@ -87,14 +105,14 @@ register();
<style lang='scss' scoped> <style lang='scss' scoped>
.QuestionList { .QuestionList {
@include pos(100%, 100vh, 0px, 0px); @include pos(100%, 1624px, 0px, 0px);
overflow: hidden; overflow: hidden;
background: linear-gradient(135deg, #a11b15, #f80c00); background: linear-gradient(135deg, #a11b15, #f80c00);
visibility: hidden; // visibility: hidden;
.question-list-bg { .question-list-bg {
@include pos(750px, 1624px, 0px, 50%); @include pos(750px, 1624px, 0px, 0px);
transform: translateY(-50%); // transform: translateY(-50%);
@include bg_pos("index/bg.jpg"); @include bg_pos("index/bg.jpg");
} }

View File

@ -16,17 +16,11 @@ console.log('海报id', posterId.value);
const posterImgList = reactive([ const posterImgList = reactive([
new URL(`../assets/images/poster/poster-1.jpg`, import.meta.url).href, new URL(`../assets/images/result/poster-1.jpg`, import.meta.url).href,
new URL(`../assets/images/poster/poster-2.jpg`, import.meta.url).href, new URL(`../assets/images/result/poster-1.jpg`, import.meta.url).href,
new URL(`../assets/images/poster/poster-3.jpg`, import.meta.url).href, new URL(`../assets/images/result/poster-1.jpg`, import.meta.url).href,
new URL(`../assets/images/poster/poster-4.jpg`, import.meta.url).href, new URL(`../assets/images/result/poster-1.jpg`, import.meta.url).href,
new URL(`../assets/images/poster/poster-5.jpg`, import.meta.url).href,
new URL(`../assets/images/poster/poster-6.jpg`, import.meta.url).href,
new URL(`../assets/images/poster/poster-7.jpg`, import.meta.url).href,
new URL(`../assets/images/poster/poster-8.jpg`, import.meta.url).href,
new URL(`../assets/images/poster/poster-9.jpg`, import.meta.url).href,
new URL(`../assets/images/poster/poster-10.jpg`, import.meta.url).href,
new URL(`../assets/images/poster/poster-11.jpg`, import.meta.url).href,
]) ])
// //
@ -56,10 +50,10 @@ const executeTasks = async () => {
if (posterImgList[posterId.value - 1] && eqcodePic.value) { if (posterImgList[posterId.value - 1] && eqcodePic.value) {
posterCreate( posterCreate(
{ width: 750, height: 1334 }, { width: 750, height: 2106 },
[ [
{ name: "bg", src: posterImgList[posterId.value - 1], pos: { w: 750, h: 1334, x: 0, y: 0 } }, { name: "bg", src: posterImgList[posterId.value - 1], pos: { w: 750, h: 2106, x: 0, y: 0 } },
{ name: "eqcode", src: eqcodePic.value, pos: { w: 194, h: 194, x: 514, y: 1098 } }, { name: "eqcode", src: eqcodePic.value, pos: { w: 178, h: 178, x: 532, y: 1887 } },
] ]
); );
} else { } else {
@ -219,21 +213,25 @@ const posterCreate = (option, imageArr) => {
</script> </script>
<template> <template>
<!-- 海报弹窗 -->
<div class="posterPop" @touchmove.prevent> <div class="posterPop" @touchmove.prevent>
<div class="cls-btn-box"> <div class="poster-bg"></div>
<div class="cls-btn" @click="hidePop($event)"></div> <div class="poster-container">
</div> <div class="cls-btn-box">
<div class="poster-box"> <div class="cls-btn" @click="hidePop($event)"></div>
<div class="poster" :class="'poster-' + posterId"> </div>
<img id="posterSrc" src="" alt="" srcset=""> <div class="poster-box">
<div class="poster" :class="'poster-' + posterId">
<img id="posterSrc" src="" alt="" srcset="">
</div>
<!-- <div class="poster-cls-btn"></div> -->
</div>
<div class="save-tips">*长按保存海报</div>
<div class="btn-box">
<div class="go-draw" @click="goDraw($event)"></div>
<div class="go-share" @click="goShare($event)"></div>
</div> </div>
</div> </div>
<div class="save-tips">*长按保存海报</div>
<div class="btn-box">
<div class="go-draw" @click="goDraw($event)"></div>
<div class="go-share" @click="goShare($event)"></div>
</div>
</div> </div>
<!-- 分享提示 --> <!-- 分享提示 -->
<div class="sharePop" @click="hideShare"> <div class="sharePop" @click="hideShare">
@ -244,182 +242,99 @@ const posterCreate = (option, imageArr) => {
<style lang="scss" scoped> <style lang="scss" scoped>
.ResultPage {
@include fixed();
visibility: hidden;
.result-bg {
@include pos(750px, 1624px, 0px, 50%);
transform: translateY(-50%);
background-color: rgba($color: #000000, $alpha: 0.6);
}
.result-container {
@include pos(750px, 1624px, 0px, 50%);
transform: translateY(-50%);
.result-product {
@include pos(619px, 138px, 65px, 1015px);
}
.product-1 {
@include bg_pos("poster/card-1.png");
}
.product-2 {
@include bg_pos("poster/card-2.png");
}
.product-3 {
@include bg_pos("poster/card-3.png");
}
.product-4 {
@include bg_pos("poster/card-4.png");
}
.product-5 {
@include bg_pos("poster/card-5.png");
}
.product-6 {
@include bg_pos("poster/card-6.png");
}
.product-7 {
@include bg_pos("poster/card-7.png");
}
.product-8 {
@include bg_pos("poster/card-8.png");
}
.product-9 {
@include bg_pos("poster/card-9.png");
}
.product-10 {
@include bg_pos("poster/card-10.png");
}
.product-11 {
@include bg_pos("poster/card-11.png");
}
.create-poster {
@include pos(237px, 80px, 257px, 1284px);
@include bg_pos("result/create-btn.png");
}
}
}
.posterPop { .posterPop {
@include fixed(); @include pos(100%, 1624px, 0px, 0px);
@include flexCen(); overflow: hidden;
background-color: rgba($color: #000000, $alpha: 0.6); background: linear-gradient(135deg, #d6d1ca, #e5dccf);
visibility: hidden; visibility: hidden;
.cls-btn-box { .poster-bg {
width: 617px; @include pos(750px, 1624px, 0px, 0px);
display: flex; // transform: translateY(-50%);
justify-content: flex-end; @include bg_pos("index/bg.jpg");
.cls-btn {
@include box(49px, 49px);
@include bg_pos("question-list/cls-btn.png");
margin-right: -20px;
}
} }
.save-tips { .poster-container {
font-size: 20px; @include pos(750px, 1624px, 0px, 0px);
line-height: 20px; // transform: translateY(-50%);
margin-top: 20px; @include flexCen();
color: #fff; background-color: rgba($color: #000000, $alpha: 0.3);
letter-spacing: 2px;
}
.poster-box { .cls-btn-box {
@include box(617px, 881px); width: 617px;
margin-top: 20px; display: flex;
overflow: hidden; justify-content: flex-end;
.poster { .cls-btn {
@include box(100%, 100%); @include box(49px, 49px);
overflow: hidden; @include bg_pos("question-list/cls-btn.png");
margin-right: -20px;
#posterSrc {
@include box(100%, 100%);
opacity: 0;
} }
} }
.poster-1 { .save-tips {
@include bg_pos("poster/card-1.png"); font-size: 20px;
line-height: 20px;
margin-top: 20px;
color: #9e4b00;
letter-spacing: 2px;
} }
.poster-2 { .poster-box {
@include bg_pos("poster/card-2.png"); @include box(713px, 995px);
margin-top: 20px;
overflow: hidden;
position: relative;
.poster-cls-btn{
@include pos(53px, 53px,660px,10px);
@include bg_pos("result/cls-btn.png");
}
.poster {
@include box(100%, 100%);
overflow: hidden;
#posterSrc {
@include box(100%, 100%);
opacity: 0;
}
}
.poster-1 {
@include bg_pos("result/card-1.png");
}
.poster-2 {
@include bg_pos("result/card-1.png");
}
.poster-3 {
@include bg_pos("result/card-1.png");
}
} }
.poster-3 { .btn-box {
@include bg_pos("poster/card-3.png"); @include box(550px, 99px);
} display: flex;
justify-content: space-between;
align-items: center;
margin-top: 20px;
.poster-4 { .go-draw {
@include bg_pos("poster/card-4.png"); @include box(264px, 99px);
} @include bg_pos("result/go-draw-btn.png");
}
.poster-5 { .go-share {
@include bg_pos("poster/card-5.png"); @include box(274px, 95px);
} @include bg_pos("result/go-share-btn.png");
}
.poster-6 {
@include bg_pos("poster/card-6.png");
}
.poster-7 {
@include bg_pos("poster/card-7.png");
}
.poster-8 {
@include bg_pos("poster/card-8.png");
}
.poster-9 {
@include bg_pos("poster/card-9.png");
}
.poster-10 {
@include bg_pos("poster/card-10.png");
}
.poster-11 {
@include bg_pos("poster/card-11.png");
} }
} }
.btn-box {
@include box(489px, 76px);
display: flex;
justify-content: space-between;
margin-top: 20px;
.go-draw {
@include box(226px, 76px);
@include bg_pos("result/go-draw-btn.png");
}
.go-share {
@include box(226px, 76px);
@include bg_pos("result/go-share-btn.png");
}
}
} }
.sharePop { .sharePop {
@ -428,14 +343,14 @@ const posterCreate = (option, imageArr) => {
visibility: hidden; visibility: hidden;
.tips-pic { .tips-pic {
@include pos(100px, 100px, 600px, 100px); @include pos(100px, 100px, 600px, 140px);
@include bg_pos("result/share-tips.svg"); @include bg_pos("result/share-tips.svg");
stroke: #ffffff; stroke: #ffffff;
} }
.tips-text { .tips-text {
font-size: 25px; font-size: 25px;
@include pos(750px, 100px, 0px, 220px); @include pos(750px, 100px, 0px, 260px);
color: #ffffff; color: #ffffff;
text-align: right; text-align: right;
} }

View File

@ -1,9 +1,62 @@
const load = ["load/icon.png", "load/bg.jpg"]; const load = [
"load/icon.png",
"load/icon-2.png",
"index/bg.jpg",
"music-on.png",
"share.jpg",
];
const page = [ const page = [
"index/title.png",
"index/time.png",
"index/paper.png",
"index/text.png",
"index/megaphone.png",
"index/logo.png",
"index/line.png",
"index/card-5.png",
"index/card-3.png",
"index/card-4.png",
"index/card-2.png",
"index/card-1.png", "index/card-1.png",
"index/bg.jpg",
"index/btn.png",
"prize/tips.png",
"prize/star.png",
"prize/draw-text.png",
"prize/light.png",
"prize/myPrize-box.png",
"prize/no-prize.png",
"prize/cls-btn.png",
"prize/copy-btn.png",
"prize/draw-box.png",
"qa/paper.png",
"qa/megaphone.png",
"qa/cls-btn.png",
"qa/correct.png",
"qa/create-btn.png",
"qa/incorrect.png",
"question-list/megaphone.png",
"question-list/card-3.png",
"question-list/btn.png",
"question-list/card-1.png",
"question-list/card-2.png",
"question-list/arrow-l.png",
"result/share-tips.svg",
"result/go-share-btn.png",
"result/poster-1.jpg",
"result/go-draw-btn.png",
"result/cls-btn.png",
"result/card-1.png",
"rule/rule-box.png",
"rule/icon.png",
"rule/arrow.png",
"rule/cls-btn.png",
]; ];
// 处理为vite引入图片格式 // 处理为vite引入图片格式

View File

@ -1,13 +1,21 @@
<template> <template>
<div class="home" @click.once="playMusic"> <div class="home" @click.once="firstClick">
<Index v-if="showIndex" @IndexPage="indexFn"></Index> <div class="home-container">
<QuestionList v-if="showQuestionList" ref="QuestionListRef" @QuestionList="questionListFn" @showResult="onShowResult"></QuestionList> <Index v-if="showIndex" @IndexPage="indexFn"></Index>
<Question v-if="showQuestion" @QuestionPage="questionFn"></Question> <QuestionList v-if="showQuestionList" ref="QuestionListRef" @QuestionList="questionListFn"
<Result v-if="showResult" @ResultPage="resultFn"></Result> @showResult="onShowResult"></QuestionList>
<MyPrize v-if="showMyPrize" @MyPrizePage="myPrizeFn"></MyPrize> <Question v-if="showQuestion" @QuestionPage="questionFn"></Question>
<Draw v-if="showDraw" @DrawPage="drawFn"></Draw> <Result v-if="showResult" @ResultPage="resultFn"></Result>
<Rule v-if="showRule" @RulePage="ruleFn"></Rule> <MyPrize v-if="showMyPrize" @MyPrizePage="myPrizeFn"></MyPrize>
<Loading v-if="showLoad" @LoadPage="loadFn"></Loading> <Draw v-if="showDraw" @DrawPage="drawFn"></Draw>
<Rule v-if="showRule" @RulePage="ruleFn"></Rule>
<Loading v-if="showLoad" @LoadPage="loadFn"></Loading>
<!-- 音乐图标 -->
<div class="music_icon" @click="musicPlay">
<audio style="display: none; height: 0" id="bg-music" autoplay="autoplay" preload="auto" :src="musicUrl"
loop="loop"></audio>
</div>
</div>
</div> </div>
</template> </template>
@ -22,18 +30,19 @@ import Draw from "@/components/Draw";
import Result from "@/components/Result"; import Result from "@/components/Result";
import Rule from "@/components/Rule"; import Rule from "@/components/Rule";
import { import {
createBGM,
getQueryString, getQueryString,
screenOrientation, screenOrientation,
isAndriod,
fontAdpat, fontAdpat,
} from "@/plugins"; } from "@/plugins";
import { authorize, getUserInfo } from "@/api"; import { authorize, getUserInfo } from "@/api";
import { Toast } from "vant"; import { Toast } from "vant";
import { useMainStore } from "@/store"; import { useMainStore } from "@/store";
const userStore = useMainStore(); const userStore = useMainStore();
const musicUrl = new URL(`@/assets/media/bgm.mp3`, import.meta.url).href
const showLoad = ref(false); const showLoad = ref(false);
const loadFn = (item) => { const loadFn = (item) => {
if (item.action == "hide") { if (item.action == "hide") {
@ -78,8 +87,8 @@ const myPrizeFn = (item) => {
} }
}; };
const QuestionListRef= ref(null) const QuestionListRef = ref(null)
const showQuestionList = ref(true); const showQuestionList = ref(false);
const questionListFn = (item) => { const questionListFn = (item) => {
if (item.action == "hide") { if (item.action == "hide") {
showQuestionList.value = false; showQuestionList.value = false;
@ -87,7 +96,8 @@ const questionListFn = (item) => {
}; };
const posterId = ref(1) const posterId = ref(1)
const onShowResult = (item) => { const onShowResult = (item) => {
posterId.value = item.pid || 1 // posterId.value = item.pid || 1
posterId.value = 1
showResult.value = true; showResult.value = true;
} }
@ -102,10 +112,10 @@ const drawFn = (item) => {
const showResult = ref(false); const showResult = ref(false);
const resultFn = (item) => { const resultFn = (item) => {
if (item.action == "hide") { if (item.action == "hide") {
showResult.value = false; showResult.value = false;
console.log('hide',showResult.value); console.log('hide', showResult.value);
} }
if (item.action == "showDraw") { if (item.action == "showDraw") {
@ -123,6 +133,7 @@ const ruleFn = (item) => {
onMounted(() => { onMounted(() => {
fontAdpat(); // fontAdpat(); //
screenOrientation(); // screenOrientation(); //
iosMusic() //
let code = getQueryString("code"); let code = getQueryString("code");
let url = import.meta.env.VITE_URL; let url = import.meta.env.VITE_URL;
@ -134,27 +145,8 @@ onMounted(() => {
if (res.code == 0) { if (res.code == 0) {
console.log("我的信息:", res.data); console.log("我的信息:", res.data);
userStore.updateToken(res.data); userStore.updateToken(res.data);
createBGM();
// //
showLoad.value = true; 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();
});
return; return;
} else { } else {
authorize({ scopeType: 1, redirectUri: url }).then((res) => { authorize({ scopeType: 1, redirectUri: url }).then((res) => {
@ -230,32 +222,100 @@ onMounted(() => {
} }
} else { } else {
showLoad.value = true; showLoad.value = true;
createBGM(); // createBGM();
} }
}); });
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("播放");
}
</script> </script>
<style lang="scss"> <style lang="scss">
#app { #app {
overflow: hidden; overflow: hidden;
background: linear-gradient(135deg, #d6d1ca, #e5dccf); background: linear-gradient(135deg, #d6d1ca, #e5dccf);
font-family: "HarmonyOS_Sans_SC_Regular";
} }
#__vconsole { #__vconsole {
visibility: hidden; visibility: hidden;
} }
#musicBtn {
@include pos(60px, 60px, 50px, 55px); .music_icon {
@include pos(60px, 60px, 50px, 245px);
@include bg_pos("music-on.png");
z-index: 99; z-index: 99;
} }
.home {
@include pos(100%, 100vh, 0px, 0px);
overflow: hidden;
.home-container {
@include pos(750px, 1624px, 0px, 50%);
transform: translateY(-50%);
}
}
// -on // -on
.music-on { .music-on {
@include bg_pos("music-on.png"); @include bg_pos("music-on.png");
@ -266,12 +326,6 @@ const playMusic = () => {
@include bg_pos("music-off.png"); @include bg_pos("music-off.png");
} }
.home {
@include box(750px, 100vh);
overflow: hidden;
margin: 0 auto;
}
.orientationPop { .orientationPop {
@include fixed(); @include fixed();
@include flexCen(); @include flexCen();

View File

@ -6,7 +6,7 @@ export const useMainStore = defineStore("counter", {
return { return {
hasDraw: true, //是否有抽奖机会 hasDraw: true, //是否有抽奖机会
token: "", token: "",
posterId: 3, //测试结果 posterId: 1, //测试结果
hasPrize: true, //是否有奖品 hasPrize: true, //是否有奖品
prizeCode: "oggSVMbeLgSK", //兑换码 prizeCode: "oggSVMbeLgSK", //兑换码
prizeMoney: "8.88", //金额 prizeMoney: "8.88", //金额

View File

@ -86,7 +86,7 @@ export default defineConfig(({ command, mode }) => {
propList: ['*'], // 能转化为vw的属性列表 propList: ['*'], // 能转化为vw的属性列表
viewportUnit: 'vw', // 希望使用的视口单位 viewportUnit: 'vw', // 希望使用的视口单位
fontViewportUnit: 'vw', // 字体使用的视口单位 fontViewportUnit: 'vw', // 字体使用的视口单位
selectorBlackList: ['home', 'pc-content'], // 需要忽略的CSS选择器不会转为视口单位使用原有的px等单位。 selectorBlackList: [ 'pc-content'], // 需要忽略的CSS选择器不会转为视口单位使用原有的px等单位。
minPixelValue: 1, // 设置最小的转换数值如果为1的话只有大于1的值会被转换 minPixelValue: 1, // 设置最小的转换数值如果为1的话只有大于1的值会被转换
mediaQuery: true, // 媒体查询里的单位是否需要转换单位 mediaQuery: true, // 媒体查询里的单位是否需要转换单位
replace: true, // 是否直接更换属性值,而不添加备用属性 replace: true, // 是否直接更换属性值,而不添加备用属性

File diff suppressed because it is too large Load Diff