amis 1.6.5-beta.3 → 1.8.0-beta.0

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 (238) 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/AssociatedSelection.d.ts +84 -84
  7. package/lib/components/Avatar.d.ts +20 -20
  8. package/lib/components/Breadcrumb.d.ts +130 -0
  9. package/lib/components/Breadcrumb.js +161 -0
  10. package/lib/components/Breadcrumb.js.map +13 -0
  11. package/lib/components/Card.d.ts +20 -20
  12. package/lib/components/ChainedSelection.d.ts +84 -84
  13. package/lib/components/CityArea.js +3 -0
  14. package/lib/components/CityArea.js.map +2 -2
  15. package/lib/components/Collapse.d.ts +20 -20
  16. package/lib/components/CollapseGroup.d.ts +20 -20
  17. package/lib/components/DatePicker.d.ts +84 -84
  18. package/lib/components/DateRangePicker.d.ts +2 -2
  19. package/lib/components/DateRangePicker.js +36 -45
  20. package/lib/components/DateRangePicker.js.map +2 -2
  21. package/lib/components/GroupedSelection.d.ts +84 -84
  22. package/lib/components/Layout.d.ts +21 -21
  23. package/lib/components/ListGroup.d.ts +21 -21
  24. package/lib/components/PopUp.js +2 -1
  25. package/lib/components/PopUp.js.map +2 -2
  26. package/lib/components/Radios.d.ts +21 -21
  27. package/lib/components/Range.js.map +2 -2
  28. package/lib/components/Selection.d.ts +84 -84
  29. package/lib/components/TableSelection.d.ts +84 -84
  30. package/lib/components/Tabs.d.ts +52 -23
  31. package/lib/components/Tabs.js +198 -46
  32. package/lib/components/Tabs.js.map +2 -2
  33. package/lib/components/TooltipWrapper.d.ts +21 -20
  34. package/lib/components/TooltipWrapper.js +2 -2
  35. package/lib/components/TooltipWrapper.js.map +2 -2
  36. package/lib/components/Transfer.d.ts +84 -84
  37. package/lib/components/TransferDropDown.d.ts +84 -84
  38. package/lib/components/Tree.d.ts +84 -84
  39. package/lib/components/TreeSelection.d.ts +84 -84
  40. package/lib/components/calendar/Calendar.js +5 -0
  41. package/lib/components/calendar/Calendar.js.map +2 -2
  42. package/lib/components/calendar/DaysView.js.map +1 -1
  43. package/lib/components/icons.js +8 -0
  44. package/lib/components/icons.js.map +2 -2
  45. package/lib/components/index.d.ts +2 -1
  46. package/lib/components/index.js +4 -2
  47. package/lib/components/index.js.map +2 -2
  48. package/lib/icons/cloud-upload.js +17 -0
  49. package/lib/icons/image.js +7 -0
  50. package/lib/icons/refresh.js +9 -0
  51. package/lib/icons/trash.js +10 -0
  52. package/lib/icons/upload.js +3 -8
  53. package/lib/index.d.ts +1 -0
  54. package/lib/index.js +2 -1
  55. package/lib/index.js.map +2 -2
  56. package/lib/locale/en-US.js +3 -1
  57. package/lib/locale/en-US.js.map +2 -2
  58. package/lib/locale/zh-CN.js +4 -2
  59. package/lib/locale/zh-CN.js.map +2 -2
  60. package/lib/renderers/Action.d.ts +1 -1
  61. package/lib/renderers/Action.js.map +2 -2
  62. package/lib/renderers/Breadcrumb.d.ts +41 -6
  63. package/lib/renderers/Breadcrumb.js +23 -19
  64. package/lib/renderers/Breadcrumb.js.map +2 -2
  65. package/lib/renderers/ButtonGroup.d.ts +2 -2
  66. package/lib/renderers/ButtonGroup.js.map +1 -1
  67. package/lib/renderers/Form/ChainedSelect.d.ts +4 -1
  68. package/lib/renderers/Form/ChainedSelect.js +83 -34
  69. package/lib/renderers/Form/ChainedSelect.js.map +2 -2
  70. package/lib/renderers/Form/Checkbox.d.ts +3 -0
  71. package/lib/renderers/Form/Checkbox.js +38 -1
  72. package/lib/renderers/Form/Checkbox.js.map +2 -2
  73. package/lib/renderers/Form/Combo.d.ts +4 -3
  74. package/lib/renderers/Form/Combo.js +81 -32
  75. package/lib/renderers/Form/Combo.js.map +2 -2
  76. package/lib/renderers/Form/DiffEditor.d.ts +1 -1
  77. package/lib/renderers/Form/InputCity.d.ts +84 -84
  78. package/lib/renderers/Form/InputCity.js +4 -1
  79. package/lib/renderers/Form/InputCity.js.map +2 -2
  80. package/lib/renderers/Form/InputColor.js +3 -1
  81. package/lib/renderers/Form/InputColor.js.map +2 -2
  82. package/lib/renderers/Form/InputDate.js +3 -1
  83. package/lib/renderers/Form/InputDate.js.map +2 -2
  84. package/lib/renderers/Form/InputDateRange.js +3 -1
  85. package/lib/renderers/Form/InputDateRange.js.map +2 -2
  86. package/lib/renderers/Form/InputExcel.d.ts +4 -0
  87. package/lib/renderers/Form/InputExcel.js +33 -6
  88. package/lib/renderers/Form/InputExcel.js.map +2 -2
  89. package/lib/renderers/Form/InputFile.d.ts +8 -1
  90. package/lib/renderers/Form/InputFile.js +71 -42
  91. package/lib/renderers/Form/InputFile.js.map +2 -2
  92. package/lib/renderers/Form/InputImage.d.ts +4 -1
  93. package/lib/renderers/Form/InputImage.js +21 -9
  94. package/lib/renderers/Form/InputImage.js.map +2 -2
  95. package/lib/renderers/Form/InputRange.d.ts +27 -9
  96. package/lib/renderers/Form/InputRange.js +88 -23
  97. package/lib/renderers/Form/InputRange.js.map +2 -2
  98. package/lib/renderers/Form/InputSubForm.js +2 -1
  99. package/lib/renderers/Form/InputSubForm.js.map +2 -2
  100. package/lib/renderers/Form/InputTag.js +2 -1
  101. package/lib/renderers/Form/InputTag.js.map +2 -2
  102. package/lib/renderers/Form/MatrixCheckboxes.js +2 -1
  103. package/lib/renderers/Form/MatrixCheckboxes.js.map +2 -2
  104. package/lib/renderers/Form/NestedSelect.d.ts +9 -6
  105. package/lib/renderers/Form/NestedSelect.js +247 -130
  106. package/lib/renderers/Form/NestedSelect.js.map +2 -2
  107. package/lib/renderers/Form/Options.js +2 -1
  108. package/lib/renderers/Form/Options.js.map +2 -2
  109. package/lib/renderers/Form/Radios.js +2 -1
  110. package/lib/renderers/Form/Radios.js.map +2 -2
  111. package/lib/renderers/Form/Select.js +6 -3
  112. package/lib/renderers/Form/Select.js.map +2 -2
  113. package/lib/renderers/Form/Switch.d.ts +7 -6
  114. package/lib/renderers/Form/Switch.js +4 -1
  115. package/lib/renderers/Form/Switch.js.map +2 -2
  116. package/lib/renderers/Log.js +2 -1
  117. package/lib/renderers/Log.js.map +2 -2
  118. package/lib/renderers/PopOver.js +1 -1
  119. package/lib/renderers/PopOver.js.map +2 -2
  120. package/lib/renderers/Tabs.d.ts +58 -5
  121. package/lib/renderers/Tabs.js +170 -58
  122. package/lib/renderers/Tabs.js.map +2 -2
  123. package/lib/renderers/TooltipWrapper.d.ts +104 -0
  124. package/lib/renderers/TooltipWrapper.js +59 -0
  125. package/lib/renderers/TooltipWrapper.js.map +13 -0
  126. package/lib/renderers/Video.d.ts +6 -0
  127. package/lib/renderers/Video.js +13 -6
  128. package/lib/renderers/Video.js.map +2 -2
  129. package/lib/store/form.js +4 -13
  130. package/lib/store/form.js.map +2 -2
  131. package/lib/store/table.js +1 -1
  132. package/lib/store/table.js.map +2 -2
  133. package/lib/themes/ang-ie11.css +742 -160
  134. package/lib/themes/ang.css +793 -163
  135. package/lib/themes/ang.css.map +1 -1
  136. package/lib/themes/antd-ie11.css +757 -175
  137. package/lib/themes/antd.css +793 -163
  138. package/lib/themes/antd.css.map +1 -1
  139. package/lib/themes/cxd-ie11.css +1249 -667
  140. package/lib/themes/cxd.css +970 -321
  141. package/lib/themes/cxd.css.map +1 -1
  142. package/lib/themes/dark-ie11.css +742 -160
  143. package/lib/themes/dark.css +793 -163
  144. package/lib/themes/dark.css.map +1 -1
  145. package/lib/themes/default-ie11.css +1249 -667
  146. package/lib/themes/default.css +970 -321
  147. package/lib/themes/default.css.map +1 -1
  148. package/package.json +1 -1
  149. package/schema.json +16012 -736
  150. package/scss/_properties.scss +56 -2
  151. package/scss/components/_alert.scss +1 -1
  152. package/scss/components/_breadcrumb.scss +90 -1
  153. package/scss/components/_button-group.scss +15 -0
  154. package/scss/components/_city-area.scss +2 -0
  155. package/scss/components/_popup.scss +13 -3
  156. package/scss/components/_tabs.scss +629 -132
  157. package/scss/components/_tooltip.scss +72 -0
  158. package/scss/components/form/_file.scss +82 -24
  159. package/scss/components/form/_image.scss +30 -25
  160. package/scss/components/form/_number.scss +2 -0
  161. package/scss/components/form/_switch.scss +1 -3
  162. package/scss/themes/_cxd-colors.scss +47 -47
  163. package/scss/themes/_cxd-variables.scss +20 -0
  164. package/sdk/ang-ie11.css +879 -196
  165. package/sdk/ang.css +931 -200
  166. package/sdk/antd-ie11.css +951 -268
  167. package/sdk/antd.css +931 -200
  168. package/sdk/barcode.js +51 -51
  169. package/sdk/charts.js +14 -14
  170. package/sdk/codemirror.js +7 -7
  171. package/sdk/color-picker.js +65 -65
  172. package/sdk/cropperjs.js +2 -2
  173. package/sdk/cxd-ie11.css +1386 -703
  174. package/sdk/cxd.css +1107 -357
  175. package/sdk/dark-ie11.css +879 -196
  176. package/sdk/dark.css +931 -200
  177. package/sdk/exceljs.js +1 -1
  178. package/sdk/markdown.js +69 -69
  179. package/sdk/papaparse.js +1 -1
  180. package/sdk/renderers/Form/CityDB.js +1 -1
  181. package/sdk/rest.js +17 -17
  182. package/sdk/rich-text.js +62 -62
  183. package/sdk/sdk-ie11.css +1386 -703
  184. package/sdk/sdk.css +1107 -357
  185. package/sdk/sdk.js +1260 -1248
  186. package/sdk/thirds/hls.js/hls.js +1 -1
  187. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  188. package/sdk/tinymce.js +57 -57
  189. package/src/Schema.ts +5 -2
  190. package/src/components/Alert2.tsx +9 -3
  191. package/src/components/Breadcrumb.tsx +294 -0
  192. package/src/components/CityArea.tsx +3 -0
  193. package/src/components/DateRangePicker.tsx +40 -68
  194. package/src/components/PopUp.tsx +6 -5
  195. package/src/components/Range.tsx +7 -1
  196. package/src/components/Tabs.tsx +300 -54
  197. package/src/components/TooltipWrapper.tsx +4 -1
  198. package/src/components/calendar/Calendar.tsx +5 -0
  199. package/src/components/calendar/DaysView.tsx +2 -2
  200. package/src/components/icons.tsx +8 -0
  201. package/src/components/index.tsx +2 -0
  202. package/src/icons/cloud-upload.svg +22 -0
  203. package/src/icons/image.svg +1 -0
  204. package/src/icons/refresh.svg +7 -0
  205. package/src/icons/trash.svg +8 -0
  206. package/src/icons/upload.svg +4 -9
  207. package/src/index.tsx +1 -0
  208. package/src/locale/en-US.ts +3 -1
  209. package/src/locale/zh-CN.ts +4 -2
  210. package/src/renderers/Action.tsx +2 -1
  211. package/src/renderers/Breadcrumb.tsx +89 -45
  212. package/src/renderers/ButtonGroup.tsx +2 -2
  213. package/src/renderers/Form/ChainedSelect.tsx +56 -12
  214. package/src/renderers/Form/Checkbox.tsx +30 -1
  215. package/src/renderers/Form/Combo.tsx +84 -26
  216. package/src/renderers/Form/InputCity.tsx +13 -1
  217. package/src/renderers/Form/InputColor.tsx +2 -0
  218. package/src/renderers/Form/InputDate.tsx +2 -0
  219. package/src/renderers/Form/InputDateRange.tsx +2 -0
  220. package/src/renderers/Form/InputExcel.tsx +27 -5
  221. package/src/renderers/Form/InputFile.tsx +167 -115
  222. package/src/renderers/Form/InputImage.tsx +61 -35
  223. package/src/renderers/Form/InputRange.tsx +95 -40
  224. package/src/renderers/Form/InputSubForm.tsx +2 -1
  225. package/src/renderers/Form/InputTag.tsx +3 -1
  226. package/src/renderers/Form/MatrixCheckboxes.tsx +3 -1
  227. package/src/renderers/Form/NestedSelect.tsx +75 -26
  228. package/src/renderers/Form/Options.tsx +3 -1
  229. package/src/renderers/Form/Radios.tsx +3 -1
  230. package/src/renderers/Form/Select.tsx +6 -2
  231. package/src/renderers/Form/Switch.tsx +16 -9
  232. package/src/renderers/Log.tsx +2 -1
  233. package/src/renderers/PopOver.tsx +1 -1
  234. package/src/renderers/Tabs.tsx +254 -93
  235. package/src/renderers/TooltipWrapper.tsx +219 -0
  236. package/src/renderers/Video.tsx +21 -6
  237. package/src/store/form.ts +0 -9
  238. package/src/store/table.ts +1 -1
