@cloudbase/weda-ui 0.2.17 → 2.0.8

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 (269) hide show
  1. package/README.md +3 -0
  2. package/package.json +10 -5
  3. package/src/configs/components/button.json +0 -2
  4. package/src/configs/components/calendar.json +9 -3
  5. package/src/configs/components/carousel.json +18 -9
  6. package/src/configs/components/chart/bar.json +31 -12
  7. package/src/configs/components/chart/line.json +27 -10
  8. package/src/configs/components/chart/pie.json +22 -8
  9. package/src/configs/components/chart/statisticsCard.json +61 -13
  10. package/src/configs/components/container.json +7 -2
  11. package/src/configs/components/dataView.json +31 -11
  12. package/src/configs/components/form/checkbox.json +97 -5
  13. package/src/configs/components/form/radio.json +123 -4
  14. package/src/configs/components/form/select.json +247 -13
  15. package/src/configs/components/graphicCard.json +90 -75
  16. package/src/configs/components/image.json +19 -8
  17. package/src/configs/components/link.json +25 -6
  18. package/src/configs/components/listView.json +83 -27
  19. package/src/configs/components/lottery.json +153 -0
  20. package/src/configs/components/modal.json +37 -5
  21. package/src/configs/components/navLayout.json +97 -79
  22. package/src/configs/components/navigationBar.json +59 -0
  23. package/src/configs/components/richtextview.json +6 -2
  24. package/src/configs/components/scrollVeiw.json +98 -34
  25. package/src/configs/components/swiper.json +22 -10
  26. package/src/configs/components/tabs.json +54 -9
  27. package/src/configs/components/text.json +43 -30
  28. package/src/configs/components/wxOpenApi/phone.json +141 -0
  29. package/src/configs/components/wxOpenApi/phoneCode.json +121 -0
  30. package/src/configs/components/wxOpenApi/share.json +167 -0
  31. package/src/configs/components/wxOpenApi/userInfo.json +174 -0
  32. package/src/configs/index.js +13 -0
  33. package/src/docs/common/format.tsx +112 -0
  34. package/src/docs/common/tableView.css +164 -0
  35. package/src/docs/common/tableView.tsx +273 -0
  36. package/src/docs/compsdocs/chart/Bar.mdx +159 -0
  37. package/src/docs/compsdocs/chart/Line.mdx +100 -0
  38. package/src/docs/compsdocs/chart/Pie.mdx +83 -0
  39. package/src/docs/compsdocs/chart/_category_.json +1 -0
  40. package/src/docs/compsdocs/chart/statisticsCard.mdx +51 -0
  41. package/src/docs/compsdocs/database/DataView.mdx +33 -0
  42. package/src/docs/compsdocs/database/ListView.mdx +33 -0
  43. package/src/docs/compsdocs/database/_category_.json +1 -0
  44. package/src/docs/compsdocs/form/Form.mdx +35 -0
  45. package/src/docs/compsdocs/form/FormCheckbox.mdx +35 -0
  46. package/src/docs/compsdocs/form/FormDate.mdx +30 -0
  47. package/src/docs/compsdocs/form/FormEmail.mdx +30 -0
  48. package/src/docs/compsdocs/form/FormImageUploader.mdx +31 -0
  49. package/src/docs/compsdocs/form/FormInput.mdx +30 -0
  50. package/src/docs/compsdocs/form/FormLocation.mdx +64 -0
  51. package/src/docs/compsdocs/form/FormPhone.mdx +30 -0
  52. package/src/docs/compsdocs/form/FormRadio.mdx +35 -0
  53. package/src/docs/compsdocs/form/FormRegion.mdx +30 -0
  54. package/src/docs/compsdocs/form/FormSelect.mdx +36 -0
  55. package/src/docs/compsdocs/form/FormSwitch.mdx +30 -0
  56. package/src/docs/compsdocs/form/FormTextarea.mdx +30 -0
  57. package/src/docs/compsdocs/form/FormTime.mdx +30 -0
  58. package/src/docs/compsdocs/form/FormUploadFile.mdx +30 -0
  59. package/src/docs/compsdocs/form/FormUrl.mdx +30 -0
  60. package/src/docs/compsdocs/form/_category_.json +1 -0
  61. package/src/docs/compsdocs/grid/Card.mdx +32 -0
  62. package/src/docs/compsdocs/grid/Container.mdx +42 -0
  63. package/src/docs/compsdocs/grid/Footer.mdx +31 -0
  64. package/src/docs/compsdocs/grid/GridLayout.mdx +32 -0
  65. package/src/docs/compsdocs/grid/Header.mdx +31 -0
  66. package/src/docs/compsdocs/grid/Layout.mdx +25 -0
  67. package/src/docs/compsdocs/grid/List.mdx +31 -0
  68. package/src/docs/compsdocs/grid/ScrollView.mdx +37 -0
  69. package/src/docs/compsdocs/grid/Swiper.mdx +58 -0
  70. package/src/docs/compsdocs/grid/_category_.json +1 -0
  71. package/src/docs/compsdocs/media/Icon.mdx +31 -0
  72. package/src/docs/compsdocs/media/Image.mdx +55 -0
  73. package/src/docs/compsdocs/media/_category_.json +1 -0
  74. package/src/docs/compsdocs/model/ModelCreate.mdx +20 -0
  75. package/src/docs/compsdocs/model/ModelDetail.mdx +20 -0
  76. package/src/docs/compsdocs/model/ModelTable.mdx +24 -0
  77. package/src/docs/compsdocs/model/ModelUpdate.mdx +21 -0
  78. package/src/docs/compsdocs/model/PageLayout.mdx +21 -0
  79. package/src/docs/compsdocs/model/_category_.json +1 -0
  80. package/src/docs/compsdocs/navmenu/Classification.mdx +38 -0
  81. package/src/docs/compsdocs/navmenu/NavBar.mdx +43 -0
  82. package/src/docs/compsdocs/navmenu/NavLayout.mdx +30 -0
  83. package/src/docs/compsdocs/navmenu/TabBar.mdx +43 -0
  84. package/src/docs/compsdocs/navmenu/TabBarItem.mdx +29 -0
  85. package/src/docs/compsdocs/navmenu/_category_.json +1 -0
  86. package/src/docs/compsdocs/senior/Lottery.mdx +48 -0
  87. package/src/docs/compsdocs/senior/Modal.mdx +58 -0
  88. package/src/docs/compsdocs/senior/SlotMachine.mdx +52 -0
  89. package/src/docs/compsdocs/senior/_category_.json +1 -0
  90. package/src/docs/compsdocs/show/Calendar.mdx +29 -0
  91. package/src/docs/compsdocs/show/Divider.mdx +31 -0
  92. package/src/docs/compsdocs/show/GraphicCard.mdx +30 -0
  93. package/src/docs/compsdocs/show/Item.mdx +32 -0
  94. package/src/docs/compsdocs/show/ItemList.mdx +47 -0
  95. package/src/docs/compsdocs/show/Media.mdx +25 -0
  96. package/src/docs/compsdocs/show/StatusTip.mdx +25 -0
  97. package/src/docs/compsdocs/show/Swiper.mdx +33 -0
  98. package/src/docs/compsdocs/show/Tabs.mdx +38 -0
  99. package/src/docs/compsdocs/show/_category_.json +1 -0
  100. package/src/docs/compsdocs/show/button.mdx +25 -0
  101. package/src/docs/compsdocs/text/Link.mdx +43 -0
  102. package/src/docs/compsdocs/text/RichTextView.mdx +36 -0
  103. package/src/docs/compsdocs/text/Text.mdx +31 -0
  104. package/src/docs/compsdocs/text/Title.mdx +32 -0
  105. package/src/docs/compsdocs/text/_category_.json +1 -0
  106. package/src/docs/compsdocs/wxOpen/Phone.mdx +60 -0
  107. package/src/docs/compsdocs/wxOpen/Share.mdx +46 -0
  108. package/src/docs/compsdocs/wxOpen/UserInfo.mdx +60 -0
  109. package/src/docs/compsdocs/wxOpen/_category_.json +4 -0
  110. package/src/index.js +2 -0
  111. package/src/mp/components/button/index.js +18 -2
  112. package/src/mp/components/button/index.wxml +7 -4
  113. package/src/mp/components/chart/bar/index.js +6 -2
  114. package/src/mp/components/chart/common/core/eChartBar.js +9 -8
  115. package/src/mp/components/chart/common/core/eChartBase.js +20 -16
  116. package/src/mp/components/chart/common/core/eChartLine.js +6 -5
  117. package/src/mp/components/chart/line/index.js +10 -6
  118. package/src/mp/components/chart/pie/index.js +6 -2
  119. package/src/mp/components/chart/statisticsCard/index.js +33 -6
  120. package/src/mp/components/dataView/index.json +1 -1
  121. package/src/mp/components/form/checkbox/index.js +41 -2
  122. package/src/mp/components/form/checkbox/index.wxml +1 -1
  123. package/src/mp/components/form/form/index.wxml +1 -2
  124. package/src/mp/components/form/formcell/index.wxml +1 -1
  125. package/src/mp/components/form/formcell/index.wxss +17 -0
  126. package/src/mp/components/form/input/index.js +1 -1
  127. package/src/mp/components/form/input/index.wxss +15 -0
  128. package/src/mp/components/form/location/index.js +43 -2
  129. package/src/mp/components/form/location/index.wxss +4 -6
  130. package/src/mp/components/form/radio/index.js +34 -1
  131. package/src/mp/components/form/select/index.js +351 -41
  132. package/src/mp/components/form/select/index.wxml +17 -2
  133. package/src/mp/components/form/select/index.wxss +4 -0
  134. package/src/mp/components/form/select/region/index.js +101 -0
  135. package/src/mp/components/form/textarea/index.js +1 -1
  136. package/src/mp/components/form/textarea/index.wxss +4 -0
  137. package/src/mp/components/form/uploader/index.js +39 -27
  138. package/src/mp/components/form/uploader/index.json +3 -2
  139. package/src/mp/components/form/uploader/index.wxml +11 -7
  140. package/src/mp/components/form/uploader/index.wxss +20 -2
  141. package/src/mp/components/form/uploader/weui-uploader.js +209 -0
  142. package/src/mp/components/form/uploader/weui-uploader.json +7 -0
  143. package/src/mp/components/form/uploader/weui-uploader.wxml +45 -0
  144. package/src/mp/components/form/uploader/weui-uploader.wxss +1 -0
  145. package/src/mp/components/form/uploaderFile/index.js +10 -6
  146. package/src/mp/components/form/uploaderFile/index.wxss +4 -4
  147. package/src/mp/components/image/index.wxss +3 -2
  148. package/src/mp/components/listView/index.js +38 -43
  149. package/src/mp/components/listView/index.wxml +1 -1
  150. package/src/mp/components/listView/index.wxss +5 -0
  151. package/src/mp/components/lottery/index.js +270 -0
  152. package/src/mp/components/{internals/listView → lottery}/index.json +0 -0
  153. package/src/mp/components/lottery/index.wxml +43 -0
  154. package/src/mp/components/lottery/index.wxss +317 -0
  155. package/src/mp/components/navigationBar/index.js +193 -0
  156. package/src/mp/components/navigationBar/index.json +6 -0
  157. package/src/mp/components/navigationBar/index.wxml +88 -0
  158. package/src/mp/components/navigationBar/index.wxss +1257 -0
  159. package/src/mp/components/tabs/index.js +7 -2
  160. package/src/mp/components/tabs/index.wxml +2 -1
  161. package/src/mp/components/text/index.js +0 -25
  162. package/src/mp/components/text/index.wxml +3 -3
  163. package/src/mp/components/wxOpenApi/phone/index.js +117 -0
  164. package/src/mp/components/wxOpenApi/phone/index.json +4 -0
  165. package/src/mp/components/wxOpenApi/phone/index.wxml +15 -0
  166. package/src/mp/components/wxOpenApi/phone/index.wxss +22 -0
  167. package/src/mp/components/wxOpenApi/phoneCode/index.js +89 -0
  168. package/src/mp/components/wxOpenApi/phoneCode/index.json +4 -0
  169. package/src/mp/components/wxOpenApi/phoneCode/index.wxml +15 -0
  170. package/src/mp/components/wxOpenApi/phoneCode/index.wxss +22 -0
  171. package/src/mp/components/wxOpenApi/share/index.js +117 -0
  172. package/src/mp/components/wxOpenApi/share/index.json +4 -0
  173. package/src/mp/components/wxOpenApi/share/index.wxml +15 -0
  174. package/src/mp/components/wxOpenApi/share/index.wxss +22 -0
  175. package/src/mp/components/wxOpenApi/userInfo/index.js +88 -0
  176. package/src/mp/components/wxOpenApi/userInfo/index.json +4 -0
  177. package/src/mp/components/wxOpenApi/userInfo/index.wxml +14 -0
  178. package/src/mp/components/wxOpenApi/userInfo/index.wxss +22 -0
  179. package/src/mp/index.json +7 -1
  180. package/src/mp/style/weda-ui.wxss +16 -0
  181. package/src/mp/utils/constant.js +15 -0
  182. package/src/mp/utils/destr.js +48 -0
  183. package/src/mp/utils/lodash.js +2 -0
  184. package/src/mp/utils/platform.js +10 -0
  185. package/src/mp/utils/tcb.js +44 -0
  186. package/src/web/components/button/index.css +8 -1
  187. package/src/web/components/button/index.tsx +10 -9
  188. package/src/web/components/calendar/index.jsx +1 -1
  189. package/src/web/components/carousel/index.tsx +8 -8
  190. package/src/web/components/chart/bar/index.tsx +40 -39
  191. package/src/web/components/chart/common/config/line.js +1 -1
  192. package/src/web/components/chart/common/core/eChartBar.js +7 -6
  193. package/src/web/components/chart/common/core/eChartBase.ts +20 -16
  194. package/src/web/components/chart/common/core/eChartLine.js +8 -6
  195. package/src/web/components/chart/line/index.tsx +40 -39
  196. package/src/web/components/chart/statisticsCard/index.tsx +29 -8
  197. package/src/web/components/form/checkbox/index.tsx +61 -23
  198. package/src/web/components/form/form/index.css +5 -1
  199. package/src/web/components/form/form/index.tsx +3 -1
  200. package/src/web/components/form/formcell/index.css +22 -1
  201. package/src/web/components/form/formcell/index.tsx +11 -6
  202. package/src/web/components/form/input/index.css +7 -12
  203. package/src/web/components/form/location/components/LocationH5/index.css +4 -7
  204. package/src/web/components/form/location/components/LocationH5/location.h5.jsx +1 -1
  205. package/src/web/components/form/radio/index.tsx +90 -53
  206. package/src/web/components/form/select/h5.tsx +370 -73
  207. package/src/web/components/form/select/index.css +15 -0
  208. package/src/web/components/form/select/index.tsx +392 -145
  209. package/src/web/components/form/select/region/index.ts +122 -31
  210. package/src/web/components/form/select/time.jsx +89 -0
  211. package/src/web/components/form/select/year.tsx +170 -0
  212. package/src/web/components/form/textarea/index.css +4 -0
  213. package/src/web/components/form/textarea/index.tsx +2 -2
  214. package/src/web/components/form/tips/index.css +4 -0
  215. package/src/web/components/form/tips/index.tsx +4 -3
  216. package/src/web/components/form/uploader/index.css +26 -2
  217. package/src/web/components/form/uploader/uploader.h5.tsx +89 -57
  218. package/src/web/components/form/uploader/uploader.pc.tsx +4 -4
  219. package/src/web/components/form/uploaderFile/index.css +2 -4
  220. package/src/web/components/form/uploaderFile/uploadFile.h5.tsx +13 -7
  221. package/src/web/components/form/uploaderFile/uploadFile.pc.tsx +13 -5
  222. package/src/web/components/image/image.tsx +1 -1
  223. package/src/web/components/image/index.css +3 -3
  224. package/src/web/components/image/index.tsx +6 -7
  225. package/src/web/components/index.js +8 -0
  226. package/src/web/components/link/index.tsx +7 -4
  227. package/src/web/components/listView/index.css +4 -0
  228. package/src/web/components/listView/index.tsx +12 -20
  229. package/src/web/components/lottery/index.css +327 -0
  230. package/src/web/components/lottery/index.tsx +567 -0
  231. package/src/web/components/lottery/lotteryUtil.ts +130 -0
  232. package/src/web/components/modal/index.tsx +3 -1
  233. package/src/web/components/navLayout/index.tsx +2 -2
  234. package/src/web/components/navigationBar/chevron-right--double.svg +3 -0
  235. package/src/web/components/navigationBar/common.tsx +198 -0
  236. package/src/web/components/navigationBar/h5Menu.tsx +179 -0
  237. package/src/web/components/navigationBar/horizontalMenu.tsx +200 -0
  238. package/src/web/components/navigationBar/index.css +762 -0
  239. package/src/web/components/navigationBar/index.tsx +230 -0
  240. package/src/web/components/navigationBar/type.d.ts +111 -0
  241. package/src/web/components/navigationBar/verticalMenu.tsx +81 -0
  242. package/src/web/components/phone/index.css +0 -0
  243. package/src/web/components/phone/index.tsx +22 -0
  244. package/src/web/components/phoneCode/index.css +0 -0
  245. package/src/web/components/phoneCode/index.tsx +22 -0
  246. package/src/web/components/picker/timePicker.tsx +2 -2
  247. package/src/web/components/richTextView/index.tsx +3 -5
  248. package/src/web/components/share/index.css +0 -0
  249. package/src/web/components/share/index.tsx +38 -0
  250. package/src/web/components/slot/index.tsx +1 -1
  251. package/src/web/components/tabs/index.tsx +2 -0
  252. package/src/web/components/tabs/tabs.h5.tsx +43 -33
  253. package/src/web/components/tabs/tabs.pc.tsx +23 -10
  254. package/src/web/components/text/index.tsx +12 -20
  255. package/src/web/components/userInfo/index.css +0 -0
  256. package/src/web/components/userInfo/index.tsx +30 -0
  257. package/src/web/utils/{constant.js → constant.ts} +17 -2
  258. package/src/web/utils/lodash.ts +2 -0
  259. package/src/web/utils/platform.js +9 -0
  260. package/src/web/utils/tcb.js +26 -0
  261. package/src/web/weda-ui.css +7 -1
  262. package/src/mp/components/internals/listView/arrow-right-line.svg +0 -3
  263. package/src/mp/components/internals/listView/index.js +0 -286
  264. package/src/mp/components/internals/listView/index.wxml +0 -40
  265. package/src/mp/components/internals/listView/index.wxss +0 -150
  266. package/src/mp/components/internals/listView/more-line.svg +0 -3
  267. package/src/web/components/form/select/region/cities.ts +0 -2410
  268. package/src/web/components/form/select/region/provinces.ts +0 -240
  269. package/src/web/components/form/select/region/regions.ts +0 -20645
