UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 13.6 kB
{"version":3,"file":"DatePicker.mjs","sources":["../../src/date-picker/DatePicker.tsx"],"sourcesContent":["import { defineComponent, computed, watch } from 'vue';\nimport dayjs from 'dayjs';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport isFunction from 'lodash/isFunction';\n\nimport { useFormDisabled } from '../form/hooks';\nimport useSingle from './hooks/useSingle';\nimport { parseToDayjs, getDefaultFormat, formatTime, formatDate } from '../_common/js/date-picker/format';\nimport { subtractMonth, addMonth, extractTimeObj } from '../_common/js/date-picker/utils';\nimport type { DateValue } from './type';\nimport props from './props';\n\nimport TSelectInput from '../select-input';\nimport TSinglePanel from './panel/SinglePanel';\n\nexport default defineComponent({\n name: 'XDatePicker',\n\n props: {\n ...props,\n },\n\n setup(props) {\n const COMPONENT_NAME = usePrefixClass('date-picker');\n\n const {\n inputValue,\n popupVisible,\n inputProps,\n popupProps,\n isHoverCell,\n cacheValue,\n value,\n year,\n month,\n time,\n inputRef,\n onChange,\n } = useSingle(props);\n\n const disabled = useFormDisabled();\n\n const formatRef = computed(() =>\n getDefaultFormat({\n mode: props.mode,\n format: props.format,\n valueType: props.valueType,\n enableTimePicker: props.enableTimePicker,\n }),\n );\n\n watch(popupVisible, (visible) => {\n cacheValue.value = formatDate(value.value, {\n format: formatRef.value.format,\n });\n inputValue.value = formatDate(value.value, {\n format: formatRef.value.format,\n });\n\n // 面板展开重置数据\n if (visible) {\n year.value = parseToDayjs(value.value, formatRef.value.format).year();\n month.value = parseToDayjs(value.value, formatRef.value.format).month();\n time.value = formatTime(value.value, formatRef.value.format, formatRef.value.timeFormat, props.defaultTime);\n } else {\n isHoverCell.value = false;\n }\n });\n\n // 日期 hover\n function onCellMouseEnter(date: Date) {\n isHoverCell.value = true;\n inputValue.value = formatDate(date, {\n format: formatRef.value.format,\n });\n }\n\n // 日期 leave\n function onCellMouseLeave() {\n isHoverCell.value = false;\n inputValue.value = formatDate(cacheValue.value, {\n format: formatRef.value.format,\n });\n }\n\n // 日期点击\n function onCellClick(date: Date) {\n isHoverCell.value = false;\n // date 模式自动切换年月\n if (props.mode === 'date') {\n year.value = date.getFullYear();\n month.value = date.getMonth();\n }\n if (props.enableTimePicker) {\n cacheValue.value = formatDate(date, {\n format: formatRef.value.format,\n });\n } else {\n onChange?.(\n formatDate(date, {\n format: formatRef.value.format,\n targetFormat: formatRef.value.valueType,\n }) as DateValue,\n {\n dayjsValue: parseToDayjs(date, formatRef.value.format),\n trigger: 'pick',\n },\n );\n popupVisible.value = false;\n }\n\n props.onPick?.(date);\n }\n\n // 头部快速切换\n function onJumperClick({ trigger }: { trigger: string }) {\n const monthCountMap = { date: 1, week: 1, month: 12, quarter: 12, year: 120 };\n const monthCount = monthCountMap[props.mode] || 0;\n\n const current = new Date(year.value, month.value);\n\n let next = null;\n if (trigger === 'prev') {\n next = subtractMonth(current, monthCount);\n } else if (trigger === 'current') {\n next = new Date();\n } else if (trigger === 'next') {\n next = addMonth(current, monthCount);\n }\n\n const nextYear = next.getFullYear();\n const nextMonth = next.getMonth();\n\n year.value = nextYear;\n month.value = nextMonth;\n }\n\n // timePicker 点击\n function onTimePickerChange(val: string) {\n time.value = val;\n\n const { hours, minutes, seconds, milliseconds, meridiem } = extractTimeObj(val);\n\n // am pm 12小时制转化 24小时制\n let nextHours = hours;\n if (/am/i.test(meridiem) && nextHours === 12) nextHours -= 12;\n if (/pm/i.test(meridiem) && nextHours < 12) nextHours += 12;\n const currentDate = !dayjs(inputValue.value as string, formatRef.value.format).isValid()\n ? dayjs()\n : dayjs(inputValue.value as string, formatRef.value.format);\n const nextDate = currentDate.hour(nextHours).minute(minutes).second(seconds).millisecond(milliseconds).toDate();\n inputValue.value = formatDate(nextDate, {\n format: formatRef.value.format,\n });\n cacheValue.value = formatDate(nextDate, {\n format: formatRef.value.format,\n });\n\n props.onPick?.(nextDate);\n }\n\n // 确定\n function onConfirmClick({ e }: { e: MouseEvent }) {\n const nextValue = formatDate(inputValue.value, {\n format: formatRef.value.format,\n });\n if (nextValue) {\n props?.onConfirm?.({ date: dayjs(nextValue as string).toDate(), e });\n onChange?.(\n formatDate(inputValue.value, {\n format: formatRef.value.format,\n targetFormat: formatRef.value.valueType,\n }) as DateValue,\n {\n dayjsValue: parseToDayjs(inputValue.value as string, formatRef.value.format),\n trigger: 'confirm',\n },\n );\n } else {\n inputValue.value = formatDate(value.value, {\n format: formatRef.value.format,\n });\n }\n popupVisible.value = false;\n }\n\n // 预设\n function onPresetClick(presetValue: DateValue | (() => DateValue)) {\n const presetVal = isFunction(presetValue) ? presetValue() : presetValue;\n onChange?.(\n formatDate(presetVal, {\n format: formatRef.value.format,\n targetFormat: formatRef.value.valueType,\n }) as DateValue,\n {\n dayjsValue: parseToDayjs(presetVal, formatRef.value.format),\n trigger: 'preset',\n },\n );\n\n popupVisible.value = false;\n }\n\n function onYearChange(nextYear: number) {\n year.value = nextYear;\n }\n\n function onMonthChange(nextMonth: number) {\n month.value = nextMonth;\n }\n\n const panelProps = computed(() => ({\n value: cacheValue.value as string,\n year: year.value,\n month: month.value,\n format: formatRef.value.format,\n mode: props.mode,\n presets: props.presets,\n time: time.value as string,\n disableDate: props.disableDate,\n firstDayOfWeek: props.firstDayOfWeek,\n timePickerProps: props.timePickerProps,\n enableTimePicker: props.enableTimePicker,\n presetsPlacement: props.presetsPlacement,\n popupVisible: popupVisible.value,\n onCellClick,\n onCellMouseEnter,\n onCellMouseLeave,\n onJumperClick,\n onConfirmClick,\n onPresetClick,\n onYearChange,\n onMonthChange,\n onTimePickerChange,\n onPanelClick: () => inputRef.value?.focus?.(),\n }));\n\n return () => (\n <div class={COMPONENT_NAME.value}>\n <TSelectInput\n disabled={disabled.value}\n value={inputValue.value}\n status={props.status}\n tips={props.tips}\n clearable={props.clearable}\n popupProps={popupProps.value}\n inputProps={inputProps.value}\n popupVisible={popupVisible.value}\n panel={() => <TSinglePanel {...panelProps.value} />}\n />\n </div>\n );\n },\n});\n"],"names":["name","props","watch","format","year","month","inputValue","cacheValue","targetFormat","trigger","date","week","quarter","next","e","dayjsValue","onCellClick","onCellMouseEnter","onCellMouseLeave","onJumperClick","onConfirmClick","onPresetClick","onYearChange","onMonthChange","onTimePickerChange","_createVNode"],"mappings":"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"}