Blame view

node_modules/element-ui/packages/date-picker/src/basic/year-table.vue 3.07 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
  <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 '../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: {}
      },
  
      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;
            this.$emit('pick', Number(year));
          }
        }
      }
    };
  </script>