palc-newyear2024/src/components/MyPrize.vue

107 lines
2.4 KiB
Vue

<script setup>
import { debounceTap } from "@/plugins";
import gsap from "gsap";
import { Toast } from "vant";
import { Clipboard } from "v-clipboard";
import { useMainStore } from "@/store";
import { onMounted } from "vue";
// 页面配置初始化
const emit = defineEmits(["MyPrizePage"]);
const userStore = useMainStore();
const money = ref(userStore.prizeMoney);
const code = ref(userStore.prizeCode);
const copyFn = (event) => {
let e = event.target;
debounceTap(e, () => {
Clipboard.copy(code.value);
Toast(`复制成功:${code.value}`);
});
};
const hide = (event) => {
let e = event.target;
debounceTap(e, () => {
gsap.to(".MyPrizePage", {
duration: 0.4,
autoAlpha: 0,
onComplete: () => {
emit("MyPrizePage", { action: "hide" });
},
});
});
};
const entryAni = () => {
gsap.from(".MyPrizePage", { duration: 0.2, autoAlpha: 0 });
gsap.from(".myPrize-container", { duration: 0.5, autoAlpha: 0, scale: 0.7 });
};
onMounted(() => {
entryAni();
});
</script>
<template>
<div class="MyPrizePage">
<div class="myPrize-container">
<div class="myPrize-money">¥{{ money }}</div>
<div class="myPrize-code-box">
<div class="code">{{ code }}</div>
<div class="myPrize-copy-btn" @click="copyFn($event)"></div>
</div>
<div class="myPrize-cls-btn" @click="hide($event)"></div>
</div>
</div>
</template>
<style lang="scss" scoped>
.MyPrizePage {
@include fixed();
@include flexCen();
background-color: rgba($color: #000000, $alpha: 0.8);
.myPrize-container {
position: relative;
@include box(665px, 731px);
@include bg_pos("prize/myPrize-box.png");
.myPrize-money {
@include pos(370px, 81px, 139px, 239px);
display: flex;
justify-content: center;
align-items: center;
color: #e95b46;
font-weight: 700;
font-size: 58px;
letter-spacing: 4px;
}
.myPrize-code-box {
@include pos(312px, 52px, 197px, 508px);
display: flex;
flex-direction: row;
align-items: center;
.code {
font-size: 25px;
font-weight: 700;
margin-right: 10px;
color: #fff6cc;
}
.myPrize-copy-btn {
@include box(77px, 39px);
@include bg_pos("prize/copy-btn.png");
}
}
.myPrize-cls-btn {
@include pos(82px, 82px, 517px, 114px);
@include bg_pos("prize/cls-btn.png");
}
}
}
</style>