amis 1.8.0-beta.1 → 1.8.0-beta.5

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 (207) hide show
  1. package/lib/SchemaRenderer.js +19 -3
  2. package/lib/SchemaRenderer.js.map +2 -2
  3. package/lib/WithRootStore.d.ts +18 -0
  4. package/lib/WithStore.js +2 -1
  5. package/lib/WithStore.js.map +2 -2
  6. package/lib/actions/CmptAction.js +14 -3
  7. package/lib/actions/CmptAction.js.map +2 -2
  8. package/lib/components/AssociatedSelection.js +9 -2
  9. package/lib/components/AssociatedSelection.js.map +2 -2
  10. package/lib/components/BarCode.js +1 -1
  11. package/lib/components/BarCode.js.map +2 -2
  12. package/lib/components/Checkbox.d.ts +24 -23
  13. package/lib/components/Checkbox.js +6 -2
  14. package/lib/components/Checkbox.js.map +2 -2
  15. package/lib/components/DatePicker.js +16 -5
  16. package/lib/components/DatePicker.js.map +2 -2
  17. package/lib/components/DateRangePicker.d.ts +94 -84
  18. package/lib/components/DateRangePicker.js +259 -7
  19. package/lib/components/DateRangePicker.js.map +2 -2
  20. package/lib/components/MonthRangePicker.d.ts +84 -84
  21. package/lib/components/Radios.d.ts +22 -22
  22. package/lib/components/Radios.js +3 -5
  23. package/lib/components/Radios.js.map +2 -2
  24. package/lib/components/Range.d.ts +2 -2
  25. package/lib/components/Range.js +24 -11
  26. package/lib/components/Range.js.map +2 -2
  27. package/lib/components/Steps.d.ts +6 -0
  28. package/lib/components/Steps.js +13 -9
  29. package/lib/components/Steps.js.map +2 -2
  30. package/lib/components/calendar/Calendar.js +2 -14
  31. package/lib/components/calendar/Calendar.js.map +2 -2
  32. package/lib/components/calendar/YearsView.js +3 -3
  33. package/lib/components/calendar/YearsView.js.map +2 -2
  34. package/lib/factory.d.ts +4 -0
  35. package/lib/factory.js +9 -0
  36. package/lib/factory.js.map +2 -2
  37. package/lib/index.js +1 -1
  38. package/lib/locale/de-DE.js +13 -0
  39. package/lib/locale/de-DE.js.map +2 -2
  40. package/lib/locale/en-US.js +13 -0
  41. package/lib/locale/en-US.js.map +2 -2
  42. package/lib/locale/zh-CN.js +13 -0
  43. package/lib/locale/zh-CN.js.map +2 -2
  44. package/lib/renderers/Action.d.ts +2 -0
  45. package/lib/renderers/Action.js +23 -5
  46. package/lib/renderers/Action.js.map +2 -2
  47. package/lib/renderers/CRUD.d.ts +8 -0
  48. package/lib/renderers/CRUD.js +11 -4
  49. package/lib/renderers/CRUD.js.map +2 -2
  50. package/lib/renderers/Carousel.d.ts +1 -0
  51. package/lib/renderers/Carousel.js +13 -1
  52. package/lib/renderers/Carousel.js.map +2 -2
  53. package/lib/renderers/Form/Checkbox.d.ts +5 -2
  54. package/lib/renderers/Form/Checkbox.js +2 -2
  55. package/lib/renderers/Form/Checkbox.js.map +2 -2
  56. package/lib/renderers/Form/Checkboxes.d.ts +7 -2
  57. package/lib/renderers/Form/Checkboxes.js +101 -12
  58. package/lib/renderers/Form/Checkboxes.js.map +2 -2
  59. package/lib/renderers/Form/Combo.js +3 -2
  60. package/lib/renderers/Form/Combo.js.map +2 -2
  61. package/lib/renderers/Form/InputCity.d.ts +3 -0
  62. package/lib/renderers/Form/InputCity.js +44 -2
  63. package/lib/renderers/Form/InputCity.js.map +2 -2
  64. package/lib/renderers/Form/InputDateRange.d.ts +5 -0
  65. package/lib/renderers/Form/InputDateRange.js.map +2 -2
  66. package/lib/renderers/Form/InputFile.js +6 -3
  67. package/lib/renderers/Form/InputFile.js.map +2 -2
  68. package/lib/renderers/Form/InputImage.js +6 -3
  69. package/lib/renderers/Form/InputImage.js.map +2 -2
  70. package/lib/renderers/Form/InputRange.js +13 -14
  71. package/lib/renderers/Form/InputRange.js.map +2 -2
  72. package/lib/renderers/Form/Item.d.ts +11 -6
  73. package/lib/renderers/Form/Item.js +3 -1
  74. package/lib/renderers/Form/Item.js.map +2 -2
  75. package/lib/renderers/Form/index.d.ts +1 -0
  76. package/lib/renderers/Form/index.js +1 -1
  77. package/lib/renderers/Form/index.js.map +2 -2
  78. package/lib/renderers/Form/wrapControl.d.ts +9 -0
  79. package/lib/renderers/Form/wrapControl.js +1 -1
  80. package/lib/renderers/Form/wrapControl.js.map +2 -2
  81. package/lib/renderers/Nav.js +2 -2
  82. package/lib/renderers/Nav.js.map +2 -2
  83. package/lib/renderers/Steps.d.ts +8 -0
  84. package/lib/renderers/Steps.js +2 -2
  85. package/lib/renderers/Steps.js.map +2 -2
  86. package/lib/renderers/Table/index.d.ts +1 -0
  87. package/lib/renderers/Table/index.js +10 -5
  88. package/lib/renderers/Table/index.js.map +2 -2
  89. package/lib/renderers/Tabs.d.ts +4 -0
  90. package/lib/renderers/Tabs.js +22 -6
  91. package/lib/renderers/Tabs.js.map +2 -2
  92. package/lib/renderers/Wizard.d.ts +6 -3
  93. package/lib/renderers/Wizard.js +257 -152
  94. package/lib/renderers/Wizard.js.map +2 -2
  95. package/lib/store/crud.d.ts +1 -0
  96. package/lib/store/crud.js +33 -7
  97. package/lib/store/crud.js.map +2 -2
  98. package/lib/store/formItem.js +1 -1
  99. package/lib/store/formItem.js.map +2 -2
  100. package/lib/store/index.d.ts +5 -0
  101. package/lib/store/index.js +14 -0
  102. package/lib/store/index.js.map +2 -2
  103. package/lib/store/table.js +2 -2
  104. package/lib/store/table.js.map +2 -2
  105. package/lib/themes/ang-ie11.css +278 -17
  106. package/lib/themes/ang.css +286 -17
  107. package/lib/themes/ang.css.map +1 -1
  108. package/lib/themes/antd-ie11.css +278 -17
  109. package/lib/themes/antd.css +286 -17
  110. package/lib/themes/antd.css.map +1 -1
  111. package/lib/themes/cxd-ie11.css +278 -17
  112. package/lib/themes/cxd.css +286 -17
  113. package/lib/themes/cxd.css.map +1 -1
  114. package/lib/themes/dark-ie11.css +278 -17
  115. package/lib/themes/dark.css +286 -17
  116. package/lib/themes/dark.css.map +1 -1
  117. package/lib/themes/default-ie11.css +278 -17
  118. package/lib/themes/default.css +286 -17
  119. package/lib/themes/default.css.map +1 -1
  120. package/lib/types.d.ts +1 -1
  121. package/lib/types.js.map +1 -1
  122. package/lib/utils/columnsSplit.d.ts +1 -0
  123. package/lib/utils/columnsSplit.js +40 -0
  124. package/lib/utils/columnsSplit.js.map +13 -0
  125. package/lib/utils/debug.d.ts +1 -1
  126. package/lib/utils/debug.js +16 -22
  127. package/lib/utils/debug.js.map +2 -2
  128. package/package.json +1 -1
  129. package/schema.json +237 -29
  130. package/scss/_properties.scss +10 -1
  131. package/scss/components/_barcode.scss +1 -1
  132. package/scss/components/_carousel.scss +1 -0
  133. package/scss/components/_debug.scss +3 -3
  134. package/scss/components/_steps.scss +199 -8
  135. package/scss/components/form/_checks.scss +122 -1
  136. package/scss/components/form/_date.scss +2 -1
  137. package/scss/components/form/_editor.scss +2 -1
  138. package/scss/components/form/_form.scss +16 -0
  139. package/sdk/ang-ie11.css +335 -18
  140. package/sdk/ang.css +343 -18
  141. package/sdk/antd-ie11.css +335 -18
  142. package/sdk/antd.css +343 -18
  143. package/sdk/barcode.js +51 -51
  144. package/sdk/charts.js +14 -14
  145. package/sdk/codemirror.js +7 -7
  146. package/sdk/color-picker.js +65 -65
  147. package/sdk/cropperjs.js +2 -2
  148. package/sdk/cxd-ie11.css +335 -18
  149. package/sdk/cxd.css +343 -18
  150. package/sdk/dark-ie11.css +335 -18
  151. package/sdk/dark.css +343 -18
  152. package/sdk/exceljs.js +1 -1
  153. package/sdk/locale/de-DE.js +13 -0
  154. package/sdk/markdown.js +69 -69
  155. package/sdk/papaparse.js +1 -1
  156. package/sdk/renderers/Form/CityDB.js +1 -1
  157. package/sdk/rest.js +17 -17
  158. package/sdk/rich-text.js +62 -62
  159. package/sdk/sdk-ie11.css +335 -18
  160. package/sdk/sdk.css +343 -18
  161. package/sdk/sdk.js +1289 -1287
  162. package/sdk/thirds/hls.js/hls.js +1 -1
  163. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  164. package/sdk/tinymce.js +57 -57
  165. package/src/SchemaRenderer.tsx +32 -14
  166. package/src/WithStore.tsx +3 -1
  167. package/src/actions/CmptAction.ts +18 -0
  168. package/src/components/AssociatedSelection.tsx +9 -3
  169. package/src/components/BarCode.tsx +2 -2
  170. package/src/components/Checkbox.tsx +11 -5
  171. package/src/components/DatePicker.tsx +21 -4
  172. package/src/components/DateRangePicker.tsx +295 -6
  173. package/src/components/Radios.tsx +6 -17
  174. package/src/components/Range.tsx +26 -12
  175. package/src/components/Steps.tsx +28 -27
  176. package/src/components/calendar/Calendar.tsx +2 -15
  177. package/src/components/calendar/YearsView.tsx +3 -4
  178. package/src/factory.tsx +16 -0
  179. package/src/locale/de-DE.ts +13 -0
  180. package/src/locale/en-US.ts +13 -0
  181. package/src/locale/zh-CN.ts +13 -0
  182. package/src/renderers/Action.tsx +22 -1
  183. package/src/renderers/CRUD.tsx +22 -4
  184. package/src/renderers/Carousel.tsx +8 -0
  185. package/src/renderers/Form/Checkbox.tsx +11 -2
  186. package/src/renderers/Form/Checkboxes.tsx +106 -23
  187. package/src/renderers/Form/Combo.tsx +2 -3
  188. package/src/renderers/Form/InputCity.tsx +33 -4
  189. package/src/renderers/Form/InputDateRange.tsx +8 -1
  190. package/src/renderers/Form/InputFile.tsx +7 -3
  191. package/src/renderers/Form/InputImage.tsx +7 -3
  192. package/src/renderers/Form/InputRange.tsx +18 -16
  193. package/src/renderers/Form/Item.tsx +1 -0
  194. package/src/renderers/Form/index.tsx +2 -1
  195. package/src/renderers/Form/wrapControl.tsx +1 -1
  196. package/src/renderers/Nav.tsx +1 -1
  197. package/src/renderers/Steps.tsx +14 -0
  198. package/src/renderers/Table/index.tsx +15 -4
  199. package/src/renderers/Tabs.tsx +75 -28
  200. package/src/renderers/Wizard.tsx +154 -93
  201. package/src/store/crud.ts +40 -5
  202. package/src/store/formItem.ts +1 -2
  203. package/src/store/index.ts +20 -0
  204. package/src/store/table.ts +2 -2
  205. package/src/types.ts +3 -1
  206. package/src/utils/columnsSplit.tsx +57 -0
  207. package/src/utils/debug.tsx +17 -24
