amis 1.6.5-beta.4 → 1.8.0-beta.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/lib/Schema.d.ts +3 -2
- package/lib/Schema.js +0 -1
- package/lib/Schema.js.map +2 -2
- package/lib/components/Alert2.js +4 -2
- package/lib/components/Alert2.js.map +2 -2
- package/lib/components/Avatar.d.ts +20 -20
- package/lib/components/Card.d.ts +20 -20
- package/lib/components/CityArea.js +3 -0
- package/lib/components/CityArea.js.map +2 -2
- package/lib/components/DatePicker.d.ts +3 -0
- package/lib/components/DatePicker.js +41 -7
- package/lib/components/DatePicker.js.map +2 -2
- package/lib/components/ListGroup.d.ts +21 -21
- package/lib/components/PopUp.js +2 -1
- package/lib/components/PopUp.js.map +2 -2
- package/lib/components/Progress.js +12 -9
- package/lib/components/Progress.js.map +2 -2
- package/lib/components/Range.js.map +2 -2
- package/lib/components/Tabs.d.ts +27 -23
- package/lib/components/Tabs.js +37 -22
- package/lib/components/Tabs.js.map +2 -2
- package/lib/components/TooltipWrapper.d.ts +21 -20
- package/lib/components/TooltipWrapper.js +2 -2
- package/lib/components/TooltipWrapper.js.map +2 -2
- package/lib/components/calendar/Calendar.js +16 -12
- package/lib/components/calendar/Calendar.js.map +2 -2
- package/lib/components/formula/Editor.d.ts +3 -1
- package/lib/components/formula/Editor.js +20 -2
- package/lib/components/formula/Editor.js.map +2 -2
- package/lib/components/formula/Picker.d.ts +5 -0
- package/lib/components/formula/Picker.js +19 -4
- package/lib/components/formula/Picker.js.map +2 -2
- package/lib/components/icons.js +2 -0
- package/lib/components/icons.js.map +2 -2
- package/lib/factory.js +2 -2
- package/lib/factory.js.map +2 -2
- package/lib/icons/trash.js +10 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/index.js.map +2 -2
- package/lib/renderers/Action.d.ts +1 -1
- package/lib/renderers/Action.js.map +2 -2
- package/lib/renderers/ButtonGroup.d.ts +2 -2
- package/lib/renderers/ButtonGroup.js.map +1 -1
- package/lib/renderers/Dialog.d.ts +4 -0
- package/lib/renderers/Dialog.js +4 -3
- package/lib/renderers/Dialog.js.map +2 -2
- package/lib/renderers/DropDownButton.d.ts +2 -0
- package/lib/renderers/DropDownButton.js +13 -4
- package/lib/renderers/DropDownButton.js.map +2 -2
- package/lib/renderers/Form/Combo.d.ts +4 -3
- package/lib/renderers/Form/Combo.js +81 -32
- package/lib/renderers/Form/Combo.js.map +2 -2
- package/lib/renderers/Form/InputCity.js +4 -1
- package/lib/renderers/Form/InputCity.js.map +2 -2
- package/lib/renderers/Form/InputColor.js +3 -1
- package/lib/renderers/Form/InputColor.js.map +2 -2
- package/lib/renderers/Form/InputDate.js +3 -1
- package/lib/renderers/Form/InputDate.js.map +2 -2
- package/lib/renderers/Form/InputDateRange.js +3 -1
- package/lib/renderers/Form/InputDateRange.js.map +2 -2
- package/lib/renderers/Form/InputExcel.d.ts +4 -0
- package/lib/renderers/Form/InputExcel.js +33 -6
- package/lib/renderers/Form/InputExcel.js.map +2 -2
- package/lib/renderers/Form/InputFile.d.ts +4 -1
- package/lib/renderers/Form/InputFile.js +9 -0
- package/lib/renderers/Form/InputFile.js.map +2 -2
- package/lib/renderers/Form/InputFormula.d.ts +4 -0
- package/lib/renderers/Form/InputFormula.js +2 -2
- package/lib/renderers/Form/InputFormula.js.map +2 -2
- package/lib/renderers/Form/InputImage.d.ts +4 -1
- package/lib/renderers/Form/InputImage.js +12 -2
- package/lib/renderers/Form/InputImage.js.map +2 -2
- package/lib/renderers/Form/InputRange.d.ts +27 -9
- package/lib/renderers/Form/InputRange.js +88 -23
- package/lib/renderers/Form/InputRange.js.map +2 -2
- package/lib/renderers/Form/InputTable.js +4 -2
- package/lib/renderers/Form/InputTable.js.map +2 -2
- package/lib/renderers/Form/Select.js +3 -1
- package/lib/renderers/Form/Select.js.map +2 -2
- package/lib/renderers/Form/Switch.d.ts +7 -6
- package/lib/renderers/Form/Switch.js +4 -1
- package/lib/renderers/Form/Switch.js.map +2 -2
- package/lib/renderers/Log.js +2 -1
- package/lib/renderers/Log.js.map +2 -2
- package/lib/renderers/Page.js +2 -3
- package/lib/renderers/Page.js.map +2 -2
- package/lib/renderers/PopOver.js +1 -1
- package/lib/renderers/PopOver.js.map +2 -2
- package/lib/renderers/Progress.d.ts +1 -1
- package/lib/renderers/Progress.js +1 -1
- package/lib/renderers/Progress.js.map +2 -2
- package/lib/renderers/Table/TableRow.js +1 -1
- package/lib/renderers/Table/TableRow.js.map +2 -2
- package/lib/renderers/Tabs.d.ts +10 -2
- package/lib/renderers/Tabs.js +3 -3
- package/lib/renderers/Tabs.js.map +2 -2
- package/lib/renderers/TooltipWrapper.d.ts +104 -0
- package/lib/renderers/TooltipWrapper.js +59 -0
- package/lib/renderers/TooltipWrapper.js.map +13 -0
- package/lib/renderers/Video.d.ts +6 -0
- package/lib/renderers/Video.js +13 -6
- package/lib/renderers/Video.js.map +2 -2
- package/lib/store/table.js +1 -1
- package/lib/store/table.js.map +2 -2
- package/lib/themes/ang-ie11.css +242 -46
- package/lib/themes/ang.css +250 -41
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +242 -46
- package/lib/themes/antd.css +250 -41
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +231 -35
- package/lib/themes/cxd.css +252 -42
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +242 -46
- package/lib/themes/dark.css +250 -41
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default-ie11.css +231 -35
- package/lib/themes/default.css +252 -42
- package/lib/themes/default.css.map +1 -1
- package/package.json +1 -1
- package/schema.json +15871 -608
- package/scss/_properties.scss +23 -12
- package/scss/components/_alert.scss +1 -1
- package/scss/components/_button-group.scss +15 -0
- package/scss/components/_city-area.scss +2 -0
- package/scss/components/_formula.scss +18 -0
- package/scss/components/_popup.scss +13 -3
- package/scss/components/_progress.scss +3 -8
- package/scss/components/_tabs.scss +145 -13
- package/scss/components/_tooltip.scss +72 -0
- package/scss/components/form/_date.scss +13 -0
- package/scss/components/form/_number.scss +2 -0
- package/scss/components/form/_switch.scss +1 -3
- package/scss/themes/_cxd-variables.scss +2 -1
- package/sdk/ang-ie11.css +287 -48
- package/sdk/ang.css +295 -43
- package/sdk/antd-ie11.css +287 -48
- package/sdk/antd.css +295 -43
- package/sdk/barcode.js +51 -51
- package/sdk/charts.js +14 -14
- package/sdk/codemirror.js +7 -7
- package/sdk/color-picker.js +65 -65
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +276 -37
- package/sdk/cxd.css +297 -44
- package/sdk/dark-ie11.css +287 -48
- package/sdk/dark.css +295 -43
- package/sdk/exceljs.js +1 -1
- package/sdk/markdown.js +69 -69
- package/sdk/papaparse.js +1 -1
- package/sdk/renderers/Form/CityDB.js +1 -1
- package/sdk/rest.js +17 -17
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +276 -37
- package/sdk/sdk.css +297 -44
- package/sdk/sdk.js +1251 -1247
- package/sdk/thirds/hls.js/hls.js +1 -1
- package/sdk/thirds/mpegts.js/mpegts.js +1 -1
- package/sdk/tinymce.js +57 -57
- package/src/Schema.ts +5 -2
- package/src/components/Alert2.tsx +9 -3
- package/src/components/CityArea.tsx +3 -0
- package/src/components/DatePicker.tsx +56 -18
- package/src/components/PopUp.tsx +6 -5
- package/src/components/Progress.tsx +8 -12
- package/src/components/Range.tsx +7 -1
- package/src/components/Tabs.tsx +51 -21
- package/src/components/TooltipWrapper.tsx +4 -1
- package/src/components/calendar/Calendar.tsx +17 -12
- package/src/components/formula/Editor.tsx +34 -3
- package/src/components/formula/Picker.tsx +28 -1
- package/src/components/icons.tsx +2 -0
- package/src/factory.tsx +2 -2
- package/src/icons/trash.svg +8 -0
- package/src/index.tsx +1 -0
- package/src/renderers/Action.tsx +2 -1
- package/src/renderers/ButtonGroup.tsx +2 -2
- package/src/renderers/Dialog.tsx +17 -3
- package/src/renderers/DropDownButton.tsx +14 -3
- package/src/renderers/Form/Combo.tsx +84 -26
- package/src/renderers/Form/InputCity.tsx +13 -1
- package/src/renderers/Form/InputColor.tsx +2 -0
- package/src/renderers/Form/InputDate.tsx +2 -0
- package/src/renderers/Form/InputDateRange.tsx +2 -0
- package/src/renderers/Form/InputExcel.tsx +27 -5
- package/src/renderers/Form/InputFile.tsx +13 -1
- package/src/renderers/Form/InputFormula.tsx +7 -0
- package/src/renderers/Form/InputImage.tsx +32 -12
- package/src/renderers/Form/InputRange.tsx +95 -40
- package/src/renderers/Form/InputTable.tsx +6 -2
- package/src/renderers/Form/Select.tsx +2 -0
- package/src/renderers/Form/Switch.tsx +16 -9
- package/src/renderers/Log.tsx +2 -1
- package/src/renderers/Page.tsx +1 -2
- package/src/renderers/PopOver.tsx +1 -1
- package/src/renderers/Progress.tsx +2 -2
- package/src/renderers/Table/TableRow.tsx +1 -1
- package/src/renderers/Tabs.tsx +16 -4
- package/src/renderers/TooltipWrapper.tsx +219 -0
- package/src/renderers/Video.tsx +21 -6
- package/src/store/table.ts +1 -1
package/src/factory.tsx
CHANGED
@@ -518,13 +518,13 @@ export function render(
|
|
518
518
|
// 进行文本替换
|
519
519
|
if (env.replaceText && isObject(env.replaceText)) {
|
520
520
|
const replaceKeys = Object.keys(env.replaceText);
|
521
|
-
replaceKeys.sort().
|
521
|
+
replaceKeys.sort((a, b) => b.length - a.length); // 避免用户将短的放前面
|
522
522
|
const replaceTextIgnoreKeys = new Set(env.replaceTextIgnoreKeys || []);
|
523
523
|
JSONTraverse(schema, (value: any, key: string, object: any) => {
|
524
524
|
if (typeof value === 'string' && !replaceTextIgnoreKeys.has(key)) {
|
525
525
|
for (const replaceKey of replaceKeys) {
|
526
526
|
if (~value.indexOf(replaceKey)) {
|
527
|
-
object[key] = value.replaceAll(
|
527
|
+
value = object[key] = value.replaceAll(
|
528
528
|
replaceKey,
|
529
529
|
env.replaceText[replaceKey]
|
530
530
|
);
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3
|
+
<title>4.图标元件/3.操作/删除</title>
|
4
|
+
<g id="4.图标元件/3.操作/删除" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
5
|
+
<rect id="矩形" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="15" height="15"></rect>
|
6
|
+
<path d="M14,3.499 L14,4.5 L12.497,4.5 L12.498,14.5 L3.498,14.5 L3.497,4.5 L2,4.5 L2,3.499 L14,3.499 Z M11.498,4.5 L4.497,4.5 L4.497,13.5 L11.498,13.5 L11.498,4.5 Z M6.998,7.499 L6.998,11.499 L5.998,11.499 L5.998,7.499 L6.998,7.499 Z M9.998,7.499 L9.998,11.499 L8.998,11.499 L8.998,7.499 L9.998,7.499 Z M9.999,1.5 L9.999,2.499 L5.998,2.499 L5.998,1.5 L9.999,1.5 Z" id="形状结合" fill="#151B26"></path>
|
7
|
+
</g>
|
8
|
+
</svg>
|
package/src/index.tsx
CHANGED
package/src/renderers/Action.tsx
CHANGED
@@ -15,12 +15,12 @@ export interface ButtonGroupSchema extends BaseSchema {
|
|
15
15
|
type: 'button-group';
|
16
16
|
|
17
17
|
/**
|
18
|
-
* 给 Button 配置 className
|
18
|
+
* @deprecated 给 Button 配置 className。建议用btnLevel
|
19
19
|
*/
|
20
20
|
btnClassName?: SchemaClassName;
|
21
21
|
|
22
22
|
/**
|
23
|
-
* 给选中态 Button 配置 className
|
23
|
+
* @deprecated 给选中态 Button 配置 className。建议用btnActiveLevel
|
24
24
|
*/
|
25
25
|
btnActiveClassName: string;
|
26
26
|
|
package/src/renderers/Dialog.tsx
CHANGED
@@ -90,6 +90,11 @@ export interface DialogSchema extends BaseSchema {
|
|
90
90
|
* 是否显示错误信息
|
91
91
|
*/
|
92
92
|
showErrorMsg?: boolean;
|
93
|
+
|
94
|
+
/**
|
95
|
+
* 是否显示 spinner
|
96
|
+
*/
|
97
|
+
showLoading?: boolean;
|
93
98
|
}
|
94
99
|
|
95
100
|
export type DialogSchemaBase = Omit<DialogSchema, 'type'>;
|
@@ -424,13 +429,22 @@ export default class Dialog extends React.Component<DialogProps> {
|
|
424
429
|
return null;
|
425
430
|
}
|
426
431
|
|
427
|
-
const {
|
432
|
+
const {
|
433
|
+
store,
|
434
|
+
render,
|
435
|
+
classnames: cx,
|
436
|
+
showErrorMsg,
|
437
|
+
showLoading
|
438
|
+
} = this.props;
|
428
439
|
|
429
440
|
return (
|
430
441
|
<div className={cx('Modal-footer')}>
|
431
|
-
{store.loading ||
|
442
|
+
{(showLoading !== false && store.loading) ||
|
443
|
+
(showErrorMsg !== false && store.error) ? (
|
432
444
|
<div className={cx('Dialog-info')} key="info">
|
433
|
-
|
445
|
+
{showLoading !== false ? (
|
446
|
+
<Spinner size="sm" key="info" show={store.loading} />
|
447
|
+
) : null}
|
434
448
|
{store.error && showErrorMsg !== false ? (
|
435
449
|
<span className={cx('Dialog-error')}>{store.msg}</span>
|
436
450
|
) : null}
|
@@ -147,12 +147,14 @@ export default class DropDownButton extends React.Component<
|
|
147
147
|
};
|
148
148
|
|
149
149
|
target: any;
|
150
|
+
timer: ReturnType<typeof setTimeout>;
|
150
151
|
constructor(props: DropDownButtonProps) {
|
151
152
|
super(props);
|
152
153
|
|
153
154
|
this.open = this.open.bind(this);
|
154
155
|
this.close = this.close.bind(this);
|
155
156
|
this.toogle = this.toogle.bind(this);
|
157
|
+
this.keepOpen = this.keepOpen.bind(this);
|
156
158
|
this.domRef = this.domRef.bind(this);
|
157
159
|
}
|
158
160
|
|
@@ -183,9 +185,17 @@ export default class DropDownButton extends React.Component<
|
|
183
185
|
}
|
184
186
|
|
185
187
|
close() {
|
186
|
-
this.
|
187
|
-
|
188
|
-
|
188
|
+
this.timer = setTimeout(() => {
|
189
|
+
this.setState({
|
190
|
+
isOpened: false
|
191
|
+
});
|
192
|
+
}, 200);
|
193
|
+
}
|
194
|
+
|
195
|
+
keepOpen() {
|
196
|
+
if (this.timer) {
|
197
|
+
clearTimeout(this.timer);
|
198
|
+
}
|
189
199
|
}
|
190
200
|
|
191
201
|
renderButton(
|
@@ -260,6 +270,7 @@ export default class DropDownButton extends React.Component<
|
|
260
270
|
menuClassName
|
261
271
|
)}
|
262
272
|
onClick={closeOnClick ? this.close : noop}
|
273
|
+
onMouseEnter={this.keepOpen}
|
263
274
|
ref={ref}
|
264
275
|
>
|
265
276
|
{children
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import {findDOMNode} from 'react-dom';
|
3
|
+
import cloneDeep from 'lodash/cloneDeep';
|
3
4
|
import {
|
4
5
|
FormItem,
|
5
6
|
FormControlProps,
|
@@ -9,6 +10,7 @@ import {
|
|
9
10
|
import {Schema, Action, Api} from '../../types';
|
10
11
|
import {ComboStore, IComboStore} from '../../store/combo';
|
11
12
|
import {default as CTabs, Tab} from '../../components/Tabs';
|
13
|
+
import Button from '../../components/Button';
|
12
14
|
|
13
15
|
import {
|
14
16
|
guid,
|
@@ -255,6 +257,8 @@ export interface ComboControlSchema extends FormBaseControl {
|
|
255
257
|
};
|
256
258
|
}
|
257
259
|
|
260
|
+
export type ComboRendererEvent = 'add' | 'delete' | 'tabsChange';
|
261
|
+
|
258
262
|
function pickVars(vars: any, fields: Array<string>) {
|
259
263
|
return fields.reduce((data: any, key: string) => {
|
260
264
|
data[key] = resolveVariable(key, vars);
|
@@ -291,6 +295,8 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
291
295
|
| 'tabsMode'
|
292
296
|
| 'tabsStyle'
|
293
297
|
| 'placeholder'
|
298
|
+
| 'itemClassName'
|
299
|
+
| 'itemsWrapperClassName'
|
294
300
|
> = {
|
295
301
|
minLength: 0,
|
296
302
|
maxLength: 0,
|
@@ -307,7 +313,9 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
307
313
|
deleteIcon: '',
|
308
314
|
tabsMode: false,
|
309
315
|
tabsStyle: '',
|
310
|
-
placeholder: 'placeholder.empty'
|
316
|
+
placeholder: 'placeholder.empty',
|
317
|
+
itemClassName: '',
|
318
|
+
itemsWrapperClassName: ''
|
311
319
|
};
|
312
320
|
static propsList: Array<string> = [
|
313
321
|
'minLength',
|
@@ -334,7 +342,9 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
334
342
|
'items',
|
335
343
|
'conditions',
|
336
344
|
'messages',
|
337
|
-
'formStore'
|
345
|
+
'formStore',
|
346
|
+
'itemClassName',
|
347
|
+
'itemsWrapperClassName'
|
338
348
|
];
|
339
349
|
|
340
350
|
subForms: Array<any> = [];
|
@@ -469,9 +479,17 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
469
479
|
this.props.onChange(value, submitOnChange, true);
|
470
480
|
}
|
471
481
|
|
472
|
-
addItem() {
|
473
|
-
const {
|
474
|
-
|
482
|
+
async addItem() {
|
483
|
+
const {
|
484
|
+
flat,
|
485
|
+
joinValues,
|
486
|
+
delimiter,
|
487
|
+
scaffold,
|
488
|
+
disabled,
|
489
|
+
submitOnChange,
|
490
|
+
data,
|
491
|
+
dispatchEvent
|
492
|
+
} = this.props;
|
475
493
|
|
476
494
|
if (disabled) {
|
477
495
|
return;
|
@@ -479,6 +497,18 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
479
497
|
|
480
498
|
let value = this.getValueAsArray();
|
481
499
|
|
500
|
+
const rendererEvent = await dispatchEvent(
|
501
|
+
'add',
|
502
|
+
createObject(data, {
|
503
|
+
value:
|
504
|
+
flat && joinValues ? value.join(delimiter || ',') : cloneDeep(value)
|
505
|
+
})
|
506
|
+
);
|
507
|
+
|
508
|
+
if (rendererEvent?.prevented) {
|
509
|
+
return;
|
510
|
+
}
|
511
|
+
|
482
512
|
value.push(
|
483
513
|
flat
|
484
514
|
? scaffold || ''
|
@@ -505,7 +535,8 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
505
535
|
deleteConfirmText,
|
506
536
|
data,
|
507
537
|
env,
|
508
|
-
translate: __
|
538
|
+
translate: __,
|
539
|
+
dispatchEvent
|
509
540
|
} = this.props;
|
510
541
|
|
511
542
|
if (disabled) {
|
@@ -515,6 +546,19 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
515
546
|
let value = this.getValueAsArray();
|
516
547
|
const ctx = createObject(data, value[key]);
|
517
548
|
|
549
|
+
const rendererEvent = await dispatchEvent(
|
550
|
+
'delete',
|
551
|
+
createObject(data, {
|
552
|
+
key,
|
553
|
+
value:
|
554
|
+
flat && joinValues ? value.join(delimiter || ',') : cloneDeep(value)
|
555
|
+
})
|
556
|
+
);
|
557
|
+
|
558
|
+
if (rendererEvent?.prevented) {
|
559
|
+
return;
|
560
|
+
}
|
561
|
+
|
518
562
|
if (isEffectiveApi(deleteApi, ctx)) {
|
519
563
|
const confirmed = await env.confirm(
|
520
564
|
deleteConfirmText ? filter(deleteConfirmText, ctx) : __('deleteConfirm')
|
@@ -866,8 +910,19 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
866
910
|
}
|
867
911
|
|
868
912
|
@autobind
|
869
|
-
handleTabSelect(key: number) {
|
870
|
-
const {store} = this.props;
|
913
|
+
async handleTabSelect(key: number) {
|
914
|
+
const {store, data, dispatchEvent} = this.props;
|
915
|
+
|
916
|
+
const rendererEvent = await dispatchEvent(
|
917
|
+
'tabsChange',
|
918
|
+
createObject(data, {
|
919
|
+
key
|
920
|
+
})
|
921
|
+
);
|
922
|
+
|
923
|
+
if (rendererEvent?.prevented) {
|
924
|
+
return;
|
925
|
+
}
|
871
926
|
|
872
927
|
store.setActiveKey(key);
|
873
928
|
}
|
@@ -1138,7 +1193,9 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
1138
1193
|
lazyLoad,
|
1139
1194
|
changeImmediately,
|
1140
1195
|
placeholder,
|
1141
|
-
translate: __
|
1196
|
+
translate: __,
|
1197
|
+
itemClassName,
|
1198
|
+
itemsWrapperClassName
|
1142
1199
|
} = this.props;
|
1143
1200
|
|
1144
1201
|
let items = this.props.items;
|
@@ -1165,7 +1222,7 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
1165
1222
|
: ''
|
1166
1223
|
)}
|
1167
1224
|
>
|
1168
|
-
<div className={cx(`Combo-items
|
1225
|
+
<div className={cx(`Combo-items`, itemsWrapperClassName)}>
|
1169
1226
|
{Array.isArray(value) && value.length ? (
|
1170
1227
|
value.map((value, index, thelist) => {
|
1171
1228
|
let delBtn: any = null;
|
@@ -1176,21 +1233,20 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
1176
1233
|
evalExpression(itemRemovableOn, value) !== false)
|
1177
1234
|
) {
|
1178
1235
|
delBtn = (
|
1179
|
-
<
|
1180
|
-
onClick={this.removeItem.bind(this, index)}
|
1236
|
+
<Button
|
1181
1237
|
key="remove"
|
1182
|
-
className={cx(
|
1183
|
-
|
1184
|
-
)}
|
1185
|
-
|
1186
|
-
|
1238
|
+
className={cx('Combo-delBtn')}
|
1239
|
+
disabled={!store.removable}
|
1240
|
+
tooltip={__('delete')}
|
1241
|
+
tooltipPlacement="bottom"
|
1242
|
+
onClick={this.removeItem.bind(this, index)}
|
1187
1243
|
>
|
1188
1244
|
{deleteIcon ? (
|
1189
1245
|
<i className={deleteIcon} />
|
1190
1246
|
) : (
|
1191
1247
|
<Icon icon="status-close" className="icon" />
|
1192
1248
|
)}
|
1193
|
-
</
|
1249
|
+
</Button>
|
1194
1250
|
);
|
1195
1251
|
}
|
1196
1252
|
|
@@ -1214,7 +1270,7 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
1214
1270
|
|
1215
1271
|
return (
|
1216
1272
|
<div
|
1217
|
-
className={cx(`Combo-item
|
1273
|
+
className={cx(`Combo-item`, itemClassName)}
|
1218
1274
|
key={this.keys[index] || (this.keys[index] = guid())}
|
1219
1275
|
>
|
1220
1276
|
{!disabled && draggable && thelist.length > 1 ? (
|
@@ -1315,15 +1371,16 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
1315
1371
|
}
|
1316
1372
|
)
|
1317
1373
|
) : (
|
1318
|
-
<
|
1319
|
-
|
1374
|
+
<Button
|
1375
|
+
level="default"
|
1376
|
+
className={cx(`Combo-addBtn`, addButtonClassName)}
|
1377
|
+
block
|
1378
|
+
tooltip={__('Combo.add')}
|
1320
1379
|
onClick={this.addItem}
|
1321
|
-
className={cx(`Button Combo-addBtn`, addButtonClassName)}
|
1322
|
-
data-tooltip={__('Combo.add')}
|
1323
1380
|
>
|
1324
1381
|
{addIcon ? <Icon icon="plus" className="icon" /> : null}
|
1325
1382
|
<span>{__(addButtonText || 'Combo.add')}</span>
|
1326
|
-
</
|
1383
|
+
</Button>
|
1327
1384
|
)
|
1328
1385
|
) : null}
|
1329
1386
|
{draggable ? (
|
@@ -1352,7 +1409,8 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
1352
1409
|
disabled,
|
1353
1410
|
typeSwitchable,
|
1354
1411
|
nullable,
|
1355
|
-
translate: __
|
1412
|
+
translate: __,
|
1413
|
+
itemClassName
|
1356
1414
|
} = this.props;
|
1357
1415
|
|
1358
1416
|
let items = this.props.items;
|
@@ -1373,7 +1431,7 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|
1373
1431
|
disabled ? 'is-disabled' : ''
|
1374
1432
|
)}
|
1375
1433
|
>
|
1376
|
-
<div className={cx(`Combo-item
|
1434
|
+
<div className={cx(`Combo-item`, itemClassName)}>
|
1377
1435
|
{condition && typeSwitchable !== false ? (
|
1378
1436
|
<div className={cx('Combo-itemTag')}>
|
1379
1437
|
<label>{__('Combo.type')}</label>
|
@@ -299,7 +299,16 @@ export class CityPicker extends React.Component<
|
|
299
299
|
const {onChange, allowStreet, joinValues, extractValue, delimiter} =
|
300
300
|
this.props;
|
301
301
|
|
302
|
-
const {
|
302
|
+
const {
|
303
|
+
code,
|
304
|
+
province,
|
305
|
+
city,
|
306
|
+
district,
|
307
|
+
street,
|
308
|
+
provinceCode,
|
309
|
+
cityCode,
|
310
|
+
districtCode
|
311
|
+
} = this.state;
|
303
312
|
|
304
313
|
if (typeof extractValue === 'undefined' ? joinValues : extractValue) {
|
305
314
|
code
|
@@ -312,8 +321,11 @@ export class CityPicker extends React.Component<
|
|
312
321
|
} else {
|
313
322
|
onChange({
|
314
323
|
code,
|
324
|
+
provinceCode,
|
315
325
|
province,
|
326
|
+
cityCode,
|
316
327
|
city,
|
328
|
+
districtCode,
|
317
329
|
district,
|
318
330
|
street
|
319
331
|
});
|
@@ -215,6 +215,8 @@ export default class DateRangeControl extends React.Component<DateRangeProps> {
|
|
215
215
|
popOverContainer={
|
216
216
|
mobileUI && env && env.getModalContainer
|
217
217
|
? env.getModalContainer
|
218
|
+
: mobileUI
|
219
|
+
? undefined
|
218
220
|
: rest.popOverContainer
|
219
221
|
}
|
220
222
|
data={data}
|
@@ -2,7 +2,7 @@ import React, {Suspense} from 'react';
|
|
2
2
|
import Dropzone from 'react-dropzone';
|
3
3
|
import {FileRejection} from 'react-dropzone';
|
4
4
|
import {Icon} from '../../components/icons';
|
5
|
-
import {autobind} from '../../utils/helper';
|
5
|
+
import {autobind, createObject} from '../../utils/helper';
|
6
6
|
import {FormItem, FormControlProps, FormBaseControl} from './Item';
|
7
7
|
|
8
8
|
/**
|
@@ -47,6 +47,8 @@ export interface ExcelControlState {
|
|
47
47
|
filename: string;
|
48
48
|
}
|
49
49
|
|
50
|
+
export type InputExcelRendererEvent = 'change';
|
51
|
+
export type InputExcelRendererAction = 'clear';
|
50
52
|
export default class ExcelControl extends React.PureComponent<
|
51
53
|
ExcelProps,
|
52
54
|
ExcelControlState
|
@@ -66,7 +68,7 @@ export default class ExcelControl extends React.PureComponent<
|
|
66
68
|
|
67
69
|
@autobind
|
68
70
|
handleDrop(files: File[]) {
|
69
|
-
const {allSheets, onChange} = this.props;
|
71
|
+
const {allSheets, onChange, dispatchEvent, data} = this.props;
|
70
72
|
const excel = files[0];
|
71
73
|
const reader = new FileReader();
|
72
74
|
reader.readAsArrayBuffer(excel);
|
@@ -76,25 +78,38 @@ export default class ExcelControl extends React.PureComponent<
|
|
76
78
|
this.ExcelJS = ExcelJS;
|
77
79
|
const workbook = new ExcelJS.Workbook();
|
78
80
|
await workbook.xlsx.load(reader.result);
|
81
|
+
let sheetsResult: any[] = [];
|
79
82
|
if (allSheets) {
|
80
|
-
const sheetsResult: any[] = [];
|
81
83
|
workbook.eachSheet((worksheet: any) => {
|
82
84
|
sheetsResult.push({
|
83
85
|
sheetName: worksheet.name,
|
84
86
|
data: this.readWorksheet(worksheet)
|
85
87
|
});
|
86
|
-
onChange(sheetsResult);
|
87
88
|
});
|
88
89
|
} else {
|
89
90
|
const worksheet = workbook.worksheets[0];
|
90
|
-
|
91
|
+
sheetsResult = this.readWorksheet(worksheet);
|
91
92
|
}
|
93
|
+
const dispatcher = await this.dispatchEvent('change', sheetsResult);
|
94
|
+
if (dispatcher?.prevented) {
|
95
|
+
return;
|
96
|
+
}
|
97
|
+
onChange(sheetsResult);
|
92
98
|
this.setState({filename: files[0].name});
|
93
99
|
});
|
94
100
|
}
|
95
101
|
};
|
96
102
|
}
|
97
103
|
|
104
|
+
async dispatchEvent(eventName: string, eventData?: Record<string, any>) {
|
105
|
+
const {dispatchEvent, data} = this.props;
|
106
|
+
return await dispatchEvent(
|
107
|
+
eventName,
|
108
|
+
createObject(data, {
|
109
|
+
value: eventData
|
110
|
+
})
|
111
|
+
);
|
112
|
+
}
|
98
113
|
/**
|
99
114
|
* 读取单个 sheet 的内容
|
100
115
|
*/
|
@@ -145,6 +160,13 @@ export default class ExcelControl extends React.PureComponent<
|
|
145
160
|
}
|
146
161
|
}
|
147
162
|
|
163
|
+
doAction(action: any, data: object, throwErrors: boolean) {
|
164
|
+
const {onChange} = this.props;
|
165
|
+
if (action.actionType === 'clear') {
|
166
|
+
onChange('');
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
148
170
|
render() {
|
149
171
|
const {
|
150
172
|
className,
|
@@ -5,7 +5,7 @@ import isPlainObject from 'lodash/isPlainObject';
|
|
5
5
|
// @ts-ignore
|
6
6
|
import mapLimit from 'async/mapLimit';
|
7
7
|
import ImageControl from './InputImage';
|
8
|
-
import {Payload, ApiObject, ApiString} from '../../types';
|
8
|
+
import {Payload, ApiObject, ApiString, Action} from '../../types';
|
9
9
|
import {filter} from '../../utils/tpl';
|
10
10
|
import Alert from '../../components/Alert2';
|
11
11
|
import {qsstringify, createObject, guid, isEmpty} from '../../utils/helper';
|
@@ -281,6 +281,8 @@ export function getNameFromUrl(url: string) {
|
|
281
281
|
|
282
282
|
return url;
|
283
283
|
}
|
284
|
+
export type InputFileRendererEvent = 'change' | 'success' | 'fail' | 'remove';
|
285
|
+
export type InputFileRendererAction = 'clear';
|
284
286
|
|
285
287
|
export default class FileControl extends React.Component<FileProps, FileState> {
|
286
288
|
static defaultProps: Partial<FileProps> = {
|
@@ -1223,6 +1225,16 @@ export default class FileControl extends React.Component<FileProps, FileState> {
|
|
1223
1225
|
);
|
1224
1226
|
}
|
1225
1227
|
|
1228
|
+
// 动作
|
1229
|
+
doAction(action: Action, data: object, throwErrors: boolean) {
|
1230
|
+
const {onChange} = this.props;
|
1231
|
+
if (action.actionType === 'clear') {
|
1232
|
+
this.setState({files: []}, () => {
|
1233
|
+
onChange('');
|
1234
|
+
});
|
1235
|
+
}
|
1236
|
+
}
|
1237
|
+
|
1226
1238
|
render() {
|
1227
1239
|
const {
|
1228
1240
|
btnLabel,
|
@@ -55,6 +55,11 @@ export interface InputFormulaControlSchema extends FormBaseControl {
|
|
55
55
|
*/
|
56
56
|
inputMode?: 'button' | 'input-button';
|
57
57
|
|
58
|
+
/**
|
59
|
+
* 外层input是否允许输入,否需要点击fx在弹窗中输入
|
60
|
+
*/
|
61
|
+
allowInput?: boolean;
|
62
|
+
|
58
63
|
/**
|
59
64
|
* 按钮图标
|
60
65
|
*/
|
@@ -139,6 +144,7 @@ export class InputFormulaRenderer extends React.Component<InputFormulaProps> {
|
|
139
144
|
className,
|
140
145
|
classPrefix: ns,
|
141
146
|
classnames: cx,
|
147
|
+
allowInput = true,
|
142
148
|
borderMode,
|
143
149
|
placeholder,
|
144
150
|
inputMode,
|
@@ -156,6 +162,7 @@ export class InputFormulaRenderer extends React.Component<InputFormulaProps> {
|
|
156
162
|
className={className}
|
157
163
|
value={value}
|
158
164
|
disabled={disabled}
|
165
|
+
allowInput={allowInput}
|
159
166
|
onChange={onChange}
|
160
167
|
evalMode={evalMode}
|
161
168
|
variables={variables}
|