element-plus
Version:
A Component Library for Vue 3
1 lines • 13.9 kB
Source Map (JSON)
{"version":3,"file":"time-select.mjs","sources":["../../../../../../packages/components/time-select/src/time-select.vue"],"sourcesContent":["<template>\n <el-select\n ref=\"select\"\n :model-value=\"value\"\n :disabled=\"disabled\"\n :clearable=\"clearable\"\n :clear-icon=\"clearIcon\"\n :size=\"size\"\n :effect=\"effect\"\n :placeholder=\"placeholder\"\n default-first-option\n :filterable=\"editable\"\n @update:model-value=\"(event) => $emit('update:modelValue', event)\"\n @change=\"(event) => $emit('change', event)\"\n @blur=\"(event) => $emit('blur', event)\"\n @focus=\"(event) => $emit('focus', event)\"\n >\n <el-option\n v-for=\"item in items\"\n :key=\"item.value\"\n :label=\"item.value\"\n :value=\"item.value\"\n :disabled=\"item.disabled\"\n />\n <template #prefix>\n <el-icon v-if=\"prefixIcon\" class=\"el-input__prefix-icon\">\n <component :is=\"prefixIcon\" />\n </el-icon>\n </template>\n </el-select>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue'\nimport dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js'\nimport ElSelect from '@element-plus/components/select'\nimport ElIcon from '@element-plus/components/icon'\nimport { CircleClose, Clock } from '@element-plus/icons-vue'\n\nimport type { Component, PropType } from 'vue'\nimport type { ComponentSize } from '@element-plus/constants'\ndayjs.extend(customParseFormat)\n\nconst { Option: ElOption } = ElSelect\n\ninterface Time {\n hours: number\n minutes: number\n}\n\nconst parseTime = (time: string): null | Time => {\n const values = (time || '').split(':')\n if (values.length >= 2) {\n let hours = Number.parseInt(values[0], 10)\n const minutes = Number.parseInt(values[1], 10)\n const timeUpper = time.toUpperCase()\n if (timeUpper.includes('AM') && hours === 12) {\n hours = 0\n } else if (timeUpper.includes('PM') && hours !== 12) {\n hours += 12\n }\n return {\n hours,\n minutes,\n }\n }\n return null\n}\nconst compareTime = (time1: string, time2: string): number => {\n const value1 = parseTime(time1)\n const value2 = parseTime(time2)\n const minutes1 = value1.minutes + value1.hours * 60\n const minutes2 = value2.minutes + value2.hours * 60\n if (minutes1 === minutes2) {\n return 0\n }\n return minutes1 > minutes2 ? 1 : -1\n}\nconst padTime = (time: number | string) => {\n return `${time}`.padStart(2, '0')\n}\nconst formatTime = (time: Time): string => {\n return `${padTime(time.hours)}:${padTime(time.minutes)}`\n}\nconst nextTime = (time: string, step: string): string => {\n const timeValue = parseTime(time)\n const stepValue = parseTime(step)\n const next = {\n hours: timeValue.hours,\n minutes: timeValue.minutes,\n }\n next.minutes += stepValue.minutes\n next.hours += stepValue.hours\n next.hours += Math.floor(next.minutes / 60)\n next.minutes = next.minutes % 60\n return formatTime(next)\n}\n\nexport default defineComponent({\n name: 'ElTimeSelect',\n components: { ElSelect, ElOption, ElIcon },\n model: {\n prop: 'value',\n event: 'change',\n },\n props: {\n format: {\n type: String,\n default: 'HH:mm',\n },\n modelValue: String,\n disabled: {\n type: Boolean,\n default: false,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n effect: {\n type: String as PropType<'light' | 'dark' | string>,\n default: 'light',\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n validator: (value: string) =>\n !value || ['large', 'default', 'small'].includes(value),\n },\n placeholder: {\n type: String,\n default: '',\n },\n start: {\n type: String,\n default: '09:00',\n },\n end: {\n type: String,\n default: '18:00',\n },\n step: {\n type: String,\n default: '00:30',\n },\n minTime: {\n type: String,\n default: '',\n },\n maxTime: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: '',\n },\n prefixIcon: {\n type: [String, Object] as PropType<string | Component>,\n default: Clock,\n },\n clearIcon: {\n type: [String, Object] as PropType<string | Component>,\n default: CircleClose,\n },\n },\n emits: ['change', 'blur', 'focus', 'update:modelValue'],\n setup(props) {\n // computed\n const select = ref(null)\n const value = computed(() => props.modelValue)\n const start = computed(() => {\n const time = parseTime(props.start)\n return formatTime(time)\n })\n const end = computed(() => {\n const time = parseTime(props.end)\n return formatTime(time)\n })\n const step = computed(() => {\n const time = parseTime(props.step)\n return formatTime(time)\n })\n const minTime = computed(() => {\n const time = parseTime(props.minTime)\n return time ? formatTime(time) : null\n })\n const maxTime = computed(() => {\n const time = parseTime(props.maxTime)\n return time ? formatTime(time) : null\n })\n const items = computed(() => {\n const result = []\n if (props.start && props.end && props.step) {\n let current = start.value\n let currentTime\n while (compareTime(current, end.value) <= 0) {\n currentTime = dayjs(current, 'HH:mm').format(props.format)\n result.push({\n value: currentTime,\n disabled:\n compareTime(current, minTime.value || '-1:-1') <= 0 ||\n compareTime(current, maxTime.value || '100:100') >= 0,\n })\n current = nextTime(current, step.value)\n }\n }\n return result\n })\n const blur = () => {\n select.value?.blur?.()\n }\n const focus = () => {\n select.value?.focus?.()\n }\n\n return {\n select,\n value,\n items,\n blur,\n focus,\n }\n },\n})\n</script>\n"],"names":["_resolveComponent","_openBlock","_createBlock","_withCtx","_resolveDynamicComponent","_createElementBlock","_Fragment","_renderList"],"mappings":"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"}