package/src/Schema.ts CHANGED
@@ -52,6 +52,7 @@ import {DialogSchema, DialogSchemaBase} from './renderers/Dialog';
52
52
  import {DrawerSchema} from './renderers/Drawer';
53
53
  import {SearchBoxSchema} from './renderers/SearchBox';
54
54
  import {SparkLineSchema} from './renderers/SparkLine';
55
+ import {TooltipWrapperSchema} from './renderers/TooltipWrapper';
55
56
  import {PaginationWrapperSchema} from './renderers/PaginationWrapper';
56
57
  import {PaginationSchema} from './renderers/Pagination';
57
58
  import {AnchorNavSchema} from './renderers/AnchorNav';
@@ -331,7 +332,8 @@ export type SchemaType =
331
332
  | 'native-date'
332
333
  | 'native-time'
333
334
  | 'native-number'
334
- | 'code';
335
+ | 'code'
336
+ | 'tooltip-wrapper';
335
337
 
336
338
  export type SchemaObject =
337
339
  | PageSchema
@@ -389,6 +391,7 @@ export type SchemaObject =
389
391
  | VideoSchema
390
392
  | WizardSchema
391
393
  | WrapperSchema
394
+ | TooltipWrapperSchema
392
395
  | FormSchema
393
396
  | AnchorNavSchema
