@kne/react-form-antd 4.0.3 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1495 -48
- package/dist/index.css +107 -0
- package/dist/index.css.map +1 -1
- package/dist/index.js +436 -142
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +424 -144
- package/dist/index.modern.js.map +1 -1
- package/package.json +3 -3
package/dist/index.modern.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import React, { forwardRef, useCallback, useRef, useMemo } from 'react';
|
|
1
|
+
import React, { forwardRef, useCallback, useState, useRef, useMemo } from 'react';
|
|
2
2
|
import classnames from 'classnames';
|
|
3
3
|
import ReactForm__default, { preset as preset$2, useReset, useSubmit } from '@kne/react-form';
|
|
4
4
|
export * from '@kne/react-form';
|
|
5
5
|
import { preset as preset$1, widget, hooks, hoc } from '@kne/react-form-helper';
|
|
6
6
|
export { hoc, hooks, utils, widget } from '@kne/react-form-helper';
|
|
7
7
|
import merge from 'lodash/merge';
|
|
8
|
-
import { TreeSelect, TimePicker, Input, Switch as Switch$1, Select, Radio, InputNumber,
|
|
8
|
+
import { TreeSelect, TimePicker, Input, Switch as Switch$1, Select, Radio, InputNumber, Button, DatePicker, Checkbox as Checkbox$1, Cascader as Cascader$1, Rate as Rate$1, Slider as Slider$1 } from 'antd';
|
|
9
|
+
import { IntlProvider, useIntl } from '@kne/react-intl';
|
|
10
|
+
import { CloseCircleFilled, CalendarOutlined } from '@ant-design/icons';
|
|
9
11
|
import dayjs from 'dayjs';
|
|
10
|
-
import { get } from 'lodash';
|
|
11
12
|
import useControlValue from '@kne/use-control-value';
|
|
12
13
|
|
|
13
14
|
function _extends() {
|
|
@@ -51,7 +52,7 @@ var preset = props => {
|
|
|
51
52
|
preset$2(globalParams.rules);
|
|
52
53
|
};
|
|
53
54
|
|
|
54
|
-
const _excluded$
|
|
55
|
+
const _excluded$5 = ["className", "cache", "enterSubmit", "scrollToError", "scrollProps", "type", "size", "children"];
|
|
55
56
|
const {
|
|
56
57
|
ScrollToError,
|
|
57
58
|
EnterSubmit,
|
|
@@ -70,7 +71,7 @@ const Form = forwardRef((originProps, ref) => {
|
|
|
70
71
|
},
|
|
71
72
|
children
|
|
72
73
|
} = originProps,
|
|
73
|
-
props = _objectWithoutPropertiesLoose(originProps, _excluded$
|
|
74
|
+
props = _objectWithoutPropertiesLoose(originProps, _excluded$5);
|
|
74
75
|
const baseClass = 'react-form';
|
|
75
76
|
let computedClass = baseClass;
|
|
76
77
|
const {
|
|
@@ -106,20 +107,69 @@ const Form = forwardRef((originProps, ref) => {
|
|
|
106
107
|
}) : null, enterSubmit ? /*#__PURE__*/React.createElement(EnterSubmit, null, maxLabel) : maxLabel)));
|
|
107
108
|
});
|
|
108
109
|
|
|
110
|
+
const locale$1 = {
|
|
111
|
+
PleaseSelect: '请选择{label}',
|
|
112
|
+
PleaseInput: '请输入{label}',
|
|
113
|
+
StartTime: '开始时间',
|
|
114
|
+
EndTime: '结束时间',
|
|
115
|
+
StartDate: '开始日期',
|
|
116
|
+
EndDate: '结束日期',
|
|
117
|
+
SoFar: '至今'
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const locale = {
|
|
121
|
+
PleaseSelect: 'Please select {label}',
|
|
122
|
+
PleaseInput: 'Please enter {label}',
|
|
123
|
+
StartTime: 'Start Time',
|
|
124
|
+
EndTime: 'End Time',
|
|
125
|
+
StartDate: 'Start Date',
|
|
126
|
+
EndDate: 'End Date',
|
|
127
|
+
SoFar: 'Present'
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const _excluded$4 = ["locale"];
|
|
131
|
+
const localeMap = {
|
|
132
|
+
'zh-CN': locale$1,
|
|
133
|
+
'en-US': locale
|
|
134
|
+
};
|
|
135
|
+
const withLocale = WrappedComponent => {
|
|
136
|
+
const WithLocaleComponent = _ref => {
|
|
137
|
+
let {
|
|
138
|
+
locale = 'zh-CN'
|
|
139
|
+
} = _ref,
|
|
140
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded$4);
|
|
141
|
+
const messages = localeMap[locale] || locale$1;
|
|
142
|
+
return /*#__PURE__*/React.createElement(IntlProvider, {
|
|
143
|
+
locale: locale,
|
|
144
|
+
messages: messages
|
|
145
|
+
}, /*#__PURE__*/React.createElement(WrappedComponent, props));
|
|
146
|
+
};
|
|
147
|
+
WithLocaleComponent.displayName = `withLocale(${WrappedComponent.displayName || WrappedComponent.name || 'Component'})`;
|
|
148
|
+
return WithLocaleComponent;
|
|
149
|
+
};
|
|
150
|
+
|
|
109
151
|
const {
|
|
110
152
|
useOnChange: useOnChange$b
|
|
111
153
|
} = hooks;
|
|
112
|
-
const
|
|
113
|
-
|
|
154
|
+
const TreeSelectInner = props => {
|
|
155
|
+
const {
|
|
156
|
+
formatMessage
|
|
157
|
+
} = useIntl();
|
|
158
|
+
const mergedProps = Object.assign({}, {
|
|
114
159
|
fieldName: 'treeSelect'
|
|
115
160
|
}, props);
|
|
116
161
|
const render = useOnChange$b(Object.assign({
|
|
117
|
-
placeholder:
|
|
118
|
-
|
|
162
|
+
placeholder: formatMessage({
|
|
163
|
+
id: 'PleaseSelect'
|
|
164
|
+
}, {
|
|
165
|
+
label: mergedProps.label || ''
|
|
166
|
+
})
|
|
167
|
+
}, mergedProps));
|
|
119
168
|
return render(TreeSelect);
|
|
120
169
|
};
|
|
121
|
-
|
|
122
|
-
|
|
170
|
+
TreeSelectInner.Field = TreeSelect;
|
|
171
|
+
TreeSelectInner.TreeNode = TreeSelect.TreeNode;
|
|
172
|
+
const _TreeSelect = withLocale(TreeSelectInner);
|
|
123
173
|
|
|
124
174
|
const {
|
|
125
175
|
useOnChange: useOnChange$a
|
|
@@ -127,41 +177,64 @@ const {
|
|
|
127
177
|
const {
|
|
128
178
|
RangePicker: RangePicker$1
|
|
129
179
|
} = TimePicker;
|
|
130
|
-
const
|
|
131
|
-
|
|
180
|
+
const TimePickerInner = props => {
|
|
181
|
+
const {
|
|
182
|
+
formatMessage
|
|
183
|
+
} = useIntl();
|
|
184
|
+
const mergedProps = Object.assign({}, {
|
|
132
185
|
fieldName: 'timePicker'
|
|
133
186
|
}, props);
|
|
134
187
|
const render = useOnChange$a(Object.assign({
|
|
135
|
-
placeholder:
|
|
136
|
-
|
|
188
|
+
placeholder: formatMessage({
|
|
189
|
+
id: 'PleaseSelect'
|
|
190
|
+
}, {
|
|
191
|
+
label: mergedProps.label || ''
|
|
192
|
+
})
|
|
193
|
+
}, mergedProps));
|
|
137
194
|
return render(TimePicker);
|
|
138
195
|
};
|
|
139
|
-
|
|
140
|
-
const
|
|
141
|
-
|
|
196
|
+
TimePickerInner.Field = TimePicker;
|
|
197
|
+
const RangePickerInner$1 = props => {
|
|
198
|
+
const {
|
|
199
|
+
formatMessage
|
|
200
|
+
} = useIntl();
|
|
201
|
+
const mergedProps = Object.assign({}, {
|
|
142
202
|
fieldName: 'rangeTimePicker'
|
|
143
203
|
}, props);
|
|
144
204
|
const render = useOnChange$a(Object.assign({
|
|
145
|
-
placeholder:
|
|
146
|
-
|
|
205
|
+
placeholder: formatMessage({
|
|
206
|
+
id: 'PleaseSelect'
|
|
207
|
+
}, {
|
|
208
|
+
label: mergedProps.label || ''
|
|
209
|
+
})
|
|
210
|
+
}, mergedProps));
|
|
147
211
|
return render(RangePicker$1);
|
|
148
212
|
};
|
|
149
|
-
|
|
150
|
-
_TimePicker
|
|
213
|
+
RangePickerInner$1.Field = RangePicker$1;
|
|
214
|
+
const _TimePicker = withLocale(TimePickerInner);
|
|
215
|
+
_TimePicker.RangePicker = withLocale(RangePickerInner$1);
|
|
151
216
|
|
|
152
217
|
const {
|
|
153
218
|
useDecorator: useDecorator$2
|
|
154
219
|
} = hooks;
|
|
155
|
-
const
|
|
156
|
-
|
|
220
|
+
const TextAreaInner = props => {
|
|
221
|
+
const {
|
|
222
|
+
formatMessage
|
|
223
|
+
} = useIntl();
|
|
224
|
+
const mergedProps = Object.assign({}, {
|
|
157
225
|
fieldName: 'textArea'
|
|
158
226
|
}, props);
|
|
159
227
|
const render = useDecorator$2(Object.assign({
|
|
160
|
-
placeholder:
|
|
161
|
-
|
|
228
|
+
placeholder: formatMessage({
|
|
229
|
+
id: 'PleaseInput'
|
|
230
|
+
}, {
|
|
231
|
+
label: mergedProps.label
|
|
232
|
+
})
|
|
233
|
+
}, mergedProps));
|
|
162
234
|
return render(Input.TextArea);
|
|
163
235
|
};
|
|
164
|
-
|
|
236
|
+
TextAreaInner.Field = Input.TextArea;
|
|
237
|
+
const TextArea = withLocale(TextAreaInner);
|
|
165
238
|
|
|
166
239
|
const {
|
|
167
240
|
useOnChange: useOnChange$9,
|
|
@@ -184,18 +257,26 @@ Switch.Field = Switch$1;
|
|
|
184
257
|
const {
|
|
185
258
|
useOnChange: useOnChange$8
|
|
186
259
|
} = hooks;
|
|
187
|
-
const
|
|
188
|
-
|
|
260
|
+
const SelectInner = props => {
|
|
261
|
+
const {
|
|
262
|
+
formatMessage
|
|
263
|
+
} = useIntl();
|
|
264
|
+
const mergedProps = Object.assign({}, {
|
|
189
265
|
fieldName: 'select'
|
|
190
266
|
}, props);
|
|
191
267
|
const render = useOnChange$8(Object.assign({
|
|
192
|
-
placeholder:
|
|
193
|
-
|
|
268
|
+
placeholder: formatMessage({
|
|
269
|
+
id: 'PleaseSelect'
|
|
270
|
+
}, {
|
|
271
|
+
label: mergedProps.label || ''
|
|
272
|
+
})
|
|
273
|
+
}, mergedProps));
|
|
194
274
|
return render(Select);
|
|
195
275
|
};
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
276
|
+
SelectInner.Field = Select;
|
|
277
|
+
SelectInner.Option = Select.Option;
|
|
278
|
+
SelectInner.OptGroup = Select.OptGroup;
|
|
279
|
+
const _Select = withLocale(SelectInner);
|
|
199
280
|
|
|
200
281
|
const _excluded$3 = ["onChange"];
|
|
201
282
|
const {
|
|
@@ -226,133 +307,303 @@ _RadioGroup.Radio = Radio;
|
|
|
226
307
|
const {
|
|
227
308
|
useDecorator: useDecorator$1
|
|
228
309
|
} = hooks;
|
|
229
|
-
const
|
|
230
|
-
|
|
310
|
+
const InputNumberFieldInner = props => {
|
|
311
|
+
const {
|
|
312
|
+
formatMessage
|
|
313
|
+
} = useIntl();
|
|
314
|
+
const mergedProps = Object.assign({}, {
|
|
231
315
|
fieldName: 'inputNumber',
|
|
232
316
|
autoComplete: 'off'
|
|
233
317
|
}, props);
|
|
234
318
|
const render = useDecorator$1(Object.assign({
|
|
235
|
-
placeholder:
|
|
236
|
-
|
|
319
|
+
placeholder: formatMessage({
|
|
320
|
+
id: 'PleaseInput'
|
|
321
|
+
}, {
|
|
322
|
+
label: mergedProps.label
|
|
323
|
+
})
|
|
324
|
+
}, mergedProps));
|
|
237
325
|
return render(InputNumber);
|
|
238
326
|
};
|
|
239
|
-
|
|
327
|
+
InputNumberFieldInner.Field = InputNumber;
|
|
328
|
+
const InputNumberField = withLocale(InputNumberFieldInner);
|
|
240
329
|
|
|
241
330
|
const {
|
|
242
331
|
useDecorator
|
|
243
332
|
} = hooks;
|
|
244
|
-
const
|
|
245
|
-
|
|
333
|
+
const InputFieldInner = props => {
|
|
334
|
+
const {
|
|
335
|
+
formatMessage
|
|
336
|
+
} = useIntl();
|
|
337
|
+
const mergedProps = Object.assign({}, {
|
|
246
338
|
fieldName: 'input',
|
|
247
339
|
autoComplete: 'off'
|
|
248
340
|
}, props);
|
|
249
341
|
const render = useDecorator(Object.assign({
|
|
250
|
-
placeholder:
|
|
251
|
-
|
|
342
|
+
placeholder: formatMessage({
|
|
343
|
+
id: 'PleaseInput'
|
|
344
|
+
}, {
|
|
345
|
+
label: mergedProps.label
|
|
346
|
+
})
|
|
347
|
+
}, mergedProps));
|
|
252
348
|
return render(Input);
|
|
253
349
|
};
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
350
|
+
InputFieldInner.Field = Input;
|
|
351
|
+
const PasswordInner = props => {
|
|
352
|
+
const {
|
|
353
|
+
formatMessage
|
|
354
|
+
} = useIntl();
|
|
355
|
+
const mergedProps = Object.assign({}, {
|
|
257
356
|
fieldName: 'password',
|
|
258
357
|
autoComplete: 'off'
|
|
259
358
|
}, props);
|
|
260
359
|
const render = useDecorator(Object.assign({
|
|
261
|
-
placeholder:
|
|
262
|
-
|
|
360
|
+
placeholder: formatMessage({
|
|
361
|
+
id: 'PleaseInput'
|
|
362
|
+
}, {
|
|
363
|
+
label: mergedProps.label
|
|
364
|
+
})
|
|
365
|
+
}, mergedProps));
|
|
263
366
|
return render(Input.Password);
|
|
264
367
|
};
|
|
265
|
-
|
|
368
|
+
PasswordInner.Field = Input.Password;
|
|
369
|
+
const InputField = withLocale(InputFieldInner);
|
|
370
|
+
InputField.Password = withLocale(PasswordInner);
|
|
266
371
|
|
|
267
|
-
const _excluded$2 = ["soFarText", "
|
|
372
|
+
const _excluded$2 = ["soFarText", "soFarValue", "picker"];
|
|
268
373
|
const {
|
|
269
374
|
useOnChange: useOnChange$6
|
|
270
375
|
} = hooks;
|
|
271
|
-
const
|
|
376
|
+
const PickerTodayInner = _ref => {
|
|
272
377
|
let {
|
|
273
378
|
soFarText,
|
|
274
|
-
|
|
275
|
-
|
|
379
|
+
soFarValue = 'soFar',
|
|
380
|
+
picker = 'date'
|
|
276
381
|
} = _ref,
|
|
277
382
|
props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
|
|
383
|
+
const {
|
|
384
|
+
formatMessage
|
|
385
|
+
} = useIntl();
|
|
278
386
|
const [data, onChange] = useControlValue(props);
|
|
279
|
-
const
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
387
|
+
const [openStart, setOpenStart] = useState(false);
|
|
388
|
+
const [openEnd, setOpenEnd] = useState(false);
|
|
389
|
+
const [tempStart, setTempStart] = useState(null); // 临时存储开始时间
|
|
390
|
+
const [tempEnd, setTempEnd] = useState(null); // 临时存储结束时间
|
|
391
|
+
const [hovering, setHovering] = useState(false); // hover 状态
|
|
392
|
+
const containerRef = useRef(null);
|
|
393
|
+
const isSwitchingRef = useRef(false); // 标记是否正在切换到结束时间选择
|
|
394
|
+
|
|
395
|
+
const soFarLabel = soFarText || formatMessage({
|
|
396
|
+
id: 'SoFar'
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
// 判断是否有值
|
|
400
|
+
const hasValue = useMemo(() => {
|
|
401
|
+
const [start, end] = data || [];
|
|
402
|
+
return !!(start || end);
|
|
403
|
+
}, [data]);
|
|
404
|
+
|
|
405
|
+
// 判断是否为"至今"
|
|
406
|
+
const isSoFar = useMemo(() => {
|
|
407
|
+
const [, end] = data || [];
|
|
408
|
+
return end === soFarValue;
|
|
409
|
+
}, [data, soFarValue]);
|
|
410
|
+
|
|
411
|
+
// 解析数据
|
|
412
|
+
const parsedValue = useMemo(() => {
|
|
413
|
+
const [start, end] = data || [];
|
|
285
414
|
return {
|
|
286
|
-
start:
|
|
287
|
-
end:
|
|
288
|
-
showZj: d === '至今',
|
|
289
|
-
placeholder: p
|
|
415
|
+
start: start ? dayjs(start) : null,
|
|
416
|
+
end: isSoFar ? null : end ? dayjs(end) : null
|
|
290
417
|
};
|
|
418
|
+
}, [data, isSoFar]);
|
|
419
|
+
|
|
420
|
+
// 显示文本 - 弹窗打开时显示临时值,关闭后显示实际值
|
|
421
|
+
const displayText = useMemo(() => {
|
|
422
|
+
// 开始时间:有临时值时显示临时值
|
|
423
|
+
const startText = tempStart ? tempStart.format('YYYY-MM-DD') : parsedValue.start ? parsedValue.start.format('YYYY-MM-DD') : '';
|
|
424
|
+
|
|
425
|
+
// 结束时间:有临时值时显示临时值
|
|
426
|
+
const endText = tempEnd ? tempEnd.format('YYYY-MM-DD') : isSoFar ? soFarLabel : parsedValue.end ? parsedValue.end.format('YYYY-MM-DD') : '';
|
|
427
|
+
return {
|
|
428
|
+
start: startText,
|
|
429
|
+
end: endText
|
|
430
|
+
};
|
|
431
|
+
}, [parsedValue, isSoFar, soFarLabel, tempStart, tempEnd]);
|
|
432
|
+
|
|
433
|
+
// 点击整个Input框时,先弹出开始时间选择
|
|
434
|
+
const handleInputClick = useCallback(() => {
|
|
435
|
+
const [start] = data || [];
|
|
436
|
+
setTempStart(start ? dayjs(start) : null);
|
|
437
|
+
setOpenStart(true);
|
|
438
|
+
setOpenEnd(false);
|
|
291
439
|
}, [data]);
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
440
|
+
|
|
441
|
+
// 清除值
|
|
442
|
+
const handleClear = useCallback(e => {
|
|
443
|
+
e.stopPropagation();
|
|
444
|
+
onChange([]);
|
|
445
|
+
setTempStart(null);
|
|
446
|
+
setTempEnd(null);
|
|
447
|
+
setOpenStart(false);
|
|
448
|
+
setOpenEnd(false);
|
|
449
|
+
}, [onChange]);
|
|
450
|
+
|
|
451
|
+
// 处理开始时间变化
|
|
452
|
+
const handleStartChange = useCallback(date => {
|
|
453
|
+
setTempStart(date);
|
|
454
|
+
isSwitchingRef.current = true; // 标记正在切换
|
|
455
|
+
setOpenStart(false);
|
|
456
|
+
setTimeout(() => {
|
|
457
|
+
setOpenEnd(true);
|
|
458
|
+
isSwitchingRef.current = false;
|
|
459
|
+
}, 100);
|
|
460
|
+
}, []);
|
|
461
|
+
|
|
462
|
+
// 处理结束时间变化(选择日期时实时更新显示,选择后确认值)
|
|
463
|
+
const handleEndChange = useCallback(date => {
|
|
464
|
+
if (date) {
|
|
465
|
+
// 选择了有效日期,确认值
|
|
466
|
+
if (!tempStart) return;
|
|
467
|
+
onChange([tempStart.toISOString(), date.toISOString()]);
|
|
468
|
+
setOpenEnd(false);
|
|
469
|
+
setTempStart(null);
|
|
470
|
+
setTempEnd(null);
|
|
471
|
+
} else {
|
|
472
|
+
// 清空选择
|
|
473
|
+
setTempEnd(null);
|
|
297
474
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
475
|
+
}, [tempStart, onChange]);
|
|
476
|
+
|
|
477
|
+
// 点击"至今"按钮
|
|
478
|
+
const handleSoFarClick = useCallback(() => {
|
|
479
|
+
if (!tempStart) return;
|
|
480
|
+
onChange([tempStart.toISOString(), soFarValue]);
|
|
481
|
+
setOpenEnd(false);
|
|
482
|
+
setTempStart(null);
|
|
483
|
+
setTempEnd(null);
|
|
484
|
+
}, [tempStart, onChange, soFarValue]);
|
|
485
|
+
|
|
486
|
+
// 处理开始时间弹窗关闭(未完成选择)
|
|
487
|
+
const handleStartOpenChange = useCallback(open => {
|
|
488
|
+
if (!open) {
|
|
489
|
+
setOpenStart(false);
|
|
490
|
+
// 如果不是正在切换到结束时间,则清空临时状态
|
|
491
|
+
if (!isSwitchingRef.current) {
|
|
492
|
+
setTempStart(null);
|
|
493
|
+
}
|
|
304
494
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
495
|
+
}, []);
|
|
496
|
+
|
|
497
|
+
// 处理结束时间弹窗关闭(未完成选择)
|
|
498
|
+
const handleEndOpenChange = useCallback(open => {
|
|
499
|
+
if (!open) {
|
|
500
|
+
setOpenEnd(false);
|
|
501
|
+
// 关闭结束时间弹窗时,不修改field值
|
|
502
|
+
setTempStart(null);
|
|
503
|
+
setTempEnd(null);
|
|
504
|
+
}
|
|
505
|
+
}, []);
|
|
506
|
+
|
|
507
|
+
// 结束时间面板变化时更新临时值(用于实时显示)
|
|
508
|
+
const handleEndPanelChange = useCallback(date => {
|
|
509
|
+
setTempEnd(date);
|
|
510
|
+
}, []);
|
|
511
|
+
|
|
512
|
+
// 空的 footer(用于开始时间,保持高度一致)
|
|
513
|
+
const renderEmptyFooter = useCallback(() => /*#__PURE__*/React.createElement("div", {
|
|
514
|
+
style: {
|
|
515
|
+
height: 40
|
|
516
|
+
}
|
|
517
|
+
}), []);
|
|
518
|
+
|
|
519
|
+
// 带至今按钮的 footer
|
|
520
|
+
const renderExtraFooter = useCallback(() => {
|
|
521
|
+
const isCurrentSoFar = !tempStart && isSoFar;
|
|
522
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
523
|
+
style: {
|
|
524
|
+
textAlign: 'right'
|
|
313
525
|
}
|
|
314
|
-
},
|
|
315
|
-
|
|
526
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
527
|
+
type: isCurrentSoFar ? 'primary' : 'default',
|
|
528
|
+
onClick: handleSoFarClick
|
|
529
|
+
}, soFarLabel));
|
|
530
|
+
}, [isSoFar, tempStart, handleSoFarClick, soFarLabel]);
|
|
531
|
+
|
|
532
|
+
// 结束时间的可选日期(不能早于开始时间)
|
|
533
|
+
const endDisabledDate = useCallback(current => {
|
|
534
|
+
if (!tempStart) return false;
|
|
535
|
+
return current && current < tempStart.startOf('day');
|
|
536
|
+
}, [tempStart]);
|
|
316
537
|
return /*#__PURE__*/React.createElement("div", {
|
|
538
|
+
className: "date-picker-today-container",
|
|
539
|
+
ref: containerRef
|
|
540
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
541
|
+
className: "date-picker-today-inputs",
|
|
542
|
+
onClick: handleInputClick,
|
|
543
|
+
onMouseEnter: () => setHovering(true),
|
|
544
|
+
onMouseLeave: () => setHovering(false)
|
|
545
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
546
|
+
className: "date-picker-today-start"
|
|
547
|
+
}, /*#__PURE__*/React.createElement("input", {
|
|
548
|
+
readOnly: true,
|
|
549
|
+
placeholder: formatMessage({
|
|
550
|
+
id: 'StartDate'
|
|
551
|
+
}),
|
|
552
|
+
value: displayText.start,
|
|
553
|
+
className: "ant-input"
|
|
554
|
+
})), /*#__PURE__*/React.createElement("span", {
|
|
555
|
+
className: "date-picker-today-separator"
|
|
556
|
+
}, "~"), /*#__PURE__*/React.createElement("div", {
|
|
557
|
+
className: "date-picker-today-end"
|
|
558
|
+
}, /*#__PURE__*/React.createElement("input", {
|
|
559
|
+
readOnly: true,
|
|
560
|
+
placeholder: formatMessage({
|
|
561
|
+
id: 'EndDate'
|
|
562
|
+
}),
|
|
563
|
+
value: displayText.end,
|
|
564
|
+
className: `ant-input ${isSoFar ? 'so-far-active' : ''}`
|
|
565
|
+
})), /*#__PURE__*/React.createElement("span", {
|
|
566
|
+
className: "date-picker-today-suffix"
|
|
567
|
+
}, hasValue && hovering ? /*#__PURE__*/React.createElement(CloseCircleFilled, {
|
|
568
|
+
className: "date-picker-today-clear",
|
|
569
|
+
onClick: handleClear
|
|
570
|
+
}) : /*#__PURE__*/React.createElement(CalendarOutlined, null))), /*#__PURE__*/React.createElement(DatePicker, {
|
|
571
|
+
picker: picker,
|
|
572
|
+
open: openStart,
|
|
573
|
+
onOpenChange: handleStartOpenChange,
|
|
574
|
+
value: tempStart || parsedValue.start,
|
|
575
|
+
onChange: handleStartChange,
|
|
576
|
+
renderExtraFooter: renderEmptyFooter,
|
|
577
|
+
showNow: false,
|
|
578
|
+
getPopupContainer: () => containerRef.current || document.body,
|
|
317
579
|
style: {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
},
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
343
|
-
className: newData.showZj ? 'zhijin zhijin_show' : 'zhijin'
|
|
344
|
-
}, soFarText || '至今'), /*#__PURE__*/React.createElement(DatePicker, _extends({}, _extends({
|
|
345
|
-
showToday: false
|
|
346
|
-
}, props, {
|
|
347
|
-
placeholder: newData.showZj ? '' : newData.placeholder[1]
|
|
348
|
-
}, endProps, {
|
|
349
|
-
value: newData.end
|
|
350
|
-
}), {
|
|
351
|
-
ref: ref_d,
|
|
352
|
-
onChange: endChange,
|
|
353
|
-
renderExtraFooter: foot
|
|
354
|
-
}))));
|
|
580
|
+
width: 0,
|
|
581
|
+
height: 0,
|
|
582
|
+
visibility: 'hidden',
|
|
583
|
+
position: 'absolute'
|
|
584
|
+
},
|
|
585
|
+
placement: "bottomLeft"
|
|
586
|
+
}), /*#__PURE__*/React.createElement(DatePicker, {
|
|
587
|
+
picker: picker,
|
|
588
|
+
open: openEnd,
|
|
589
|
+
onOpenChange: handleEndOpenChange,
|
|
590
|
+
value: tempEnd || parsedValue.end,
|
|
591
|
+
onChange: handleEndChange,
|
|
592
|
+
onPanelChange: handleEndPanelChange,
|
|
593
|
+
disabledDate: endDisabledDate,
|
|
594
|
+
renderExtraFooter: renderExtraFooter,
|
|
595
|
+
showNow: false,
|
|
596
|
+
getPopupContainer: () => containerRef.current || document.body,
|
|
597
|
+
style: {
|
|
598
|
+
width: 0,
|
|
599
|
+
height: 0,
|
|
600
|
+
visibility: 'hidden',
|
|
601
|
+
position: 'absolute'
|
|
602
|
+
},
|
|
603
|
+
placement: "bottomLeft"
|
|
604
|
+
}));
|
|
355
605
|
};
|
|
606
|
+
const PickerToday = withLocale(PickerTodayInner);
|
|
356
607
|
const RangePickerToday = props => {
|
|
357
608
|
props = Object.assign({}, {
|
|
358
609
|
fieldName: 'rangePickerToday'
|
|
@@ -370,49 +621,78 @@ const {
|
|
|
370
621
|
RangePicker,
|
|
371
622
|
WeekPicker
|
|
372
623
|
} = DatePicker;
|
|
373
|
-
const
|
|
374
|
-
|
|
624
|
+
const DatePickerInner = props => {
|
|
625
|
+
const {
|
|
626
|
+
formatMessage
|
|
627
|
+
} = useIntl();
|
|
628
|
+
const mergedProps = Object.assign({}, {
|
|
375
629
|
fieldName: 'datePicker'
|
|
376
630
|
}, props);
|
|
377
631
|
const render = useOnChange$5(Object.assign({
|
|
378
|
-
placeholder:
|
|
379
|
-
|
|
632
|
+
placeholder: formatMessage({
|
|
633
|
+
id: 'PleaseSelect'
|
|
634
|
+
}, {
|
|
635
|
+
label: mergedProps.label || ''
|
|
636
|
+
})
|
|
637
|
+
}, mergedProps));
|
|
380
638
|
return render(DatePicker);
|
|
381
639
|
};
|
|
382
|
-
|
|
383
|
-
const
|
|
384
|
-
|
|
640
|
+
DatePickerInner.Field = DatePicker;
|
|
641
|
+
const MonthPickerInner = props => {
|
|
642
|
+
const {
|
|
643
|
+
formatMessage
|
|
644
|
+
} = useIntl();
|
|
645
|
+
const mergedProps = Object.assign({}, {
|
|
385
646
|
fieldName: 'monthDatePicker'
|
|
386
647
|
}, props);
|
|
387
648
|
const render = useOnChange$5(Object.assign({
|
|
388
|
-
placeholder: [
|
|
389
|
-
|
|
649
|
+
placeholder: [formatMessage({
|
|
650
|
+
id: 'StartTime'
|
|
651
|
+
}), formatMessage({
|
|
652
|
+
id: 'EndTime'
|
|
653
|
+
})]
|
|
654
|
+
}, mergedProps));
|
|
390
655
|
return render(MonthPicker);
|
|
391
656
|
};
|
|
392
|
-
|
|
393
|
-
const
|
|
394
|
-
|
|
657
|
+
MonthPickerInner.Field = MonthPicker;
|
|
658
|
+
const RangePickerInner = props => {
|
|
659
|
+
const {
|
|
660
|
+
formatMessage
|
|
661
|
+
} = useIntl();
|
|
662
|
+
const mergedProps = Object.assign({}, {
|
|
395
663
|
fieldName: 'rangeDatePicker'
|
|
396
664
|
}, props);
|
|
397
665
|
const render = useOnChange$5(Object.assign({
|
|
398
|
-
placeholder: [
|
|
399
|
-
|
|
666
|
+
placeholder: [formatMessage({
|
|
667
|
+
id: 'StartTime'
|
|
668
|
+
}), formatMessage({
|
|
669
|
+
id: 'EndTime'
|
|
670
|
+
})]
|
|
671
|
+
}, mergedProps));
|
|
400
672
|
return render(RangePicker);
|
|
401
673
|
};
|
|
402
|
-
|
|
403
|
-
const
|
|
404
|
-
|
|
674
|
+
RangePickerInner.Field = RangePicker;
|
|
675
|
+
const WeekPickerInner = props => {
|
|
676
|
+
const {
|
|
677
|
+
formatMessage
|
|
678
|
+
} = useIntl();
|
|
679
|
+
const mergedProps = Object.assign({}, {
|
|
405
680
|
fieldName: 'weekDatePicker'
|
|
406
681
|
}, props);
|
|
407
682
|
const render = useOnChange$5(Object.assign({
|
|
408
|
-
placeholder: [
|
|
409
|
-
|
|
683
|
+
placeholder: [formatMessage({
|
|
684
|
+
id: 'StartTime'
|
|
685
|
+
}), formatMessage({
|
|
686
|
+
id: 'EndTime'
|
|
687
|
+
})]
|
|
688
|
+
}, mergedProps));
|
|
410
689
|
return render(WeekPicker);
|
|
411
690
|
};
|
|
412
|
-
|
|
413
|
-
_DatePicker
|
|
414
|
-
_DatePicker.
|
|
415
|
-
_DatePicker.
|
|
691
|
+
WeekPickerInner.Field = WeekPicker;
|
|
692
|
+
const _DatePicker = withLocale(DatePickerInner);
|
|
693
|
+
_DatePicker.MonthPicker = withLocale(MonthPickerInner);
|
|
694
|
+
_DatePicker.RangePicker = withLocale(RangePickerInner);
|
|
695
|
+
_DatePicker.WeekPicker = withLocale(WeekPickerInner);
|
|
416
696
|
|
|
417
697
|
const {
|
|
418
698
|
useOnChange: useOnChange$4
|