@@ -11,11 +11,11 @@ import difference from 'lodash/difference';
11
11
  import React from 'react';
12
12
  import {uncontrollable} from 'uncontrollable';
13
13
 
14
- import {RendererProps} from '../factory';
15
14
  import Overlay from './Overlay';
16
- import {ThemeProps, themeable} from '../theme';
15
+ import type { ThemeProps } from '../theme'
16
+ import {themeable} from '../theme';
17
17
  import {autobind, camel} from '../utils/helper';
18
- import {
18
+ import type {
19
19
  MultipleValue,
20
20
  Value,
21
21
  FormatValue,
@@ -71,7 +71,7 @@ interface LabelProps extends ThemeProps {
71
71
  * @returns position.left
72
72
  */
73
73
  const valueToOffsetLeft = (value: any, min: number, max: number) =>
74
- (value * 100) / (max - min) + '%';
74
+ ((value - min) * 100) / (max - min) + '%';
75
75
 
76
76
  /**
77
77
  * 滑块handle
@@ -298,7 +298,7 @@ export class Range extends React.Component<RangeItemProps, any> {
298
298
  pageXToValue(pageX: number) {
299
299
  const {x, width} = this.getBoundingClient(this.trackRef.current as Element);
300
300
  const {max, min} = this.props;
301
- return ((pageX - x) * (max - min)) / width;
301
+ return ((pageX - x) * (max - min)) / width + min;
302
302
  }
303
303
 
304
304
  /**
@@ -366,16 +366,30 @@ export class Range extends React.Component<RangeItemProps, any> {
366
366
  */
367
367
  @autobind
368
368
  renderSteps() {
369
- const {max, min, step, showSteps, classnames: cx} = this.props;
370
- const steps = Math.floor((max - min) / step);
369
+ const {max, min, step, showSteps, classnames: cx, parts} = this.props;
370
+ let isShowSteps = showSteps;
371
+ // 只要设置了 parts 就展示分隔
372
+ if (parts > 1 || Array.isArray(parts)) {
373
+ isShowSteps = true;
374
+ }
375
+ // 总区间
376
+ const section = max - min;
377
+ // 总区间被平均分为多少块
378
+ const steps = parts > 1 ? parts : Math.floor(section / step);
379
+ // 平均分 每块的长度
380
+ const partLength = section / steps;
381
+ // parts为数组时,以0为起点(传入的值 - min)
382
+ const partLengthList = Array.isArray(parts)
383
+ ? parts.map(item => item - min)
384
+ : range(steps - 1).map(item => (item + 1) * partLength);
371
385
  return (
372
- showSteps && (
386
+ isShowSteps && (
373
387
  <div>
374
- {range(steps - 1).map(item => (
388
+ {partLengthList.map(item => (
375
389
  <span
376
390
  key={item}
377
391
  className={cx('InputRange-track-dot')}
378
- style={{left: ((item + 1) * 100) / steps + '%'}}
392
+ style={{left: (item * 100) / (max - min) + '%'}}
379
393
  ></span>
380
394
  ))}
381
395
  </div>
@@ -437,13 +451,13 @@ export class Range extends React.Component<RangeItemProps, any> {
437
451
  const traceActiveStyle = {
438
452
  width: valueToOffsetLeft(
439
453
  multiple
440
- ? (value as MultipleValue).max - (value as MultipleValue).min
454
+ ? (value as MultipleValue).max - (value as MultipleValue).min + min
441
455
  : value,
442
456
  min,
443
457
  max
444
458
  ),
445
459
  left: valueToOffsetLeft(
446
- multiple ? (value as MultipleValue).min : 0,
460
+ multiple ? (value as MultipleValue).min : min,
447
461
  min,
448
462
  max
449
463
  )
@@ -69,8 +69,12 @@ export interface StepsSchema extends BaseSchema {
69
69
  * 展示模式
70
70
  */
71
71
  mode?: 'horizontal' | 'vertical';
72
- }
73
72
 
73
+ /**
74
+ * 标签放置位置
75
+ */
76
+ labelPlacement?: 'horizontal' | 'vertical';
77
+ }
74
78
  export interface StepsProps extends ThemeProps {
75
79
  steps: StepSchema[];
76
80
  className: string;
@@ -81,6 +85,8 @@ export interface StepsProps extends ThemeProps {
81
85
  [propName: string]: StepStatus;
82
86
  };
83
87
  mode?: 'horizontal' | 'vertical';
88
+ labelPlacement?: 'horizontal' | 'vertical';
89
+ progressDot?: boolean;
84
90
  useMobileUI?: boolean;
85
91
  }
86
92
 
@@ -92,6 +98,8 @@ export function Steps(props: StepsProps) {
92
98
  current,
93
99
  status,
94
100
  mode = 'horizontal',
101
+ labelPlacement = 'horizontal',
102
+ progressDot = false,
95
103
  useMobileUI
96
104
  } = props;
97
105
  const FINISH_ICON = 'check';
@@ -129,48 +137,41 @@ export function Steps(props: StepsProps) {
129
137
 
130
138
  const mobileUI = useMobileUI && isMobile();
131
139
  return (
132
- <ul
133
- className={cx(
134
- 'Steps',
135
- `Steps--${mode}`,
136
- mobileUI ? 'Steps-mobile' : '',
137
- className
138
- )}
139
- >
140
+ <ul className={cx( // 纵向步骤条暂时不支持labelPlacement属性
141
+ 'Steps',
142
+ `Steps--Placement-${(progressDot || (labelPlacement === 'vertical' && mode != 'vertical')) ? 'vertical' : ''}`,
143
+ `Steps--${progressDot ? 'ProgressDot' : ''}`,
144
+ `Steps--${mode}`,
145
+ mobileUI ? 'Steps-mobile' : '', className)}>
140
146
  {stepsRow.map((step, i) => {
141
147
  const {stepStatus, icon} = getStepStatus(step, i);
142
-
143
148
  return (
144
149
  <li
145
150
  key={i}
146
- className={cx('StepsItem', `is-${stepStatus}`, step.className)}
151
+ className={cx('StepsItem', `is-${stepStatus}`, step.className, `StepsItem-${progressDot ? 'ProgressDot' : ''}`)}
147
152
  >
148
153
  <div className={cx('StepsItem-container')}>
149
- <div
150
- className={cx(
151
- 'StepsItem-containerIcon',
152
- i < current && 'is-success'
153
- )}
154
- >
155
- <span className={cx('StepsItem-icon')}>
156
- {icon ? <Icon icon={icon} className="icon" /> : i + 1}
157
- </span>
158
- </div>
154
+ <div className={cx('StepsItem-containerTail')}></div>
155
+ {progressDot ? <div className={cx('StepsItem-containerProgressDot')}></div>
156
+ : <div className={cx('StepsItem-containerIcon', i < current && 'is-success')}>
157
+ <span className={cx('StepsItem-icon')}>
158
+ {icon ? <Icon icon={icon} className="icon" /> : i + 1}
159
+ </span>
160
+ </div>}
159
161
  <div className={cx('StepsItem-containerWrapper')}>
160
162
  <div className={cx('StepsItem-body')}>
161
163
  <div
162
164
  className={cx(
163
165
  'StepsItem-title',
166
+ `StepsItem-${progressDot ? 'vertical-ProgressDot' : ''}`,
164
167
  i < current && 'is-success'
165
168
  )}
166
169
  >
167
- <span>{step.title}</span>
168
- <span className={cx('StepsItem-subTitle')}>
169
- {step.subTitle}
170
- </span>
170
+ <span className={cx('StepsItem-ellText')} title={String(step.title)}>{step.title}</span>
171
+ <span className={cx('StepsItem-subTitle', 'StepsItem-ellText')} title={String(step.subTitle)}>{step.subTitle}</span>
171
172
  </div>
172
- <div className={cx('StepsItem-description')}>
173
- {step.description}
173
+ <div className={cx('StepsItem-description', 'StepsItem-ellText')} title={String(step.description)}>
174
+ <span>{step.description}</span>
174
175
  </div>
175
176
  </div>
176
177
  </div>
@@ -161,20 +161,6 @@ class BaseDatePicker extends React.Component<
161
161
  updatedState = this.getStateFromProps(props);
162
162
  }
163
163
 
164
- // open 是外部控制了
165
- // if (updatedState.open === undefined) {
166
- // if (typeof props.open !== 'undefined') {
167
- // updatedState.open = props.open;
168
- // } else if (
169
- // prevProps.closeOnSelect &&
170
- // this.state.currentView !== viewModes.TIME
171
- // ) {
172
- // updatedState.open = false;
173
- // } else {
174
- // updatedState.open = this.state.open;
175
- // }
176
- // }
177
-
178
164
  if (props.viewMode !== prevProps.viewMode) {
179
165
  updatedState.currentView = props.viewMode;
180
166
  }
@@ -237,7 +223,8 @@ class BaseDatePicker extends React.Component<
237
223
  updatedState.viewDate = moment(props.viewDate);
238
224
  }
239
225
 
240
- if (Object.keys(updatedState).length) {
226
+ // time-range 下会有问题,先不支持
227
+ if (Object.keys(updatedState).length && props.viewMode !== 'time') {
241
228
  this.setState(updatedState);
242
229
  }
243
230
 
@@ -75,10 +75,6 @@ export class CustomYearsView extends React.Component<CustomYearsViewProps> {
75
75
  .clone()
76
76
  .set({year: year, month: irrelevantMonth, date: irrelevantDate});
77
77
 
78
- // Not sure what 'rdtOld' is for, commenting out for now as it's not working properly
79
- // if ( i === -1 | i === 10 )
80
- // classes += ' rdtOld';
81
-
82
78
  noOfDaysInYear = parseInt(currentYear.endOf('year').format('DDD'), 10);
83
79
  daysInYear = Array.from({length: noOfDaysInYear}, function (e, i) {
84
80
  return i + 1;
@@ -95,6 +91,9 @@ export class CustomYearsView extends React.Component<CustomYearsViewProps> {
95
91
 
96
92
  if (selectedDate && selectedDate.year() === year) classes += ' rdtActive';
97
93
 
94
+ // 第一个和最后一个置灰
95
+ if (i === -1 || i === 10) classes += ' text-muted';
96
+
98
97
  props = {
99
98
  'key': year,
100
99
  'data-value': year,
package/src/factory.tsx CHANGED
@@ -42,6 +42,7 @@ import {
42
42
  RendererEvent
43
43
  } from './utils/renderer-event';
44
44
  import {runActions} from './actions/Action';
45
+ import {enableDebug} from './utils/debug';
45
46
 
46
47
  export interface TestFunc {
47
48
  (
@@ -152,6 +153,10 @@ export interface RenderOptions {
152
153
  * 过滤 html 标签,可用来添加 xss 保护逻辑
153
154
  */
154
155
  filterHtml?: (input: string) => string;
156
+ /**
157
+ * 是否开启 amis 调试
158
+ */
159
+ enableAMISDebug?: boolean;
155
160
  [propName: string]: any;
156
161
  }
157
162
 
@@ -271,6 +276,10 @@ const defaultOptions: RenderOptions = {
271
276
  affixOffsetBottom: 0,
272
277
  richTextToken: '',
273
278
  useMobileUI: true, // 是否启用移动端原生 UI
279
+ enableAMISDebug:
280
+ (window as any).enableAMISDebug ??
281
+ location.search.indexOf('amisDebug=1') !== -1 ??
282
+ false,
274
283
  loadRenderer,
275
284
  rendererEventListeners: [],
276
285
  fetcher() {
@@ -492,6 +501,13 @@ export function render(
492
501
  translate
493
502
  } as any;
494
503
 
504
+ if (options.enableAMISDebug) {
505
+ // 因为里面还有 render
506
+ setTimeout(() => {
507
+ enableDebug();
508
+ }, 10);
509
+ }
510
+
495
511
  store = RendererStore.create({}, options);
496
512
  stores[options.session || 'global'] = store;
497
513
  }
@@ -75,6 +75,19 @@ register('de-DE', {
75
75
  'Date.weekslater': '{{weeks}} Wochen später',
76
76
  'Date.yesterday': 'Gestern',
77
77
  'dateformat.year': 'YYYY',
78
+ 'DateRange.daysago': 'letzten {{days}} Tage',
79
+ 'DateRange.dayslater': 'innerhalb von {{days}} Tagen',
80
+ 'DateRange.weeksago': 'letzten {{weeks}} Wochen',
81
+ 'DateRange.weekslater': 'innerhalb von {{weeks}} Wochen',
82
+ 'DateRange.monthsago': 'letzten {{months}} Monate',
83
+ 'DateRange.monthslater': 'innerhalb von {{months}} Monaten',
84
+ 'DateRange.quartersago': 'letzten {{quarters}} Quartale',
85
+ 'DateRange.quarterslater': 'innerhalb von {{quarters}} Quartalen',
86
+ 'DateRange.yearsago': 'letzten {{years}} Jahre',
87
+ 'DateRange.yearslater': '{{years}} Jahren',
88
+ 'DateRange.hoursago': 'letzten {{hours}} Stunden',
89
+ 'DateRange.hourslater': 'innerhalb von {{hours}} Stunden',
90
+ 'DateRange.1dayago': 'Vor 1 Tag',
78
91
  'DateRange.1daysago': 'Vor 1 Tag',
79
92
  'DateRange.7daysago': 'Vor 7 Tagen',
80
93
  'DateRange.30daysago': 'Vor 30 Tagen',
@@ -72,6 +72,19 @@ register('en-US', {
72
72
  'Date.weekslater': '{{weeks}} week(s) later',
73
73
  'Date.yesterday': 'Yesterday',
74
74
  'dateformat.year': 'YYYY',
75
+ 'DateRange.daysago': 'Last {{days}} day(s)',
76
+ 'DateRange.dayslater': 'Within {{days}} day(s)',
77
+ 'DateRange.weeksago': 'Last {{weeks}} week(s)',
78
+ 'DateRange.weekslater': 'Within {{weeks}} week(s)',
79
+ 'DateRange.monthsago': 'Last {{months}} month(s)',
80
+ 'DateRange.monthslater': 'Within {{months}} month(s)',
81
+ 'DateRange.quartersago': 'Last {{quarters}} quarter(s)',
82
+ 'DateRange.quarterslater': 'Within {{quarters}} quarter(s)',
83
+ 'DateRange.yearsago': 'Last {{years}} year(s)',
84
+ 'DateRange.yearslater': 'Within {{years}} year(s)',
85
+ 'DateRange.hoursago': 'Last {{hours}} hour(s)',
86
+ 'DateRange.hourslater': 'Within {{hours}} hour(s)',
87
+ 'DateRange.1dayago': '1 day ago',
75
88
  'DateRange.1daysago': '1 day ago',
76
89
  'DateRange.7daysago': '7 days ago',
77
90
  'DateRange.30daysago': '30 days ago',
@@ -75,7 +75,20 @@ register('zh-CN', {
75
75
  'Date.weekslater': '{{weeks}}周后',
76
76
  'Date.yesterday': '昨天',
77
77
  'dateformat.year': 'YYYY年',
78
+ 'DateRange.daysago': '最近{{days}}天',
79
+ 'DateRange.dayslater': '{{days}}天以内',
80
+ 'DateRange.weeksago': '最近{{weeks}}周',
81
+ 'DateRange.weekslater': '{{weeks}}周以内',
82
+ 'DateRange.monthsago': '最近{{months}}月',
83
+ 'DateRange.monthslater': '{{months}}月以内',
84
+ 'DateRange.quartersago': '最近{{quarters}}季度',
85
+ 'DateRange.quarterslater': '{{quarters}}季度以内',
86
+ 'DateRange.yearsago': '最近{{years}}年',
87
+ 'DateRange.yearslater': '{{years}}年以内',
88
+ 'DateRange.hoursago': '最近{{hours}}小时',
89
+ 'DateRange.hourslater': '{{hours}}小时以内',
78
90
  'DateRange.1daysago': '最近1天',
91
+ 'DateRange.1dayago': '最近1天',
79
92
  'DateRange.7daysago': '最近7天',
80
93
  'DateRange.30daysago': '最近30天',
81
94
  'DateRange.90daysago': '最近90天',
@@ -753,6 +753,8 @@ export class Action extends React.Component<ActionProps, ActionState> {
753
753
  loading,
754
754
  body,
755
755
  render,
756
+ onMouseEnter,
757
+ onMouseLeave,
756
758
  classnames: cx,
757
759
  classPrefix: ns
758
760
  } = this.props;
@@ -768,7 +770,12 @@ export class Action extends React.Component<ActionProps, ActionState> {
768
770
  trigger={tooltipTrigger}
769
771
  rootClose={tooltipRootClose}
770
772
  >
771
- <div className={cx('Action', className)} onClick={this.handleAction}>
773
+ <div
774
+ className={cx('Action', className)}
775
+ onClick={this.handleAction}
776
+ onMouseEnter={onMouseEnter}
777
+ onMouseLeave={onMouseLeave}
778
+ >
772
779
  {render('body', body) as JSX.Element}
773
780
  </div>
774
781
  </TooltipWrapper>
@@ -814,6 +821,8 @@ export class Action extends React.Component<ActionProps, ActionState> {
814
821
  loadingClassName={loadingClassName}
815
822
  loading={loading}
816
823
  onClick={this.handleAction}
824
+ onMouseEnter={onMouseEnter}
825
+ onMouseLeave={onMouseLeave}
817
826
  type={type && ~allowedType.indexOf(type) ? type : 'button'}
818
827
  disabled={disabled}
819
828
  componentClass={isMenuItem ? 'a' : componentClass}
@@ -877,6 +886,16 @@ export class ActionRenderer extends React.Component<
877
886
  }
878
887
  }
879
888
 
889
+ @autobind
890
+ handleMouseEnter(e: React.MouseEvent<any>) {
891
+ this.props.dispatchEvent(e, this.props.data);
892
+ }
893
+
894
+ @autobind
895
+ handleMouseLeave(e: React.MouseEvent<any>) {
896
+ this.props.dispatchEvent(e, this.props.data);
897
+ }
898
+
880
899
  @autobind
881
900
  isCurrentAction(link: string) {
882
901
  const {env, data} = this.props;
@@ -892,6 +911,8 @@ export class ActionRenderer extends React.Component<
892
911
  env={env}
893
912
  disabled={disabled || btnDisabled}
894
913
  onAction={this.handleAction}
914
+ onMouseEnter={this.handleMouseEnter}
915
+ onMouseLeave={this.handleMouseLeave}
895
916
  loading={loading}
896
917
  isCurrentUrl={this.isCurrentAction}
897
918
  tooltipContainer={
@@ -105,6 +105,16 @@ export interface CRUDCommonSchema extends BaseSchema {
105
105
  */
106
106
  perPage?: number;
107
107
 
108
+ /**
109
+ * 默认排序字段
110
+ */
111
+ orderBy?: string;
112
+
113
+ /**
114
+ * 默认排序方向
115
+ */
116
+ orderDir?: 'asc' | 'desc';
117
+
108
118
  /**
109
119
  * 可以默认给定初始参数如: {\"perPage\": 24}
110
120
  */
@@ -772,11 +782,17 @@ export default class CRUD extends React.Component<CRUDProps, any> {
772
782
  }
773
783
 
774
784
  handleFilterInit(values: object) {
775
- const {defaultParams, data, store} = this.props;
785
+ const {defaultParams, data, store, orderBy, orderDir} = this.props;
786
+ const params = {...defaultParams};
787
+
788
+ if (orderBy) {
789
+ params['orderBy'] = orderBy;
790
+ params['orderDir'] = orderDir || 'asc';
791
+ }
776
792
 
777
793
  this.handleFilterSubmit(
778
794
  {
779
- ...defaultParams,
795
+ ...params,
780
796
  ...values,
781
797
  ...store.query
782
798
  },
@@ -1025,7 +1041,8 @@ export default class CRUD extends React.Component<CRUDProps, any> {
1025
1041
  env,
1026
1042
  loadDataOnce,
1027
1043
  loadDataOnceFetchOnFilter,
1028
- source
1044
+ source,
1045
+ columns
1029
1046
  } = this.props;
1030
1047
 
1031
1048
  // reload 需要清空用户选择。
@@ -1066,7 +1083,8 @@ export default class CRUD extends React.Component<CRUDProps, any> {
1066
1083
  pageField,
1067
1084
  perPageField,
1068
1085
  loadDataMode,
1069
- syncResponse2Query
1086
+ syncResponse2Query,
1087
+ columns: store.columns ?? columns
1070
1088
  })
1071
1089
  .then(value => {
1072
1090
  interval &&
@@ -278,6 +278,13 @@ export class Carousel extends React.Component<CarouselProps, CarouselState> {
278
278
  clearTimeout(this.durationTimeout as number);
279
279
  }
280
280
 
281
+ @autobind
282
+ changeSlide(index: number) {
283
+ this.setState({
284
+ current: index
285
+ });
286
+ }
287
+
281
288
  renderDots() {
282
289
  const {classnames: cx} = this.props;
283
290
  const {current, options} = this.state;
@@ -290,6 +297,7 @@ export class Carousel extends React.Component<CarouselProps, CarouselState> {
290
297
  {Array.from({length: options.length}).map((_, i) => (
291
298
  <span
292
299
  key={i}
300
+ onClick={() => this.changeSlide(i)}
293
301
  className={cx('Carousel-dot', current === i ? 'is-active' : '')}
294
302
  />
295
303
  ))}
@@ -19,12 +19,12 @@ export interface CheckboxControlSchema extends FormBaseControl {
19
19
  /**
20
20
  * 勾选值
21
21
  */
22
- trueValue?: any;
22
+ trueValue?: boolean | string | number;
23
23
 
24
24
  /**
25
25
  * 未勾选值
26
26
  */
27
- falseValue?: any;
27
+ falseValue?: boolean | string | number;
28
28
 
29
29
  /**
30
30
  * 选项说明
@@ -35,6 +35,9 @@ export interface CheckboxControlSchema extends FormBaseControl {
35
35
  * 角标
36
36
  */
37
37
  badge?: BadgeSchema;
38
+ partial?: boolean;
39
+ optionType?: 'default' | 'button';
40
+ checked?: boolean;
38
41
  }
39
42
 
40
43
  export interface CheckboxProps
@@ -89,6 +92,9 @@ export default class CheckboxControl extends React.Component<
89
92
  onChange,
90
93
  disabled,
91
94
  render,
95
+ partial,
96
+ optionType,
97
+ checked,
92
98
  classPrefix: ns
93
99
  } = this.props;
94
100
 
@@ -101,6 +107,9 @@ export default class CheckboxControl extends React.Component<
101
107
  falseValue={falseValue}
102
108
  disabled={disabled}
103
109
  onChange={(value: any) => this.dispatchChangeEvent(value)}
110
+ partial={partial}
111
+ optionType={optionType}
112
+ checked={checked}
104
113
  >
105
114
  {option ? render('option', option) : null}
106
115
  </Checkbox>