-
{value ? this.formater(value) : null}
+
+ {value ? this.formater(value) : null}
+
);
+ const options = {
+ mode,
+ disabledDate,
+ disabledHours: timePanelProps && timePanelProps.disabledHours,
+ disabledMinutes: timePanelProps && timePanelProps.disabledMinutes,
+ disabledSeconds: timePanelProps && timePanelProps.disabledSeconds
+ }
+
// 底部节点
- const oKable = !!(isRange ? inputValue && inputValue[inputType] : inputValue);
+ const oKable = !disableDateTime(isRange ? inputValue && inputValue[inputType] : inputValue, options);
const shouldShowFooter = showOk || preset || extraFooterRender;
const footerNode = shouldShowFooter ? (
diff --git a/components/date-picker2/util.js b/components/date-picker2/util.js
index 4058dac42c..f557a8cc09 100644
--- a/components/date-picker2/util.js
+++ b/components/date-picker2/util.js
@@ -49,6 +49,106 @@ export function fmtValue(value, fmt) {
*/
export function isValueChanged(newValue, oldValue) {
return Array.isArray(newValue)
- ? isValueChanged(newValue[0], oldValue && oldValue[0]) || isValueChanged(newValue[1], oldValue && oldValue[1])
+ ? isValueChanged(newValue[0], oldValue && oldValue[0]) ||
+ isValueChanged(newValue[1], oldValue && oldValue[1])
: newValue !== oldValue && !datejs(newValue).isSame(oldValue);
}
+
+/**
+ * 判读时间是否被禁用
+ * @param {dayjs.ConfigType} value
+ * @param {object} param
+ * @returns {boolean}
+ */
+export function disableDateTime(value, {
+ mode,
+ inputType,
+ disabledDate,
+ disabledHours,
+ disabledMinutes,
+ disabledSeconds,
+ disabledTime = {}
+}) {
+ value = datejs.isDayjs(value) ? value : datejs(value);
+
+ const _disabledTime = typeof disabledTime === 'function' ? disabledTime(value, inputType) : disabledTime;
+
+ return (
+ (typeof disabledDate === 'function' && disabledDate(value, mode)) ||
+ (typeof disabledHours === 'function' && disabledHours(value.get('hour'))) ||
+ (typeof disabledMinutes === 'function' && disabledMinutes(value.get('minute'))) ||
+ (typeof disabledSeconds === 'function' && disabledSeconds(value.get('second'))) ||
+ (typeof _disabledTime.disabledHours === 'function' && _disabledTime.disabledHours(value.get('hour'))) ||
+ (typeof _disabledTime.disabledMinutes === 'function' && _disabledTime.disabledMinutes(value.get('minute'))) ||
+ (typeof _disabledTime.disabledSeconds === 'function' && _disabledTime.disabledSeconds(value.get('second')))
+ );
+}
+
+export function getDisabledTime(props) {
+ const { timePanelProps, value, disabledDate, panelMode, disabledTime = {}, inputType } = props;
+ const { disabledHours, disabledMinutes, disabledSeconds } = timePanelProps || {};
+
+ const _disabledTime = typeof disabledTime === 'function' ? disabledTime(value, inputType) : disabledTime;
+
+ const disabledItems = (list) => index => list.indexOf(index) >= 0;
+ const executedFunc = (...args) => {
+ return (index) => {
+ return args.some(func => typeof func === 'function' ? func(index) : false)
+ }
+ }
+
+ if (value && typeof disabledDate === 'function') {
+ let newDate = value.clone();
+ const hours = 24;
+ const minutesAndSeconds = 60;
+ const _disabledHours = [];
+ const _disabledMinutes = [];
+ const _disabledSeconds = [];
+ const currentHour = value.get('hour');
+ const currentMinute = value.get('minute');
+
+ for (let i = 0; i < hours; i++) {
+ // 禁用小时
+ if (
+ disabledDate(newDate.hour(i).minute(0).second(0), panelMode) &&
+ disabledDate(newDate.hour(i).minute(59).second(59), panelMode)
+ ) {
+ _disabledHours.push(i);
+ }
+ }
+
+ if (_disabledHours.length && _disabledHours.length < hours) {
+ for (let i = 0; i < minutesAndSeconds; i++) {
+ // 从当前小时开始遍历
+ if (
+ disabledDate(newDate.hour(currentHour).minute(i).second(0), panelMode) &&
+ disabledDate(newDate.hour(currentHour).minute(i).second(59), panelMode)
+ ) {
+ _disabledMinutes.push(i);
+ }
+ }
+ }
+
+ if (_disabledMinutes.length && _disabledMinutes.length < minutesAndSeconds) {
+ for (let i = 0; i < minutesAndSeconds; i++) {
+ // 从当前时分开始遍历
+ newDate = newDate.hour(currentHour).minute(currentMinute).second(i);
+ if (disabledDate(newDate, panelMode)) {
+ _disabledSeconds.push(i);
+ }
+ }
+ }
+ return {
+ disabledHours: executedFunc(disabledItems(_disabledHours), disabledHours, _disabledTime.disabledHours),
+ disabledMinutes: executedFunc(disabledItems(_disabledMinutes), disabledMinutes, _disabledTime.disabledMinutes),
+ disabledSeconds: executedFunc(disabledItems(_disabledSeconds), disabledSeconds, _disabledTime.disabledSeconds),
+ };
+ }
+
+ return {
+ ..._disabledTime,
+ disabledHours,
+ disabledMinutes,
+ disabledSeconds,
+ };
+}