UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 37.8 kB
{"version":3,"file":"date-panel.vue2.cjs","sources":["../../../components/date-picker/date-panel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { CalendarPanel } from '@/components/calendar-panel'\nimport { Icon } from '@/components/icon'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, onMounted, reactive, ref, watch } from 'vue'\n\nimport TimeWheel from './time-wheel.vue'\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { callIfFunc, range as rangeNumbers, toDate } from '@vexip-ui/utils'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { datePickerTypes } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { MonthIndex } from '@/components/calendar'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { Dateable } from '@vexip-ui/utils'\nimport type {\n DatePanelSlots,\n DatePickerType,\n DateShortcut,\n DateShortcutsPlacement,\n DateTimeType,\n DateType,\n DisabledTime,\n TimeType,\n} from './symbol'\n\ndefineOptions({ name: 'DatePanel' })\n\nconst props = defineProps({\n type: {\n default: 'date' as DatePickerType,\n validator: (value: DatePickerType) => datePickerTypes.includes(value),\n },\n enabled: {\n type: Object as PropType<Record<DateTimeType, boolean>>,\n default: () => ({}),\n },\n startValue: {\n type: Object as PropType<Record<DateTimeType, number>>,\n default: null,\n },\n endValue: {\n type: Object as PropType<Record<DateTimeType, number>>,\n default: null,\n },\n shortcuts: {\n type: Array as PropType<DateShortcut[]>,\n default: () => [],\n },\n confirmText: {\n type: String,\n default: null,\n },\n cancelText: {\n type: String,\n default: null,\n },\n today: {\n type: [Number, String, Date] as PropType<Dateable>,\n default: () => new Date(),\n },\n disabledDate: {\n type: Function as PropType<(date: Date) => boolean>,\n default: () => false,\n },\n noAction: {\n type: Boolean,\n default: false,\n },\n steps: {\n type: Array as PropType<number[]>,\n default: () => [1, 1, 1],\n },\n range: {\n type: Boolean,\n default: false,\n },\n startActivated: {\n type: Object as PropType<Record<DateTimeType, boolean>>,\n default: () => ({}),\n },\n endActivated: {\n type: Object as PropType<Record<DateTimeType, boolean>>,\n default: () => ({}),\n },\n min: {\n type: [Number, String, Date] as PropType<Dateable>,\n default: null,\n },\n max: {\n type: [Number, String, Date] as PropType<Dateable>,\n default: null,\n },\n disabledTime: {\n type: Object as PropType<DisabledTime>,\n default: () => ({}),\n },\n hasError: {\n type: Boolean,\n default: false,\n },\n locale: {\n type: Object as PropType<LocaleConfig['calendar'] & LocaleConfig['datePicker']>,\n default: () => ({}),\n },\n selectingType: {\n type: String as PropType<'start' | 'end'>,\n default: 'start',\n },\n weekStart: {\n type: Number,\n default: null,\n },\n staticWheel: {\n type: Boolean,\n default: false,\n },\n shortcutsPlacement: {\n type: String as PropType<DateShortcutsPlacement>,\n default: 'left',\n },\n labeledBy: {\n type: String,\n default: undefined,\n },\n})\n\nconst emit = defineEmits([\n 'click',\n 'shortcut',\n 'toggle-col',\n 'change',\n 'cancel',\n 'confirm',\n 'hover',\n 'type-change',\n 'time-change',\n])\n\ndefineSlots<DatePanelSlots>()\n\nconst nh = useNameHelper('date-picker')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\n\nconst today = toDate(props.today)\nconst monthRange = rangeNumbers(12, 1, 1)\n\nconst currentPanel = ref<DateType>(\n props.type === 'year' ? 'year' : props.type === 'month' ? 'month' : 'date',\n)\nconst calendarYear = ref(today.getFullYear())\nconst calendarMonth = ref(today.getMonth() + 1) // 1 ~ 12\nconst hoveredYear = ref(0) // 0 is no hover (falsy)\nconst hoveredMonth = ref(0) // 0 is no hover (falsy)\nconst yearRange = ref<number[]>([])\n\nconst shortcutsRect = reactive({ width: 0, height: 0 })\n\nconst panelStyle = computed(() => {\n const { width, height } = shortcutsRect\n\n switch (props.shortcutsPlacement) {\n case 'top':\n return { paddingTop: `${height}px` }\n case 'right':\n return { paddingRight: `${width}px` }\n case 'bottom':\n return { paddingBottom: `${height}px` }\n default:\n return { paddingLeft: `${width}px` }\n }\n})\nconst startActivated = computed(() => {\n const activated = props.startActivated\n\n return activated.year && activated.month && activated.date\n})\nconst endActivated = computed(() => {\n const activated = props.endActivated\n\n return activated.year && activated.month && activated.date\n})\nconst isDatetime = computed(() => {\n return props.type === 'datetime'\n})\nconst calendarValue = computed(() => {\n return props.range\n ? startActivated.value || endActivated.value\n ? [getStringValue('start'), getStringValue('end')]\n : ['', '']\n : startActivated.value\n ? getStringValue('start')\n : ''\n})\nconst weekDays = computed(() => {\n return [\n props.locale.week7,\n props.locale.week1,\n props.locale.week2,\n props.locale.week3,\n props.locale.week4,\n props.locale.week5,\n props.locale.week6,\n ].map(week => week.slice(0, 2))\n})\n\nwatch(\n calendarYear,\n value => {\n yearRange.value = rangeNumbers(12, Math.floor(value / 10) * 10, 1)\n },\n { immediate: true },\n)\n\nonMounted(() => {\n refreshCalendar('start')\n})\n\ndefineExpose({ refreshCalendar })\n\nfunction getStringValue(type: 'start' | 'end') {\n const value = type === 'start' ? props.startValue : props.endValue\n\n return value ? `${value.year}-${value.month}-${value.date}` : ''\n}\n\nfunction getMonthLabel(index: number) {\n return props.locale[`month${index as MonthIndex}`]\n}\n\nfunction togglePanel(type: DateType) {\n currentPanel.value = type\n}\n\nfunction adjustCalendar(type: 'year' | 'month', amount: number) {\n if (type === 'year') {\n calendarYear.value += amount\n } else {\n // 月份存在进位\n calendarMonth.value += amount\n\n const date = new Date(calendarYear.value, calendarMonth.value - 1, 1)\n\n calendarYear.value = date.getFullYear()\n calendarMonth.value = date.getMonth() + 1\n }\n}\n\nfunction handleClick(event: MouseEvent) {\n emit('click', event)\n}\n\nfunction handleShortcut(index: number) {\n const { value, name } = props.shortcuts[index]\n\n emit('shortcut', name, callIfFunc(value))\n}\n\nfunction handleSelectDate(date: Date) {\n emitChange([date.getFullYear(), date.getMonth() + 1, date.getDate()])\n}\n\nfunction handleSelectYear(year: number) {\n if (isDisabledYear(year)) return\n\n calendarYear.value = year\n\n if (props.type !== 'year') {\n togglePanel('month')\n } else {\n emitChange([year, 1, 1])\n }\n}\n\nfunction handleSelectMonth(month: number) {\n if (isDisabledMonth(month)) return\n\n calendarMonth.value = month\n\n if (props.type !== 'month') {\n togglePanel('date')\n } else {\n emitChange([calendarYear.value, month, 1])\n }\n}\n\nfunction emitChange(values: number[]) {\n emit('change', values)\n}\n\nfunction handleStartTimeChange(type: TimeType, time: number) {\n emit('time-change', 'start', type, time)\n}\n\nfunction handleEndTimeChange(type: TimeType, time: number) {\n emit('time-change', 'end', type, time)\n}\n\nfunction handleDoublePrevClick() {\n if (currentPanel.value === 'year') {\n yearRange.value = rangeNumbers(12, yearRange.value[0] - 10, 1)\n } else {\n adjustCalendar('year', -1)\n }\n}\nfunction handleDoubleNextClick() {\n if (currentPanel.value === 'year') {\n yearRange.value = rangeNumbers(12, yearRange.value[10], 1)\n } else {\n adjustCalendar('year', 1)\n }\n}\n\nfunction handleCancel() {\n emit('cancel')\n}\n\nfunction handleConfirm() {\n emit('confirm')\n}\n\nfunction handleHoverDate(date: Date | null) {\n emit('hover', date)\n}\n\nfunction isSelectedYear(year: number) {\n if (!year) return false\n\n return (\n (props.startActivated.year && props.startValue.year === year) ||\n (props.endActivated.year && props.endValue.year === year)\n )\n}\n\nfunction isSelectedMonth(month: number) {\n if (!month) return false\n\n const monthYear = 100 * calendarYear.value + month\n\n return (\n (props.startActivated.month &&\n 100 * props.startValue.year + props.startValue.month === monthYear) ||\n (props.endActivated.month && 100 * props.endValue.year + props.endValue.month === monthYear)\n )\n}\n\nfunction isDisabledYear(year: number) {\n if (props.type === 'year') {\n return props.disabledDate(new Date(year, 0))\n }\n\n for (let i = 1; i <= 12; ++i) {\n if (!isDisabledMonth(i, year)) {\n return false\n }\n }\n\n return true\n}\n\nfunction isDisabledMonth(month: number, year = calendarYear.value) {\n if (props.type === 'year') return false\n\n if (props.type === 'month') {\n return props.disabledDate(new Date(year, month - 1))\n }\n\n const current = new Date(year, month - 1)\n const end = new Date(year, month, 0)\n const dayCount = end.getDate()\n\n for (let i = 1; i <= dayCount; ++i) {\n current.setDate(i)\n\n if (!props.disabledDate(current)) {\n return false\n }\n }\n\n return true\n}\n\nfunction handleYearHover(year: number) {\n hoveredYear.value = isDisabledYear(year) ? 0 : year\n}\n\nfunction handleMonthHover(month: number) {\n hoveredMonth.value = isDisabledMonth(month) ? 0 : month\n}\n\nfunction isYearInRange(year: number) {\n if (\n !props.range ||\n (!hoveredYear.value && !props.startActivated.year && !props.endActivated.year)\n ) {\n return false\n }\n\n // if (\n // (props.valueType === 'start' && !props.endActivated.year) ||\n // (props.valueType === 'end' && !props.startActivated.year)\n // ) {\n // return false\n // }\n\n const startYear = props.startValue.year\n const endYear = props.endValue.year\n\n let min: number\n let max: number\n\n if (!hoveredYear.value && props.startActivated.year && props.endActivated.year) {\n min = Math.min(startYear, endYear)\n max = Math.max(startYear, endYear)\n } else if (hoveredYear.value) {\n if (!props.startActivated.year && !props.endActivated.year) return false\n\n if (!props.startActivated.year || !props.endActivated.year) {\n const selectedYear = props.startActivated.year ? startYear : endYear\n\n min = Math.min(hoveredYear.value, selectedYear)\n max = Math.max(hoveredYear.value, selectedYear)\n } else {\n const minYear = Math.min(startYear, endYear)\n const maxYear = Math.max(startYear, endYear)\n\n min = Math.min(hoveredYear.value, minYear)\n max = Math.max(hoveredYear.value, maxYear)\n }\n } else {\n return false\n }\n\n return year >= min && year <= max\n}\n\nfunction isMonthInRange(month: number) {\n if (\n !props.range ||\n (!hoveredMonth.value && !props.startActivated.month && !props.endActivated.month)\n ) {\n return false\n }\n\n // if (\n // (props.valueType === 'start' && !props.endActivated.month) ||\n // (props.valueType === 'end' && !props.startActivated.month)\n // ) {\n // return false\n // }\n\n const startMonthYear = 100 * props.startValue.year + props.startValue.month\n const endMonthYear = 100 * props.endValue.year + props.endValue.month\n\n let min: number\n let max: number\n\n if (!hoveredMonth.value && props.startActivated.month && props.endActivated.month) {\n min = Math.min(startMonthYear, endMonthYear)\n max = Math.max(startMonthYear, endMonthYear)\n } else if (hoveredMonth.value) {\n if (!props.startActivated.month && !props.endActivated.month) return false\n\n const hoveredMonthYear = 100 * calendarYear.value + hoveredMonth.value\n\n if (!props.startActivated.month || !props.endActivated.month) {\n const selectedMonthYear = props.startActivated.month ? startMonthYear : endMonthYear\n\n min = Math.min(hoveredMonthYear, selectedMonthYear)\n max = Math.max(hoveredMonthYear, selectedMonthYear)\n } else {\n const minMonthYear = Math.min(startMonthYear, endMonthYear)\n const maxMonthYear = Math.max(startMonthYear, endMonthYear)\n\n min = Math.min(hoveredMonthYear, minMonthYear)\n max = Math.max(hoveredMonthYear, maxMonthYear)\n }\n } else {\n return false\n }\n\n const monthYear = 100 * calendarYear.value + month\n\n return monthYear >= min && monthYear <= max\n}\n\n// 重新计算日历页面\nfunction refreshCalendar(valueType: 'start' | 'end') {\n const today = toDate(props.today)\n\n if (valueType === 'start') {\n calendarYear.value = props.startActivated.year ? props.startValue.year : today.getFullYear()\n calendarMonth.value = props.startActivated.month ? props.startValue.month : today.getMonth() + 1\n } else {\n calendarYear.value = props.endActivated.year ? props.endValue.year : today.getFullYear()\n calendarMonth.value = props.endActivated.month ? props.endValue.month : today.getMonth() + 1\n }\n}\n\nfunction handleShortcutsResize(entry: ResizeObserverEntry) {\n const box = entry.borderBoxSize?.[0]\n\n if (box) {\n shortcutsRect.width = box.inlineSize\n shortcutsRect.height = box.blockSize\n } else {\n shortcutsRect.width = entry.contentRect.width\n shortcutsRect.height = entry.contentRect.height\n }\n}\n</script>\n\n<template>\n <div\n :class=\"{\n [nh.be('panel')]: true,\n [nh.bem('panel', 'vertical')]:\n shortcuts.length && (shortcutsPlacement === 'top' || shortcutsPlacement === 'bottom')\n }\"\n :aria-labelledby=\"labeledBy\"\n :style=\"panelStyle\"\n @click=\"handleClick\"\n >\n <ResizeObserver v-if=\"shortcuts.length\" :on-resize=\"handleShortcutsResize\">\n <div\n :class=\"[\n nh.be('list'),\n nh.bem('list', 'sub'),\n nh.be('shortcuts'),\n nh.bem('shortcuts', shortcutsPlacement)\n ]\"\n >\n <div\n v-for=\"(item, index) in shortcuts\"\n :key=\"index\"\n :class=\"nh.be('shortcut')\"\n :title=\"item.name\"\n @click=\"handleShortcut(index)\"\n >\n {{ item.name }}\n </div>\n </div>\n </ResizeObserver>\n <div :class=\"nh.be('list')\" role=\"application\">\n <div :class=\"nh.be('panel-body')\">\n <div :class=\"nh.be('date-panel')\">\n <div :class=\"nh.be('header')\">\n <div :class=\"[nh.be('arrow'), nh.be('prev-year')]\" @click=\"handleDoublePrevClick\">\n <Icon v-bind=\"isRtl ? icons.anglesRight : icons.anglesLeft\"></Icon>\n </div>\n <div\n v-show=\"currentPanel === 'date'\"\n :class=\"[nh.be('arrow'), nh.be('prev-month')]\"\n @click=\"adjustCalendar('month', -1)\"\n >\n <Icon v-bind=\"isRtl ? icons.angleRight : icons.angleLeft\"></Icon>\n </div>\n <div :class=\"nh.be('year-month')\">\n <slot\n name=\"title\"\n :panel=\"currentPanel\"\n :year-start=\"yearRange[0]\"\n :year=\"calendarYear\"\n :month=\"calendarMonth\"\n :toggle-panel=\"togglePanel\"\n >\n <div key=\"year\" :class=\"nh.be('year')\" @click.stop=\"togglePanel('year')\">\n <template v-if=\"currentPanel === 'year'\">\n {{ `${yearRange[0]}${locale.year} - ${yearRange[9]}${locale.year}` }}\n </template>\n <template v-else>\n {{ `${calendarYear}${locale.year}` }}\n </template>\n </div>\n <div\n v-show=\"currentPanel === 'date'\"\n :class=\"nh.be('month')\"\n @click.stop=\"togglePanel('month')\"\n >\n {{ getMonthLabel(calendarMonth) }}\n </div>\n </slot>\n </div>\n <div\n v-show=\"currentPanel === 'date'\"\n :class=\"[nh.be('arrow'), nh.be('next-month')]\"\n @click=\"adjustCalendar('month', 1)\"\n >\n <Icon v-bind=\"isRtl ? icons.angleLeft : icons.angleRight\"></Icon>\n </div>\n <div :class=\"[nh.be('arrow'), nh.be('next-year')]\" @click=\"handleDoubleNextClick\">\n <Icon v-bind=\"isRtl ? icons.anglesLeft : icons.anglesRight\"></Icon>\n </div>\n </div>\n <div :class=\"nh.be('calendar')\">\n <div\n v-if=\"currentPanel === 'year'\"\n :class=\"nh.be('year-panel')\"\n @mouseleave=\"hoveredYear = 0\"\n >\n <div\n v-for=\"(item, index) in yearRange\"\n :key=\"index\"\n :class=\"{\n [nh.be('year-item')]: true,\n [nh.bem('year-item', 'selected')]: isSelectedYear(item),\n [nh.bem('year-item', 'next')]: index > 9,\n [nh.bem('year-item', 'disabled')]: isDisabledYear(item),\n [nh.bem('year-item', 'in-range')]: isYearInRange(item)\n }\"\n @click.stop=\"handleSelectYear(item)\"\n @mouseenter=\"handleYearHover(item)\"\n >\n <div :class=\"nh.be('year-label')\">\n <slot\n name=\"year\"\n :year=\"item\"\n :selected=\"isSelectedYear(item)\"\n :is-next=\"index > 9\"\n :disabled=\"isDisabledYear(item)\"\n :in-range=\"isYearInRange(item)\"\n >\n <div :class=\"nh.be('year-label-inner')\">\n {{ item }}\n </div>\n </slot>\n </div>\n </div>\n </div>\n <div\n v-else-if=\"currentPanel === 'month'\"\n :class=\"nh.be('month-panel')\"\n @mouseleave=\"hoveredMonth = 0\"\n >\n <div\n v-for=\"index in monthRange\"\n :key=\"index\"\n :class=\"{\n [nh.be('month-item')]: true,\n [nh.bem('month-item', 'selected')]: isSelectedMonth(index),\n [nh.bem('month-item', 'disabled')]: isDisabledMonth(index),\n [nh.bem('month-item', 'in-range')]: isMonthInRange(index)\n }\"\n @click.stop=\"handleSelectMonth(index)\"\n @mouseenter=\"handleMonthHover(index)\"\n >\n <div :class=\"nh.be('month-label')\">\n <slot\n name=\"month\"\n :year=\"calendarYear\"\n :month=\"index\"\n :selected=\"isSelectedMonth(index)\"\n :disabled=\"isDisabledMonth(index)\"\n :in-range=\"isMonthInRange(index)\"\n >\n <div :class=\"nh.be('month-label-inner')\">\n {{ getMonthLabel(index) }}\n </div>\n </slot>\n </div>\n </div>\n </div>\n <CalendarPanel\n v-else\n inherit\n :value=\"calendarValue\"\n :year=\"calendarYear\"\n :month=\"calendarMonth\"\n :value-type=\"selectingType\"\n :disabled-date=\"disabledDate\"\n :range=\"range\"\n :min=\"min\"\n :max=\"max\"\n :week-start=\"weekStart\"\n :week-days=\"weekDays\"\n @select=\"handleSelectDate\"\n @hover=\"handleHoverDate\"\n >\n <template v-if=\"$slots.week\" #week=\"weekParams\">\n <slot name=\"week\" v-bind=\"weekParams\"></slot>\n </template>\n <template v-if=\"$slots.date\" #itemContent=\"itemParams\">\n <slot name=\"date\" v-bind=\"itemParams\"></slot>\n </template>\n </CalendarPanel>\n </div>\n </div>\n <div v-if=\"isDatetime\" :class=\"nh.be('time-panel')\">\n <div :class=\"[nh.be('header'), nh.bem('header', 'time')]\">\n <template v-if=\"range\">\n <div :class=\"nh.be('title')\">\n {{ locale.startTime }}\n </div>\n <div :class=\"nh.be('title')\">\n {{ locale.endTime }}\n </div>\n </template>\n </div>\n <div :class=\"nh.be('wheel')\">\n <TimeWheel\n :hour=\"startValue.hour\"\n :minute=\"startValue.minute\"\n :second=\"startValue.second\"\n :candidate=\"3\"\n :steps=\"steps\"\n :disabled-time=\"disabledTime\"\n :no-transition=\"staticWheel\"\n @change=\"handleStartTimeChange\"\n ></TimeWheel>\n <TimeWheel\n v-if=\"range\"\n :hour=\"endValue.hour\"\n :minute=\"endValue.minute\"\n :second=\"endValue.second\"\n :candidate=\"3\"\n :steps=\"steps\"\n :disabled-time=\"disabledTime\"\n :no-transition=\"staticWheel\"\n @change=\"handleEndTimeChange\"\n ></TimeWheel>\n </div>\n </div>\n </div>\n <div v-if=\"!noAction\" :class=\"nh.be('action')\">\n <Button\n inherit\n text\n size=\"small\"\n @click=\"handleCancel\"\n >\n {{ cancelText || locale.cancel }}\n </Button>\n <Button\n inherit\n type=\"primary\"\n size=\"small\"\n :disabled=\"hasError\"\n @click=\"handleConfirm\"\n >\n {{ confirmText || locale.confirm }}\n </Button>\n </div>\n </div>\n </div>\n</template>\n"],"names":["props","__props","emit","__emit","nh","useNameHelper","icons","useIcons","isRtl","useRtl","today","toDate","monthRange","rangeNumbers","currentPanel","ref","calendarYear","calendarMonth","hoveredYear","hoveredMonth","yearRange","shortcutsRect","reactive","panelStyle","computed","width","height","startActivated","activated","endActivated","isDatetime","calendarValue","getStringValue","weekDays","week","watch","value","onMounted","refreshCalendar","__expose","type","getMonthLabel","index","togglePanel","adjustCalendar","amount","date","handleClick","event","handleShortcut","name","callIfFunc","handleSelectDate","emitChange","handleSelectYear","year","isDisabledYear","handleSelectMonth","month","isDisabledMonth","values","handleStartTimeChange","time","handleEndTimeChange","handleDoublePrevClick","handleDoubleNextClick","handleCancel","handleConfirm","handleHoverDate","isSelectedYear","isSelectedMonth","monthYear","i","current","dayCount","handleYearHover","handleMonthHover","isYearInRange","startYear","endYear","min","max","selectedYear","minYear","maxYear","isMonthInRange","startMonthYear","endMonthYear","hoveredMonthYear","selectedMonthYear","minMonthYear","maxMonthYear","valueType","handleShortcutsResize","entry","box","_a","_createElementBlock","_normalizeClass","_unref","_createBlock","ResizeObserver","_createElementVNode","_openBlock","_Fragment","_renderList","item","$event","_toDisplayString","_hoisted_2","_createVNode","Icon","_normalizeProps","_guardReactiveProps","_renderSlot","_ctx","_withModifiers","CalendarPanel","$slots","_withCtx","weekParams","itemParams","TimeWheel","Button"],"mappings":"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"}