@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
@@ -1,27 +1,34 @@
1
1
  import * as React from 'react';
2
- import * as _moment from 'moment';
3
-
4
2
  import weui from '../../../utils/weui';
5
3
  import classNames from '../../../utils/classnames';
6
4
  import isObjectEqual from '../../../utils/isObjectEqual';
7
- import { timePicker } from './time';
8
- import { regionPicker } from './region';
9
- import {PropsType} from './index';
10
- import { defaultProps } from './index';
5
+ import { regionPicker,getRegionTree,getAreaCode } from './region/index';
6
+ import { PropsType , defaultProps , moment } from './index';
7
+ import { timePicker, yearPicker, monthPicker } from './time';
8
+ import { callDataSource, callWedaApi } from '../../../utils/tcb';
9
+ import destr from 'destr';
10
+ import { REL_DICT } from '../../../utils/constant';
11
+ import { isNil } from '../../../utils/lodash';
11
12
 
12
- // @ts-expect-error TODO: fix 与plugin构建阶段效果不同
13
- const moment = (typeof _moment === 'function' ? _moment : _moment.default) as _moment.moment;
14
13
  export default function Select({
15
14
  // 系统属性
16
- events,
15
+ events = {change: null },
17
16
  // 组件属性
18
17
  name,
19
18
  placeholder,
20
19
  layout,
21
20
  mode,
21
+ dateMode = 'day',
22
22
  disabled = false,
23
23
  // selector mode
24
24
  range = defaultProps.range,
25
+ where,
26
+ primaryField,
27
+ tipBlock,
28
+ enumName,
29
+ dataSourceName,
30
+ viewId,
31
+ format,
25
32
  defaultValue,
26
33
  // date mode
27
34
  startDate,
@@ -33,29 +40,38 @@ export default function Select({
33
40
  defaultTime,
34
41
  // region mode
35
42
  defaultRegion,
43
+ defaultMutiRegion,
44
+ regionType,
36
45
  separator,
46
+ onChange
47
+ //regionTree,
37
48
  }: PropsType) {
38
49
  const [date, setDate] = React.useState(
39
- decodeIsoDatetime(defaultDate, 'date')
50
+ decodeIsoDatetime(defaultDate, 'date', dateMode)
40
51
  );
41
52
  const [time, setTime] = React.useState(
42
53
  decodeIsoDatetime(defaultTime, 'time')
43
54
  );
44
- const [region, setRegion] = React.useState(
45
- defaultRegion
46
- );
55
+ const [regioDepth,setRegionDepth] = React.useState(3);
56
+ const [regionData,setRegionData] = React.useState([]);
57
+ const [regionTree,setRegionTree] = React.useState([]);
58
+ const [region, setRegion] = React.useState(defaultRegion);
59
+ const [mutiRegion,setMutiRegion]=React.useState([]);
60
+ const [typeRegion, setTypeRegion] = React.useState(regionType);
47
61
  const [selectedValue, setSelectedValue] = React.useState(defaultValue);
62
+ const [option, setOption] = React.useState([{ label: '', value: '' }]);
63
+ const [records, setRecords] = React.useState([]);
48
64
 
49
65
  // 两次默认值不同, 需要刷新
50
66
  const prevDefaultRef = React.useRef<any>({});
51
- React.useEffect(() => {
67
+ React.useEffect( () => {
52
68
  let hasChange = false;
53
69
  if (prevDefaultRef.current?.defaultValue !== defaultValue) {
54
70
  setSelectedValue(defaultValue);
55
71
  hasChange = true;
56
72
  }
57
73
  if (prevDefaultRef.current?.defaultDate !== defaultDate) {
58
- setDate(decodeIsoDatetime(defaultDate, 'date'));
74
+ setDate(decodeIsoDatetime(defaultDate, 'date', dateMode));
59
75
  hasChange = true;
60
76
  }
61
77
  if (prevDefaultRef.current?.defaultTime !== defaultTime) {
@@ -66,14 +82,168 @@ export default function Select({
66
82
  setRegion(defaultRegion);
67
83
  hasChange = true;
68
84
  }
85
+ if (!isObjectEqual(prevDefaultRef.current?.defaultMutiRegion, defaultMutiRegion)) {
86
+
87
+ //setMutiRegion((defaultMutiRegion || ".").split(','));
88
+ setMutiRegion(defaultMutiRegion?defaultMutiRegion.split(','):[]);
89
+ hasChange = true;
90
+ }
91
+ if (prevDefaultRef.current?.regionType !== regionType) {
92
+ setTypeRegion(regionType);
93
+ hasChange = true;
94
+ }
69
95
  if (hasChange) {
70
96
  prevDefaultRef.current = {
97
+ defaultValue,
71
98
  defaultDate,
72
99
  defaultTime,
73
100
  defaultRegion,
101
+ defaultMutiRegion
74
102
  };
75
103
  }
104
+
76
105
  });
106
+ //实现初始值触发change事件
107
+ const defaultMutiRegionChange = function(treeValue,defaultMutiRegion){
108
+ const defaultValue =defaultMutiRegion?defaultMutiRegion.split(','):null;
109
+ const changeValue=[];
110
+ if(Array.isArray(defaultValue)&&defaultValue.length>0){
111
+ defaultValue.forEach(element => {
112
+ treeValue.map((item)=>{
113
+ if(item?.Value == element){
114
+ changeValue.push({
115
+ value:item?.Value,
116
+ code:item?.Code
117
+ }
118
+ );
119
+ }
120
+ });
121
+ });
122
+
123
+ events?.change?.({ value:defaultMutiRegion,result:changeValue });
124
+ }
125
+ };
126
+ const regionTreeMode = React.useMemo(()=>{
127
+ if((mode=='region'|| mode=='mutiRegion')){
128
+ if(regionData.length<1){
129
+ getAreaCode().then((value)=>{
130
+ defaultMutiRegionChange(value,defaultMutiRegion);
131
+ setRegionData(value);
132
+ getRegionTree(value,regionType,mode).then(tree=>{
133
+ setRegionTree(tree);
134
+ });
135
+ });
136
+ }else{
137
+ getRegionTree(regionData,regionType,mode).then(tree=>{
138
+ setRegionTree(tree);
139
+ });
140
+ }
141
+ }
142
+ switch(regionType){
143
+ case 'levelOne':{
144
+ setRegionDepth(1);
145
+ break;
146
+ }
147
+ case 'levelTwo':{
148
+ setRegionDepth(2);
149
+ break;
150
+ }
151
+ case 'levelThree':{
152
+ setRegionDepth(3);
153
+ break;
154
+ }
155
+ default: {
156
+ break;
157
+ }
158
+ }
159
+
160
+ },[regionType,mode,regionData]);
161
+
162
+ React.useEffect(() => {
163
+ // tcb过滤参数
164
+ const whereEffected = [].concat(getWhereList(where));
165
+ if ((format === 'father-son' || format === 'related') && dataSourceName && viewId) {
166
+ fetchData({
167
+ dataSourceName: dataSourceName,
168
+ viewId: viewId,
169
+ methodName: 'wedaGetRecords',
170
+ params: whereEffected
171
+ });
172
+ }
173
+ }, [where]);
174
+
175
+ // 获取数据列表中主列字段,将其作为选项
176
+ React.useEffect(() => {
177
+ if (records && records.length !== 0 && primaryField) {
178
+ const option = records.map(item => {
179
+ return {
180
+ label: item[primaryField],
181
+ value: item._id
182
+ };
183
+ });
184
+ setOption(option);
185
+ }
186
+ }, [records]);
187
+
188
+ // 获取数据列表
189
+ const fetchData = async (param: {
190
+ dataSourceName?: string,
191
+ viewId?: string,
192
+ methodName?: string,
193
+ params?: any,
194
+ }) => {
195
+ let pageNo = 1;
196
+ let pageSize = 200;
197
+ let records = [];
198
+ let total = 99999;
199
+ for (let index = 0; index < Math.floor(total / pageSize) + 1; index++) {
200
+ let data = await callDataSource({
201
+ dataSourceName: param.dataSourceName,
202
+ viewId: param.viewId,
203
+ methodName: param.methodName,
204
+ params: {
205
+ where: param.params,
206
+ pageNo: pageNo,
207
+ pageSize: pageSize
208
+ },
209
+ });
210
+ pageNo = pageNo + 1;
211
+ if (data?.records) {
212
+ total = data?.total || 0;
213
+ records = records.concat(data?.records);
214
+ }
215
+
216
+ }
217
+
218
+ if (records) {
219
+ setRecords(records);
220
+ }
221
+ };
222
+
223
+ React.useEffect(() => {
224
+ // 如果绑定字段类型为枚举,且传入自定义选项集的名称则默认使用自定义选项集的内容作为选项
225
+ if (format === 'x-enum' && enumName) {
226
+ fetchEnumData({ OptNameList: [enumName], PageIndex: 1, PageSize: 10 });
227
+ }
228
+ }, [enumName]);
229
+
230
+ // 获取自定义选项集
231
+ const fetchEnumData = async (param:
232
+ { OptNameList?: object, PageIndex?: number, PageSize?: number }
233
+ ) => {
234
+ let data = await callWedaApi({
235
+ action: 'DescribeGeneralOptionsDetailList',
236
+ data: param,
237
+ });
238
+ const config = destr(data?.Items[0]?.Config) ?? [];
239
+ const enumOption = config.map(item => {
240
+ return {
241
+ label: item.value,
242
+ value: item.key,
243
+ };
244
+ });
245
+ setOption(enumOption);
246
+ };
77
247
 
78
248
  const isFlex = layout !== 'vertical';
79
249
  const subCls = classNames({
@@ -91,19 +261,26 @@ export default function Select({
91
261
  !!date && (options.defaultDate = date);
92
262
  !!startDate && (options.start = decodeIsoDatetime(startDate, 'date'));
93
263
  !!endDate && (options.end = decodeIsoDatetime(endDate, 'date'));
264
+ if (['year', 'month'].includes(dateMode)) {
265
+ !!startDate && (options.startDate = startDate);
266
+ !!endDate && (options.endDate = endDate);
267
+ }
268
+ options.onConfirm = (result) => {
269
+ const value = formatDateModeValue(result, dateMode);
270
+ setDate(value);
271
+ events.change({ value: new Date(value).getTime() });
272
+ };
94
273
 
95
- weui.datePicker({
96
- ...options,
97
- onConfirm(result) {
98
- const value = moment()
99
- .year(result[0].value)
100
- .month(result[1].value - 1)
101
- .date(result[2].value)
102
- .format('YYYY-MM-DD');
103
- setDate(value);
104
- events.change({ value: new Date(value).getTime() });
105
- },
106
- });
274
+ if (dateMode === 'year') {
275
+ // 年,1 列
276
+ yearPicker({ ...options });
277
+ } else if (dateMode === 'month') {
278
+ // 年月,2 列
279
+ monthPicker({ ...options });
280
+ } else {
281
+ // 年月日,3 列
282
+ weui.datePicker({ id: String(Date.now()), ...options });
283
+ }
107
284
  };
108
285
 
109
286
  const onTimeClick = function () {
@@ -120,41 +297,112 @@ export default function Select({
120
297
  const date = moment().hour(result[0].value).minute(result[1].value);
121
298
  const value = date.format('HH:mm');
122
299
  setTime(value);
123
- events.change({
300
+ events?.change({
124
301
  value: (date.hour() * 60 * 60 + date.minute() * 60) * 1000,
125
302
  });
126
303
  },
127
304
  });
128
305
  };
129
306
 
130
- const onSelect = function () {
131
- weui.picker(range, {
132
- defaultValue: [selectedValue || range[0].value],
133
- onConfirm(result) {
134
- const item = result[0];
135
- setSelectedValue(item?.value);
136
- events.change({ value: item?.value });
137
- },
138
- className: 'weda-ui weda-picker',
139
- });
307
+ const getWhereList = (where) => {
308
+ let result = [];
309
+ Array.isArray(where) &&
310
+ where.forEach((item1) => {
311
+ if (item1?.groupLogic !== 'or' && Array.isArray(item1?.logicData)) {
312
+ item1?.logicData.forEach((item2) => {
313
+ let [rel, val] = [REL_DICT[item2?.rel], item2?.value];
314
+ if ('_begin_with' === rel) {
315
+ rel = 'regex';
316
+ val = `^${val}`;
317
+ }
318
+ if ('_exclude' === rel) {
319
+ rel = 'regex';
320
+ val = `^((?!${val}).)*$`;
321
+ }
322
+ if (item2?.logic !== 'or' && item2?.key && rel && !isNil(val)) {
323
+ result.push({ key: item2.key, rel, val });
324
+ }
325
+ });
326
+ }
327
+ });
328
+ return result;
140
329
  };
141
330
 
331
+ const onSelect = function () {
332
+ if (format === 'father-son' || format === 'related' || format === 'x-enum') {
333
+ weui.picker(option, {
334
+ id: String(Date.now()),
335
+ defaultValue: [selectedValue || option[0].value],
336
+ onConfirm(result) {
337
+ const item = result[0];
338
+ setSelectedValue(item?.value);
339
+ events.change({ value: item?.value });
340
+ },
341
+ className: 'weda-ui weda-picker',
342
+ });
343
+ } else {
344
+ weui.picker(range, {
345
+ id: String(Date.now()),
346
+ defaultValue: [selectedValue || range[0].value],
347
+ onConfirm(result) {
348
+ const item = result[0];
349
+ setSelectedValue(item?.value);
350
+ events.change({ value: item?.value });
351
+ },
352
+ className: 'weda-ui weda-picker',
353
+ });
354
+ }
355
+ };
356
+ let regionTimer;
357
+ const momentClick =async () => {
358
+ regionTimer = setInterval(() => {
359
+ setTimeout(()=>{
360
+ if(regionTree.length!=0){
361
+ onRegionClick();
362
+ }
363
+ }, 0);
364
+ }, regionTree.length==0?500:0);
365
+ };
142
366
  const onRegionClick = function () {
143
- regionPicker({
144
- defaultValue:
145
- (defaultRegion && defaultRegion.length <= 0)
146
- ? ['北京市', '北京市', '东城区']
147
- : defaultRegion,
148
- onConfirm(result) {
149
- const value = result.map((item) => item.value);
150
- setRegion(value);
151
- events.change({ value });
152
- },
153
- className: 'weda-ui weda-picker',
154
- });
367
+ clearInterval(regionTimer);
368
+ let defaultValue=[];
369
+ if(mode=='region'){
370
+ defaultRegion && defaultRegion.length <= 0
371
+ ? defaultValue=['北京市', '北京市', '东城区']
372
+ : defaultValue= defaultRegion;
373
+ }else{
374
+ mutiRegion && mutiRegion.length <= 0
375
+ ? defaultValue=['北京市', '北京市', '东城区']
376
+ : defaultValue= mutiRegion;
377
+ }
378
+ regionPicker(
379
+ {
380
+ defaultValue:defaultValue,
381
+ depth:regioDepth,
382
+ onConfirm(result) {
383
+ const value = result.map((item) => item.value);
384
+ //const value=regionValueSplit(typeRegion,defaultvalue);
385
+ mode=='region'?setRegion(value):setMutiRegion(value);
386
+ const changeValue = mode=='region'?value:value.join(',');
387
+ onChange && onChange(changeValue);
388
+ events?.change?.({ value:changeValue,result:result.map((item)=>{
389
+ return {
390
+ value:item?.value,
391
+ code:item?.code
392
+ };
393
+ }) });
394
+
395
+ },
396
+ onChange(result) {
397
+ },
398
+ className: 'weda-ui weda-picker',
399
+ id: new Date().valueOf(),
400
+ },
401
+ regionTree
402
+ );
155
403
  };
156
404
 
157
- const onClick = function () {
405
+ const onClick =async function () {
158
406
  if (disabled) {
159
407
  return;
160
408
  }
@@ -173,7 +421,11 @@ export default function Select({
173
421
  break;
174
422
  }
175
423
  case 'region': {
176
- onRegionClick();
424
+ momentClick();
425
+ break;
426
+ }
427
+ case 'mutiRegion': {
428
+ momentClick();
177
429
  break;
178
430
  }
179
431
  default: {
@@ -183,35 +435,42 @@ export default function Select({
183
435
  };
184
436
 
185
437
  const result = React.useMemo(() => {
438
+ let selectLabel = '';
439
+ if (format === 'father-son' || format === 'related' || format === 'x-enum') {
440
+ selectLabel = (option ?? []).find((item) => item.value === selectedValue)?.label;
441
+ } else {
442
+ selectLabel = (range ?? []).find((item) => item.value === selectedValue)?.label;
443
+ }
186
444
  return {
187
- selector: (range ?? []).find((item) => item.value === selectedValue)?.label,
445
+ selector: selectLabel,
188
446
  date: date,
189
447
  time: time,
190
448
  region: (region || []).join(separator), // region 有可能是空串
449
+ mutiRegion:mutiRegion
191
450
  };
192
- }, [range, selectedValue, date, time, region, separator]);
451
+ }, [range, selectedValue, date, time, region, separator,mutiRegion]);
193
452
 
194
453
  return (
195
- <div className={subCls}>
196
- <div className="weui-cell__bd weui-flex">
197
- <input
198
- onClick={onClick}
199
- className="weui-input"
200
- type="select"
201
- name={name}
202
- placeholder={placeholder}
203
- value={result[mode] ?? ''}
204
- disabled={disabled}
205
- autoComplete={'off'}
206
- readOnly={true}
207
- />
208
- </div>
454
+ <div className={subCls}>
455
+ <div className="weui-cell__bd weui-flex">
456
+ <input
457
+ onClick={onClick}
458
+ className="weui-input"
459
+ type="select"
460
+ name={name}
461
+ placeholder={placeholder}
462
+ value={result[mode] ?? ''}
463
+ disabled={disabled}
464
+ autoComplete={'off'}
465
+ readOnly={true}
466
+ data-testid="form-item-select"
467
+ />
209
468
  </div>
469
+ </div>
210
470
  );
211
471
  }
212
472
 
213
-
214
- export function decodeIsoDatetime(isoStringOrTimesnap, type) {
473
+ export function decodeIsoDatetime(isoStringOrTimesnap, type, dateMode = 'day') {
215
474
  if (!isoStringOrTimesnap) {
216
475
  return null;
217
476
  }
@@ -246,7 +505,47 @@ export function decodeIsoDatetime(isoStringOrTimesnap, type) {
246
505
  } else {
247
506
  return moment(isoStringOrTimesnap).format('HH:mm');
248
507
  }
249
- } else {
250
- return moment(isoStringOrTimesnap).format('YYYY-MM-DD');
508
+ } else {
509
+ return moment(isoStringOrTimesnap).format(getDateModeFormat(dateMode));
251
510
  }
252
511
  }
512
+
513
+ /**
514
+ * 根据时间模式,将 picker 返回的值转成对应的 年-月-日
515
+ */
516
+ export const formatDateModeValue = (result = [], dateMode = 'day') => {
517
+ let [year, month, day] = [
518
+ result[0]?.value,
519
+ result[1]?.value || 1,
520
+ result[2]?.value || 1,
521
+ ];
522
+ if (dateMode === 'year') {
523
+ month = 1;
524
+ day = 1;
525
+ }
526
+ if (dateMode === 'month') {
527
+ day = 1;
528
+ }
529
+ const value = moment()
530
+ .year(year)
531
+ .month(month - 1)
532
+ .date(day)
533
+ .format(getDateModeFormat(dateMode));
534
+ return value;
535
+ };
536
+
537
+ /**
538
+ * 不同时间模式对应的展示格式
539
+ */
540
+ export const getDateModeFormat = (dateMode = 'day') => {
541
+ switch (dateMode) {
542
+ case 'year':
543
+ return 'YYYY';
544
+ case 'month':
545
+ return 'YYYY-MM';
546
+ case 'day':
547
+ return 'YYYY-MM-DD';
548
+ default:
549
+ return 'YYYY-MM-DD';
550
+ }
551
+ };
@@ -0,0 +1,10 @@
1
+ .year-picker__overlay {
2
+ width: 300px;
3
+ }
4
+
5
+ .year-picker__overlay .year-picker__header {
6
+ display: flex;
7
+ justify-content: space-between;
8
+ align-items: center;
9
+ font-weight: 700;
10
+ }