xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 8.07 kB
Source Map (JSON)
{"version":3,"file":"utils.mjs","sources":["../../src/calendar/utils.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nimport { TdCalendarProps, CalendarCell } from './type';\nimport { CalendarState } from './interface';\n\n// 组件的一些常量\nimport { FIRST_MONTH_OF_YEAR, LAST_MONTH_OF_YEAR, DAY_CN_MAP } from './const';\n\n/**\n * 获取一个日期是周几(1~7)\n */\nexport const getDay = (dt: Date): number => {\n let day = dayjs(dt).day();\n if (day === 0) {\n day = 7;\n }\n return day;\n};\n\n/**\n * 获取星期的中文\n * @param num 星期(1~7)\n */\nexport const getDayCn = (num: number): string => {\n let re = '';\n const numStr = num.toString();\n if (numStr in DAY_CN_MAP) {\n re = DAY_CN_MAP[numStr];\n }\n return re;\n};\n\n/**\n * 获取一个日期在日历上的列下标\n * @param firstDayOfWeek 周起始日(1~7)\n * @param dt\n */\nexport const getCellColIndex = (firstDayOfWeek: number, dt: Date): number => {\n let re = 0;\n const day = getDay(dt);\n if (day >= firstDayOfWeek) {\n re = day - firstDayOfWeek;\n } else {\n re = 7 - firstDayOfWeek + day;\n }\n return re;\n};\n/**\n * 返回日期+天数(天数可以负数)\n */\nexport const addDate = (dt: Date, days: number) => {\n const d = new Date(dt);\n d.setDate(d.getDate() + days);\n return d;\n};\n\n/**\n * 创建月历单元格数据\n */\nexport const createYearCellsData = (props: TdCalendarProps, state: CalendarState): CalendarCell[] => {\n const { curSelectedYear: year, curDate, curDateList } = state;\n const { format, multiple } = props;\n\n const monthsArr: CalendarCell[] = [];\n for (let num = FIRST_MONTH_OF_YEAR; num <= LAST_MONTH_OF_YEAR; num++) {\n const date = new Date(year, num - 1);\n const isCurrent = multiple\n ? !!curDateList.find((item) => item.year() === year && parseInt(item.format('M'), 10) === num)\n : curDate.year() === year && parseInt(curDate.format('M'), 10) === num;\n monthsArr.push({\n mode: 'year',\n isCurrent,\n date,\n formattedDate: dayjs(date).format(format),\n filterDate: null,\n formattedFilterDate: null,\n isShowWeekend: true,\n });\n }\n\n return monthsArr;\n};\n\n/**\n * 创建日历单元格数据\n */\nexport const createMonthCellsData = (props: TdCalendarProps, state: CalendarState): CalendarCell[][] => {\n const {\n curSelectedYear: year,\n curSelectedMonth: month,\n realFirstDayOfWeek: firstDayOfWeek,\n curDate,\n curDateList,\n } = state;\n const { format, multiple } = props;\n\n const daysArr: CalendarCell[][] = [];\n // 当前月份的开始日期\n const begin: Date = dayjs(`${year}-${month}`).startOf('month').toDate();\n // 当前月份的结束日期\n const end: Date = dayjs(dayjs(`${year}-${month}`).endOf('month').format('YYYY-MM-DD')).toDate();\n const days = end.getDate();\n\n const beginDateColIndex = getCellColIndex(firstDayOfWeek, begin);\n let arr = [];\n let num = 1;\n\n const createCellData = (belongTo: number, isCurrent: boolean, date: Date, weekOrder: number): CalendarCell => {\n const day = getDay(date);\n return {\n mode: 'month',\n belongTo,\n isCurrent,\n day,\n weekOrder,\n date,\n formattedDate: dayjs(date).format(format),\n filterDate: null,\n formattedFilterDate: null,\n isShowWeekend: true,\n };\n };\n\n const judgeIsCurrent = (date: Date) => {\n const isCurrent = multiple ? !!curDateList.find((item) => item.isSame(dayjs(date))) : curDate.isSame(dayjs(date));\n return isCurrent;\n };\n\n // 添加上个月中和当前月第一天同一周的日期\n for (let i = 0; i < beginDateColIndex; i++) {\n const date = addDate(begin, i - beginDateColIndex);\n arr.push(createCellData(-1, false, date, num));\n if (arr.length === 7) {\n daysArr.push(arr);\n arr = [];\n num += 1;\n }\n }\n for (let i = 0; i < days; i++) {\n const date = addDate(begin, i);\n const isCurrent = judgeIsCurrent(date);\n arr.push(createCellData(0, isCurrent, date, num));\n if (arr.length === 7) {\n daysArr.push(arr);\n arr = [];\n num += 1;\n }\n }\n // 添加下个月中和当前月最后同一周的日期\n if (arr.length) {\n const nextMonthCellNum = 7 - arr.length;\n for (let i = 0; i < nextMonthCellNum; i++) {\n const date = addDate(end, i + 1);\n arr.push(createCellData(1, false, date, num));\n }\n daysArr.push(arr);\n }\n\n return daysArr;\n};\n\n/**\n * 根据当前时间创建一个默认日期\n * @returns 当前日期都dayjs对象\n */\nexport const createDefaultCurDate = (): dayjs.Dayjs => dayjs(dayjs().format('YYYY-MM-DD'));\n"],"names":["day","re","mode","isCurrent","date","filterDate","formattedFilterDate","isShowWeekend","_loop","belongTo","weekOrder","arr","daysArr","num"],"mappings":"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"}