@hw-component/form 0.0.1-bate

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 (347) hide show
  1. package/.babelrc +23 -0
  2. package/.eslintrc.js +8 -0
  3. package/.husky/pre-commit +4 -0
  4. package/.stylelintrc.js +5 -0
  5. package/LICENSE +201 -0
  6. package/es/CheckboxGroup/CheckBox/index.d.ts +4 -0
  7. package/es/CheckboxGroup/CheckBox/index.js +40 -0
  8. package/es/CheckboxGroup/hooks.d.ts +5 -0
  9. package/es/CheckboxGroup/hooks.js +123 -0
  10. package/es/CheckboxGroup/index.d.ts +3 -0
  11. package/es/CheckboxGroup/index.js +89 -0
  12. package/es/CheckboxGroup/modal.d.ts +13 -0
  13. package/es/Form/Context/FormConfigProvider.d.ts +5 -0
  14. package/es/Form/Context/FormConfigProvider.js +47 -0
  15. package/es/Form/Context/index.d.ts +5 -0
  16. package/es/Form/Context/index.js +11 -0
  17. package/es/Form/FormItem/BasicItem.d.ts +4 -0
  18. package/es/Form/FormItem/BasicItem.js +73 -0
  19. package/es/Form/FormItem/Helper.d.ts +7 -0
  20. package/es/Form/FormItem/Helper.js +24 -0
  21. package/es/Form/FormItem/RegularFormItem.d.ts +4 -0
  22. package/es/Form/FormItem/RegularFormItem.js +15 -0
  23. package/es/Form/FormItem/UpFormItem.d.ts +4 -0
  24. package/es/Form/FormItem/UpFormItem.js +31 -0
  25. package/es/Form/FormItem/hooks.d.ts +10 -0
  26. package/es/Form/FormItem/hooks.js +38 -0
  27. package/es/Form/FormItem/index.d.ts +4 -0
  28. package/es/Form/FormItem/index.js +11 -0
  29. package/es/Form/HFormConnect.d.ts +6 -0
  30. package/es/Form/HFormConnect.js +54 -0
  31. package/es/Form/InitSet.d.ts +6 -0
  32. package/es/Form/InitSet.js +16 -0
  33. package/es/Form/Label.d.ts +10 -0
  34. package/es/Form/Label.js +46 -0
  35. package/es/Form/config.d.ts +28 -0
  36. package/es/Form/config.js +43 -0
  37. package/es/Form/hooks/index.d.ts +12 -0
  38. package/es/Form/hooks/index.js +77 -0
  39. package/es/Form/hooks/useHForm.d.ts +3 -0
  40. package/es/Form/hooks/useHForm.js +111 -0
  41. package/es/Form/hooks/useInitConfigData.d.ts +4 -0
  42. package/es/Form/hooks/useInitConfigData.js +124 -0
  43. package/es/Form/index.d.ts +4 -0
  44. package/es/Form/index.js +73 -0
  45. package/es/Form/modal.d.ts +92 -0
  46. package/es/Input/ButtonInput.d.ts +4 -0
  47. package/es/Input/ButtonInput.js +80 -0
  48. package/es/Input/InputNumber.d.ts +4 -0
  49. package/es/Input/InputNumber.js +20 -0
  50. package/es/Input/SelectInput.d.ts +9 -0
  51. package/es/Input/SelectInput.js +94 -0
  52. package/es/Input/defaultConfig.d.ts +7 -0
  53. package/es/Input/defaultConfig.js +11 -0
  54. package/es/Input/index.d.ts +4 -0
  55. package/es/Input/index.js +13 -0
  56. package/es/Input/modal.d.ts +25 -0
  57. package/es/PageHandler/ErrorComponent.d.ts +4 -0
  58. package/es/PageHandler/ErrorComponent.js +33 -0
  59. package/es/PageHandler/LoadingComponent.d.ts +3 -0
  60. package/es/PageHandler/LoadingComponent.js +18 -0
  61. package/es/PageHandler/index.d.ts +4 -0
  62. package/es/PageHandler/index.js +24 -0
  63. package/es/PageHandler/modal.d.ts +6 -0
  64. package/es/RadioGroup/index.d.ts +9 -0
  65. package/es/RadioGroup/index.js +48 -0
  66. package/es/Select/components/AllSelect.d.ts +7 -0
  67. package/es/Select/components/AllSelect.js +50 -0
  68. package/es/Select/components/CheckBoxOption.d.ts +7 -0
  69. package/es/Select/components/CheckBoxOption.js +14 -0
  70. package/es/Select/components/DropdownComponent.d.ts +9 -0
  71. package/es/Select/components/DropdownComponent.js +39 -0
  72. package/es/Select/components/NoFindItem.d.ts +6 -0
  73. package/es/Select/components/NoFindItem.js +13 -0
  74. package/es/Select/components/NotFoundContent.d.ts +7 -0
  75. package/es/Select/components/NotFoundContent.js +38 -0
  76. package/es/Select/defaultConfig.d.ts +6 -0
  77. package/es/Select/defaultConfig.js +33 -0
  78. package/es/Select/hooks/changeHooks.d.ts +5 -0
  79. package/es/Select/hooks/changeHooks.js +194 -0
  80. package/es/Select/hooks/norHooks.d.ts +10 -0
  81. package/es/Select/hooks/norHooks.js +85 -0
  82. package/es/Select/index.d.ts +4 -0
  83. package/es/Select/index.js +128 -0
  84. package/es/Select/modal.d.ts +30 -0
  85. package/es/Select/utils.d.ts +2 -0
  86. package/es/Select/utils.js +39 -0
  87. package/es/Submit/index.d.ts +8 -0
  88. package/es/Submit/index.js +28 -0
  89. package/es/Switch/index.d.ts +11 -0
  90. package/es/Switch/index.js +45 -0
  91. package/es/TDPicker/RangePicker.d.ts +8 -0
  92. package/es/TDPicker/RangePicker.js +116 -0
  93. package/es/TDPicker/TimePicker.d.ts +4 -0
  94. package/es/TDPicker/TimePicker.js +31 -0
  95. package/es/TDPicker/hooks.d.ts +33 -0
  96. package/es/TDPicker/hooks.js +132 -0
  97. package/es/TDPicker/index.d.ts +4 -0
  98. package/es/TDPicker/index.js +33 -0
  99. package/es/TDPicker/modal.d.ts +28 -0
  100. package/es/TextArea/index.d.ts +3 -0
  101. package/es/Upload/Btn.d.ts +4 -0
  102. package/es/Upload/Btn.js +31 -0
  103. package/es/Upload/MediaTypeEle/TypeEle.d.ts +10 -0
  104. package/es/Upload/MediaTypeEle/TypeEle.js +40 -0
  105. package/es/Upload/MediaTypeEle/index.d.ts +4 -0
  106. package/es/Upload/MediaTypeEle/index.js +36 -0
  107. package/es/Upload/Preview/index.d.ts +6 -0
  108. package/es/Upload/Preview/index.js +21 -0
  109. package/es/Upload/UrlUpload/index.d.ts +4 -0
  110. package/es/Upload/UrlUpload/index.js +119 -0
  111. package/es/Upload/enums.d.ts +5 -0
  112. package/es/Upload/enums.js +10 -0
  113. package/es/Upload/hooks/change.d.ts +3 -0
  114. package/es/Upload/hooks/change.js +109 -0
  115. package/es/Upload/hooks/customRequest.d.ts +3 -0
  116. package/es/Upload/hooks/customRequest.js +69 -0
  117. package/es/Upload/hooks/propsMaker.d.ts +2 -0
  118. package/es/Upload/hooks/propsMaker.js +37 -0
  119. package/es/Upload/index.d.ts +4 -0
  120. package/es/Upload/index.js +106 -0
  121. package/es/Upload/modal.d.ts +28 -0
  122. package/es/Upload/util.d.ts +5 -0
  123. package/es/Upload/util.js +34 -0
  124. package/es/config.d.ts +2 -0
  125. package/es/config.js +64 -0
  126. package/es/hooks/index.d.ts +13 -0
  127. package/es/hooks/index.js +75 -0
  128. package/es/index.css +35 -0
  129. package/es/index.d.ts +20 -0
  130. package/es/index.js +25 -0
  131. package/es/modal.d.ts +15 -0
  132. package/lib/CheckboxGroup/CheckBox/index.d.ts +4 -0
  133. package/lib/CheckboxGroup/CheckBox/index.js +43 -0
  134. package/lib/CheckboxGroup/hooks.d.ts +5 -0
  135. package/lib/CheckboxGroup/hooks.js +124 -0
  136. package/lib/CheckboxGroup/index.d.ts +3 -0
  137. package/lib/CheckboxGroup/index.js +92 -0
  138. package/lib/CheckboxGroup/modal.d.ts +13 -0
  139. package/lib/Form/Context/FormConfigProvider.d.ts +5 -0
  140. package/lib/Form/Context/FormConfigProvider.js +51 -0
  141. package/lib/Form/Context/index.d.ts +5 -0
  142. package/lib/Form/Context/index.js +14 -0
  143. package/lib/Form/FormItem/BasicItem.d.ts +4 -0
  144. package/lib/Form/FormItem/BasicItem.js +76 -0
  145. package/lib/Form/FormItem/Helper.d.ts +7 -0
  146. package/lib/Form/FormItem/Helper.js +27 -0
  147. package/lib/Form/FormItem/RegularFormItem.d.ts +4 -0
  148. package/lib/Form/FormItem/RegularFormItem.js +18 -0
  149. package/lib/Form/FormItem/UpFormItem.d.ts +4 -0
  150. package/lib/Form/FormItem/UpFormItem.js +34 -0
  151. package/lib/Form/FormItem/hooks.d.ts +10 -0
  152. package/lib/Form/FormItem/hooks.js +41 -0
  153. package/lib/Form/FormItem/index.d.ts +4 -0
  154. package/lib/Form/FormItem/index.js +14 -0
  155. package/lib/Form/HFormConnect.d.ts +6 -0
  156. package/lib/Form/HFormConnect.js +57 -0
  157. package/lib/Form/InitSet.d.ts +6 -0
  158. package/lib/Form/InitSet.js +19 -0
  159. package/lib/Form/Label.d.ts +10 -0
  160. package/lib/Form/Label.js +49 -0
  161. package/lib/Form/config.d.ts +28 -0
  162. package/lib/Form/config.js +47 -0
  163. package/lib/Form/hooks/index.d.ts +12 -0
  164. package/lib/Form/hooks/index.js +80 -0
  165. package/lib/Form/hooks/useHForm.d.ts +3 -0
  166. package/lib/Form/hooks/useHForm.js +114 -0
  167. package/lib/Form/hooks/useInitConfigData.d.ts +4 -0
  168. package/lib/Form/hooks/useInitConfigData.js +127 -0
  169. package/lib/Form/index.d.ts +4 -0
  170. package/lib/Form/index.js +76 -0
  171. package/lib/Form/modal.d.ts +92 -0
  172. package/lib/Input/ButtonInput.d.ts +4 -0
  173. package/lib/Input/ButtonInput.js +83 -0
  174. package/lib/Input/InputNumber.d.ts +4 -0
  175. package/lib/Input/InputNumber.js +23 -0
  176. package/lib/Input/SelectInput.d.ts +9 -0
  177. package/lib/Input/SelectInput.js +98 -0
  178. package/lib/Input/defaultConfig.d.ts +7 -0
  179. package/lib/Input/defaultConfig.js +13 -0
  180. package/lib/Input/index.d.ts +4 -0
  181. package/lib/Input/index.js +16 -0
  182. package/lib/Input/modal.d.ts +25 -0
  183. package/lib/PageHandler/ErrorComponent.d.ts +4 -0
  184. package/lib/PageHandler/ErrorComponent.js +36 -0
  185. package/lib/PageHandler/LoadingComponent.d.ts +3 -0
  186. package/lib/PageHandler/LoadingComponent.js +21 -0
  187. package/lib/PageHandler/index.d.ts +4 -0
  188. package/lib/PageHandler/index.js +27 -0
  189. package/lib/PageHandler/modal.d.ts +6 -0
  190. package/lib/RadioGroup/index.d.ts +9 -0
  191. package/lib/RadioGroup/index.js +51 -0
  192. package/lib/Select/components/AllSelect.d.ts +7 -0
  193. package/lib/Select/components/AllSelect.js +53 -0
  194. package/lib/Select/components/CheckBoxOption.d.ts +7 -0
  195. package/lib/Select/components/CheckBoxOption.js +17 -0
  196. package/lib/Select/components/DropdownComponent.d.ts +9 -0
  197. package/lib/Select/components/DropdownComponent.js +42 -0
  198. package/lib/Select/components/NoFindItem.d.ts +6 -0
  199. package/lib/Select/components/NoFindItem.js +16 -0
  200. package/lib/Select/components/NotFoundContent.d.ts +7 -0
  201. package/lib/Select/components/NotFoundContent.js +41 -0
  202. package/lib/Select/defaultConfig.d.ts +6 -0
  203. package/lib/Select/defaultConfig.js +35 -0
  204. package/lib/Select/hooks/changeHooks.d.ts +5 -0
  205. package/lib/Select/hooks/changeHooks.js +195 -0
  206. package/lib/Select/hooks/norHooks.d.ts +10 -0
  207. package/lib/Select/hooks/norHooks.js +87 -0
  208. package/lib/Select/index.d.ts +4 -0
  209. package/lib/Select/index.js +131 -0
  210. package/lib/Select/modal.d.ts +30 -0
  211. package/lib/Select/utils.d.ts +2 -0
  212. package/lib/Select/utils.js +41 -0
  213. package/lib/Submit/index.d.ts +8 -0
  214. package/lib/Submit/index.js +31 -0
  215. package/lib/Switch/index.d.ts +11 -0
  216. package/lib/Switch/index.js +48 -0
  217. package/lib/TDPicker/RangePicker.d.ts +8 -0
  218. package/lib/TDPicker/RangePicker.js +119 -0
  219. package/lib/TDPicker/TimePicker.d.ts +4 -0
  220. package/lib/TDPicker/TimePicker.js +34 -0
  221. package/lib/TDPicker/hooks.d.ts +33 -0
  222. package/lib/TDPicker/hooks.js +139 -0
  223. package/lib/TDPicker/index.d.ts +4 -0
  224. package/lib/TDPicker/index.js +36 -0
  225. package/lib/TDPicker/modal.d.ts +28 -0
  226. package/lib/TextArea/index.d.ts +3 -0
  227. package/lib/Upload/Btn.d.ts +4 -0
  228. package/lib/Upload/Btn.js +34 -0
  229. package/lib/Upload/MediaTypeEle/TypeEle.d.ts +10 -0
  230. package/lib/Upload/MediaTypeEle/TypeEle.js +43 -0
  231. package/lib/Upload/MediaTypeEle/index.d.ts +4 -0
  232. package/lib/Upload/MediaTypeEle/index.js +39 -0
  233. package/lib/Upload/Preview/index.d.ts +6 -0
  234. package/lib/Upload/Preview/index.js +24 -0
  235. package/lib/Upload/UrlUpload/index.d.ts +4 -0
  236. package/lib/Upload/UrlUpload/index.js +122 -0
  237. package/lib/Upload/enums.d.ts +5 -0
  238. package/lib/Upload/enums.js +9 -0
  239. package/lib/Upload/hooks/change.d.ts +3 -0
  240. package/lib/Upload/hooks/change.js +110 -0
  241. package/lib/Upload/hooks/customRequest.d.ts +3 -0
  242. package/lib/Upload/hooks/customRequest.js +70 -0
  243. package/lib/Upload/hooks/propsMaker.d.ts +2 -0
  244. package/lib/Upload/hooks/propsMaker.js +38 -0
  245. package/lib/Upload/index.d.ts +4 -0
  246. package/lib/Upload/index.js +109 -0
  247. package/lib/Upload/modal.d.ts +28 -0
  248. package/lib/Upload/util.d.ts +5 -0
  249. package/lib/Upload/util.js +38 -0
  250. package/lib/config.d.ts +2 -0
  251. package/lib/config.js +65 -0
  252. package/lib/hooks/index.d.ts +13 -0
  253. package/lib/hooks/index.js +78 -0
  254. package/lib/index.css +35 -0
  255. package/lib/index.d.ts +20 -0
  256. package/lib/index.js +43 -0
  257. package/lib/modal.d.ts +15 -0
  258. package/package.json +81 -0
  259. package/public/index.html +19 -0
  260. package/scripts/rollup.config.js +75 -0
  261. package/scripts/webpack.config.js +76 -0
  262. package/src/Layout.tsx +61 -0
  263. package/src/app.tsx +33 -0
  264. package/src/components/CheckboxGroup/CheckBox/index.tsx +38 -0
  265. package/src/components/CheckboxGroup/hooks.ts +102 -0
  266. package/src/components/CheckboxGroup/index.tsx +79 -0
  267. package/src/components/CheckboxGroup/modal.ts +15 -0
  268. package/src/components/Form/Context/FormConfigProvider.tsx +38 -0
  269. package/src/components/Form/Context/index.tsx +14 -0
  270. package/src/components/Form/FormItem/BasicItem.tsx +70 -0
  271. package/src/components/Form/FormItem/Helper.tsx +26 -0
  272. package/src/components/Form/FormItem/RegularFormItem.tsx +7 -0
  273. package/src/components/Form/FormItem/UpFormItem.tsx +20 -0
  274. package/src/components/Form/FormItem/hooks.tsx +44 -0
  275. package/src/components/Form/FormItem/index.tsx +8 -0
  276. package/src/components/Form/HFormConnect.tsx +49 -0
  277. package/src/components/Form/InitSet.tsx +12 -0
  278. package/src/components/Form/Label.tsx +50 -0
  279. package/src/components/Form/config.ts +40 -0
  280. package/src/components/Form/hooks/index.ts +42 -0
  281. package/src/components/Form/hooks/useHForm.ts +89 -0
  282. package/src/components/Form/hooks/useInitConfigData.tsx +100 -0
  283. package/src/components/Form/index.less +22 -0
  284. package/src/components/Form/index.tsx +61 -0
  285. package/src/components/Form/modal.ts +142 -0
  286. package/src/components/Input/ButtonInput.tsx +41 -0
  287. package/src/components/Input/InputNumber.tsx +5 -0
  288. package/src/components/Input/SelectInput.tsx +74 -0
  289. package/src/components/Input/defaultConfig.ts +8 -0
  290. package/src/components/Input/index.tsx +6 -0
  291. package/src/components/Input/modal.ts +31 -0
  292. package/src/components/PageHandler/ErrorComponent.tsx +20 -0
  293. package/src/components/PageHandler/LoadingComponent.tsx +9 -0
  294. package/src/components/PageHandler/index.tsx +14 -0
  295. package/src/components/PageHandler/modal.ts +6 -0
  296. package/src/components/RadioGroup/index.tsx +45 -0
  297. package/src/components/Select/components/AllSelect.tsx +54 -0
  298. package/src/components/Select/components/CheckBoxOption.tsx +14 -0
  299. package/src/components/Select/components/DropdownComponent.tsx +36 -0
  300. package/src/components/Select/components/NoFindItem.tsx +7 -0
  301. package/src/components/Select/components/NotFoundContent.tsx +25 -0
  302. package/src/components/Select/defaultConfig.tsx +23 -0
  303. package/src/components/Select/hooks/changeHooks.tsx +151 -0
  304. package/src/components/Select/hooks/norHooks.ts +63 -0
  305. package/src/components/Select/index.less +22 -0
  306. package/src/components/Select/index.tsx +120 -0
  307. package/src/components/Select/modal.ts +30 -0
  308. package/src/components/Select/utils.ts +18 -0
  309. package/src/components/Submit/index.tsx +28 -0
  310. package/src/components/Switch/index.tsx +52 -0
  311. package/src/components/TDPicker/RangePicker.tsx +103 -0
  312. package/src/components/TDPicker/TimePicker.tsx +15 -0
  313. package/src/components/TDPicker/hooks.ts +150 -0
  314. package/src/components/TDPicker/index.tsx +22 -0
  315. package/src/components/TDPicker/modal.ts +30 -0
  316. package/src/components/TextArea/index.tsx +8 -0
  317. package/src/components/Upload/Btn.tsx +24 -0
  318. package/src/components/Upload/MediaTypeEle/TypeEle.tsx +26 -0
  319. package/src/components/Upload/MediaTypeEle/index.tsx +34 -0
  320. package/src/components/Upload/Preview/index.tsx +14 -0
  321. package/src/components/Upload/UrlUpload/index.tsx +91 -0
  322. package/src/components/Upload/enums.ts +5 -0
  323. package/src/components/Upload/hooks/change.ts +79 -0
  324. package/src/components/Upload/hooks/customRequest.ts +44 -0
  325. package/src/components/Upload/hooks/propsMaker.ts +20 -0
  326. package/src/components/Upload/index.tsx +85 -0
  327. package/src/components/Upload/modal.ts +31 -0
  328. package/src/components/Upload/util.ts +27 -0
  329. package/src/components/config.ts +40 -0
  330. package/src/components/hooks/index.ts +53 -0
  331. package/src/components/index.tsx +21 -0
  332. package/src/components/modal.ts +15 -0
  333. package/src/components/styles/index.less +2 -0
  334. package/src/components/styles/local.less +1 -0
  335. package/src/components/typings.d.ts +11 -0
  336. package/src/index.less +20 -0
  337. package/src/index.tsx +12 -0
  338. package/src/pages/Checkbox/index.tsx +15 -0
  339. package/src/pages/DatePicker/index.tsx +33 -0
  340. package/src/pages/Form/index.tsx +146 -0
  341. package/src/pages/Input/index.tsx +22 -0
  342. package/src/pages/Radio/index.tsx +18 -0
  343. package/src/pages/Select/index.tsx +57 -0
  344. package/src/pages/Switch/index.tsx +18 -0
  345. package/src/pages/Upload/index.tsx +14 -0
  346. package/src/routes.tsx +68 -0
  347. package/tsconfig.json +29 -0
