UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 12.1 kB
{"version":3,"file":"Header.mjs","sources":["../../../src/date-picker/base/Header.tsx"],"sourcesContent":["import { defineComponent, PropType, ref, computed } from 'vue';\nimport { PaginationMini, JumperTrigger } from '../../pagination';\nimport TSelect from '../../select';\nimport { useConfig, usePrefixClass } from '../../hooks/useConfig';\nimport type { TdDatePickerProps } from '../type';\n\nexport default defineComponent({\n name: 'XDatePickerHeader',\n props: {\n mode: {\n type: String as PropType<TdDatePickerProps['mode']>,\n default: 'date',\n },\n year: Number,\n month: Number,\n onMonthChange: Function,\n onYearChange: Function,\n onJumperClick: Function as PropType<(context: { e: MouseEvent; trigger: JumperTrigger }) => {}>,\n },\n setup(props) {\n const { classPrefix } = useConfig('classPrefix');\n const COMPONENT_NAME = usePrefixClass('date-picker__header');\n const { globalConfig } = useConfig('datePicker');\n\n const yearOptions = ref(initOptions(props.year));\n const showMonthPicker = props.mode === 'date' || props.mode === 'week';\n\n // 年份选择展示区间\n const nearestYear = computed(\n () =>\n yearOptions.value.find((option) => option.value - props.year <= 9 && option.value - props.year >= 0)?.value ||\n props.year,\n );\n\n const monthOptions = computed(() =>\n globalConfig.value.months.map((item: string, index: number) => ({ label: item, value: index })),\n );\n\n function initOptions(year: number) {\n const options = [];\n if (props.mode === 'year') {\n const extraYear = year % 10;\n const minYear = year - extraYear - 100;\n const maxYear = year - extraYear + 100;\n\n for (let i = minYear; i <= maxYear; i += 10) {\n options.push({ label: `${i} - ${i + 9}`, value: i + 9 });\n }\n } else {\n options.push({ label: `${year}`, value: year });\n\n for (let i = 1; i <= 10; i++) {\n options.push({ label: `${year + i}`, value: year + i });\n options.unshift({ label: `${year - i}`, value: year - i });\n }\n }\n\n return options;\n }\n\n function loadMoreYear(year: number, type?: 'add' | 'reduce') {\n const options = [];\n if (props.mode === 'year') {\n const extraYear = year % 10;\n if (type === 'add') {\n for (let i = year - extraYear + 10; i <= year - extraYear + 50; i += 10) {\n options.push({ label: `${i} - ${i + 9}`, value: i });\n }\n } else {\n for (let i = year - extraYear - 1; i > year - extraYear - 50; i -= 10) {\n options.unshift({ label: `${i - 9} - ${i}`, value: i });\n }\n }\n } else if (type === 'add') {\n for (let i = year + 1; i <= year + 10; i++) {\n options.push({ label: `${i}`, value: i });\n }\n } else {\n for (let i = year - 1; i > year - 10; i--) {\n options.unshift({ label: `${i}`, value: i });\n }\n }\n\n return options;\n }\n\n // hover title\n const labelMap = {\n year: {\n prev: globalConfig.value.preDecade,\n current: globalConfig.value.now,\n next: globalConfig.value.nextDecade,\n },\n month: {\n prev: globalConfig.value.preYear,\n current: globalConfig.value.now,\n next: globalConfig.value.nextYear,\n },\n date: {\n prev: globalConfig.value.preMonth,\n current: globalConfig.value.now,\n next: globalConfig.value.nextMonth,\n },\n };\n\n // 滚动顶部底部自动加载\n function handleScroll({ e }: any) {\n if (e.target.scrollTop === 0) {\n handlePanelTopClick(e);\n } else if (e.target.scrollTop === e.target.scrollHeight - e.target.clientHeight) {\n handlePanelBottomClick(e);\n }\n }\n\n function handlePanelTopClick(e: MouseEvent) {\n e?.stopPropagation?.();\n\n const firstYear = yearOptions.value[0].value;\n const options = loadMoreYear(firstYear, 'reduce');\n yearOptions.value = [...options, ...yearOptions.value];\n }\n\n function handlePanelBottomClick(e: MouseEvent) {\n e?.stopPropagation?.();\n\n const lastYear = yearOptions.value.slice(-1)[0].value;\n const options = loadMoreYear(lastYear, 'add');\n yearOptions.value = [...yearOptions.value, ...options];\n }\n\n return () => (\n <div class={COMPONENT_NAME.value}>\n <div class={`${COMPONENT_NAME.value}-controller`}>\n {showMonthPicker && (\n <TSelect\n class={`${COMPONENT_NAME.value}-controller-month`}\n value={props.month}\n options={monthOptions.value}\n onChange={(val: number) => props.onMonthChange?.(val)}\n popupProps={{\n attach: (triggerElement: HTMLElement) => triggerElement.parentNode,\n overlayClassName: `${COMPONENT_NAME.value}-controller-month-popup`,\n }}\n />\n )}\n <TSelect\n class={`${COMPONENT_NAME.value}-controller-year`}\n value={props.mode === 'year' ? nearestYear.value : props.year}\n options={yearOptions.value}\n onChange={(val: number) => props.onYearChange?.(val)}\n popupProps={{\n onScroll: handleScroll,\n attach: (triggerElement: HTMLElement) => triggerElement.parentNode,\n overlayClassName: `${COMPONENT_NAME.value}-controller-year-popup`,\n }}\n panelTopContent={() => (\n <div class={`${classPrefix.value}-select-option`} onClick={handlePanelTopClick}>\n ...\n </div>\n )}\n panelBottomContent={() => (\n <div class={`${classPrefix.value}-select-option`} onClick={handlePanelBottomClick}>\n ...\n </div>\n )}\n />\n </div>\n\n <PaginationMini tips={labelMap[props.mode]} size=\"small\" onChange={props.onJumperClick} />\n </div>\n );\n },\n});\n"],"names":["name","props","mode","type","year","month","onMonthChange","onYearChange","onJumperClick","label","value","prev","current","next","date","e","yearOptions","_createVNode","TSelect","overlayClassName","onScroll","_createTextVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,kBAAA,eAAA,CAAA;AACEA,EAAAA,IAAAA,EAAAA,mBAAAA;AACAC,EAAAA,KAAAA,EAAAA;AACEC,IAAAA,IAAAA,EAAAA;AACEC,MAAAA,IAAAA,EAAAA,MAAAA;;;AAGFC,IAAAA,IAAAA,EAAAA,MAAAA;AACAC,IAAAA,KAAAA,EAAAA,MAAAA;AACAC,IAAAA,aAAAA,EAAAA,QAAAA;AACAC,IAAAA,YAAAA,EAAAA,QAAAA;AACAC,IAAAA,aAAAA,EAAAA,QAAAA;;;AAGA,IAAA,IAAA,UAAA,GAAA,SAAA,CAAA,aAAA,CAAA;;AACM,IAAA,IAAA,cAAA,GAAA,cAAA,CAAA,qBAAA,CAAA,CAAA;AACN,IAAA,IAAA,WAAA,GAAA,SAAA,CAAA,YAAA,CAAA;;;AAGA,IAAA,IAAA,eAAA,GAAA,KAAA,CAAA,IAAA,KAAA,MAAA,IAAA,KAAA,CAAA,IAAA,KAAA,MAAA,CAAA;;AAIE,MAAA,IAAA,qBAAA,CAAA;;AAC0B,QAAA,OAAA,MAAA,CAAA,KAAA,GAAA,KAAA,CAAA,IAAA,IAAA,CAAA,IAAA,MAAA,CAAA,KAAA,GAAA,KAAA,CAAA,IAAA,IAAA,CAAA,CAAA;;AAClB,KAAA,CAAA,CAAA;;;;AAI0DC,UAAAA,KAAAA,EAAAA,IAAAA;AAAaC,UAAAA,KAAAA,EAAAA,KAAAA;;AAAe,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;;;AAK1F,MAAA,IAAA,KAAA,CAAA,IAAA,KAAA,MAAA,EAAA;AACF,QAAA,IAAA,SAAA,GAAA,IAAA,GAAA,EAAA,CAAA;AACM,QAAA,IAAA,OAAA,GAAA,IAAA,GAAA,SAAA,GAAA,GAAA,CAAA;AACA,QAAA,IAAA,OAAA,GAAA,IAAA,GAAA,SAAA,GAAA,GAAA,CAAA;AAEN,QAAA,KAAA,IAAA,CAAA,GAAA,OAAA,EAAA,CAAA,IAAA,OAAA,EAAA,CAAA,IAAA,EAAA,EAAA;;;;AACwD,WAAA,CAAA,CAAA;AACxD,SAAA;AACF,OAAA,MAAA;;AACiBD,UAAAA,KAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,IAAAA,CAAAA;AAAkBC,UAAAA,KAAAA,EAAAA,IAAAA;AAAY,SAAA,CAAA,CAAA;;;AAG5BD,YAAAA,KAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,IAAAA,GAAAA,EAAAA,CAAAA;;AAAsC,WAAA,CAAA,CAAA;;AACnCA,YAAAA,KAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,IAAAA,GAAAA,EAAAA,CAAAA;;AAAsC,WAAA,CAAA,CAAA;AAC1D,SAAA;AACF,OAAA;AAEO,MAAA,OAAA,OAAA,CAAA;AACT,KAAA;AAES,IAAA,SAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA;;AAEH,MAAA,IAAA,KAAA,CAAA,IAAA,KAAA,MAAA,EAAA;AACF,QAAA,IAAA,SAAA,GAAA,IAAA,GAAA,EAAA,CAAA;;;;;AAG6CC,cAAAA,KAAAA,EAAAA,CAAAA;AAAS,aAAA,CAAA,CAAA;AACpD,WAAA;AACF,SAAA,MAAA;;;;AAEgDA,cAAAA,KAAAA,EAAAA,GAAAA;AAAS,aAAA,CAAA,CAAA;AACvD,WAAA;AACF,SAAA;AACF,OAAA,MAAA,IAAA,IAAA,KAAA,KAAA,EAAA;AACE,QAAA,KAAA,IAAA,GAAA,GAAA,IAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,GAAA,EAAA,EAAA,GAAA,EAAA,EAAA;;AACiBD,YAAAA,KAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,GAAAA,CAAAA;AAAeC,YAAAA,KAAAA,EAAAA,GAAAA;AAAS,WAAA,CAAA,CAAA;AACzC,SAAA;AACF,OAAA,MAAA;AACE,QAAA,KAAA,IAAA,GAAA,GAAA,IAAA,GAAA,CAAA,EAAA,GAAA,GAAA,IAAA,GAAA,EAAA,EAAA,GAAA,EAAA,EAAA;;AACoBD,YAAAA,KAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,GAAAA,CAAAA;AAAeC,YAAAA,KAAAA,EAAAA,GAAAA;AAAS,WAAA,CAAA,CAAA;AAC5C,SAAA;AACF,OAAA;AAEO,MAAA,OAAA,OAAA,CAAA;AACT,KAAA;AAGA,IAAA,IAAA,QAAA,GAAA;AACEN,MAAAA,IAAAA,EAAAA;AACEO,QAAAA,IAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,SAAAA;AACAC,QAAAA,OAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,GAAAA;AACAC,QAAAA,IAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,UAAAA;;AAEFR,MAAAA,KAAAA,EAAAA;AACEM,QAAAA,IAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,OAAAA;AACAC,QAAAA,OAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,GAAAA;AACAC,QAAAA,IAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,QAAAA;;AAEFC,MAAAA,IAAAA,EAAAA;AACEH,QAAAA,IAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,QAAAA;AACAC,QAAAA,OAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,GAAAA;AACAC,QAAAA,IAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,SAAAA;AACF,OAAA;;;AAIgC,MAAA,IAAA,CAAA,GAAA,IAAA,CAAA,CAAA,CAAA;AAC5B,MAAA,IAAA,CAAA,CAAA,MAAA,CAAA,SAAA,KAAA,CAAA,EAAA;;AAEJ,OAAA,MAAA,IAAA,CAAA,CAAA,MAAA,CAAA,SAAA,KAAA,CAAA,CAAA,MAAA,CAAA,YAAA,GAAA,CAAA,CAAA,MAAA,CAAA,YAAA,EAAA;;AAEA,OAAA;AACF,KAAA;;AAE4C,MAAA,IAAA,kBAAA,CAAA;AAC1CE,MAAAA,CAAAA,KAAAA,IAAAA,IAAAA,CAAAA,KAAAA,KAAAA,CAAAA,IAAAA,CAAAA,kBAAAA,GAAAA,CAAAA,CAAAA,eAAAA,MAAAA,IAAAA,IAAAA,kBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAAA,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA;;AAGM,MAAA,IAAA,OAAA,GAAA,YAAA,CAAA,SAAA,EAAA,QAAA,CAAA,CAAA;AACNC,MAAAA,WAAAA,CAAAA,KAAAA,GAAAA,EAAAA,CAAAA,MAAAA,CAAAA,kBAAAA,CAAAA,OAAAA,CAAAA,EAAAA,kBAAAA,CAAAA,WAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA;AACF,KAAA;;AAE+C,MAAA,IAAA,mBAAA,CAAA;AAC7CD,MAAAA,CAAAA,KAAAA,IAAAA,IAAAA,CAAAA,KAAAA,KAAAA,CAAAA,IAAAA,CAAAA,mBAAAA,GAAAA,CAAAA,CAAAA,eAAAA,MAAAA,IAAAA,IAAAA,mBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,mBAAAA,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAEA,MAAA,IAAA,QAAA,GAAA,WAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA;AACM,MAAA,IAAA,OAAA,GAAA,YAAA,CAAA,QAAA,EAAA,KAAA,CAAA,CAAA;AACNC,MAAAA,WAAAA,CAAAA,KAAAA,GAAAA,EAAAA,CAAAA,MAAAA,CAAAA,kBAAAA,CAAAA,WAAAA,CAAAA,KAAAA,CAAAA,EAAAA,kBAAAA,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA;AACF,KAAA;;AAEO,MAAA,OAAAC,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,cAAA,CAAA,KAAA;AACsB,OAAA,EAAA,CAAAA,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,aAAA,CAAA;AACK,OAAA,EAAA,CAAA,eAAA,IAAAA,WAAA,CAAAC,MAAA,EAAA;AAC3B,QAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,mBAAA,CAAA;;;;AAKc,UAAA,IAAA,oBAAA,CAAA;AAAA,UAAA,OAAA,CAAA,oBAAA,GAAA,KAAA,CAAA,aAAA,MAAA,IAAA,IAAA,oBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,oBAAA,CAAA,IAAA,CAAA,KAAA,EAAA,GAAA,CAAA,CAAA;;;;;AAE+C,WAAA;AACxDC,UAAAA,gBAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,cAAAA,CAAAA,KAAAA,EAAAA,yBAAAA,CAAAA;AACF,SAAA;;AACF,QAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,kBAAA,CAAA;;;;;;AAMmD,SAAA;;AAEjDC,UAAAA,QAAAA,EAAAA,YAAAA;;;AACwD,WAAA;AACxDD,UAAAA,gBAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,cAAAA,CAAAA,KAAAA,EAAAA,wBAAAA,CAAAA;;AACF,QAAA,iBAAA,EAAA,SAAA,eAAA,GAAA;AACiB,UAAA,OAAAF,WAAA,CAAA,KAAA,EAAA;AAAA,YAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,gBAAA,CAAA;;AAC4C,WAAA,EAAA,CAAAI,eAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA;;;AAIzC,UAAA,OAAAJ,WAAA,CAAA,KAAA,EAAA;AAAA,YAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,gBAAA,CAAA;;AACyC,WAAA,EAAA,CAAAI,eAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAAA,SAAA;;AAI/D,QAAA,MAAA,EAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA;;AAG+C,QAAA,UAAA,EAAA,KAAA,CAAA,aAAA;AAAuC,OAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;;AAG9F,GAAA;AACF,CAAA,CAAA;;;;"}