123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- <script setup lang="ts">
- import dayjs from 'dayjs'
- const props = defineProps<{ startAt?: string | number; endAt?: string | number }>()
- const emits = defineEmits<{ end: [] }>()
- const status = computed(() => {
- // 如果当前时间小于开始时间返回等待中,如果当前时间大于等于开始时间小于等于结束时间返回进行中,当前时间大于结束时间返回已结束
- const now = new Date()
- if (dayjs(now).isBefore(dayjs(props.startAt))) {
- return 'waiting'
- } else if (dayjs(now).isAfter(dayjs(props.startAt)) && dayjs(now).isBefore(dayjs(props.endAt))) {
- return 'running'
- } else {
- return 'overdue'
- }
- })
- const time = ref(
- dayjs({ waiting: props.startAt, running: props.endAt }[status.value]).diff(
- new Date(),
- 'millisecond',
- ),
- )
- </script>
- <template>
- <div>
- <wd-count-down :time="time" @finish="emits('end')">
- <template #default="{ current }">
- <div v-if="time" class="flex items-center gap-1.25 text-black/40 text-sm">
- <div>距{{ { waiting: '报名开始', running: '报名结束' }[status] }}还有</div>
- <div
- v-if="current.days"
- class="w-4 h-4 bg-black/90 rounded text-white text-2.5 flex items-center justify-center"
- >
- {{ current.days }}
- </div>
- <span v-if="current.days" class="custom-count-down-colon">天</span>
- <div
- class="w-4 h-4 bg-black/90 rounded text-white text-2.5 flex items-center justify-center"
- >
- {{ current.hours }}
- </div>
- <span class="custom-count-down-colon">时</span>
- <div
- class="w-4 h-4 bg-black/90 rounded text-white text-2.5 flex items-center justify-center"
- >
- {{ current.minutes }}
- </div>
- <span class="custom-count-down-colon">分</span>
- <div
- v-if="!current.days"
- class="w-4 h-4 bg-black/90 rounded text-white text-2.5 flex items-center justify-center"
- >
- {{ current.seconds }}
- </div>
- <span v-if="!current.days" class="custom-count-down-colon">秒</span>
- </div>
- </template>
- </wd-count-down>
- </div>
- </template>
|