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