<template> <div :class="classes"> <span :class="getCellCls(cell)" v-for="cell in cells" @click="handleClick(cell)" @mouseenter="handleMouseMove(cell)"> <em>{{ cell.date.getFullYear() }}</em> </span> </div> </template> <script> import { clearHours } from '../util'; import { deepCopy } from '../../../utils/assist'; import mixin from './mixin'; import prefixCls from './prefixCls'; export default { mixins: [mixin], props: { /* in mixin */ }, computed: { classes() { return [`${prefixCls}`, `${prefixCls}-year`]; }, startYear() { return Math.floor(this.tableDate.getFullYear() / 10) * 10; }, cells() { let cells = []; const cell_tmpl = { text: '', selected: false, disabled: false }; const selectedDays = this.dates .filter(Boolean) .map(date => clearHours(new Date(date.getFullYear(), 0, 1))); const focusedDate = clearHours( new Date(this.focusedDate.getFullYear(), 0, 1) ); for (let i = 0; i < 10; i++) { const cell = deepCopy(cell_tmpl); cell.date = new Date(this.startYear + i, 0, 1); cell.disabled = typeof this.disabledDate === 'function' && this.disabledDate(cell.date) && this.selectionMode === 'year'; const day = clearHours(cell.date); cell.selected = selectedDays.includes(day); cell.focused = day === focusedDate; cells.push(cell); } return cells; } }, methods: { getCellCls(cell) { return [ `${prefixCls}-cell`, { [`${prefixCls}-cell-selected`]: cell.selected, [`${prefixCls}-cell-disabled`]: cell.disabled, [`${prefixCls}-cell-focused`]: cell.focused, [`${prefixCls}-cell-range`]: cell.range && !cell.start && !cell.end } ]; } } }; </script>