@cloudbase/weda-ui 0.2.17 → 1.0.21

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 (138) hide show
  1. package/README.md +3 -0
  2. package/package.json +6 -3
  3. package/src/configs/components/calendar.json +4 -1
  4. package/src/configs/components/chart/bar.json +19 -6
  5. package/src/configs/components/chart/line.json +19 -6
  6. package/src/configs/components/chart/pie.json +14 -4
  7. package/src/configs/components/chart/statisticsCard.json +61 -13
  8. package/src/configs/components/container.json +7 -2
  9. package/src/configs/components/dataView.json +21 -6
  10. package/src/configs/components/form/checkbox.json +97 -5
  11. package/src/configs/components/form/radio.json +96 -4
  12. package/src/configs/components/form/select.json +245 -11
  13. package/src/configs/components/graphicCard.json +84 -73
  14. package/src/configs/components/image.json +7 -2
  15. package/src/configs/components/link.json +19 -3
  16. package/src/configs/components/listView.json +63 -17
  17. package/src/configs/components/modal.json +37 -5
  18. package/src/configs/components/navLayout.json +87 -75
  19. package/src/configs/components/navigationBar.json +59 -0
  20. package/src/configs/components/richtextview.json +4 -1
  21. package/src/configs/components/scrollVeiw.json +74 -22
  22. package/src/configs/components/swiper.json +4 -1
  23. package/src/configs/components/tabs.json +51 -8
  24. package/src/configs/components/text.json +33 -25
  25. package/src/configs/components/wxOpenApi/phone.json +141 -0
  26. package/src/configs/components/wxOpenApi/phoneCode.json +121 -0
  27. package/src/configs/components/wxOpenApi/share.json +167 -0
  28. package/src/configs/components/wxOpenApi/userInfo.json +174 -0
  29. package/src/configs/index.js +11 -0
  30. package/src/mp/components/chart/bar/index.js +6 -2
  31. package/src/mp/components/chart/common/core/eChartBar.js +9 -8
  32. package/src/mp/components/chart/common/core/eChartBase.js +20 -16
  33. package/src/mp/components/chart/common/core/eChartLine.js +6 -5
  34. package/src/mp/components/chart/line/index.js +10 -6
  35. package/src/mp/components/chart/pie/index.js +6 -2
  36. package/src/mp/components/chart/statisticsCard/index.js +33 -6
  37. package/src/mp/components/dataView/index.json +1 -1
  38. package/src/mp/components/form/checkbox/index.js +41 -2
  39. package/src/mp/components/form/checkbox/index.wxml +1 -1
  40. package/src/mp/components/form/input/index.js +1 -1
  41. package/src/mp/components/form/location/index.js +43 -2
  42. package/src/mp/components/form/radio/index.js +34 -1
  43. package/src/mp/components/form/select/index.js +360 -40
  44. package/src/mp/components/form/select/index.wxml +17 -2
  45. package/src/mp/components/form/select/region/index.js +98 -0
  46. package/src/mp/components/form/uploader/index.js +39 -27
  47. package/src/mp/components/form/uploaderFile/index.js +10 -6
  48. package/src/mp/components/listView/index.js +33 -27
  49. package/src/mp/components/listView/index.wxml +1 -1
  50. package/src/mp/components/listView/index.wxss +5 -0
  51. package/src/mp/components/navigationBar/index.js +193 -0
  52. package/src/mp/components/navigationBar/index.json +6 -0
  53. package/src/mp/components/navigationBar/index.wxml +88 -0
  54. package/src/mp/components/navigationBar/index.wxss +1257 -0
  55. package/src/mp/components/tabs/index.js +7 -2
  56. package/src/mp/components/tabs/index.wxml +2 -1
  57. package/src/mp/components/text/index.js +0 -25
  58. package/src/mp/components/text/index.wxml +3 -3
  59. package/src/mp/components/wxOpenApi/phone/index.js +117 -0
  60. package/src/mp/components/{internals/listView → wxOpenApi/phone}/index.json +0 -0
  61. package/src/mp/components/wxOpenApi/phone/index.wxml +15 -0
  62. package/src/mp/components/wxOpenApi/phone/index.wxss +22 -0
  63. package/src/mp/components/wxOpenApi/phoneCode/index.js +89 -0
  64. package/src/mp/components/wxOpenApi/phoneCode/index.json +4 -0
  65. package/src/mp/components/wxOpenApi/phoneCode/index.wxml +15 -0
  66. package/src/mp/components/wxOpenApi/phoneCode/index.wxss +22 -0
  67. package/src/mp/components/wxOpenApi/share/index.js +117 -0
  68. package/src/mp/components/wxOpenApi/share/index.json +4 -0
  69. package/src/mp/components/wxOpenApi/share/index.wxml +15 -0
  70. package/src/mp/components/wxOpenApi/share/index.wxss +22 -0
  71. package/src/mp/components/wxOpenApi/userInfo/index.js +88 -0
  72. package/src/mp/components/wxOpenApi/userInfo/index.json +4 -0
  73. package/src/mp/components/wxOpenApi/userInfo/index.wxml +14 -0
  74. package/src/mp/components/wxOpenApi/userInfo/index.wxss +22 -0
  75. package/src/mp/index.json +7 -2
  76. package/src/mp/style/weda-ui.wxss +2 -0
  77. package/src/mp/utils/destr.js +48 -0
  78. package/src/mp/utils/platform.js +10 -0
  79. package/src/mp/utils/tcb.js +44 -0
  80. package/src/web/components/button/index.css +8 -1
  81. package/src/web/components/button/index.tsx +3 -2
  82. package/src/web/components/chart/bar/index.tsx +40 -39
  83. package/src/web/components/chart/common/core/eChartBar.js +7 -6
  84. package/src/web/components/chart/common/core/eChartBase.ts +20 -16
  85. package/src/web/components/chart/common/core/eChartLine.js +8 -6
  86. package/src/web/components/chart/line/index.tsx +40 -39
  87. package/src/web/components/chart/statisticsCard/index.tsx +29 -8
  88. package/src/web/components/form/checkbox/index.tsx +55 -23
  89. package/src/web/components/form/radio/index.tsx +84 -53
  90. package/src/web/components/form/select/h5.tsx +388 -72
  91. package/src/web/components/form/select/index.css +10 -0
  92. package/src/web/components/form/select/index.tsx +404 -144
  93. package/src/web/components/form/select/region/index.ts +122 -31
  94. package/src/web/components/form/select/time.jsx +89 -0
  95. package/src/web/components/form/select/year.tsx +170 -0
  96. package/src/web/components/form/uploader/uploader.h5.tsx +9 -2
  97. package/src/web/components/form/uploader/uploader.pc.tsx +4 -4
  98. package/src/web/components/form/uploaderFile/uploadFile.h5.tsx +13 -7
  99. package/src/web/components/form/uploaderFile/uploadFile.pc.tsx +13 -5
  100. package/src/web/components/image/image.tsx +1 -1
  101. package/src/web/components/image/index.tsx +1 -1
  102. package/src/web/components/index.js +7 -0
  103. package/src/web/components/link/index.tsx +6 -3
  104. package/src/web/components/listView/index.css +4 -0
  105. package/src/web/components/listView/index.tsx +6 -1
  106. package/src/web/components/modal/index.tsx +3 -1
  107. package/src/web/components/navigationBar/chevron-right--double.svg +3 -0
  108. package/src/web/components/navigationBar/common.tsx +198 -0
  109. package/src/web/components/navigationBar/h5Menu.tsx +179 -0
  110. package/src/web/components/navigationBar/horizontalMenu.tsx +200 -0
  111. package/src/web/components/navigationBar/index.css +762 -0
  112. package/src/web/components/navigationBar/index.tsx +231 -0
  113. package/src/web/components/navigationBar/type.d.ts +111 -0
  114. package/src/web/components/navigationBar/verticalMenu.tsx +81 -0
  115. package/src/web/components/phone/index.css +0 -0
  116. package/src/web/components/phone/index.tsx +22 -0
  117. package/src/web/components/phoneCode/index.css +0 -0
  118. package/src/web/components/phoneCode/index.tsx +22 -0
  119. package/src/web/components/richTextView/index.tsx +3 -5
  120. package/src/web/components/share/index.css +0 -0
  121. package/src/web/components/share/index.tsx +38 -0
  122. package/src/web/components/tabs/index.tsx +2 -0
  123. package/src/web/components/tabs/tabs.h5.tsx +43 -33
  124. package/src/web/components/tabs/tabs.pc.tsx +23 -10
  125. package/src/web/components/text/index.tsx +6 -14
  126. package/src/web/components/userInfo/index.css +0 -0
  127. package/src/web/components/userInfo/index.tsx +30 -0
  128. package/src/web/utils/platform.js +9 -0
  129. package/src/web/utils/tcb.js +26 -0
  130. package/src/web/weda-ui.css +2 -0
  131. package/src/mp/components/internals/listView/arrow-right-line.svg +0 -3
  132. package/src/mp/components/internals/listView/index.js +0 -286
  133. package/src/mp/components/internals/listView/index.wxml +0 -40
  134. package/src/mp/components/internals/listView/index.wxss +0 -150
  135. package/src/mp/components/internals/listView/more-line.svg +0 -3
  136. package/src/web/components/form/select/region/cities.ts +0 -2410
  137. package/src/web/components/form/select/region/provinces.ts +0 -240
  138. package/src/web/components/form/select/region/regions.ts +0 -20645
