UNPKG

sunmao-sdk

Version:

榫卯-开箱即用赋能-sdk

82 lines (70 loc) 1.96 kB
/** * Updated by fateriddle on 2019-12-12. * 日期组件 */ import React, { useMemo } from "react"; import { DatePicker, TimePicker } from "antd"; import moment from "moment"; import { getFormat } from "../../base/utils"; export default ({ invalid, schema, options, // rangeDay 为最近几天 rangeDayStart :对标时间(默认当天)(格式YYYY-MM-DD) value, name, onChange, disabled, readOnly }) => { const style = invalid ? { borderColor: "#ff4d4f", boxShadow: "0 0 0 2px rgba(255,77,79,.2)" } : {}; const { format = "dateTime" } = schema; let _format = format; if (options && options.format) { _format = options.format; } _format = getFormat(_format); const DateComponent = format === "time" ? TimePicker : DatePicker; // 最近几天 const [_rangeDay, _rangeDayStart] = useMemo(() => { let day, startData = moment(); try { day = parseInt(options.rangeDay) || 0; // 最近几天 } catch {} try { startData = moment(options.rangeDayStart); // 最近几天 的对比起始时间 } catch {} return [day, startData]; }, [options?.rangeDay]); let _value = value || ""; if (_value) { _value = moment(_value, _format); } const _onChange = (value, string) => { onChange(name, string); }; const dateParams = { ...options, value: _value, style: { width: "100%", ...style }, disabled: disabled || readOnly, onChange: _onChange, disabledDate: current => { return ( !!_rangeDay && current && _rangeDayStart.diff(current, "days") > _rangeDay ); } }; // TODO: format是在options里自定义的情况,是否要判断一下要不要showTime if (format === "dateTime") { dateParams.showTime = true; } if (["week", "month", "quarter", "year"].indexOf(format) > -1) { dateParams.picker = format; } return <DateComponent {...dateParams} />; };