@@ -1 +1,16 @@
1
1
  @import '../../../style/weda-ui.wxss';
2
+
3
+ /*
4
+ 把weui-cell 的padding还回到input
5
+ */
6
+ .weda-ui .weui-input {
7
+ padding: 28rpx 0;
8
+ }
9
+
10
+ .weui-btn_input-clear {
11
+ align-self: center;
12
+ }
13
+
14
+ /**
15
+ * END
16
+ */
@@ -156,7 +156,48 @@ Component({
156
156
  };
157
157
  const { locationType, customLocation } = this.properties;
158
158
  if (locationType === 1 || locationType === 2) {
159
- getCurrentLocation(locationType);
159
+ // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
160
+ wx.getSetting({
161
+ success: (res) => {
162
+ if (!res.authSetting['scope.userLocation']) {
163
+ // 没有授权
164
+ wx.authorize({
165
+ scope: 'scope.userLocation',
166
+ success: () => {
167
+ // 用户已经同意小程序使用定位功能,后续调用 wx.getLocation 接口不会弹窗询问
168
+ getCurrentLocation(locationType);
169
+ },
170
+ fail: (err) => {
171
+ console.log('authorize fail', err);
172
+ this.setData({
173
+ currentPosition: {
174
+ status: false,
175
+ message: err.errMsg,
176
+ },
177
+ currentLocations: {},
178
+ });
179
+ this.triggerEvent('change', {
180
+ value: null,
181
+ });
182
+ wx.showToast({
183
+ icon: 'none',
184
+ title: err.errMsg,
185
+ });
186
+ },
187
+ });
188
+ } else {
189
+ // 已经授权
190
+ getCurrentLocation(locationType);
191
+ }
192
+ },
193
+ fail: (err) => {
194
+ console.log('getSetting fail', err);
195
+ wx.showToast({
196
+ icon: 'none',
197
+ title: 'getSetting fail',
198
+ });
199
+ },
200
+ });
160
201
  } else if (locationType === 3) {
161
202
  this.setData({
162
203
  currentPosition: {
@@ -299,7 +340,7 @@ Component({
299
340
  let location = {
300
341
  address: poiname,
301
342
  geopoint: {
302
- coordinates: [latitude, longitude],
343
+ coordinates: [longitude, latitude],
303
344
  type: 'Point',
304
345
  },
305
346
  };
@@ -1,8 +1,5 @@
1
1
  /* components/location/location.wxss */
2
2
 
3
- .form-location {
4
- }
5
-
6
3
  .form-location-warp {
7
4
  display: flex;
8
5
  white-space: nowrap;
@@ -26,10 +23,11 @@
26
23
  bottom: 0;
27
24
  }
28
25
 
29
- .form-location-con {
26
+ .form-location_cell.form-location-con {
30
27
  flex: 1;
31
28
  display: flex;
32
29
  align-items: center;
30
+ padding-left: 0px;
33
31
  }
34
32
 
35
33
  .form-location-label_flag {
@@ -41,7 +39,7 @@
41
39
  }
42
40
 
43
41
  .form-location-label {
44
- max-width: 150px;
42
+ width: 130px;
45
43
  overflow: hidden;
46
44
  white-space: nowrap;
47
45
  text-overflow: ellipsis;
@@ -59,7 +57,7 @@
59
57
  }
60
58
 
61
59
  .form-location_cell {
62
- padding: 16px 32px;
60
+ padding: 16px;
63
61
  line-height: 1.41176471;
64
62
  font-size: 17px;
65
63
  overflow: hidden;
@@ -1,5 +1,7 @@
1
1
  import classNames from '../../../utils/classnames';
2
+ import destr from '../../../utils/destr';
2
3
  import handleEvents from '../../../utils/handleEvents';
4
+ import { callWedaApi } from '../../../utils/tcb';
3
5
 
4
6
  Component({
5
7
  options: {
@@ -41,6 +43,14 @@ Component({
41
43
  type: Boolean,
42
44
  value: false,
43
45
  },
46
+ format: {
47
+ type: String,
48
+ value: '',
49
+ },
50
+ enumName: {
51
+ type: String,
52
+ value: '',
53
+ }
44
54
  },
45
55
  data: {
46
56
  cls: '',
@@ -68,6 +78,22 @@ Component({
68
78
  },
69
79
  },
70
80
  methods: {
81
+ _fetchData: async function () {
82
+ let data = await callWedaApi({
83
+ action: 'DescribeGeneralOptionsDetailList',
84
+ data: { OptNameList: [this.properties.enumName], PageIndex: 1, PageSize: 10 },
85
+ });
86
+ const config = destr(data?.Items?.[0]?.Config) ?? [];
87
+ const option = config?.map(item => {
88
+ return {
89
+ label: item.value,
90
+ value: item.key,
91
+ checked: false
92
+ };
93
+ });
94
+ this.setData({ defaultRange: option });
95
+ },
96
+
71
97
  ...handleEvents([
72
98
  {
73
99
  name: 'change',
@@ -77,7 +103,14 @@ Component({
77
103
  },
78
104
  observers: {
79
105
  range: function (range) {
80
- this.setData({ defaultRange: range });
106
+ if (this.properties.format !== 'x-enum') {
107
+ this.setData({ defaultRange: range });
108
+ }
81
109
  },
110
+ format: function (format) {
111
+ if (format === 'x-enum' && this.properties.enumName) {
112
+ this._fetchData();
113
+ }
114
+ }
82
115
  },
83
116
  });
@@ -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,60 @@ 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,defaultDate': function (
174
253
  defaultValue,
175
254
  defaultTime,
176
- defaultDate,
177
- defaultRegion
255
+ defaultRegion,
256
+ defaultMutiRegion,
257
+ defaultDate
178
258
  ) {
179
- const { range, mode, separator, placeholder } = this.properties;
259
+ const { range, mode, separator, placeholder, dateMode, format, option } =
260
+ this.properties;
180
261
  let value, displayValue;
181
262
  switch (mode) {
182
263
  case 'selector': {
183
- const index = range.findIndex((item) => item.value === defaultValue);
184
- value = index < 0 ? '' : defaultValue;
185
- displayValue = index < 0 ? '' : range[index].label;
264
+ // TODO: == 故意的
265
+ if (format !== 'father-son' && format !== 'related' && format !== 'x-enum') {
266
+ const index = range.findIndex((item) => item.value == defaultValue);
267
+ value = index < 0 ? '' : defaultValue;
268
+ displayValue = index < 0 ? '' : range[index].label;
269
+ } else {
270
+ const index = option.findIndex((item) => item.value == defaultValue);
271
+ value = index < 0 ? '' : defaultValue;
272
+ displayValue = index < 0 ? '' : option[index].label;
273
+ }
186
274
  break;
187
275
  }
188
276
  case 'date': {
189
- value = defaultDate
190
- ? this.converDate2Dayjs(defaultDate).format('YYYY-MM-DD')
191
- : undefined;
192
- displayValue = value;
277
+ value = this._coverNumber2Date(defaultDate, dateMode);
278
+ displayValue = this._coverNumber2Date(defaultDate, dateMode, true);
193
279
  break;
194
280
  }
195
281
  case 'time': {
@@ -202,6 +288,10 @@ Component({
202
288
  displayValue = defaultRegion.join(separator);
203
289
  break;
204
290
  }
291
+ case 'mutiRegion': {
292
+ displayValue = defaultMutiRegion || '';
293
+ break;
294
+ }
205
295
  default: {
206
296
  break;
207
297
  }
@@ -213,11 +303,13 @@ Component({
213
303
  });
214
304
  },
215
305
  range: function (range) {
216
- const { mode } = this.properties;
306
+ const { mode, format } = this.properties;
217
307
  let selectRange = '';
218
308
  switch (mode) {
219
309
  case 'selector': {
220
- selectRange = range.map((item) => item.label);
310
+ if (format !== 'father-son' && format !== 'related' && format !== 'x-enum') {
311
+ selectRange = range.map((item) => item.label);
312
+ }
221
313
  break;
222
314
  }
223
315
  default: {
@@ -230,32 +322,215 @@ Component({
230
322
  });
231
323
  }
232
324
  },
325
+ enumName: function (enumName) {
326
+ if (this.properties.format === 'x-enum' && enumName) {
327
+ this._fetchEnumData();
328
+ }
329
+ },
330
+ where: function (where) {
331
+ const whereEffected = [].concat(getWhereList(where));
332
+ this.setData({ whereEffected });
333
+ const { format, dataSourceName, viewId } = this.properties;
334
+ if ((format === 'father-son' || format === 'related') && dataSourceName && viewId) {
335
+ this._fetchData(whereEffected);
336
+ }
337
+ },
338
+ 'records': function (records) {
339
+ const { primaryField } = this.properties;
340
+ if (records && records.length !== 0 && primaryField) {
341
+ const option = records.map(item => {
342
+ return {
343
+ label: item[primaryField],
344
+ value: item._id,
345
+ name: item[primaryField]
346
+ };
347
+ });
348
+ this.setData({ selectRange: option.map((item) => item.label), option });
349
+ }
350
+ },
233
351
  },
234
352
  methods: {
353
+ // 获取数据列表
354
+ _fetchData: async function (param) {
355
+ const { dataSourceName, viewId } = this.properties;
356
+ let pageNo = 1;
357
+ let pageSize = 200;
358
+ let records = [];
359
+ let total = 99999;
360
+ for (let index = 0; index < Math.floor(total / pageSize) + 1; index++) {
361
+ let data = await callDataSourceApi({
362
+ dataSourceName: dataSourceName,
363
+ viewId: viewId,
364
+ methodName: 'wedaGetRecords',
365
+ params: {
366
+ where: param,
367
+ pageNo: pageNo,
368
+ pageSize: pageSize
369
+ },
370
+ });
371
+ pageNo = pageNo + 1;
372
+ if (data?.records) {
373
+ total = data?.total || 0;
374
+ records = records.concat(data?.records);
375
+ }
376
+
377
+ }
378
+
379
+ if (records) {
380
+ this.setData({ records });
381
+ }
382
+ },
383
+ //获取省
384
+ async getProvince() {
385
+ const { regionType, defaultMutiRegion } = this.properties;
386
+ const changeData = await getRegionTree(defaultMutiRegion || '');
387
+ //限制渲染时change事件触发,否则会有初始数据被覆盖问题
388
+ if (changeData?.result.length > 0) {
389
+ this.triggerEvent('change', changeData);
390
+ }
391
+ var provinceList = [...provinces];
392
+ var provinceArr = provinces.map((item) => { return { value: item.Value, code: item.Code }; }); //保存省级名称
393
+ this.setData({
394
+ multiArray: JSON.parse(JSON.stringify(provinceArr)),
395
+ provinceList,//保存省级原始数据
396
+ provinceArr, //省级所有的名称
397
+ });
398
+ var defaultCode = this.data.provinceList[0].Code; // 使用第一项当作参数获取市级数据
399
+ this.setData({
400
+ currnetProvinceKey: defaultCode // 保存在当前的省级key
401
+ });
402
+ if (regionType != 'levelOne') {
403
+ this.getCity(this.data.provinceList[0]); // 获取市级数据
404
+ }
405
+ },
406
+ getCity(provinceInfo) { // 获取市级数据
407
+ const { regionType } = this.properties;
408
+ const code = provinceInfo.Code;
409
+ this.setData({
410
+ currnetProvinceKey: code // 保存当前选择的市级code
411
+ });
412
+ var cityArr = [];
413
+ var cityList = [];
414
+ cities.forEach((item) => {
415
+ if (item.Code.substr(0, 2) == code.substr(0, 2)) {
416
+ cityArr.push({ value: item.Value, code: item.Code });
417
+ cityList.push(item);
418
+ }
419
+ });
420
+ this.setData({
421
+ cityList, // 保存下市级原始数据
422
+ cityArr // 市级所有的名称
423
+ });
424
+ if (regionType == 'levelTwo') {
425
+ const cityData = [this.data.provinceArr, cityArr];
426
+ this.setData({
427
+ multiArray: JSON.parse(JSON.stringify(cityData)),
428
+ });
429
+ }
430
+ var defaultCode = cityList[0]?.Code;
431
+ this.setData({
432
+ currnetCityKey: defaultCode // 存下当前选择的城市key
433
+ });
434
+ if (regionType == 'levelThree') {
435
+ this.getRegion(cityList[0]);
436
+ }
437
+ },
438
+ getRegion(cityInfo) {
439
+ const code = cityInfo.Code;
440
+ this.setData({
441
+ currnetCityKey: code // 更新当前选择的市级key
442
+ });
443
+ var regionList = [];
444
+ var regionArr = [];
445
+ regions.forEach((item) => {
446
+ if (cityInfo.Type == 1 && cityInfo.CentralCity) {
447
+ if (item.Code.substr(0, 2) == code.substr(0, 2)) {
448
+ regionArr.push({ value: item.Value, code: item.Code });
449
+ regionList.push(item);
450
+ }
451
+ } else {
452
+ if (item.Code.substr(0, 4) == code.substr(0, 4)) {
453
+ regionArr.push({ value: item.Value, code: item.Code });
454
+ regionList.push(item);
455
+ }
456
+ }
457
+ });
458
+ const threeRegion = [this.data.provinceArr, this.data.cityArr, regionArr];
459
+ this.setData({
460
+ multiArray: JSON.parse(JSON.stringify(threeRegion)),
461
+ regionList,
462
+ regionArr
463
+ });
464
+ var defaultCode = regionList[0]?.Code;
465
+ this.setData({
466
+ currnetRegionKey: defaultCode // 存下当前选择的城市key
467
+ });
468
+ },
469
+ columnchange(e) { // 滚动选择器 触发的事件
470
+ const { regionType } = this.properties;
471
+ var column = e.detail.column; // 当前改变的列
472
+ var data = {
473
+ multiIndex: JSON.parse(JSON.stringify(this.data.multiIndex)),
474
+ multiArray: JSON.parse(JSON.stringify(this.data.multiArray))
475
+ };
476
+ data.multiIndex[column] = e.detail.value; // 第几列改变了就是对应multiIndex的第几个,更新它
477
+ switch (column) { // 处理不同的逻辑
478
+ case 0: // 第一列更改 就是省级的更改
479
+ if (regionType != 'levelOne')
480
+ this.getCity(this.data.provinceList[e.detail.value]); // 获取当前key下面的市级数据
481
+ data.multiIndex[1] = 0; // 将市默认选择第一个
482
+ break;
483
+ case 1: // 市发生变化
484
+ this.getRegion(this.data.cityList[e.detail.value]); // 获取区
485
+ // }
486
+ data.multiIndex[2] = 0; // 区默认为第一个
487
+ break;
488
+ }
489
+ },
490
+ // 获取通用选项集列表
491
+ _fetchEnumData: async function () {
492
+ let data = await callWedaApi({
493
+ action: 'DescribeGeneralOptionsDetailList',
494
+ data: { OptNameList: [this.properties.enumName], PageIndex: 1, PageSize: 10 },
495
+ });
496
+ const config = destr(data?.Items?.[0]?.Config) ?? [];
497
+ const option = config.map(item => {
498
+ return {
499
+ label: item.value,
500
+ value: item.key,
501
+ name: item.value
502
+ };
503
+ });
504
+ this.setData({ selectRange: option.map((item) => item.label), option });
505
+ },
506
+
235
507
  onChange(e) {
236
- const { range, mode, separator, placeholder } = this.properties;
508
+ const { range, mode, separator, placeholder, regionType, dateMode, format, option } = this.properties;
237
509
  let displayValue;
238
510
  switch (mode) {
239
511
  case 'selector': {
240
- this.triggerEvent('change', range[e.detail.value]);
241
- displayValue = range[e.detail.value].label;
512
+ if (format !== 'father-son' && format !== 'related' && format !== 'x-enum') {
513
+ this.triggerEvent('change', range[e.detail.value]);
514
+ displayValue = range[e.detail.value].label;
515
+ } else {
516
+ this.triggerEvent('change', option[e.detail.value]);
517
+ displayValue = option[e.detail.value].label;
518
+ }
242
519
  break;
243
520
  }
244
521
  case 'date':
245
522
  case 'time': {
246
523
  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
- });
524
+ let day, timeSnap;
525
+ if (mode === 'date') {
526
+ const dateValue = this._coverDateModeValue(value, dateMode);
527
+ day = this.converDate2Dayjs(dateValue);
528
+ timeSnap = day.valueOf();
529
+ } else {
530
+ day = this.converTime2Dayjs(value);
531
+ timeSnap = (day.hour() * 60 * 60 + day.minute() * 60) * 1000;
532
+ }
533
+ this.triggerEvent('change', { value: timeSnap });
259
534
  displayValue = e.detail.value;
260
535
  break;
261
536
  }
@@ -264,6 +539,16 @@ Component({
264
539
  displayValue = e.detail.value.join(separator);
265
540
  break;
266
541
  }
542
+ case 'mutiRegion': {
543
+ this.setData({
544
+ step: 1,
545
+ multiIndex: e.detail.value // 更新下标字段
546
+ });
547
+ const value = buildDisplayValue(this.data.multiArray, this.data.multiIndex, regionType);
548
+ displayValue = value?.value;
549
+ this.triggerEvent('change', value);
550
+ break;
551
+ }
267
552
  default: {
268
553
  break;
269
554
  }
@@ -298,11 +583,36 @@ Component({
298
583
  return dayjs(time);
299
584
  }
300
585
  },
301
- converDate2Dayjs(date) {
302
- if (typeof date === 'string' && /^-?[0-9]*$/.test(date)) {
303
- return dayjs(Number(date));
586
+ converDate2Dayjs(d) {
587
+ if (typeof d === 'string' && /^-?[0-9]*$/.test(d)) {
588
+ return dayjs(Number(d));
589
+ }
590
+ return dayjs(d);
591
+ },
592
+ // 将原始 number 类型值转成 YYYY-MM-DD 格式
593
+ _coverNumber2Date(d, dateMode = 'day', isDisplay = false) {
594
+ const day = d && this.converDate2Dayjs(d);
595
+ if (!day) return undefined;
596
+ let dayStr;
597
+ if (dateMode === 'year') {
598
+ dayStr = day.format('YYYY') + (isDisplay ? '' : '-01-01');
599
+ } else if (dateMode === 'month') {
600
+ dayStr = day.format('YYYY-MM') + (isDisplay ? '' : '-01');
601
+ } else {
602
+ dayStr = day.format('YYYY-MM-DD');
603
+ }
604
+ return dayStr;
605
+ },
606
+ // 将组件 onChange 返回的值,根据年/月/日模式,补齐返回 YYYY-MM-DD 格式
607
+ _coverDateModeValue(d, dateMode = 'day') {
608
+ if (dateMode === 'year' && /^\d{4}$/.test(d)) {
609
+ return `${d}-01-01`;
610
+ } else if (dateMode === 'month' && /^\d{4}-\d{2}$/.test(d)) {
611
+ return `${d}-01`;
612
+ } else {
613
+ return d;
304
614
  }
305
- return dayjs(date);
306
615
  },
616
+
307
617
  },
308
618
  });