394
397
  | StepsSchema
@@ -882,4 +885,4 @@ export interface ToastSchemaBase extends BaseSchema {
882
885
  * 持续时间
883
886
  */
884
887
  timeout: number;
885
- };
888
+ }
@@ -5,7 +5,8 @@
5
5
 
6
6
  import React from 'react';
7
7
  import {ClassNamesFn, themeable} from '../theme';
8
- import {Icon} from './icons';
8
+ import {generateIcon} from '../utils/icon';
9
+ import {Icon, getIcon} from './icons';
9
10
 
10
11
  export interface AlertProps {
11
12
  level: 'danger' | 'info' | 'success' | 'warning';
@@ -73,16 +74,21 @@ export class Alert extends React.Component<AlertProps, AlertState> {
73
74
  closeButtonClassName
74
75
  } = this.props;
75
76
 
77
+ // 优先使用内置svg,其次使用icon库
76
78
  const iconNode = icon ? (
77
79
  typeof icon === 'string' ? (
78
- <Icon icon={icon} className={cx(`Alert-icon icon`)} />
80
+ getIcon(icon) ? (
81
+ <Icon icon={icon} className={cx(`icon`)} />
82
+ ) : (
83
+ generateIcon(cx, icon, 'icon')
84
+ )
79
85
  ) : React.isValidElement(icon) ? (
80
86
  React.cloneElement(icon, {
81
87
  className: cx(`Alert-icon`, icon.props?.className)
82
88
  })
83
89
  ) : null
84
90
  ) : showIcon ? (
85
- <Icon icon={`alert-${level}`} className={cx(`Alert-icon icon`)} />
91
+ <Icon icon={`alert-${level}`} className={cx(`icon`)} />
86
92
  ) : null;
87
93
 
88
94
  return this.state.show ? (
@@ -0,0 +1,294 @@
1
+ /**
2
+ * @file Breadcrumb 面包屑
3
+ */
4
+
5
+ import React from 'react';
6
+ import TooltipWrapper, {Trigger} from './TooltipWrapper';
7
+ import {ClassNamesFn, themeable, ThemeProps} from '../theme';
8
+ import {RootClose} from '../utils/RootClose';
9
+ import {removeHTMLTag} from '../utils/helper';
10
+ import {Icon} from '../components/icons';
11
+ import {generateIcon} from '../utils/icon';
12
+ import {
13
+ ItemPlace,
14
+ BreadcrumbBaseItemSchema,
15
+ BreadcrumbItemSchema,
16
+ TooltipPositionType,
17
+ BreadcrumbSchema
18
+ } from '../renderers/Breadcrumb';
19
+
20
+ interface BreadcrumbItemState {
21
+ isOpened: boolean;
22
+ tooltipTrigger: Trigger | Array<Trigger>;
23
+ tooltipRootClose: boolean;
24
+ }
25
+
26
+ interface BreadcrumbBaseItemProps
27
+ extends BreadcrumbBaseItemSchema {}
28
+
29
+ interface BreadcrumbItemProps {
30
+ item: BreadcrumbItemSchema;
31
+ itemPlace: ItemPlace;
32
+ labelMaxLength?: number;
33
+ tooltipContainer?: any;
34
+ tooltipPosition?: TooltipPositionType;
35
+ classnames: ClassNamesFn;
36
+ [propName: string]: any;
37
+ }
38
+
39
+ interface BreadcrumbProps extends ThemeProps,
40
+ Omit<BreadcrumbSchema, 'type' | 'className'> {
41
+ tooltipContainer?: any;
42
+ tooltipPosition?: TooltipPositionType;
43
+ [propName: string]: any;
44
+ }
45
+
46
+ /**
47
+ * Breadcrumb 面包屑类
48
+ */
49
+ export class Breadcrumb extends React.Component<BreadcrumbProps> {
50
+ Item: typeof BreadcrumbItem;
51
+
52
+ static defaultProps: Pick<
53
+ BreadcrumbProps,
54
+ | 'separator'
55
+ | 'labelMaxLength'
56
+ | 'tooltipPosition'
57
+ > = {
58
+ separator: '>',
59
+ labelMaxLength: 16,
60
+ tooltipPosition: 'top'
61
+ };
62
+
63
+ render() {
64
+ const cx = this.props.classnames;
65
+ const {
66
+ className,
67
+ separatorClassName,
68
+ items,
69
+ separator,
70
+ ...restProps
71
+ } = this.props;
72
+
73
+ const crumbsLength = items?.length;
74
+ if (!crumbsLength) {
75
+ return <div className={cx('Breadcrumb', className)}></div>;
76
+ }
77
+
78
+ const crumbs = items.map<React.ReactNode>((item, index) => {
79
+ let itemPlace: ItemPlace = 'middle';
80
+ if (index === 0) {
81
+ itemPlace = 'start';
82
+ }
83
+ if (index === crumbsLength - 1) {
84
+ itemPlace = 'end';
85
+ }
86
+ return (
87
+ <BreadcrumbItem
88
+ {...restProps}
89
+ item={item}
90
+ itemPlace={itemPlace}
91
+ key={index}
92
+ ></BreadcrumbItem>
93
+ )
94
+ })
95
+ .reduce((prev, curr, index) => [
96
+ prev,
97
+ <span
98
+ className={cx('Breadcrumb-separator', separatorClassName)}
99
+ key={`separator-${index}`}
100
+ >
101
+ {separator}
102
+ </span>,
103
+ curr
104
+ ]);
105
+
106
+ return (
107
+ <div className={cx('Breadcrumb', className)}>{crumbs}</div>
108
+ );
109
+ }
110
+ }
111
+
112
+ /**
113
+ * BreadcrumbItem 面包项类
114
+ */
115
+ export class BreadcrumbItem extends React.Component<BreadcrumbItemProps, BreadcrumbItemState> {
116
+ target: any;
117
+
118
+ state: BreadcrumbItemState = {
119
+ tooltipTrigger: ['hover', 'focus'],
120
+ tooltipRootClose: false,
121
+ isOpened: false
122
+ };
123
+
124
+ domRef = (ref: any) => {
125
+ this.target = ref;
126
+ }
127
+
128
+ toogle = (e: React.MouseEvent<any>) => {
129
+ e.preventDefault();
130
+
131
+ this.setState({
132
+ isOpened: !this.state.isOpened
133
+ });
134
+ }
135
+
136
+ close = () => {
137
+ this.setState({
138
+ isOpened: false
139
+ });
140
+ }
141
+
142
+ /**
143
+ * 渲染基础面包项
144
+ * @param showHref 是否显示超链接
145
+ * @param itemType 基础面包项类型
146
+ * @param item 面包项
147
+ * @param label 渲染文本
148
+ * @returns
149
+ */
150
+ renderBreadcrumbBaseItem(
151
+ showHref: boolean,
152
+ itemType: 'default' | 'dropdown',
153
+ item: BreadcrumbBaseItemProps,
154
+ label?: string,
155
+ ) {
156
+ const {
157
+ itemClassName,
158
+ dropdownItemClassName,
159
+ classnames: cx
160
+ } = this.props;
161
+ const baseItemClassName = itemType === 'default' ? itemClassName : dropdownItemClassName;
162
+ if (showHref) {
163
+ return (
164
+ <a href={item.href} className={cx('Breadcrumb-item-' + itemType, baseItemClassName)}>
165
+ {item.icon
166
+ ? generateIcon(cx, item.icon, 'Icon', 'Breadcrumb-icon')
167
+ : null}
168
+ <span className={cx('TplField')}>{label}</span>
169
+ </a>
170
+ );
171
+ }
172
+ return (
173
+ <span className={cx('Breadcrumb-item-' + itemType, baseItemClassName)}>
174
+ {item.icon
175
+ ? generateIcon(cx, item.icon, 'Icon', 'Breadcrumb-icon')
176
+ : null}
177
+ <span className={cx('TplField')}>{label}</span>
178
+ </span>
179
+ );
180
+ }
181
+
182
+ /**
183
+ * 渲染基础面包项完整节点
184
+ * @param item 面包项
185
+ * @param tooltipPosition 浮窗提示位置
186
+ * @param itemPlace 面包香所在相对位置
187
+ * @param itemType 基础面包项类型
188
+ * @returns
189
+ */
190
+ renderBreadcrumbNode(
191
+ item: BreadcrumbBaseItemProps,
192
+ tooltipPosition: TooltipPositionType = 'top',
193
+ itemPlace: ItemPlace,
194
+ itemType: 'default' | 'dropdown'
195
+ ) {
196
+ const {
197
+ labelMaxLength,
198
+ tooltipContainer
199
+ } = this.props;
200
+ const {
201
+ tooltipTrigger,
202
+ tooltipRootClose
203
+ } = this.state;
204
+ const pureLabel = item.label ? removeHTMLTag(item.label) : '';
205
+ // 限制最大展示长度的最小值
206
+ const maxLength = labelMaxLength && +labelMaxLength > 1 ? +labelMaxLength : 1;
207
+ // 面包项相对位置为 middle ,且超过最大展示长度的面包项,进行缩略展示,并使用浮窗提示
208
+ if (pureLabel.length > maxLength && itemPlace === 'middle') {
209
+ return (
210
+ <TooltipWrapper
211
+ tooltip={pureLabel}
212
+ placement={tooltipPosition}
213
+ container={tooltipContainer}
214
+ trigger={tooltipTrigger}
215
+ rootClose={tooltipRootClose}
216
+ >
217
+ {this.renderBreadcrumbBaseItem(true, itemType, item, pureLabel.substring(0, maxLength) + '...')}
218
+ </TooltipWrapper>
219
+ );
220
+ }
221
+ const showHref = !item.href || itemPlace === 'end';
222
+ return this.renderBreadcrumbBaseItem(!showHref, itemType, item, pureLabel);
223
+ }
224
+
225
+ /**
226
+ * 渲染下拉菜单节点
227
+ * @param dropdown 面包项下拉菜单
228
+ * @returns
229
+ */
230
+ renderDropdownNode(dropdown: BreadcrumbBaseItemProps[]) {
231
+ const {
232
+ dropdownClassName,
233
+ classnames: cx
234
+ } = this.props;
235
+ return (
236
+ <RootClose
237
+ disabled={!this.state.isOpened}
238
+ onRootClose={this.close}
239
+ >
240
+ {(ref: any) => {
241
+ return (
242
+ <ul
243
+ className={cx('Breadcrumb-dropdown', dropdownClassName)}
244
+ onClick={this.close}
245
+ ref={ref}
246
+ >
247
+ {Array.isArray(dropdown)
248
+ && dropdown.map((menuItem: BreadcrumbBaseItemProps, index: number) => {
249
+ return (
250
+ <li key={'dropdown-item' + index}>
251
+ {this.renderBreadcrumbNode(menuItem, 'right', 'middle', 'dropdown')}
252
+ </li>
253
+ );
254
+ })}
255
+ </ul>
256
+ );
257
+ }}
258
+ </RootClose>
259
+ );
260
+ }
261
+
262
+ render() {
263
+ const {
264
+ item,
265
+ itemPlace,
266
+ tooltipPosition,
267
+ classnames: cx
268
+ } = this.props;
269
+ const {dropdown, ...restItemProps} = item;
270
+ return (
271
+ <span
272
+ className={cx('Breadcrumb-item',
273
+ {
274
+ 'is-opened': this.state.isOpened
275
+ },
276
+ {
277
+ 'Breadcrumb-item-last': itemPlace === 'end'
278
+ }
279
+ )}
280
+ ref={this.domRef}
281
+ >
282
+ {this.renderBreadcrumbNode({...restItemProps}, tooltipPosition, itemPlace, 'default')}
283
+ {dropdown ? (
284
+ <span onClick={this.toogle} className={cx('Breadcrumb-item-caret')}>
285
+ <Icon icon="caret" className="icon" />
286
+ </span>
287
+ ): null}
288
+ {dropdown && this.state.isOpened ? this.renderDropdownNode(dropdown) : null}
289
+ </span>
290
+ );
291
+ }
292
+ }
293
+
294
+ export default themeable(Breadcrumb);
@@ -145,8 +145,11 @@ const CityArea = memo<AreaProps>(props => {
145
145
  } else {
146
146
  onChange({
147
147
  code,
148
+ provinceCode: province,
148
149
  province: db[province],
150
+ cityCode: city,
149
151
  city: db[city],
152
+ districtCode: district,
150
153
  district: db[district],
151
154
  street
152
155
  });
@@ -224,6 +224,9 @@ export class DateRangePicker extends React.Component<
224
224
  popover: any;
225
225
  input?: HTMLInputElement;
226
226
 
227
+ // 是否是第一次点击,如果是第一次点击就可以点任意地址
228
+ isFirstClick: boolean = true;
229
+
227
230
  static formatValue(
228
231
  newValue: any,
229
232
  format: string,
@@ -276,8 +279,7 @@ export class DateRangePicker extends React.Component<
276
279
 
277
280
  this.open = this.open.bind(this);
278
281
  this.close = this.close.bind(this);
279
- this.handleStartChange = this.handleStartChange.bind(this);
280
- this.handleEndChange = this.handleEndChange.bind(this);
282
+ this.handleSelectChange = this.handleSelectChange.bind(this);
281
283
  this.handleFocus = this.handleFocus.bind(this);
282
284
  this.handleBlur = this.handleBlur.bind(this);
283
285
  this.checkStartIsValidDate = this.checkStartIsValidDate.bind(this);
@@ -426,61 +428,47 @@ export class DateRangePicker extends React.Component<
426
428
  return value;
427
429
  }
428
430
 
429
- handleStartChange(newValue: moment.Moment) {
431
+ handleSelectChange(newValue: moment.Moment) {
430
432
  const {embed, timeFormat, minDuration, maxDuration, minDate} = this.props;
431
- const {startDate, endDate} = this.state;
432
-
433
- if (
434
- startDate &&
435
- (!endDate || (endDate && newValue.isSame(startDate))) && // 没有结束时间,或者新的时间也是开始时间,这时都会将新值当成结束时间
436
- newValue.isSameOrAfter(startDate) &&
437
- (!minDuration || newValue.isAfter(startDate.clone().add(minDuration))) &&
438
- (!maxDuration || newValue.isBefore(startDate.clone().add(maxDuration)))
439
- ) {
440
- return this.setState(
441
- {
442
- endDate: this.filterDate(newValue, endDate, timeFormat, 'end')
443
- },
444
- () => {
445
- embed && this.confirm();
446
- }
447
- );
448
- }
449
-
450
- if (minDate && newValue && newValue.isBefore(minDate, 'second')) {
451
- newValue = minDate;
452
- }
433
+ let {startDate, endDate} = this.state;
453
434
 
454
- this.setState(
455
- {
435
+ // 第一次点击只标记起始时间,或者点击了开始时间前面的时间
436
+ if (this.isFirstClick || newValue.isBefore(startDate)) {
437
+ // 这种情况说明第二次点击点击了前面的时间,这时要标记为第二次点击
438
+ if (newValue.isBefore(startDate)) {
439
+ this.isFirstClick = true;
440
+ }
441
+ if (minDate && newValue.isBefore(minDate)) {
442
+ newValue = minDate;
443
+ }
444
+ this.setState({
456
445
  startDate: this.filterDate(
457
446
  newValue,
458
447
  startDate || minDate,
459
448
  timeFormat,
460
449
  'start'
461
- )
462
- },
463
- () => {
464
- embed && this.confirm();
450
+ ),
451
+ endDate: undefined
452
+ });
453
+ } else {
454
+ // 第二次点击作为结束时间
455
+ if (!startDate) {
456
+ // 不大可能,但只能作为开始时间了
457
+ startDate = newValue;
465
458
  }
466
- );
467
- }
468
459
 
469
- handleEndChange(newValue: moment.Moment) {
470
- const {embed, timeFormat, minDuration, maxDuration, maxDate} = this.props;
471
- const {startDate, endDate} = this.state;
472
-
473
- if (
474
- endDate &&
475
- !startDate &&
476
- newValue.isSameOrBefore(endDate) &&
477
- (!minDuration ||
478
- newValue.isBefore(endDate.clone().subtract(minDuration))) &&
479
- (!maxDuration || newValue.isAfter(endDate.clone().subtract(maxDuration)))
480
- ) {
481
- return this.setState(
460
+ if (minDuration && newValue.isAfter(startDate.clone().add(minDuration))) {
461
+ newValue = startDate.clone().add(minDuration);
462
+ }
463
+ if (
464
+ maxDuration &&
465
+ newValue.isBefore(startDate.clone().add(maxDuration))
466
+ ) {
467
+ newValue = startDate.clone().add(maxDuration);
468
+ }
469
+ this.setState(
482
470
  {
483
- startDate: this.filterDate(newValue, startDate, timeFormat, 'start')
471
+ endDate: this.filterDate(newValue, endDate, timeFormat, 'end')
484
472
  },
485
473
  () => {
486
474
  embed && this.confirm();
@@ -488,23 +476,7 @@ export class DateRangePicker extends React.Component<
488
476
  );
489
477
  }
490
478
 
491
- if (maxDate && newValue && newValue.isAfter(maxDate, 'second')) {
492
- newValue = maxDate;
493
- }
494
-
495
- this.setState(
496
- {
497
- endDate: this.filterDate(
498
- newValue,
499
- endDate || maxDate,
500
- timeFormat,
501
- 'end'
502
- )
503
- },
504
- () => {
505
- embed && this.confirm();
506
- }
507
- );
479
+ this.isFirstClick = !this.isFirstClick;
508
480
  }
509
481
 
510
482
  handleMobileChange(data: any, callback?: () => void) {
@@ -600,7 +572,7 @@ export class DateRangePicker extends React.Component<
600
572
  ? maxDate.isBefore(endDate)
601
573
  ? maxDate
602
574
  : endDate
603
- : maxDate || endDate;
575
+ : undefined;
604
576
 
605
577
  if (minDate && currentDate.isBefore(minDate, precision)) {
606
578
  return false;
@@ -634,7 +606,7 @@ export class DateRangePicker extends React.Component<
634
606
  ? minDate.isAfter(startDate)
635
607
  ? minDate
636
608
  : startDate
637
- : minDate || startDate;
609
+ : undefined;
638
610
 
639
611
  if (minDate && currentDate.isBefore(minDate, precision)) {
640
612
  return false;
@@ -712,7 +684,7 @@ export class DateRangePicker extends React.Component<
712
684
  <Calendar
713
685
  className={`${ns}DateRangePicker-start`}
714
686
  value={startDate}
715
- onChange={this.handleStartChange}
687
+ onChange={this.handleSelectChange}
716
688
  requiredConfirm={false}
717
689
  dateFormat={dateFormat}
718
690
  inputFormat={inputFormat}
@@ -729,7 +701,7 @@ export class DateRangePicker extends React.Component<
729
701
  <Calendar
730
702
  className={`${ns}DateRangePicker-end`}
731
703
  value={endDate}
732
- onChange={this.handleEndChange}
704
+ onChange={this.handleSelectChange}
733
705
  requiredConfirm={false}
734
706
  dateFormat={dateFormat}
735
707
  inputFormat={inputFormat}
@@ -113,11 +113,12 @@ export class PopUp extends React.PureComponent<PopUpPorps> {
113
113
  {!showConfirm && showClose ? (
114
114
  <div className={cx(`${ns}PopUp-closeWrap`)}>
115
115
  {header}
116
- <Icon
117
- icon="close"
118
- className={cx('icon', `${ns}PopUp-close`)}
119
- onClick={onHide}
120
- />
116
+ <span className={cx(`PopUp-closeBox`)} onClick={onHide}>
117
+ <Icon
118
+ icon="close"
119
+ className={cx('icon', `${ns}PopUp-close`)}
120
+ />
121
+ </span>
121
122
  </div>
122
123
  ) : null}
123
124
  {showConfirm && (
@@ -19,13 +19,19 @@ import {
19
19
  MultipleValue,
20
20
  Value,
21
21
  FormatValue,
22
- MarksType,
23
22
  RangeItemProps
24
23
  } from '../renderers/Form/InputRange';
25
24
  import {stripNumber} from '../utils/tpl-builtin';
26
25
  import {findDOMNode} from 'react-dom';
27
26
  import {Icon} from './icons';
28
27
 
28
+ type MarksType = {
29
+ [index: number | string]: Record<
30
+ number,
31
+ React.ReactNode | {style?: React.CSSProperties; label?: string}
32
+ >;
33
+ };
34
+
29
35
  interface HandleItemState {
30
36
  isDrag: boolean;
31
37
  labelActive: boolean;