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
102
  | <template> 
 |    <el-date-picker 
 |      v-model="selectValue" 
 |      type="daterange" 
 |      range-separator="-" 
 |      unlink-panels 
 |      value-format="yyyy-MM-dd" 
 |      :start-placeholder="startPlaceholder" 
 |      :end-placeholder="endPlaceholder" 
 |      :picker-options="pickerOptions" 
 |      @change="onSelected"> 
 |    </el-date-picker> 
 |  </template> 
 |  <script> 
 |    
 |    export default { 
 |      name: 'ZtDateRangePicker', 
 |      components: {}, 
 |      props: { 
 |        value: { 
 |          type: Array, 
 |          default() { 
 |            return [] 
 |          } 
 |        }, 
 |        start: {// 初始化起始日期 
 |          type: String, 
 |          default: '' 
 |        }, 
 |        end: {// 初始化截止日期 
 |          type: String, 
 |          default: '' 
 |        }, 
 |        max: { // 可选最大日期 
 |          type: [String, Date], 
 |          default: '2100-01-01' 
 |        }, 
 |        min: { // 可选最小日期 
 |          type: [String, Date], 
 |          default: '1979-01-01' 
 |        }, 
 |        startPlaceholder: { 
 |          type: String, 
 |          default: '开始日期' 
 |        }, 
 |        endPlaceholder: { 
 |          type: String, 
 |          default: '结束日期' 
 |        } 
 |      }, 
 |      data() { 
 |        let that = this 
 |        return { 
 |          selectValue: [this.start, this.end], 
 |          pickerOptions: { 
 |            disabledDate(date) { 
 |              let d = date.getTime() 
 |              let start = that.min instanceof Date ? that.min.getTime() : new Date(that.min.replace('/-/g', '/')).getTime() 
 |              let end = that.max instanceof Date ? that.max.getTime() : new Date(that.max.replace('/-/g', '/')).getTime() 
 |              return !(d >= start && d <= end) 
 |            } 
 |          } 
 |        } 
 |      }, 
 |      watch: { 
 |        value(val, oldval) { 
 |          this.selectValue = val 
 |        }, 
 |        start(val, oldVal) { 
 |          this.selectValue = [val, this.end] 
 |        }, 
 |        end(val, oldVal) { 
 |          this.selectValue = [this.start, val] 
 |        } 
 |      }, 
 |      mounted() { 
 |      }, 
 |      methods: { 
 |        onSelected(data) { 
 |          this.$emit('input', this.selectValue) 
 |          if (this.selectValue && this.selectValue.length > 1) { 
 |            this.$emit('startChange', this.selectValue[0]) 
 |            this.$emit('endChange', this.selectValue[1]) 
 |          } else { 
 |            this.$emit('startChange', '') 
 |            this.$emit('endChange', '') 
 |          } 
 |        } 
 |      } 
 |    } 
 |  </script> 
 |  <style lang="scss"> 
 |    .el-date-editor--daterange.el-input__inner { 
 |      width: 100%; 
 |    } 
 |    .el-date-editor--daterange .el-input__icon { 
 |      height: auto; 
 |    } 
 |    .el-date-editor .el-range-separator { 
 |      line-height: 25px; 
 |    } 
 |  </style> 
 |  
  |