This commit is contained in:
yixu
2025-12-22 08:59:42 +08:00
parent ce179df652
commit 5731daf84a
18 changed files with 187 additions and 79 deletions

View File

@@ -3,10 +3,8 @@
<div class="scene-item item-1" @click="handleGoHome">
<img src="../assets/images/new/go-home.png" alt="回到首页">
</div>
<div class="scene-item item-2">
<img src="../assets/images/new/music.png" alt="音乐">
</div>
<div class="confirm-layout">
<div class="confirm-layout" v-if="isConfirmBtnDisplay">
<div class="scene-item item-3" @click="handleConfirmClick">
<img src="../assets/images/new/confirm-btn.png" alt="确定">
</div>
@@ -22,13 +20,15 @@
>
<div
class="carousel-track"
:style="{ transform: `translateX(calc(-${currentIndex * 100}% + ${currentIndex * 60}px))`, transition: isTransitioning ? 'transform 0.3s ease' : 'none' }"
:style="{ transform: `translateX(calc(-${currentIndex * 104}% + ${currentIndex * 60}px))`, transition: isTransitioning ? 'transform 0.3s ease' : 'none' }"
>
<div
v-for="(slide, index) in slides"
:key="index"
:class="['carousel-slide', { active: currentIndex === index }]"
>
<img v-show="slide.show" class="complete-icon" src="../assets/images/new/complete-icon.png" alt="">
<img :src="slide.image" :alt="slide.title" />
</div>
</div>
@@ -49,38 +49,91 @@
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue'
import { ref, onMounted, onUnmounted, watch, computed } from 'vue'
import ModalTransition from "./ModalTransition.vue"
import globalToastEvent, { ToastType } from '../globalToastEvent';
import { Request } from "../libs/utils"
import slider1 from '../assets/images/new/slider1.png';
import slider2 from '../assets/images/new/slider2.png';
import slider3 from '../assets/images/new/slider3.png';
import slider4 from '../assets/images/new/slider4.png';
import slider5 from '../assets/images/new/slider5.png';
import { globalStore } from "../globalstore.js";
const props = defineProps({
show: false,
})
const emit = defineEmits(['update:show'])
const handleGoHome = () => {
emit('close')
}
const emit = defineEmits(['close'])
// 轮播图数据
const slides = ref([
{
image: new URL('../assets/images/new/slider1.png', import.meta.url).href,
image: slider1,
title: '轮播图1',
link: '/home' // 点击跳转的路由
id: 1,
show: true,
},
{
image: new URL('../assets/images/new/slider1.png', import.meta.url).href,
image: slider2,
title: '轮播图2',
link: '/lottery'
id: 2,
show: true,
},
{
image: new URL('../assets/images/new/slider1.png', import.meta.url).href,
image: slider3,
title: '轮播图3',
link: '/address'
id: 3,
show: true,
},
{
image: slider4,
title: '轮播图4',
id: 4,
show: true,
},
{
image: slider5,
title: '轮播图5',
id: 5,
show: true,
}
])
const isConfirmBtnDisplay = computed(() => {
const slide = slides.value?.[currentIndex.value];
return !globalStore.completed_games_today.includes(`game${slide.id}`);
})
const getGameInfo = async () => {
const result = await Request('game/info', { refresh_official: true, refresh_cap_scan: true }, "GET")
if (result?.res?.status === 200) {
console.log(result)
// globalStore.completed_games_today = result.json.completed_games_today || [];
globalStore.completed_games_today = ['game1', 'game3']; // 测试数据
slides.value = slides.value.map(slide => ({
...slide,
show: globalStore.completed_games_today.includes(`game${slide.id}`)
}));
} else {
weui.alert("获取游戏数据失败,请刷新页面重试");
emit('close');
return
}
}
watch(() => props.show, async (newVal) => {
if (!newVal) {
return
}
getGameInfo();
}, { immediate: true })
const handleGoHome = () => {
emit('close')
}
const currentIndex = ref(0)
const startX = ref(0)
const moveX = ref(0)
@@ -141,24 +194,37 @@ const goToSlide = (index) => {
isTransitioning.value = true
currentIndex.value = index
stopAutoPlay()
startAutoPlay()
// startAutoPlay()
}
const hasVisitedBefore = localStorage.getItem('hasVisitedGameSwiper');
const handleConfirmClick = () => {
const handleConfirmClick = async () => {
const loading = weui.loading()
const slide = slides.value?.[currentIndex.value]
if (!slide) return
handleSlideClick(slide)
// 点击确定按钮开始游戏调用一次game log接口
const gameSource = `game${slide.id}`;
globalStore.game_id = gameSource;
let gameLogRes = await Request("game/log", { source: globalStore.game_id }, "POST");
if (!gameLogRes || !gameLogRes.res || (gameLogRes.res.status !== 200 && gameLogRes.res.status !== 201)) {
emit('close')
loading.hide()
return
} else {
globalStore.current_game_log_id = gameLogRes.json.log_id;
}
}
const handleSlideClick = (slide) => {
if (!hasVisitedBefore) {
localStorage.setItem('hasVisitedGameSwiper', 'true');
globalToastEvent.emit(ToastType.SHOW_GAMEDEMO)
globalToastEvent.emit(ToastType.SHOW_GAMEPAGE)
globalToastEvent.emit(ToastType.SHOW_GAMEPAGE, slide)
} else {
globalToastEvent.emit(ToastType.SHOW_GAMEPAGE)
globalToastEvent.emit(ToastType.SHOW_GAMEPAGE, slide)
}
}
@@ -188,6 +254,12 @@ onUnmounted(() => {
</script>
<style scoped>
.complete-icon {
width: 14vw !important;
position: absolute;
left: 2vw;
top: -2vw;
}
.scene-item {
position: fixed;
cursor: pointer;
@@ -207,8 +279,8 @@ onUnmounted(() => {
.item-1 {
width: 14vw;
height: 14vw;
top: 8vw;
left: 2vw;
top: 6.8vw;
left: 3vw;
animation-delay: 0s;
}
.item-2 {