xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 25.7 kB
Source Map (JSON)
{"version":3,"file":"DateRangePicker.mjs","sources":["../../src/date-picker/DateRangePicker.tsx"],"sourcesContent":["import { defineComponent, computed, ref, watch } from 'vue';\nimport dayjs from 'dayjs';\nimport { useFormDisabled } from '../form/hooks';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport isFunction from 'lodash/isFunction';\nimport isArray from 'lodash/isArray';\n\nimport props from './date-range-picker-props';\nimport { DateValue, DateRangePickerPartial } from './type';\n\nimport { RangeInputPopup as TRangeInputPopup } from '../range-input';\nimport TRangePanel from './panel/RangePanel';\nimport useRange from './hooks/useRange';\nimport {\n parseToDayjs,\n formatTime,\n formatDate,\n isValidDate,\n getDefaultFormat,\n initYearMonthTime,\n} from '../_common/js/date-picker/format';\nimport { subtractMonth, addMonth, extractTimeObj } from '../_common/js/date-picker/utils';\n\nexport default defineComponent({\n name: 'XDateRangePicker',\n\n props: {\n ...props,\n },\n\n setup(props, { slots }) {\n const COMPONENT_NAME = usePrefixClass('date-range-picker');\n\n const {\n inputValue,\n popupVisible,\n rangeInputProps,\n popupProps,\n value,\n year,\n month,\n time,\n cacheValue,\n activeIndex,\n isHoverCell,\n isFirstValueSelected,\n onChange,\n } = useRange(props);\n\n const disabled = useFormDisabled();\n\n const formatRef = computed(() =>\n getDefaultFormat({\n mode: props.mode,\n enableTimePicker: props.enableTimePicker,\n format: props.format,\n valueType: props.valueType,\n }),\n );\n\n // 记录面板是否选中过\n const isSelected = ref(false);\n\n watch(popupVisible, (visible) => {\n // 面板展开重置数据\n if (visible) {\n isSelected.value = false;\n cacheValue.value = formatDate(value.value || [], {\n format: formatRef.value.format,\n }) as string[];\n time.value = formatTime(\n value.value || [dayjs().format(formatRef.value.timeFormat), dayjs().format(formatRef.value.timeFormat)],\n formatRef.value.format,\n formatRef.value.timeFormat,\n props.defaultTime,\n ) as string[];\n\n // 空数据重置为当前年月\n if (!value.value.length) {\n const { year: defaultYear, month: defaultMonth } = initYearMonthTime({\n value: value.value,\n mode: props.mode,\n format: formatRef.value.format,\n enableTimePicker: props.enableTimePicker,\n });\n year.value = defaultYear;\n month.value = defaultMonth;\n } else if (value.value.length === 2 && !props.enableTimePicker) {\n // 确保右侧面板月份比左侧大 避免两侧面板月份一致\n const nextMonth = value.value.map((v: string) => parseToDayjs(v, formatRef.value.format).month());\n if (year.value[0] === year.value[1] && nextMonth[0] === nextMonth[1]) {\n nextMonth[0] === 11 ? (nextMonth[0] -= 1) : (nextMonth[1] += 1);\n }\n month.value = nextMonth;\n year.value = value.value.map((v: string) => parseToDayjs(v, formatRef.value.format).year());\n // 月份季度选择时需要确保右侧面板年份比左侧大\n if ((props.mode === 'month' || props.mode === 'quarter') && year.value[0] === year.value[1]) {\n year.value = [year.value[0], year.value[0] + 1];\n }\n } else {\n year.value = value.value.map((v: string) => parseToDayjs(v, formatRef.value.format).year());\n if (year.value.length === 1) year.value = [year.value[0], year.value[0]];\n\n month.value = value.value.map((v: string) => parseToDayjs(v, formatRef.value.format).month());\n if (month.value.length === 1) month.value = [month.value[0], Math.min(month.value[0] + 1, 11)];\n }\n } else {\n activeIndex.value = 0;\n isHoverCell.value = false;\n isFirstValueSelected.value = false;\n inputValue.value = formatDate(value.value, {\n format: formatRef.value.format,\n });\n }\n });\n\n // 日期 hover\n function onCellMouseEnter(date: Date) {\n isHoverCell.value = true;\n const nextValue = [...(inputValue.value as string[])];\n nextValue[activeIndex.value] = formatDate(date, {\n format: formatRef.value.format,\n }) as string;\n inputValue.value = nextValue;\n }\n\n // 日期 leave\n function onCellMouseLeave() {\n isHoverCell.value = false;\n inputValue.value = cacheValue.value;\n }\n\n // 日期点击\n function onCellClick(date: Date, { e, partial }: { e: MouseEvent; partial: DateRangePickerPartial }) {\n props.onPick?.(date, { e, partial: activeIndex.value ? 'end' : 'start' });\n\n isHoverCell.value = false;\n isSelected.value = true;\n\n const nextValue = [...(inputValue.value as string[])];\n nextValue[activeIndex.value] = formatDate(date, {\n format: formatRef.value.format,\n }) as string;\n cacheValue.value = nextValue;\n inputValue.value = nextValue;\n\n // date 模式自动切换年月\n if (props.mode === 'date') {\n // 选择了不属于面板中展示月份的日期\n const partialIndex = partial === 'start' ? 0 : 1;\n const isAdditional = dayjs(date).month() !== month.value[partialIndex];\n if (isAdditional) {\n // 保证左侧时间小于右侧\n if (activeIndex.value === 0) month.value = [dayjs(date).month(), Math.min(dayjs(date).month() + 1, 11)];\n if (activeIndex.value === 1) month.value = [Math.max(dayjs(date).month() - 1, 0), dayjs(date).month()];\n }\n }\n\n // 有时间选择器走 confirm 逻辑\n if (props.enableTimePicker) return;\n\n // 确保两端都是有效值\n const notValidIndex = nextValue.findIndex((v) => !v || !isValidDate(v, formatRef.value.format));\n\n // 当两端都有有效值时更改 value\n if (notValidIndex === -1 && nextValue.length === 2) {\n // 二次修改时当其中一侧不符合上次区间规范时,清空另一侧数据\n if (\n !isFirstValueSelected.value &&\n parseToDayjs(nextValue[0], formatRef.value.format).isAfter(parseToDayjs(nextValue[1], formatRef.value.format))\n ) {\n nextValue[activeIndex.value ? 0 : 1] = '';\n cacheValue.value = nextValue;\n inputValue.value = nextValue;\n } else {\n onChange?.(\n formatDate(nextValue, {\n format: formatRef.value.format,\n targetFormat: formatRef.value.valueType,\n autoSwap: true,\n }) as DateValue[],\n {\n dayjsValue: nextValue.map((v) => parseToDayjs(v, formatRef.value.format)),\n trigger: 'pick',\n },\n );\n }\n }\n\n // 首次点击不关闭、确保两端都有有效值并且无时间选择器时点击后自动关闭\n if (!isFirstValueSelected.value) {\n let nextIndex = notValidIndex;\n if (nextIndex === -1) nextIndex = activeIndex.value ? 0 : 1;\n activeIndex.value = nextIndex;\n isFirstValueSelected.value = true;\n } else {\n popupVisible.value = false;\n }\n }\n\n // 头部快速切换\n function onJumperClick({ trigger, partial }: { trigger: string; partial: DateRangePickerPartial }) {\n const partialIndex = partial === 'start' ? 0 : 1;\n\n const monthCountMap = { date: 1, week: 1, month: 12, quarter: 12, year: 120 };\n const monthCount = monthCountMap[props.mode] || 0;\n const current = new Date(year.value[partialIndex], month.value[partialIndex]);\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 = [...year.value];\n nextYear[partialIndex] = next.getFullYear();\n const nextMonth = [...month.value];\n nextMonth[partialIndex] = next.getMonth();\n\n // 保证左侧时间不大于右侧\n if (partialIndex === 0) {\n nextYear[1] = Math.max(nextYear[0], nextYear[1]);\n\n if (nextYear[0] === nextYear[1]) {\n nextMonth[1] = Math.max(nextMonth[0], nextMonth[1]);\n }\n }\n\n // 保证左侧时间不大于右侧\n if (partialIndex === 1) {\n nextYear[0] = Math.min(nextYear[0], nextYear[1]);\n\n if (nextYear[0] === nextYear[1]) {\n nextMonth[0] = Math.min(nextMonth[0], nextMonth[1]);\n }\n }\n\n year.value = nextYear;\n month.value = nextMonth;\n }\n\n // time-picker 点击\n function onTimePickerChange(val: string) {\n const { hours, minutes, seconds, milliseconds, meridiem } = extractTimeObj(val);\n\n const nextInputValue = [...(inputValue.value as DateValue[])];\n const changedInputValue = inputValue.value[activeIndex.value];\n const currentDate = !dayjs(changedInputValue, formatRef.value.format).isValid()\n ? dayjs().year(year.value[activeIndex.value]).month(month.value[activeIndex.value])\n : dayjs(changedInputValue, formatRef.value.format);\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\n const nextDate = currentDate.hour(nextHours).minute(minutes).second(seconds).millisecond(milliseconds).toDate();\n nextInputValue[activeIndex.value] = nextDate;\n\n const nextTime = [...time.value];\n nextTime[activeIndex.value] = val;\n time.value = nextTime;\n\n isSelected.value = true;\n inputValue.value = formatDate(nextInputValue, {\n format: formatRef.value.format,\n });\n cacheValue.value = formatDate(nextInputValue, {\n format: formatRef.value.format,\n });\n }\n\n // 确定\n function onConfirmClick({ e }: { e: MouseEvent }) {\n const nextValue = [...(inputValue.value as string[])];\n\n const notValidIndex = nextValue.findIndex((v) => !v || !isValidDate(v, formatRef.value.format));\n\n // 当两端都有有效值时更改 value\n if (notValidIndex === -1 && nextValue.length === 2) {\n // 二次修改时当其中一侧不符合上次区间规范时,清空另一侧数据\n if (\n !isFirstValueSelected.value &&\n parseToDayjs(nextValue[0], formatRef.value.format).isAfter(parseToDayjs(nextValue[1], formatRef.value.format))\n ) {\n nextValue[activeIndex.value ? 0 : 1] = '';\n cacheValue.value = nextValue;\n inputValue.value = nextValue;\n } else {\n props?.onConfirm?.({\n date: nextValue.map((v) => dayjs(v).toDate()),\n e,\n partial: activeIndex.value ? 'end' : 'start',\n });\n onChange?.(\n formatDate(nextValue, {\n format: formatRef.value.format,\n targetFormat: formatRef.value.valueType,\n autoSwap: true,\n }) as DateValue[],\n {\n dayjsValue: nextValue.map((v) => parseToDayjs(v, formatRef.value.format)),\n trigger: 'confirm',\n },\n );\n }\n }\n\n // 首次点击不关闭、确保两端都有有效值并且无时间选择器时点击后自动关闭\n if (!isFirstValueSelected.value || nextValue.length === 1) {\n let nextIndex = notValidIndex;\n if (nextIndex === -1) nextIndex = activeIndex.value ? 0 : 1;\n activeIndex.value = nextIndex;\n isFirstValueSelected.value = true;\n } else if (nextValue.length === 2) {\n popupVisible.value = false;\n }\n }\n\n // 预设\n function onPresetClick(preset: any, context: any) {\n let presetValue = preset;\n if (isFunction(preset)) {\n presetValue = preset();\n }\n if (!isArray(presetValue)) {\n console.error(`preset: ${preset} 预设值必须是数组!`);\n } else {\n onChange?.(\n formatDate(presetValue, {\n format: formatRef.value.format,\n targetFormat: formatRef.value.valueType,\n autoSwap: true,\n }) as DateValue[],\n {\n dayjsValue: presetValue.map((p) => parseToDayjs(p, formatRef.value.format)),\n trigger: 'preset',\n },\n );\n popupVisible.value = false;\n props.onPresetClick?.(context);\n }\n }\n\n function onYearChange(nextVal: number, { partial }: { partial: DateRangePickerPartial }) {\n let partialIndex = partial === 'start' ? 0 : 1;\n if (props.enableTimePicker) partialIndex = activeIndex.value;\n\n const nextYear = [...year.value];\n nextYear[partialIndex] = nextVal;\n // 保证左侧时间不大于右侧\n if (partialIndex === 0) nextYear[1] = Math.max(nextYear[0], nextYear[1]);\n if (partialIndex === 1) nextYear[0] = Math.min(nextYear[0], nextYear[1]);\n\n year.value = nextYear;\n }\n\n function onMonthChange(nextVal: number, { partial }: { partial: DateRangePickerPartial }) {\n let partialIndex = partial === 'start' ? 0 : 1;\n if (props.enableTimePicker) partialIndex = activeIndex.value;\n\n const nextMonth = [...month.value];\n nextMonth[partialIndex] = nextVal;\n // 保证左侧时间不大于右侧\n if (year.value[0] === year.value[1]) {\n if (partialIndex === 0) nextMonth[1] = Math.max(nextMonth[0], nextMonth[1]);\n if (partialIndex === 1) nextMonth[0] = Math.min(nextMonth[0], nextMonth[1]);\n }\n\n month.value = nextMonth;\n }\n\n const panelProps = computed(() => ({\n hoverValue: (isHoverCell.value ? inputValue.value : []) as string[],\n value: (isSelected.value ? cacheValue.value : value.value) as string[],\n isFirstValueSelected: isFirstValueSelected.value,\n activeIndex: activeIndex.value,\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,\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 panelPreselection: props.panelPreselection,\n onCellClick,\n onCellMouseEnter,\n onCellMouseLeave,\n onJumperClick,\n onConfirmClick,\n onPresetClick,\n onYearChange,\n onMonthChange,\n onTimePickerChange,\n }));\n\n return () => (\n <div class={COMPONENT_NAME.value}>\n <TRangeInputPopup\n disabled={disabled.value}\n status={props.status}\n tips={props.tips || slots.tips}\n inputValue={inputValue.value as string[]}\n popupProps={popupProps.value}\n rangeInputProps={rangeInputProps.value}\n popupVisible={popupVisible.value}\n panel={() => <TRangePanel {...panelProps.value} />}\n />\n </div>\n );\n },\n});\n"],"names":["name","props","setup","watch","format","nextMonth","year","inputValue","e","partial","targetFormat","autoSwap","dayjsValue","trigger","date","week","month","quarter","next","nextYear","nextInputValue","nextTime","cacheValue","isFunction","isArray","console","onCellClick","onCellMouseEnter","onCellMouseLeave","onJumperClick","onConfirmClick","onPresetClick","onYearChange","onMonthChange","onTimePickerChange","_createVNode"],"mappings":"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"}