@@ -3,59 +3,135 @@ import * as _moment from 'moment';
3
3
  import { usePlatform } from '../../../utils/platform';
4
4
  import SelectH5, { decodeIsoDatetime } from './h5';
5
5
  import classNames from '../../../utils/classnames';
6
- import {Select as TeaSelect, DatePicker, TimePicker, Cascader, ConfigProvider} from 'tea-component';
6
+ import {
7
+ Select as TeaSelect,
8
+ DatePicker,
9
+ TimePicker,
10
+ Cascader,
11
+ ConfigProvider,
12
+ } from 'tea-component';
7
13
  import isObjectEqual from '../../../utils/isObjectEqual';
8
- import { getRegionTree } from './region';
14
+ import { getRegionTree,getAreaCode } from './region';
9
15
  import { renderDecorator } from '../renderDecorator';
10
16
  import { CommonFormPropsType } from '../types';
17
+ import YearPicker from './year';
18
+ import { callDataSource, callWedaApi } from '../../../utils/tcb';
19
+ import destr from 'destr';
11
20
 
12
- // @ts-expect-error TODO: fix 与plugin构建阶段效果不同
13
- const moment = (typeof _moment === 'function' ? _moment : _moment.default) as _moment.moment;
14
- export default function Select(props) {
15
- const {
16
- id,
17
- style,
18
- className,
19
- label = '标题',
20
- labelVisible = true,
21
- layout = 'horizontal',
22
- requiredFlag = false,
23
- size = 'l',
24
- decorator
25
- } = props;
26
- const platform = usePlatform();
27
-
28
- let selectEl;
29
- if(platform === 'h5') {
30
- selectEl = <SelectH5 {...props} />;
31
- } else {
32
- selectEl = <SelectPc {...props} />;
33
- }
34
- const cls = classNames({
35
- 'weda-ui': true,
36
- 'weda-select': true,
37
- [className]: className,
38
- });
39
- return renderDecorator(selectEl, decorator)(
40
- {
41
- id,
42
- className: cls,
43
- style,
44
- label: labelVisible ? label : null,
45
- layout,
46
- multiCell: false,
47
- requiredFlag,
48
- size
21
+ const REL_DICT = {
22
+ equal: 'eq', // 等于
23
+ unequal: 'neq', // 不等于
24
+ include: 'search', // 包含
25
+ exclude: '_exclude', // 不包含
26
+ begin_with: '_begin_with', // 开头是
27
+ greater: 'gt', // 大于
28
+ greater_or_equal: 'gte', // 大于等于
29
+ bigger_or_equal: 'gte', //大于等于
30
+ less: 'lt', // 小于
31
+ less_or_equal: 'lte', // 小于等于
32
+ in: 'in', // 多选值
33
+ not_in: 'nin', // 不在多选值
34
+ };
35
+ const isNull = (val) => [undefined, null].includes(val);
36
+ const getWhereList = (where) => {
37
+ let result = [];
38
+ Array.isArray(where) &&
39
+ where.forEach((item1) => {
40
+ if (item1?.groupLogic !== 'or' && Array.isArray(item1?.logicData)) {
41
+ item1?.logicData.forEach((item2) => {
42
+ let [rel, val] = [REL_DICT[item2?.rel], item2?.value];
43
+ if ('_begin_with' === rel) {
44
+ rel = 'regex';
45
+ val = `^${val}`;
46
+ }
47
+ if ('_exclude' === rel) {
48
+ rel = 'regex';
49
+ val = `^((?!${val}).)*$`;
50
+ }
51
+ if (item2?.logic !== 'or' && item2?.key && rel && !isNull(val)) {
52
+ result.push({ key: item2.key, rel, val });
53
+ }
54
+ });
49
55
  }
50
- );
56
+ });
57
+ return result;
58
+ };
59
+ // @ts-ignore TODO: fix 与plugin构建阶段效果不同
60
+ export const moment = (
61
+ typeof _moment === 'function' ? _moment : _moment.default
62
+ ) as any;
63
+
64
+ export default function Select(props) {
65
+ const {
66
+ id,
67
+ style,
68
+ className,
69
+ label = '标题',
70
+ labelVisible = true,
71
+ layout = 'horizontal',
72
+ requiredFlag = false,
73
+ size = 'l',
74
+ decorator,
75
+ } = props;
76
+ const platform = usePlatform();
77
+
78
+ let selectEl;
79
+ if (platform === 'h5') {
80
+ selectEl = <SelectH5 {...props} />;
81
+ } else {
82
+ selectEl = <SelectPc {...props} />;
83
+ }
84
+ const cls = classNames({
85
+ 'weda-ui': true,
86
+ 'weda-select': true,
87
+ [className]: className,
88
+ });
89
+ return renderDecorator(
90
+ selectEl,
91
+ decorator
92
+ )({
93
+ id,
94
+ className: cls,
95
+ style,
96
+ label: labelVisible ? label : null,
97
+ layout,
98
+ multiCell: false,
99
+ requiredFlag,
100
+ size,
101
+ });
51
102
  }
52
103
  export interface PropsType extends CommonFormPropsType {
53
104
  size: 's' | 'm' | 'l' | 'full';
54
105
  placeholder: string;
55
- mode: 'selector' | 'date' | 'time' | 'region';
106
+ mode: 'selector' | 'date' | 'time' | 'region'| 'mutiRegion';
107
+ dateMode: 'day' | 'month' | 'year';
56
108
  // selector mode
57
109
  range?: any[];
58
110
  defaultValue?: string;
111
+ dataSourceName?: string;
112
+ viewId?: string;
113
+ enumName?: string;
114
+ format?: string;
115
+ primaryField?: string;
116
+ tipBlock?: any;
117
+ // 数据筛选
118
+ where?: {
119
+ groupLogic?: null | 'or' | 'and';
120
+ logicData?: {
121
+ keyType?: 'field' | 'var-font';
122
+ key: string;
123
+ rel: 'eq' | 'neq' | 'lt' | 'gt' | 'gte' | 'lte' | 'in' | 'nin' | 'search';
124
+ value: any;
125
+ valueType?: 'const' | 'var-font' | 'relative-amount' | 'field';
126
+ expression?: string | boolean;
127
+ logic?: null | 'or' | 'and' | string;
128
+ extra?: {
129
+ type?: 'string' | 'number' | 'boolean' | 'object' | 'array' | string;
130
+ format?: string | null;
131
+ isExpression?: boolean;
132
+ };
133
+ }[];
134
+ }[];
59
135
  // date mode
60
136
  startDate?: string;
61
137
  endDate?: string;
@@ -66,9 +142,13 @@ export interface PropsType extends CommonFormPropsType {
66
142
  defaultTime?: string | number;
67
143
  // region mode
68
144
  defaultRegion?: any[];
145
+ regionType?: 'levelOne' | 'levelTwo' | 'levelThree';
69
146
  separator?: string;
70
147
  requiredFlag?: boolean;
71
- }
148
+ regionTree?:any[],
149
+ defaultMutiRegion?:string;
150
+ onChange?: (v: any) => void; // 配合 fomily 受控使用
151
+ }
72
152
 
73
153
  export const defaultProps = {
74
154
  // 系统属性
@@ -85,32 +165,41 @@ export const defaultProps = {
85
165
  requiredFlag: false,
86
166
  // selector mode
87
167
  range: [
88
- { name: '选项一', value: 'first' },
89
- { name: '选项二', value: 'second' },
168
+ { name: '选项1', value: '1' },
169
+ { name: '选项2', value: '2' },
90
170
  ],
91
171
  // region mode
92
172
  separator: ',',
93
173
  };
94
174
 
95
175
  function SelectPc({
96
- defaultValue,
97
- placeholder = '请选择',
98
- mode = 'selector',
99
- events = {},
100
- disabled = false,
101
- range = defaultProps.range,
102
- startDate,
103
- endDate,
104
- defaultDate,
105
- defaultTime,
106
- startTime,
107
- endTime,
108
- defaultRegion,
109
- separator = defaultProps.separator,
110
- size = defaultProps.size,
176
+ where,
177
+ dataSourceName,
178
+ viewId,
179
+ format,
180
+ primaryField,
181
+ enumName,
182
+ defaultValue,
183
+ placeholder = '请选择',
184
+ mode = 'selector',
185
+ dateMode = 'day',
186
+ events = {change: null },
187
+ disabled = false,
188
+ range = defaultProps.range,
189
+ startDate,
190
+ endDate,
191
+ defaultDate,
192
+ defaultTime,
193
+ startTime,
194
+ endTime,
195
+ defaultRegion,
196
+ defaultMutiRegion,
197
+ regionType,
198
+ separator = defaultProps.separator,
199
+ size = defaultProps.size,
200
+ onChange
111
201
  }: PropsType) {
112
-
113
- // 两次默认值不同, 需要刷新
202
+ // 两次默认值不同, 需要刷新
114
203
  const prevDefaultRef = React.useRef<any>();
115
204
  const [date, setDate] = React.useState(
116
205
  decodeIsoDatetime(defaultDate, 'date')
@@ -118,11 +207,101 @@ function SelectPc({
118
207
  const [time, setTime] = React.useState(
119
208
  decodeIsoDatetime(defaultTime, 'time')
120
209
  );
121
- const [region, setRegion] = React.useState(
122
- defaultRegion || undefined
123
- );
210
+ const [regionTree,setRegionTree] = React.useState([]);
211
+ const [regionData,setRegionData] = React.useState([]);
212
+ const [region, setRegion] = React.useState(defaultRegion || undefined);
213
+ const [mutiRegion, setMutiRegion] = React.useState(defaultMutiRegion!=null?defaultMutiRegion.split(','):[]);
124
214
  const [selectedValue, setSelectedValue] = React.useState(defaultValue);
125
215
 
216
+ const [option, setOption] = React.useState([]);
217
+ const [records, setRecords] = React.useState([]);
218
+
219
+ React.useEffect(() => {
220
+ // 筛选参数
221
+ const whereEffected = [].concat(getWhereList(where));
222
+ if ((format === 'father-son' || format === 'related') && dataSourceName && viewId) {
223
+ fetchData({
224
+ dataSourceName: dataSourceName,
225
+ viewId: viewId,
226
+ methodName: 'wedaGetRecords',
227
+ params: whereEffected
228
+ });
229
+ }
230
+ }, [where]);
231
+
232
+ // 获取数据列表中主列字段,将其作为选项
233
+ React.useEffect(() => {
234
+ if (records && records.length !== 0 && primaryField) {
235
+ const option = records.map(item => {
236
+ return {
237
+ label: item[primaryField],
238
+ value: item._id
239
+ };
240
+ });
241
+ setOption(option);
242
+ }
243
+ }, [records]);
244
+
245
+ // 获取数据源列表
246
+ const fetchData = async (param: {
247
+ dataSourceName?: string,
248
+ viewId?: string,
249
+ methodName?: string,
250
+ params?: any,
251
+ }) => {
252
+ let pageNo = 1;
253
+ let pageSize = 200;
254
+ let records = [];
255
+ let total = 99999;
256
+ for (let index = 0; index < Math.floor(total / pageSize) + 1; index++) {
257
+ let data = await callDataSource({
258
+ dataSourceName: param.dataSourceName,
259
+ viewId: param.viewId,
260
+ methodName: param.methodName,
261
+ params: {
262
+ pageNo: pageNo,
263
+ pageSize: pageSize,
264
+ where: param.params,
265
+ },
266
+ });
267
+ pageNo = pageNo + 1;
268
+ if (data?.records) {
269
+ total = data?.total || 0;
270
+ records = records.concat(data?.records);
271
+ }
272
+
273
+ }
274
+
275
+ if (records) {
276
+ setRecords(records);
277
+ }
278
+ };
279
+
280
+ React.useEffect(() => {
281
+ // 如果绑定字段类型为枚举,且传入自定义选项集的名称则默认使用自定义选项集的内容作为选项
282
+ if (format === 'x-enum' && enumName) {
283
+ fetchEnumData({ OptNameList: [enumName], PageIndex: 1, PageSize: 10 });
284
+ }
285
+ }, [enumName]);
286
+
287
+ // 获取自定义选项集
288
+ const fetchEnumData = async (param:
289
+ { OptNameList?: object, PageIndex?: number, PageSize?: number }
290
+ ) => {
291
+ let data = await callWedaApi({
292
+ action: 'DescribeGeneralOptionsDetailList',
293
+ data: param,
294
+ });
295
+ const config = destr(data?.Items?.[0]?.Config) ?? [];
296
+ const enumOption = config.map(item => {
297
+ return {
298
+ label: item.value,
299
+ value: item.key,
300
+ };
301
+ });
302
+ setOption(enumOption);
303
+ };
304
+
126
305
  React.useEffect(() => {
127
306
  let hasChange = false;
128
307
  if (prevDefaultRef.current?.defaultValue !== defaultValue) {
@@ -142,95 +321,176 @@ function SelectPc({
142
321
  setRegion(defaultRegion || []); // region 有可能是空串
143
322
  hasChange = true;
144
323
  }
324
+ if (!isObjectEqual(prevDefaultRef.current?.defaultMutiRegion, defaultMutiRegion)) {
325
+ setMutiRegion(defaultMutiRegion?defaultMutiRegion.split(','):[]);
326
+ hasChange = true;
327
+ }
145
328
  if (hasChange) {
146
329
  prevDefaultRef.current = {
147
330
  defaultDate,
148
331
  defaultTime,
149
332
  defaultRegion,
333
+ defaultMutiRegion
150
334
  };
151
335
  }
152
336
  });
153
- const onDataChange = (value) => {
154
- let finalVal;
155
- if(mode === 'date') {
156
- finalVal = value.valueOf();
157
- } else if (mode === 'time') {
158
- finalVal = (value.hour() * 60 * 60 + value.minute() * 60) * 1000;
159
- } else if (mode === 'region') {
160
- finalVal = value ?? [];
161
- } else {
162
- finalVal = value;
337
+ const regionTreeMode = React.useMemo(()=>{
338
+ if(mode=='region'||mode=='mutiRegion'){
339
+ if(regionData.length<1){
340
+ getAreaCode().then((value)=>{
341
+ setRegionData(value);
342
+ getRegionTree(value,regionType,mode).then(tree=>{
343
+ setRegionTree(tree);
344
+ });
345
+ });
346
+ }else{
347
+ getRegionTree(regionData,regionType,mode).then(tree=>{
348
+ setRegionTree(tree);
349
+ });
163
350
  }
164
- events.change({value: finalVal});
165
- };
166
- const createDropdown = () => {
167
- switch (mode) {
168
- case 'selector':
169
- return <TeaSelect
170
- size={size}
171
- onChange={onDataChange}
172
- disabled={disabled}
173
- value={selectedValue}
174
- type="simulate"
175
- appearance="button"
176
- placeholder={placeholder}
177
- options={range.map(i => ({text: i.label, value: i.value}))}
178
- />;
179
- case 'date':
180
- {
181
- const now = moment();
182
- const start = startDate ? decodeIsoDatetime(startDate, 'date') : `${now.year() - 20}-01-01`;
183
- const end = endDate ? decodeIsoDatetime(endDate, 'date') : `${now.year() + 20}-12-31`;
184
- return <DatePicker
185
- range={[moment(start), moment(end)]}
186
- onChange={onDataChange}
187
- disabled={disabled}
188
- placeholder={placeholder}
189
- value={date ? moment(date): undefined}
190
-
191
- />;
192
- }
193
- case 'time':
194
- {
195
- const start = startTime ? decodeIsoDatetime(startTime, 'time') : '00:00';
196
- const end = endTime ? decodeIsoDatetime(endTime, 'time') : '23:59';
197
- return <TimePicker
198
- onChange={onDataChange}
199
- disabled={disabled}
200
- placeholder={placeholder}
201
- value={time ? moment(time , 'HH:mm') : undefined}
202
- range={[moment(start, 'HH:mm'), moment(end, 'HH:mm')]}
203
- format="HH:mm"
204
- />;
205
- }
206
- case 'region':
207
- return <Cascader
208
- clearable
209
- searchable
210
- type="menu"
211
- disabled={disabled}
212
- data={getRegionTree()}
213
- multiple={false}
351
+ }
352
+ getRegionTree(regionData,regionType,mode).then(value=>{
353
+ setRegionTree(value);
354
+ });
355
+ },[regionType,mode,regionData]);
356
+ const onDataChange = (value) => {
357
+ let finalVal;
358
+ if (mode === 'date') {
359
+ finalVal = value.valueOf();
360
+ } else if (mode === 'time') {
361
+ finalVal = (value.hour() * 60 * 60 + value.minute() * 60) * 1000;
362
+ } else if (mode === 'region') {
363
+ finalVal = value ?? [];
364
+ setRegion(value);
365
+ } else if (mode === 'mutiRegion') {
366
+ finalVal = value.join(',');
367
+ setMutiRegion(value);
368
+ } else {
369
+ finalVal = value;
370
+ }
371
+ onChange && onChange(finalVal);
372
+ events?.change?.({ value: finalVal });
373
+ };
374
+ const createDropdown = () => {
375
+ switch (mode) {
376
+ case 'selector':
377
+ return (
378
+ <div data-testid="form-select" >
379
+ <TeaSelect
380
+ matchButtonWidth
381
+ size={size}
214
382
  onChange={onDataChange}
215
- valueRender={
216
- (options) =>
217
- options.map(({ label, value }, index) => (
218
- <React.Fragment key={`${value}-${index}`}>
219
- {index !== 0 && `${separator}`}
220
- {label || value}
221
- </React.Fragment>
222
- ))
223
- }
224
-
225
- value={region}
226
- />;
383
+ disabled={disabled}
384
+ value={selectedValue}
385
+ type="simulate"
386
+ appearance="button"
387
+ placeholder={placeholder}
388
+ options={(format === 'father-son' || format === 'related' || format === 'x-enum') ? option.map(i => ({ text: i.label, value: i.value })) : range.map(i => ({ text: i.label, value: i.value }))}
389
+ /></div>
390
+ );
391
+ case 'date': {
392
+ const now = moment();
393
+ const start = startDate
394
+ ? decodeIsoDatetime(startDate, 'date')
395
+ : `${now.year() - 20}-01-01`;
396
+ const end = endDate
397
+ ? decodeIsoDatetime(endDate, 'date')
398
+ : `${now.year() + 20}-12-31`;
399
+ const dateProps: any = {
400
+ range: [moment(start), moment(end)],
401
+ onChange: onDataChange,
402
+ disabled,
403
+ placeholder,
404
+ value: date ? moment(date) : undefined,
405
+ 'data-testid': 'form-item-select',
406
+ };
407
+ if (dateMode === 'year') {
408
+ return (
409
+ <YearPicker
410
+ {...dateProps}
411
+ range={[
412
+ startDate && dateProps.range[0],
413
+ endDate && dateProps.range[1],
414
+ ]}
415
+ />
416
+ );
417
+ } else if (dateMode === 'month') {
418
+ return <DatePicker.MonthPicker {...dateProps} />;
419
+ } else {
420
+ return <DatePicker {...dateProps} />;
227
421
  }
228
- };
229
- const dropdown = createDropdown();
230
-
231
- return (
232
- <ConfigProvider classPrefix="wedatea2td">
233
- {dropdown}
234
- </ConfigProvider>
235
- );
422
+ }
423
+ case 'time': {
424
+ const start = startTime
425
+ ? decodeIsoDatetime(startTime, 'time')
426
+ : '00:00';
427
+ const end = endTime ? decodeIsoDatetime(endTime, 'time') : '23:59';
428
+ return (
429
+ <TimePicker
430
+ onChange={onDataChange}
431
+ disabled={disabled}
432
+ placeholder={placeholder}
433
+ value={time ? moment(time, 'HH:mm') : undefined}
434
+ range={[moment(start, 'HH:mm'), moment(end, 'HH:mm')]}
435
+ format="HH:mm"
436
+ />
437
+ );
438
+ }
439
+ case 'region':
440
+ return (
441
+ <Cascader
442
+ clearable
443
+ searchable
444
+ type="menu"
445
+ disabled={disabled}
446
+ data={regionTree}
447
+ multiple={false}
448
+ onChange={onDataChange}
449
+ valueRender={(options) =>
450
+ options.map(({ label, value }, index) => (
451
+ <React.Fragment key={`${value}-${index}`}>
452
+ {index !== 0 && `${separator}`}
453
+ {label || value}
454
+ </React.Fragment>
455
+ ))
456
+ }
457
+ value={region}
458
+ />
459
+ );
460
+ case 'mutiRegion':
461
+ return (
462
+ <Cascader
463
+ clearable
464
+ searchable
465
+ type="menu"
466
+ disabled={disabled}
467
+ data={regionTree}
468
+ multiple={false}
469
+ onChange={onDataChange}
470
+ onLoad={(regionTree, options)=>{
471
+ return new Promise((resolve) => {
472
+ setTimeout(() => {
473
+ resolve();
474
+
475
+ },1000);
476
+ });
477
+
478
+ }}
479
+ valueRender={(options) =>
480
+ options.map(({ label, value }, index) => (
481
+ <React.Fragment key={`${value}-${index}`}>
482
+ {index !== 0 && ','}
483
+ {label || value}
484
+ </React.Fragment>
485
+ ))
486
+ }
487
+ value={mutiRegion}
488
+ />
489
+ );
490
+ }
491
+ };
492
+
493
+ const dropdown = createDropdown();
494
+
495
+ return <ConfigProvider classPrefix="wedatea2td">{dropdown}</ConfigProvider>;
236
496
  }