@hw-component/form 0.0.1 → 0.0.2-beta-v1

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 (358) hide show
  1. package/LICENSE +201 -0
  2. package/es/CheckboxGroup/CheckBox/index.d.ts +4 -0
  3. package/es/CheckboxGroup/CheckBox/index.js +40 -0
  4. package/es/CheckboxGroup/hooks.d.ts +5 -0
  5. package/es/CheckboxGroup/hooks.js +123 -0
  6. package/es/CheckboxGroup/index.d.ts +3 -0
  7. package/es/CheckboxGroup/index.js +91 -0
  8. package/es/CheckboxGroup/modal.d.ts +13 -0
  9. package/es/DialogForm/DrawerForm/Footer.d.ts +4 -0
  10. package/es/DialogForm/DrawerForm/Footer.js +23 -0
  11. package/es/DialogForm/DrawerForm/Title.d.ts +4 -0
  12. package/es/DialogForm/DrawerForm/Title.js +18 -0
  13. package/es/DialogForm/DrawerForm/index.d.ts +4 -0
  14. package/es/DialogForm/DrawerForm/index.js +111 -0
  15. package/es/DialogForm/ModalForm.d.ts +4 -0
  16. package/es/DialogForm/ModalForm.js +89 -0
  17. package/es/DialogForm/hooks.d.ts +14 -0
  18. package/es/DialogForm/hooks.js +124 -0
  19. package/es/DialogForm/modal.d.ts +25 -0
  20. package/es/Form/Context/FormConfigProvider.d.ts +5 -0
  21. package/es/Form/Context/FormConfigProvider.js +47 -0
  22. package/es/Form/Context/index.d.ts +5 -0
  23. package/es/Form/Context/index.js +11 -0
  24. package/es/Form/FormItem/BasicItem.d.ts +4 -0
  25. package/es/Form/FormItem/BasicItem.js +73 -0
  26. package/es/Form/FormItem/Helper.d.ts +7 -0
  27. package/es/Form/FormItem/Helper.js +24 -0
  28. package/es/Form/FormItem/RegularFormItem.d.ts +4 -0
  29. package/es/Form/FormItem/RegularFormItem.js +15 -0
  30. package/es/Form/FormItem/UpFormItem.d.ts +4 -0
  31. package/es/Form/FormItem/UpFormItem.js +31 -0
  32. package/es/Form/FormItem/hooks.d.ts +10 -0
  33. package/es/Form/FormItem/hooks.js +38 -0
  34. package/es/Form/FormItem/index.d.ts +4 -0
  35. package/es/Form/FormItem/index.js +11 -0
  36. package/es/Form/HFormConnect.d.ts +5 -0
  37. package/es/Form/HFormConnect.js +55 -0
  38. package/es/Form/InitSet.d.ts +3 -0
  39. package/es/Form/InitSet.js +15 -0
  40. package/es/Form/Label.d.ts +10 -0
  41. package/es/Form/Label.js +46 -0
  42. package/es/Form/config.d.ts +29 -0
  43. package/es/Form/config.js +45 -0
  44. package/es/Form/hooks/index.d.ts +6 -0
  45. package/es/Form/hooks/index.js +45 -0
  46. package/es/Form/hooks/useHForm.d.ts +3 -0
  47. package/es/Form/hooks/useHForm.js +168 -0
  48. package/es/Form/hooks/useInitConfigData.d.ts +4 -0
  49. package/es/Form/hooks/useInitConfigData.js +124 -0
  50. package/es/Form/index.d.ts +4 -0
  51. package/es/Form/index.js +104 -0
  52. package/es/Form/modal.d.ts +104 -0
  53. package/es/Input/ButtonInput.d.ts +4 -0
  54. package/es/Input/ButtonInput.js +80 -0
  55. package/es/Input/InputNumber.d.ts +4 -0
  56. package/es/Input/InputNumber.js +20 -0
  57. package/es/Input/SelectInput.d.ts +9 -0
  58. package/es/Input/SelectInput.js +97 -0
  59. package/es/Input/defaultConfig.d.ts +7 -0
  60. package/es/Input/defaultConfig.js +11 -0
  61. package/es/Input/index.d.ts +4 -0
  62. package/es/Input/index.js +13 -0
  63. package/es/Input/modal.d.ts +27 -0
  64. package/es/PageHandler/ErrorComponent.d.ts +4 -0
  65. package/es/PageHandler/ErrorComponent.js +33 -0
  66. package/es/PageHandler/LoadingComponent.d.ts +3 -0
  67. package/es/PageHandler/LoadingComponent.js +18 -0
  68. package/es/PageHandler/index.d.ts +4 -0
  69. package/es/PageHandler/index.js +24 -0
  70. package/es/PageHandler/modal.d.ts +6 -0
  71. package/es/RadioGroup/index.d.ts +9 -0
  72. package/es/RadioGroup/index.js +48 -0
  73. package/es/Select/components/AllSelect.d.ts +3 -3
  74. package/es/Select/components/AllSelect.js +31 -15
  75. package/es/Select/components/CheckBoxOption.js +2 -2
  76. package/es/Select/components/DropdownComponent.js +2 -2
  77. package/es/Select/components/NoFindItem.js +2 -2
  78. package/es/Select/components/NotFoundContent.js +3 -5
  79. package/es/Select/defaultConfig.d.ts +0 -1
  80. package/es/Select/defaultConfig.js +3 -7
  81. package/es/Select/hooks/changeHooks.d.ts +1 -1
  82. package/es/Select/hooks/changeHooks.js +9 -5
  83. package/es/Select/hooks/norHooks.d.ts +4 -6
  84. package/es/Select/hooks/norHooks.js +20 -37
  85. package/es/Select/index.d.ts +1 -1
  86. package/es/Select/index.js +31 -19
  87. package/es/Select/modal.d.ts +2 -2
  88. package/es/Select/utils.d.ts +2 -0
  89. package/es/Select/utils.js +39 -0
  90. package/es/Submit/index.d.ts +8 -0
  91. package/es/Submit/index.js +28 -0
  92. package/es/Switch/index.d.ts +11 -0
  93. package/es/Switch/index.js +45 -0
  94. package/es/TDPicker/RangePicker.d.ts +8 -0
  95. package/es/TDPicker/RangePicker.js +121 -0
  96. package/es/TDPicker/TimePicker.d.ts +4 -0
  97. package/es/TDPicker/TimePicker.js +31 -0
  98. package/es/TDPicker/hooks.d.ts +33 -0
  99. package/es/TDPicker/hooks.js +132 -0
  100. package/es/TDPicker/index.d.ts +4 -0
  101. package/es/TDPicker/index.js +33 -0
  102. package/es/TDPicker/modal.d.ts +28 -0
  103. package/es/TextArea/index.d.ts +4 -0
  104. package/es/TextArea/index.js +21 -0
  105. package/es/Upload/Btn.d.ts +4 -0
  106. package/es/Upload/Btn.js +31 -0
  107. package/es/Upload/MediaTypeEle/TypeEle.d.ts +10 -0
  108. package/es/Upload/MediaTypeEle/TypeEle.js +40 -0
  109. package/es/Upload/MediaTypeEle/index.d.ts +4 -0
  110. package/es/Upload/MediaTypeEle/index.js +36 -0
  111. package/es/Upload/Preview/index.d.ts +6 -0
  112. package/es/Upload/Preview/index.js +21 -0
  113. package/es/Upload/UrlUpload/index.d.ts +4 -0
  114. package/es/Upload/UrlUpload/index.js +119 -0
  115. package/es/Upload/enums.d.ts +5 -0
  116. package/es/Upload/enums.js +10 -0
  117. package/es/Upload/hooks/change.d.ts +3 -0
  118. package/es/Upload/hooks/change.js +109 -0
  119. package/es/Upload/hooks/customRequest.d.ts +3 -0
  120. package/es/Upload/hooks/customRequest.js +132 -0
  121. package/es/Upload/hooks/propsMaker.d.ts +2 -0
  122. package/es/Upload/hooks/propsMaker.js +37 -0
  123. package/es/Upload/index.d.ts +3 -0
  124. package/es/Upload/index.js +140 -0
  125. package/es/Upload/modal.d.ts +30 -0
  126. package/es/Upload/util.d.ts +5 -0
  127. package/es/Upload/util.js +34 -0
  128. package/es/config.d.ts +2 -0
  129. package/es/config.js +64 -0
  130. package/es/hooks/index.d.ts +13 -0
  131. package/es/hooks/index.js +75 -0
  132. package/es/index.css +33 -1
  133. package/es/index.d.ts +24 -1
  134. package/es/index.js +31 -3
  135. package/es/modal.d.ts +15 -0
  136. package/lib/CheckboxGroup/CheckBox/index.d.ts +4 -0
  137. package/lib/CheckboxGroup/CheckBox/index.js +43 -0
  138. package/lib/CheckboxGroup/hooks.d.ts +5 -0
  139. package/lib/CheckboxGroup/hooks.js +124 -0
  140. package/lib/CheckboxGroup/index.d.ts +3 -0
  141. package/lib/CheckboxGroup/index.js +94 -0
  142. package/lib/CheckboxGroup/modal.d.ts +13 -0
  143. package/lib/DialogForm/DrawerForm/Footer.d.ts +4 -0
  144. package/lib/DialogForm/DrawerForm/Footer.js +26 -0
  145. package/lib/DialogForm/DrawerForm/Title.d.ts +4 -0
  146. package/lib/DialogForm/DrawerForm/Title.js +21 -0
  147. package/lib/DialogForm/DrawerForm/index.d.ts +4 -0
  148. package/lib/DialogForm/DrawerForm/index.js +114 -0
  149. package/lib/DialogForm/ModalForm.d.ts +4 -0
  150. package/lib/DialogForm/ModalForm.js +92 -0
  151. package/lib/DialogForm/hooks.d.ts +14 -0
  152. package/lib/DialogForm/hooks.js +128 -0
  153. package/lib/DialogForm/modal.d.ts +25 -0
  154. package/lib/Form/Context/FormConfigProvider.d.ts +5 -0
  155. package/lib/Form/Context/FormConfigProvider.js +51 -0
  156. package/lib/Form/Context/index.d.ts +5 -0
  157. package/lib/Form/Context/index.js +14 -0
  158. package/lib/Form/FormItem/BasicItem.d.ts +4 -0
  159. package/lib/Form/FormItem/BasicItem.js +76 -0
  160. package/lib/Form/FormItem/Helper.d.ts +7 -0
  161. package/lib/Form/FormItem/Helper.js +27 -0
  162. package/lib/Form/FormItem/RegularFormItem.d.ts +4 -0
  163. package/lib/Form/FormItem/RegularFormItem.js +18 -0
  164. package/lib/Form/FormItem/UpFormItem.d.ts +4 -0
  165. package/lib/Form/FormItem/UpFormItem.js +34 -0
  166. package/lib/Form/FormItem/hooks.d.ts +10 -0
  167. package/lib/Form/FormItem/hooks.js +41 -0
  168. package/lib/Form/FormItem/index.d.ts +4 -0
  169. package/lib/Form/FormItem/index.js +14 -0
  170. package/lib/Form/HFormConnect.d.ts +5 -0
  171. package/lib/Form/HFormConnect.js +58 -0
  172. package/lib/Form/InitSet.d.ts +3 -0
  173. package/lib/Form/InitSet.js +18 -0
  174. package/lib/Form/Label.d.ts +10 -0
  175. package/lib/Form/Label.js +49 -0
  176. package/lib/Form/config.d.ts +29 -0
  177. package/lib/Form/config.js +49 -0
  178. package/lib/Form/hooks/index.d.ts +6 -0
  179. package/lib/Form/hooks/index.js +47 -0
  180. package/lib/Form/hooks/useHForm.d.ts +3 -0
  181. package/lib/Form/hooks/useHForm.js +171 -0
  182. package/lib/Form/hooks/useInitConfigData.d.ts +4 -0
  183. package/lib/Form/hooks/useInitConfigData.js +127 -0
  184. package/lib/Form/index.d.ts +4 -0
  185. package/lib/Form/index.js +107 -0
  186. package/lib/Form/modal.d.ts +104 -0
  187. package/lib/Input/ButtonInput.d.ts +4 -0
  188. package/lib/Input/ButtonInput.js +83 -0
  189. package/lib/Input/InputNumber.d.ts +4 -0
  190. package/lib/Input/InputNumber.js +23 -0
  191. package/lib/Input/SelectInput.d.ts +9 -0
  192. package/lib/Input/SelectInput.js +101 -0
  193. package/lib/Input/defaultConfig.d.ts +7 -0
  194. package/lib/Input/defaultConfig.js +13 -0
  195. package/lib/Input/index.d.ts +4 -0
  196. package/lib/Input/index.js +16 -0
  197. package/lib/Input/modal.d.ts +27 -0
  198. package/lib/PageHandler/ErrorComponent.d.ts +4 -0
  199. package/lib/PageHandler/ErrorComponent.js +36 -0
  200. package/lib/PageHandler/LoadingComponent.d.ts +3 -0
  201. package/lib/PageHandler/LoadingComponent.js +21 -0
  202. package/lib/PageHandler/index.d.ts +4 -0
  203. package/lib/PageHandler/index.js +27 -0
  204. package/lib/PageHandler/modal.d.ts +6 -0
  205. package/lib/RadioGroup/index.d.ts +9 -0
  206. package/lib/RadioGroup/index.js +51 -0
  207. package/lib/Select/components/AllSelect.d.ts +3 -3
  208. package/lib/Select/components/AllSelect.js +29 -13
  209. package/lib/Select/components/NotFoundContent.js +1 -3
  210. package/lib/Select/defaultConfig.d.ts +0 -1
  211. package/lib/Select/defaultConfig.js +0 -5
  212. package/lib/Select/hooks/changeHooks.d.ts +1 -1
  213. package/lib/Select/hooks/changeHooks.js +7 -3
  214. package/lib/Select/hooks/norHooks.d.ts +4 -6
  215. package/lib/Select/hooks/norHooks.js +18 -35
  216. package/lib/Select/index.d.ts +1 -1
  217. package/lib/Select/index.js +26 -14
  218. package/lib/Select/modal.d.ts +2 -2
  219. package/lib/Select/utils.d.ts +2 -0
  220. package/lib/Select/utils.js +41 -0
  221. package/lib/Submit/index.d.ts +8 -0
  222. package/lib/Submit/index.js +31 -0
  223. package/lib/Switch/index.d.ts +11 -0
  224. package/lib/Switch/index.js +48 -0
  225. package/lib/TDPicker/RangePicker.d.ts +8 -0
  226. package/lib/TDPicker/RangePicker.js +124 -0
  227. package/lib/TDPicker/TimePicker.d.ts +4 -0
  228. package/lib/TDPicker/TimePicker.js +34 -0
  229. package/lib/TDPicker/hooks.d.ts +33 -0
  230. package/lib/TDPicker/hooks.js +139 -0
  231. package/lib/TDPicker/index.d.ts +4 -0
  232. package/lib/TDPicker/index.js +36 -0
  233. package/lib/TDPicker/modal.d.ts +28 -0
  234. package/lib/TextArea/index.d.ts +4 -0
  235. package/lib/TextArea/index.js +24 -0
  236. package/lib/Upload/Btn.d.ts +4 -0
  237. package/lib/Upload/Btn.js +34 -0
  238. package/lib/Upload/MediaTypeEle/TypeEle.d.ts +10 -0
  239. package/lib/Upload/MediaTypeEle/TypeEle.js +43 -0
  240. package/lib/Upload/MediaTypeEle/index.d.ts +4 -0
  241. package/lib/Upload/MediaTypeEle/index.js +39 -0
  242. package/lib/Upload/Preview/index.d.ts +6 -0
  243. package/lib/Upload/Preview/index.js +24 -0
  244. package/lib/Upload/UrlUpload/index.d.ts +4 -0
  245. package/lib/Upload/UrlUpload/index.js +122 -0
  246. package/lib/Upload/enums.d.ts +5 -0
  247. package/lib/Upload/enums.js +9 -0
  248. package/lib/Upload/hooks/change.d.ts +3 -0
  249. package/lib/Upload/hooks/change.js +110 -0
  250. package/lib/Upload/hooks/customRequest.d.ts +3 -0
  251. package/lib/Upload/hooks/customRequest.js +133 -0
  252. package/lib/Upload/hooks/propsMaker.d.ts +2 -0
  253. package/lib/Upload/hooks/propsMaker.js +38 -0
  254. package/lib/Upload/index.d.ts +3 -0
  255. package/lib/Upload/index.js +143 -0
  256. package/lib/Upload/modal.d.ts +30 -0
  257. package/lib/Upload/util.d.ts +5 -0
  258. package/lib/Upload/util.js +38 -0
  259. package/lib/config.d.ts +2 -0
  260. package/lib/config.js +65 -0
  261. package/lib/hooks/index.d.ts +13 -0
  262. package/lib/hooks/index.js +78 -0
  263. package/lib/index.css +33 -1
  264. package/lib/index.d.ts +24 -1
  265. package/lib/index.js +48 -3
  266. package/lib/modal.d.ts +15 -0
  267. package/package.json +4 -3
  268. package/scripts/rollup.config.js +3 -8
  269. package/scripts/webpack.config.js +6 -2
  270. package/src/Layout.tsx +4 -4
  271. package/src/components/CheckboxGroup/CheckBox/index.tsx +38 -0
  272. package/src/components/CheckboxGroup/hooks.ts +102 -0
  273. package/src/components/CheckboxGroup/index.tsx +79 -0
  274. package/src/components/CheckboxGroup/modal.ts +15 -0
  275. package/src/components/DialogForm/DrawerForm/Footer.tsx +19 -0
  276. package/src/components/DialogForm/DrawerForm/Title.tsx +12 -0
  277. package/src/components/DialogForm/DrawerForm/index.tsx +85 -0
  278. package/src/components/DialogForm/ModalForm.tsx +60 -0
  279. package/src/components/DialogForm/hooks.ts +87 -0
  280. package/src/components/DialogForm/modal.ts +27 -0
  281. package/src/components/Form/Context/FormConfigProvider.tsx +38 -0
  282. package/src/components/Form/Context/index.tsx +14 -0
  283. package/src/components/Form/FormItem/BasicItem.tsx +70 -0
  284. package/src/components/Form/FormItem/Helper.tsx +25 -0
  285. package/src/components/Form/FormItem/RegularFormItem.tsx +7 -0
  286. package/src/components/Form/FormItem/UpFormItem.tsx +20 -0
  287. package/src/components/Form/FormItem/hooks.tsx +44 -0
  288. package/src/components/Form/FormItem/index.tsx +8 -0
  289. package/src/components/Form/HFormConnect.tsx +67 -0
  290. package/src/components/Form/InitSet.tsx +10 -0
  291. package/src/components/Form/Label.tsx +50 -0
  292. package/src/components/Form/config.ts +41 -0
  293. package/src/components/Form/hooks/index.ts +22 -0
  294. package/src/components/Form/hooks/useHForm.ts +142 -0
  295. package/src/components/Form/hooks/useInitConfigData.tsx +100 -0
  296. package/src/components/Form/index.less +22 -0
  297. package/src/components/Form/index.tsx +79 -0
  298. package/src/components/Form/modal.ts +154 -0
  299. package/src/components/Input/ButtonInput.tsx +41 -0
  300. package/src/components/Input/InputNumber.tsx +5 -0
  301. package/src/components/Input/SelectInput.tsx +76 -0
  302. package/src/components/Input/defaultConfig.ts +8 -0
  303. package/src/components/Input/index.tsx +6 -0
  304. package/src/components/Input/modal.ts +33 -0
  305. package/src/components/PageHandler/ErrorComponent.tsx +20 -0
  306. package/src/components/PageHandler/LoadingComponent.tsx +9 -0
  307. package/src/components/PageHandler/index.tsx +14 -0
  308. package/src/components/PageHandler/modal.ts +6 -0
  309. package/src/components/RadioGroup/index.tsx +45 -0
  310. package/src/components/Select/components/AllSelect.tsx +32 -16
  311. package/src/components/Select/components/DropdownComponent.tsx +1 -0
  312. package/src/components/Select/components/NotFoundContent.tsx +1 -1
  313. package/src/components/Select/defaultConfig.tsx +0 -5
  314. package/src/components/Select/hooks/changeHooks.tsx +14 -4
  315. package/src/components/Select/hooks/norHooks.ts +8 -19
  316. package/src/components/Select/index.less +20 -3
  317. package/src/components/Select/index.tsx +29 -17
  318. package/src/components/Select/modal.ts +9 -9
  319. package/src/components/Select/utils.ts +18 -0
  320. package/src/components/Submit/index.tsx +28 -0
  321. package/src/components/Switch/index.tsx +52 -0
  322. package/src/components/TDPicker/RangePicker.tsx +105 -0
  323. package/src/components/TDPicker/TimePicker.tsx +15 -0
  324. package/src/components/TDPicker/hooks.ts +150 -0
  325. package/src/components/TDPicker/index.tsx +22 -0
  326. package/src/components/TDPicker/modal.ts +30 -0
  327. package/src/components/TextArea/index.tsx +8 -0
  328. package/src/components/Upload/Btn.tsx +24 -0
  329. package/src/components/Upload/MediaTypeEle/TypeEle.tsx +26 -0
  330. package/src/components/Upload/MediaTypeEle/index.tsx +34 -0
  331. package/src/components/Upload/Preview/index.tsx +14 -0
  332. package/src/components/Upload/UrlUpload/index.tsx +91 -0
  333. package/src/components/Upload/enums.ts +5 -0
  334. package/src/components/Upload/hooks/change.ts +79 -0
  335. package/src/components/Upload/hooks/customRequest.ts +87 -0
  336. package/src/components/Upload/hooks/propsMaker.ts +20 -0
  337. package/src/components/Upload/index.tsx +117 -0
  338. package/src/components/Upload/modal.ts +33 -0
  339. package/src/components/Upload/util.ts +27 -0
  340. package/src/components/config.ts +40 -0
  341. package/src/components/hooks/index.ts +53 -0
  342. package/src/components/index.tsx +27 -1
  343. package/src/components/modal.ts +15 -0
  344. package/src/components/styles/index.less +2 -0
  345. package/src/components/styles/local.less +1 -0
  346. package/src/pages/Checkbox/index.tsx +15 -0
  347. package/src/pages/DatePicker/index.tsx +33 -0
  348. package/src/pages/DrawerForm/index.tsx +127 -0
  349. package/src/pages/Form/index.tsx +149 -0
  350. package/src/pages/Input/index.tsx +22 -0
  351. package/src/pages/ModalForm/index.tsx +127 -0
  352. package/src/pages/Radio/index.tsx +18 -0
  353. package/src/pages/Select/index.tsx +7 -4
  354. package/src/pages/Switch/index.tsx +18 -0
  355. package/src/pages/Upload/index.tsx +14 -0
  356. package/src/routes.tsx +55 -10
  357. package/es/Select/index.less.js +0 -5
  358. package/lib/Select/index.less.js +0 -8
