import useTimeStore from "@/utils/useTimeStore"; import dayjs from "dayjs"; import { defineStore } from "pinia"; import { computed, reactive, ref, watch } from "vue"; const TOTAL_TIME = 60 * 60 * 15 export type TomatoTarget = { id: string; finishTime: number; remindTime: number | null; title: string; isCompleted: boolean; } export type TomatoTime = { date: number; finishTime: number; } export const musicList = [ { name: 'A Part of Us', music: 'https://newfatfox.oss-cn-beijing.aliyuncs.com/admin/music/aPartOfUs.mp3' }, { name: 'a signal rose', music: 'https://newfatfox.oss-cn-beijing.aliyuncs.com/admin/music/AsignalRose.mp3' }, { name: 'a thousand lifetimes', music: 'https://newfatfox.oss-cn-beijing.aliyuncs.com/admin/music/aThousandLifetimes.mp3' }, { name: 'A Very Brady Special', music: 'https://newfatfox.oss-cn-beijing.aliyuncs.com/admin/music/AVeryBradySpecial.mp3' }, { name: 'A Wonderful Story', music: 'https://newfatfox.oss-cn-beijing.aliyuncs.com/admin/music/AWonderfulStore.mp3' } ] export default defineStore("work", () => { const state = reactive({ list: [] as TomatoTarget[], timeList: [] as number[], isPlaying: false as boolean, selectMusic: 0, isStart: false as boolean, beginTime: -1 as number }) const time = useTimeStore() const remainingTime = computed(() => { if (!state.isStart) { return 0 } return dayjs(state.beginTime).add(1, 'minute').diff(dayjs(time.date), 'second') }) const beginTomatoTime = () => { state.beginTime = dayjs().valueOf() state.isStart = true playMusic() } const stopTomatoTime = () => { state.isStart = false state.beginTime = -1 stopMusic() if (remainingTime.value <= 0) { state.timeList.push( dayjs().valueOf() ) } } const playAudio = computed(() => { const audio = new Audio(musicList[state.selectMusic].music) return audio }) // watch(() => state.isPlaying, (val) => { // if (val) { // playAudio.value.play() // } else { // playAudio.value.pause() // } // }) const playMusic = () => { state.isPlaying = true playAudio.value.play() } const pauseMusic = () => { state.isPlaying = false playAudio.value.pause() } const stopMusic = () => { state.isPlaying = false playAudio.value.pause() playAudio.value.currentTime = 0 } const openShowModel = ref() const openFullscreen = ref(false) return { state, openShowModel, openFullscreen, beginTomatoTime, remainingTime, playMusic, pauseMusic, stopMusic, stopTomatoTime } })