初始化端午项目

This commit is contained in:
梁泽军 2025-05-20 18:28:02 +08:00
parent d239b3f8fb
commit 749a61f00b
95 changed files with 1399 additions and 1387 deletions

View File

@ -15,25 +15,26 @@
"axios": "^1.6.3", "axios": "^1.6.3",
"gsap": "^3.12.4", "gsap": "^3.12.4",
"howler": "^2.2.4", "howler": "^2.2.4",
"pinia": "^2.1.7", "pinia": "^2.2.0",
"qrcode": "^1.5.3", "qrcode": "^1.5.3",
"swiper": "^11.2.1",
"qs": "^6.11.2", "qs": "^6.11.2",
"vant": "^3.6.12", "vant": "^3.6.12",
"vconsole": "^3.15.1", "vconsole": "^3.15.1",
"vue": "^3.2.41", "vue": "^3.4.0",
"vue-clipboard3": "^2.0.0", "vue-clipboard3": "^2.0.0",
"weixin-js-sdk": "^1.6.5" "weixin-js-sdk": "^1.6.5"
}, },
"devDependencies": { "devDependencies": {
"@vant/auto-import-resolver": "^1.0.2", "@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", "postcss-px-to-viewport-8-plugin": "^1.2.3",
"sass": "^1.68.0", "sass": "^1.68.0",
"sass-loader": "^13.3.2", "sass-loader": "^13.3.2",
"unplugin-auto-import": "^0.17.3", "unplugin-auto-import": "^0.17.3",
"unplugin-vue-components": "^0.26.0", "unplugin-vue-components": "^0.26.0",
"vite": "^3.2.3", "vite": "4.5.10",
"vite-plugin-compression": "^0.5.1", "vite-plugin-compression": "^0.5.1",
"vite-plugin-html": "^3.2.1" "vite-plugin-html": "^3.2.2"
} }
} }

View File

