UNPKG

@arco-design/web-vue

Version:

Arco Design Vue 2.0: A Vue.js 3 UI Library

111 lines (110 loc) 3.25 kB
import { defineComponent, computed, createVNode, mergeProps } from "vue"; import { padStart } from "../_utils/pad.js"; import { dayjs } from "../_utils/date.js"; import Month from "./month.js"; import useClassName from "./hooks/useCellClassName.js"; import { getPrefixCls } from "../_utils/global-config.js"; import { useI18n } from "../locale/index.js"; const MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"].map((month, index) => { return { name: month, value: index }; }); const monthGroup = Array(3); for (let i = 0; i < 3; i++) { monthGroup[i] = MONTHS.slice(i * 4, 4 * (i + 1)); } const monthGroupPanel = Array(4); for (let i = 0; i < 4; i++) { monthGroupPanel[i] = MONTHS.slice(i * 3, 3 * (i + 1)); } var Year = defineComponent({ name: "Year", props: { mode: { type: String, required: true }, dayStartOfWeek: { type: Number, required: true }, value: { type: Object, required: true }, isWeek: { type: Boolean }, panel: { type: Boolean, default: false }, pageShowData: { type: Object, required: true }, pageData: { type: Array }, selectHandler: { type: Function, required: true } }, setup(props) { const prefixCls = getPrefixCls("calendar"); const getCellClassName = computed(() => useClassName({ prefixCls, mergedValue: props.value, panel: false, innerMode: props.mode, rangeValues: [], hoverRangeValues: [], isSameTime: (current, target) => current.isSame(target, "month") })); const { t } = useI18n(); const showYear = computed(() => props.pageShowData.year()); const mg = props.panel ? monthGroupPanel : monthGroup; return () => createVNode("div", { "class": `${prefixCls}-year` }, [mg.map((row, rowIndex) => createVNode("div", { "class": `${prefixCls}-year-row`, "key": rowIndex }, [row.map((col) => { const time = dayjs(`${showYear.value}-${padStart(col.value + 1, 2, "0")}-01`); const divProps = props.panel ? { onClick: () => props.selectHandler(time, false) } : {}; return createVNode("div", { "key": col.value, "class": getCellClassName.value({ ...col, time }, false) }, [props.panel ? createVNode("div", mergeProps({ "class": `${prefixCls}-date` }, divProps), [createVNode("div", { "class": `${prefixCls}-date-value` }, [t(`calendar.month.short.${col.name}`)])]) : createVNode("div", { "class": `${prefixCls}-month-with-days` }, [createVNode("div", { "class": `${prefixCls}-month-title` }, [t(`calendar.month.long.${col.name}`)]), createVNode(Month, { "pageShowDate": props.pageShowData, "pageData": props.pageData, "dayStartOfWeek": props.dayStartOfWeek, "selectHandler": props.selectHandler, "isWeek": props.isWeek, "cell": true, "current": col.value, "value": props.value, "mode": props.mode }, null)])]); })]))]); } }); export { Year as default };