/
githubmirror
/
element
Обзор
Документация
Войти
/
githubmirror
/
element
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/date-picker/src/basic/year-table.vue
111 строк
4 KB
TC
DatePicker: add months And years type (#21918)
13 сен 2022, 09:49
Не верифицирован
13 сен 2022, 09:49
d33c4e0
Код
Авторство
О чём код?
<template> <table @click="handleYearTableClick" class="el-year-table"> <tbody> <tr> <td class="available" :class="getCellStyle(startYear + 0)"> <a class="cell">{{ startYear }}</a> </td> <td class="available" :class="getCellStyle(startYear + 1)"> <a class="cell">{{ startYear + 1 }}</a> </td> <td class="available" :class="getCellStyle(startYear + 2)"> <a class="cell">{{ startYear + 2 }}</a> </td> <td class="available" :class="getCellStyle(startYear + 3)"> <a class="cell">{{ startYear + 3 }}</a> </td> </tr> <tr> <td class="available" :class="getCellStyle(startYear + 4)"> <a class="cell">{{ startYear + 4 }}</a> </td> <td class="available" :class="getCellStyle(startYear + 5)"> <a class="cell">{{ startYear + 5 }}</a> </td> <td class="available" :class="getCellStyle(startYear + 6)"> <a class="cell">{{ startYear + 6 }}</a> </td> <td class="available" :class="getCellStyle(startYear + 7)"> <a class="cell">{{ startYear + 7 }}</a> </td> </tr> <tr> <td class="available" :class="getCellStyle(startYear + 8)"> <a class="cell">{{ startYear + 8 }}</a> </td> <td class="available" :class="getCellStyle(startYear + 9)"> <a class="cell">{{ startYear + 9 }}</a> </td> <td></td> <td></td> </tr> </tbody> </table> </template> <script type="text/babel"> import { hasClass } from 'element-ui/src/utils/dom'; import { isDate, range, nextDate, getDayCountOfYear } from 'element-ui/src/utils/date-util'; import { arrayFindIndex, coerceTruthyValueToArray } from 'element-ui/src/utils/util'; const datesInYear = year => { const numOfDays = getDayCountOfYear(year); const firstDay = new Date(year, 0, 1); return range(numOfDays).map(n => nextDate(firstDay, n)); }; export default { props: { disabledDate: {}, value: {}, defaultValue: { validator(val) { // null or valid Date Object return val === null || (val instanceof Date && isDate(val)); } }, date: {}, selectionMode: {} }, computed: { startYear() { return Math.floor(this.date.getFullYear() / 10) * 10; } }, methods: { getCellStyle(year) { const style = {}; const today = new Date(); style.disabled = typeof this.disabledDate === 'function' ? datesInYear(year).every(this.disabledDate) : false; style.current = arrayFindIndex(coerceTruthyValueToArray(this.value), date => date.getFullYear() === year) >= 0; style.today = today.getFullYear() === year; style.default = this.defaultValue && this.defaultValue.getFullYear() === year; return style; }, handleYearTableClick(event) { const target = event.target; if (target.tagName === 'A') { if (hasClass(target.parentNode, 'disabled')) return; const year = target.textContent || target.innerText; if (this.selectionMode === 'years') { const value = this.value || []; const idx = arrayFindIndex(value, date => date.getFullYear() === Number(year)); const newValue = idx > -1 ? [...value.slice(0, idx), ...value.slice(idx + 1)] : [...value, new Date(year)]; this.$emit('pick', newValue); } else { this.$emit('pick', Number(year)); } } } } }; </script>