197 lines
8.3 KiB
JavaScript
197 lines
8.3 KiB
JavaScript
![]() |
"use strict";
|
|||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|||
|
var tslib_1 = require("tslib");
|
|||
|
var props_1 = require("./props");
|
|||
|
var dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|||
|
var fast_deep_equal_1 = tslib_1.__importDefault(require("fast-deep-equal"));
|
|||
|
var util_1 = require("./util");
|
|||
|
var fmtEvent_1 = tslib_1.__importDefault(require("../_util/fmtEvent"));
|
|||
|
var value_1 = tslib_1.__importDefault(require("../mixins/value"));
|
|||
|
var component2 = my.canIUse('component2');
|
|||
|
Component({
|
|||
|
props: props_1.DatePickerDefaultProps,
|
|||
|
pickerVisible: false,
|
|||
|
data: function () {
|
|||
|
return {
|
|||
|
currentValue: [],
|
|||
|
columns: [],
|
|||
|
forceUpdate: 0, // 强制更新picker组件,已知需处理的情况:value超限,但是需要更新format,由于picker的参数均未变化,无法触发picker的渲染
|
|||
|
};
|
|||
|
},
|
|||
|
mixins: [
|
|||
|
(0, value_1.default)({
|
|||
|
transformValue: function (value) {
|
|||
|
return {
|
|||
|
value: value ? (0, dayjs_1.default)(value).toDate() : undefined,
|
|||
|
needUpdate: true,
|
|||
|
};
|
|||
|
},
|
|||
|
}),
|
|||
|
],
|
|||
|
didMount: function () {
|
|||
|
this.pickerVisible = false;
|
|||
|
},
|
|||
|
deriveDataFromProps: function (nextProps) {
|
|||
|
this.updateValue(this.props, nextProps);
|
|||
|
},
|
|||
|
didUpdate: function (prevProps) {
|
|||
|
if (!component2) {
|
|||
|
this.updateValue(prevProps, this.props);
|
|||
|
}
|
|||
|
},
|
|||
|
methods: {
|
|||
|
updateValue: function (prevProps, currentProps) {
|
|||
|
if (!(0, util_1.isEqualDate)(prevProps.value, currentProps.value)) {
|
|||
|
this.setData({
|
|||
|
forceUpdate: this.data.forceUpdate + 1,
|
|||
|
});
|
|||
|
// 展开状态才更新picker的数据,否则下次triggerVisible触发
|
|||
|
if (this.pickerVisible) {
|
|||
|
this.setCurrentValue(currentProps);
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
// 当前选中的picker值,处理无cValue时的情况,优先取当前时间,不在时间范围内取开始时间
|
|||
|
getCurrentValueWithCValue: function (currentProps) {
|
|||
|
var realValue = this.getValue();
|
|||
|
var min = currentProps.min, max = currentProps.max, precision = currentProps.precision;
|
|||
|
if (realValue) {
|
|||
|
return (0, util_1.getValueByDate)(realValue, precision);
|
|||
|
}
|
|||
|
else {
|
|||
|
var now = new Date();
|
|||
|
if (!(min && (0, dayjs_1.default)(now).isBefore((0, dayjs_1.default)(min))) &&
|
|||
|
!(max && (0, dayjs_1.default)(now).isAfter((0, dayjs_1.default)(max)))) {
|
|||
|
return (0, util_1.getValueByDate)(now, precision);
|
|||
|
}
|
|||
|
else {
|
|||
|
return (0, util_1.getValueByDate)(this.getMin(min).toDate(), precision);
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
getMin: function (min) {
|
|||
|
return min ? (0, dayjs_1.default)(min) : (0, dayjs_1.default)().subtract(10, 'year');
|
|||
|
},
|
|||
|
getMax: function (max) {
|
|||
|
return max ? (0, dayjs_1.default)(max) : (0, dayjs_1.default)().add(10, 'year');
|
|||
|
},
|
|||
|
/**
|
|||
|
* didUpdate、弹窗打开触发
|
|||
|
*/
|
|||
|
setCurrentValue: function (currentProps) {
|
|||
|
var _this = this;
|
|||
|
var currentValue = this.getCurrentValueWithCValue(currentProps);
|
|||
|
var newColumns = this.generateData(currentValue, currentProps);
|
|||
|
if (!(0, fast_deep_equal_1.default)(newColumns, this.data.columns)) {
|
|||
|
this.setData({
|
|||
|
columns: newColumns,
|
|||
|
}, function () {
|
|||
|
_this.setData({
|
|||
|
currentValue: currentValue,
|
|||
|
});
|
|||
|
});
|
|||
|
}
|
|||
|
else {
|
|||
|
this.setData({
|
|||
|
currentValue: currentValue,
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
// 生成选项数据,didmound、picker change、打开弹窗触发
|
|||
|
generateData: function (currentValue, currentProps) {
|
|||
|
var precision = currentProps.precision, propsMin = currentProps.min, propsMax = currentProps.max;
|
|||
|
var min = this.getMin(propsMin);
|
|||
|
var max = this.getMax(propsMax);
|
|||
|
if (max < min) {
|
|||
|
return [];
|
|||
|
}
|
|||
|
var currentPickerDay = (0, dayjs_1.default)();
|
|||
|
if (currentValue.length > 0) {
|
|||
|
currentPickerDay = (0, dayjs_1.default)((0, util_1.getDateByValue)(currentValue));
|
|||
|
}
|
|||
|
if (currentPickerDay < min || currentPickerDay > max) {
|
|||
|
currentPickerDay = min;
|
|||
|
}
|
|||
|
var newColumns = (0, util_1.getRangeData)(precision, min, max, currentPickerDay);
|
|||
|
return newColumns;
|
|||
|
},
|
|||
|
onChange: function (selectedIndex) {
|
|||
|
var _this = this;
|
|||
|
selectedIndex = (0, util_1.getValidValue)(selectedIndex);
|
|||
|
var _a = this.props, onPickerChange = _a.onPickerChange, format = _a.format, precision = _a.precision;
|
|||
|
var date = (0, util_1.getDateByValue)(selectedIndex);
|
|||
|
var min = this.getMin(this.props.min);
|
|||
|
var max = this.getMax(this.props.max);
|
|||
|
if ((0, dayjs_1.default)(date).isBefore(min)) {
|
|||
|
date = min.toDate();
|
|||
|
selectedIndex = (0, util_1.getValueByDate)(date, precision);
|
|||
|
}
|
|||
|
if ((0, dayjs_1.default)(date).isAfter(max)) {
|
|||
|
date = max.toDate();
|
|||
|
selectedIndex = (0, util_1.getValueByDate)(date, precision);
|
|||
|
}
|
|||
|
var newColumns = this.generateData(selectedIndex, this.props);
|
|||
|
if (!(0, fast_deep_equal_1.default)(newColumns, this.data.columns)) {
|
|||
|
this.setData({
|
|||
|
columns: newColumns,
|
|||
|
}, function () {
|
|||
|
_this.setData({ currentValue: selectedIndex });
|
|||
|
if (onPickerChange) {
|
|||
|
var date_1 = (0, util_1.getDateByValue)(selectedIndex);
|
|||
|
onPickerChange(date_1, (0, dayjs_1.default)(date_1).format(format), (0, fmtEvent_1.default)(_this.props));
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
else {
|
|||
|
this.setData({ currentValue: selectedIndex });
|
|||
|
if (onPickerChange) {
|
|||
|
var date_2 = (0, util_1.getDateByValue)(selectedIndex);
|
|||
|
onPickerChange(date_2, (0, dayjs_1.default)(date_2).format(format), (0, fmtEvent_1.default)(this.props));
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
onCancel: function (e) {
|
|||
|
var onCancel = this.props.onCancel;
|
|||
|
if (onCancel) {
|
|||
|
onCancel((0, fmtEvent_1.default)(this.props, e));
|
|||
|
}
|
|||
|
},
|
|||
|
onOk: function () {
|
|||
|
var currentValue = this.data.currentValue;
|
|||
|
var format = this.props.format;
|
|||
|
var date = (0, util_1.getDateByValue)(currentValue);
|
|||
|
if (!this.isControlled()) {
|
|||
|
this.update(date);
|
|||
|
}
|
|||
|
if (this.props.onOk) {
|
|||
|
this.props.onOk(date, (0, dayjs_1.default)(date).format(format), (0, fmtEvent_1.default)(this.props));
|
|||
|
}
|
|||
|
},
|
|||
|
defaultFormat: function (value, valueStr) {
|
|||
|
if (this.props.format && valueStr) {
|
|||
|
return valueStr;
|
|||
|
}
|
|||
|
return '';
|
|||
|
},
|
|||
|
onFormat: function () {
|
|||
|
var _a = this.props, onFormat = _a.onFormat, format = _a.format;
|
|||
|
var realValue = this.getValue();
|
|||
|
var formatValueByProps = onFormat &&
|
|||
|
onFormat(realValue, realValue ? (0, dayjs_1.default)(realValue).format(format) : null);
|
|||
|
if (typeof formatValueByProps !== 'undefined') {
|
|||
|
return formatValueByProps;
|
|||
|
}
|
|||
|
return this.defaultFormat(realValue, realValue ? (0, dayjs_1.default)(realValue).format(format) : null);
|
|||
|
},
|
|||
|
onVisibleChange: function (visible) {
|
|||
|
this.pickerVisible = visible;
|
|||
|
var onVisibleChange = this.props.onVisibleChange;
|
|||
|
if (visible) {
|
|||
|
this.setCurrentValue(this.props);
|
|||
|
}
|
|||
|
if (onVisibleChange) {
|
|||
|
onVisibleChange(visible, (0, fmtEvent_1.default)(this.props));
|
|||
|
}
|
|||
|
},
|
|||
|
},
|
|||
|
});
|