@@ -0,0 +1,89 @@
1
+ import { useMemo } from "react";
2
+ import { Form } from "antd";
3
+ import type { FormatItemModal, HFormInstance } from "../modal";
4
+
5
+ export default () => {
6
+ const [form] = Form.useForm();
7
+ return useMemo<HFormInstance>(() => {
8
+ const formatSourceData: Record<string, FormatItemModal> = {};
9
+ let dispatchSourceData: Record<string, VoidFunction[]> = {};
10
+ return {
11
+ addFormat(name: string, format?: FormatItemModal) {
12
+ if (!format) {
13
+ return;
14
+ }
15
+ const { inputValue, outputValue } = format;
16
+ formatSourceData[name] = {
17
+ inputValue,
18
+ outputValue,
19
+ };
20
+ }, //注册转化方法
21
+ formatValues(value = {}, formatKey = "inputValue") {
22
+ const valKeys = Object.keys(value).length;
23
+ if (!valKeys) {
24
+ return {};
25
+ }
26
+ let newValue = { ...value };
27
+ const keys = Object.keys(formatSourceData);
28
+ keys.forEach((key) => {
29
+ const format = formatSourceData[key]?.[formatKey];
30
+ if (!format) {
31
+ return;
32
+ }
33
+ const resultValue = format(value);
34
+ Reflect.deleteProperty(newValue, key);
35
+ newValue = {
36
+ ...newValue,
37
+ ...resultValue,
38
+ };
39
+ });
40
+ return newValue;
41
+ }, //转化方法
42
+ dispatch(key) {
43
+ const items = dispatchSourceData[key];
44
+ if (!items) {
45
+ return;
46
+ }
47
+ items.forEach((fn) => {
48
+ fn();
49
+ });
50
+ },
51
+ addDispatchListener(key, fn) {
52
+ const items = dispatchSourceData[key];
53
+ if (!items) {
54
+ dispatchSourceData[key] = [fn];
55
+ return;
56
+ }
57
+ items.push(fn);
58
+ dispatchSourceData[key] = items;
59
+ },
60
+ removeDispatchListener(key) {
61
+ if (!key) {
62
+ dispatchSourceData = {};
63
+ return;
64
+ }
65
+ Reflect.deleteProperty(dispatchSourceData, key);
66
+ },
67
+ initValues(value = {}) {
68
+ const newValue = this.formatValues(value);
69
+ form.setFieldsValue(newValue);
70
+ },
71
+ outputValues(value) {
72
+ return this.formatValues(value, "outputValue");
73
+ },
74
+ ...form,
75
+ setFieldsValue(values) {
76
+ const newValue = this.formatValues(values);
77
+ form.setFieldsValue(newValue);
78
+ },
79
+ validateFields(nameList) {
80
+ return new Promise((resolve) => {
81
+ form.validateFields(nameList).then((value) => {
82
+ const result = this.formatValues(value, "outputValue");
83
+ return resolve(result);
84
+ });
85
+ });
86
+ },
87
+ };
88
+ }, []);
89
+ };
@@ -0,0 +1,100 @@
1
+ import { useMemo } from "react";
2
+ import type {
3
+ FormItemWithRender,
4
+ HFormItemProps,
5
+ HFormProps,
6
+ HItemProps,
7
+ } from "@/components/Form/modal";
8
+ import FormConfig, { placeholderConfig } from "../config";
9
+ import type { Rule } from "rc-field-form/lib/interface";
10
+ import type { FormInstance } from "antd";
11
+
12
+ const mathRequired = (configItem: HFormItemProps, form: FormInstance) => {
13
+ const { required, placeholder, rules, type = "input" } = configItem;
14
+ let resultRequired = false;
15
+ const dom = FormConfig[type];
16
+ const resultRules = rules?.map((item) => {
17
+ let eachItem = item;
18
+ if (typeof item === "function") {
19
+ eachItem = item(form);
20
+ }
21
+
22
+ const { required: itemRequired, message } = eachItem as any;
23
+ if (itemRequired) {
24
+ resultRequired = itemRequired;
25
+ }
26
+ if (itemRequired && !message) {
27
+ return {
28
+ ...eachItem,
29
+ required: itemRequired,
30
+ message: !!dom?.requiredErrMsg
31
+ ? dom.requiredErrMsg(configItem)
32
+ : placeholder,
33
+ };
34
+ }
35
+ return eachItem;
36
+ });
37
+ return {
38
+ required: typeof required === "boolean" ? required : resultRequired,
39
+ rules: resultRules as Rule[],
40
+ };
41
+ }; //是否必填
42
+ const matchDefaultPlaceholder = (props: HFormItemProps) => {
43
+ const { label, placeholder, type = "input" } = props;
44
+ const dom = FormConfig[type];
45
+ if (placeholder) {
46
+ return placeholder;
47
+ }
48
+ if (dom?.placeholder) {
49
+ return dom.placeholder(props);
50
+ }
51
+ if (placeholderConfig.inputType.indexOf(type) !== -1) {
52
+ return `请输入${label}`;
53
+ }
54
+ return `请选择${label}`;
55
+ }; //自动构建
56
+ const defaultRenderMaker = (props: HFormItemProps) => {
57
+ const { render, type = "input", itemProps = {}, ...componentProps } = props;
58
+ const dom = FormConfig[type];
59
+ return (form: FormInstance) => {
60
+ const Component = !!dom?.Component ? dom.Component : dom;
61
+ const node = Component && (
62
+ <Component {...componentProps} {...itemProps} form={form} />
63
+ );
64
+ if (render) {
65
+ return render(props, node, form);
66
+ }
67
+ return node;
68
+ };
69
+ };
70
+
71
+ const defaultPlaceholderPropsMaker = (props: HFormItemProps) => {
72
+ const placeholder = matchDefaultPlaceholder(props);
73
+ return {
74
+ ...props,
75
+ placeholder,
76
+ render: defaultRenderMaker({ ...props, placeholder }),
77
+ };
78
+ }; //组装参数
79
+ const itemControl = (
80
+ item: HItemProps,
81
+ form: FormInstance
82
+ ): FormItemWithRender => {
83
+ const { render, ...defaultProps } = defaultPlaceholderPropsMaker(item);
84
+ const { rules, required } = mathRequired(defaultProps, form);
85
+ return {
86
+ ...defaultProps,
87
+ required,
88
+ rules,
89
+ render,
90
+ };
91
+ };
92
+ type InitConfigModal = Required<Pick<HFormProps, "configData" | "form">>;
93
+
94
+ export default ({ configData, form }: InitConfigModal) => {
95
+ return useMemo(() => {
96
+ return configData.map((item) => {
97
+ return itemControl(item, form);
98
+ });
99
+ }, [configData]);
100
+ };
@@ -0,0 +1,22 @@
1
+ @import "../styles/local.less";
2
+ .@{ant-prefix}-hw-form-item-colon:after {
3
+ position: relative;
4
+ top: -0.5px;
5
+ margin: 0 8px 0 2px;
6
+ content: ":";
7
+ }
8
+ .@{ant-prefix}-hw-form-item-required:before {
9
+ display: inline-block;
10
+ margin-right: 4px;
11
+ color: #ff4d4f;
12
+ font-size: 14px;
13
+ font-family: SimSun, sans-serif;
14
+ line-height: 1;
15
+ content: "*";
16
+ }
17
+
18
+ .@{ant-prefix}-hw-form-base-item {
19
+ display: flex;
20
+ align-items: center;
21
+ min-height: 32px;
22
+ }
@@ -0,0 +1,61 @@
1
+ import { Form } from "antd";
2
+ import type { HFormProps } from "./modal";
3
+ import Item from "./FormItem";
4
+ import { useCurrentForm, useInit, useSub } from "./hooks";
5
+ import { FormContext } from "./Context";
6
+ import PageHandler from "../PageHandler";
7
+ import useInitConfigData from "./hooks/useInitConfigData";
8
+ import InitSet from "./InitSet";
9
+ export default ({
10
+ configData,
11
+ labelWidth,
12
+ form,
13
+ request,
14
+ onFinish,
15
+ infoRequest,
16
+ valueType = "float",
17
+ initialValues,
18
+ ...props
19
+ }: HFormProps) => {
20
+ const hForm = useCurrentForm(form);
21
+ const newConfigData = useInitConfigData({
22
+ configData,
23
+ form: hForm,
24
+ });
25
+ const { run, loading } = useSub({
26
+ request,
27
+ onFinish,
28
+ valueType,
29
+ form: hForm,
30
+ });
31
+
32
+ const { infoRun, infoLoading, infoErr, infoData } = useInit({
33
+ infoRequest,
34
+ initialValues,
35
+ });
36
+
37
+ return (
38
+ <PageHandler
39
+ loading={infoLoading}
40
+ error={infoErr}
41
+ data={infoData}
42
+ reload={infoRun}
43
+ >
44
+ <FormContext.Provider value={{ loading, form: hForm, valueType }}>
45
+ <Form form={hForm} onFinish={run} {...props}>
46
+ {newConfigData.map((itemData, index) => {
47
+ const { labelWidth: itemLabelWidth } = itemData;
48
+ return (
49
+ <Item
50
+ {...itemData}
51
+ key={index}
52
+ labelWidth={itemLabelWidth || labelWidth}
53
+ />
54
+ );
55
+ })}
56
+ </Form>
57
+ <InitSet initValues={infoData} />
58
+ </FormContext.Provider>
59
+ </PageHandler>
60
+ );
61
+ };
@@ -0,0 +1,142 @@
1
+ import type { FormInstance, FormItemProps, FormProps } from "antd";
2
+ import type { HCheckboxProps } from "@/components/CheckboxGroup/modal";
3
+ import type React from "react";
4
+ import type {
5
+ HButtonProps,
6
+ HInputProps,
7
+ HSelectInputProps,
8
+ } from "@/components/Input/modal";
9
+ import type { HRadioGroupProps } from "@/components/RadioGroup";
10
+ import type { HSelectProps } from "@/components/Select/modal";
11
+ import type { ButtonProps } from "antd/es";
12
+ import type { HSwitchProps } from "@/components/Switch";
13
+ import type {
14
+ HDatePickerProps,
15
+ HRangePickerProps,
16
+ HTimePickerProps,
17
+ } from "@/components/TDPicker/modal";
18
+ import type { TextAreaProps } from "antd/es/input";
19
+ import type { IUpLoadProps } from "@/components/Upload/modal";
20
+ import type { SelectProps } from "antd";
21
+ import type { RangePickerProps } from "antd/es/date-picker";
22
+ import type {
23
+ PromiseFnResult,
24
+ ValueCheckMapModal,
25
+ ValueSwitchMapModal,
26
+ DateRangePickerValueMapModal,
27
+ } from "../modal";
28
+ type RenderFun = (
29
+ props: HItemProps,
30
+ node: React.ReactNode,
31
+ form: FormInstance
32
+ ) => void;
33
+ type ItemPropsType =
34
+ | HCheckboxProps
35
+ | HInputProps
36
+ | HSelectInputProps
37
+ | HButtonProps
38
+ | HRadioGroupProps
39
+ | HSelectProps
40
+ | ButtonProps
41
+ | HSwitchProps
42
+ | HDatePickerProps
43
+ | HRangePickerProps
44
+ | HTimePickerProps
45
+ | TextAreaProps
46
+ | IUpLoadProps;
47
+
48
+ export interface HoverModal {
49
+ text?: string;
50
+ icon?: React.ReactNode;
51
+ }
52
+ type HelperModal = (form: HFormInstance) => React.ReactNode | string;
53
+
54
+ export type HideModal = (form: HFormInstance) => boolean;
55
+
56
+ export interface HItemProps extends Omit<FormItemProps, "name"> {
57
+ type?: string;
58
+ itemProps?: ItemPropsType;
59
+ render?: RenderFun;
60
+ helper?: HelperModal;
61
+ hover?: string | HoverModal;
62
+ // formItems?: HItemProps[]; 保留感觉没必要
63
+ labelWidth?: number;
64
+ hide?: boolean | HideModal;
65
+ placeholder?: string | string[];
66
+ formatKeys?: string[];
67
+ name: string;
68
+ }
69
+
70
+ export interface HFormProps<T = any, R = any> extends Omit<FormProps, "form"> {
71
+ configData: HItemProps[];
72
+ labelWidth?: number;
73
+ request?: PromiseFnResult<T, R>;
74
+ infoRequest?: () => Promise<T>;
75
+ valueType?: string;
76
+ form?: HFormInstance;
77
+ }
78
+
79
+ export interface HFormItemProps extends HItemProps {
80
+ required?: boolean;
81
+ }
82
+ export interface FormItemWithRender extends Omit<HFormItemProps, "render"> {
83
+ render: (form: HFormInstance) => React.ReactNode;
84
+ }
85
+
86
+ export interface FormContextProps {
87
+ loading?: boolean;
88
+ form: HFormInstance;
89
+ valueType?: string;
90
+ }
91
+ interface ConfigUploadProps {
92
+ exFiles?: string[];
93
+ maxSize?: number;
94
+ request?: PromiseFnResult;
95
+ }
96
+
97
+ export interface IFormConfigContextProps {
98
+ fieldNames?: SelectProps["fieldNames"];
99
+ valueCheckMap?: ValueCheckMapModal;
100
+ valueSwitchMap?: ValueSwitchMapModal;
101
+ valueRangePickerValueMap?: DateRangePickerValueMapModal;
102
+ dateRanges?: RangePickerProps["ranges"];
103
+ uploadProps?: ConfigUploadProps;
104
+ }
105
+
106
+ export interface HFormInstance extends FormInstance {
107
+ addFormat: (name: string, formats?: FormatItemModal) => void;
108
+ initValues: (values?: Record<string, any>) => void;
109
+ formatValues: (
110
+ values?: Record<string, any>,
111
+ formatKey?: string
112
+ ) => Record<string, any>;
113
+ dispatch: (key: string) => void;
114
+ outputValues: (values?: Record<string, any>) => Record<string, any>;
115
+ addDispatchListener: (key: string, fn: VoidFunction) => void;
116
+ removeDispatchListener: (key?: string) => void;
117
+ }
118
+
119
+ export interface ConnectConfigModal {
120
+ format?: Record<string, addFormatItemModal>;
121
+ }
122
+
123
+ type ValueFormat = (value: Record<string, any>) => Record<string, any>;
124
+
125
+ export interface FormatItemModal {
126
+ inputValue: ValueFormat;
127
+ outputValue: ValueFormat;
128
+ }
129
+
130
+ type addValueFormat = (
131
+ item: HFormItemProps,
132
+ value: Record<string, any>
133
+ ) => Record<string, any>;
134
+
135
+ export interface addFormatItemModal {
136
+ inputValue: addValueFormat;
137
+ outputValue: addValueFormat;
138
+ }
139
+
140
+ export interface ConnectResultProps {
141
+ addFormat?: (format: Record<string, addFormatItemModal>) => void;
142
+ }
@@ -0,0 +1,41 @@
1
+ import { Input, Button } from "antd";
2
+ import React from "react";
3
+ import { useRequest } from "ahooks";
4
+ import type { HButtonInputProps } from "./modal";
5
+
6
+ const Index: React.FC<HButtonInputProps> = ({
7
+ buttonProps = {},
8
+ value,
9
+ onChange,
10
+ children,
11
+ request,
12
+ ...props
13
+ }) => {
14
+ const { onClick, type = "primary", ...oProps } = buttonProps;
15
+ const { run, loading } = useRequest(
16
+ (val) => {
17
+ return request?.(val);
18
+ },
19
+ { manual: true }
20
+ );
21
+ const change = (e) => {
22
+ onChange?.(e.target.value);
23
+ };
24
+ const click = async (e) => {
25
+ let result = value;
26
+ if (request) {
27
+ result = await run(value);
28
+ }
29
+ onClick?.(result, e);
30
+ };
31
+
32
+ return (
33
+ <Input.Group compact style={{ display: "flex" }}>
34
+ <Input {...props} style={{ flex: 1 }} value={value} onChange={change} />
35
+ <Button {...oProps} type={type} onClick={click} loading={loading}>
36
+ {children}
37
+ </Button>
38
+ </Input.Group>
39
+ );
40
+ };
41
+ export default Index;
@@ -0,0 +1,5 @@
1
+ import type { InputNumberProps } from "antd";
2
+ import { InputNumber } from "antd";
3
+ export default ({ style = { width: "100%" }, ...props }: InputNumberProps) => {
4
+ return <InputNumber style={style} {...props} />;
5
+ };
@@ -0,0 +1,74 @@
1
+ import { Input } from "antd";
2
+ import type { HSelectInputProps } from "./modal";
3
+ import HSelect from "../Select";
4
+ import { defaultSelectStyle, defaultValueName } from "./defaultConfig";
5
+ import HFormConnect from "../Form/HFormConnect";
6
+ export enum SelectInputType {
7
+ input,
8
+ select,
9
+ }
10
+ export const Index = ({
11
+ selectProps = {},
12
+ value = {},
13
+ onChange,
14
+ valueName = defaultValueName,
15
+ addFormat,
16
+ ...props
17
+ }: HSelectInputProps) => {
18
+ const { input = "", select = "" } = valueName;
19
+ const { [input]: inputVal, [select]: selectVal } = value;
20
+ const {
21
+ style = defaultSelectStyle,
22
+ placeholder = "请选择",
23
+ ...sProps
24
+ } = selectProps;
25
+ const change = (val, key) => {
26
+ const newVal = { ...value };
27
+ newVal[key] = val;
28
+ const type = key === input ? SelectInputType.input : SelectInputType.select;
29
+ onChange?.(newVal, type);
30
+ };
31
+ addFormat?.({
32
+ float: {
33
+ inputValue: (item, initValue) => {
34
+ const { name } = item;
35
+ const resultObj = {};
36
+ Object.values(valueName).forEach((key) => {
37
+ resultObj[key] = initValue[key];
38
+ });
39
+ return {
40
+ [name]: resultObj,
41
+ };
42
+ },
43
+ outputValue: (item, outputValue) => {
44
+ const { name } = item;
45
+ const { [name]: itemVal = {} } = outputValue;
46
+ const newItemVal = { [itemVal[select]]: itemVal[input] };
47
+ return {
48
+ ...newItemVal,
49
+ };
50
+ },
51
+ },
52
+ });
53
+ return (
54
+ <Input
55
+ value={inputVal}
56
+ onChange={(e) => {
57
+ change(e.target.value, input);
58
+ }}
59
+ addonBefore={
60
+ <HSelect
61
+ {...sProps}
62
+ style={style}
63
+ placeholder={placeholder}
64
+ value={selectVal}
65
+ onChange={(val) => {
66
+ change(val, select);
67
+ }}
68
+ />
69
+ }
70
+ {...props}
71
+ />
72
+ );
73
+ };
74
+ export default HFormConnect(Index);
@@ -0,0 +1,8 @@
1
+ export const defaultSelectStyle = {
2
+ width: 128,
3
+ };
4
+
5
+ export const defaultValueName = {
6
+ input: "input",
7
+ select: "select",
8
+ };
@@ -0,0 +1,6 @@
1
+ import { Input } from "antd";
2
+ import type { HInputProps } from "./modal";
3
+
4
+ export default ({ ...props }: HInputProps) => {
5
+ return <Input {...props} />;
6
+ };
@@ -0,0 +1,31 @@
1
+ import type { ButtonProps, InputProps } from "antd";
2
+ import type { HSelectProps } from "../Select/modal";
3
+ import type { SelectInputType } from "./SelectInput";
4
+ import type { PromiseFnResult } from "../modal";
5
+ import type { addFormatItemModal } from "../Form/modal";
6
+
7
+ export type HInputProps = InputProps;
8
+
9
+ interface ValueNameModal {
10
+ input?: string;
11
+ select?: string;
12
+ }
13
+
14
+ export interface HSelectInputProps
15
+ extends Omit<HInputProps, "value" | "onChange"> {
16
+ selectProps?: HSelectProps;
17
+ value?: Record<string, any>;
18
+ onChange?: (value: Record<string, any>, type: SelectInputType) => void;
19
+ valueName?: ValueNameModal;
20
+ addFormat?: (config: Record<string, addFormatItemModal>) => void;
21
+ }
22
+ export interface HButtonProps extends Omit<ButtonProps, "onClick"> {
23
+ onClick: (
24
+ value: string | readonly string[] | number | undefined,
25
+ e: HTMLElement
26
+ ) => void;
27
+ }
28
+ export interface HButtonInputProps extends HInputProps {
29
+ buttonProps?: HButtonProps;
30
+ request?: PromiseFnResult;
31
+ }
@@ -0,0 +1,20 @@
1
+ import { Button, Row, Space, Typography } from "antd";
2
+ import { ExclamationCircleOutlined } from "@ant-design/icons";
3
+ import type { IHPageHandler } from "./modal";
4
+
5
+ const { Text } = Typography;
6
+ export default ({ error, reload }: IHPageHandler) => {
7
+ return (
8
+ <Row justify={"center"} align={"middle"} style={{ height: 125 }}>
9
+ <Space align={"center"} direction={"vertical"}>
10
+ <Text type={"danger"}>
11
+ <ExclamationCircleOutlined size={24} />
12
+ </Text>
13
+ <Text type={"danger"}>{error?.message}</Text>
14
+ <Button type="primary" size={"small"} onClick={reload}>
15
+ 重新加载
16
+ </Button>
17
+ </Space>
18
+ </Row>
19
+ );
20
+ };
@@ -0,0 +1,9 @@
1
+ import { Row, Spin } from "antd";
2
+
3
+ export default () => {
4
+ return (
5
+ <Row justify={"center"} align={"middle"} style={{ height: 125 }}>
6
+ <Spin size="large" />
7
+ </Row>
8
+ );
9
+ };
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ import Loading from "./LoadingComponent";
3
+ import ErrorComponent from "./ErrorComponent";
4
+ import type { IHPageHandler } from "./modal";
5
+ const Index: React.FC<IHPageHandler> = ({ error, data, reload, children }) => {
6
+ if (error) {
7
+ return <ErrorComponent error={error} reload={reload} />;
8
+ }
9
+ if (data) {
10
+ return <>{children}</>;
11
+ }
12
+ return <Loading />;
13
+ };
14
+ export default Index;
@@ -0,0 +1,6 @@
1
+ export interface IHPageHandler<T = any> {
2
+ loading?: boolean;
3
+ error?: Error;
4
+ reload: VoidFunction;
5
+ data?: T;
6
+ }
@@ -0,0 +1,45 @@
1
+ import { Radio } from "antd";
2
+ import type { SelectProps, RadioGroupProps } from "antd/es";
3
+ import { useMemo } from "react";
4
+ import { useMatchConfigProps } from "../hooks";
5
+
6
+ export interface HRadioGroupProps
7
+ extends Omit<RadioGroupProps, "onChange" | "options"> {
8
+ onChange?: (value: any) => void;
9
+ fieldNames?: SelectProps["fieldNames"];
10
+ options?: (Record<string, any> | string | number)[];
11
+ }
12
+ export default ({
13
+ value,
14
+ options,
15
+ onChange,
16
+ fieldNames: propsFieldNames,
17
+ ...props
18
+ }: HRadioGroupProps) => {
19
+ const { fieldNames = {} } = useMatchConfigProps({
20
+ fieldNames: propsFieldNames,
21
+ });
22
+ const relOptions = useMemo(() => {
23
+ return options?.map((item) => {
24
+ const type = typeof item;
25
+ if (type === "string" || type === "number") {
26
+ return item;
27
+ }
28
+ const { label: labelKey = "", value: valueKey = "" } = fieldNames;
29
+ return {
30
+ label: item[labelKey],
31
+ value: item[valueKey],
32
+ };
33
+ });
34
+ }, [options, fieldNames]);
35
+ return (
36
+ <Radio.Group
37
+ options={relOptions as RadioGroupProps["options"]}
38
+ value={value}
39
+ onChange={(e) => {
40
+ onChange?.(e.target.value);
41
+ }}
42
+ {...props}
43
+ />
44
+ );
45
+ };