@ -2,7 +2,7 @@ import http from './http'
// 获取code // 获取code
export function authorize(data, authorization) { export function authorize(data, authorization) {
return http.post("/h5/oauth/authorize", return http.post("/h5/Oauth/authorize",
data, data,
true, true,
); );
@ -10,7 +10,7 @@ export function authorize(data, authorization) {
// 获取用户信息 // 获取用户信息
export function getUserInfo(data, authorization) { export function getUserInfo(data, authorization) {
return http.post("/h5/oauth/getUserInfo", return http.post("/h5/Oauth/getUserInfo",
data, data,
true, true,
); );
@ -54,7 +54,7 @@ export function exchangePrize(data, authorization) {
// 分享接口 // 分享接口
export function getShareConfig(data, authorization) { export function getShareConfig(data, authorization) {
return http.post("/h5/oauth/getShareConfig", return http.post("/h5/Oauth/getShareConfig",
data, data,
true, true,
); );

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 582 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 983 B

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 844 B

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 805 B

After

Width:  |  Height:  |  Size: 859 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 756 B

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 B

After

Width:  |  Height:  |  Size: 739 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 756 B

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

View File

@ -14,7 +14,7 @@ const { toClipboard } = useClipboard()
const money = ref("1.88"); const money = ref("1.88");
const code = ref("sss"); const code = ref("PAKJ2025");
const showResult = ref(false); const showResult = ref(false);
const hasPrize = ref(false); const hasPrize = ref(false);
@ -85,20 +85,6 @@ const drawFn = (event) => {
}, 1000); }, 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 { } else {
Toast('今日抽奖次数已用完!') Toast('今日抽奖次数已用完!')
@ -114,7 +100,7 @@ const hide = (event) => {
duration: 0.3, duration: 0.3,
autoAlpha: 0, autoAlpha: 0,
onComplete: () => { onComplete: () => {
emit("DrawPage", {action:"hide"}); emit("DrawPage", { action: "hide" });
}, },
}); });
}); });
@ -122,7 +108,7 @@ const hide = (event) => {
const copyFn = (event) => { const copyFn = (event) => {
let e = event.target; let e = event.target;
toClipboard(code.value) toClipboard(code.value)
debounceTap(e, async() => { debounceTap(e, async () => {
Toast(`复制成功:${code.value}`); Toast(`复制成功:${code.value}`);
}); });
}; };
@ -162,17 +148,16 @@ onMounted(() => {
<div v-show="showResult" class="result-container"> <div v-show="showResult" class="result-container">
<!-- 有奖品 --> <!-- 有奖品 -->
<div class="draw-has" v-show="hasPrize"> <div class="draw-has" v-show="hasPrize">
<div class="draw-has-title">恭喜您抽中</div>
<div class="money">¥{{ money }}</div> <div class="money">¥{{ money }}</div>
<div class="draw-has-text">奖励抽到手快乐马上有</div>
<div class="code-box"> <div class="code-box">
<div class="code">兑奖码{{ code }}</div> <span>兑奖码</span>
<div class="copy-btn" @click="copyFn($event)"></div> <span class="code">{{ code }}</span>
</div> <span class="copy-btn" @click="copyFn($event)"></span>
<div class="code-tips">
<div>兑奖流程前往微信搜索平安理财服务号</div>
<div>公众号发送清凉一夏获取兑换链接</div>
<div>输入兑换码兑换奖品</div>
<div class="code-tips-text">兑换码可在主页面奖品再次查看并复制</div>
</div> </div>
<div class="exchange-tips">兑换流程前往微信搜索平安理财服务号公众号发送五一快乐获取兑奖链接输入兑换码兑换奖品</div>
<div class="exchnage-tips2">兑换码可在主页面我的奖品 再次查看并复制</div>
<div class="cls-btn" @click="hide($event)"></div> <div class="cls-btn" @click="hide($event)"></div>
</div> </div>
<!-- 没有奖品 --> <!-- 没有奖品 -->
@ -183,7 +168,7 @@ onMounted(() => {
</div> </div>
</div> </div>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.DrawPage { .DrawPage {
@ -234,56 +219,93 @@ onMounted(() => {
.draw-has { .draw-has {
position: relative; position: relative;
@include box(665px, 731px); @include box(665px, 731px);
@include bg_pos("prize/myPrize-box.png"); @include bg_pos("prize/myPrize-box2.png");
position: relative;
left: 30px; .draw-has-title {
@include pos(390px, 100px, 110px, 140px);
font-size: 40px;
color: #e95b46;
font-weight: 700;
letter-spacing: 3px;
// background-color: aqua;
@include flexCen();
}
.draw-has-text {
@include pos(390px, 100px, 110px, 300px);
font-size: 30px;
color: #e95b46;
font-weight: 700;
letter-spacing: 0;
// background-color: aqua;
@include flexCen();
}
.money { .money {
@include pos(370px, 81px, 139px, 239px);
display: flex; @include pos(390px, 130px, 110px, 200px);
justify-content: center; @include flexCen();
align-items: center;
color: #e95b46; color: #e95b46;
font-weight: 700; font-weight: 700;
font-size: 58px; font-size: 58px;
letter-spacing: 4px; letter-spacing: 4px;
// background-color: rgb(217, 0, 255);
} }
.code-box { .code-box {
@include pos(390px, 52px, 100px, 508px); @include pos(390px, 52px, 110px, 508px);
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
justify-content: flex-start;
font-size: 25px;
font-weight: 700;
color: #fff6cc;
span {
height: 77px;
line-height: 65px;
}
.code { .code {
font-size: 25px;
font-weight: 700;
margin-right: 10px; margin-right: 10px;
color: #fff6cc;
} }
.copy-btn { .copy-btn {
@include box(77px, 39px); @include box(77px, 39px);
@include bg_pos("prize/copy-btn2.png"); @include bg_pos("prize/copy-btn.png");
} }
} }
.code-tips{ .exchange-tips {
@include pos(390px, 152px, 110px, 558px);
display: flex; display: flex;
flex-direction: column; flex-direction: row;
justify-content: space-around; align-items: start;
@include pos(410px, 120px, 100px, 560px); justify-content: flex-start;
// background: rgba($color: #000000, $alpha: .7);
font-size: 20px; font-size: 20px;
font-weight: 700; // font-weight: 700;
color: #fff6cc; color: #fff6cc;
.code-tips-text{ letter-spacing: 2px;
font-size: 17px; // background-color: aqua;
text-align: center; }
}
.exchnage-tips2 {
@include pos(390px, 52px, 110px, 638px);
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
font-size: 15px;
// font-weight: 700;
color: #fff6cc;
// background-color: aqua;
} }
.cls-btn { .cls-btn {
@include pos(43px, 43px, 517px, 114px); @include pos(82px, 82px, 517px, 114px);
@include bg_pos("prize/cls-btn.png"); @include bg_pos("prize/cls-btn.png");
} }
} }

View File

@ -3,8 +3,6 @@ import { Toast } from "vant";
import { debounceTap } from "@/plugins"; import { debounceTap } from "@/plugins";
import gsap from "gsap"; import gsap from "gsap";
import { useMainStore } from "@/store"; import { useMainStore } from "@/store";
import Preloader from "@/plugins/Preloader";
import { pageQAImg } from "@/data/imgList";
const emit = defineEmits(["IndexPage"]); const emit = defineEmits(["IndexPage"]);
const userStore = useMainStore(); const userStore = useMainStore();
@ -35,25 +33,25 @@ const showRule = (event) => {
}); });
}; };
onMounted(() => { onMounted(() => {
gsap.from( gsap.from(".index-bg", { duration: 1, scale: 1.2, autoAlpha: 0 });
".index-bg,.index-island,.index-cloud-1,.index-cloud-2,.index-tree-1", gsap.from(".index-title", { duration: 1, y: 20, autoAlpha: 0, delay: 1 });
{ duration: 1, scale: 1.2, autoAlpha: 0 } gsap.from(".index-time", { duration: 1, x: 40, autoAlpha: 0, delay: 1 });
); gsap.from(".index-text", { duration: 1, scale: 2, autoAlpha: 0, delay: 1 });
gsap.from(".index-title", { duration: 1, y: 20, autoAlpha: 0 }); gsap.from(".index-logo", { duration: 1, y: 20, autoAlpha: 0, delay: 0.75 });
gsap.from(".index-sub-title", { duration: 1, x: 20, autoAlpha: 0 }); gsap.from(".index-rule-btn", { duration: 1, x: -100, autoAlpha: 0, delay: 1.3 });
gsap.from(".index-rule-btn", { duration: 1, x: -100, autoAlpha: 0 });
gsap.from(".index-prize-btn", { gsap.from(".index-prize-btn", {
duration: 1, duration: 1,
x: -100, x: -100,
autoAlpha: 0, autoAlpha: 0,
delay: 0.3, delay: 1.5,
}); });
gsap.from(".index-start-btn", { gsap.from(".index-start-btn", {
duration: 1, duration: 1,
y: 30, y: 30,
autoAlpha: 0, autoAlpha: 0,
delay: 0.5, delay: 1.5,
}); });
gsap.from(".index-agreement", { gsap.from(".index-agreement", {
duration: 1, duration: 1,
@ -61,61 +59,11 @@ onMounted(() => {
autoAlpha: 0, autoAlpha: 0,
delay: 0.5, delay: 0.5,
onComplete: () => { onComplete: () => {
gsap.to(".index-start-btn", { gsap.to('.index-start-btn', { duration: 1, scale: '0.95', repeat: -1, yoyo: true, ease: 'bounce.out' })
duration: 1, }
scale: "0.9",
repeat: -1,
yoyo: true,
ease: "bounce.in",
});
gsap.to(".index-cloud-1", {
duration: 2,
x: -30,
repeat: -1,
yoyo: true,
ease: "none",
});
gsap.to(".index-cloud-2", {
duration: 2,
x: 30,
repeat: -1,
yoyo: true,
ease: "none",
});
gsap.to(".index-tree-1", {
duration: 2,
y: 10,
repeat: -1,
yoyo: true,
ease: "none",
});
gsap.to(".index-title", {
duration: 2.5,
y: -20,
repeat: -1,
yoyo: true,
ease: "none",
});
gsap.to(".index-sub-title", {
duration: 3,
x: 10,
repeat: -1,
yoyo: true,
ease: "none",
});
//
Preloader({
name: "加载答题页资源",
imgs: pageQAImg,
callback: (progress) => {
// console.log("", progress);
},
}).then((res) => {
console.log("done!");
});
},
}); });
}); });
const vcNum = ref(false); const vcNum = ref(false);
@ -131,29 +79,21 @@ const showVC = () => {
<div class="IndexPage" @touchmove.prevent> <div class="IndexPage" @touchmove.prevent>
<div class="index-bg"></div> <div class="index-bg"></div>
<div class="index-container"> <div class="index-container">
<div class="index-cloud-1"></div>
<div class="index-cloud-2"></div>
<div class="index-tree-1"></div>
<div class="index-island"></div>
<div class="index-logo"></div> <div class="index-logo"></div>
<div class="index-title" @click="showVC"></div> <div class="index-title" @click="showVC"></div>
<div class="index-sub-title"></div> <div class="index-time"></div>
<div class="index-rule-btn" @click="showRule($event)"></div> <div class="index-rule-btn index-left-btn" @click="showRule($event)">活动规则</div>
<!-- v-if="userStore.hasPrize" --> <div class="index-prize-btn index-left-btn" v-if="userStore.hasPrize" @click="showMyPrize($event)">我的奖品</div>
<div class="index-prize-btn" @click="showMyPrize($event)"></div>
<div class="index-start-btn" @click="start"></div> <div class="index-start-btn" @click="start"></div>
<div class="index-agreement"> <div class="index-agreement">
<div class="agreement"> <span>风险提示:本材料由平安理财有限责任公司(以下简称平安理财)制作并提供</span>
风险提示: <span class="b">本资料内容及观点仅供参考不构成对任何人的投资建议</span>
本材料由平安理财有限责任公司(以下简称平安理财)制作并提供<span <span>以上产品投资管理机构/管理人为平安理财代理销售机构不承担产品的投资兑付和风险管理的责任以上产品通过代理销售机构渠道销售的产品风险评级应当以代理销售机构最终披露的评级结果为准以上产品为非保本浮动收益理财产品具体以产品说明书或产品公告披露为准产品的业绩比较基准指管理人基于过往投资经验以及对产品存续期投资市场波动的预判而对本产品所设定的投资目标业绩比较基准不是预期收益率不代表产品的未来表现和实际收益不构成对产品收益的承诺</span>
class="b" <span class="b">理财产品过往业绩不代表其未来表现不等于理财产品实际收益投资须谨慎过往业绩相关数据已经托管人核对</span><span
>本资料内容及观点仅供参考不构成对任何人的投资建议</span class="orange">理财非存款产品有风险投资须谨慎</span>
>以上产品投资管理机构/管理人为平安理财代理销售机构不承担产品的投资兑付和风险管理的责任以上产品通过代理销售机构渠道销售的产品风险评级应当以代理销售机构最终披露的评级结果为准以上产品为非保本浮动收益理财产品具体以产品说明书或产品公告披露为准产品的业绩比较基准指管理人基于过往投资经验以及对产品存续期投资市场波动的预判而对本产品所设定的投资目标业绩比较基准不是预期收益率不代表产品的未来表现和实际收益不构成对产品收益的承诺<span <span>
class="b" 金融消费者不得利用金融产品和服务从事违法活动
>理财产品过往业绩不代表其未来表现不等于理财产品实际收益投资须谨慎过往业绩相关数据已经托管人核对</span </span>
><span class="orange">理财非存款产品有风险投资须谨慎</span
>金融消费者不得利用金融产品和服务从事违法活动
</div>
</div> </div>
</div> </div>
</div> </div>
@ -161,9 +101,9 @@ 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, #90dcff, #51b7ff); background: linear-gradient(135deg, #d6d1ca, #e5dccf);
.index-bg { .index-bg {
@include pos(750px, 1624px, 0px, 50%); @include pos(750px, 1624px, 0px, 50%);
@ -172,93 +112,78 @@ 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{
// pointer-events: none; .index-logo {
// @include pos(632px, 94px, 59px, 267px); pointer-events: none;
// @include bg_pos("index/logo.png"); @include pos(632px, 94px, 59px, 266px);
// } @include bg_pos("index/logo.png");
}
.index-title { .index-title {
// pointer-events: none; // pointer-events: none;
@include pos(633px, 253px, 46px, 254px); @include pos(593px, 155px, 85px, 387px);
@include bg_pos("index/title.png"); @include bg_pos("index/title.png");
} }
.index-island { .index-time {
pointer-events: none; @include pos(433px, 58px, 295px, 565px);
@include pos(714px, 867px, 15px, 542px); @include bg_pos("index/time.png");
@include bg_pos("index/island.png");
} }
.index-cloud-1 { .index-left-btn {
pointer-events: none; border: 2px solid rgb(255, 255, 255);
@include pos(210px, 147px, -15px, 535px); background-color: rgb(243, 87, 4);
@include bg_pos("index/cloud-1.png"); box-shadow: 0px 6px 11px 0px rgba(155, 122, 68, 0.4);
} font-size: 25px;
display: flex;
.index-cloud-2 { align-items: center;
pointer-events: none; justify-content: center;
@include pos(151px, 172px, 656px, 486px); padding-left: 20px;
@include bg_pos("index/cloud-2.png"); color: #ffffff;
} letter-spacing: 1.5px;
border-radius: 21px;
.index-tree-1 {
pointer-events: none;
@include pos(228px, 199px, -45px, 492px);
@include bg_pos("index/tree-1.png");
}
.index-sub-title {
pointer-events: none;
@include pos(423px, 87px, 170px, 486px);
@include bg_pos("index/sub-title.png");
} }
.index-rule-btn { .index-rule-btn {
@include pos(193px, 50px, 612px, 553px); @include pos(184px, 49px, -37px, 578px);
@include bg_pos("index/rule-btn.png");
} }
.index-prize-btn { .index-prize-btn {
@include pos(184px, 49px, 612px, 615px); @include pos(184px, 49px, -37px, 642px);
@include bg_pos("index/prize-btn.png");
} }
.index-start-btn { .index-start-btn {
@include pos(423px, 152px, 156px, 1025px); @include pos(288px, 93px, 231px, 1097px);
@include bg_pos("index/start-btn.png"); @include bg_pos("index/btn.png");
} }
.index-agreement { .index-agreement {
font-family: "HarmonyOS_Sans_SC_Regular"; font-family: "FZZY_Regular";
pointer-events: none; pointer-events: none;
@include pos(736px, 182px, 7px, 1230px); @include pos(736px, 182px, 7px, 1208px);
font-size: 14px;
text-align: justify;
letter-spacing: 0.1px;
color: #ffffff;
padding: 10px;
box-sizing: border-box;
border-radius: 10px;
line-height: 20px;
.agreement {
background-color: rgba(255, 255, 255, 0.75);
font-size: 14px; .b {
text-align: justify; font-weight: 700;
letter-spacing: 0.1px; }
color: #124284;
padding: 10px;
box-sizing: border-box;
border-radius: 2px;
line-height: 20px;
.b { .orange {
font-weight: 700; color: #ff7127;
} font-weight: 700;
.orange {
color: #f5430c;
font-weight: 700;
}
} }
} }
} }
} }
</style> </style>

View File

@ -13,6 +13,7 @@ const userStore = useMainStore();
const loadNum = ref(0); const loadNum = ref(0);
onMounted(() => { onMounted(() => {
Preloader({ Preloader({
name: "加载页资源", name: "加载页资源",
imgs: loadImg, imgs: loadImg,
@ -24,7 +25,6 @@ onMounted(() => {
duration: 0.2, duration: 0.2,
autoAlpha: 1, autoAlpha: 1,
onComplete: () => { onComplete: () => {
//
if (import.meta.env.VITE_MODE != "dev") { if (import.meta.env.VITE_MODE != "dev") {
getMyPrize({}, userStore.token).then((res) => { getMyPrize({}, userStore.token).then((res) => {
if (res.code == 0) { if (res.code == 0) {
@ -36,16 +36,17 @@ onMounted(() => {
} }
}); });
} }
Preloader({ Preloader({
name: "内页资源", name: "内页资源",
imgs: pageImg, imgs: pageImg,
callback: (progress) => { callback: (progress) => {
// console.log('', progress);
gsap.set(".bar", { width: progress + "%" }); gsap.set(".bar", { width: progress + "%" });
loadNum.value = progress; loadNum.value = progress;
}, },
}).then((res) => { }).then((res) => {
console.log("加载完成"); console.log("加载完成");
gsap.to(".LoadPage", { gsap.to(".LoadPage", {
duration: 1, duration: 1,
autoAlpha: 0, autoAlpha: 0,
@ -66,11 +67,11 @@ onMounted(() => {
<div class="load-container"> <div class="load-container">
<div class="load-icon"></div> <div class="load-icon"></div>
<div class="load-box"> <div class="load-box">
<div class="bar"> <div class="bar"></div>
<div class="bar-icon"></div> </div>
</div> <div class="load-num">
<span class="num">{{ loadNum }}%</span>
</div> </div>
<div class="load-num">{{ loadNum }}%</div>
</div> </div>
</div> </div>
</template> </template>
@ -85,7 +86,8 @@ onMounted(() => {
.load-bg { .load-bg {
@include pos(750px, 100%, 0px, 50%); @include pos(750px, 100%, 0px, 50%);
transform: translateY(-50%); transform: translateY(-50%);
@include bg_pos("load/bg.jpg"); background-image: -webkit-linear-gradient(-90deg, #ffffff 15%, #4ebbe5 100%);
} }
.load-container { .load-container {
@ -94,44 +96,46 @@ onMounted(() => {
// transform: translateY(-50%); // transform: translateY(-50%);
.load-icon { .load-icon {
@include pos(83px, 101px, 325px, 370px); @include pos(409px, 215px,199px, 350px);
@include bg_pos("load/icon.png"); @include bg_pos("load/icon.png");
} }
.load-box { .load-box {
@include pos(576px, 36px, 87px, 500px); @include pos(582px, 45px, 83px, 450px);
border-radius: 20px; border-radius: 25px;
overflow: hidden; padding: 1px;
padding: 4.5px; border: 1px solid rgb(243, 87, 4);
@include bg_pos("load/bar-box.png");
.bar { .bar {
@include box(0%, 27px); @include box(0%, 38px);
position: relative; border-radius: 20px;
@include bg_pos("load/bar.png"); border: 1px solid rgb(255, 255, 255);
background-size: 551px 27px;
.bar-icon { background-image: -webkit-linear-gradient(0deg, #f7c86f 0%, #f25501 100%);
@include box(35px, 36px);
position: absolute;
top: -4.5px;
left: 95%;
@include bg_pos("load/bar-icon.png");
}
} }
} }
.load-num { .load-num {
@include pos(750px, 50px, 0px, 570px); @include pos(235px, 80px, 256px, 511px);
text-align: center;
font-size: 38px; @include flexCen();
color: rgb(255, 255, 255);
line-height: 40px;
font-weight: 700; .num {
background: linear-gradient(to right, #dadada, #ffffff); font-size: 40px;
background-clip: text; color: #f25501;
-webkit-background-clip: text; font-weight: 700;
-webkit-text-fill-color: transparent;
text-shadow: 0.9px 3.897px 0px rgba(44, 182, 255, 0.004); /* 文字填充色 */
text-shadow:
-1px -1px 0 #ffffff,
1px -1px 0 #ffffff,
-1px 1px 0 #ffffff,
1px 1px 0 #ffffff;
/* 四个方向阴影叠加 */
}
} }
.btn { .btn {

View File

@ -2,28 +2,27 @@
import { debounceTap } from "@/plugins"; import { debounceTap } from "@/plugins";
import gsap from "gsap"; import gsap from "gsap";
import { Toast } from "vant"; import { Toast } from "vant";
import useClipboard from "vue-clipboard3"; import useClipboard from 'vue-clipboard3'
import { useMainStore } from "@/store"; import { useMainStore } from "@/store";
import { onMounted } from "vue"; import { onMounted } from "vue";
// //
const emit = defineEmits(["MyPrizePage"]); const emit = defineEmits(["MyPrizePage"]);
const userStore = useMainStore(); const userStore = useMainStore();
const { toClipboard } = useClipboard(); const { toClipboard } = useClipboard()
const money = ref(userStore.prizeMoney); const money = ref(userStore.prizeMoney);
const code = ref(userStore.prizeCode); const code = ref(userStore.prizeCode);
const hasPrize = ref(userStore.hasPrize);
const copyFn = (event) => { const copyFn = (event) => {
let e = event.target; let e = event.target;
toClipboard(code.value); toClipboard(code.value)
debounceTap(e, () => { debounceTap(e, () => {
Toast(`复制成功:${code.value}`); Toast(`复制成功:${code.value}`);
}); });
}; };
const hide = (event) => { const hide = (event) => {
let e = event.target; let e = event.target;
debounceTap(e, () => { debounceTap(e, () => {
@ -48,24 +47,22 @@ onMounted(() => {
</script> </script>
<template> <template>
<div class="MyPrizePage" @touchmove.prevent> <div class="MyPrizePage">
<div class="myPrize-container"> <div class="myPrize-container">
<div v-if="hasPrize" class="myPrize-has-prize"> <div class="myPrize-title">恭喜您抽中</div>
<div class="myPrize-icon"></div> <div class="myPrize-money">¥{{ money }}</div>
<div class="myPrize-money">已获得¥{{ money }}元现金红包</div> <div class="myPrize-text">奖励抽到手快乐马上有</div>
<div class="myPrize-code-box"> <div class="myPrize-code-box">
<div class="code">兑换码{{ code }}</div> <span>兑奖码</span>
<div class="myPrize-copy-btn" @click="copyFn($event)"></div> <div class="code">{{ code }}</div>
</div> <div class="myPrize-copy-btn" @click="copyFn($event)"></div>
<div class="myPrize-tips">兑换流程前往微信搜索平安理财服务号公众号发送清凉一夏获取兑奖链接输入兑换码兑换奖品</div>
</div>
<div v-else class="myPrize-no-prize">
暂无中奖记录
</div> </div>
<div class="exchange-tips">兑换流程前往微信搜索平安理财服务号公众号发送五一快乐获取兑奖链接输入兑换码兑换奖品</div>
<div class="exchnage-tips2">兑换码可在主页面我的奖品 再次查看并复制</div>
<div class="myPrize-cls-btn" @click="hide($event)"></div>
</div> </div>
<div class="myPrize-cls-btn" @click="hide($event)"></div>
</div> </div>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.MyPrizePage { .MyPrizePage {
@ -75,76 +72,101 @@ onMounted(() => {
.myPrize-container { .myPrize-container {
position: relative; position: relative;
@include box(683px, 585px); @include box(665px, 731px);
@include bg_pos("prize/prize-box.png"); @include bg_pos("prize/myPrize-box2.png");
.myPrize-has-prize { .myPrize-title {
@include pos(683px, 485px, 0px, 130px); @include pos(390px, 100px, 110px, 140px);
font-size: 40px;
color: #e95b46;
font-weight: 700;
letter-spacing: 3px;
// background-color: aqua;
@include flexCen();
}
.myPrize-text {
@include pos(390px, 100px, 110px, 300px);
font-size: 30px;
color: #e95b46;
font-weight: 700;
letter-spacing: 0;
// background-color: aqua;
@include flexCen();
}
.myPrize-money {
@include pos(370px, 81px, 139px, 239px);
display: flex; display: flex;
flex-direction: column; justify-content: center;
// justify-content: space-around;
align-items: center; align-items: center;
color: #0070d9; color: #e95b46;
font-weight: 700;
font-size: 58px;
letter-spacing: 4px;
}
.myPrize-icon { .myPrize-code-box {
@include box(204px, 214px); @include pos(390px, 52px, 110px, 500px);
@include bg_pos("prize/lucky-bag.png"); display: flex;
margin: 20px auto; flex-direction: row;
align-items: center;
justify-content: flex-start;
font-size: 25px;
font-weight: 700;
color: #fff6cc;
span {
// height: 77px;
line-height: 65px;
} }
.myPrize-money {
align-items: center; .code {
font-size: 25px;
font-weight: 700; font-weight: 700;
font-size: 28px; margin-right: 10px;
letter-spacing: 2px; color: #fff6cc;
} }
.myPrize-code-box { .myPrize-copy-btn {
display: flex; @include box(77px, 39px);
flex-direction: row; @include bg_pos("prize/copy-btn.png");
align-items: center;
width: 70%;
.code {
font-size: 20px;
font-weight: 700;
margin-right: 10px;
color: #0070d9;
}
.myPrize-copy-btn {
@include box(52px, 25px);
@include bg_pos("prize/copy-btn.png");
}
}
.myPrize-tips{
width: 70%;
font-size: 20px;
line-height: 27px;
// padding: 0px 100px;
} }
} }
.myPrize-no-prize{ .exchange-tips {
@include pos(683px, 485px, 0px, 130px); @include pos(390px, 152px, 110px, 558px);
display: flex; display: flex;
flex-direction: column; flex-direction: row;
// justify-content: space-around; align-items: start;
align-items: center; justify-content: flex-start;
color: #6b6b6b; font-size: 20px;
font-size: 50px; // font-weight: 700;
line-height: 400px; color: #fff6cc;
pointer-events: none; letter-spacing: 2px;
// background-color: aqua;
} }
.exchnage-tips2 {
} @include pos(390px, 52px, 110px, 638px);
.myPrize-cls-btn { display: flex;
@include box(43px, 43px); flex-direction: row;
@include bg_pos("prize/cls-btn.png"); align-items: center;
margin-top: 50px; justify-content: center;
font-size: 15px;
// font-weight: 700;
color: #fff6cc;
// background-color: aqua;
} }
.myPrize-cls-btn {
@include pos(82px, 82px, 517px, 114px);
@include bg_pos("prize/cls-btn.png");
}
}
} }
</style> </style>

View File

@ -5,51 +5,32 @@ 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 Preloader from "@/plugins/Preloader";
import { pageResultImg } from "@/data/imgList";
// //
const emit = defineEmits(["QuestionPage"]); const emit = defineEmits([ "QuestionPage"]);
const userStore = useMainStore(); 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 questionList = ref(data); //
const answerList = ref([]); //
const activeId = ref(""); //
const showResultBtn = ref(false);
const isChecked = ref(false); const isChecked = ref(false);
const checkedOption = ref("");
const QaResult = ref(1); //
// //
const answerFn = (item, event) => { const answerFn = (item, event) => {
let e = event.target.parentElement; 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" }); gsap.set(".answer-box", { pointerEvents: "none" });
isChecked.value = true; isChecked.value = true;
// console.log("currentId.value", currentId.value); checkedOption.value = item;
if (currentId.value == 2) { console.log("checkedOption", checkedOption.value);
// console.log("over"); QaResult.value = item.result;
gsap.set(".create-btn", { autoAlpha: 1 }); gsap.to(".qp-result ", { duration: 0.5, autoAlpha: 1, delay: 1 });
} else {
gsap.set(".next-btn", { autoAlpha: 1 });
}
}); });
}; };
@ -57,12 +38,16 @@ const answerFn = (item, event) => {
const nextQuestion = (event) => { const nextQuestion = (event) => {
let e = event.target; let e = event.target;
debounceTap(e, () => { debounceTap(e, () => {
isChecked.value = false; gsap.to(".qp-result", {
gsap.set(".option-tips,.analysis", { autoAlpha: 0 }); duration: 0.5,
currentId.value++; autoAlpha: 0,
activeId.value = ""; onComplete: () => {
gsap.set(".answer-box", { pointerEvents: "initial" }); isChecked.value = false;
gsap.set(".next-btn", { autoAlpha: 0 }); checkedOption.value = "";
gsap.set(".answer-box", { pointerEvents: "auto" });
currentId.value++;
},
});
}); });
}; };
@ -70,8 +55,9 @@ const nextQuestion = (event) => {
const viewResult = (event) => { const viewResult = (event) => {
let e = event.target; let e = event.target;
debounceTap(e, () => { debounceTap(e, () => {
// id // id
userStore.updatePosterId(getRandomNumber([1, 2, 3])); userStore.posterId = currentId.value + 1;
gsap.set(".question-box", { pointerEvents: "none" }); gsap.set(".question-box", { pointerEvents: "none" });
Toast("答题结束"); Toast("答题结束");
Toast.loading({ Toast.loading({
@ -94,7 +80,7 @@ const viewResult = (event) => {
duration: 0.5, duration: 0.5,
autoAlpha: 0, autoAlpha: 0,
onComplete: () => { onComplete: () => {
emit("QuestionPage", { action: "showResult" }); emit("showResult", { action: "showResult" });
}, },
}); });
}, 1000); }, 1000);
@ -102,11 +88,11 @@ const viewResult = (event) => {
} else { } else {
setTimeout(() => { setTimeout(() => {
Toast.clear(); Toast.clear();
gsap.to(".QuestionPage", { gsap.to(".QuestionPage,.qp-result", {
duration: 0.5, duration: 0.5,
autoAlpha: 0, autoAlpha: 0,
onComplete: () => { onComplete: () => {
emit("QuestionPage", { action: "showResult" }); emit("QuestionPage", { action: 'showResult' });
}, },
}); });
}, 1000); }, 1000);
@ -114,41 +100,18 @@ const viewResult = (event) => {
}); });
}; };
//
const getRandomNumber = (arr) => {
var randomIndex = Math.floor(Math.random() * arr.length);
return arr[randomIndex];
};
onMounted(() => { onMounted(() => {
gsap.from(".question-bg", { duration: 0.5, autoAlpha: 0 }); gsap.from(".question-bg", { duration: 0.5, autoAlpha: 0 });
gsap.from(".question-box", { duration: 0.5, y: 30, autoAlpha: 0 }); gsap.from(".question-box", { duration: 0.5, scale: 0.4, 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",
});
}); });
const getClass = (item) => {
if (isChecked.value) {
if (checkedOption.value.aid == item.aid) {
return item.result ? "correct" : "incorrect";
}
}
};
</script> </script>
<template> <template>
@ -156,12 +119,15 @@ onMounted(() => {
<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="question-tree"></div> <div class="question-serial">
<div class="question-con"> <div>
<!-- 问题序号 --> <div class="serial-icon"></div>
<div class="qa-number">{{ questionList[currentId].id }}</div> <div class="serial-text">{{ currentId + 1 }}</div>
<div class="qa-question-box"> </div>
<!-- 问题 --> <div class="serial-num">{{ currentId+1 }}/{{ questionList.length }}</div>
</div>
<div class="qa-question-box">
<div class="question">
<div <div
class="question-text" class="question-text"
v-for="item in questionList[currentId].question" v-for="item in questionList[currentId].question"
@ -170,242 +136,254 @@ onMounted(() => {
{{ item }} {{ item }}
</div> </div>
</div> </div>
</div> <!-- 选项 -->
</div> <div class="answer-box">
<!-- 选项 --> <div
<div class="answer-box"> class="answer"
<div :class="getClass(item)"
class="answer" v-for="item in questionList[currentId].answer"
v-for="(item, index) in questionList[currentId].answer" :key="item.aid"
:class="[ >
isChecked ? item.result + '-text' : '', <div class="answer-text">{{ item.aid }}.{{ item.text }}</div>
isChecked ? item.result + '-box' : '', <div
]" class="result-icon"
:key="item.aid" v-if="isChecked && item.aid == checkedOption.aid"
> >
<div class="answer-text" v-for="a in item.text" :key="a"> <div
{{ item.aid }}.{{ a }} :class="item.result ? 'icon-correct' : 'icon-incorrect'"
></div>
</div>
<!-- 可点击区域 -->
<div class="click-area" @click="answerFn(item, $event)"></div>
</div>
</div> </div>
<div class="option-tips"> <!-- <div class="question-tips" v-for="(t, i) in questionList[currentId].tips" :key="i">
<div :class="item.result"></div> <div v-if='questionList[currentId].tips.length == 1'>
</div> {{ isChecked ? `${['回答错误!', '回答正确!'][checkedOption.result]}` : `提示:${t}` }}
<!-- 对话框气泡 --> </div>
<div class="bubble-1"></div> <div v-else>
<div :class="index == 0 ? 'bubble-left' : 'bubble-right'"></div> {{ isChecked ? `${i == 0 ? ['回答错误!', '回答正确!'][checkedOption.result] : ''}` : `${i == 0 ? '提示:' : ''}${t}` }}
<!-- 可点击区域 --> </div>
<div class="click-area" @click="answerFn(item, $event)"></div> </div> -->
</div> </div>
<div class="return-btn" @click="nextQuestion($event)"></div>
<div class="create-btn" @click="viewResult($event)"></div>
</div> </div>
<!-- 解析 --> <div class="question-gold-icon-1"></div>
<!-- <div class="analysis"> </div>
<div v-for="li in questionList[currentId].analysis" :key="li"> </div>
<span class="analysis-icon"></span> <div class="qp-result">
{{ li }} <div class="qp-result-box">
</div> <div
</div> --> class="qp-result-icon"
<div class="next-btn" @click="nextQuestion($event)"></div> :class="!QaResult ? 'is-incorrect' : ''"
<div class="create-btn" @click="viewResult($event)"></div> ></div>
<div class="qp-result-text">{{ QaResult ? "答对啦" : "答错啦" }}</div>
<div class="qp-tips-text">{{ questionList[currentId].tips[0] }}</div>
<div class="qp-result-btn"></div>
</div>
<div
class="next-btn"
@click="
currentId == questionList.length - 1
? viewResult($event)
: nextQuestion($event)
"
>
{{ currentId == questionList.length - 1 ? "查看结果" : "下一题" }}
</div> </div>
<!-- 进度条 -->
<Progress
:percentage="((currentId + 1) / 3) * 100"
pivot-color="#7232dd"
:show-pivot="false"
color="linear-gradient(to right, rgb(49, 116, 246), rgb(83, 131, 227))"
/>
</div> </div>
</template> </template>
<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%); background-image: -webkit-linear-gradient(
@include bg_pos("qa/bg.jpg"); -90deg,
#ffffff 15%,
#4ebbe5 100%
);
} }
.question-container { .question-container {
@include pos(750px, 1180px, 0px, 50%); @include pos(750px, 1624px, 0px, 0px);
transform: translateY(-50%);
@include flexCen(); @include flexCen();
justify-content: space-around; background-color: rgba($color: #000000, $alpha: 0.3);
.question-box { .question-box {
@include box(696px, 441px); @include pos(727px, 769px, 22px, 308px);
@include bg_pos("qa/question-box.png"); @include bg_pos("qa/paper.png");
position: relative;
.question-tree { .question-serial {
@include pos(277px, 232px, -100px, -141px); @include pos(560px, 90px, 110px, 34px);
@include bg_pos("qa/tree.png");
}
.question-con {
@include pos(696px, 441px, 0px, 0px);
@include bg_pos("qa/question-box.png");
.qa-number {
@include pos(696px, 86px, 0px, 0px);
font-size: 40px;
color: #ffffff;
font-weight: 700;
display: flex;
justify-content: center;
align-items: center;
text-align: justifyLeft;
text-shadow: 0px 6px 6px rgba(49, 116, 246, 0.9);
}
.qa-question-box {
@include pos(626px, 243px, 37px, 177px);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
//
.question-text {
width: 100%;
font-family: "HarmonyOS_Sans_SC_Regular";
font-size: 30px;
letter-spacing: 1.5px;
color: #065ac6;
text-align: center;
padding: 40px;
text-align: justify;
line-height: 55px;
}
}
}
}
//
.answer-box {
@include box(750px, 205px);
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
color: #065ac6;
font-size: 26px;
line-height: 80px;
margin-top: 40px;
padding: 0 50px;
font-family: "HarmonyOS_Sans_SC_Regular";
.answer {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: space-around; flex-wrap: nowrap;
line-height: 75px; justify-content: space-between;
height: 74px; align-items: center;
padding: 0px 30px; .serial-text {
border-radius: 50px; color: #ffffff;
border: 1px solid rgb(255, 255, 255); font-size: 40px;
background-color: rgba(255, 255, 255, 0.361);
position: relative;
box-shadow: 0px 0px 5px rgba(255, 255, 255, 0.361) inset;
.answer-text {
white-space: nowrap;
} }
.serial-num {
.bubble-1 { font-size: 60px;
@include pos(55px, 5px, 88px, 7px); padding-right: 20px;
@include bg_pos("qa/bubble-1.png"); color: transparent;
} -webkit-text-stroke: 3px #ffffff; /* 控制描边粗细和颜色 */
text-stroke: 3px #ffffff;
.bubble-left {
@include pos(26px, 15px, 88px, 72px);
border: 10px solid transparent;
border-top-color: rgba(255, 255, 255, 0.9);
border-bottom: 0;
margin-left: -10px;
margin-bottom: -10px;
// @include bg_pos("qa/jiao-1.png");
}
.bubble-right {
@include box(26px, 15px);
border: 10px solid transparent;
border-top-color: rgba(255, 255, 255, 0.9);
border-bottom: 0;
margin-left: -5px;
margin-bottom: -5px;
position: absolute;
top: 72px;
right: 88px;
}
.click-area {
@include pos(100%, 100%, 0px, 0px);
border-radius: 47.5px;
// background: rgba($color: #000000, $alpha: 0.5);
} }
} }
.correct-text { .qa-question-box {
color: #e74c00; @include pos(563px, 660px, 74px, 116px);
// background-color: rgba(255, 255, 255, 0.471); display: flex;
box-shadow: 5px 5px 5px rgba(255, 240, 192, 0.471) inset; flex-direction: column;
} justify-content: flex-start;
align-items: center;
.option-tips { //
@include box(40px, 40px); .question {
visibility: hidden; margin: 40px auto;
.correct { .question-text {
@include box(74px, 74px); font-family: "FZZY_Regular";
@include bg_pos("qa/correct.png"); font-size: 34px;
position: absolute; color: #55240d;
right: -20px; line-height: 50px;
top: 0px; text-align: justify;
font-weight: 700;
}
} }
.incorrect { //
@include box(74px, 74px); .answer-box {
@include bg_pos("qa/incorrect.png"); display: flex;
position: absolute; flex-direction: column;
right: -20px; align-items: center;
top: 0px; justify-content: space-around;
// height: 200px;
//
.answer {
width: 504px;
position: relative;
border-radius: 32.5px;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #fff;
color: #9e4b00;
background-color: #fff2b9;
margin-bottom: 30px;
padding: 10px 20px;
.answer-text {
font-size: 30px;
line-height: 40px;
@include flexCen();
}
.click-area {
width: 100%;
height: 100%;
border-radius: 32.5px;
position: absolute;
}
.result-icon {
position: absolute;
@include box(504px, 45px);
top: 50%;
transform: translateY(-55%);
left: 460px;
.icon-correct {
@include box(76px, 56px);
@include bg_pos("qa/correct.png");
}
.icon-incorrect {
@include box(52px, 54px);
@include bg_pos("qa/incorrect.png");
}
}
}
.correct {
color: #ffe8b4;
font-weight: 700;
// background: linear-gradient(-45deg, #facc22, #f83600);
background-color: #f83600;
border: 2px solid #f0d0ad;
//
box-shadow: 0px 5px 10px rgba($color: #0188d5, $alpha: 0.5);
border-radius: 32.5px;
}
.incorrect {
color: #f83600;
font-weight: 700;
}
}
.question-tips {
font-size: 25px;
width: 100%;
font-family: "FZZY_Regular";
color: #ab7133;
text-align: center;
padding: 5px;
} }
} }
} }
//
.analysis {
visibility: hidden;
width: 95%;
font-family: "HarmonyOS_Sans_SC_Regular";
font-size: 25px;
color: #e74c00;
text-align: justify;
padding: 10px 50px;
// height: 100px;
.analysis-icon {
display: inline-block;
@include box(32px, 31px);
@include bg_pos("qa/analysis-icon.png");
}
}
.next-btn {
@include box(256px, 70px);
@include bg_pos("qa/next-btn.png");
// display: none;
visibility: hidden;
}
.create-btn {
@include box(256px, 70px);
@include bg_pos("qa/create-btn.png");
// display: none;
visibility: hidden;
}
} }
} }
</style>
.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;
}
}
</style>

View File

@ -2,7 +2,7 @@
import { gsap } from "gsap"; import { gsap } from "gsap";
import { debounceTap } from "@/plugins"; import { debounceTap } from "@/plugins";
import { useMainStore } from "@/store"; import { useMainStore } from "@/store";
import { posterCreate } from "@/plugins";
import { Toast } from "vant"; import { Toast } from "vant";
import QRCode from "qrcode"; import QRCode from "qrcode";
import { reactive } from "vue"; import { reactive } from "vue";
@ -10,97 +10,85 @@ import { reactive } from "vue";
// //
const emit = defineEmits(["ResultPage"]); const emit = defineEmits(["ResultPage"]);
const userStore = useMainStore(); const userStore = useMainStore();
const posterId = ref(Math.floor(Math.random() * 3) + 1); //id13 const posterId = ref(userStore.posterId); //id111
const posterTextSrc = new URL(`../assets/images/result/poster-text.png`, import.meta.url).href console.log("海报id", posterId.value);
const posterImgList = reactive([ const posterImgSrc = new URL(
new URL(`../assets/images/result/poster-1.jpg`, import.meta.url).href, `../assets/images/result/poster.jpg`,
new URL(`../assets/images/result/poster-2.jpg`, import.meta.url).href, import.meta.url
new URL(`../assets/images/result/poster-3.jpg`, import.meta.url).href, ).href;
]);
// //
const eqcodePic = ref(); const eqcodePic = ref();
onMounted(() => { onMounted(async () => {
console.log("posterId:", posterId.value); //
let eqCodeUrl = import.meta.env.VITE_URL; await executeTasks();
QRCode.toDataURL(eqCodeUrl) });
.then((url) => {
eqcodePic.value = url;
// console.log("eq", eqcodePic.value);
})
.catch((err) => {
console.error(err);
});
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, duration: 0.7,
scale: 1.2, scale: 1.2,
autoAlpha: 0, autoAlpha: 0,
}); });
gsap.from(".result-title", { gsap.from(".poster-box", {
duration: 0.7, duration: 0.7,
y: 20, scale: 0.6,
autoAlpha: 0, autoAlpha: 0,
delay:0.3,
}); });
gsap.from(".r-text", { gsap.from(".save-tips", {
duration: 0.7, duration: 0.7,
scale: .5, scale: 0.7,
autoAlpha: 0, autoAlpha: 0,
delay:0.5, delay: 0.3,
}); });
gsap.from(".create-poster", { gsap.from(".go-draw", {
duration: 0.7, duration: 0.7,
y: 20, y: -30,
autoAlpha: 0, autoAlpha: 0,
delay:1, delay: 0.5,
onComplete:()=>{
gsap.to('.create-poster',{duration:1,scale:'0.9',repeat:-1,yoyo:true,ease:'bounce.in'})
}
}); });
}); gsap.from(".go-share", {
duration: 0.7,
// y: -30,
const createPoster = (event) => { autoAlpha: 0,
let e = event.target.parentElement; delay: 0.7,
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})
}); });
}; };
// //
const goDraw = (event) => { const goDraw = (event) => {
let e = event.target.parentElement; let e = event.target;
console.log('e',e);
debounceTap(e, () => { debounceTap(e, () => {
if (userStore.hasDraw) { if (userStore.hasDraw) {
emit("ResultPage", { action: "showDraw" }); emit("ResultPage", { action: "showDraw" });
@ -114,13 +102,32 @@ const goDraw = (event) => {
const hidePop = (event) => { const hidePop = (event) => {
let e = event.target; let e = event.target;
debounceTap(e, () => { 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) => { const goShare = (event) => {
let e = event.target.parentElement; let e = event.target;
debounceTap(e, () => { debounceTap(e, () => {
gsap.to(".sharePop", { duration: 0.5, autoAlpha: 1 }); gsap.to(".sharePop", { duration: 0.5, autoAlpha: 1 });
}); });
@ -130,39 +137,95 @@ const goShare = (event) => {
const hideShare = () => { const hideShare = () => {
gsap.to(".sharePop", { duration: 0.5, autoAlpha: 0 }); 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
};
</script> </script>
<template> <template>
<div class="ResultPage" @touchmove.prevent>
<div :class="'result-bg-' + posterId" class="result-bg"></div>
<div class="result-container">
<!-- 标题 -->
<div class="result-title"></div>
<!-- 文案 -->
<div :class="'r-text-' + posterId" class="r-text"></div>
<!-- 生成海报按钮 -->
<div class="create-poster" >
<div class="r-click-area" @click="createPoster($event)"></div>
</div>
</div>
</div>
<!-- 海报弹窗 -->
<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="poster-box">
<div class="poster-box"> <div class="poster">
<div class="poster" :class="'poster-' + posterId"> <img id="posterSrc" src="" alt="" srcset="" />
<img id="posterSrc" src="" alt="" srcset="" /> </div>
<!-- <div class="poster-cls-btn" @click="hide($event)"></div> -->
</div> </div>
</div> <div class="save-tips">*长按保存海报</div>
<div class="save-tips">*长按保存海报</div> <div class="btn-box">
<div class="btn-box"> <div class="go-draw" @click="goDraw($event)"></div>
<div class="go-draw" > <div class="go-share" @click="goShare($event)"></div>
<div class="r-click-area" @click="goDraw($event)"></div>
</div>
<div class="go-share" >
<div class="r-click-area" @click="goShare($event)"></div>
</div> </div>
</div> </div>
</div> </div>
@ -171,135 +234,79 @@ const hideShare = () => {
<div class="tips-pic"></div> <div class="tips-pic"></div>
<div class="tips-text">点击右上角分享给你的好友</div> <div class="tips-text">点击右上角分享给你的好友</div>
</div> </div>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.ResultPage {
@include fixed();
background-color: azure;
.result-bg-1 {
@include pos(750px, 1624px, 0px, 50%);
@include bg_pos("result/r-bg-1.jpg");
transform: translateY(-50%);
pointer-events: none;
}
.result-bg-2 {
@include pos(750px, 1624px, 0px, 50%);
@include bg_pos("result/r-bg-2.jpg");
transform: translateY(-50%);
pointer-events: none;
}
.result-bg-3 {
@include pos(750px, 1624px, 0px, 50%);
@include bg_pos("result/r-bg-3.jpg");
transform: translateY(-50%);
pointer-events: none;
}
.result-container {
@include pos(750px, 1624px, 0px, 50%);
transform: translateY(-50%);
.result-title {
@include pos(537px, 116px, 118px, 258px);
@include bg_pos("result/title.png");
pointer-events: none;
}
.r-text {
pointer-events: none;
}
.r-text-1 {
@include pos(642px, 865px, 67px, 396px);
@include bg_pos("result/text-1.png");
}
.r-text-2 {
@include pos(644px, 830px, 59px, 407px);
@include bg_pos("result/text-2.png");
}
.r-text-3 {
@include pos(642px, 876px, 63px, 392px);
@include bg_pos("result/text-3.png");
}
.create-poster {
@include pos(337px, 151px, 206px, 1253px);
@include bg_pos("result/create-btn.png");
.r-click-area {
@include pos(256px, 69px, 35px, 14px);
}
}
}
}
.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(43px, 43px);
@include bg_pos("result/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;
overflow: hidden;
.poster {
@include box(100%, 100%);
overflow: hidden;
display: flex; display: flex;
justify-content: center; justify-content: flex-end;
#posterSrc { }
// @include box(100%, 100%);
width: 80%; .save-tips {
border: 1px solid #fff; font-size: 20px;
border-radius: 20px; line-height: 20px;
// opacity: 0; color: #ffffff;
letter-spacing: 2px;
}
.poster-box {
@include box(720px, 882px);
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;
@include bg_pos("result/card.png");
#posterSrc {
@include box(100%, 100%);
opacity: 0;
}
} }
} }
}
.btn-box { .btn-box {
@include box(650px, 76px); @include box(550px, 91px);
display: flex; display: flex;
justify-content: space-around; justify-content: space-between;
margin-top: 20px; align-items: center;
.r-click-area { margin-top: 20px;
@include pos(256px, 69px, 35px, 14px);
}
.go-draw { .go-draw {
@include box(337px, 151px); @include box(243px, 91px);
@include bg_pos("result/go-draw-btn.png"); @include bg_pos("result/go-draw-btn.png");
position: relative; }
}
.go-share { .go-share {
@include box(337px, 151px); @include box(243px, 91px);
@include bg_pos("result/go-share-btn.png"); @include bg_pos("result/go-share-btn.png");
position: relative; }
} }
} }
} }
@ -310,16 +317,16 @@ const hideShare = () => {
visibility: hidden; visibility: hidden;
.tips-pic { .tips-pic {
@include pos(100px, 100px, 600px, 100px); @include pos(100px, 100px, 600px, 180px);
@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, 300px);
color: #ffffff; color: #ffffff;
text-align: right; text-align: right;
} }
} }
</style> </style>

View File

@ -17,11 +17,11 @@ let scroll = ref()
onMounted(() => { onMounted(() => {
let wrapper = document.querySelector('.wrapper') 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(".RulePage", { duration: 0.2, autoAlpha: 0 });
gsap.from(".rule-container", { duration: 0.5, autoAlpha: 0, scale: 0.7 }); 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 });
}); });
</script> </script>
@ -32,49 +32,53 @@ onMounted(() => {
<div class="rule-content"> <div class="rule-content">
<div class="rule-text-area wrapper"> <div class="rule-text-area wrapper">
<div> <div>
<div class="part"> <div class="part">
<div>活动时间</div> <div>活动时间2025年4月27日4月30日</div>
<div>2024年8月14日8:30-2024年8月16日17:30</div> <div>活动奖励微信红包</div>
<div>活动奖励微信红包</div> </div>
<div class="part">
<div>活动攻略</div>
<div>
1打卡理想假期五一好礼等你活动共设计5道题目首页进入后左右滑动选择您想打卡的地点点击进行答题答对后即可获取专属打卡海报并参与抽奖答错时将跳转回选择打卡地点的页面重新答题
</div>
<div>2活动期间不限制参与答题次数每人每日有1次抽奖机会</div>
</div>
<div class="part">
<div>领奖说明</div>
<div>
1中奖后在中奖页面复制兑换码前往<span
class="blod">[平安理财服务号]</span>消息框输入五一快乐获取兑换链接进入链接输入兑换码兑换奖品如关闭了中奖界面可在首页-[我的奖品]
内查看兑换码
</div>
<div>2成功领奖后奖品将会在24小时内自动到账请耐心等候</div>
<div>3中奖人请在活动结束前进行兑换逾期视为弃权</div>
</div>
<div class="part">
<div>其他</div>
活动期间如遇到任何问题请在<span class="blod">[平安理财服务号]</span>后台咨询我们会在一个工作日内回复
<div>说明平安理财有权对活动规则进行解释</div>
</div>
<div class="part">
<div>活动说明</div>
<div>
1本活动由平安理财有限责任公司主办为保证活动的公平公正活动结束后主办方将对中奖用户信息进行核对用户若有下列任何一种行为或情况的主办方有权不经另行通知取消其参与活动以及获奖资格收回奖品权益并保留追究其法律责任的权利
</div>
<div>
(2)以任何机器人软件蜘蛛软件爬虫软件刷奖软件或其它任何自动方式不正当手段等参与本活动;同一用户(包含相同手机号相同收货信息相同移动设备号相同IP地址等单日内恶意切换微信账号参加活动扰乱正常抽奖秩序影响活动公平性的
</div>
<div>
(3)有任何违反法律法规诚实信用公序良俗公平公正平安理财平台规则等行为
</div>
<div>
(4)平安理财保留调整暂停和终止本活动的权利并经公告后生效
</div>
<div>
(5)用户参与本活动即视为理解并同意本活动细则在法律法规及监管规定的范围内平安理财有权对活动规则进行解释并根据活动实际情况对本活动的规则进行变动或调整相关变动或调整将公布在规则页面并于公布时即时生效
</div>
</div>
<div class="margin-bottom-area"></div>
</div> </div>
<div class="part">
<div>活动攻略</div>
<div>
1进入活动参加在手邂逅清凉一夏答题共设计3道题目全部选择完毕后即可参与抽奖活动
</div>
<div>2活动期间不限制参与答题次数每人每日有1次抽奖机会</div>
</div>
<div class="part">
<div>领奖说明</div>
<div>
<span class="blod">1中奖后在中奖页面复制兑换码前往[平安理财服务号] 消息框输入清凉一夏获取兑换链接进入链接输入兑换码兑换奖品</span>如关闭了中奖界面可在首页-[我的奖品] 内查看兑换码
</div>
<div>2成功领奖后奖品将会在24小时内自动到账请耐心等候</div>
<div>3中奖人请在活动结束前进行兑换逾期视为弃权</div>
</div>
<div class="part">
<div>其他说明</div>
<div>
1本活动由平安理财有限责任公司主办为保证活动的公平公正活动结束后主办方将对中奖用户信息进行核对用户若有下列任何一种行为或情况的主办方有权不经另行通知取消其参与活动以及获奖资格收回奖品权益井保留追究其法律责任的权利:
</div>
<div>
(1) 以任何机器人软件蜘蛛软件爬虫软件刷奖软件或其它任何自动方式不正当手段等参与本活动
</div>
<div>
(2) 同一用户(包含相同手机号相同收货信息相同移动设备号相同IP地址等) 单日内恶意切换微信账号参加活动扰乱正常抽奖秩序影响活动公平性的;
</div>
<div>
(3) 有任何违反法律法规诚实信用公序良俗公平公正平安理财平台规则等行为;
</div>
<div>
2平安理财保留调整暂停和终止本活动的权利并经公告后生效;
</div>
<div>
3用户参与本活动即视为理解并同意本活动细则在法律规定的范围内平安理财有权对活动规则进行解释并根据活动实际情况对本活动的规则进行变动或调整相关变动或调整将公布在规则页面并于公布时即时生效
</div>
</div>
<div class="margin-bottom-area"></div>
</div>
</div> </div>
</div> </div>
<div class="rule-bottom-bg"></div> <div class="rule-bottom-bg"></div>
@ -84,49 +88,49 @@ onMounted(() => {
</div> </div>
<div class="rule-cls-btn" @click="hide($event)"></div> <div class="rule-cls-btn" @click="hide($event)"></div>
</div> </div>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.RulePage { .RulePage {
@include fixed(); @include fixed();
@include flexCen(); @include flexCen();
background-color: rgba($color: #000000, $alpha: 0.7); background-color: rgba($color: #000000, $alpha: 0.3);
.rule-container { .rule-container {
position: relative; position: relative;
@include box(664px, 861px); @include box(685px, 876px);
overflow: hidden; overflow: hidden;
.content { .content {
.rule-content { .rule-content {
@include box(663px, 861px); @include box(685px, 876px);
@include bg_pos("rule/rule-box.png"); @include bg_pos("rule/rule-box.png");
position: relative; position: relative;
overflow: hidden; overflow: hidden;
.rule-text-area { .rule-text-area {
@include pos(663px, 645px, 0px, 131px); @include pos(635px, 709px, 25px, 83px);
overflow: hidden; overflow: hidden;
// overflow-y: scroll; // overflow-y: scroll;
padding: 0px 50px; padding: 0px 20px;
.part { .part {
color: #0070d9; color: #a74f00;
font-size: 24px; font-size: 20px;
line-height: 40px; line-height: 35px;
margin-top: 30px; margin-top: 30px;
text-align: justify; text-align: justify;
padding: 0 10px; padding: 0 10px;
font-family: 'HarmonyOS_Sans_SC_Regular'; font-family: 'FZZY_Regular';
} }
.blod{ .blod {
font-weight: 700; font-weight: 700;
color: #0070d9; color: #a74f00;
} }
.margin-bottom-area{ .margin-bottom-area {
// margin-bottom: 100px; // margin-bottom: 100px;
height: 100px; height: 100px;
} }
@ -134,30 +138,32 @@ onMounted(() => {
} }
.rule-arrow { .rule-arrow {
@include pos(149px, 84px, 257px, 712px); @include pos(161px, 102px, 262px, 682px);
@include bg_pos("rule/arrow.png"); @include bg_pos("rule/arrow.png");
pointer-events: none; pointer-events: none;
} }
.rule-bottom-bg { .rule-bottom-bg {
// visibility: hidden; // @include pos(685px, 102px, 0px, 712px);
@include pos(600px, 102px, 30px, 728px); // border-radius: 10px;
pointer-events: none; // pointer-events: none;
background-image: -webkit-linear-gradient( 90deg, rgba(0, 112, 217, 0.1) , rgba(255, 255, 255, 0.1) 100%); // background-image: -webkit-linear-gradient(90deg, rgba(255, 238, 186, 0.7), rgba(255, 255, 255, 0.1) 100%);
} }
.rule-icon { .rule-icon {
@include pos(165px, 180px, 517px, 666px); @include pos(97px, 120px, 561px, 25px);
@include bg_pos("rule/icon.png"); @include bg_pos("rule/icon.png");
pointer-events: none; pointer-events: none;
} }
} }
} }
.rule-cls-btn { .rule-cls-btn {
@include box(43px, 43px); @include box(49px, 49px);
@include bg_pos("rule/cls-btn.png"); @include bg_pos("rule/cls-btn.png");
margin-top: 40px; margin-top: 0px;
} }
} }
</style> </style>

View File

@ -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/bg.jpg",
"index/start-btn.png", "music-on.png",
"index/tree-1.png", "share.jpg",
"index/title.png",
"index/island.png",
"rule/cls-btn.png",
"rule/arrow.png",
"rule/rule-box.png",
"rule/icon.png",
]; ];
// 问题页面 const page = [
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 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/tips.png",
"prize/no-prize.png",
"prize/lucky-bag.png",
"prize/star.png", "prize/star.png",
"prize/draw-text.png",
"prize/light.png", "prize/light.png",
"prize/prize-box.png", "prize/myPrize-box2.png",
"prize/myPrize-box.png", "prize/no-prize.png",
"prize/cls-btn.png",
"prize/copy-btn.png",
"prize/draw-box.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引入图片格式 // 处理为vite引入图片格式
function imgCreate(url, img) { function imgCreate(url, img) {
@ -71,15 +27,8 @@ function imgCreate(url, img) {
img.push(i); img.push(i);
} }
const loadImg = []; const loadImg = [];
const pageImg = []; const pageImg = [];
const pageQAImg = [];
const pageResultImg = [];
load.forEach((element) => { load.forEach((element) => {
imgCreate(element, loadImg); imgCreate(element, loadImg);
@ -89,12 +38,4 @@ page.forEach((element) => {
imgCreate(element, pageImg); imgCreate(element, pageImg);
}); });
pageQA.forEach((element) => { export { loadImg, pageImg };
imgCreate(element, pageQAImg);
});
pageResult.forEach((element) => {
imgCreate(element, pageResultImg);
});
export { loadImg, pageImg,pageQAImg,pageResultImg };

View File

@ -1,72 +1,78 @@
export const data = [ export const data = [
{ {
id: 1, id: 1,
type: '1', question: [
question: [ "赛龙舟时,鼓手用节奏统一行动,舵手把控方向,划手齐心发力,三者缺一不可。这体现了哪种投资模式?",
'低波稳健类产品通常是指配置大比例低波资产,不投资权益类资产的产品 \n受债市波动影响较小且不受股市影响。低波稳健类产品的产品风险评级是哪个', ],
], answer: [
answer: [ {
{ aid: "A",
aid: 'A', text: "平台化高效协作投资模式,集体智慧",
text: [ result: 1,
'R1低风险或R2中低风险', },
], {
result:'correct', aid: "B",
}, text: "明星基金经理的单打独斗,个人英雄主义",
{ result: 0,
aid: 'B', },
text: [ ],
'R4及以上高风险', tips: [`平安理财采取平台化、模块化的投资模式,通过团队作战能更好协调更优势、更广泛的资源,并最终为客户创造可持续的投资收益,截至 2025 年 5月15日已累计为 1700 万名客户创造1092亿元投资收益。`],
], },
result:'incorrect', {
}, id: 2,
], question: [
analysis: ['解析选择B。虽然市场热点可能带来诱人的收益但理财的基本原则是风险管理。通过将投资分散在不同的理财产品和市场可以降低单一投资的风险争取资产增长的机会。'] "赛龙舟经常会遇上河道弯曲或河流湍急,常常出现翻船风险,为了确保顺利抵达终点,在拐弯及面对急流时所使用的技巧与投资中的哪种情况相符?",
}, ],
{ answer: [
id: 2, {
question: [ aid: "A",
'经常热衷于购买现金管理类产品的投资者,如果希望进行“稳健的理财进阶”,需要牺牲一定流动性换取收益空间,以下哪类产品可以帮助实现:', text: "追求单车变摩托,冒险前进,重仓搏一把",
], result: 0,
answer: [ },
{ {
aid: 'A', aid: "B",
text: [ text: "坚持绝对收益目标,严格风险控制,稳健为先",
'最短持有期类理财产品', result: 1,
], },
result:'correct', ],
}, tips: [`稳健是资产长期增值的关键平安理财坚持以绝对收益为目标截至2025年5月15日旗下定开/封闭式多个产品线实现历史到期兑付100%正收益(如启航系列、稳健精选系列、启元系列、新安鑫系列、卓越成长系列、卓越稳健系列等)。`],
{ },
aid: 'B', {
text: [ id: 3,
'混合类理财产品', question: [
], "赛龙舟中,队伍需在发令枪响的瞬间同步起桨,冲刺阶段更需高频划桨。这与下列哪种投资策略相符?",
result:'incorrect', ],
}, answer: [
], {
analysis: ['解析选择B。现金类产品具有高流动性的特征更适合日常流动资金。但在长期限选择中固收理财拥有较大的投资范围和空间运用策略提供稳健体验有效平衡风险力争增厚收益机会闲钱再进阶。因此不同的资金用途记得匹配不同产品噢。'] aid: "A",
}, text: "精准把握市场机会,适当追求超额收益",
{ result: 1,
id: 3, },
question: [ {
'低波稳健类理财通常会通过估值、资产、策略三方面实现“低波稳健”的特征,以下哪个描述是正确的:', aid: "B",
], text: "一旦配置长期不动,顺其自然随遇而安",
answer: [ result: 0,
{ },
aid: 'A', ],
text: [ tips: [`稳健为先的前提下平安理财通过多资产、多策略的能力优势在低利率时代中力争为投资者创造相对不错的超额收益。如鑫享全球动量策略日开180天持有1号A今年以来年`],
'精选存单存款等低波资产的理财产品更稳健', },
], {
result:'correct', id: 4,
}, question: [
{ "赛龙舟通常500米但有一种达到了30公里号称龙舟马拉松。如果说500米赛龙舟对应的是投资中短期主义那么龙舟马拉松对应的是哪种情怀",
aid: 'B', ],
text: [ answer: [
'混合估值法不能在市场震荡时帮助净值更平稳', {
], aid: "A",
result:'incorrect', text: "投机主义,左右摇摆或见风使舵",
}, result: 0,
], },
analysis: ['解析选择A。最短持有期理财产品拥有较为灵活的申赎机制在持有时间超过最短持有的时间要求后随时可发起赎回闲置时力争收益机会用钱时满足你的流动性需求。'] {
}, aid: "B",
] text: "长期主义精神,坚持长期稳健经营理念",
result: 1,
},
],
tips: [`行稳方能致远。长期主义是以长远视角进行决策和行动的价值观,其核心在于追求可持续的价值增长,而非短期利益的最大化。这是平安理财自成立以来一直坚持的投资和经营理念。`],
},
];

View File

@ -1,12 +1,25 @@
<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">
<Question v-if="showQuestion" @QuestionPage="questionFn"></Question> <Index v-if="showIndex" @IndexPage="indexFn"></Index>
<Result v-if="showResult" @ResultPage="resultFn"></Result> <Question v-if="showQuestion" @QuestionPage="questionFn"></Question>
<MyPrize v-if="showMyPrize" @MyPrizePage="myPrizeFn"></MyPrize> <Result v-if="showResult" @ResultPage="resultFn"></Result>
<Draw v-if="showDraw" @DrawPage="drawFn"></Draw> <MyPrize v-if="showMyPrize" @MyPrizePage="myPrizeFn"></MyPrize>
<Rule v-if="showRule" @RulePage="ruleFn"></Rule> <Draw v-if="showDraw" @DrawPage="drawFn"></Draw>
<Loading v-if="showLoad" @LoadPage="loadFn"></Loading> <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>
@ -19,27 +32,16 @@ import MyPrize from "@/components/MyPrize";
import Draw from "@/components/Draw"; 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 { getQueryString, screenOrientation, fontAdpat } from "@/plugins";
createBGM,
getQueryString,
screenOrientation,
isAndriod,
fontAdpat,
} 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 showLoad = ref(false); const musicUrl = new URL(`@/assets/media/bgm.mp3`, import.meta.url).href;
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 showLoad = ref(false);
const loadFn = (item) => { const loadFn = (item) => {
if (item.action == "hide") { if (item.action == "hide") {
showLoad.value = false; showLoad.value = false;
@ -47,6 +49,7 @@ const loadFn = (item) => {
} }
}; };
const showIndex = ref(false);
const indexFn = (item) => { const indexFn = (item) => {
if (item.action == "hide") { if (item.action == "hide") {
showIndex.value = false; showIndex.value = false;
@ -63,6 +66,7 @@ const indexFn = (item) => {
} }
}; };
const showQuestion = ref(false);
const questionFn = (item) => { const questionFn = (item) => {
if (item.action == "hide") { if (item.action == "hide") {
showQuestion.value = false; showQuestion.value = false;
@ -74,27 +78,35 @@ const questionFn = (item) => {
} }
}; };
const showMyPrize = ref(false);
const myPrizeFn = (item) => { const myPrizeFn = (item) => {
if (item.action == "hide") { if (item.action == "hide") {
showMyPrize.value = false; showMyPrize.value = false;
} }
}; };
const posterId = ref(1);
const showDraw = ref(false);
const drawFn = (item) => { const drawFn = (item) => {
if (item.action == "hide") { if (item.action == "hide") {
showDraw.value = false; showDraw.value = false;
} }
}; };
const showResult = ref(true);
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);
} }
if (item.action == "showDraw") { if (item.action == "showDraw") {
showDraw.value = true; showDraw.value = true;
} }
}; };
const showRule = ref(false);
const ruleFn = (item) => { const ruleFn = (item) => {
if (item.action == "hide") { if (item.action == "hide") {
showRule.value = false; showRule.value = false;
@ -115,27 +127,10 @@ 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;
iosMusic(); //
// ios gsap.set(".music_icon", { autoAlpha: 1 });
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) => {
@ -210,30 +205,94 @@ onMounted(() => {
}); });
} }
} else { } else {
showLoad.value = true; // showLoad.value = true;
createBGM(); iosMusic(); //
gsap.set(".music_icon", { autoAlpha: 1 });
} }
}); });
const playMusic = () => { // ios
var audioEle = document.getElementById("audio"); const iosMusic = () => {
audioEle.play(); // 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, #90dcff, #51b7ff); background: linear-gradient(135deg, #d6d1ca, #e5dccf);
// font-family: "FZZY_Regular";
} }
#__vconsole { #__vconsole {
visibility: hidden; visibility: hidden;
} }
#musicBtn { .music_icon {
@include pos(60px, 60px, 50px, 35px); @include pos(60px, 60px, 50px, 245px);
@include bg_pos("music-on.png");
z-index: 99; z-index: 99;
visibility: hidden;
}
.home {
@include pos(100%, 100vh, 0px, 0px);
overflow: hidden;
.home-container {
@include pos(750px, 1624px, 0px, 50%);
transform: translateY(-50%);
}
} }
// -on // -on
@ -246,12 +305,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

@ -19,8 +19,8 @@ app.config.globalProperties.imgUrl = (url) => {
// 微信分享配置 // 微信分享配置
wxShare({ wxShare({
title: '好“理”在手,邂逅清凉一夏', title: '打卡理想假期 五一好礼等你',
desc: '答题闯关 ,惊喜享不停', desc: '穿越城市地标,解锁你的财富基因',
}) })
// 测试环境开vconsole // 测试环境开vconsole

View File

@ -328,7 +328,7 @@ export function addPointByBd(des) {
} }
// 防抖函数 // 防抖函数
export function debounceTap(target, callbacks, timeScale = 0.7) { export function debounceTap(target, callbacks, timeScale = 1) {
if (!btnEnable.value) return false if (!btnEnable.value) return false
btnEnable.value = false; btnEnable.value = false;
let createAni = () => { let createAni = () => {

View File

@ -3,7 +3,7 @@ import axios from "axios";
import { Toast } from "vant"; import { Toast } from "vant";
import {getShareConfig } from '@/api' import {getShareConfig } from '@/api'
const imgUrl = new URL(`@/assets/images/share.jpg`, import.meta.url).href const imgUrl = new URL(`../assets/images/share.jpg`, import.meta.url).href
const linkUrl = import.meta.env.VITE_HOST + import.meta.env.VITE_FOLDER const linkUrl = import.meta.env.VITE_HOST + import.meta.env.VITE_FOLDER
export function wxShare(option) { export function wxShare(option) {
@ -31,6 +31,7 @@ export function wxShare(option) {
] // 必填需要使用的JS接口列表所有JS接口列表见附录2 ] // 必填需要使用的JS接口列表所有JS接口列表见附录2
}) })
wx.ready(function () { wx.ready(function () {
console.log('share config success');
wx.onMenuShareTimeline({ wx.onMenuShareTimeline({
link: import.meta.env.VITE_URL, // 分享链接 link: import.meta.env.VITE_URL, // 分享链接
title: option.title, // 分享标题 title: option.title, // 分享标题
@ -56,4 +57,5 @@ export function wxShare(option) {
}) })
.catch(() => { .catch(() => {
}); });
} }

View File

@ -1,42 +1,41 @@
// pinia仓库 // pinia仓库
import { defineStore } from "pinia" import { defineStore } from "pinia";
export const useMainStore = defineStore("counter", { export const useMainStore = defineStore("counter", {
state: () => { state: () => {
return { return {
hasDraw: true, //是否有抽奖机会 hasDraw: true, //是否有抽奖机会
token: '', token: "",
posterId: 3, //测试结果 posterId: 1, //测试结果
hasPrize: false, //是否有奖品 hasPrize: false, //是否有奖品
prizeCode: 'oggSVMbeLgSK', //兑换码 prizeCode: "oggSVMbeLgSK", //兑换码
prizeMoney: '8.88', //金额 prizeMoney: "8.88", //金额
drawKey: '', drawKey: "",
} };
},
// 相当于computed属性对state进行二次加工
getters: {},
// 异步处理方法
actions: {
updateToken(data) {
this.token = data.authorization;
this.hasDraw = data.drawNumber == 0 ? false : true;
}, },
// 相当于computed属性对state进行二次加工 updatePrize(data) {
getters: {}, this.prizeCode = data.prizeCode;
// 异步处理方法 this.prizeMoney = data.prizeAmount;
actions: { this.hasPrize = true;
updateToken(data) {
this.token = data.authorization
this.hasDraw = data.drawNumber == 0 ? false : true
},
updatePrize(data) {
this.prizeCode = data.prizeCode
this.prizeMoney = data.prizeAmount
this.hasPrize = true
},
updatePosterId(id) {
this.posterId = id
},
updateDrawKey(data) {
console.log('保存结果:', data);
this.drawKey = data.subKey
this.hasDraw = data.drawFlag
},
updateDraw(value) {
this.hasDraw = false
}
}, },
}) updatePosterId(id) {
this.posterId = id;
},
updateDrawKey(data) {
console.log("保存结果:", data);
this.drawKey = data.subKey;
this.hasDraw = data.drawFlag;
},
updateDraw(value) {
this.hasDraw = false;
},
},
});

View File

@ -44,14 +44,18 @@ body {
/* -webkit-user-select: none;*/ /* -webkit-user-select: none;*/
} }
@font-face { @font-face {
font-family: "HarmonyOS_Sans_SC_Regular"; font-family: "HarmonyOS_Sans_SC_Regular";
src: url(@/assets/font/HarmonyOS_Sans_SC_Regular.ttf) format("truetype"); src: url(@/assets/font/HarmonyOS_Sans_SC_Regular.ttf) format("truetype");
} }
@font-face {
font-family: "DouyinSansBold";
src: url(@/assets/font/DouyinSansBold.ttf) format("truetype");
}
@font-face {
font-family: "FZZY_Regular";
src: url(@/assets/font/FZZY_Regular.ttf) format("truetype");
}
* { * {
padding: 0; padding: 0;

View File

@ -33,7 +33,7 @@ export default defineConfig(({ command, mode }) => {
template: 'index.html', template: 'index.html',
injectOptions: { injectOptions: {
data: { data: {
title: '好“理”在手 邂逅清凉一夏', title: '打卡理想假期',
}, },
} }
}, },
@ -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, // 是否直接更换属性值,而不添加备用属性

554
yarn.lock
View File

@ -7,10 +7,22 @@
resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz#26ea493a831b4f3a85475e7157be02fb4eab51fb" resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz#26ea493a831b4f3a85475e7157be02fb4eab51fb"
integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg== integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==
"@babel/parser@^7.23.6": "@babel/helper-string-parser@^7.27.1":
version "7.23.9" version "7.27.1"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
"@babel/helper-validator-identifier@^7.27.1":
version "7.27.1"
resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8"
integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
"@babel/parser@^7.27.2":
version "7.27.2"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.2.tgz#577518bedb17a2ce4212afd052e01f7df0941127"
integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==
dependencies:
"@babel/types" "^7.27.1"
"@babel/runtime@^7.17.2": "@babel/runtime@^7.17.2":
version "7.23.9" version "7.23.9"
@ -19,6 +31,14 @@
dependencies: dependencies:
regenerator-runtime "^0.14.0" regenerator-runtime "^0.14.0"
"@babel/types@^7.27.1":
version "7.27.1"
resolved "https://registry.npmmirror.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560"
integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==
dependencies:
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.27.1"
"@better-scroll/core@^2.5.1": "@better-scroll/core@^2.5.1":
version "2.5.1" version "2.5.1"
resolved "https://registry.npmmirror.com/@better-scroll/core/-/core-2.5.1.tgz#de53f089a2f53f51e58e5042556fe0d3e1655aa9" resolved "https://registry.npmmirror.com/@better-scroll/core/-/core-2.5.1.tgz#de53f089a2f53f51e58e5042556fe0d3e1655aa9"
@ -31,15 +51,115 @@
resolved "https://registry.npmmirror.com/@better-scroll/shared-utils/-/shared-utils-2.5.1.tgz#ed6a1b5713462fa50afd8bb7d172ca218a0b7f2e" resolved "https://registry.npmmirror.com/@better-scroll/shared-utils/-/shared-utils-2.5.1.tgz#ed6a1b5713462fa50afd8bb7d172ca218a0b7f2e"
integrity sha512-AplkfSjXVYP9LZiD6JsKgmgQJ/mG4uuLmBuwLz8W5OsYc7AYTfN8kw6GqZ5OwCGoXkVhBGyd8NeC4xwYItp0aw== integrity sha512-AplkfSjXVYP9LZiD6JsKgmgQJ/mG4uuLmBuwLz8W5OsYc7AYTfN8kw6GqZ5OwCGoXkVhBGyd8NeC4xwYItp0aw==
"@esbuild/android-arm@0.15.18": "@esbuild/android-arm64@0.18.20":
version "0.15.18" version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80" resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw== integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
"@esbuild/linux-loong64@0.15.18": "@esbuild/android-arm@0.18.20":
version "0.15.18" version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239" resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ== integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
"@esbuild/android-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
"@esbuild/darwin-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
"@esbuild/darwin-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
"@esbuild/freebsd-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
"@esbuild/freebsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
"@esbuild/linux-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
"@esbuild/linux-arm@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
"@esbuild/linux-ia32@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
"@esbuild/linux-loong64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
"@esbuild/linux-mips64el@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
"@esbuild/linux-ppc64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
"@esbuild/linux-riscv64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
"@esbuild/linux-s390x@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
"@esbuild/linux-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338"
integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
"@esbuild/netbsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
"@esbuild/openbsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
"@esbuild/sunos-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
"@esbuild/win32-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
"@esbuild/win32-ia32@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
"@esbuild/win32-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
"@jridgewell/gen-mapping@^0.3.0": "@jridgewell/gen-mapping@^0.3.0":
version "0.3.3" version "0.3.3"
@ -73,6 +193,11 @@
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@jridgewell/sourcemap-codec@^1.5.0":
version "1.5.0"
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
"@jridgewell/trace-mapping@^0.3.9": "@jridgewell/trace-mapping@^0.3.9":
version "0.3.22" version "0.3.22"
resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c"
@ -144,94 +269,95 @@
resolved "https://registry.npmmirror.com/@vant/use/-/use-1.6.0.tgz#237df3091617255519552ca311ffdfea9de59001" resolved "https://registry.npmmirror.com/@vant/use/-/use-1.6.0.tgz#237df3091617255519552ca311ffdfea9de59001"
integrity sha512-PHHxeAASgiOpSmMjceweIrv2AxDZIkWXyaczksMoWvKV2YAYEhoizRuk/xFnKF+emUIi46TsQ+rvlm/t2BBCfA== integrity sha512-PHHxeAASgiOpSmMjceweIrv2AxDZIkWXyaczksMoWvKV2YAYEhoizRuk/xFnKF+emUIi46TsQ+rvlm/t2BBCfA==
"@vitejs/plugin-vue@^3.2.0": "@vitejs/plugin-vue@^5.2.4":
version "3.2.0" version "5.2.4"
resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz#a1484089dd85d6528f435743f84cdd0d215bbb54" resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz#9e8a512eb174bfc2a333ba959bbf9de428d89ad8"
integrity sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw== integrity sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==
"@vue/compiler-core@3.4.15": "@vue/compiler-core@3.5.14":
version "3.4.15" version "3.5.14"
resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.15.tgz#be20d1bbe19626052500b48969302cb6f396d36e" resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.14.tgz#3676685c04c48a5b4a5515b3b2842e98342c555c"
integrity sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw== integrity sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==
dependencies: dependencies:
"@babel/parser" "^7.23.6" "@babel/parser" "^7.27.2"
"@vue/shared" "3.4.15" "@vue/shared" "3.5.14"
entities "^4.5.0" entities "^4.5.0"
estree-walker "^2.0.2" estree-walker "^2.0.2"
source-map-js "^1.0.2" source-map-js "^1.2.1"
"@vue/compiler-dom@3.4.15": "@vue/compiler-dom@3.5.14":
version "3.4.15" version "3.5.14"
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz#753f5ed55f78d33dff04701fad4d76ff0cf81ee5" resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.14.tgz#bbf27421f80f7b8873000edceecd817c4abf438a"
integrity sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ== integrity sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==
dependencies: dependencies:
"@vue/compiler-core" "3.4.15" "@vue/compiler-core" "3.5.14"
"@vue/shared" "3.4.15" "@vue/shared" "3.5.14"
"@vue/compiler-sfc@3.4.15": "@vue/compiler-sfc@3.5.14":
version "3.4.15" version "3.5.14"
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.15.tgz#4e5811e681955fcec886cebbec483f6ae463a64b" resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.14.tgz#fc3db30a1c744139d41bb57bb451d783415fce4b"
integrity sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA== integrity sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==
dependencies: dependencies:
"@babel/parser" "^7.23.6" "@babel/parser" "^7.27.2"
"@vue/compiler-core" "3.4.15" "@vue/compiler-core" "3.5.14"
"@vue/compiler-dom" "3.4.15" "@vue/compiler-dom" "3.5.14"
"@vue/compiler-ssr" "3.4.15" "@vue/compiler-ssr" "3.5.14"
"@vue/shared" "3.4.15" "@vue/shared" "3.5.14"
estree-walker "^2.0.2" estree-walker "^2.0.2"
magic-string "^0.30.5" magic-string "^0.30.17"
postcss "^8.4.33" postcss "^8.5.3"
source-map-js "^1.0.2" source-map-js "^1.2.1"
"@vue/compiler-ssr@3.4.15": "@vue/compiler-ssr@3.5.14":
version "3.4.15" version "3.5.14"
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.15.tgz#a910a5b89ba4f0a776e40b63d69bdae2f50616cf" resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.14.tgz#013174ee6bbf3ee291a6df247a3feb6eb43d808b"
integrity sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw== integrity sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==
dependencies: dependencies:
"@vue/compiler-dom" "3.4.15" "@vue/compiler-dom" "3.5.14"
"@vue/shared" "3.4.15" "@vue/shared" "3.5.14"
"@vue/devtools-api@^6.5.0": "@vue/devtools-api@^6.6.3":
version "6.5.1" version "6.6.4"
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697" resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz#cbe97fe0162b365edc1dba80e173f90492535343"
integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA== integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==
"@vue/reactivity@3.4.15": "@vue/reactivity@3.5.14":
version "3.4.15" version "3.5.14"
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.15.tgz#ad9d9b83f5398d2e8660ad5cfc0f171e7679a9a1" resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.14.tgz#814fb4ba84a9560d2752b9982fdd2b76e4a5e5a3"
integrity sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w== integrity sha512-7cK1Hp343Fu/SUCCO52vCabjvsYu7ZkOqyYu7bXV9P2yyfjUMUXHZafEbq244sP7gf+EZEz+77QixBTuEqkQQw==
dependencies: dependencies:
"@vue/shared" "3.4.15" "@vue/shared" "3.5.14"
"@vue/runtime-core@3.4.15": "@vue/runtime-core@3.5.14":
version "3.4.15" version "3.5.14"
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.15.tgz#f81e2fd2108ea41a6d5c61c2462b11dfb754fdf0" resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.14.tgz#f4084cad032be3452d8f137035fcd93c182f7149"
integrity sha512-6E3by5m6v1AkW0McCeAyhHTw+3y17YCOKG0U0HDKDscV4Hs0kgNT5G+GCHak16jKgcCDHpI9xe5NKb8sdLCLdw== integrity sha512-w9JWEANwHXNgieAhxPpEpJa+0V5G0hz3NmjAZwlOebtfKyp2hKxKF0+qSh0Xs6/PhfGihuSdqMprMVcQU/E6ag==
dependencies: dependencies:
"@vue/reactivity" "3.4.15" "@vue/reactivity" "3.5.14"
"@vue/shared" "3.4.15" "@vue/shared" "3.5.14"
"@vue/runtime-dom@3.4.15": "@vue/runtime-dom@3.5.14":
version "3.4.15" version "3.5.14"
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.15.tgz#108ef86aa7334ead5d6b9c56a7d93679e1e45406" resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.14.tgz#59ea4a5fe3ed93fb8f725c1c722a0fe8d8ae16cf"
integrity sha512-EVW8D6vfFVq3V/yDKNPBFkZKGMFSvZrUQmx196o/v2tHKdwWdiZjYUBS+0Ez3+ohRyF8Njwy/6FH5gYJ75liUw== integrity sha512-lCfR++IakeI35TVR80QgOelsUIdcKjd65rWAMfdSlCYnaEY5t3hYwru7vvcWaqmrK+LpI7ZDDYiGU5V3xjMacw==
dependencies: dependencies:
"@vue/runtime-core" "3.4.15" "@vue/reactivity" "3.5.14"
"@vue/shared" "3.4.15" "@vue/runtime-core" "3.5.14"
"@vue/shared" "3.5.14"
csstype "^3.1.3" csstype "^3.1.3"
"@vue/server-renderer@3.4.15": "@vue/server-renderer@3.5.14":
version "3.4.15" version "3.5.14"
resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.15.tgz#34438f998e6f6370fac78883a75efe136631957f" resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.14.tgz#adcaf30ddcf0064a28ce832d29f430bd0db3ef18"
integrity sha512-3HYzaidu9cHjrT+qGUuDhFYvF/j643bHC6uUN9BgM11DVy+pM6ATsG6uPBLnkwOgs7BpJABReLmpL3ZPAsUaqw== integrity sha512-Rf/ISLqokIvcySIYnv3tNWq40PLpNLDLSJwwVWzG6MNtyIhfbcrAxo5ZL9nARJhqjZyWWa40oRb2IDuejeuv6w==
dependencies: dependencies:
"@vue/compiler-ssr" "3.4.15" "@vue/compiler-ssr" "3.5.14"
"@vue/shared" "3.4.15" "@vue/shared" "3.5.14"
"@vue/shared@3.4.15": "@vue/shared@3.5.14":
version "3.4.15" version "3.5.14"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.15.tgz#e7d2ea050c667480cb5e1a6df2ac13bcd03a8f30" resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.14.tgz#8fcdc6c69661a1163c173cafb6129c3f8ad01122"
integrity sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g== integrity sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==
acorn@^8.10.0, acorn@^8.11.2, acorn@^8.11.3, acorn@^8.8.2: acorn@^8.10.0, acorn@^8.11.2, acorn@^8.11.3, acorn@^8.8.2:
version "8.11.3" version "8.11.3"
@ -580,133 +706,33 @@ entities@^4.5.0:
resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
esbuild-android-64@0.15.18: esbuild@^0.18.10:
version "0.15.18" version "0.18.20"
resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz#20a7ae1416c8eaade917fb2453c1259302c637a5" resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6"
integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA== integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
esbuild-android-arm64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz#9cc0ec60581d6ad267568f29cf4895ffdd9f2f04"
integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==
esbuild-darwin-64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz#428e1730ea819d500808f220fbc5207aea6d4410"
integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==
esbuild-darwin-arm64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz#b6dfc7799115a2917f35970bfbc93ae50256b337"
integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==
esbuild-freebsd-64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz#4e190d9c2d1e67164619ae30a438be87d5eedaf2"
integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==
esbuild-freebsd-arm64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz#18a4c0344ee23bd5a6d06d18c76e2fd6d3f91635"
integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==
esbuild-linux-32@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz#9a329731ee079b12262b793fb84eea762e82e0ce"
integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==
esbuild-linux-64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz#532738075397b994467b514e524aeb520c191b6c"
integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==
esbuild-linux-arm64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz#5372e7993ac2da8f06b2ba313710d722b7a86e5d"
integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==
esbuild-linux-arm@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz#e734aaf259a2e3d109d4886c9e81ec0f2fd9a9cc"
integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==
esbuild-linux-mips64le@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz#c0487c14a9371a84eb08fab0e1d7b045a77105eb"
integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==
esbuild-linux-ppc64le@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz#af048ad94eed0ce32f6d5a873f7abe9115012507"
integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==
esbuild-linux-riscv64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz#423ed4e5927bd77f842bd566972178f424d455e6"
integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==
esbuild-linux-s390x@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz#21d21eaa962a183bfb76312e5a01cc5ae48ce8eb"
integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==
esbuild-netbsd-64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz#ae75682f60d08560b1fe9482bfe0173e5110b998"
integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==
esbuild-openbsd-64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz#79591a90aa3b03e4863f93beec0d2bab2853d0a8"
integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==
esbuild-sunos-64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz#fd528aa5da5374b7e1e93d36ef9b07c3dfed2971"
integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==
esbuild-windows-32@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz#0e92b66ecdf5435a76813c4bc5ccda0696f4efc3"
integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==
esbuild-windows-64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz#0fc761d785414284fc408e7914226d33f82420d0"
integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==
esbuild-windows-arm64@0.15.18:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz#5b5bdc56d341d0922ee94965c89ee120a6a86eb7"
integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==
esbuild@^0.15.9:
version "0.15.18"
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.15.18.tgz#ea894adaf3fbc036d32320a00d4d6e4978a2f36d"
integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==
optionalDependencies: optionalDependencies:
"@esbuild/android-arm" "0.15.18" "@esbuild/android-arm" "0.18.20"
"@esbuild/linux-loong64" "0.15.18" "@esbuild/android-arm64" "0.18.20"
esbuild-android-64 "0.15.18" "@esbuild/android-x64" "0.18.20"
esbuild-android-arm64 "0.15.18" "@esbuild/darwin-arm64" "0.18.20"
esbuild-darwin-64 "0.15.18" "@esbuild/darwin-x64" "0.18.20"
esbuild-darwin-arm64 "0.15.18" "@esbuild/freebsd-arm64" "0.18.20"
esbuild-freebsd-64 "0.15.18" "@esbuild/freebsd-x64" "0.18.20"
esbuild-freebsd-arm64 "0.15.18" "@esbuild/linux-arm" "0.18.20"
esbuild-linux-32 "0.15.18" "@esbuild/linux-arm64" "0.18.20"
esbuild-linux-64 "0.15.18" "@esbuild/linux-ia32" "0.18.20"
esbuild-linux-arm "0.15.18" "@esbuild/linux-loong64" "0.18.20"
esbuild-linux-arm64 "0.15.18" "@esbuild/linux-mips64el" "0.18.20"
esbuild-linux-mips64le "0.15.18" "@esbuild/linux-ppc64" "0.18.20"
esbuild-linux-ppc64le "0.15.18" "@esbuild/linux-riscv64" "0.18.20"
esbuild-linux-riscv64 "0.15.18" "@esbuild/linux-s390x" "0.18.20"
esbuild-linux-s390x "0.15.18" "@esbuild/linux-x64" "0.18.20"
esbuild-netbsd-64 "0.15.18" "@esbuild/netbsd-x64" "0.18.20"
esbuild-openbsd-64 "0.15.18" "@esbuild/openbsd-x64" "0.18.20"
esbuild-sunos-64 "0.15.18" "@esbuild/sunos-x64" "0.18.20"
esbuild-windows-32 "0.15.18" "@esbuild/win32-arm64" "0.18.20"
esbuild-windows-64 "0.15.18" "@esbuild/win32-ia32" "0.18.20"
esbuild-windows-arm64 "0.15.18" "@esbuild/win32-x64" "0.18.20"
escape-string-regexp@^5.0.0: escape-string-regexp@^5.0.0:
version "5.0.0" version "5.0.0"
@ -988,6 +1014,13 @@ lower-case@^2.0.2:
dependencies: dependencies:
tslib "^2.0.3" tslib "^2.0.3"
magic-string@^0.30.17:
version "0.30.17"
resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453"
integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==
dependencies:
"@jridgewell/sourcemap-codec" "^1.5.0"
magic-string@^0.30.3, magic-string@^0.30.5: magic-string@^0.30.3, magic-string@^0.30.5:
version "0.30.5" version "0.30.5"
resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9"
@ -1061,10 +1094,10 @@ mutation-observer@^1.0.3:
resolved "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz#42e9222b101bca82e5ba9d5a7acf4a14c0f263d0" resolved "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz#42e9222b101bca82e5ba9d5a7acf4a14c0f263d0"
integrity sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA== integrity sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==
nanoid@^3.3.7: nanoid@^3.3.8:
version "3.3.7" version "3.3.11"
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
neo-async@^2.6.2: neo-async@^2.6.2:
version "2.6.2" version "2.6.2"
@ -1164,23 +1197,23 @@ pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2:
resolved "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" resolved "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec"
integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==
picocolors@^1.0.0: picocolors@^1.1.1:
version "1.0.0" version "1.1.1"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1:
version "2.3.1" version "2.3.1"
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pinia@^2.1.7: pinia@^2.2.0:
version "2.1.7" version "2.3.1"
resolved "https://registry.npmmirror.com/pinia/-/pinia-2.1.7.tgz#4cf5420d9324ca00b7b4984d3fbf693222115bbc" resolved "https://registry.npmmirror.com/pinia/-/pinia-2.3.1.tgz#54c476675b72f5abcfafa24a7582531ea8c23d94"
integrity sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ== integrity sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==
dependencies: dependencies:
"@vue/devtools-api" "^6.5.0" "@vue/devtools-api" "^6.6.3"
vue-demi ">=0.14.5" vue-demi "^0.14.10"
pkg-types@^1.0.3: pkg-types@^1.0.3:
version "1.0.3" version "1.0.3"
@ -1203,14 +1236,14 @@ postcss-px-to-viewport-8-plugin@^1.2.3:
dependencies: dependencies:
object-assign "^4.1.1" object-assign "^4.1.1"
postcss@^8.4.18, postcss@^8.4.33: postcss@^8.4.27, postcss@^8.5.3:
version "8.4.33" version "8.5.3"
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" resolved "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb"
integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==
dependencies: dependencies:
nanoid "^3.3.7" nanoid "^3.3.8"
picocolors "^1.0.0" picocolors "^1.1.1"
source-map-js "^1.0.2" source-map-js "^1.2.1"
proxy-from-env@^1.1.0: proxy-from-env@^1.1.0:
version "1.1.0" version "1.1.0"
@ -1266,7 +1299,7 @@ require-main-filename@^2.0.0:
resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
resolve@^1.22.1, resolve@^1.22.4: resolve@^1.22.4:
version "1.22.8" version "1.22.8"
resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@ -1280,10 +1313,10 @@ reusify@^1.0.4:
resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rollup@^2.79.1: rollup@^3.27.1:
version "2.79.1" version "3.29.5"
resolved "https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" resolved "https://registry.npmmirror.com/rollup/-/rollup-3.29.5.tgz#8a2e477a758b520fb78daf04bca4c522c1da8a54"
integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== integrity sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==
optionalDependencies: optionalDependencies:
fsevents "~2.3.2" fsevents "~2.3.2"
@ -1345,11 +1378,16 @@ side-channel@^1.0.4:
get-intrinsic "^1.0.2" get-intrinsic "^1.0.2"
object-inspect "^1.9.0" object-inspect "^1.9.0"
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: "source-map-js@>=0.6.2 <2.0.0":
version "1.0.2" version "1.0.2"
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
source-map-support@~0.5.20: source-map-support@~0.5.20:
version "0.5.21" version "0.5.21"
resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
@ -1398,6 +1436,11 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
swiper@^11.2.1:
version "11.2.7"
resolved "https://registry.npmmirror.com/swiper/-/swiper-11.2.7.tgz#9657e467047cf098b6c9a79d1864bc6810d2e4fb"
integrity sha512-oPJCwdcjFMw3SoBM7AdB1RJzjT7JaE4Mg7TWceTmJ/i2OtF8L01Ct+5eOf48nG3trgR0wXFekWdfnTdl0eg6Pg==
terser@^5.10.0: terser@^5.10.0:
version "5.27.0" version "5.27.0"
resolved "https://registry.npmmirror.com/terser/-/terser-5.27.0.tgz#70108689d9ab25fef61c4e93e808e9fd092bf20c" resolved "https://registry.npmmirror.com/terser/-/terser-5.27.0.tgz#70108689d9ab25fef61c4e93e808e9fd092bf20c"
@ -1495,9 +1538,9 @@ unplugin@^1.4.0, unplugin@^1.5.1, unplugin@^1.6.0:
webpack-virtual-modules "^0.6.1" webpack-virtual-modules "^0.6.1"
vant@^3.6.12: vant@^3.6.12:
version "3.6.12" version "3.6.16"
resolved "https://registry.npmmirror.com/vant/-/vant-3.6.12.tgz#a46045c74961744f27d5a6ffbc3bed592f0f4d0b" resolved "https://registry.npmmirror.com/vant/-/vant-3.6.16.tgz#7442bff8ca8c481d10c3b0bff5b00ceb9a527cf5"
integrity sha512-fLzwhpV0ZPQqxrTx6RU8mJVUqP7DSkpdXNeByKubp+O9vKYGcWRX9wFdEwApyy7qLZLLu+rU1Jw52d6lktPL4w== integrity sha512-9pZao0NEeZQ0ZEb6N7SZxtqcdTp24o8IizhZS1G+FtStlXeKOFzCl+Nf1pIWRneQ9Kn+K+mNrfi2eiIZjVVppw==
dependencies: dependencies:
"@vant/icons" "^1.8.0" "@vant/icons" "^1.8.0"
"@vant/popperjs" "^1.2.1" "@vant/popperjs" "^1.2.1"
@ -1522,7 +1565,7 @@ vite-plugin-compression@^0.5.1:
debug "^4.3.3" debug "^4.3.3"
fs-extra "^10.0.0" fs-extra "^10.0.0"
vite-plugin-html@^3.2.1: vite-plugin-html@^3.2.2:
version "3.2.2" version "3.2.2"
resolved "https://registry.npmmirror.com/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz#661834fa09015d3fda48ba694dbaa809396f5f7a" resolved "https://registry.npmmirror.com/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz#661834fa09015d3fda48ba694dbaa809396f5f7a"
integrity sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q== integrity sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==
@ -1540,15 +1583,14 @@ vite-plugin-html@^3.2.1:
node-html-parser "^5.3.3" node-html-parser "^5.3.3"
pathe "^0.2.0" pathe "^0.2.0"
vite@^3.2.3: vite@4.5.10:
version "3.2.8" version "4.5.10"
resolved "https://registry.npmmirror.com/vite/-/vite-3.2.8.tgz#0697e13addf99ed44b838b8462a3a922fdd9d37b" resolved "https://registry.npmmirror.com/vite/-/vite-4.5.10.tgz#fc6823d5347fd171a25ae6379f05b0be700d303e"
integrity sha512-EtQU16PLIJpAZol2cTLttNP1mX6L0SyI0pgQB1VOoWeQnMSvtiwovV3D6NcjN8CZQWWyESD2v5NGnpz5RvgOZA== integrity sha512-f2ueoukYTMI/5kMMT7wW+ol3zL6z6PjN28zYrGKAjnbzXhRXWXPThD3uN6muCp+TbfXaDgGvRuPsg6mwVLaWwQ==
dependencies: dependencies:
esbuild "^0.15.9" esbuild "^0.18.10"
postcss "^8.4.18" postcss "^8.4.27"
resolve "^1.22.1" rollup "^3.27.1"
rollup "^2.79.1"
optionalDependencies: optionalDependencies:
fsevents "~2.3.2" fsevents "~2.3.2"
@ -1559,21 +1601,21 @@ vue-clipboard3@^2.0.0:
dependencies: dependencies:
clipboard "^2.0.6" clipboard "^2.0.6"
vue-demi@>=0.14.5: vue-demi@^0.14.10:
version "0.14.6" version "0.14.10"
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92" resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz#afc78de3d6f9e11bf78c55e8510ee12814522f04"
integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w== integrity sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==
vue@^3.2.41: vue@^3.4.0:
version "3.4.15" version "3.5.14"
resolved "https://registry.npmmirror.com/vue/-/vue-3.4.15.tgz#91f979844ffca9239dff622ba4c79c5d5524b88c" resolved "https://registry.npmmirror.com/vue/-/vue-3.5.14.tgz#0ddf16d20cc20adaedfb5e77bca64c488bf5ee27"
integrity sha512-jC0GH4KkWLWJOEQjOpkqU1bQsBwf4R1rsFtw5GQJbjHVKWDzO6P0nWWBTmjp1xSemAioDFj1jdaK1qa3DnMQoQ== integrity sha512-LbOm50/vZFG6Mhy6KscQYXZMQ0LMCC/y40HDJPPvGFQ+i/lUH+PJHR6C3assgOQiXdl6tAfsXHbXYVBZZu65ew==
dependencies: dependencies:
"@vue/compiler-dom" "3.4.15" "@vue/compiler-dom" "3.5.14"
"@vue/compiler-sfc" "3.4.15" "@vue/compiler-sfc" "3.5.14"
"@vue/runtime-dom" "3.4.15" "@vue/runtime-dom" "3.5.14"
"@vue/server-renderer" "3.4.15" "@vue/server-renderer" "3.5.14"
"@vue/shared" "3.4.15" "@vue/shared" "3.5.14"
webpack-sources@^3.2.3: webpack-sources@^3.2.3:
version "3.2.3" version "3.2.3"