提交 | 用户 | age
|
67dc7b
|
1 |
'use strict'; |
S |
2 |
var __assign = |
|
3 |
(this && this.__assign) || |
|
4 |
function () { |
|
5 |
__assign = |
|
6 |
Object.assign || |
|
7 |
function (t) { |
|
8 |
for (var s, i = 1, n = arguments.length; i < n; i++) { |
|
9 |
s = arguments[i]; |
|
10 |
for (var p in s) |
|
11 |
if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; |
|
12 |
} |
|
13 |
return t; |
|
14 |
}; |
|
15 |
return __assign.apply(this, arguments); |
|
16 |
}; |
|
17 |
var __spreadArrays = |
|
18 |
(this && this.__spreadArrays) || |
|
19 |
function () { |
|
20 |
for (var s = 0, i = 0, il = arguments.length; i < il; i++) |
|
21 |
s += arguments[i].length; |
|
22 |
for (var r = Array(s), k = 0, i = 0; i < il; i++) |
|
23 |
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) |
|
24 |
r[k] = a[j]; |
|
25 |
return r; |
|
26 |
}; |
|
27 |
Object.defineProperty(exports, '__esModule', { value: true }); |
|
28 |
var component_1 = require('../common/component'); |
|
29 |
var utils_1 = require('../common/utils'); |
|
30 |
var shared_1 = require('../picker/shared'); |
|
31 |
var currentYear = new Date().getFullYear(); |
|
32 |
function isValidDate(date) { |
|
33 |
return utils_1.isDef(date) && !isNaN(new Date(date).getTime()); |
|
34 |
} |
|
35 |
function range(num, min, max) { |
|
36 |
return Math.min(Math.max(num, min), max); |
|
37 |
} |
|
38 |
function padZero(val) { |
|
39 |
return ('00' + val).slice(-2); |
|
40 |
} |
|
41 |
function times(n, iteratee) { |
|
42 |
var index = -1; |
|
43 |
var result = Array(n < 0 ? 0 : n); |
|
44 |
while (++index < n) { |
|
45 |
result[index] = iteratee(index); |
|
46 |
} |
|
47 |
return result; |
|
48 |
} |
|
49 |
function getTrueValue(formattedValue) { |
d34532
|
50 |
if (formattedValue === undefined) { |
S |
51 |
formattedValue = '1'; |
|
52 |
} |
67dc7b
|
53 |
while (isNaN(parseInt(formattedValue, 10))) { |
S |
54 |
formattedValue = formattedValue.slice(1); |
|
55 |
} |
|
56 |
return parseInt(formattedValue, 10); |
|
57 |
} |
|
58 |
function getMonthEndDay(year, month) { |
|
59 |
return 32 - new Date(year, month - 1, 32).getDate(); |
|
60 |
} |
|
61 |
var defaultFormatter = function (type, value) { |
|
62 |
return value; |
|
63 |
}; |
|
64 |
component_1.VantComponent({ |
|
65 |
classes: ['active-class', 'toolbar-class', 'column-class'], |
|
66 |
props: __assign(__assign({}, shared_1.pickerProps), { |
|
67 |
value: { |
|
68 |
type: null, |
|
69 |
observer: 'updateValue', |
|
70 |
}, |
|
71 |
filter: null, |
|
72 |
type: { |
|
73 |
type: String, |
|
74 |
value: 'datetime', |
|
75 |
observer: 'updateValue', |
|
76 |
}, |
|
77 |
showToolbar: { |
|
78 |
type: Boolean, |
|
79 |
value: true, |
|
80 |
}, |
|
81 |
formatter: { |
|
82 |
type: null, |
|
83 |
value: defaultFormatter, |
|
84 |
}, |
|
85 |
minDate: { |
|
86 |
type: Number, |
|
87 |
value: new Date(currentYear - 10, 0, 1).getTime(), |
|
88 |
observer: 'updateValue', |
|
89 |
}, |
|
90 |
maxDate: { |
|
91 |
type: Number, |
|
92 |
value: new Date(currentYear + 10, 11, 31).getTime(), |
|
93 |
observer: 'updateValue', |
|
94 |
}, |
|
95 |
minHour: { |
|
96 |
type: Number, |
|
97 |
value: 0, |
|
98 |
observer: 'updateValue', |
|
99 |
}, |
|
100 |
maxHour: { |
|
101 |
type: Number, |
|
102 |
value: 23, |
|
103 |
observer: 'updateValue', |
|
104 |
}, |
|
105 |
minMinute: { |
|
106 |
type: Number, |
|
107 |
value: 0, |
|
108 |
observer: 'updateValue', |
|
109 |
}, |
|
110 |
maxMinute: { |
|
111 |
type: Number, |
|
112 |
value: 59, |
|
113 |
observer: 'updateValue', |
|
114 |
}, |
|
115 |
}), |
|
116 |
data: { |
|
117 |
innerValue: Date.now(), |
|
118 |
columns: [], |
|
119 |
}, |
|
120 |
methods: { |
|
121 |
updateValue: function () { |
|
122 |
var _this = this; |
|
123 |
var data = this.data; |
|
124 |
var val = this.correctValue(data.value); |
|
125 |
var isEqual = val === data.innerValue; |
|
126 |
if (!isEqual) { |
|
127 |
this.updateColumnValue(val).then(function () { |
|
128 |
_this.$emit('input', val); |
|
129 |
}); |
|
130 |
} else { |
|
131 |
this.updateColumns(); |
|
132 |
} |
|
133 |
}, |
|
134 |
getPicker: function () { |
|
135 |
if (this.picker == null) { |
|
136 |
this.picker = this.selectComponent('.van-datetime-picker'); |
|
137 |
var picker_1 = this.picker; |
|
138 |
var setColumnValues_1 = picker_1.setColumnValues; |
|
139 |
picker_1.setColumnValues = function () { |
|
140 |
var args = []; |
|
141 |
for (var _i = 0; _i < arguments.length; _i++) { |
|
142 |
args[_i] = arguments[_i]; |
|
143 |
} |
|
144 |
return setColumnValues_1.apply( |
|
145 |
picker_1, |
|
146 |
__spreadArrays(args, [false]) |
|
147 |
); |
|
148 |
}; |
|
149 |
} |
|
150 |
return this.picker; |
|
151 |
}, |
|
152 |
updateColumns: function () { |
|
153 |
var _a = this.data.formatter, |
|
154 |
formatter = _a === void 0 ? defaultFormatter : _a; |
|
155 |
var results = this.getOriginColumns().map(function (column) { |
|
156 |
return { |
|
157 |
values: column.values.map(function (value) { |
|
158 |
return formatter(column.type, value); |
|
159 |
}), |
|
160 |
}; |
|
161 |
}); |
|
162 |
return this.set({ columns: results }); |
|
163 |
}, |
|
164 |
getOriginColumns: function () { |
|
165 |
var filter = this.data.filter; |
|
166 |
var results = this.getRanges().map(function (_a) { |
|
167 |
var type = _a.type, |
|
168 |
range = _a.range; |
|
169 |
var values = times(range[1] - range[0] + 1, function (index) { |
|
170 |
var value = range[0] + index; |
|
171 |
value = type === 'year' ? '' + value : padZero(value); |
|
172 |
return value; |
|
173 |
}); |
|
174 |
if (filter) { |
|
175 |
values = filter(type, values); |
|
176 |
} |
|
177 |
return { type: type, values: values }; |
|
178 |
}); |
|
179 |
return results; |
|
180 |
}, |
|
181 |
getRanges: function () { |
|
182 |
var data = this.data; |
|
183 |
if (data.type === 'time') { |
|
184 |
return [ |
|
185 |
{ |
|
186 |
type: 'hour', |
|
187 |
range: [data.minHour, data.maxHour], |
|
188 |
}, |
|
189 |
{ |
|
190 |
type: 'minute', |
|
191 |
range: [data.minMinute, data.maxMinute], |
|
192 |
}, |
|
193 |
]; |
|
194 |
} |
|
195 |
var _a = this.getBoundary('max', data.innerValue), |
|
196 |
maxYear = _a.maxYear, |
|
197 |
maxDate = _a.maxDate, |
|
198 |
maxMonth = _a.maxMonth, |
|
199 |
maxHour = _a.maxHour, |
|
200 |
maxMinute = _a.maxMinute; |
|
201 |
var _b = this.getBoundary('min', data.innerValue), |
|
202 |
minYear = _b.minYear, |
|
203 |
minDate = _b.minDate, |
|
204 |
minMonth = _b.minMonth, |
|
205 |
minHour = _b.minHour, |
|
206 |
minMinute = _b.minMinute; |
|
207 |
var result = [ |
|
208 |
{ |
|
209 |
type: 'year', |
|
210 |
range: [minYear, maxYear], |
|
211 |
}, |
|
212 |
{ |
|
213 |
type: 'month', |
|
214 |
range: [minMonth, maxMonth], |
|
215 |
}, |
|
216 |
{ |
|
217 |
type: 'day', |
|
218 |
range: [minDate, maxDate], |
|
219 |
}, |
|
220 |
{ |
|
221 |
type: 'hour', |
|
222 |
range: [minHour, maxHour], |
|
223 |
}, |
|
224 |
{ |
|
225 |
type: 'minute', |
|
226 |
range: [minMinute, maxMinute], |
|
227 |
}, |
|
228 |
]; |
|
229 |
if (data.type === 'date') result.splice(3, 2); |
|
230 |
if (data.type === 'year-month') result.splice(2, 3); |
|
231 |
return result; |
|
232 |
}, |
|
233 |
correctValue: function (value) { |
|
234 |
var data = this.data; |
|
235 |
// validate value |
|
236 |
var isDateType = data.type !== 'time'; |
|
237 |
if (isDateType && !isValidDate(value)) { |
|
238 |
value = data.minDate; |
|
239 |
} else if (!isDateType && !value) { |
|
240 |
var minHour = data.minHour; |
|
241 |
value = padZero(minHour) + ':00'; |
|
242 |
} |
|
243 |
// time type |
|
244 |
if (!isDateType) { |
|
245 |
var _a = value.split(':'), |
|
246 |
hour = _a[0], |
|
247 |
minute = _a[1]; |
|
248 |
hour = padZero(range(hour, data.minHour, data.maxHour)); |
|
249 |
minute = padZero(range(minute, data.minMinute, data.maxMinute)); |
|
250 |
return hour + ':' + minute; |
|
251 |
} |
|
252 |
// date type |
|
253 |
value = Math.max(value, data.minDate); |
|
254 |
value = Math.min(value, data.maxDate); |
|
255 |
return value; |
|
256 |
}, |
|
257 |
getBoundary: function (type, innerValue) { |
|
258 |
var _a; |
|
259 |
var value = new Date(innerValue); |
|
260 |
var boundary = new Date(this.data[type + 'Date']); |
|
261 |
var year = boundary.getFullYear(); |
|
262 |
var month = 1; |
|
263 |
var date = 1; |
|
264 |
var hour = 0; |
|
265 |
var minute = 0; |
|
266 |
if (type === 'max') { |
|
267 |
month = 12; |
|
268 |
date = getMonthEndDay(value.getFullYear(), value.getMonth() + 1); |
|
269 |
hour = 23; |
|
270 |
minute = 59; |
|
271 |
} |
|
272 |
if (value.getFullYear() === year) { |
|
273 |
month = boundary.getMonth() + 1; |
|
274 |
if (value.getMonth() + 1 === month) { |
|
275 |
date = boundary.getDate(); |
|
276 |
if (value.getDate() === date) { |
|
277 |
hour = boundary.getHours(); |
|
278 |
if (value.getHours() === hour) { |
|
279 |
minute = boundary.getMinutes(); |
|
280 |
} |
|
281 |
} |
|
282 |
} |
|
283 |
} |
|
284 |
return ( |
|
285 |
(_a = {}), |
|
286 |
(_a[type + 'Year'] = year), |
|
287 |
(_a[type + 'Month'] = month), |
|
288 |
(_a[type + 'Date'] = date), |
|
289 |
(_a[type + 'Hour'] = hour), |
|
290 |
(_a[type + 'Minute'] = minute), |
|
291 |
_a |
|
292 |
); |
|
293 |
}, |
|
294 |
onCancel: function () { |
|
295 |
this.$emit('cancel'); |
|
296 |
}, |
|
297 |
onConfirm: function () { |
|
298 |
this.$emit('confirm', this.data.innerValue); |
|
299 |
}, |
|
300 |
onChange: function () { |
|
301 |
var _this = this; |
|
302 |
var data = this.data; |
|
303 |
var value; |
|
304 |
var picker = this.getPicker(); |
|
305 |
var originColumns = this.getOriginColumns(); |
|
306 |
if (data.type === 'time') { |
|
307 |
var indexes = picker.getIndexes(); |
|
308 |
value = |
|
309 |
+originColumns[0].values[indexes[0]] + |
|
310 |
':' + |
|
311 |
+originColumns[1].values[indexes[1]]; |
|
312 |
} else { |
|
313 |
var indexes = picker.getIndexes(); |
|
314 |
var values = indexes.map(function (value, index) { |
|
315 |
return originColumns[index].values[value]; |
|
316 |
}); |
|
317 |
var year = getTrueValue(values[0]); |
|
318 |
var month = getTrueValue(values[1]); |
|
319 |
var maxDate = getMonthEndDay(year, month); |
|
320 |
var date = getTrueValue(values[2]); |
|
321 |
if (data.type === 'year-month') { |
|
322 |
date = 1; |
|
323 |
} |
|
324 |
date = date > maxDate ? maxDate : date; |
|
325 |
var hour = 0; |
|
326 |
var minute = 0; |
|
327 |
if (data.type === 'datetime') { |
|
328 |
hour = getTrueValue(values[3]); |
|
329 |
minute = getTrueValue(values[4]); |
|
330 |
} |
|
331 |
value = new Date(year, month - 1, date, hour, minute); |
|
332 |
} |
|
333 |
value = this.correctValue(value); |
|
334 |
this.updateColumnValue(value).then(function () { |
|
335 |
_this.$emit('input', value); |
|
336 |
_this.$emit('change', picker); |
|
337 |
}); |
|
338 |
}, |
|
339 |
updateColumnValue: function (value) { |
|
340 |
var _this = this; |
|
341 |
var values = []; |
|
342 |
var type = this.data.type; |
|
343 |
var formatter = this.data.formatter || defaultFormatter; |
|
344 |
var picker = this.getPicker(); |
|
345 |
if (type === 'time') { |
|
346 |
var pair = value.split(':'); |
|
347 |
values = [formatter('hour', pair[0]), formatter('minute', pair[1])]; |
|
348 |
} else { |
|
349 |
var date = new Date(value); |
|
350 |
values = [ |
|
351 |
formatter('year', '' + date.getFullYear()), |
|
352 |
formatter('month', padZero(date.getMonth() + 1)), |
|
353 |
]; |
|
354 |
if (type === 'date') { |
|
355 |
values.push(formatter('day', padZero(date.getDate()))); |
|
356 |
} |
|
357 |
if (type === 'datetime') { |
|
358 |
values.push( |
|
359 |
formatter('day', padZero(date.getDate())), |
|
360 |
formatter('hour', padZero(date.getHours())), |
|
361 |
formatter('minute', padZero(date.getMinutes())) |
|
362 |
); |
|
363 |
} |
|
364 |
} |
|
365 |
return this.set({ innerValue: value }) |
|
366 |
.then(function () { |
|
367 |
return _this.updateColumns(); |
|
368 |
}) |
|
369 |
.then(function () { |
|
370 |
return picker.setValues(values); |
|
371 |
}); |
|
372 |
}, |
|
373 |
}, |
|
374 |
created: function () { |
|
375 |
var _this = this; |
|
376 |
var innerValue = this.correctValue(this.data.value); |
|
377 |
this.updateColumnValue(innerValue).then(function () { |
|
378 |
_this.$emit('input', innerValue); |
|
379 |
}); |
|
380 |
}, |
|
381 |
}); |