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.
Files changed (202) hide show
  1. package/lib/Schema.d.ts +3 -2
  2. package/lib/Schema.js +0 -1
  3. package/lib/Schema.js.map +2 -2
  4. package/lib/components/Alert2.js +4 -2
  5. package/lib/components/Alert2.js.map +2 -2
  6. package/lib/components/Avatar.d.ts +20 -20
  7. package/lib/components/Card.d.ts +20 -20
  8. package/lib/components/CityArea.js +3 -0
  9. package/lib/components/CityArea.js.map +2 -2
  10. package/lib/components/DatePicker.d.ts +3 -0
  11. package/lib/components/DatePicker.js +41 -7
  12. package/lib/components/DatePicker.js.map +2 -2
  13. package/lib/components/ListGroup.d.ts +21 -21
  14. package/lib/components/PopUp.js +2 -1
  15. package/lib/components/PopUp.js.map +2 -2
  16. package/lib/components/Progress.js +12 -9
  17. package/lib/components/Progress.js.map +2 -2
  18. package/lib/components/Range.js.map +2 -2
  19. package/lib/components/Tabs.d.ts +27 -23
  20. package/lib/components/Tabs.js +37 -22
  21. package/lib/components/Tabs.js.map +2 -2
  22. package/lib/components/TooltipWrapper.d.ts +21 -20
  23. package/lib/components/TooltipWrapper.js +2 -2
  24. package/lib/components/TooltipWrapper.js.map +2 -2
  25. package/lib/components/calendar/Calendar.js +16 -12
  26. package/lib/components/calendar/Calendar.js.map +2 -2
  27. package/lib/components/formula/Editor.d.ts +3 -1
  28. package/lib/components/formula/Editor.js +20 -2
  29. package/lib/components/formula/Editor.js.map +2 -2
  30. package/lib/components/formula/Picker.d.ts +5 -0
  31. package/lib/components/formula/Picker.js +19 -4
  32. package/lib/components/formula/Picker.js.map +2 -2
  33. package/lib/components/icons.js +2 -0
  34. package/lib/components/icons.js.map +2 -2
  35. package/lib/factory.js +2 -2
  36. package/lib/factory.js.map +2 -2
  37. package/lib/icons/trash.js +10 -0
  38. package/lib/index.d.ts +1 -0
  39. package/lib/index.js +2 -1
  40. package/lib/index.js.map +2 -2
  41. package/lib/renderers/Action.d.ts +1 -1
  42. package/lib/renderers/Action.js.map +2 -2
  43. package/lib/renderers/ButtonGroup.d.ts +2 -2
  44. package/lib/renderers/ButtonGroup.js.map +1 -1
  45. package/lib/renderers/Dialog.d.ts +4 -0
  46. package/lib/renderers/Dialog.js +4 -3
  47. package/lib/renderers/Dialog.js.map +2 -2
  48. package/lib/renderers/DropDownButton.d.ts +2 -0
  49. package/lib/renderers/DropDownButton.js +13 -4
  50. package/lib/renderers/DropDownButton.js.map +2 -2
  51. package/lib/renderers/Form/Combo.d.ts +4 -3
  52. package/lib/renderers/Form/Combo.js +81 -32
  53. package/lib/renderers/Form/Combo.js.map +2 -2
  54. package/lib/renderers/Form/InputCity.js +4 -1
  55. package/lib/renderers/Form/InputCity.js.map +2 -2
  56. package/lib/renderers/Form/InputColor.js +3 -1
  57. package/lib/renderers/Form/InputColor.js.map +2 -2
  58. package/lib/renderers/Form/InputDate.js +3 -1
  59. package/lib/renderers/Form/InputDate.js.map +2 -2
  60. package/lib/renderers/Form/InputDateRange.js +3 -1
  61. package/lib/renderers/Form/InputDateRange.js.map +2 -2
  62. package/lib/renderers/Form/InputExcel.d.ts +4 -0
  63. package/lib/renderers/Form/InputExcel.js +33 -6
  64. package/lib/renderers/Form/InputExcel.js.map +2 -2
  65. package/lib/renderers/Form/InputFile.d.ts +4 -1
  66. package/lib/renderers/Form/InputFile.js +9 -0
  67. package/lib/renderers/Form/InputFile.js.map +2 -2
  68. package/lib/renderers/Form/InputFormula.d.ts +4 -0
  69. package/lib/renderers/Form/InputFormula.js +2 -2
  70. package/lib/renderers/Form/InputFormula.js.map +2 -2
  71. package/lib/renderers/Form/InputImage.d.ts +4 -1
  72. package/lib/renderers/Form/InputImage.js +12 -2
  73. package/lib/renderers/Form/InputImage.js.map +2 -2
  74. package/lib/renderers/Form/InputRange.d.ts +27 -9
  75. package/lib/renderers/Form/InputRange.js +88 -23
  76. package/lib/renderers/Form/InputRange.js.map +2 -2
  77. package/lib/renderers/Form/InputTable.js +4 -2
  78. package/lib/renderers/Form/InputTable.js.map +2 -2
  79. package/lib/renderers/Form/Select.js +3 -1
  80. package/lib/renderers/Form/Select.js.map +2 -2
  81. package/lib/renderers/Form/Switch.d.ts +7 -6
  82. package/lib/renderers/Form/Switch.js +4 -1
  83. package/lib/renderers/Form/Switch.js.map +2 -2
  84. package/lib/renderers/Log.js +2 -1
  85. package/lib/renderers/Log.js.map +2 -2
  86. package/lib/renderers/Page.js +2 -3
  87. package/lib/renderers/Page.js.map +2 -2
  88. package/lib/renderers/PopOver.js +1 -1
  89. package/lib/renderers/PopOver.js.map +2 -2
  90. package/lib/renderers/Progress.d.ts +1 -1
  91. package/lib/renderers/Progress.js +1 -1
  92. package/lib/renderers/Progress.js.map +2 -2
  93. package/lib/renderers/Table/TableRow.js +1 -1
  94. package/lib/renderers/Table/TableRow.js.map +2 -2
  95. package/lib/renderers/Tabs.d.ts +10 -2
  96. package/lib/renderers/Tabs.js +3 -3
  97. package/lib/renderers/Tabs.js.map +2 -2
  98. package/lib/renderers/TooltipWrapper.d.ts +104 -0
  99. package/lib/renderers/TooltipWrapper.js +59 -0
  100. package/lib/renderers/TooltipWrapper.js.map +13 -0
  101. package/lib/renderers/Video.d.ts +6 -0
  102. package/lib/renderers/Video.js +13 -6
  103. package/lib/renderers/Video.js.map +2 -2
  104. package/lib/store/table.js +1 -1
  105. package/lib/store/table.js.map +2 -2
  106. package/lib/themes/ang-ie11.css +242 -46
  107. package/lib/themes/ang.css +250 -41
  108. package/lib/themes/ang.css.map +1 -1
  109. package/lib/themes/antd-ie11.css +242 -46
  110. package/lib/themes/antd.css +250 -41
  111. package/lib/themes/antd.css.map +1 -1
  112. package/lib/themes/cxd-ie11.css +231 -35
  113. package/lib/themes/cxd.css +252 -42
  114. package/lib/themes/cxd.css.map +1 -1
  115. package/lib/themes/dark-ie11.css +242 -46
  116. package/lib/themes/dark.css +250 -41
  117. package/lib/themes/dark.css.map +1 -1
  118. package/lib/themes/default-ie11.css +231 -35
  119. package/lib/themes/default.css +252 -42
  120. package/lib/themes/default.css.map +1 -1
  121. package/package.json +1 -1
  122. package/schema.json +15871 -608
  123. package/scss/_properties.scss +23 -12
  124. package/scss/components/_alert.scss +1 -1
  125. package/scss/components/_button-group.scss +15 -0
  126. package/scss/components/_city-area.scss +2 -0
  127. package/scss/components/_formula.scss +18 -0
  128. package/scss/components/_popup.scss +13 -3
  129. package/scss/components/_progress.scss +3 -8
  130. package/scss/components/_tabs.scss +145 -13
  131. package/scss/components/_tooltip.scss +72 -0
  132. package/scss/components/form/_date.scss +13 -0
  133. package/scss/components/form/_number.scss +2 -0
  134. package/scss/components/form/_switch.scss +1 -3
  135. package/scss/themes/_cxd-variables.scss +2 -1
  136. package/sdk/ang-ie11.css +287 -48
  137. package/sdk/ang.css +295 -43
  138. package/sdk/antd-ie11.css +287 -48
  139. package/sdk/antd.css +295 -43
  140. package/sdk/barcode.js +51 -51
  141. package/sdk/charts.js +14 -14
  142. package/sdk/codemirror.js +7 -7
  143. package/sdk/color-picker.js +65 -65
  144. package/sdk/cropperjs.js +2 -2
  145. package/sdk/cxd-ie11.css +276 -37
  146. package/sdk/cxd.css +297 -44
  147. package/sdk/dark-ie11.css +287 -48
  148. package/sdk/dark.css +295 -43
  149. package/sdk/exceljs.js +1 -1
  150. package/sdk/markdown.js +69 -69
  151. package/sdk/papaparse.js +1 -1
  152. package/sdk/renderers/Form/CityDB.js +1 -1
  153. package/sdk/rest.js +17 -17
  154. package/sdk/rich-text.js +62 -62
  155. package/sdk/sdk-ie11.css +276 -37
  156. package/sdk/sdk.css +297 -44
  157. package/sdk/sdk.js +1251 -1247
  158. package/sdk/thirds/hls.js/hls.js +1 -1
  159. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  160. package/sdk/tinymce.js +57 -57
  161. package/src/Schema.ts +5 -2
  162. package/src/components/Alert2.tsx +9 -3
  163. package/src/components/CityArea.tsx +3 -0
  164. package/src/components/DatePicker.tsx +56 -18
  165. package/src/components/PopUp.tsx +6 -5
  166. package/src/components/Progress.tsx +8 -12
  167. package/src/components/Range.tsx +7 -1
  168. package/src/components/Tabs.tsx +51 -21
  169. package/src/components/TooltipWrapper.tsx +4 -1
  170. package/src/components/calendar/Calendar.tsx +17 -12
  171. package/src/components/formula/Editor.tsx +34 -3
  172. package/src/components/formula/Picker.tsx +28 -1
  173. package/src/components/icons.tsx +2 -0
  174. package/src/factory.tsx +2 -2
  175. package/src/icons/trash.svg +8 -0
  176. package/src/index.tsx +1 -0
  177. package/src/renderers/Action.tsx +2 -1
  178. package/src/renderers/ButtonGroup.tsx +2 -2
  179. package/src/renderers/Dialog.tsx +17 -3
  180. package/src/renderers/DropDownButton.tsx +14 -3
  181. package/src/renderers/Form/Combo.tsx +84 -26
  182. package/src/renderers/Form/InputCity.tsx +13 -1
  183. package/src/renderers/Form/InputColor.tsx +2 -0
  184. package/src/renderers/Form/InputDate.tsx +2 -0
  185. package/src/renderers/Form/InputDateRange.tsx +2 -0
  186. package/src/renderers/Form/InputExcel.tsx +27 -5
  187. package/src/renderers/Form/InputFile.tsx +13 -1
  188. package/src/renderers/Form/InputFormula.tsx +7 -0
  189. package/src/renderers/Form/InputImage.tsx +32 -12
  190. package/src/renderers/Form/InputRange.tsx +95 -40
  191. package/src/renderers/Form/InputTable.tsx +6 -2
  192. package/src/renderers/Form/Select.tsx +2 -0
  193. package/src/renderers/Form/Switch.tsx +16 -9
  194. package/src/renderers/Log.tsx +2 -1
  195. package/src/renderers/Page.tsx +1 -2
  196. package/src/renderers/PopOver.tsx +1 -1
  197. package/src/renderers/Progress.tsx +2 -2
  198. package/src/renderers/Table/TableRow.tsx +1 -1
  199. package/src/renderers/Tabs.tsx +16 -4
  200. package/src/renderers/TooltipWrapper.tsx +219 -0
  201. package/src/renderers/Video.tsx +21 -6
  202. 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().reverse(); // 避免用户将短的放前面
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
@@ -175,6 +175,7 @@ import './renderers/TableView';
175
175
  import './renderers/Code';
