{"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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"}