@cloudbase/weda-ui 0.2.11 → 0.2.15

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 (322) hide show
  1. package/CHANGELOG.md +240 -0
  2. package/README.md +7 -2
  3. package/package.json +85 -42
  4. package/src/.DS_Store +0 -0
  5. package/src/configs/.DS_Store +0 -0
  6. package/src/configs/components/button.json +7 -3
  7. package/src/configs/components/form/richText.json +1 -1
  8. package/src/configs/components/form/uploader.json +29 -1
  9. package/src/configs/components/form/uploaderFile.json +158 -0
  10. package/src/configs/components/image.json +16 -3
  11. package/src/configs/components/link.json +3 -3
  12. package/src/configs/components/richtextview.json +2 -2
  13. package/src/configs/components/scrollVeiw.json +5 -5
  14. package/src/configs/components/swiper.json +6 -6
  15. package/src/configs/components/tabs.json +3 -3
  16. package/src/configs/components/text.json +39 -4
  17. package/src/configs/index.js +5 -3
  18. package/src/mp/.gitignore +10 -0
  19. package/src/mp/components/button/index.js +1 -0
  20. package/src/mp/components/button/index.wxss +8 -0
  21. package/src/mp/components/container/index.js +4 -0
  22. package/src/mp/components/form/select/index.js +18 -0
  23. package/src/mp/components/form/uploader/index.js +26 -29
  24. package/src/mp/components/form/uploaderFile/index.js +233 -0
  25. package/src/mp/components/form/uploaderFile/index.json +9 -0
  26. package/src/mp/components/form/uploaderFile/index.wxml +46 -0
  27. package/src/mp/components/form/uploaderFile/index.wxss +105 -0
  28. package/src/mp/components/image/index.js +54 -52
  29. package/src/mp/components/text/index.js +33 -0
  30. package/src/mp/components/text/index.wxml +1 -1
  31. package/src/mp/components/text/index.wxss +18 -0
  32. package/src/mp/index.json +1 -0
  33. package/src/mp/utils/platform.js +20 -0
  34. package/src/mp/utils/tcb.js +11 -0
  35. package/src/web/.DS_Store +0 -0
  36. package/src/web/actions/showModal/{index.jsx → index.tsx} +53 -3
  37. package/src/web/components/auth/index.js +2 -2
  38. package/src/web/components/button/index.css +9 -0
  39. package/src/web/components/button/{index.jsx → index.tsx} +27 -41
  40. package/src/web/components/container/{index.jsx → index.tsx} +6 -10
  41. package/src/web/components/drawer/index.tsx +57 -0
  42. package/src/web/components/form/checkbox/{index.jsx → index.tsx} +24 -48
  43. package/src/web/components/form/enumSelect/{NormalSelect.jsx → NormalSelect.tsx} +2 -9
  44. package/src/web/components/form/form/index.tsx +48 -0
  45. package/src/web/components/form/formcell/{index.jsx → index.tsx} +6 -13
  46. package/src/web/components/form/input/index.css +41 -0
  47. package/src/web/components/form/input/{index.jsx → index.tsx} +34 -67
  48. package/src/web/components/form/radio/{index.jsx → index.tsx} +19 -42
  49. package/src/web/components/form/{renderDecorator.jsx → renderDecorator.tsx} +1 -3
  50. package/src/web/components/form/select/{h5.jsx → h5.tsx} +18 -62
  51. package/src/web/components/form/select/{index.jsx → index.tsx} +51 -94
  52. package/src/web/components/form/select/region/{cities.js → cities.ts} +1 -1
  53. package/src/web/components/form/select/region/{index.js → index.ts} +3 -3
  54. package/src/web/components/form/select/region/{provinces.js → provinces.ts} +1 -1
  55. package/src/web/components/form/select/region/{regions.js → regions.ts} +1 -1
  56. package/src/web/components/form/select/time.jsx +2 -2
  57. package/src/web/components/form/switch/{index.jsx → index.tsx} +30 -47
  58. package/src/web/components/form/textarea/{index.jsx → index.tsx} +22 -55
  59. package/src/web/components/form/tips/{index.jsx → index.tsx} +8 -22
  60. package/src/web/components/form/types.d.ts +12 -0
  61. package/src/web/components/form/uploader/{index.jsx → index.tsx} +16 -14
  62. package/src/web/components/form/uploader/{uploader.h5.jsx → uploader.h5.tsx} +67 -57
  63. package/src/web/components/form/uploader/{uploader.pc.jsx → uploader.pc.tsx} +26 -43
  64. package/src/web/components/form/uploaderFile/fail.svg +12 -0
  65. package/src/web/components/form/uploaderFile/index.css +423 -0
  66. package/src/web/components/form/uploaderFile/index.jsx +30 -0
  67. package/src/web/components/form/uploaderFile/pending.svg +18 -0
  68. package/src/web/components/form/uploaderFile/success.svg +12 -0
  69. package/src/web/components/form/uploaderFile/uploadFile.h5.tsx +578 -0
  70. package/src/web/components/form/uploaderFile/uploadFile.pc.tsx +507 -0
  71. package/src/web/components/image/image.tsx +188 -0
  72. package/src/web/components/image/{index.jsx → index.tsx} +22 -37
  73. package/src/web/components/index.js +37 -2
  74. package/src/web/components/link/{index.jsx → index.tsx} +19 -36
  75. package/src/web/components/modal/{index.jsx → index.tsx} +22 -9
  76. package/src/web/components/picker/{datePicker.jsx → datePicker.tsx} +11 -12
  77. package/src/web/components/picker/{picker.jsx → picker.tsx} +7 -10
  78. package/src/web/components/picker/{timePicker.jsx → timePicker.tsx} +8 -16
  79. package/src/web/components/richText/{const.js → const.ts} +0 -0
  80. package/src/web/components/richText/index.jsx +5 -2
  81. package/src/web/components/richTextView/index.tsx +67 -0
  82. package/src/web/components/scrollView/{index.jsx → index.tsx} +18 -33
  83. package/src/web/components/slot/{index.jsx → index.tsx} +8 -9
  84. package/src/web/components/swiper/index.css +5 -1
  85. package/src/web/components/swiper/{index.jsx → index.tsx} +79 -79
  86. package/src/web/components/tabs/index.tsx +33 -0
  87. package/src/web/components/tabs/{tabs.h5.jsx → tabs.h5.tsx} +4 -33
  88. package/src/web/components/tabs/{tabs.pc.jsx → tabs.pc.tsx} +5 -39
  89. package/src/web/components/text/index.css +18 -0
  90. package/src/web/components/text/index.tsx +69 -0
  91. package/src/web/components/uploaderFileView/index.css +11 -0
  92. package/src/web/components/uploaderFileView/index.jsx +75 -0
  93. package/src/web/components/uploaderView/{index.jsx → index.tsx} +12 -15
  94. package/src/web/types.d.ts +20 -0
  95. package/src/web/utils/constant.js +2 -0
  96. package/src/web/utils/loading-fallback.tsx +2 -0
  97. package/src/web/utils/platform.js +77 -6
  98. package/src/web/utils/useSetState.ts +14 -0
  99. package/src/web/utils/useSyncValue.ts +17 -0
  100. package/src/configs/components/button.svg +0 -18
  101. package/src/web/components/drawer/index.jsx +0 -64
  102. package/src/web/components/form/form/index.jsx +0 -76
  103. package/src/web/components/image/image.jsx +0 -187
  104. package/src/web/components/link/test/__snapshots__/storybook.test.js.snap +0 -754
  105. package/src/web/components/richTextView/index.jsx +0 -89
  106. package/src/web/components/tabs/index.jsx +0 -10
  107. package/src/web/components/text/index.jsx +0 -71
  108. package/src/web/utils/useSyncValue.js +0 -14
  109. package/src/web/wedatheme/.code.yml +0 -16
  110. package/src/web/wedatheme/.editorconfig +0 -9
  111. package/src/web/wedatheme/.eslintrc +0 -20
  112. package/src/web/wedatheme/.orange-ci.yml +0 -55
  113. package/src/web/wedatheme/.vscode/extensions.json +0 -3
  114. package/src/web/wedatheme/.vscode/settings.json +0 -11
  115. package/src/web/wedatheme/README.md +0 -50
  116. package/src/web/wedatheme/i18n/README.md +0 -4
  117. package/src/web/wedatheme/i18n/translation/index.js +0 -10
  118. package/src/web/wedatheme/i18n/translation/zh.js +0 -15
  119. package/src/web/wedatheme/jsconfig.json +0 -15
  120. package/src/web/wedatheme/mock/app.js +0 -42
  121. package/src/web/wedatheme/mock/history-context.js +0 -8
  122. package/src/web/wedatheme/mock/index.js +0 -3
  123. package/src/web/wedatheme/mock/layout/AppLayout.jsx +0 -28
  124. package/src/web/wedatheme/mock/layout/MenuWithRouter.jsx +0 -50
  125. package/src/web/wedatheme/mock/layout/index.js +0 -1
  126. package/src/web/wedatheme/package.json +0 -61
  127. package/src/web/wedatheme/public/index.html +0 -19
  128. package/src/web/wedatheme/src/app.js +0 -22
  129. package/src/web/wedatheme/src/components/README.md +0 -4
  130. package/src/web/wedatheme/src/configs/menu.js +0 -9
  131. package/src/web/wedatheme/src/routes/wedatheme-index/Component.jsx +0 -402
  132. package/src/web/wedatheme/src/routes/wedatheme-index/Form.jsx +0 -729
  133. package/src/web/wedatheme/src/routes/wedatheme-index/FormItem.jsx +0 -18
  134. package/src/web/wedatheme/src/routes/wedatheme-index/WedathemeIndex.jsx +0 -1276
  135. package/src/web/wedatheme/src/routes/wedatheme-index/index.js +0 -1
  136. package/src/web/wedatheme/src/routes/weui2td/WEUI2TD.jsx +0 -3
  137. package/src/web/wedatheme/src/routes/weui2td/index.js +0 -1
  138. package/src/web/wedatheme/src/styles/_btn.scss +0 -24
  139. package/src/web/wedatheme/src/styles/_icon.scss +0 -653
  140. package/src/web/wedatheme/src/styles/_map.scss +0 -12
  141. package/src/web/wedatheme/src/styles/_middle.scss +0 -340
  142. package/src/web/wedatheme/src/styles/_upload.scss +0 -47
  143. package/src/web/wedatheme/src/styles/assets/alert-close.svg +0 -3
  144. package/src/web/wedatheme/src/styles/assets/and.svg +0 -12
  145. package/src/web/wedatheme/src/styles/assets/arrowdown--line.svg +0 -12
  146. package/src/web/wedatheme/src/styles/assets/arrowdown.svg +0 -12
  147. package/src/web/wedatheme/src/styles/assets/arrowleft--line.svg +0 -12
  148. package/src/web/wedatheme/src/styles/assets/arrowleft.svg +0 -12
  149. package/src/web/wedatheme/src/styles/assets/arrowright--line.svg +0 -12
  150. package/src/web/wedatheme/src/styles/assets/arrowright-blue--line.svg +0 -12
  151. package/src/web/wedatheme/src/styles/assets/arrowright.svg +0 -12
  152. package/src/web/wedatheme/src/styles/assets/arrowup--line.svg +0 -12
  153. package/src/web/wedatheme/src/styles/assets/arrowup.svg +0 -12
  154. package/src/web/wedatheme/src/styles/assets/bell-warning.svg +0 -3
  155. package/src/web/wedatheme/src/styles/assets/btnback.svg +0 -12
  156. package/src/web/wedatheme/src/styles/assets/calendar.svg +0 -12
  157. package/src/web/wedatheme/src/styles/assets/chartcolumn-1.svg +0 -12
  158. package/src/web/wedatheme/src/styles/assets/chartcolumn.svg +0 -12
  159. package/src/web/wedatheme/src/styles/assets/chartline-1.svg +0 -9
  160. package/src/web/wedatheme/src/styles/assets/chartline.svg +0 -9
  161. package/src/web/wedatheme/src/styles/assets/chartpie-1.svg +0 -12
  162. package/src/web/wedatheme/src/styles/assets/chartpie.svg +0 -12
  163. package/src/web/wedatheme/src/styles/assets/check-1.svg +0 -8
  164. package/src/web/wedatheme/src/styles/assets/check-2.svg +0 -1
  165. package/src/web/wedatheme/src/styles/assets/check.svg +0 -8
  166. package/src/web/wedatheme/src/styles/assets/close-1.svg +0 -8
  167. package/src/web/wedatheme/src/styles/assets/close.svg +0 -8
  168. package/src/web/wedatheme/src/styles/assets/consult.svg +0 -8
  169. package/src/web/wedatheme/src/styles/assets/convertip--blue.svg +0 -12
  170. package/src/web/wedatheme/src/styles/assets/convertip.svg +0 -12
  171. package/src/web/wedatheme/src/styles/assets/copy.svg +0 -12
  172. package/src/web/wedatheme/src/styles/assets/cur-active.svg +0 -12
  173. package/src/web/wedatheme/src/styles/assets/cur.svg +0 -12
  174. package/src/web/wedatheme/src/styles/assets/daily.svg +0 -13
  175. package/src/web/wedatheme/src/styles/assets/database.svg +0 -12
  176. package/src/web/wedatheme/src/styles/assets/datasheet.svg +0 -12
  177. package/src/web/wedatheme/src/styles/assets/delete-white.svg +0 -8
  178. package/src/web/wedatheme/src/styles/assets/delete.svg +0 -8
  179. package/src/web/wedatheme/src/styles/assets/detail.svg +0 -13
  180. package/src/web/wedatheme/src/styles/assets/dismiss.svg +0 -8
  181. package/src/web/wedatheme/src/styles/assets/download.svg +0 -12
  182. package/src/web/wedatheme/src/styles/assets/drop.svg +0 -15
  183. package/src/web/wedatheme/src/styles/assets/email-error.svg +0 -14
  184. package/src/web/wedatheme/src/styles/assets/email-warning.svg +0 -12
  185. package/src/web/wedatheme/src/styles/assets/email.svg +0 -14
  186. package/src/web/wedatheme/src/styles/assets/emailv.svg +0 -12
  187. package/src/web/wedatheme/src/styles/assets/error-1.svg +0 -8
  188. package/src/web/wedatheme/src/styles/assets/error-filled.svg +0 -3
  189. package/src/web/wedatheme/src/styles/assets/error.svg +0 -8
  190. package/src/web/wedatheme/src/styles/assets/externallink.svg +0 -12
  191. package/src/web/wedatheme/src/styles/assets/favorable.svg +0 -9
  192. package/src/web/wedatheme/src/styles/assets/filter.svg +0 -12
  193. package/src/web/wedatheme/src/styles/assets/firstpage.svg +0 -13
  194. package/src/web/wedatheme/src/styles/assets/folderclose.svg +0 -8
  195. package/src/web/wedatheme/src/styles/assets/folderopen.svg +0 -8
  196. package/src/web/wedatheme/src/styles/assets/fullscreenquit.svg +0 -12
  197. package/src/web/wedatheme/src/styles/assets/fullsreen.svg +0 -12
  198. package/src/web/wedatheme/src/styles/assets/globe-gray.svg +0 -12
  199. package/src/web/wedatheme/src/styles/assets/guide.svg +0 -9
  200. package/src/web/wedatheme/src/styles/assets/help.svg +0 -8
  201. package/src/web/wedatheme/src/styles/assets/hide.svg +0 -8
  202. package/src/web/wedatheme/src/styles/assets/info.svg +0 -8
  203. package/src/web/wedatheme/src/styles/assets/infoblue-1.svg +0 -8
  204. package/src/web/wedatheme/src/styles/assets/infoblue-filled.svg +0 -3
  205. package/src/web/wedatheme/src/styles/assets/infoblue.svg +0 -8
  206. package/src/web/wedatheme/src/styles/assets/jump-black.svg +0 -12
  207. package/src/web/wedatheme/src/styles/assets/jump.svg +0 -12
  208. package/src/web/wedatheme/src/styles/assets/lastpage.svg +0 -13
  209. package/src/web/wedatheme/src/styles/assets/loading.svg +0 -12
  210. package/src/web/wedatheme/src/styles/assets/local.svg +0 -10
  211. package/src/web/wedatheme/src/styles/assets/menu-fold-white.svg +0 -6
  212. package/src/web/wedatheme/src/styles/assets/menu-fold.svg +0 -6
  213. package/src/web/wedatheme/src/styles/assets/minus.svg +0 -12
  214. package/src/web/wedatheme/src/styles/assets/monitor.svg +0 -12
  215. package/src/web/wedatheme/src/styles/assets/more.svg +0 -8
  216. package/src/web/wedatheme/src/styles/assets/multi-line.svg +0 -12
  217. package/src/web/wedatheme/src/styles/assets/news.svg +0 -3
  218. package/src/web/wedatheme/src/styles/assets/not.svg +0 -12
  219. package/src/web/wedatheme/src/styles/assets/notice.svg +0 -8
  220. package/src/web/wedatheme/src/styles/assets/pencil.svg +0 -12
  221. package/src/web/wedatheme/src/styles/assets/pending-1.svg +0 -8
  222. package/src/web/wedatheme/src/styles/assets/pending-gray.svg +0 -8
  223. package/src/web/wedatheme/src/styles/assets/pending.svg +0 -8
  224. package/src/web/wedatheme/src/styles/assets/percent-blue.svg +0 -16
  225. package/src/web/wedatheme/src/styles/assets/percent.svg +0 -16
  226. package/src/web/wedatheme/src/styles/assets/phone-error.svg +0 -11
  227. package/src/web/wedatheme/src/styles/assets/phone-warning.svg +0 -9
  228. package/src/web/wedatheme/src/styles/assets/phone.svg +0 -12
  229. package/src/web/wedatheme/src/styles/assets/phonev.svg +0 -9
  230. package/src/web/wedatheme/src/styles/assets/plus.svg +0 -12
  231. package/src/web/wedatheme/src/styles/assets/qq.svg +0 -11
  232. package/src/web/wedatheme/src/styles/assets/realname.svg +0 -8
  233. package/src/web/wedatheme/src/styles/assets/realnamev.svg +0 -9
  234. package/src/web/wedatheme/src/styles/assets/refresh-blue.svg +0 -12
  235. package/src/web/wedatheme/src/styles/assets/refresh.svg +0 -12
  236. package/src/web/wedatheme/src/styles/assets/relationship-1.svg +0 -12
  237. package/src/web/wedatheme/src/styles/assets/relationship.svg +0 -12
  238. package/src/web/wedatheme/src/styles/assets/remind.svg +0 -8
  239. package/src/web/wedatheme/src/styles/assets/search.svg +0 -8
  240. package/src/web/wedatheme/src/styles/assets/setting.svg +0 -12
  241. package/src/web/wedatheme/src/styles/assets/shopcart.svg +0 -8
  242. package/src/web/wedatheme/src/styles/assets/show.svg +0 -8
  243. package/src/web/wedatheme/src/styles/assets/sort.svg +0 -12
  244. package/src/web/wedatheme/src/styles/assets/sortdown.svg +0 -12
  245. package/src/web/wedatheme/src/styles/assets/sortup.svg +0 -12
  246. package/src/web/wedatheme/src/styles/assets/success-1.svg +0 -8
  247. package/src/web/wedatheme/src/styles/assets/success-filled.svg +0 -3
  248. package/src/web/wedatheme/src/styles/assets/success.svg +0 -8
  249. package/src/web/wedatheme/src/styles/assets/table-1.svg +0 -12
  250. package/src/web/wedatheme/src/styles/assets/table.svg +0 -12
  251. package/src/web/wedatheme/src/styles/assets/tag.svg +0 -12
  252. package/src/web/wedatheme/src/styles/assets/time.svg +0 -12
  253. package/src/web/wedatheme/src/styles/assets/transfer.svg +0 -8
  254. package/src/web/wedatheme/src/styles/assets/trenddown.svg +0 -12
  255. package/src/web/wedatheme/src/styles/assets/trendup.svg +0 -12
  256. package/src/web/wedatheme/src/styles/assets/viewgrid.svg +0 -12
  257. package/src/web/wedatheme/src/styles/assets/viewlist.svg +0 -12
  258. package/src/web/wedatheme/src/styles/assets/warning-1.svg +0 -8
  259. package/src/web/wedatheme/src/styles/assets/warning-filled.svg +0 -3
  260. package/src/web/wedatheme/src/styles/assets/warning.svg +0 -8
  261. package/src/web/wedatheme/src/styles/assets/wechat-error.svg +0 -14
  262. package/src/web/wedatheme/src/styles/assets/wechat-warning.svg +0 -12
  263. package/src/web/wedatheme/src/styles/assets/wechat.svg +0 -12
  264. package/src/web/wedatheme/src/styles/assets/wechatv.svg +0 -12
  265. package/src/web/wedatheme/src/styles/assets/zoom-in-white.svg +0 -4
  266. package/src/web/wedatheme/src/styles/assets/zoom-in.svg +0 -4
  267. package/src/web/wedatheme/src/styles/assets/zoom-out-white.svg +0 -4
  268. package/src/web/wedatheme/src/styles/assets/zoom-out.svg +0 -4
  269. package/src/web/wedatheme/src/styles/index.scss +0 -18
  270. package/src/web/wedatheme/src/styles/main.css +0 -166
  271. package/src/web/wedatheme/src/styles/theme/_alert.scss +0 -73
  272. package/src/web/wedatheme/src/styles/theme/_badge.scss +0 -38
  273. package/src/web/wedatheme/src/styles/theme/_blank-page-v2.scss +0 -7
  274. package/src/web/wedatheme/src/styles/theme/_breadcrumb.scss +0 -8
  275. package/src/web/wedatheme/src/styles/theme/_bubble.scss +0 -24
  276. package/src/web/wedatheme/src/styles/theme/_button.scss +0 -212
  277. package/src/web/wedatheme/src/styles/theme/_card.scss +0 -12
  278. package/src/web/wedatheme/src/styles/theme/_cascader.scss +0 -43
  279. package/src/web/wedatheme/src/styles/theme/_checkbox&radio.scss +0 -83
  280. package/src/web/wedatheme/src/styles/theme/_datepicker.scss +0 -36
  281. package/src/web/wedatheme/src/styles/theme/_dialog.scss +0 -39
  282. package/src/web/wedatheme/src/styles/theme/_divider.scss +0 -1
  283. package/src/web/wedatheme/src/styles/theme/_drawer.scss +0 -15
  284. package/src/web/wedatheme/src/styles/theme/_dropdown.scss +0 -53
  285. package/src/web/wedatheme/src/styles/theme/_form.scss +0 -38
  286. package/src/web/wedatheme/src/styles/theme/_icon.scss +0 -0
  287. package/src/web/wedatheme/src/styles/theme/_input&textarea&select.scss +0 -85
  288. package/src/web/wedatheme/src/styles/theme/_inputnumber.scss +0 -16
  289. package/src/web/wedatheme/src/styles/theme/_link.scss +0 -14
  290. package/src/web/wedatheme/src/styles/theme/_list.scss +0 -41
  291. package/src/web/wedatheme/src/styles/theme/_metrics-board.scss +0 -14
  292. package/src/web/wedatheme/src/styles/theme/_notification.scss +0 -27
  293. package/src/web/wedatheme/src/styles/theme/_pagination.scss +0 -22
  294. package/src/web/wedatheme/src/styles/theme/_popconfirm.scss +0 -4
  295. package/src/web/wedatheme/src/styles/theme/_progress.scss +0 -28
  296. package/src/web/wedatheme/src/styles/theme/_region-select.scss +0 -17
  297. package/src/web/wedatheme/src/styles/theme/_search.scss +0 -18
  298. package/src/web/wedatheme/src/styles/theme/_segment.scss +0 -69
  299. package/src/web/wedatheme/src/styles/theme/_slider.scss +0 -18
  300. package/src/web/wedatheme/src/styles/theme/_status.scss +0 -4
  301. package/src/web/wedatheme/src/styles/theme/_steps.scss +0 -68
  302. package/src/web/wedatheme/src/styles/theme/_switch.scss +0 -11
  303. package/src/web/wedatheme/src/styles/theme/_table.scss +0 -44
  304. package/src/web/wedatheme/src/styles/theme/_tabs.scss +0 -44
  305. package/src/web/wedatheme/src/styles/theme/_tag-search.scss +0 -9
  306. package/src/web/wedatheme/src/styles/theme/_tag.scss +0 -48
  307. package/src/web/wedatheme/src/styles/theme/_timeline.scss +0 -0
  308. package/src/web/wedatheme/src/styles/theme/_toast.scss +0 -3
  309. package/src/web/wedatheme/src/styles/theme/_transfer.scss +0 -9
  310. package/src/web/wedatheme/src/styles/theme/_tree.scss +0 -11
  311. package/src/web/wedatheme/src/styles/theme/_upload.scss +0 -14
  312. package/src/web/wedatheme/src/styles/theme/_variables.scss +0 -140
  313. package/src/web/wedatheme/src/styles/theme/index.scss +0 -91
  314. package/src/web/wedatheme/style-package/README.md +0 -31
  315. package/src/web/wedatheme/style-package/ef6fa527e24e354765d806b826b41391.svg +0 -627
  316. package/src/web/wedatheme/style-package/index.css +0 -3
  317. package/src/web/wedatheme/style-package/package.json +0 -15
  318. package/src/web/wedatheme/tea.config.js +0 -66
  319. package/src/web/wedatheme/webpack/css.config.js +0 -114
  320. package/src/web/wedatheme/webpack/plugins/css-package-plugin.js +0 -23
  321. package/src/web/wedatheme/webpack/plugins/inject-assets-plugin.js +0 -32
  322. package/src/web/wedatheme/webpack/plugins/package-json-plugin.js +0 -66