@@ -0,0 +1,22 @@
1
+ import { useRequest } from "ahooks";
2
+ import type { HFormProps } from "@/components/Form/modal";
3
+ import useHForm from "./useHForm";
4
+ import type { HFormInstance } from "@/components/Form/modal";
5
+ export const useCurrentForm = (form?: HFormInstance) => {
6
+ const selfForm = useHForm();
7
+ return form || selfForm;
8
+ };
9
+ type ParamsModal = Omit<HFormProps, "configData">;
10
+
11
+ export const useSub = ({ request, onFinish, form }: ParamsModal) => {
12
+ return useRequest(
13
+ async (value) => {
14
+ const subVal = form?.outputValues(value);
15
+ if (request) {
16
+ await request(subVal);
17
+ }
18
+ onFinish?.(subVal);
19
+ },
20
+ { manual: true }
21
+ );
22
+ }; //提交
@@ -0,0 +1,142 @@
1
+ import { useMemo } from "react";
2
+ import { Form } from "antd";
3
+ import type { FormatItemModal, HFormInstance } from "../modal";
4
+ import type { argsFn } from "../modal";
5
+
6
+ interface DispatchItemData {
7
+ keysFn: Record<string, argsFn>;
8
+ defaultFn: argsFn[];
9
+ }
10
+
11
+ export default () => {
12
+ const [form] = Form.useForm();
13
+ return useMemo<HFormInstance>(() => {
14
+ const formatSourceData: Record<string, FormatItemModal> = {};
15
+ let dispatchSourceData: Record<string, DispatchItemData> = {};
16
+ let cacheValues: Record<string, any> = {};
17
+ const norAddItemDispatch = (name, fn) => {
18
+ if (!name) {
19
+ return {
20
+ keysFn: {},
21
+ defaultFn: [fn],
22
+ };
23
+ }
24
+ return {
25
+ keysFn: {
26
+ [name]: fn,
27
+ },
28
+ defaultFn: [],
29
+ };
30
+ };
31
+ return {
32
+ initValues() {
33
+ if (cacheValues) {
34
+ const newValue = this.formatValues(cacheValues);
35
+ form.setFieldsValue(newValue);
36
+ }
37
+ },
38
+ addFormat(name: string, format?: FormatItemModal) {
39
+ if (!format) {
40
+ return;
41
+ }
42
+ const { inputValue, outputValue } = format;
43
+ formatSourceData[name] = {
44
+ inputValue,
45
+ outputValue,
46
+ };
47
+ }, //注册转化方法
48
+ formatValues(value = {}, formatKey = "inputValue") {
49
+ const valKeys = Object.keys(value).length;
50
+ if (!valKeys) {
51
+ return {};
52
+ }
53
+ let newValue = { ...value };
54
+ const keys = Object.keys(formatSourceData);
55
+ keys.forEach((key) => {
56
+ const format = formatSourceData[key]?.[formatKey];
57
+ if (!format) {
58
+ return;
59
+ }
60
+ const resultValue = format(value);
61
+ Reflect.deleteProperty(newValue, key);
62
+ newValue = {
63
+ ...newValue,
64
+ ...resultValue,
65
+ };
66
+ });
67
+ return newValue;
68
+ }, //转化方法
69
+ dispatch(action, ...args) {
70
+ const { key, name } = action;
71
+ const items = dispatchSourceData[key];
72
+ if (!items) {
73
+ return;
74
+ }
75
+ const { keysFn, defaultFn } = items;
76
+ if (name) {
77
+ return keysFn[name]?.(...args);
78
+ }
79
+ const fnArrays = Object.keys(keysFn).map((itemKey) => {
80
+ return keysFn[itemKey];
81
+ }); //不存在name就合并
82
+ [...fnArrays, ...defaultFn].forEach((fn) => {
83
+ fn(...args);
84
+ });
85
+ },
86
+ addDispatchListener(action, fn) {
87
+ const { key, name } = action;
88
+ const items = dispatchSourceData[key];
89
+ if (!items) {
90
+ dispatchSourceData[key] = norAddItemDispatch(name, fn);
91
+ return;
92
+ }
93
+ const { keysFn, defaultFn } = items;
94
+ if (name) {
95
+ keysFn[name] = fn;
96
+ } else {
97
+ defaultFn.push(fn);
98
+ }
99
+ dispatchSourceData[key] = {
100
+ keysFn,
101
+ defaultFn,
102
+ };
103
+ },
104
+ removeDispatchListener(action) {
105
+ if (!action) {
106
+ dispatchSourceData = {};
107
+ return;
108
+ }
109
+ const { key, name } = action;
110
+ const items = dispatchSourceData[key];
111
+ if (!items) {
112
+ return;
113
+ }
114
+ if (name) {
115
+ const { keysFn } = items;
116
+ Reflect.deleteProperty(keysFn, name);
117
+ items.keysFn = keysFn;
118
+ dispatchSourceData[key] = items;
119
+ return;
120
+ }
121
+ Reflect.deleteProperty(dispatchSourceData, key);
122
+ },
123
+ outputValues(value) {
124
+ return this.formatValues(value, "outputValue");
125
+ },
126
+ ...form,
127
+ setFieldsValue(values) {
128
+ const newValue = this.formatValues(values);
129
+ cacheValues = values;
130
+ form.setFieldsValue(newValue);
131
+ },
132
+ validateFields(nameList) {
133
+ return new Promise((resolve) => {
134
+ form.validateFields(nameList).then((value) => {
135
+ const result = this.formatValues(value, "outputValue");
136
+ return resolve(result);
137
+ });
138
+ });
139
+ },
140
+ };
141
+ }, []);
142
+ };
@@ -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 0 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,79 @@
1
+ import { Form } from "antd";
2
+ import type { HFormProps } from "./modal";
3
+ import Item from "./FormItem";
4
+ import { useCurrentForm, useSub } from "./hooks";
5
+ import { FormContext } from "./Context";
6
+ import PageHandler from "../PageHandler";
7
+ import useInitConfigData from "./hooks/useInitConfigData";
8
+ import { useEffect } from "react";
9
+ import { useRequest } from "ahooks";
10
+ import InitSet from "./InitSet";
11
+
12
+ export default ({
13
+ configData,
14
+ labelWidth,
15
+ form,
16
+ request,
17
+ onFinish,
18
+ infoRequest,
19
+ valueType = "float",
20
+ initialValues,
21
+ ...props
22
+ }: HFormProps) => {
23
+ const hForm = useCurrentForm(form);
24
+ const newConfigData = useInitConfigData({
25
+ configData,
26
+ form: hForm,
27
+ });
28
+ const { run, loading } = useSub({
29
+ request,
30
+ onFinish,
31
+ valueType,
32
+ form: hForm,
33
+ });
34
+ const {
35
+ run: infoRun,
36
+ loading: infoLoading,
37
+ error: infoErr,
38
+ data: infoData,
39
+ } = useRequest(async () => {
40
+ let setValue = initialValues;
41
+ if (!initialValues && !infoRequest) {
42
+ return {};
43
+ }
44
+ if (infoRequest) {
45
+ setValue = await infoRequest();
46
+ }
47
+ hForm.setFieldsValue(setValue);
48
+ return setValue;
49
+ });
50
+ useEffect(() => {
51
+ return () => {
52
+ hForm.removeDispatchListener();
53
+ };
54
+ }, []);
55
+ return (
56
+ <PageHandler
57
+ loading={infoLoading}
58
+ error={infoErr}
59
+ data={infoData}
60
+ reload={infoRun}
61
+ >
62
+ <FormContext.Provider value={{ loading, form: hForm, valueType }}>
63
+ <Form form={hForm} onFinish={run} {...props}>
64
+ {newConfigData.map((itemData, index) => {
65
+ const { labelWidth: itemLabelWidth } = itemData;
66
+ return (
67
+ <Item
68
+ {...itemData}
69
+ key={index}
70
+ labelWidth={itemLabelWidth || labelWidth}
71
+ />
72
+ );
73
+ })}
74
+ <InitSet />
75
+ </Form>
76
+ </FormContext.Provider>
77
+ </PageHandler>
78
+ );
79
+ };
@@ -0,0 +1,154 @@
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
+ import type { ForwardedRef } from "react";
29
+ type RenderFun = (
30
+ props: HItemProps,
31
+ node: React.ReactNode,
32
+ form: FormInstance
33
+ ) => void;
34
+ type ItemPropsType =
35
+ | HCheckboxProps
36
+ | HInputProps
37
+ | HSelectInputProps
38
+ | HButtonProps
39
+ | HRadioGroupProps
40
+ | HSelectProps
41
+ | ButtonProps
42
+ | HSwitchProps
43
+ | HDatePickerProps
44
+ | HRangePickerProps
45
+ | HTimePickerProps
46
+ | TextAreaProps
47
+ | IUpLoadProps;
48
+
49
+ export interface HoverModal {
50
+ text?: string;
51
+ icon?: React.ReactNode;
52
+ }
53
+ type HelperModal = (form: HFormInstance) => React.ReactNode | string;
54
+
55
+ export type HideModal = (form: HFormInstance) => boolean;
56
+
57
+ export type AddDispatchListenerFn = (action: ActionModal, fn: argsFn) => void;
58
+
59
+ export interface HItemProps extends Omit<FormItemProps, "name"> {
60
+ type?: string;
61
+ itemProps?: ItemPropsType;
62
+ render?: RenderFun;
63
+ helper?: HelperModal | string;
64
+ hover?: string | HoverModal;
65
+ // formItems?: HItemProps[]; 保留感觉没必要
66
+ labelWidth?: number;
67
+ hide?: boolean | HideModal;
68
+ placeholder?: string | string[];
69
+ // formatKeys?: string[];
70
+ name?: string;
71
+ }
72
+
73
+ export interface HFormProps<T = any, R = any> extends Omit<FormProps, "form"> {
74
+ configData: HItemProps[];
75
+ labelWidth?: number;
76
+ request?: PromiseFnResult<T, R>;
77
+ infoRequest?: () => Promise<T>;
78
+ valueType?: string;
79
+ form?: HFormInstance;
80
+ }
81
+
82
+ export interface HFormItemProps extends HItemProps {
83
+ required?: boolean;
84
+ value?: any;
85
+ onChange?: (val: any, item: any) => void;
86
+ }
87
+ export interface FormItemWithRender extends Omit<HFormItemProps, "render"> {
88
+ render: (form: HFormInstance) => React.ReactNode;
89
+ }
90
+ export type argsFn = (...args: any[]) => void;
91
+ export interface FormContextProps {
92
+ loading?: boolean;
93
+ form: HFormInstance;
94
+ valueType?: string;
95
+ }
96
+ interface ConfigUploadProps {
97
+ exFiles?: string[];
98
+ maxSize?: number;
99
+ request?: PromiseFnResult;
100
+ }
101
+
102
+ export interface IFormConfigContextProps {
103
+ fieldNames?: SelectProps["fieldNames"];
104
+ valueCheckMap?: ValueCheckMapModal;
105
+ valueSwitchMap?: ValueSwitchMapModal;
106
+ valueRangePickerValueMap?: DateRangePickerValueMapModal;
107
+ dateRanges?: RangePickerProps["ranges"];
108
+ uploadProps?: ConfigUploadProps;
109
+ }
110
+ interface ActionModal {
111
+ key: string;
112
+ name?: string;
113
+ }
114
+ export interface HFormInstance extends FormInstance {
115
+ addFormat: (name: string, formats?: FormatItemModal) => void;
116
+ initValues: VoidFunction;
117
+ formatValues: (
118
+ values?: Record<string, any>,
119
+ formatKey?: string
120
+ ) => Record<string, any>;
121
+ dispatch: (action: ActionModal, ...args: any[]) => void;
122
+ outputValues: (values?: Record<string, any>) => Record<string, any>;
123
+ addDispatchListener: AddDispatchListenerFn;
124
+ removeDispatchListener: (action?: ActionModal, fn?: argsFn) => void;
125
+ }
126
+
127
+ export interface ConnectConfigModal {
128
+ format?: Record<string, addFormatItemModal>;
129
+ }
130
+
131
+ type ValueFormat = (value: Record<string, any>) => Record<string, any>;
132
+
133
+ export interface FormatItemModal {
134
+ inputValue: ValueFormat;
135
+ outputValue: ValueFormat;
136
+ }
137
+
138
+ type addValueFormat = (
139
+ item: HFormItemProps,
140
+ value: Record<string, any>
141
+ ) => Record<string, any>;
142
+
143
+ export interface addFormatItemModal {
144
+ inputValue: addValueFormat;
145
+ outputValue: addValueFormat;
146
+ }
147
+
148
+ export interface ConnectResultProps extends HFormItemProps {
149
+ addFormat?: (format: Record<string, addFormatItemModal>) => void;
150
+ addDispatchListener?: (key: string, fn: argsFn) => void;
151
+ ref?: ForwardedRef<any>;
152
+ value?: any;
153
+ onChange?: (value: any, item?: any) => void;
154
+ }
@@ -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,76 @@
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
+ import { ConnectResultProps } from "@/components/Form/modal";
7
+ export enum SelectInputType {
8
+ input,
9
+ select,
10
+ }
11
+ export const Index = ({
12
+ selectProps = {},
13
+ value = {},
14
+ onChange,
15
+ valueName = defaultValueName,
16
+ addFormat,
17
+ addDispatchListener,
18
+ ...props
19
+ }: HSelectInputProps) => {
20
+ const { input = "", select = "" } = valueName;
21
+ const { [input]: inputVal, [select]: selectVal } = value;
22
+ const {
23
+ style = defaultSelectStyle,
24
+ placeholder = "请选择",
25
+ ...sProps
26
+ } = selectProps;
27
+ const change = (val, key) => {
28
+ const newVal = { ...value };
29
+ newVal[key] = val;
30
+ const type = key === input ? SelectInputType.input : SelectInputType.select;
31
+ onChange?.(newVal, type);
32
+ };
33
+ addFormat?.({
34
+ float: {
35
+ inputValue: (item, initValue) => {
36
+ const { name = "" } = item;
37
+ const resultObj = {};
38
+ Object.values(valueName).forEach((key) => {
39
+ resultObj[key] = initValue[key];
40
+ });
41
+ return {
42
+ [name]: resultObj,
43
+ };
44
+ },
45
+ outputValue: (item, outputValue) => {
46
+ const { name = "" } = item;
47
+ const { [name]: itemVal = {} } = outputValue;
48
+ const newItemVal = { [itemVal[select]]: itemVal[input] };
49
+ return {
50
+ ...newItemVal,
51
+ };
52
+ },
53
+ },
54
+ });
55
+ return (
56
+ <Input
57
+ value={inputVal}
58
+ onChange={(e) => {
59
+ change(e.target.value, input);
60
+ }}
61
+ addonBefore={
62
+ <HSelect
63
+ {...sProps}
64
+ style={style}
65
+ placeholder={placeholder}
66
+ value={selectVal}
67
+ onChange={(val) => {
68
+ change(val, select);
69
+ }}
70
+ />
71
+ }
72
+ {...props}
73
+ />
74
+ );
75
+ };
76
+ 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,33 @@
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
+ import type { AddDispatchListenerFn } from "../Form/modal";
7
+
8
+ export type HInputProps = InputProps;
9
+
10
+ interface ValueNameModal {
11
+ input?: string;
12
+ select?: string;
13
+ }
14
+
15
+ export interface HSelectInputProps
16
+ extends Omit<HInputProps, "value" | "onChange"> {
17
+ selectProps?: HSelectProps;
18
+ value?: Record<string, any>;
19
+ onChange?: (value: Record<string, any>, type: SelectInputType) => void;
20
+ valueName?: ValueNameModal;
21
+ addFormat?: (config: Record<string, addFormatItemModal>) => void;
22
+ addDispatchListener?: AddDispatchListenerFn;
23
+ }
24
+ export interface HButtonProps extends Omit<ButtonProps, "onClick"> {
25
+ onClick: (
26
+ value: string | readonly string[] | number | undefined,
27
+ e: HTMLElement
28
+ ) => void;
29
+ }
30
+ export interface HButtonInputProps extends HInputProps {
31
+ buttonProps?: HButtonProps;
32
+ request?: PromiseFnResult;
33
+ }