@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,40 +1,131 @@
1
- // 暂时把地区信息打包在本地, 后续移到COS桶内
2
- import {provinces} from './provinces';
3
- import {cities} from './cities';
4
- import {regions} from './regions';
5
1
  import weui from '../../../../utils/weui';
2
+ import { callWedaApi } from '../../../../utils/tcb';
6
3
 
7
4
  let tree;
8
5
 
9
- export function getRegionTree() {
10
- if (!tree) {
11
- tree = provinces.map((province) => {
12
- return {
13
- label: province.name,
14
- value: province.name,
15
- children: cities
16
- .filter((city) => city.parent_code === province.code)
17
- .map((city) => {
18
- return {
19
- label: city.name,
20
- value: city.name,
21
- children: regions
22
- .filter((region) => region.parent_code === city.code)
23
- .map((region) => {
24
- return {
25
- label: region.name,
26
- value: region.name,
27
- };
28
- }),
29
- };
30
- }),
31
- };
6
+ export async function getRegionTree(regionData,regionType,regionMode) {
7
+ tree = [];
8
+ tree = formatTreeData(regionData,regionType,regionMode);
9
+ return tree;
10
+ }
11
+
12
+ export function regionPicker(options,regionTree:any[]) {
13
+ const weRegionTree =regionTree.length==0?[{label:'地区数据加载中,请关闭弹窗后重试',value:null,children:null}]:regionTree;
14
+ weui.picker(weRegionTree, options);
15
+ }
16
+ /**
17
+ * 获取运行态地区数据
18
+ */
19
+ export async function getAreaCode() {
20
+ try {
21
+ const res = await callWedaApi({
22
+ action: 'QueryRuntimeAreaCode',
23
+ data: {Mask: "11100"},
32
24
  });
25
+ return res?.AreaCodeList;
26
+ } catch (error) {
27
+ console.error('错误', error);
28
+ return {};
33
29
  }
34
-
35
- return tree;
36
30
  }
31
+ /**
32
+ * 构建树形结构
33
+ */
34
+ function formatTreeData(arr,regionType,regionMode) {
35
+ let provicesData = [];
36
+ arr.forEach(item=>{
37
+ //省数据集合
38
+ if(item?.Type==1&&item?.Deprecated==false){
39
+ provicesData.push({
40
+ label: item.Value,
41
+ value: item.Value,
42
+ code:item.Code,
43
+ type:item.Type,
44
+ centralCity:item.CentralCity,
45
+ children: regionType!= 'levelOne'||regionMode=='region'?[{
46
+ label: item.Value,
47
+ value: item.Value,
48
+ code:item.Code,
49
+ type:item.Type,
50
+ children: regionType!= 'levelTwo'||regionMode=='region'?[{
51
+ label: item.Value,
52
+ value: item.Value,
53
+ code:item.Code,
54
+ type:item.Type,
55
+ centralCity:item.CentralCity,
56
+ }]:null
57
+ }]:null
58
+ });
59
+ }
60
+ });
61
+ if(regionType!= 'levelOne'||regionMode=='region'){
62
+ arr.forEach(item=>{
63
+ //市数据集合
64
+ if(item?.Type==2&&item?.Deprecated==false){
65
+ provicesData.map(provice=>{
66
+ if(provice.code.substr(0, 2) == item.Code.substr(0,2)){
67
+ if(provice['children'][0].type==1){
68
+ provice['children']=[];
69
+ }
70
+ provice['children'].push({
71
+ label: item.Value,
72
+ value: item.Value,
73
+ code:item.Code,
74
+ type:item.Type,
75
+ centralCity:item.CentralCity,
76
+ children: regionType!= 'levelTwo'||regionMode=='region'?[{
77
+ label: item.Value,
78
+ value: item.Value,
79
+ code:item.Code,
80
+ type:item.Type,
81
+ centralCity:item.CentralCity,
82
+ }]:null
83
+ });
37
84
 
38
- export function regionPicker(options) {
39
- weui.picker(getRegionTree(), options);
85
+ }
86
+ });
87
+ }
88
+ });
89
+ if(regionType != 'levelTwo'||regionMode=='region'){
90
+ arr.forEach(item=>{
91
+ //区数据集合
92
+ if(item?.Type==3&&item?.Deprecated==false){
93
+ provicesData.map(provice=>{
94
+ if(provice.centralCity){
95
+ provice.children.map(city=>{
96
+ if(city.code.substr(0, 2) == item.Code.substr(0,2)){
97
+ if(city['children'][0].type==1){
98
+ city['children']=[];
99
+ }
100
+ city['children'].push({
101
+ label: item.Value,
102
+ value: item.Value,
103
+ code:item.Code,
104
+ //type:item.Type
105
+ });
106
+
107
+ }});
108
+ }else{
109
+ provice.children.map(city=>{
110
+ if(city.code.substr(0, 4) == item.Code.substr(0,4)){
111
+ if(city['children'][0].type==2){
112
+ city['children']=[];
113
+ }
114
+ city['children'].push({
115
+ label: item.Value,
116
+ value: item.Value,
117
+ code:item.Code,
118
+ //type:item.Type
119
+ });
120
+
121
+ }});
122
+ }
123
+
124
+ });
125
+ }
126
+ });
127
+ }
128
+
129
+ }
130
+ return provicesData;
40
131
  }
@@ -54,3 +54,92 @@ export function timePicker(options) {
54
54
  defaultValue,
55
55
  });
56
56
  }
57
+
58
+ /**
59
+ * 年选择器
60
+ */
61
+ export function yearPicker(options) {
62
+ const { startDate, endDate, defaultDate } = options;
63
+ if (startDate > endDate) {
64
+ throw 'startDate is bigger then endDate';
65
+ }
66
+ // 当前年
67
+ const currentYear = new Date().getFullYear();
68
+ // 默认传入年
69
+ const defaultYear = defaultDate
70
+ ? new Date(defaultDate).getFullYear()
71
+ : currentYear;
72
+ // 最小年份
73
+ const minYear = startDate
74
+ ? new Date(startDate).getFullYear()
75
+ : currentYear - 100;
76
+ // 最大年份
77
+ const maxYear = endDate ? new Date(endDate).getFullYear() : currentYear + 100;
78
+ const years = Array.from({ length: maxYear - minYear + 1 }).map(
79
+ (item, index) => ({
80
+ label: `${minYear + index}年`,
81
+ value: minYear + index,
82
+ })
83
+ );
84
+ weui.picker(years, {
85
+ ...options,
86
+ defaultValue: [defaultYear],
87
+ });
88
+ }
89
+
90
+ /**
91
+ * 年月选择器
92
+ */
93
+ export function monthPicker(options) {
94
+ const { startDate, endDate, defaultDate } = options;
95
+ if (startDate > endDate) {
96
+ throw 'startDate is bigger then endDate';
97
+ }
98
+ const _getYear = (d) => d.getFullYear();
99
+ const _getMonth = (d) => d.getMonth() + 1;
100
+ // 当前年月
101
+ const now = new Date();
102
+ const [currentYear, currentMonth] = [_getYear(now), _getMonth(now)];
103
+ // 默认传入年月
104
+ const def = defaultDate ? new Date(defaultDate) : now;
105
+ const [defaultYear, defaultMonth] = [_getYear(def), _getMonth(def)];
106
+ // 最小年月
107
+ const min = startDate && new Date(startDate);
108
+ const [minYear, minMonth] = [
109
+ min ? _getYear(min) : currentYear - 100,
110
+ min ? _getMonth(min) : 1,
111
+ ];
112
+ // 最大年月
113
+ const max = endDate && new Date(endDate);
114
+ const [maxYear, maxMonth] = [
115
+ max ? _getYear(max) : currentYear + 100,
116
+ max ? _getMonth(max) : 12,
117
+ ];
118
+ // 年份月份
119
+ const years = Array.from({ length: maxYear - minYear + 1 }).map((item, i) => {
120
+ const year = i + minYear;
121
+ let months = [];
122
+ let [minMonthWithYear, maxMonthWithYear] = [1, 12];
123
+ if (year === minYear) {
124
+ minMonthWithYear = Math.max(minMonth, 1);
125
+ }
126
+ if (year === maxYear) {
127
+ maxMonthWithYear = Math.min(maxMonth, 12);
128
+ }
129
+ months = Array.from({
130
+ length: maxMonthWithYear - minMonthWithYear + 1,
131
+ }).map((item, i) => ({
132
+ label: `${i + minMonthWithYear}月`,
133
+ value: i + minMonthWithYear,
134
+ }));
135
+ return {
136
+ label: `${i + minYear}年`,
137
+ value: i + minYear,
138
+ children: months,
139
+ };
140
+ });
141
+ weui.picker(years, {
142
+ ...options,
143
+ defaultValue: [defaultYear, defaultMonth],
144
+ });
145
+ }
@@ -0,0 +1,170 @@
1
+ import * as React from 'react';
2
+ import {
3
+ Popover,
4
+ ConfigProvider,
5
+ useConfig,
6
+ Input,
7
+ Icon,
8
+ Button,
9
+ } from 'tea-component';
10
+ import classNames from '../../../utils/classnames';
11
+ import { moment } from './index';
12
+ import './index.css';
13
+
14
+ /**
15
+ * pc 版简易年份选择器
16
+ * 传参与 DatePicker 保持一致
17
+ */
18
+ export default function YearPicker(props) {
19
+ const {
20
+ range = [],
21
+ disabled,
22
+ value,
23
+ onChange,
24
+ className,
25
+ placeholder,
26
+ ...rest
27
+ } = props;
28
+ const { classPrefix } = useConfig();
29
+ const inputRef = React.useRef(null);
30
+ const [show, setShow] = React.useState(false);
31
+ const [page, setPage] = React.useState(0);
32
+ const [inputValue, setInputValue] = React.useState(transValueToYear(value));
33
+ const { pageYears, pageStart, pageEnd } = getYears(inputValue, page);
34
+ const [min, max] = [
35
+ transValueToYear(range?.[0]),
36
+ transValueToYear(range?.[1]),
37
+ ];
38
+
39
+ React.useEffect(() => {
40
+ setInputValue(transValueToYear(value));
41
+ }, [value]);
42
+
43
+ return (
44
+ <ConfigProvider classPrefix="wedatea2td">
45
+ <Popover
46
+ trigger="click"
47
+ visible={show}
48
+ onVisibleChange={(v) => !v && setShow(v)}
49
+ overlay={
50
+ <div
51
+ className={classNames(
52
+ `${classPrefix}-dropdown-box`,
53
+ 'year-picker__overlay'
54
+ )}
55
+ >
56
+ <div
57
+ className={classNames(
58
+ `${classPrefix}-calendar__caption`,
59
+ 'year-picker__header'
60
+ )}
61
+ >
62
+ <div className="year-picker__header-title">
63
+ {pageStart}-{pageEnd}
64
+ </div>
65
+ <div className="year-picker__header-actions">
66
+ <Button
67
+ type="link"
68
+ icon="arrowleft"
69
+ title="上二十年"
70
+ onClick={() => setPage((d) => d - 1)}
71
+ />
72
+ <Button
73
+ type="link"
74
+ icon="cur-active"
75
+ title="当前二十年"
76
+ onClick={() => setPage(0)}
77
+ />
78
+ <Button
79
+ type="link"
80
+ icon="arrowright"
81
+ title="下二十年"
82
+ onClick={() => setPage((d) => d + 1)}
83
+ />
84
+ </div>
85
+ </div>
86
+ <div
87
+ className={classNames(
88
+ `${classPrefix}-calendar__type--year`,
89
+ 'year-picker__body'
90
+ )}
91
+ >
92
+ {pageYears.map((list) => (
93
+ <div
94
+ key={list.join()}
95
+ className={classNames(`${classPrefix}-calendar__row`)}
96
+ >
97
+ {list.map((item) => {
98
+ const isSelected = item === inputValue;
99
+ const isDisabled =
100
+ (min && Number(item) < Number(min)) ||
101
+ (max && Number(item) > Number(max));
102
+ return (
103
+ <div
104
+ key={item}
105
+ className={classNames(
106
+ `${classPrefix}-calendar__cell`,
107
+ 'year-picker__cell',
108
+ {
109
+ 'is-selected': isSelected,
110
+ 'is-disabled': isDisabled,
111
+ }
112
+ )}
113
+ onClick={() => {
114
+ if (isDisabled) return;
115
+ setShow(false);
116
+ setInputValue(item);
117
+ onChange?.(moment(item));
118
+ }}
119
+ >
120
+ <span>{item}</span>
121
+ </div>
122
+ );
123
+ })}
124
+ </div>
125
+ ))}
126
+ </div>
127
+ </div>
128
+ }
129
+ >
130
+ <div
131
+ // eslint-disable-next-line react/jsx-props-no-spreading
132
+ {...rest}
133
+ onClick={() => !disabled && setShow(true)}
134
+ className={classNames(`${classPrefix}-datepicker`, className)}
135
+ >
136
+ <div className={classNames(`${classPrefix}-datepicker__input`)}>
137
+ <Input
138
+ ref={inputRef}
139
+ disabled={disabled}
140
+ placeholder={placeholder}
141
+ value={inputValue}
142
+ onFocus={() => inputRef.current.blur()}
143
+ />
144
+ <Icon type="dismiss" />
145
+ </div>
146
+ </div>
147
+ </Popover>
148
+ </ConfigProvider>
149
+ );
150
+ }
151
+
152
+ /**
153
+ * 获取当前20年,page 表示分页,1表示下一页,-1表示上一页
154
+ * @returns [][]
155
+ */
156
+ const getYears = (currentYear, page = 0, range = []) => {
157
+ currentYear = currentYear || new Date().getFullYear();
158
+ const startYear = (Math.floor(parseInt(currentYear) / 20) + page) * 20;
159
+ const pageYears = Array.from({ length: 5 }).map((item, i1) =>
160
+ Array.from({ length: 4 }).map((item, i2) => i1 * 4 + i2 + startYear + '')
161
+ );
162
+ return { pageYears, pageStart: startYear, pageEnd: startYear + 20 - 1 };
163
+ };
164
+
165
+ /**
166
+ * 输入 moment 值转 string 年份
167
+ */
168
+ const transValueToYear = (val) => {
169
+ return moment.isMoment(val) ? val.format('YYYY') : '';
170
+ };
@@ -1,3 +1,7 @@
1
1
  .weda-textarea textarea {
2
2
  height: 8.6rem;
3
3
  }
4
+
5
+ .weda-ui .weda-textarea .weui-cell_form {
6
+ padding: 16px;
7
+ }
@@ -45,7 +45,7 @@ export default function Textarea({
45
45
  // 两次默认值不同时, 需要刷新value
46
46
  const [value, setValue] = useSyncValue(defaultValue);
47
47
  const counter = React.useMemo(() => (value?.length || 0), [value]);
48
-
48
+
49
49
  const onChange = function (e) {
50
50
  const text = typeof e === 'string' ? e : e.target.value;
51
51
  setValue(text);
@@ -111,4 +111,4 @@ export interface PropsType extends CommonFormPropsType {
111
111
  focus?: boolean;
112
112
  counterVisible?: boolean;
113
113
  size?: 's' | 'm' | 'l' | 'full';
114
- }
114
+ }
@@ -0,0 +1,4 @@
1
+ .weda-form .weui-cells__tips_warn {
2
+ color: #fa5151;
3
+ color: var(--weui-RED);
4
+ }
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
 
3
3
  import classNames from '../../../utils/classnames';
4
4
  import { CommonPropsType } from '../../../types';
5
+ import './index.css';
5
6
 
6
7
  export default function Tips({
7
8
  // 系统属性
@@ -10,7 +11,7 @@ export default function Tips({
10
11
  tips = '表单提示',
11
12
  type = 'normal',
12
13
  id,
13
- style
14
+ style,
14
15
  }: PropsType) {
15
16
  const cls = classNames({
16
17
  'weda-ui': true,
@@ -21,7 +22,7 @@ export default function Tips({
21
22
  });
22
23
 
23
24
  return (
24
- <div className={cls} id={id} style={style} >
25
+ <div className={cls} id={id} style={style}>
25
26
  {tips}
26
27
  </div>
27
28
  );
@@ -30,4 +31,4 @@ export default function Tips({
30
31
  export interface PropsType extends CommonPropsType {
31
32
  tips?: string;
32
33
  type?: 'warn' | 'normal';
33
- }
34
+ }
@@ -79,6 +79,30 @@
79
79
  display: flex;
80
80
  justify-content: space-between;
81
81
  }
82
- .weui-uploader.horizontal .weui-uploader__bd {
83
- padding-left: 2.28571rem;
82
+
83
+ .weui-uploader.horizontal .weda-formcells__label {
84
+ width: 130px;
85
+ }
86
+
87
+ .weda-ui .weui-uploader__hd {
88
+ display: block;
89
+ }
90
+
91
+ .weui-uploader__label {
92
+ display: flex;
93
+ flex: 1;
94
+ }
95
+ .weui-uploader.vertical .weui-uploader__title {
96
+ flex: unset;
97
+ }
98
+
99
+ .weda-ui .weui-uploader.horizontal .weui-uploader__bd {
100
+ padding: 16px 0;
101
+ }
102
+ .weda-ui .weui-uploader.vertical .weui-uploader__bd {
103
+ padding: 16px;
104
+ }
105
+
106
+ .weui-uploader__hd.vertical {
107
+ padding-bottom: 0;
84
108
  }
@@ -106,6 +106,7 @@ export function ImageUploaderH5({
106
106
  fileID && setInputValue((list) => [...list, fileID]);
107
107
  fileID && events.success && events.success({ value: fileID, file });
108
108
  } catch (err) {
109
+ weui.alert(`${err}` || '上传失败');
109
110
  events.error && events.error(err);
110
111
  } finally {
111
112
  setUploading(false);
@@ -120,68 +121,64 @@ export function ImageUploaderH5({
120
121
  : Array.from(new Set(acceptTypes));
121
122
  }, [acceptTypes]);
122
123
 
124
+ const showAdd = React.useMemo(() => {
125
+ if(single) {
126
+ // single 模式时,仅当数组为空时显示
127
+ return fileIdList.length < 1;
128
+ }
129
+ return fileIdList.length < maxUploadCount;
130
+ }, [fileIdList, single, maxUploadCount]);
123
131
  return (
124
132
  <div className={cls} id={id} style={style}>
125
- <div className="weui-cell">
126
- <div className="weui-cell__bd">
127
- <div className={classNames('weui-uploader', layout)}>
128
- <div className={classNames('weui-uploader__hd', layout)}>
129
- {requiredFlag && (
130
- <label className="weda-formcells__flag">*</label>
131
- )}
132
- <p className="weui-uploader__title">{title}</p>
133
- <div className="weui-uploader__info">
134
- <span id="uploadCount">{fileIdList.length}</span>
135
- {`/${finalMaxImgCount}`}
136
- </div>
137
- </div>
138
- <div className="weui-uploader__bd">
139
- <ul className="weui-uploader__files" id="uploaderFiles">
140
- {(fileIdList ?? []).map((f) => (
141
- <SingleImage key={f} src={f} deleteBySrc={deleteFile} />
142
- ))}
143
- {uploading && (
144
- <li className="weui-uploader__file weui-uploader__file_status">
145
- <div className="weui-uploader__file-content">
146
- {progress}%
147
- </div>
148
- </li>
149
- )}
150
- </ul>
151
- {(fileIdList.length < maxUploadCount ||
152
- (single && fileIdList.length < 1)) && ( // single 模式时,仅当数组为空时显示
153
- <div className="weui-uploader__input-box">
154
- <input
155
- id="uploaderInput"
156
- className="weui-uploader__input"
157
- type="file"
158
- accept={accepts.join(',')}
159
- multiple
160
- onChange={(e) => {
161
- const files = [...e.target.files];
162
- if (files.some((f) => f.size > maxSize * 1024 * 1024)) {
163
- weui.alert('请上传不超过10M的图片');
164
- return false;
165
- }
133
+ <div className={classNames('weui-uploader', layout)}>
134
+ <div className={classNames('weui-uploader__hd', layout)}>
135
+ <UploaderLabel layout={layout} title={title} currentCount={fileIdList.length} maxCount={finalMaxImgCount} requiredFlag={requiredFlag} />
136
+ </div>
166
137
 
167
- if (files.length > finalMaxImgCount) {
168
- // 防止一下子选择过多文件
169
- weui.alert(
170
- `最多只能上传${finalMaxImgCount}张图片,请重新选择`
171
- );
172
- return false;
173
- }
174
- if (fileIdList.length + files.length > finalMaxImgCount) {
175
- weui.alert(`最多只能上传${finalMaxImgCount}张图片`);
176
- return false;
177
- }
178
- files.forEach((f) => uploadToTcb(f));
179
- }}
180
- />
138
+ <div className="weui-uploader__bd">
139
+ <ul className="weui-uploader__files" id="uploaderFiles">
140
+ {(fileIdList ?? []).map((f) => (
141
+ <SingleImage key={f} src={f} deleteBySrc={deleteFile} />
142
+ ))}
143
+ {uploading && (
144
+ <li className="weui-uploader__file weui-uploader__file_status">
145
+ <div className="weui-uploader__file-content">
146
+ {progress}%
181
147
  </div>
182
- )}
148
+ </li>
149
+ )}
150
+ </ul>
151
+ {showAdd && (
152
+ <div className="weui-uploader__input-box">
153
+ <input
154
+ id="uploaderInput"
155
+ className="weui-uploader__input"
156
+ type="file"
157
+ accept={accepts.join(',')}
158
+ multiple
159
+ onChange={(e) => {
160
+ const files = [...e.target.files];
161
+ if (files.some((f) => f.size > maxSize * 1024 * 1024)) {
162
+ weui.alert('请上传不超过10M的图片');
163
+ return false;
164
+ }
165
+
166
+ if (files.length > finalMaxImgCount) {
167
+ // 防止一下子选择过多文件
168
+ weui.alert(
169
+ `最多只能上传${finalMaxImgCount}张图片,请重新选择`
170
+ );
171
+ return false;
172
+ }
173
+ if (fileIdList.length + files.length > finalMaxImgCount) {
174
+ weui.alert(`最多只能上传${finalMaxImgCount}张图片`);
175
+ return false;
176
+ }
177
+ files.forEach((f) => uploadToTcb(f));
178
+ }}
179
+ />
183
180
  </div>
184
- </div>
181
+ )}
185
182
  </div>
186
183
  </div>
187
184
  </div>
@@ -253,3 +250,38 @@ export interface H5UploaderProps extends CommonFormPropsType {
253
250
  single?: boolean; // 单张上传还是多张上传,对应 onChange 参数为字符串还是字符串数组,value 在处理过程统一转为字符串数组;
254
251
  onChange?: (v: any) => void;
255
252
  }
253
+
254
+ const UploaderLabel = ({layout, title, currentCount, maxCount, requiredFlag}) => {
255
+ if(layout === 'horizontal') {
256
+ return (
257
+ <React.Fragment>
258
+ <div className='weda-formcells__label weui-cell'>
259
+ <div>
260
+ <p className="weui-uploader__title">{title}</p>
261
+ <div className="weui-uploader__info">
262
+ <span id="uploadCount">{currentCount}</span>
263
+ {`/${maxCount}`}
264
+ </div>
265
+ </div>
266
+ {requiredFlag && (
267
+ <label className="weda-formcells__flag">*</label>
268
+ )}
269
+ </div>
270
+ </React.Fragment>
271
+ )
272
+ }
273
+ return (
274
+ <div className='weda-formcells__label weui-cell'>
275
+ <div className='weui-uploader__label'>
276
+ <p className="weui-uploader__title">{title}</p>
277
+ {requiredFlag && (
278
+ <label className="weda-formcells__flag">*</label>
279
+ )}
280
+ </div>
281
+ <div className="weui-uploader__info">
282
+ <span id="uploadCount">{currentCount}</span>
283
+ {`/${maxCount}`}
284
+ </div>
285
+ </div>
286
+ )
287
+ }