@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,5 +1,34 @@
1
1
  import classNames from '../../../utils/classnames';
2
2
  import dayjs from '../../../utils/dayjs.min.js';
3
+ import { getRegionTree, buildDisplayValue , provinces, cities, regions } from './region/index';
4
+ import destr from '../../../utils/destr';
5
+ import { callDataSourceApi, callWedaApi } from '../../../utils/tcb';
6
+ import { REL_DICT } from '../../../utils/constant';
7
+ import { isNil } from '../../../utils/lodash';
8
+
9
+ const getWhereList = (where) => {
10
+ let result = [];
11
+ Array.isArray(where) &&
12
+ where.forEach((item1) => {
13
+ if (item1?.groupLogic !== 'or' && Array.isArray(item1?.logicData)) {
14
+ item1?.logicData.forEach((item2) => {
15
+ let [rel, val] = [REL_DICT[item2?.rel], item2?.value];
16
+ if ('_begin_with' === rel) {
17
+ rel = 'regex';
18
+ val = `^${val}`;
19
+ }
20
+ if ('_exclude' === rel) {
21
+ rel = 'regex';
22
+ val = `^((?!${val}).)*$`;
23
+ }
24
+ if (item2?.logic !== 'or' && item2?.key && rel && !isNil(val)) {
25
+ result.push({ key: item2.key, rel, val });
26
+ }
27
+ });
28
+ }
29
+ });
30
+ return result;
31
+ };
3
32
 