@@ -0,0 +1,578 @@
1
+ import * as React from 'react';
2
+ import * as PropTypes from 'prop-types';
3
+ import { useSyncValue } from '../../../utils/useSyncValue';
4
+ import isObjectEqual from '../../../utils/isObjectEqual';
5
+ import weui from '../../../utils/weui';
6
+ import { CommonFormPropsType } from '../types';
7
+
8
+ import {
9
+ Upload,
10
+ ConfigProvider,
11
+ Button,
12
+ message,
13
+ Icon,
14
+ Text,
15
+ List,
16
+ Progress,
17
+ Tooltip,
18
+ } from 'tea-component';
19
+ import { v4 } from 'uuid';
20
+ import {
21
+ filterStrList,
22
+ isCloudFileID,
23
+ isHttpFileID,
24
+ transSize,
25
+ downloadFile,
26
+ } from '../../../utils/platform';
27
+ import { getCloudInstance, getTempFileURL } from '../../../utils/tcb';
28
+ import classNames from '../../../utils/classnames';
29
+ import { renderDecorator } from '../renderDecorator';
30
+
31
+ // 默认组件类前缀
32
+ const CLASS_PREFIX = 'weda-upload-file-mobile';
33
+ // 默认图片类型
34
+ export const FILES_TYPES = [
35
+ '.doc',
36
+ '.docx',
37
+ '.xml',
38
+ 'application/msword',
39
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
40
+ ];
41
+ // 上传状态字典
42
+ const statusMap = {
43
+ UPLOAD_STATUS_PENDING: { title: '等待上传', icon: 'pending' },
44
+ UPLOAD_STATUS_LOADING: { title: '上传中', icon: 'loading' },
45
+ UPLOAD_STATUS_SUCCESS: { title: '上传成功', icon: 'success' },
46
+ UPLOAD_STATUS_ERROR: { title: '上传失败', icon: 'error' },
47
+ };
48
+ // 上传文件Context
49
+ const FileContext = React.createContext(null);
50
+ /**
51
+ * 上传文件 H5 版本
52
+ */
53
+ export function UploadFileH5({
54
+ // 系统属性
55
+ layout,
56
+ id = '',
57
+ style = { margin: '0,-5px' },
58
+ labelVisible = true,
59
+ label = '上传文件',
60
+ requiredFlag = false,
61
+ disabled = false,
62
+ className = '',
63
+ acceptTypes = [],
64
+ // 组件属性
65
+ tips = '',
66
+ btnTitle = '点击上传',
67
+ maxUploadCount = 9,
68
+ maxSize = 10,
69
+ deleteVisible = true,
70
+ downloadVisible = true,
71
+ value = [], // 需要兼容 cloud:和https: 协议,需要兼容字符串和字符串数组
72
+ events = { success: null, error: null, change: null },
73
+ defaultValue,
74
+ uploadPath = 'weda-uploader',
75
+ single = true,
76
+ onChange = null,
77
+ }: IUploadFileH5) {
78
+ const [fileIDList, setfileIDList] = React.useState(
79
+ filterStrList([].concat(defaultValue, value))
80
+ ); // 上传成功文件ID列表,fileID[]
81
+ const [fileList, setFileList] = React.useState([]); // 上传中的文件列表,file[],file为原始文件 + uuid属性
82
+ const [fileSizeObj, setFileSizeObj] = React.useState({}); // 管理上传文件大小 {uuid:size}
83
+ React.useEffect(() => {
84
+ // 外部 onChange 事件
85
+ const pureFileIDList = fileIDList.filter(
86
+ (d) => isCloudFileID(d) || isHttpFileID(d)
87
+ );
88
+ if (single) {
89
+ const file = pureFileIDList[0] || '';
90
+ file && onChange && onChange(file);
91
+ events?.change?.({ value: file });
92
+ } else {
93
+ onChange && onChange(pureFileIDList);
94
+ events?.change?.({ value: pureFileIDList });
95
+ }
96
+ events?.success?.({ value: pureFileIDList });
97
+ }, [fileIDList]);
98
+
99
+ // 外层组件类
100
+ const cls = classNames({
101
+ 'weda-ui': true,
102
+ //'weui-cells': true,
103
+ //'weui-cells_form': true,
104
+ 'weui-cells_checkbox': true,
105
+ [className]: className,
106
+ });
107
+ const accepts = React.useMemo(() => {
108
+ return acceptTypes.includes('*') || acceptTypes.length === 0
109
+ ? ['*']
110
+ : Array.from(new Set(acceptTypes));
111
+ }, [acceptTypes]);
112
+
113
+ // 上传后文件列表 fileIDList 改变事件,'add'|'delete'
114
+ const handleChange = ({ fileID, uuid, type, size }) => {
115
+ // 上传时新增事件
116
+ if (type === 'add') {
117
+ fileID && setFileSizeObj((obj) => ({ ...obj, [fileID]: size }));
118
+ fileID && setfileIDList((list) => [...list, fileID]);
119
+ } else {
120
+ fileID && setfileIDList((list) => list.filter((f) => f !== fileID));
121
+ }
122
+ uuid && setFileList((list) => list.filter((item) => uuid !== item?._uuid));
123
+ };
124
+
125
+ // 上传组件属性
126
+ const uploadProps = {
127
+ multiple: !single,
128
+ };
129
+ tips && (uploadProps['label'] = tips);
130
+ maxSize && (uploadProps['maxSize'] = maxSize * 1024 * 1024);
131
+ const btnDisabled =
132
+ fileIDList.length >= maxUploadCount ||
133
+ (single && fileIDList.length > 0) ||
134
+ disabled;
135
+
136
+ return renderDecorator(
137
+ <ConfigProvider classPrefix="wedatea2td">
138
+ <FileContext.Provider
139
+ value={{
140
+ uploadPath,
141
+ downloadVisible,
142
+ deleteVisible,
143
+ onChange: handleChange,
144
+ events,
145
+ fileSizeObj,
146
+ }}
147
+ >
148
+ <div data-testid="uploadFileH5" className={cls} id={id} style={style}>
149
+ <div className={classNames(`${CLASS_PREFIX}`)}>
150
+ <div className={classNames(`${CLASS_PREFIX}__hd`, layout)}>
151
+ <div>
152
+ {btnDisabled ? (
153
+ <Button
154
+ type="weak"
155
+ className={classNames(`${CLASS_PREFIX}__btn--weak`)}
156
+ disabled={btnDisabled}
157
+ >
158
+ {btnTitle}
159
+ </Button>
160
+ ) : (
161
+ <div>
162
+ <input
163
+ id="uploaderInput"
164
+ type="file"
165
+ data-testid="button-up"
166
+ className="weui-uploader-mobile__input"
167
+ accept={accepts.join(',')}
168
+ multiple={!single}
169
+ onChange={(e) => {
170
+ const fileList = [...e.target.files];
171
+ if (single && fileList.length > 1) {
172
+ weui.alert(`上传文件总数不能超过1个`);
173
+ return false;
174
+ }
175
+ if (
176
+ fileList.length + fileIDList.length >
177
+ maxUploadCount
178
+ ) {
179
+ weui.alert(`上传文件总数不能超过${maxUploadCount}个`);
180
+ return false;
181
+ }
182
+ if (
183
+ maxSize &&
184
+ fileList.some((f) => f.size > maxSize * 1024 * 1024)
185
+ ) {
186
+ weui.alert(`请上传不超过${maxSize}M的文件`);
187
+ return false;
188
+ }
189
+ if (fileList.some((f) => f.size > 1024 * 1024 * 1024)) {
190
+ weui.alert(`请上传不超过1024M的文件`);
191
+ return false;
192
+ }
193
+ fileList.forEach((f) => (f['_uuid'] = v4()));
194
+ setFileList((list) => [...list, ...fileList]);
195
+ }}
196
+ />
197
+ <a
198
+ type="weak"
199
+ className="wedatea2td-btn wedatea2td-btn--weak"
200
+ >
201
+ 点击上传
202
+ </a>
203
+ {!single && (
204
+ <Text className={`${CLASS_PREFIX}__tips`}>
205
+ 支持批量上传
206
+ </Text>
207
+ )}
208
+ </div>
209
+ )}
210
+ </div>
211
+ </div>
212
+ <div className={`${CLASS_PREFIX}__bd`}>
213
+ <List>
214
+ {fileIDList.map((d) => (
215
+ <List.Item key={d}>
216
+ {
217
+ <TcbFileEcho
218
+ fileID={d}
219
+ fileList={fileList}
220
+ onChange={handleChange}
221
+ deleteVisible={deleteVisible}
222
+ downloadVisible={downloadVisible}
223
+ />
224
+ }
225
+ </List.Item>
226
+ ))}
227
+ {fileList.map((item) => (
228
+ <List.Item key={item?._uuid}>
229
+ {
230
+ <TcbFileUpload
231
+ file={item}
232
+ downloadVisible={downloadVisible}
233
+ deleteVisible={deleteVisible}
234
+ />
235
+ }
236
+ </List.Item>
237
+ ))}
238
+ </List>
239
+ </div>
240
+ </div>
241
+ </div>
242
+ </FileContext.Provider>
243
+ </ConfigProvider>
244
+ )({
245
+ id,
246
+ className: cls,
247
+ style,
248
+ label: labelVisible ? label : null,
249
+ layout,
250
+ multiCell: false,
251
+ requiredFlag,
252
+ });
253
+ }
254
+ export interface IUploadFileH5 extends CommonFormPropsType {
255
+ className?: string; // 传入类
256
+ label?: string; // 官方属性:标题
257
+ tips?: string; // 官方属性:提示
258
+ btnTitle?: string; // 官方属性:上传按钮标题
259
+ maxUploadCount?: number; // 官方属性:上传文件最大数量,作用于 数组,用 single 控制数组还是单个对象
260
+ deleteVisible?: boolean;
261
+ downloadVisible?: boolean;
262
+ acceptTypes?: any[];
263
+ disabled?: boolean;
264
+ defaultValue?: string | string[];
265
+ maxSize?: number; // 官方属性:单个图片大小限制,单位是M
266
+ value?: string | string[]; // 官方属性:值
267
+ uploadPath?: string; // 上传路径
268
+ single?: boolean; // 单张上传还是多张上传,对应 onChange 参数为字符串还是字符串数组,value 在处理过程统一转为字符串数组
269
+ onChange?: (v: any) => void; // 配合 fomily 受控使用
270
+ }
271
+
272
+ /**
273
+ * 基于 FileID 文件回显组件
274
+ */
275
+ const TcbFileEcho = ({
276
+ fileID,
277
+ fileList,
278
+ onChange,
279
+ deleteVisible,
280
+ downloadVisible,
281
+ }: ITcbFileEcho) => {
282
+ const [src, setSrc] = React.useState('');
283
+ const { fileSizeObj } = React.useContext(FileContext) || {};
284
+ const size = '--';
285
+ React.useEffect(() => {
286
+ const fetchFileId = async (id) => {
287
+ if (isCloudFileID(id)) {
288
+ try {
289
+ const fileSrc = await getTempFileURL(id);
290
+ setSrc(fileSrc);
291
+ } catch (e) {}
292
+ } else {
293
+ setSrc(id);
294
+ }
295
+ };
296
+ fetchFileId(fileID);
297
+ }, [fileID]);
298
+ //上传文件名称
299
+ const label = React.useMemo(() => {
300
+ if (isCloudFileID(fileID)) {
301
+ const uuidReg = /file-[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}-/;
302
+ const lastIndex = `${fileID}`.lastIndexOf('/');
303
+ const name = `${fileID}`.slice(lastIndex + 1);
304
+ const label = name.replace(uuidReg, '');
305
+ return label;
306
+ } else {
307
+ return fileID;
308
+ }
309
+ }, [fileID]);
310
+ //上传文件列表展示
311
+ return (
312
+ <div className={`${CLASS_PREFIX}__item`}>
313
+ <div className={`${CLASS_PREFIX}__item-left`}>
314
+ <UploadFileStatus title={label} size={fileSizeObj[fileID] || '--'} />
315
+ </div>
316
+ <div className={`${CLASS_PREFIX}__btn-group`}>
317
+ <UploadFileAction
318
+ status="UPLOAD_STATUS_SUCCESS"
319
+ fileID={fileID}
320
+ src={src}
321
+ />
322
+ </div>
323
+ </div>
324
+ );
325
+ };
326
+ interface ITcbFileEcho {
327
+ fileID?: string;
328
+ fileList?: any;
329
+ file?: any;
330
+ onChange?: Function;
331
+ deleteVisible?: boolean;
332
+ downloadVisible?: boolean;
333
+ }
334
+ interface ITcbFileUpload {
335
+ file?: any;
336
+ downloadVisible?: boolean;
337
+ deleteVisible?: boolean;
338
+ }
339
+ /**
340
+ * 基于 File 上传文件过程组件
341
+ */
342
+ const TcbFileUpload = ({
343
+ file,
344
+ downloadVisible,
345
+ deleteVisible,
346
+ }: ITcbFileUpload) => {
347
+ const { uploadPath, onChange, events } = React.useContext(FileContext) || {};
348
+ const [percent, setPercent] = React.useState(0); // 上传进度
349
+ const [status, setStatus] = React.useState('UPLOAD_STATUS_PENDING'); // 上传状态
350
+ const cancleRef = React.useRef(''); // 取消的uuid
351
+
352
+ // 上传文件相关属性
353
+ const { size, title, uuid } = React.useMemo(() => {
354
+ const size = transSize(file?.size);
355
+ const title = file?.name || '';
356
+ const uuid = file?._uuid;
357
+ return { size, title, uuid };
358
+ }, [file?._uuid]);
359
+
360
+ React.useEffect(() => {
361
+ const test = handleUpload(file);
362
+ }, [file?._uuid]);
363
+
364
+ // 上传过程
365
+ const handleUpload = async (file) => {
366
+ const tcb = await getCloudInstance();
367
+ try {
368
+ setStatus('UPLOAD_STATUS_PENDING');
369
+ const { fileID } = await tcb.uploadFile({
370
+ cloudPath: `${uploadPath}/${`file-${uuid}-${title}`}`,
371
+ filePath: file,
372
+ onUploadProgress: (progressEvent) => {
373
+ let percent = 0;
374
+ percent = Math.round(
375
+ (progressEvent.loaded * 100) / progressEvent.total
376
+ );
377
+ setStatus('UPLOAD_STATUS_LOADING');
378
+ setPercent(percent < 100 ? percent : 100);
379
+ },
380
+ });
381
+ !cancleRef.current && onChange?.({ fileID, type: 'add', uuid, size });
382
+ setStatus('UPLOAD_STATUS_SUCCESS');
383
+ } catch (err) {
384
+ setStatus('UPLOAD_STATUS_ERROR');
385
+ events?.error?.(err);
386
+ }
387
+ };
388
+
389
+ return (
390
+ <div className={`${CLASS_PREFIX}__item`} role="TcbFileUpload">
391
+ <div className={`${CLASS_PREFIX}__item-left`}>
392
+ <UploadFileStatus
393
+ status={status}
394
+ percent={percent}
395
+ size={size}
396
+ title={title}
397
+ percentSize={((file?.size / 1024) * percent) / 100}
398
+ />
399
+ </div>
400
+ <div className={`${CLASS_PREFIX}__btn-group`}>
401
+ <UploadFileAction
402
+ file={file}
403
+ uuid={file?._uuid}
404
+ status={status}
405
+ onCancel={(uuid) => {
406
+ cancleRef.current = uuid;
407
+ onChange?.({ type: 'delete', uuid });
408
+ }}
409
+ onReLoad={handleUpload}
410
+ />
411
+ </div>
412
+ </div>
413
+ );
414
+ };
415
+
416
+ interface IUploadFileStatus {
417
+ status?: string;
418
+ percent?: number;
419
+ size?: any;
420
+ title?: string;
421
+ percentSize?: number;
422
+ }
423
+ /**
424
+ * 上传文件状态组件
425
+ */
426
+ const UploadFileStatus = ({
427
+ status = 'UPLOAD_STATUS_SUCCESS',
428
+ percent = 0,
429
+ size,
430
+ title = null,
431
+ percentSize = 0,
432
+ }: IUploadFileStatus) => {
433
+ //上传中、待上传状态
434
+ if (
435
+ status == 'UPLOAD_STATUS_LOADING' ||
436
+ (status == 'UPLOAD_STATUS_PENDING' && percent)
437
+ ) {
438
+ return (
439
+ <>
440
+ <div className={`${CLASS_PREFIX}__file-detail`}>
441
+ <Text className={`${CLASS_PREFIX}__file-name`}>{title}</Text>
442
+ <div className={`${CLASS_PREFIX}__file-status`}>
443
+ <div className={`${CLASS_PREFIX}__file-status`}>
444
+ <Progress
445
+ percent={percent}
446
+ theme="default"
447
+ strokeColor={'#0052D9'}
448
+ className={`${CLASS_PREFIX}__file-progress`}
449
+ />
450
+ </div>
451
+ </div>
452
+ </div>
453
+ <div className={`${CLASS_PREFIX}__file-foot`}>
454
+ <div>
455
+ <Text>{`${Math.floor(percentSize)}K/`}</Text>
456
+
457
+ <Text>{size}</Text>
458
+ </div>
459
+ <Text>
460
+ {status === 'UPLOAD_STATUS_PENDING' ? '等待上传' : '上传中'}
461
+ </Text>
462
+ </div>
463
+ </>
464
+ );
465
+ }
466
+
467
+ return (
468
+ <>
469
+ <div className={`${CLASS_PREFIX}__file-detail`}>
470
+ <Tooltip title={title}>
471
+ <Text className={`${CLASS_PREFIX}__file-name`}>{title}</Text>
472
+ </Tooltip>
473
+ <div className={`${CLASS_PREFIX}__file-status`}>
474
+ <Icon
475
+ type={
476
+ statusMap[status]?.icon || statusMap['UPLOAD_STATUS_PENDING'].icon
477
+ }
478
+ ></Icon>
479
+ <Text className={`${CLASS_PREFIX}__file-status--msg`}>
480
+ {statusMap[status]?.title ||
481
+ statusMap['UPLOAD_STATUS_PENDING'].title}
482
+ </Text>
483
+ </div>
484
+ </div>
485
+ <div className={`${CLASS_PREFIX}__file-foot`}>
486
+ <div>
487
+ <Text>{size}</Text>
488
+ </div>
489
+ </div>
490
+ </>
491
+ );
492
+ };
493
+
494
+ interface IUploadFileAction {
495
+ status?: string;
496
+ fileID?: string;
497
+ uuid?: string;
498
+ src?: string;
499
+ file?: any;
500
+ onReLoad?: any;
501
+ onCancel?: any;
502
+ }
503
+
504
+ /**
505
+ * 操作列组件, onChange 从最外层 UploadFilePc 传进来
506
+ * props: { status, fileID, uuid, src, onChange }
507
+ */
508
+ const UploadFileAction = ({
509
+ status = 'UPLOAD_STATUS_PENDING',
510
+ fileID = '',
511
+ uuid = '',
512
+ src = '',
513
+ file = null,
514
+ onReLoad = null,
515
+ onCancel = null,
516
+ }: IUploadFileAction) => {
517
+ const { onChange, downloadVisible, deleteVisible } =
518
+ React.useContext(FileContext) || {};
519
+ // 操作列按钮-删除
520
+ const renderDelete = () => (
521
+ <Icon
522
+ type="delete"
523
+ style={{ cursor: 'pointer' }}
524
+ onClick={() => onChange?.({ fileID, uuid, type: 'delete' })}
525
+ />
526
+ );
527
+
528
+ // 操作列按钮-取消
529
+ const renderCancel = () => (
530
+ <Icon
531
+ type="dismiss"
532
+ style={{ cursor: 'pointer' }}
533
+ onClick={() => onCancel?.(uuid)}
534
+ />
535
+ );
536
+
537
+ // 操作列按钮-重新上传
538
+ const renderReLoad = () => (
539
+ <Icon
540
+ type="refresh"
541
+ style={{ cursor: 'pointer' }}
542
+ onClick={() => {
543
+ onReLoad?.(file);
544
+ }}
545
+ />
546
+ );
547
+
548
+ // 操作列按钮-下载
549
+ const renderDownLoad = () => (
550
+ <Icon
551
+ type="download"
552
+ style={{ cursor: 'pointer' }}
553
+ onClick={() => downloadFile(src)}
554
+ />
555
+ );
556
+
557
+ switch (status) {
558
+ case 'UPLOAD_STATUS_PENDING':
559
+ return renderCancel();
560
+ case 'UPLOAD_STATUS_LOADING':
561
+ return renderCancel();
562
+ case 'UPLOAD_STATUS_SUCCESS':
563
+ return (
564
+ <>
565
+ {deleteVisible && renderDelete()}{' '}
566
+ {downloadVisible && renderDownLoad()}
567
+ </>
568
+ );
569
+ case 'UPLOAD_STATUS_ERROR':
570
+ return (
571
+ <>
572
+ {deleteVisible && renderDelete()} {renderReLoad()}
573
+ </>
574
+ );
575
+ default:
576
+ return null;
577
+ }
578
+ };