@cloudbase/weda-ui 0.2.16 → 1.0.24

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