4
33
  Component({
5
34
  options: {
@@ -34,10 +63,18 @@ Component({
34
63
  type: String,
35
64
  value: 'selector',
36
65
  },
66
+ dateMode: {
67
+ type: String,
68
+ value: 'day',
69
+ },
37
70
  disabled: {
38
71
  type: Boolean,
39
72
  value: false,
40
73
  },
74
+ regionType: {
75
+ type: String,
76
+ value: ''
77
+ },
41
78
  range: {
42
79
  type: Array,
43
80
  value: [
@@ -81,6 +118,10 @@ Component({
81
118
  defaultRegion: {
82
119
  type: Array,
83
120
  },
121
+ defaultMutiRegion: {
122
+ type: String,
123
+ value: ''
124
+ },
84
125
  separator: {
85
126
  type: String,
86
127
  value: ',',
@@ -89,6 +130,30 @@ Component({
89
130
  type: Boolean,
90
131
  value: false,
91
132
  },
133
+ format: {
134
+ type: String,
135
+ value: '',
136
+ },
137
+ dataSourceName: {
138
+ type: String,
139
+ value: '',
140
+ },
141
+ viewId: {
142
+ type: String,
143
+ value: '',
144
+ },
145
+ primaryField: {
146
+ type: String,
147
+ value: '',
148
+ },
149
+ enumName: {
150
+ type: String,
151
+ value: '',
152
+ },
153
+ where: {
154
+ type: Array,
155
+ value: []
156
+ }
92
157
  },
93
158
  data: {
94
159
  cls: '',
@@ -99,6 +164,12 @@ Component({
99
164
  value: '',
100
165
  displayValue: '',
101
166
  displayCls: '',
167
+ //省市级联动数据
168
+ multiArray: [[{ value: '地区数据加载中,请关闭弹窗后重试' }]],
169
+ multiIndex: [0, 0, 0], // 默认的下标
170
+ records: [],
171
+ option: [{ label: '', value: '' }],
172
+ whereEffected: []
102
173
  },
103
174
  lifetimes: {
104
175
  attached() {
@@ -112,6 +183,9 @@ Component({
112
183
  endTime,
113
184
  startDate,
114
185
  endDate,
186
+ dateMode,
187
+ defaultDate,
188
+ format,
115
189
  } = this.properties;
116
190
  const isFlex = layout !== 'vertical';
117
191
  const cls = classNames({
@@ -127,11 +201,15 @@ Component({
127
201
  'weui-cell_disabled': disabled,
128
202
  });
129
203
 
130
- let selectRange, start, end;
204
+ let selectRange, start, end, displayValue;
131
205
 
132
206
  switch (mode) {
133
207
  case 'selector': {
134
- selectRange = range.map((item) => item.label);
208
+ if (format === 'related' || format === 'father-son' || format === 'x-enum') {
209
+ selectRange = this.data.option.map((item) => item.label);
210
+ } else {
211
+ selectRange = range.map((item) => item.label);
212
+ }
135
213
  break;
136
214
  }
137
215
  case 'time': {
@@ -144,52 +222,58 @@ Component({
144
222
  break;
145
223
  }
146
224
  case 'date': {
147
- start = startDate
148
- ? this.converDate2Dayjs(startDate).format('YYYY-MM-DD')
149
- : undefined;
150
- end = endDate
151
- ? this.converDate2Dayjs(endDate).format('YYYY-MM-DD')
152
- : undefined;
225
+ start = this._coverNumber2Date(startDate, dateMode);
226
+ end = this._coverNumber2Date(endDate, dateMode);
227
+ displayValue = this._coverNumber2Date(defaultDate, dateMode);
153
228
  break;
154
229
  }
155
230
  case 'region': {
156
231
  break;
157
232
  }
233
+ case 'mutiRegion': {
234
+ this.getProvince();
235
+ break;
236
+ }
158
237
  default: {
159
238
  break;
160
239
  }
161
240
  }
162
-
163
241
  this.setData({
164
242
  cls,
165
243
  subCls,
166
244
  selectRange,
167
245
  start,
168
246
  end,
247
+ displayValue,
169
248
  });
170
249
  },
171
250
  },
172
251
  observers: {
173
- 'defaultValue, defaultTime, defaultDate, defaultRegion': function (
252
+ 'defaultValue, defaultTime, defaultRegion,defaultMutiRegion': function (
174
253
  defaultValue,
175
254
  defaultTime,
176
- defaultDate,
177
255
  defaultRegion
178
256
  ) {
179
- const { range, mode, separator, placeholder } = this.properties;
257
+ const { range, mode, separator, placeholder, dateMode, defaultDate, format, option, defaultMutiRegion } =
258
+ this.properties;
180
259
  let value, displayValue;
181
260
  switch (mode) {
182
261
  case 'selector': {
183
- const index = range.findIndex((item) => item.value === defaultValue);
184
- value = index < 0 ? '' : defaultValue;
185
- displayValue = index < 0 ? '' : range[index].label;
262
+ // TODO: == 故意的
263
+ if (format !== 'father-son' && format !== 'related' && format !== 'x-enum') {
264
+ const index = range.findIndex((item) => item.value == defaultValue);
265
+ value = index < 0 ? '' : defaultValue;
266
+ displayValue = index < 0 ? '' : range[index].label;
267
+ } else {
268
+ const index = option.findIndex((item) => item.value == defaultValue);
269
+ value = index < 0 ? '' : defaultValue;
270
+ displayValue = index < 0 ? '' : option[index].label;
271
+ }
186
272
  break;
187
273
  }
188
274
  case 'date': {
189
- value = defaultDate
190
- ? this.converDate2Dayjs(defaultDate).format('YYYY-MM-DD')
191
- : undefined;
192
- displayValue = value;
275
+ value = this._coverNumber2Date(defaultDate, dateMode);
276
+ displayValue = this._coverNumber2Date(defaultDate, dateMode, true);
193
277
  break;
194
278
  }
195
279
  case 'time': {
@@ -202,6 +286,10 @@ Component({
202
286
  displayValue = defaultRegion.join(separator);
203
287
  break;
204
288
  }
289
+ case 'mutiRegion': {
290
+ displayValue = defaultMutiRegion || '';
291
+ break;
292
+ }
205
293
  default: {
206
294
  break;
207
295
  }
@@ -213,11 +301,13 @@ Component({
213
301
  });
214
302
  },
215
303
  range: function (range) {
216
- const { mode } = this.properties;
304
+ const { mode, format } = this.properties;
217
305
  let selectRange = '';
218
306
  switch (mode) {
219
307
  case 'selector': {
220
- selectRange = range.map((item) => item.label);
308
+ if (format !== 'father-son' && format !== 'related' && format !== 'x-enum') {
309
+ selectRange = range.map((item) => item.label);
310
+ }
221
311
  break;
222
312
  }
223
313
  default: {
@@ -230,32 +320,215 @@ Component({
230
320
  });
231
321
  }
232
322
  },
323
+ enumName: function (enumName) {
324
+ if (this.properties.format === 'x-enum' && enumName) {
325
+ this._fetchEnumData();
326
+ }
327
+ },
328
+ where: function (where) {
329
+ const whereEffected = [].concat(getWhereList(where));
330
+ this.setData({ whereEffected });
331
+ const { format, dataSourceName, viewId } = this.properties;
332
+ if ((format === 'father-son' || format === 'related') && dataSourceName && viewId) {
333
+ this._fetchData(whereEffected);
334
+ }
335
+ },
336
+ 'records': function (records) {
337
+ const { primaryField } = this.properties;
338
+ if (records && records.length !== 0 && primaryField) {
339
+ const option = records.map(item => {
340
+ return {
341
+ label: item[primaryField],
342
+ value: item._id,
343
+ name: item[primaryField]
344
+ };
345
+ });
346
+ this.setData({ selectRange: option.map((item) => item.label), option });
347
+ }
348
+ },
233
349
  },
234
350
  methods: {
351
+ // 获取数据列表
352
+ _fetchData: async function (param) {
353
+ const { dataSourceName, viewId } = this.properties;
354
+ let pageNo = 1;
355
+ let pageSize = 200;
356
+ let records = [];
357
+ let total = 99999;
358
+ for (let index = 0; index < Math.floor(total / pageSize) + 1; index++) {
359
+ let data = await callDataSourceApi({
360
+ dataSourceName: dataSourceName,
361
+ viewId: viewId,
362
+ methodName: 'wedaGetRecords',
363
+ params: {
364
+ where: param,
365
+ pageNo: pageNo,
366
+ pageSize: pageSize
367
+ },
368
+ });
369
+ pageNo = pageNo + 1;
370
+ if (data?.records) {
371
+ total = data?.total || 0;
372
+ records = records.concat(data?.records);
373
+ }
374
+
375
+ }
376
+
377
+ if (records) {
378
+ this.setData({ records });
379
+ }
380
+ },
381
+ //获取省
382
+ async getProvince() {
383
+ const { regionType, defaultMutiRegion } = this.properties;
384
+ const changeData = await getRegionTree(defaultMutiRegion || '');
385
+ //限制渲染时change事件触发,否则会有初始数据被覆盖问题
386
+ if (changeData?.result.length > 0) {
387
+ this.triggerEvent('change', changeData);
388
+ }
389
+ var provinceList = [...provinces];
390
+ var provinceArr = provinces.map((item) => { return { value: item.Value, code: item.Code }; }); //保存省级名称
391
+ this.setData({
392
+ multiArray: JSON.parse(JSON.stringify(provinceArr)),
393
+ provinceList,//保存省级原始数据
394
+ provinceArr, //省级所有的名称
395
+ });
396
+ var defaultCode = this.data.provinceList[0].Code; // 使用第一项当作参数获取市级数据
397
+ this.setData({
398
+ currnetProvinceKey: defaultCode // 保存在当前的省级key
399
+ });
400
+ if (regionType != 'levelOne') {
401
+ this.getCity(this.data.provinceList[0]); // 获取市级数据
402
+ }
403
+ },
404
+ getCity(provinceInfo) { // 获取市级数据
405
+ const { regionType } = this.properties;
406
+ const code = provinceInfo.Code;
407
+ this.setData({
408
+ currnetProvinceKey: code // 保存当前选择的市级code
409
+ });
410
+ var cityArr = [];
411
+ var cityList = [];
412
+ cities.forEach((item) => {
413
+ if (item.Code.substr(0, 2) == code.substr(0, 2)) {
414
+ cityArr.push({ value: item.Value, code: item.Code });
415
+ cityList.push(item);
416
+ }
417
+ });
418
+ this.setData({
419
+ cityList, // 保存下市级原始数据
420
+ cityArr // 市级所有的名称
421
+ });
422
+ if (regionType == 'levelTwo') {
423
+ const cityData = [this.data.provinceArr, cityArr];
424
+ this.setData({
425
+ multiArray: JSON.parse(JSON.stringify(cityData)),
426
+ });
427
+ }
428
+ var defaultCode = cityList[0]?.Code;
429
+ this.setData({
430
+ currnetCityKey: defaultCode // 存下当前选择的城市key
431
+ });
432
+ if (regionType == 'levelThree') {
433
+ this.getRegion(cityList[0]);
434
+ }
435
+ },
436
+ getRegion(cityInfo) {
437
+ const code = cityInfo.Code;
438
+ this.setData({
439
+ currnetCityKey: code // 更新当前选择的市级key
440
+ });
441
+ var regionList = [];
442
+ var regionArr = [];
443
+ regions.forEach((item) => {
444
+ if (cityInfo.Type == 1 && cityInfo.CentralCity) {
445
+ if (item.Code.substr(0, 2) == code.substr(0, 2)) {
446
+ regionArr.push({ value: item.Value, code: item.Code });
447
+ regionList.push(item);
448
+ }
449
+ } else {
450
+ if (item.Code.substr(0, 4) == code.substr(0, 4)) {
451
+ regionArr.push({ value: item.Value, code: item.Code });
452
+ regionList.push(item);
453
+ }
454
+ }
455
+ });
456
+ const threeRegion = [this.data.provinceArr, this.data.cityArr, regionArr];
457
+ this.setData({
458
+ multiArray: JSON.parse(JSON.stringify(threeRegion)),
459
+ regionList,
460
+ regionArr
461
+ });
462
+ var defaultCode = regionList[0]?.Code;
463
+ this.setData({
464
+ currnetRegionKey: defaultCode // 存下当前选择的城市key
465
+ });
466
+ },
467
+ columnchange(e) { // 滚动选择器 触发的事件
468
+ const { regionType } = this.properties;
469
+ var column = e.detail.column; // 当前改变的列
470
+ var data = {
471
+ multiIndex: JSON.parse(JSON.stringify(this.data.multiIndex)),
472
+ multiArray: JSON.parse(JSON.stringify(this.data.multiArray))
473
+ };
474
+ data.multiIndex[column] = e.detail.value; // 第几列改变了就是对应multiIndex的第几个,更新它
475
+ switch (column) { // 处理不同的逻辑
476
+ case 0: // 第一列更改 就是省级的更改
477
+ if (regionType != 'levelOne')
478
+ this.getCity(this.data.provinceList[e.detail.value]); // 获取当前key下面的市级数据
479
+ data.multiIndex[1] = 0; // 将市默认选择第一个
480
+ break;
481
+ case 1: // 市发生变化
482
+ this.getRegion(this.data.cityList[e.detail.value]); // 获取区
483
+ // }
484
+ data.multiIndex[2] = 0; // 区默认为第一个
485
+ break;
486
+ }
487
+ },
488
+ // 获取通用选项集列表
489
+ _fetchEnumData: async function () {
490
+ let data = await callWedaApi({
491
+ action: 'DescribeGeneralOptionsDetailList',
492
+ data: { OptNameList: [this.properties.enumName], PageIndex: 1, PageSize: 10 },
493
+ });
494
+ const config = destr(data?.Items?.[0]?.Config) ?? [];
495
+ const option = config.map(item => {
496
+ return {
497
+ label: item.value,
498
+ value: item.key,
499
+ name: item.value
500
+ };
501
+ });
502
+ this.setData({ selectRange: option.map((item) => item.label), option });
503
+ },
504
+
235
505
  onChange(e) {
236
- const { range, mode, separator, placeholder } = this.properties;
506
+ const { range, mode, separator, placeholder, regionType, dateMode, format, option } = this.properties;
237
507
  let displayValue;
238
508
  switch (mode) {
239
509
  case 'selector': {
240
- this.triggerEvent('change', range[e.detail.value]);
241
- displayValue = range[e.detail.value].label;
510
+ if (format !== 'father-son' && format !== 'related' && format !== 'x-enum') {
511
+ this.triggerEvent('change', range[e.detail.value]);
512
+ displayValue = range[e.detail.value].label;
513
+ } else {
514
+ this.triggerEvent('change', option[e.detail.value]);
515
+ displayValue = option[e.detail.value].label;
516
+ }
242
517
  break;
243
518
  }
244
519
  case 'date':
245
520
  case 'time': {
246
521
  const value = e.detail.value;
247
- let day =
248
- mode === 'date'
249
- ? this.converDate2Dayjs(value)
250
- : this.converTime2Dayjs(value);
251
-
252
- let timeSnap =
253
- mode === 'date'
254
- ? day.valueOf()
255
- : (day.hour() * 60 * 60 + day.minute() * 60) * 1000;
256
- this.triggerEvent('change', {
257
- value: timeSnap,
258
- });
522
+ let day, timeSnap;
523
+ if (mode === 'date') {
524
+ const dateValue = this._coverDateModeValue(value, dateMode);
525
+ day = this.converDate2Dayjs(dateValue);
526
+ timeSnap = day.valueOf();
527
+ } else {
528
+ day = this.converTime2Dayjs(value);
529
+ timeSnap = (day.hour() * 60 * 60 + day.minute() * 60) * 1000;
530
+ }
531
+ this.triggerEvent('change', { value: timeSnap });
259
532
  displayValue = e.detail.value;
260
533
  break;
261
534
  }
@@ -264,6 +537,16 @@ Component({
264
537
  displayValue = e.detail.value.join(separator);
265
538
  break;
266
539
  }
540
+ case 'mutiRegion': {
541
+ this.setData({
542
+ step: 1,
543
+ multiIndex: e.detail.value // 更新下标字段
544
+ });
545
+ const value = buildDisplayValue(this.data.multiArray, this.data.multiIndex, regionType);
546
+ displayValue = value?.value;
547
+ this.triggerEvent('change', value);
548
+ break;
549
+ }
267
550
  default: {
268
551
  break;
269
552
  }
@@ -298,11 +581,36 @@ Component({
298
581
  return dayjs(time);
299
582
  }
300
583
  },
301
- converDate2Dayjs(date) {
302
- if (typeof date === 'string' && /^-?[0-9]*$/.test(date)) {
303
- return dayjs(Number(date));
584
+ converDate2Dayjs(d) {
585
+ if (typeof d === 'string' && /^-?[0-9]*$/.test(d)) {
586
+ return dayjs(Number(d));
587
+ }
588
+ return dayjs(d);
589
+ },
590
+ // 将原始 number 类型值转成 YYYY-MM-DD 格式
591
+ _coverNumber2Date(d, dateMode = 'day', isDisplay = false) {
592
+ const day = d && this.converDate2Dayjs(d);
593
+ if (!day) return undefined;
594
+ let dayStr;
595
+ if (dateMode === 'year') {
596
+ dayStr = day.format('YYYY') + (isDisplay ? '' : '-01-01');
597
+ } else if (dateMode === 'month') {
598
+ dayStr = day.format('YYYY-MM') + (isDisplay ? '' : '-01');
599
+ } else {
600
+ dayStr = day.format('YYYY-MM-DD');
601
+ }
602
+ return dayStr;
603
+ },
604
+ // 将组件 onChange 返回的值,根据年/月/日模式,补齐返回 YYYY-MM-DD 格式
605
+ _coverDateModeValue(d, dateMode = 'day') {
606
+ if (dateMode === 'year' && /^\d{4}$/.test(d)) {
607
+ return `${d}-01-01`;
608
+ } else if (dateMode === 'month' && /^\d{4}-\d{2}$/.test(d)) {
609
+ return `${d}-01`;
610
+ } else {
611
+ return d;
304
612
  }
305
- return dayjs(date);
306
613
  },
614
+
307
615
  },
308
616
  });
@@ -1,25 +1,40 @@
1
- <formcell
2
- className="{{cls}}"
1
+ <formcell
2
+ className="{{cls}}"
3
3
  style="{{style}}"
4
4
  label="{{labelVisible ? label : null}}"
5
5
  layout="{{layout}}"
6
6
  multiCell="{{false}}"
7
7
  requiredFlag="{{requiredFlag}}"
8
8
  >
9
- <view class="{{subCls}}">
9
+ <view class="{{subCls}}">
10
10
  <view class="weui-cell__bd">
11
11
  <picker
12
- class="weui-picker__group"
12
+ wx:if="{{mode!='mutiRegion'}}"
13
+ class="weui-picker__group weui-input"
13
14
  bindchange="onChange"
14
15
  bindcancel="onCancel"
15
16
  mode="{{mode}}"
16
17
  range="{{selectRange}}"
18
+ disabled="{{disabled}}"
17
19
  start="{{start}}"
18
20
  end="{{end}}"
21
+ disabled="{{disabled}}"
19
22
  value="{{value}}"
23
+ fields="{{dateMode}}"
20
24
  >
25
+ <label class="{{displayCls}}">{{displayValue}}</label>
26
+ </picker>
27
+ <picker wx:if="{{mode=='mutiRegion'}}"
28
+ mode="multiSelector"
29
+ disabled="{{disabled}}"
30
+ range="{{multiArray}}"
31
+ range-key='value'
32
+ bindcolumnchange="columnchange"
33
+ value="{{multiIndex}}"
34
+ bindchange='onChange'
35
+ class="weui-picker__group weui-input">
21
36
  <label class="{{displayCls}}">{{displayValue}}</label>
22
37
  </picker>
23
38
  </view>
24
- </view>
25
- </formcell>
39
+ </view>
40
+ </formcell>
@@ -0,0 +1,101 @@
1
+ import { callWedaApi } from '../../../../utils/tcb';
2
+
3
+ export let provinces = [];
4
+ export let cities = [];
5
+ export let regions = [];
6
+ export let regionData = [];
7
+ /**
8
+ * 获取运行态地区数据
9
+ * 查询所有的省市区数据https://iwiki.woa.com/pages/viewpage.action?pageId=1582408865
10
+ */
11
+ export async function getAreaCode() {
12
+ try {
13
+ const res = await callWedaApi({
14
+ action: 'QueryRuntimeAreaCode',
15
+ data: { Mask: "11100" },
16
+ });
17
+ return res?.AreaCodeList;
18
+ } catch (error) {
19
+ console.error('错误', error);
20
+ return {};
21
+ }
22
+ }
23
+ export const getRegionTree = async function (defaultValue) {
24
+ regionData = await getAreaCode();
25
+ splitAreaData(regionData, regionData);
26
+ return changeResult(defaultValue, regionData);
27
+ };
28
+ export const splitAreaData = (areaData) => {
29
+ provinces = [];
30
+ cities = [];
31
+ regions = [];
32
+ areaData.forEach(item => {
33
+ if (!item.Deprecated) {
34
+ if (item?.Type == 1) {
35
+ provinces.push(item);
36
+ } if (item?.Type == 2 || (item?.Type == 1 && item.CentralCity)) {
37
+ cities.push(item);
38
+ } else if (item?.Type == 3) {
39
+ regions.push(item);
40
+ }
41
+ }
42
+ });
43
+ };
44
+ /***
45
+ * 用于构建change事件result返回值
46
+ */
47
+ export const changeResult = (regionValue, areaData) => {
48
+ const defaultValue = regionValue ? regionValue.split(',') : null;
49
+ const changeValue = [];
50
+ const defaultIndex = [];
51
+ if (defaultValue && defaultValue.length > 0) {
52
+ defaultValue.forEach((element, index) => {
53
+ areaData.map((item, id) => {
54
+ //区级判重
55
+ if ((item?.Value == element && index != 2) || (item?.Value == element && item.Code.substr(0, 2) == changeValue[0].code.substr(0, 2) && index == 2)) {
56
+ changeValue.push({
57
+ value: item?.Value,
58
+ code: item?.Code
59
+ }
60
+ );
61
+ defaultIndex.push(id);
62
+ }
63
+ });
64
+ });
65
+ }
66
+ return { value: regionValue, result: changeValue };
67
+ };
68
+ /**
69
+ * 拼接地区选择默认值显示规则
70
+ */
71
+ export const buildDisplayValue = (data, indexList, type) => {
72
+ let provinceItem = [];
73
+ let cityItem;
74
+ let regionItem;
75
+ switch (type) {
76
+ case 'levelOne': {
77
+ provinceItem = data[0][indexList[0]];
78
+ return {
79
+ value: provinceItem.value,
80
+ result: [provinceItem]
81
+ };
82
+ }
83
+ case 'levelTwo': {
84
+ provinceItem = data[0][indexList[0]];
85
+ cityItem = data[1][indexList[1]];
86
+ return {
87
+ value: provinceItem.value + "," + cityItem.value,
88
+ result: [provinceItem, cityItem]
89
+ };
90
+ }
91
+ case 'levelThree': {
92
+ provinceItem = data[0][indexList[0]];
93
+ cityItem = data[1][indexList[1]];
94
+ regionItem = data[2][indexList[2]];
95
+ return {
96
+ value: provinceItem.value + "," + cityItem.value + "," + regionItem.value,
97
+ result: [provinceItem, cityItem, regionItem]
98
+ };
99
+ }
100
+ }
101
+ };
@@ -1,5 +1,5 @@
1
- <formcell
2
- className="{{cls}}"
1
+ <formcell
2
+ className="{{cls}}"
3
3
  style="{{style}}"
4
4
  label="{{labelVisible ? label : null}}"
5
5
  layout="{{layout}}"
@@ -8,15 +8,16 @@
8
8
  >
9
9
  <view class="weui-cell weui-cell_active weui-cell_form}} {{disabled ? 'weui-cell_disabled' : ''}}">
10
10
  <view class="weui-cell__bd">
11
- <textarea
12
- class="weui-textarea"
11
+ <textarea
12
+ class="weui-textarea"
13
13
  placeholder="{{placeholder}}"
14
14
  placeholder-class="weui-input__placeholder"
15
15
  bindinput="handleChange"
16
16
  value="{{value}}"
17
+ disable="{{disabled}}"
17
18
  maxlength="{{maxLength}}"
18
19
  ></textarea>
19
20
  <view wx:if="{{counterVisible}}" class="weui-textarea-counter"><span>{{!!value ? value.length : 0}}</span>/{{maxLength}}</view>
20
21
  </view>
21
22
  </view>
22
- </formcell>
23
+ </formcell>