mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
108 lines
2.5 KiB
JavaScript
108 lines
2.5 KiB
JavaScript
import { createNamespace } from '../utils';
|
|
import { padZero } from '../utils/format/string';
|
|
import { range } from '../utils/format/number';
|
|
import { sharedProps, TimePickerMixin } from './shared';
|
|
|
|
const [createComponent] = createNamespace('time-picker');
|
|
|
|
export default createComponent({
|
|
mixins: [TimePickerMixin],
|
|
|
|
props: {
|
|
...sharedProps,
|
|
minHour: {
|
|
type: [Number, String],
|
|
default: 0,
|
|
},
|
|
maxHour: {
|
|
type: [Number, String],
|
|
default: 23,
|
|
},
|
|
minMinute: {
|
|
type: [Number, String],
|
|
default: 0,
|
|
},
|
|
maxMinute: {
|
|
type: [Number, String],
|
|
default: 59,
|
|
},
|
|
},
|
|
|
|
computed: {
|
|
ranges() {
|
|
return [
|
|
{
|
|
type: 'hour',
|
|
range: [+this.minHour, +this.maxHour],
|
|
},
|
|
{
|
|
type: 'minute',
|
|
range: [+this.minMinute, +this.maxMinute],
|
|
},
|
|
];
|
|
},
|
|
},
|
|
|
|
watch: {
|
|
filter: 'updateInnerValue',
|
|
minHour: 'updateInnerValue',
|
|
maxHour: 'updateInnerValue',
|
|
minMinute: 'updateInnerValue',
|
|
maxMinute: 'updateInnerValue',
|
|
|
|
value(val) {
|
|
val = this.formatValue(val);
|
|
|
|
if (val !== this.innerValue) {
|
|
this.innerValue = val;
|
|
this.updateColumnValue();
|
|
}
|
|
},
|
|
},
|
|
|
|
methods: {
|
|
formatValue(value) {
|
|
if (!value) {
|
|
value = `${padZero(this.minHour)}:${padZero(this.minMinute)}`;
|
|
}
|
|
|
|
let [hour, minute] = value.split(':');
|
|
hour = padZero(range(hour, this.minHour, this.maxHour));
|
|
minute = padZero(range(minute, this.minMinute, this.maxMinute));
|
|
|
|
return `${hour}:${minute}`;
|
|
},
|
|
|
|
updateInnerValue() {
|
|
const [hourIndex, minuteIndex] = this.getPicker().getIndexes();
|
|
const [hourColumn, minuteColumn] = this.originColumns;
|
|
|
|
const hour = hourColumn.values[hourIndex] || hourColumn.values[0];
|
|
const minute = minuteColumn.values[minuteIndex] || minuteColumn.values[0];
|
|
|
|
this.innerValue = this.formatValue(`${hour}:${minute}`);
|
|
this.updateColumnValue();
|
|
},
|
|
|
|
onChange(picker) {
|
|
this.updateInnerValue();
|
|
|
|
this.$nextTick(() => {
|
|
this.$nextTick(() => {
|
|
this.$emit('change', picker);
|
|
});
|
|
});
|
|
},
|
|
|
|
updateColumnValue() {
|
|
const { formatter } = this;
|
|
const pair = this.innerValue.split(':');
|
|
const values = [formatter('hour', pair[0]), formatter('minute', pair[1])];
|
|
|
|
this.$nextTick(() => {
|
|
this.getPicker().setValues(values);
|
|
});
|
|
},
|
|
},
|
|
});
|