完整的管理系统,包含账户管理、卡片管理、套餐管理、财务管理等功能模块。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
86 lines
2.5 KiB
TypeScript
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
|
|
}
|
|
}
|