hongluan-ui
Version:
Hongluan Component Library for Vue 3
1 lines • 10.1 kB
Source Map (JSON)
{"version":3,"file":"panel-month-range.mjs","sources":["../../../../../../../packages/components/date-picker/src/date-picker-com/panel-month-range.vue"],"sourcesContent":["<template>\n <div\n class=\"range-picker\"\n :class=\"[{\n 'month-range': true,\n 'has-sidebar': Boolean($slots.sidebar) || hasShortcuts\n }, namespace + '-date-picker']\"\n >\n <div class=\"picker-wrapper\">\n <slot name=\"sidebar\" :class=\"['picker-sidebar', namespace + '-group', 'vertical']\"></slot>\n <hl-group v-if=\"hasShortcuts\" :class=\"['picker-sidebar']\" dir=\"vertical\">\n <hl-group v-for=\"(shortcut, key) in shortcuts\" :key=\"key\" class=\"p-x-sm p-y-xxs hover:text-hover cursor-pointer\" @click=\"handleShortcutClick(shortcut)\">\n {{ shortcut.text }}\n </hl-group>\n </hl-group>\n <div class=\"picker-body\">\n <div class=\"picker-body-content is-left\">\n <div :class=\"['picker-body-header', namespace + '-group', 'full']\">\n <hl-button\n size=\"sm\"\n class=\"group-item prev-year\"\n equal\n @click=\"leftPrevYear\"\n >\n <slot name=\"prev-year\">\n <hl-icon>\n <system-arrow-left />\n </hl-icon>\n </slot>\n </hl-button>\n <div class=\"header-label group-item\">\n <hl-button>\n {{ leftLabel }}\n </hl-button>\n </div>\n <hl-button\n v-if=\"unlinkPanels\"\n size=\"sm\"\n class=\"group-item next-year\"\n equal\n :disabled=\"!enableYearArrow\"\n @click=\"leftNextYear\"\n >\n <slot name=\"next-year\">\n <hl-icon>\n <system-arrow-right />\n </hl-icon>\n </slot>\n </hl-button>\n </div>\n <month-table\n selection-mode=\"range\"\n :date=\"leftDate\"\n :min-date=\"minDate\"\n :max-date=\"maxDate\"\n :range-state=\"rangeState\"\n :disabled-date=\"disabledDate\"\n @changerange=\"handleChangeRange\"\n @pick=\"handleRangePick\"\n @select=\"onSelect\"\n />\n </div>\n <div class=\"picker-body-content is-right\">\n <div :class=\"['picker-body-header', namespace + '-group', 'full']\">\n <hl-button\n v-if=\"unlinkPanels\"\n size=\"sm\"\n class=\"group-item prev-year\"\n equal\n :disabled=\"!enableYearArrow\"\n @click=\"rightPrevYear\"\n >\n <slot name=\"prev-year\">\n <hl-icon>\n <system-arrow-left />\n </hl-icon>\n </slot>\n </hl-button>\n <div class=\"header-label group-item\">\n <hl-button>\n {{ rightLabel }}\n </hl-button>\n </div>\n <hl-button\n size=\"sm\"\n class=\"group-item next-year\"\n equal\n @click=\"rightNextYear\"\n >\n <slot name=\"next-year\">\n <hl-icon>\n <system-arrow-right />\n </hl-icon>\n </slot>\n </hl-button>\n </div>\n <month-table\n selection-mode=\"range\"\n :date=\"rightDate\"\n :min-date=\"minDate\"\n :max-date=\"maxDate\"\n :range-state=\"rangeState\"\n :disabled-date=\"disabledDate\"\n @changerange=\"handleChangeRange\"\n @pick=\"handleRangePick\"\n @select=\"onSelect\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref, toRef, unref } from 'vue'\nimport dayjs from 'dayjs'\nimport { useLocale, useNamespace } from '@hongluan-ui/hooks'\nimport HlButton from '@hongluan-ui/components/button'\nimport HlGroup from '@hongluan-ui/components/group'\nimport HlIcon from '@hongluan-ui/components/icon'\nimport { isArray } from '@hongluan-ui/utils'\nimport { SystemArrowLeft, SystemArrowRight } from '@hongluan-ui/components/system-icon'\nimport { getDefaultValue, isValidRange } from '../utils'\nimport {\n panelMonthRangeEmits,\n panelMonthRangeProps,\n} from '../props/panel-month-range'\nimport { useMonthRangeHeader } from '../composables/use-month-range-header'\nimport { useRangePicker } from '../composables/use-range-picker'\nimport MonthTable from './basic-month-table.vue'\n\nimport type { Dayjs } from 'dayjs'\n\ndefineOptions({\n name: 'DatePickerMonthRange',\n})\n\nconst props = defineProps(panelMonthRangeProps)\nconst emit = defineEmits(panelMonthRangeEmits)\nconst unit = 'year'\n\nconst { lang } = useLocale()\nconst { namespace } = useNamespace()\nconst pickerBase = inject('EP_PICKER_BASE') as any\nconst { shortcuts, disabledDate } = pickerBase.props\nconst format = toRef(pickerBase.props, 'format')\nconst defaultValue = toRef(pickerBase.props, 'defaultValue')\nconst leftDate = ref(dayjs().locale(lang.value))\nconst rightDate = ref(dayjs().locale(lang.value).add(1, unit))\n\nconst {\n minDate,\n maxDate,\n rangeState,\n\n handleChangeRange,\n handleRangeConfirm,\n handleShortcutClick,\n onSelect,\n} = useRangePicker(props, {\n defaultValue,\n leftDate,\n rightDate,\n unit,\n onParsedValueChanged,\n})\n\nconst hasShortcuts = computed(() => !!shortcuts.length)\n\nconst {\n leftPrevYear,\n rightNextYear,\n leftNextYear,\n rightPrevYear,\n leftLabel,\n rightLabel,\n leftYear,\n rightYear,\n} = useMonthRangeHeader({\n unlinkPanels: toRef(props, 'unlinkPanels'),\n leftDate,\n rightDate,\n})\n\nconst enableYearArrow = computed(() => {\n return props.unlinkPanels && rightYear.value > leftYear.value + 1\n})\n\ntype RangePickValue = {\n minDate: Dayjs\n maxDate: Dayjs\n}\n\nconst handleRangePick = (val: RangePickValue, close = true) => {\n // const defaultTime = props.defaultTime || []\n // const minDate_ = modifyWithTimeString(val.minDate, defaultTime[0])\n // const maxDate_ = modifyWithTimeString(val.maxDate, defaultTime[1])\n // todo\n const minDate_ = val.minDate\n const maxDate_ = val.maxDate\n if (maxDate.value === maxDate_ && minDate.value === minDate_) {\n return\n }\n emit('calendar-change', [minDate_.toDate(), maxDate_ && maxDate_.toDate()])\n maxDate.value = maxDate_\n minDate.value = minDate_\n\n if (!close) return\n handleRangeConfirm()\n}\n\nconst handleClear = () => {\n leftDate.value = getDefaultValue(unref(defaultValue), {\n lang: unref(lang),\n unit: 'year',\n unlinkPanels: props.unlinkPanels,\n })[0]\n rightDate.value = leftDate.value.add(1, 'year')\n emit('pick', null)\n}\n\nconst formatToString = (value: Dayjs | Dayjs[]) => {\n return isArray(value)\n ? value.map(_ => _.format(format.value))\n : value.format(format.value)\n}\n\nconst parseUserInput = (value: Dayjs | Dayjs[]) => {\n return isArray(value)\n ? value.map(_ => dayjs(_, format.value).locale(lang.value))\n : dayjs(value, format.value).locale(lang.value)\n}\n\nfunction onParsedValueChanged(\n minDate: Dayjs | undefined,\n maxDate: Dayjs | undefined,\n) {\n if (props.unlinkPanels && maxDate) {\n const minDateYear = minDate?.year() || 0\n const maxDateYear = maxDate.year()\n rightDate.value =\n minDateYear === maxDateYear ? maxDate.add(1, unit) : maxDate\n } else {\n rightDate.value = leftDate.value.add(1, unit)\n }\n}\n\nemit('set-picker-option', ['isValidValue', isValidRange])\nemit('set-picker-option', ['formatToString', formatToString])\nemit('set-picker-option', ['parseUserInput', parseUserInput])\nemit('set-picker-option', ['handleClear', handleClear])\n</script>\n"],"names":[],"mappings":"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"}