element-plus
Version:
A Component Library for Vue 3
1 lines • 13.8 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=\"nsInput.e('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'\nimport { useNamespace } from '@element-plus/hooks'\n\nimport { componentSizes } from '@element-plus/constants'\nimport type { Component, PropType } from 'vue'\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 values: componentSizes,\n default: '',\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 const nsInput = useNamespace('input')\n const select = ref(null)\n\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 nsInput,\n select,\n value,\n items,\n blur,\n focus,\n }\n },\n})\n</script>\n"],"names":["_resolveComponent","_openBlock","_createBlock","_withCtx","_createCommentVNode","_createElementBlock","_Fragment","_renderList"],"mappings":"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"}