176
176
  import './renderers/WebComponent';
177
177
  import './renderers/GridNav';
178
+ import './renderers/TooltipWrapper';
178
179
 
179
180
  import Scoped, {ScopedContext} from './Scoped';
180
181
 
@@ -62,7 +62,8 @@ export interface ButtonSchema extends BaseSchema {
62
62
  | 'link'
63
63
  | 'primary'
64
64
  | 'dark'
65
- | 'light';
65
+ | 'light'
66
+ | 'secondary';
66
67
 
67
68
  /**
68
69
  * @deprecated 通过 level 来配置
@@ -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
 
@@ -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 {store, render, classnames: cx, showErrorMsg} = this.props;
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 || store.error ? (
442
+ {(showLoading !== false && store.loading) ||
443
+ (showErrorMsg !== false && store.error) ? (
432
444
  <div className={cx('Dialog-info')} key="info">
433
- <Spinner size="sm" key="info" show={store.loading} />
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.setState({
187
- isOpened: false
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 {flat, joinValues, delimiter, scaffold, disabled, submitOnChange} =
474
- this.props;
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
- <a
1180
- onClick={this.removeItem.bind(this, index)}
1236
+ <Button
1181
1237
  key="remove"
1182
- className={cx(
1183
- `Combo-delBtn ${!store.removable ? 'is-disabled' : ''}`
1184
- )}
1185
- data-tooltip={__('delete')}
1186
- data-position="bottom"
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
- </a>
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
- <button
1319
- type="button"
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
- </button>
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 {code, province, city, district, street} = this.state;
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
  });
@@ -88,6 +88,8 @@ export default class ColorControl extends React.PureComponent<
88
88
  popOverContainer={
89
89
  mobileUI && env && env.getModalContainer
90
90
  ? env.getModalContainer
91
+ : mobileUI
92
+ ? undefined
91
93
  : rest.popOverContainer
92
94
  }
93
95
  value={value || ''}
@@ -472,6 +472,8 @@ export default class DateControl extends React.PureComponent<
472
472
  popOverContainer={
473
473
  mobileUI && env && env.getModalContainer
474
474
  ? env.getModalContainer
475
+ : mobileUI
476
+ ? undefined
475
477
  : rest.popOverContainer
476
478
  }
477
479
  timeFormat={timeFormat}
@@ -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
- onChange(this.readWorksheet(worksheet));
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}