Initial commit: 网络验证平台

This commit is contained in:
Admin
2026-04-27 17:22:56 +08:00
commit afe67d704e
780 changed files with 88960 additions and 0 deletions
@@ -0,0 +1,72 @@
<script setup lang="ts">
import type { HTMLAttributes } from 'vue'
import { cn } from '@/lib/utils'
import { Icon } from '@iconify/vue'
import { computed } from 'vue'
import UiButton from '@/components/ui/button/Button.vue'
import UiPopover from '@/components/ui/popover/Popover.vue'
import UiPopoverTrigger from '@/components/ui/popover/PopoverTrigger.vue'
import UiPopoverContent from '@/components/ui/popover/PopoverContent.vue'
import UiInput from '@/components/ui/input/Input.vue'
import UiLabel from '@/components/ui/label/Label.vue'
const props = defineProps<{
modelValue?: string
placeholder?: string
class?: HTMLAttributes['class']
disabled?: boolean
}>()
const emit = defineEmits<{
'update:modelValue': [value: string]
}>()
const open = defineModel<boolean>('open', { default: false })
const timeValue = computed({
get() {
return props.modelValue || '00:00'
},
set(value: string) {
emit('update:modelValue', value)
},
})
const formattedTime = computed(() => {
return timeValue.value || ''
})
function handleTimeChange(time: string | number) {
timeValue.value = typeof time === 'number' ? String(time) : time
}
</script>
<template>
<UiPopover v-model:open="open">
<UiPopoverTrigger as-child>
<UiButton
variant="outline"
:class="cn(
'w-full justify-start text-left font-normal',
!modelValue && 'text-muted-foreground',
props.class,
)"
:disabled="disabled"
>
<Icon icon="lucide:clock" class="mr-2 h-4 w-4" />
{{ formattedTime || placeholder || '选择时间' }}
</UiButton>
</UiPopoverTrigger>
<UiPopoverContent class="w-auto p-3" align="start">
<div class="space-y-2">
<UiLabel>时间</UiLabel>
<UiInput
type="time"
:model-value="timeValue"
@update:model-value="handleTimeChange"
class="max-w-[150px]"
/>
</div>
</UiPopoverContent>
</UiPopover>
</template>