Files
one-pipe-system/src/composables/useCeremony.ts
sexygoat 222e5bb11a Initial commit: One Pipe System
完整的管理系统,包含账户管理、卡片管理、套餐管理、财务管理等功能模块。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-22 16:35:33 +08:00

86 lines
2.5 KiB
TypeScript

import { useTimeoutFn, useIntervalFn } from '@vueuse/core'
import { useDateFormat } from '@vueuse/core'
import { useSettingStore } from '@/store/modules/setting'
import { storeToRefs } from 'pinia'
import { computed } from 'vue'
import { mittBus } from '@/utils/sys'
import { festivalConfigList } from '@/config/festival'
// 节日庆祝相关配置
export function useCeremony() {
const settingStore = useSettingStore()
const { holidayFireworksLoaded, isShowFireworks } = storeToRefs(settingStore)
// 烟花间隔引用,用于清理
let fireworksInterval: { pause: () => void } | null = null
// 判断当前日期是否是节日
const currentFestivalData = computed(() => {
const currentDate = useDateFormat(new Date(), 'YYYY-MM-DD').value
return festivalConfigList.find((item) => item.date === currentDate)
})
// 节日庆祝相关配置
const FESTIVAL_CONFIG = {
INITIAL_DELAY: 300, // 初始延迟时间,单位毫秒
FIREWORK_INTERVAL: 1000, // 烟花效果触发间隔,单位毫秒
TEXT_DELAY: 2000, // 文本显示延迟时间,单位毫秒
MAX_TRIGGERS: 6 // 最大触发次数
} as const
// 根据节日列表显示节日祝福
const openFestival = () => {
// 没有节日数据,不显示
if (!currentFestivalData.value) return
// 礼花效果结束,不显示
if (!isShowFireworks.value) return
let triggers = 0
const { start: startFireworks } = useTimeoutFn(() => {
const { pause } = useIntervalFn(() => {
// console.log(currentFestivalData.value?.image)
mittBus.emit('triggerFireworks', currentFestivalData.value?.image)
triggers++
if (triggers >= FESTIVAL_CONFIG.MAX_TRIGGERS) {
pause()
settingStore.setholidayFireworksLoaded(true)
// 主页显示节日文本
useTimeoutFn(() => {
settingStore.setShowFestivalText(true)
setFestivalDate()
}, FESTIVAL_CONFIG.TEXT_DELAY)
}
}, FESTIVAL_CONFIG.FIREWORK_INTERVAL)
fireworksInterval = { pause }
}, FESTIVAL_CONFIG.INITIAL_DELAY)
startFireworks()
}
// 清理函数
const cleanup = () => {
if (fireworksInterval) {
fireworksInterval.pause()
settingStore.setShowFestivalText(false)
setFestivalDate()
}
}
// 设置节日日期
const setFestivalDate = () => {
settingStore.setFestivalDate(currentFestivalData.value?.date || '')
}
return {
openFestival,
cleanup,
holidayFireworksLoaded,
currentFestivalData,
isShowFireworks
}
}