@formily-design/formily-antd 1.0.0

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 (584) hide show
  1. package/.umirc.js +44 -0
  2. package/LICENSE.md +20 -0
  3. package/README.md +106 -0
  4. package/copy.ts +6 -0
  5. package/esm/common/Container/index.d.ts +6 -0
  6. package/esm/common/Container/index.js +13 -0
  7. package/esm/common/Container/styles.less +5 -0
  8. package/esm/common/FormItemSwitcher/index.d.ts +6 -0
  9. package/esm/common/FormItemSwitcher/index.js +7 -0
  10. package/esm/common/LoadTemplate/index.d.ts +13 -0
  11. package/esm/common/LoadTemplate/index.js +8 -0
  12. package/esm/components/ArrayBase/index.d.ts +1 -0
  13. package/esm/components/ArrayBase/index.js +71 -0
  14. package/esm/components/ArrayCards/index.d.ts +1 -0
  15. package/esm/components/ArrayCards/index.js +1 -0
  16. package/esm/components/ArrayCards/preview.d.ts +4 -0
  17. package/esm/components/ArrayCards/preview.js +206 -0
  18. package/esm/components/ArrayCards/styles.less +2 -0
  19. package/esm/components/ArrayTable/index.d.ts +1 -0
  20. package/esm/components/ArrayTable/index.js +1 -0
  21. package/esm/components/ArrayTable/preview.d.ts +4 -0
  22. package/esm/components/ArrayTable/preview.js +384 -0
  23. package/esm/components/ArrayTable/styles.less +2 -0
  24. package/esm/components/Card/index.d.ts +1 -0
  25. package/esm/components/Card/index.js +1 -0
  26. package/esm/components/Card/preview.d.ts +4 -0
  27. package/esm/components/Card/preview.js +34 -0
  28. package/esm/components/Cascader/index.d.ts +1 -0
  29. package/esm/components/Cascader/index.js +1 -0
  30. package/esm/components/Cascader/preview.d.ts +4 -0
  31. package/esm/components/Cascader/preview.js +28 -0
  32. package/esm/components/Checkbox/index.d.ts +1 -0
  33. package/esm/components/Checkbox/index.js +1 -0
  34. package/esm/components/Checkbox/preview.d.ts +4 -0
  35. package/esm/components/Checkbox/preview.js +33 -0
  36. package/esm/components/DatePicker/index.d.ts +1 -0
  37. package/esm/components/DatePicker/index.js +1 -0
  38. package/esm/components/DatePicker/preview.d.ts +4 -0
  39. package/esm/components/DatePicker/preview.js +50 -0
  40. package/esm/components/Field/index.d.ts +2 -0
  41. package/esm/components/Field/index.js +2 -0
  42. package/esm/components/Field/preview.d.ts +3 -0
  43. package/esm/components/Field/preview.js +127 -0
  44. package/esm/components/Field/shared.d.ts +649 -0
  45. package/esm/components/Field/shared.js +242 -0
  46. package/esm/components/Form/index.d.ts +1 -0
  47. package/esm/components/Form/index.js +1 -0
  48. package/esm/components/Form/preview.d.ts +5 -0
  49. package/esm/components/Form/preview.js +81 -0
  50. package/esm/components/Form/styles.less +32 -0
  51. package/esm/components/FormCollapse/index.d.ts +1 -0
  52. package/esm/components/FormCollapse/index.js +1 -0
  53. package/esm/components/FormCollapse/preview.d.ts +6 -0
  54. package/esm/components/FormCollapse/preview.js +116 -0
  55. package/esm/components/FormGrid/index.d.ts +1 -0
  56. package/esm/components/FormGrid/index.js +1 -0
  57. package/esm/components/FormGrid/preview.d.ts +9 -0
  58. package/esm/components/FormGrid/preview.js +131 -0
  59. package/esm/components/FormGrid/styles.less +5 -0
  60. package/esm/components/FormLayout/index.d.ts +1 -0
  61. package/esm/components/FormLayout/index.js +1 -0
  62. package/esm/components/FormLayout/preview.d.ts +4 -0
  63. package/esm/components/FormLayout/preview.js +29 -0
  64. package/esm/components/FormTab/index.d.ts +1 -0
  65. package/esm/components/FormTab/index.js +1 -0
  66. package/esm/components/FormTab/preview.d.ts +6 -0
  67. package/esm/components/FormTab/preview.js +123 -0
  68. package/esm/components/Input/index.d.ts +1 -0
  69. package/esm/components/Input/index.js +1 -0
  70. package/esm/components/Input/preview.d.ts +4 -0
  71. package/esm/components/Input/preview.js +50 -0
  72. package/esm/components/NumberPicker/index.d.ts +1 -0
  73. package/esm/components/NumberPicker/index.js +1 -0
  74. package/esm/components/NumberPicker/preview.d.ts +4 -0
  75. package/esm/components/NumberPicker/preview.js +29 -0
  76. package/esm/components/Object/index.d.ts +1 -0
  77. package/esm/components/Object/index.js +1 -0
  78. package/esm/components/Object/preview.d.ts +4 -0
  79. package/esm/components/Object/preview.js +26 -0
  80. package/esm/components/Password/index.d.ts +1 -0
  81. package/esm/components/Password/index.js +1 -0
  82. package/esm/components/Password/preview.d.ts +4 -0
  83. package/esm/components/Password/preview.js +28 -0
  84. package/esm/components/Radio/index.d.ts +1 -0
  85. package/esm/components/Radio/index.js +1 -0
  86. package/esm/components/Radio/preview.d.ts +4 -0
  87. package/esm/components/Radio/preview.js +33 -0
  88. package/esm/components/Rate/index.d.ts +1 -0
  89. package/esm/components/Rate/index.js +1 -0
  90. package/esm/components/Rate/preview.d.ts +4 -0
  91. package/esm/components/Rate/preview.js +29 -0
  92. package/esm/components/Select/index.d.ts +1 -0
  93. package/esm/components/Select/index.js +1 -0
  94. package/esm/components/Select/preview.d.ts +4 -0
  95. package/esm/components/Select/preview.js +28 -0
  96. package/esm/components/Slider/index.d.ts +1 -0
  97. package/esm/components/Slider/index.js +1 -0
  98. package/esm/components/Slider/preview.d.ts +4 -0
  99. package/esm/components/Slider/preview.js +29 -0
  100. package/esm/components/Space/index.d.ts +1 -0
  101. package/esm/components/Space/index.js +1 -0
  102. package/esm/components/Space/preview.d.ts +4 -0
  103. package/esm/components/Space/preview.js +30 -0
  104. package/esm/components/Switch/index.d.ts +1 -0
  105. package/esm/components/Switch/index.js +1 -0
  106. package/esm/components/Switch/preview.d.ts +4 -0
  107. package/esm/components/Switch/preview.js +29 -0
  108. package/esm/components/Text/index.d.ts +1 -0
  109. package/esm/components/Text/index.js +1 -0
  110. package/esm/components/Text/preview.d.ts +11 -0
  111. package/esm/components/Text/preview.js +32 -0
  112. package/esm/components/Text/styles.less +10 -0
  113. package/esm/components/TimePicker/index.d.ts +1 -0
  114. package/esm/components/TimePicker/index.js +1 -0
  115. package/esm/components/TimePicker/preview.d.ts +4 -0
  116. package/esm/components/TimePicker/preview.js +50 -0
  117. package/esm/components/Transfer/index.d.ts +1 -0
  118. package/esm/components/Transfer/index.js +1 -0
  119. package/esm/components/Transfer/preview.d.ts +4 -0
  120. package/esm/components/Transfer/preview.js +28 -0
  121. package/esm/components/TreeSelect/index.d.ts +1 -0
  122. package/esm/components/TreeSelect/index.js +1 -0
  123. package/esm/components/TreeSelect/preview.d.ts +4 -0
  124. package/esm/components/TreeSelect/preview.js +28 -0
  125. package/esm/components/Upload/index.d.ts +1 -0
  126. package/esm/components/Upload/index.js +1 -0
  127. package/esm/components/Upload/preview.d.ts +4 -0
  128. package/esm/components/Upload/preview.js +56 -0
  129. package/esm/components/index.d.ts +27 -0
  130. package/esm/components/index.js +27 -0
  131. package/esm/hooks/index.d.ts +1 -0
  132. package/esm/hooks/index.js +1 -0
  133. package/esm/hooks/useDropTemplate.d.ts +2 -0
  134. package/esm/hooks/useDropTemplate.js +20 -0
  135. package/esm/index.d.ts +3 -0
  136. package/esm/index.js +3 -0
  137. package/esm/locales/ArrayBase.d.ts +77 -0
  138. package/esm/locales/ArrayBase.js +91 -0
  139. package/esm/locales/ArrayCards.d.ts +1 -0
  140. package/esm/locales/ArrayCards.js +19 -0
  141. package/esm/locales/ArrayTable.d.ts +138 -0
  142. package/esm/locales/ArrayTable.js +129 -0
  143. package/esm/locales/Card.d.ts +44 -0
  144. package/esm/locales/Card.js +44 -0
  145. package/esm/locales/Cascader.d.ts +59 -0
  146. package/esm/locales/Cascader.js +59 -0
  147. package/esm/locales/Checkbox.d.ts +11 -0
  148. package/esm/locales/Checkbox.js +11 -0
  149. package/esm/locales/Component.d.ts +53 -0
  150. package/esm/locales/Component.js +53 -0
  151. package/esm/locales/DatePicker.d.ts +75 -0
  152. package/esm/locales/DatePicker.js +86 -0
  153. package/esm/locales/Field.d.ts +341 -0
  154. package/esm/locales/Field.js +338 -0
  155. package/esm/locales/Form.d.ts +1 -0
  156. package/esm/locales/Form.js +133 -0
  157. package/esm/locales/FormCollapse.d.ts +88 -0
  158. package/esm/locales/FormCollapse.js +82 -0
  159. package/esm/locales/FormGrid.d.ts +76 -0
  160. package/esm/locales/FormGrid.js +76 -0
  161. package/esm/locales/FormLayout.d.ts +128 -0
  162. package/esm/locales/FormLayout.js +122 -0
  163. package/esm/locales/FormTab.d.ts +82 -0
  164. package/esm/locales/FormTab.js +82 -0
  165. package/esm/locales/Input.d.ts +50 -0
  166. package/esm/locales/Input.js +50 -0
  167. package/esm/locales/NumberPicker.d.ts +77 -0
  168. package/esm/locales/NumberPicker.js +77 -0
  169. package/esm/locales/Object.d.ts +11 -0
  170. package/esm/locales/Object.js +11 -0
  171. package/esm/locales/Password.d.ts +1 -0
  172. package/esm/locales/Password.js +13 -0
  173. package/esm/locales/Radio.d.ts +47 -0
  174. package/esm/locales/Radio.js +29 -0
  175. package/esm/locales/Rate.d.ts +41 -0
  176. package/esm/locales/Rate.js +32 -0
  177. package/esm/locales/Select.d.ts +125 -0
  178. package/esm/locales/Select.js +125 -0
  179. package/esm/locales/Slider.d.ts +71 -0
  180. package/esm/locales/Slider.js +71 -0
  181. package/esm/locales/Space.d.ts +53 -0
  182. package/esm/locales/Space.js +50 -0
  183. package/esm/locales/Switch.d.ts +11 -0
  184. package/esm/locales/Switch.js +11 -0
  185. package/esm/locales/Text.d.ts +38 -0
  186. package/esm/locales/Text.js +38 -0
  187. package/esm/locales/TextArea.d.ts +35 -0
  188. package/esm/locales/TextArea.js +35 -0
  189. package/esm/locales/TimePicker.d.ts +2 -0
  190. package/esm/locales/TimePicker.js +72 -0
  191. package/esm/locales/Transfer.d.ts +56 -0
  192. package/esm/locales/Transfer.js +38 -0
  193. package/esm/locales/TreeSelect.d.ts +181 -0
  194. package/esm/locales/TreeSelect.js +178 -0
  195. package/esm/locales/Upload.d.ts +78 -0
  196. package/esm/locales/Upload.js +92 -0
  197. package/esm/locales/Void.d.ts +11 -0
  198. package/esm/locales/Void.js +11 -0
  199. package/esm/locales/all.d.ts +31 -0
  200. package/esm/locales/all.js +31 -0
  201. package/esm/locales/index.d.ts +2 -0
  202. package/esm/locales/index.js +2 -0
  203. package/esm/schemas/ArrayCards.d.ts +59 -0
  204. package/esm/schemas/ArrayCards.js +4 -0
  205. package/esm/schemas/ArrayTable.d.ts +5 -0
  206. package/esm/schemas/ArrayTable.js +111 -0
  207. package/esm/schemas/CSSStyle.d.ts +2 -0
  208. package/esm/schemas/CSSStyle.js +49 -0
  209. package/esm/schemas/Card.d.ts +4 -0
  210. package/esm/schemas/Card.js +45 -0
  211. package/esm/schemas/Cascader.d.ts +2 -0
  212. package/esm/schemas/Cascader.js +74 -0
  213. package/esm/schemas/Checkbox.d.ts +4 -0
  214. package/esm/schemas/Checkbox.js +10 -0
  215. package/esm/schemas/DatePicker.d.ts +4 -0
  216. package/esm/schemas/DatePicker.js +104 -0
  217. package/esm/schemas/Form.d.ts +2 -0
  218. package/esm/schemas/Form.js +6 -0
  219. package/esm/schemas/FormCollapse.d.ts +4 -0
  220. package/esm/schemas/FormCollapse.js +58 -0
  221. package/esm/schemas/FormGrid.d.ts +4 -0
  222. package/esm/schemas/FormGrid.js +76 -0
  223. package/esm/schemas/FormItem.d.ts +2 -0
  224. package/esm/schemas/FormItem.js +138 -0
  225. package/esm/schemas/FormLayout.d.ts +2 -0
  226. package/esm/schemas/FormLayout.js +121 -0
  227. package/esm/schemas/FormTab.d.ts +4 -0
  228. package/esm/schemas/FormTab.js +43 -0
  229. package/esm/schemas/Input.d.ts +4 -0
  230. package/esm/schemas/Input.js +89 -0
  231. package/esm/schemas/NumberPicker.d.ts +2 -0
  232. package/esm/schemas/NumberPicker.js +79 -0
  233. package/esm/schemas/Password.d.ts +2 -0
  234. package/esm/schemas/Password.js +9 -0
  235. package/esm/schemas/Radio.d.ts +4 -0
  236. package/esm/schemas/Radio.js +35 -0
  237. package/esm/schemas/Rate.d.ts +2 -0
  238. package/esm/schemas/Rate.js +38 -0
  239. package/esm/schemas/Select.d.ts +2 -0
  240. package/esm/schemas/Select.js +159 -0
  241. package/esm/schemas/Slider.d.ts +2 -0
  242. package/esm/schemas/Slider.js +77 -0
  243. package/esm/schemas/Space.d.ts +2 -0
  244. package/esm/schemas/Space.js +39 -0
  245. package/esm/schemas/Switch.d.ts +2 -0
  246. package/esm/schemas/Switch.js +19 -0
  247. package/esm/schemas/Text.d.ts +2 -0
  248. package/esm/schemas/Text.js +19 -0
  249. package/esm/schemas/TimePicker.d.ts +116 -0
  250. package/esm/schemas/TimePicker.js +120 -0
  251. package/esm/schemas/Transfer.d.ts +2 -0
  252. package/esm/schemas/Transfer.js +44 -0
  253. package/esm/schemas/TreeSelect.d.ts +2 -0
  254. package/esm/schemas/TreeSelect.js +137 -0
  255. package/esm/schemas/Upload.d.ts +4 -0
  256. package/esm/schemas/Upload.js +99 -0
  257. package/esm/schemas/all.d.ts +27 -0
  258. package/esm/schemas/all.js +27 -0
  259. package/esm/schemas/index.d.ts +2 -0
  260. package/esm/schemas/index.js +2 -0
  261. package/esm/shared.d.ts +13 -0
  262. package/esm/shared.js +86 -0
  263. package/lib/common/Container/index.d.ts +6 -0
  264. package/lib/common/Container/index.js +20 -0
  265. package/lib/common/Container/styles.less +5 -0
  266. package/lib/common/FormItemSwitcher/index.d.ts +6 -0
  267. package/lib/common/FormItemSwitcher/index.js +14 -0
  268. package/lib/common/LoadTemplate/index.d.ts +13 -0
  269. package/lib/common/LoadTemplate/index.js +15 -0
  270. package/lib/components/ArrayBase/index.d.ts +1 -0
  271. package/lib/components/ArrayBase/index.js +75 -0
  272. package/lib/components/ArrayCards/index.d.ts +1 -0
  273. package/lib/components/ArrayCards/index.js +17 -0
  274. package/lib/components/ArrayCards/preview.d.ts +4 -0
  275. package/lib/components/ArrayCards/preview.js +245 -0
  276. package/lib/components/ArrayCards/styles.less +2 -0
  277. package/lib/components/ArrayTable/index.d.ts +1 -0
  278. package/lib/components/ArrayTable/index.js +17 -0
  279. package/lib/components/ArrayTable/preview.d.ts +4 -0
  280. package/lib/components/ArrayTable/preview.js +390 -0
  281. package/lib/components/ArrayTable/styles.less +2 -0
  282. package/lib/components/Card/index.d.ts +1 -0
  283. package/lib/components/Card/index.js +17 -0
  284. package/lib/components/Card/preview.d.ts +4 -0
  285. package/lib/components/Card/preview.js +41 -0
  286. package/lib/components/Cascader/index.d.ts +1 -0
  287. package/lib/components/Cascader/index.js +17 -0
  288. package/lib/components/Cascader/preview.d.ts +4 -0
  289. package/lib/components/Cascader/preview.js +31 -0
  290. package/lib/components/Checkbox/index.d.ts +1 -0
  291. package/lib/components/Checkbox/index.js +17 -0
  292. package/lib/components/Checkbox/preview.d.ts +4 -0
  293. package/lib/components/Checkbox/preview.js +36 -0
  294. package/lib/components/DatePicker/index.d.ts +1 -0
  295. package/lib/components/DatePicker/index.js +17 -0
  296. package/lib/components/DatePicker/preview.d.ts +4 -0
  297. package/lib/components/DatePicker/preview.js +53 -0
  298. package/lib/components/Field/index.d.ts +2 -0
  299. package/lib/components/Field/index.js +18 -0
  300. package/lib/components/Field/preview.d.ts +3 -0
  301. package/lib/components/Field/preview.js +133 -0
  302. package/lib/components/Field/shared.d.ts +649 -0
  303. package/lib/components/Field/shared.js +248 -0
  304. package/lib/components/Form/index.d.ts +1 -0
  305. package/lib/components/Form/index.js +17 -0
  306. package/lib/components/Form/preview.d.ts +5 -0
  307. package/lib/components/Form/preview.js +117 -0
  308. package/lib/components/Form/styles.less +32 -0
  309. package/lib/components/FormCollapse/index.d.ts +1 -0
  310. package/lib/components/FormCollapse/index.js +17 -0
  311. package/lib/components/FormCollapse/preview.d.ts +6 -0
  312. package/lib/components/FormCollapse/preview.js +152 -0
  313. package/lib/components/FormGrid/index.d.ts +1 -0
  314. package/lib/components/FormGrid/index.js +17 -0
  315. package/lib/components/FormGrid/preview.d.ts +9 -0
  316. package/lib/components/FormGrid/preview.js +137 -0
  317. package/lib/components/FormGrid/styles.less +5 -0
  318. package/lib/components/FormLayout/index.d.ts +1 -0
  319. package/lib/components/FormLayout/index.js +17 -0
  320. package/lib/components/FormLayout/preview.d.ts +4 -0
  321. package/lib/components/FormLayout/preview.js +32 -0
  322. package/lib/components/FormTab/index.d.ts +1 -0
  323. package/lib/components/FormTab/index.js +17 -0
  324. package/lib/components/FormTab/preview.d.ts +6 -0
  325. package/lib/components/FormTab/preview.js +159 -0
  326. package/lib/components/Input/index.d.ts +1 -0
  327. package/lib/components/Input/index.js +17 -0
  328. package/lib/components/Input/preview.d.ts +4 -0
  329. package/lib/components/Input/preview.js +53 -0
  330. package/lib/components/NumberPicker/index.d.ts +1 -0
  331. package/lib/components/NumberPicker/index.js +17 -0
  332. package/lib/components/NumberPicker/preview.d.ts +4 -0
  333. package/lib/components/NumberPicker/preview.js +32 -0
  334. package/lib/components/Object/index.d.ts +1 -0
  335. package/lib/components/Object/index.js +17 -0
  336. package/lib/components/Object/preview.d.ts +4 -0
  337. package/lib/components/Object/preview.js +29 -0
  338. package/lib/components/Password/index.d.ts +1 -0
  339. package/lib/components/Password/index.js +17 -0
  340. package/lib/components/Password/preview.d.ts +4 -0
  341. package/lib/components/Password/preview.js +31 -0
  342. package/lib/components/Radio/index.d.ts +1 -0
  343. package/lib/components/Radio/index.js +17 -0
  344. package/lib/components/Radio/preview.d.ts +4 -0
  345. package/lib/components/Radio/preview.js +36 -0
  346. package/lib/components/Rate/index.d.ts +1 -0
  347. package/lib/components/Rate/index.js +17 -0
  348. package/lib/components/Rate/preview.d.ts +4 -0
  349. package/lib/components/Rate/preview.js +32 -0
  350. package/lib/components/Select/index.d.ts +1 -0
  351. package/lib/components/Select/index.js +17 -0
  352. package/lib/components/Select/preview.d.ts +4 -0
  353. package/lib/components/Select/preview.js +31 -0
  354. package/lib/components/Slider/index.d.ts +1 -0
  355. package/lib/components/Slider/index.js +17 -0
  356. package/lib/components/Slider/preview.d.ts +4 -0
  357. package/lib/components/Slider/preview.js +32 -0
  358. package/lib/components/Space/index.d.ts +1 -0
  359. package/lib/components/Space/index.js +17 -0
  360. package/lib/components/Space/preview.d.ts +4 -0
  361. package/lib/components/Space/preview.js +33 -0
  362. package/lib/components/Switch/index.d.ts +1 -0
  363. package/lib/components/Switch/index.js +17 -0
  364. package/lib/components/Switch/preview.d.ts +4 -0
  365. package/lib/components/Switch/preview.js +32 -0
  366. package/lib/components/Text/index.d.ts +1 -0
  367. package/lib/components/Text/index.js +17 -0
  368. package/lib/components/Text/preview.d.ts +11 -0
  369. package/lib/components/Text/preview.js +39 -0
  370. package/lib/components/Text/styles.less +10 -0
  371. package/lib/components/TimePicker/index.d.ts +1 -0
  372. package/lib/components/TimePicker/index.js +17 -0
  373. package/lib/components/TimePicker/preview.d.ts +4 -0
  374. package/lib/components/TimePicker/preview.js +53 -0
  375. package/lib/components/Transfer/index.d.ts +1 -0
  376. package/lib/components/Transfer/index.js +17 -0
  377. package/lib/components/Transfer/preview.d.ts +4 -0
  378. package/lib/components/Transfer/preview.js +31 -0
  379. package/lib/components/TreeSelect/index.d.ts +1 -0
  380. package/lib/components/TreeSelect/index.js +17 -0
  381. package/lib/components/TreeSelect/preview.d.ts +4 -0
  382. package/lib/components/TreeSelect/preview.js +31 -0
  383. package/lib/components/Upload/index.d.ts +1 -0
  384. package/lib/components/Upload/index.js +17 -0
  385. package/lib/components/Upload/preview.d.ts +4 -0
  386. package/lib/components/Upload/preview.js +59 -0
  387. package/lib/components/index.d.ts +27 -0
  388. package/lib/components/index.js +43 -0
  389. package/lib/hooks/index.d.ts +1 -0
  390. package/lib/hooks/index.js +17 -0
  391. package/lib/hooks/useDropTemplate.d.ts +2 -0
  392. package/lib/hooks/useDropTemplate.js +24 -0
  393. package/lib/index.d.ts +3 -0
  394. package/lib/index.js +19 -0
  395. package/lib/locales/ArrayBase.d.ts +77 -0
  396. package/lib/locales/ArrayBase.js +94 -0
  397. package/lib/locales/ArrayCards.d.ts +1 -0
  398. package/lib/locales/ArrayCards.js +22 -0
  399. package/lib/locales/ArrayTable.d.ts +138 -0
  400. package/lib/locales/ArrayTable.js +132 -0
  401. package/lib/locales/Card.d.ts +44 -0
  402. package/lib/locales/Card.js +47 -0
  403. package/lib/locales/Cascader.d.ts +59 -0
  404. package/lib/locales/Cascader.js +62 -0
  405. package/lib/locales/Checkbox.d.ts +11 -0
  406. package/lib/locales/Checkbox.js +14 -0
  407. package/lib/locales/Component.d.ts +53 -0
  408. package/lib/locales/Component.js +56 -0
  409. package/lib/locales/DatePicker.d.ts +75 -0
  410. package/lib/locales/DatePicker.js +89 -0
  411. package/lib/locales/Field.d.ts +341 -0
  412. package/lib/locales/Field.js +341 -0
  413. package/lib/locales/Form.d.ts +1 -0
  414. package/lib/locales/Form.js +136 -0
  415. package/lib/locales/FormCollapse.d.ts +88 -0
  416. package/lib/locales/FormCollapse.js +85 -0
  417. package/lib/locales/FormGrid.d.ts +76 -0
  418. package/lib/locales/FormGrid.js +79 -0
  419. package/lib/locales/FormLayout.d.ts +128 -0
  420. package/lib/locales/FormLayout.js +125 -0
  421. package/lib/locales/FormTab.d.ts +82 -0
  422. package/lib/locales/FormTab.js +85 -0
  423. package/lib/locales/Input.d.ts +50 -0
  424. package/lib/locales/Input.js +53 -0
  425. package/lib/locales/NumberPicker.d.ts +77 -0
  426. package/lib/locales/NumberPicker.js +80 -0
  427. package/lib/locales/Object.d.ts +11 -0
  428. package/lib/locales/Object.js +14 -0
  429. package/lib/locales/Password.d.ts +1 -0
  430. package/lib/locales/Password.js +16 -0
  431. package/lib/locales/Radio.d.ts +47 -0
  432. package/lib/locales/Radio.js +32 -0
  433. package/lib/locales/Rate.d.ts +41 -0
  434. package/lib/locales/Rate.js +35 -0
  435. package/lib/locales/Select.d.ts +125 -0
  436. package/lib/locales/Select.js +128 -0
  437. package/lib/locales/Slider.d.ts +71 -0
  438. package/lib/locales/Slider.js +74 -0
  439. package/lib/locales/Space.d.ts +53 -0
  440. package/lib/locales/Space.js +53 -0
  441. package/lib/locales/Switch.d.ts +11 -0
  442. package/lib/locales/Switch.js +14 -0
  443. package/lib/locales/Text.d.ts +38 -0
  444. package/lib/locales/Text.js +41 -0
  445. package/lib/locales/TextArea.d.ts +35 -0
  446. package/lib/locales/TextArea.js +38 -0
  447. package/lib/locales/TimePicker.d.ts +2 -0
  448. package/lib/locales/TimePicker.js +75 -0
  449. package/lib/locales/Transfer.d.ts +56 -0
  450. package/lib/locales/Transfer.js +41 -0
  451. package/lib/locales/TreeSelect.d.ts +181 -0
  452. package/lib/locales/TreeSelect.js +181 -0
  453. package/lib/locales/Upload.d.ts +78 -0
  454. package/lib/locales/Upload.js +95 -0
  455. package/lib/locales/Void.d.ts +11 -0
  456. package/lib/locales/Void.js +14 -0
  457. package/lib/locales/all.d.ts +31 -0
  458. package/lib/locales/all.js +47 -0
  459. package/lib/locales/index.d.ts +2 -0
  460. package/lib/locales/index.js +38 -0
  461. package/lib/schemas/ArrayCards.d.ts +59 -0
  462. package/lib/schemas/ArrayCards.js +7 -0
  463. package/lib/schemas/ArrayTable.d.ts +5 -0
  464. package/lib/schemas/ArrayTable.js +114 -0
  465. package/lib/schemas/CSSStyle.d.ts +2 -0
  466. package/lib/schemas/CSSStyle.js +52 -0
  467. package/lib/schemas/Card.d.ts +4 -0
  468. package/lib/schemas/Card.js +48 -0
  469. package/lib/schemas/Cascader.d.ts +2 -0
  470. package/lib/schemas/Cascader.js +77 -0
  471. package/lib/schemas/Checkbox.d.ts +4 -0
  472. package/lib/schemas/Checkbox.js +13 -0
  473. package/lib/schemas/DatePicker.d.ts +4 -0
  474. package/lib/schemas/DatePicker.js +107 -0
  475. package/lib/schemas/Form.d.ts +2 -0
  476. package/lib/schemas/Form.js +9 -0
  477. package/lib/schemas/FormCollapse.d.ts +4 -0
  478. package/lib/schemas/FormCollapse.js +61 -0
  479. package/lib/schemas/FormGrid.d.ts +4 -0
  480. package/lib/schemas/FormGrid.js +79 -0
  481. package/lib/schemas/FormItem.d.ts +2 -0
  482. package/lib/schemas/FormItem.js +141 -0
  483. package/lib/schemas/FormLayout.d.ts +2 -0
  484. package/lib/schemas/FormLayout.js +124 -0
  485. package/lib/schemas/FormTab.d.ts +4 -0
  486. package/lib/schemas/FormTab.js +46 -0
  487. package/lib/schemas/Input.d.ts +4 -0
  488. package/lib/schemas/Input.js +92 -0
  489. package/lib/schemas/NumberPicker.d.ts +2 -0
  490. package/lib/schemas/NumberPicker.js +82 -0
  491. package/lib/schemas/Password.d.ts +2 -0
  492. package/lib/schemas/Password.js +12 -0
  493. package/lib/schemas/Radio.d.ts +4 -0
  494. package/lib/schemas/Radio.js +38 -0
  495. package/lib/schemas/Rate.d.ts +2 -0
  496. package/lib/schemas/Rate.js +41 -0
  497. package/lib/schemas/Select.d.ts +2 -0
  498. package/lib/schemas/Select.js +162 -0
  499. package/lib/schemas/Slider.d.ts +2 -0
  500. package/lib/schemas/Slider.js +80 -0
  501. package/lib/schemas/Space.d.ts +2 -0
  502. package/lib/schemas/Space.js +42 -0
  503. package/lib/schemas/Switch.d.ts +2 -0
  504. package/lib/schemas/Switch.js +22 -0
  505. package/lib/schemas/Text.d.ts +2 -0
  506. package/lib/schemas/Text.js +22 -0
  507. package/lib/schemas/TimePicker.d.ts +116 -0
  508. package/lib/schemas/TimePicker.js +123 -0
  509. package/lib/schemas/Transfer.d.ts +2 -0
  510. package/lib/schemas/Transfer.js +47 -0
  511. package/lib/schemas/TreeSelect.d.ts +2 -0
  512. package/lib/schemas/TreeSelect.js +140 -0
  513. package/lib/schemas/Upload.d.ts +4 -0
  514. package/lib/schemas/Upload.js +102 -0
  515. package/lib/schemas/all.d.ts +27 -0
  516. package/lib/schemas/all.js +43 -0
  517. package/lib/schemas/index.d.ts +2 -0
  518. package/lib/schemas/index.js +38 -0
  519. package/lib/shared.d.ts +13 -0
  520. package/lib/shared.js +98 -0
  521. package/package.json +75 -0
  522. package/playground/components/AsyncSelect/AsyncSelect.tsx +38 -0
  523. package/playground/components/AsyncSelect/index.tsx +1 -0
  524. package/playground/components/AsyncSelect/preview.tsx +36 -0
  525. package/playground/components/ClickEventSetter/ActionConfigModal.tsx +173 -0
  526. package/playground/components/ClickEventSetter/ActionList.tsx +67 -0
  527. package/playground/components/ClickEventSetter/DownloadPanel.tsx +24 -0
  528. package/playground/components/ClickEventSetter/NavigationPanel.tsx +42 -0
  529. package/playground/components/ClickEventSetter/RequestPanel.tsx +190 -0
  530. package/playground/components/ClickEventSetter/index.tsx +90 -0
  531. package/playground/components/ClickEventSetter/styles.less +89 -0
  532. package/playground/components/ClickEventSetter/types.ts +43 -0
  533. package/playground/components/FormButton/FormButton.tsx +189 -0
  534. package/playground/components/FormButton/hooks/useEventActionExecutor.ts +65 -0
  535. package/playground/components/FormButton/index.ts +1 -0
  536. package/playground/components/FormButton/preview.tsx +60 -0
  537. package/playground/components/FormButton/utils/actionExecutors.ts +96 -0
  538. package/playground/components/FormButtonGroup/FormButtonGroup.tsx +21 -0
  539. package/playground/components/FormButtonGroup/index.ts +1 -0
  540. package/playground/components/FormButtonGroup/preview.tsx +66 -0
  541. package/playground/components/FormList/FormList.tsx +164 -0
  542. package/playground/components/FormList/index.tsx +1 -0
  543. package/playground/components/FormList/preview.tsx +429 -0
  544. package/playground/components/LocationPicker/LocationModal.tsx +328 -0
  545. package/playground/components/LocationPicker/LocationPicker.tsx +163 -0
  546. package/playground/components/LocationPicker/SearchBox.tsx +122 -0
  547. package/playground/components/LocationPicker/api.ts +77 -0
  548. package/playground/components/LocationPicker/constants.ts +2 -0
  549. package/playground/components/LocationPicker/index.tsx +44 -0
  550. package/playground/components/LocationPicker/types.ts +160 -0
  551. package/playground/components/LocationPicker/utils.ts +46 -0
  552. package/playground/components/ResourceIcon/index.module.less +10 -0
  553. package/playground/components/ResourceIcon/index.tsx +10 -0
  554. package/playground/designerLocales/en-US.ts +38 -0
  555. package/playground/designerLocales/index.ts +6 -0
  556. package/playground/designerLocales/ko-KR.ts +10 -0
  557. package/playground/designerLocales/zh-CN.ts +38 -0
  558. package/playground/locales/FormButton.ts +38 -0
  559. package/playground/locales/FormButtonGroup.ts +29 -0
  560. package/playground/locales/LocationPicker.ts +30 -0
  561. package/playground/locales/all.ts +3 -0
  562. package/playground/locales/index.ts +3 -0
  563. package/playground/main.tsx +222 -0
  564. package/playground/react-app-env.d.ts +4 -0
  565. package/playground/request.ts +123 -0
  566. package/playground/schemas/FormButton.ts +42 -0
  567. package/playground/schemas/FormButtonGroup.ts +24 -0
  568. package/playground/schemas/LocationPicker.ts +14 -0
  569. package/playground/schemas/all.ts +3 -0
  570. package/playground/schemas/index.ts +3 -0
  571. package/playground/service/index.ts +1 -0
  572. package/playground/service/schema.ts +22 -0
  573. package/playground/template.ejs +20 -0
  574. package/playground/utils.ts +744 -0
  575. package/playground/webpack.base.ts +123 -0
  576. package/playground/webpack.dev.ts +64 -0
  577. package/playground/webpack.prod.ts +46 -0
  578. package/playground/widgets/ActionsWidget.tsx +58 -0
  579. package/playground/widgets/LogoWidget.tsx +20 -0
  580. package/playground/widgets/MarkupSchemaWidget.tsx +164 -0
  581. package/playground/widgets/PreviewWidget.tsx +188 -0
  582. package/playground/widgets/SchemaEditorWidget.tsx +27 -0
  583. package/playground/widgets/index.ts +5 -0
  584. package/tsconfig.build.json +12 -0
@@ -0,0 +1,328 @@
1
+ import React, { useState, useCallback, useContext, useEffect } from 'react'
2
+ import { Modal, Button, message } from 'antd'
3
+ import { EnvironmentOutlined } from '@ant-design/icons'
4
+ import { TMap, MapContext, MultiMarker } from 'tlbs-map-react'
5
+ import { LocationValue, SearchResult } from './types'
6
+ import { SearchBox } from './SearchBox'
7
+ import { fetchAddressInfo, fetchMapLocationInfo } from './api'
8
+ import { parseAdcode } from './utils'
9
+
10
+ interface LocationModalProps {
11
+ visible: boolean
12
+ value?: LocationValue
13
+ onConfirm: (value: LocationValue) => void
14
+ onCancel: () => void
15
+ mapId?: string
16
+ readOnly?: boolean
17
+ mapKey: string
18
+ }
19
+
20
+ interface PointGeometry {
21
+ styleId: string
22
+ position: {
23
+ lat: number
24
+ lng: number
25
+ }
26
+ }
27
+
28
+ // 默认中心点(北京)
29
+ const DEFAULT_CENTER = {
30
+ lat: 39.9042,
31
+ lng: 116.4074,
32
+ }
33
+
34
+ // 标记样式
35
+ interface MarkerStyle {
36
+ width: number
37
+ height: number
38
+ anchor: { x: number; y: number }
39
+ src?: string
40
+ }
41
+
42
+ const MARKER_STYLES: Record<string, MarkerStyle> = {
43
+ marker: {
44
+ width: 30,
45
+ height: 40,
46
+ anchor: { x: 15, y: 40 },
47
+ },
48
+ }
49
+
50
+ // 地图点击处理组件
51
+ const MapClickHandler: React.FC<{
52
+ onMapClick: (lat: number, lng: number) => void
53
+ }> = ({ onMapClick }) => {
54
+ const mapInstance = useContext(MapContext)
55
+
56
+ useEffect(() => {
57
+ if (!mapInstance) return
58
+
59
+ const handleClick = (event: any) => {
60
+ const { lat, lng } = event.latLng
61
+ onMapClick(lat, lng)
62
+ }
63
+
64
+ // 监听地图点击事件
65
+ mapInstance.on('click', handleClick)
66
+
67
+ return () => {
68
+ mapInstance.off('click', handleClick)
69
+ }
70
+ }, [mapInstance, onMapClick])
71
+
72
+ return null
73
+ }
74
+
75
+ // 标记点管理组件
76
+ const MarkerController: React.FC<{
77
+ location: LocationValue | null
78
+ }> = ({ location }) => {
79
+ const [geometries, setGeometries] = useState<PointGeometry[]>([])
80
+
81
+ useEffect(() => {
82
+ if (location) {
83
+ setGeometries([
84
+ {
85
+ styleId: 'marker',
86
+ position: {
87
+ lat: location.lat,
88
+ lng: location.lng,
89
+ },
90
+ },
91
+ ])
92
+ } else {
93
+ setGeometries([])
94
+ }
95
+ }, [location])
96
+
97
+ return <MultiMarker styles={MARKER_STYLES} geometries={geometries} />
98
+ }
99
+
100
+ export const LocationModal: React.FC<LocationModalProps> = (props) => {
101
+ const { visible, value, onConfirm, onCancel, readOnly, mapKey } = props
102
+
103
+ const [selectedLocation, setSelectedLocation] =
104
+ useState<LocationValue | null>(null)
105
+ const [center, setCenter] = useState(DEFAULT_CENTER)
106
+
107
+ /** 处理地图点击 */
108
+ const handleMapClick = useCallback(
109
+ async (lat: number, lng: number) => {
110
+ if (readOnly) return
111
+ const { address, ...addressInfo } = await fetchAddressInfo(lat, lng, {
112
+ mapKey,
113
+ })
114
+ const locationData: LocationValue = {
115
+ ...addressInfo,
116
+ address,
117
+ lat,
118
+ lng,
119
+ name: address ? address.split(',')[0] : '',
120
+ }
121
+ setSelectedLocation(locationData)
122
+ },
123
+ [readOnly, mapKey]
124
+ )
125
+
126
+ /** 处理搜索结果选择 */
127
+ const handleSelectSearchResult = useCallback((result: SearchResult) => {
128
+ /** 省市区编码 */
129
+ const adCodeInfo = parseAdcode(String(result.adcode))
130
+ const locationData: LocationValue = {
131
+ ...adCodeInfo,
132
+ address: result.address || result.title,
133
+ lat: result.lat,
134
+ lng: result.lng,
135
+ name: result.title,
136
+ provinceName: result.province,
137
+ cityName: result.city,
138
+ districtName: result.district,
139
+ }
140
+ setSelectedLocation(locationData)
141
+ setCenter({ lat: result.lat, lng: result.lng })
142
+ }, [])
143
+
144
+ /** 定位当前位置 */
145
+ const handleLocateCurrent = useCallback(() => {
146
+ if (!navigator.geolocation) {
147
+ message.warning('您的浏览器不支持定位功能')
148
+ return
149
+ }
150
+
151
+ message.loading('正在定位...', 0)
152
+
153
+ // 设备 api 获取位置
154
+ navigator.geolocation.getCurrentPosition(
155
+ (position) => {
156
+ message.destroy()
157
+ const { latitude, longitude } = position.coords
158
+ fetchAddressInfo(latitude, longitude, { mapKey }).then(
159
+ ({ address, ...addressInfo }) => {
160
+ const locationData: LocationValue = {
161
+ ...addressInfo,
162
+ address,
163
+ lat: latitude,
164
+ lng: longitude,
165
+ name: '当前位置',
166
+ }
167
+ setSelectedLocation(locationData)
168
+ setCenter({ lat: latitude, lng: longitude })
169
+ }
170
+ )
171
+ },
172
+ (error) => {
173
+ message.destroy()
174
+ console.error('定位失败:', error)
175
+ switch (error.code) {
176
+ case error.PERMISSION_DENIED:
177
+ message.warning('定位权限被拒绝,请手动选择位置')
178
+ break
179
+ case error.POSITION_UNAVAILABLE:
180
+ message.error('位置信息不可用')
181
+ break
182
+ case error.TIMEOUT:
183
+ message.error('定位超时')
184
+ break
185
+ default:
186
+ message.error('定位失败')
187
+ }
188
+ },
189
+ {
190
+ enableHighAccuracy: true,
191
+ timeout: 10000,
192
+ maximumAge: 0,
193
+ }
194
+ )
195
+ }, [mapKey])
196
+
197
+ /** 确认选择 */
198
+ const handleConfirm = useCallback(async () => {
199
+ if (selectedLocation) {
200
+ // 如果没有地址,尝试获取
201
+ if (!selectedLocation.address) {
202
+ const { address, ...addressInfo } = await fetchAddressInfo(
203
+ selectedLocation.lat,
204
+ selectedLocation.lng,
205
+ {
206
+ mapKey,
207
+ }
208
+ )
209
+ onConfirm({ ...selectedLocation, ...addressInfo, address })
210
+ } else {
211
+ onConfirm(selectedLocation)
212
+ }
213
+ } else if (value) {
214
+ onConfirm(value)
215
+ } else {
216
+ message.warning('请先选择位置')
217
+ }
218
+ }, [selectedLocation, value, onConfirm, mapKey])
219
+
220
+ /** 取消 */
221
+ const handleCancel = useCallback(() => {
222
+ setSelectedLocation(null)
223
+ onCancel()
224
+ }, [onCancel])
225
+
226
+ /** 地图加载完成回调 */
227
+ const onMapInited = () => {
228
+ if (visible && !value) {
229
+ fetchMapLocationInfo(mapKey).then(({ lat, lng }) => {
230
+ setCenter({ lat, lng })
231
+ })
232
+ }
233
+ }
234
+
235
+ /** 弹窗打开时重置地图 key 以重新初始化 */
236
+ useEffect(() => {
237
+ if (visible) {
238
+ if (value) {
239
+ setSelectedLocation(value)
240
+ setCenter({ lat: value.lat, lng: value.lng })
241
+ } else {
242
+ setCenter(DEFAULT_CENTER)
243
+ setSelectedLocation(null)
244
+ }
245
+ }
246
+ }, [visible, value])
247
+
248
+ return (
249
+ <Modal
250
+ title={readOnly ? '查看位置' : '选择位置'}
251
+ open={visible}
252
+ onCancel={handleCancel}
253
+ footer={
254
+ readOnly
255
+ ? [
256
+ <Button key="cancel" onClick={handleCancel}>
257
+ 取消
258
+ </Button>,
259
+ ]
260
+ : [
261
+ <Button
262
+ key="locate"
263
+ icon={<EnvironmentOutlined />}
264
+ onClick={handleLocateCurrent}
265
+ >
266
+ 定位当前
267
+ </Button>,
268
+ <Button key="cancel" onClick={handleCancel}>
269
+ 取消
270
+ </Button>,
271
+ <Button key="confirm" type="primary" onClick={handleConfirm}>
272
+ 确认选择
273
+ </Button>,
274
+ ]
275
+ }
276
+ width={700}
277
+ centered
278
+ destroyOnClose
279
+ >
280
+ <div className="location-modal-content">
281
+ {!readOnly && (
282
+ <SearchBox onSelect={handleSelectSearchResult} mapKey={mapKey} />
283
+ )}
284
+ {mapKey ? (
285
+ <div
286
+ style={{
287
+ width: '100%',
288
+ height: 400,
289
+ marginTop: 16,
290
+ borderRadius: 8,
291
+ overflow: 'hidden',
292
+ }}
293
+ >
294
+ <TMap
295
+ apiKey={mapKey}
296
+ options={{ center }}
297
+ style={{ width: '100%', height: '100%' }}
298
+ onMapInited={onMapInited}
299
+ >
300
+ <MapClickHandler onMapClick={handleMapClick} />
301
+ <MarkerController location={selectedLocation} />
302
+ </TMap>
303
+ </div>
304
+ ) : (
305
+ <div style={{ height: 60, display: 'flex', alignItems: 'center' }}>
306
+ 地图加载失败,请配置地图 key
307
+ </div>
308
+ )}
309
+ {selectedLocation?.address && (
310
+ <div
311
+ style={{
312
+ marginTop: 12,
313
+ padding: 8,
314
+ background: '#f0f9ff',
315
+ borderRadius: 4,
316
+ fontSize: 14,
317
+ }}
318
+ >
319
+ <EnvironmentOutlined style={{ marginRight: 8, color: '#1890ff' }} />
320
+ {selectedLocation.address}
321
+ </div>
322
+ )}
323
+ </div>
324
+ </Modal>
325
+ )
326
+ }
327
+
328
+ export default LocationModal
@@ -0,0 +1,163 @@
1
+ import React, { useState, useCallback, useMemo } from 'react'
2
+ import { Input, Space } from 'antd'
3
+ import { EnvironmentOutlined } from '@ant-design/icons'
4
+ import { LocationPickerProps, LocationValue } from './types'
5
+ import { LocationModal } from './LocationModal'
6
+ import { PreviewText } from '@formily/antd-v5'
7
+ import { connect, mapReadPretty } from '@formily/react'
8
+
9
+ /** 业务字段和组件值的映射默认配置 */
10
+ const VALUE_MAP = {
11
+ /** 完整地址 */
12
+ address: 'address',
13
+ /** 纬度 */
14
+ lat: 'lat',
15
+ /** 经度 */
16
+ lng: 'lng',
17
+ /** 省级编码 */
18
+ provinceCode: 'provinceCode',
19
+ /** 省级名称 */
20
+ provinceName: 'provinceName',
21
+ /** 市级编码 */
22
+ cityCode: 'cityCode',
23
+ /** 市级名称 */
24
+ cityName: 'cityName',
25
+ /** 区级编码 */
26
+ districtCode: 'districtCode',
27
+ /** 区级名称 */
28
+ districtName: 'districtName',
29
+ /** 名称 */
30
+ name: 'name',
31
+ }
32
+
33
+ /** 将组件值映射为业务字段 */
34
+ const mapToBusinessFields = (
35
+ location: LocationValue,
36
+ fieldNames: Record<string, string>
37
+ ): Record<string, unknown> => {
38
+ const result: Record<string, unknown> = {}
39
+ Object.entries(fieldNames).forEach(([key, fieldKey]) => {
40
+ const v = location[key as keyof LocationValue]
41
+ if (v !== undefined && v !== null) {
42
+ result[fieldKey] = v
43
+ }
44
+ })
45
+ return result
46
+ }
47
+
48
+ /** 将业务字段映射为组件值 */
49
+ const mapToComponentValue = (
50
+ value: Record<string, unknown>,
51
+ fieldNames: Record<string, string>
52
+ ): LocationValue => {
53
+ const result: LocationValue = {
54
+ address: '',
55
+ lat: 0,
56
+ lng: 0,
57
+ provinceCode: '',
58
+ provinceName: '',
59
+ cityCode: '',
60
+ cityName: '',
61
+ districtCode: '',
62
+ districtName: '',
63
+ name: '',
64
+ }
65
+ Object.entries(fieldNames).forEach(([key, fieldKey]) => {
66
+ const v = value[fieldKey]
67
+ if (v !== undefined && v !== null) {
68
+ result[key as keyof LocationValue] = v as never
69
+ }
70
+ })
71
+ return result
72
+ }
73
+
74
+ function LocationPickerComp(props: LocationPickerProps) {
75
+ const {
76
+ value,
77
+ onChange,
78
+ placeholder = '请选择位置',
79
+ disabled,
80
+ mapId,
81
+ readOnly,
82
+ fieldNames: propsFieldNames,
83
+ mapApiKey,
84
+ ...restProps
85
+ } = props
86
+ const fieldNames = useMemo(
87
+ () => ({ ...VALUE_MAP, ...propsFieldNames }),
88
+ [propsFieldNames]
89
+ )
90
+ const [modalVisible, setModalVisible] = useState(false)
91
+
92
+ const handleOpenModal = useCallback(() => {
93
+ if (!disabled) {
94
+ setModalVisible(true)
95
+ }
96
+ }, [disabled])
97
+
98
+ const handleConfirm = useCallback(
99
+ (location: LocationValue) => {
100
+ onChange?.(mapToBusinessFields(location, fieldNames))
101
+ setModalVisible(false)
102
+ },
103
+ [onChange, fieldNames]
104
+ )
105
+
106
+ const handleCancel = useCallback(() => {
107
+ setModalVisible(false)
108
+ }, [])
109
+
110
+ // 将业务字段映射为组件值
111
+ const fieldValue = value ? mapToComponentValue(value, fieldNames) : undefined
112
+ // 显示值
113
+ const displayValue = fieldValue?.address ?? ''
114
+
115
+ return (
116
+ <>
117
+ <Input
118
+ {...restProps}
119
+ value={displayValue}
120
+ placeholder={placeholder}
121
+ disabled={disabled}
122
+ readOnly
123
+ prefix={
124
+ <Space>
125
+ <EnvironmentOutlined style={{ color: '#1890ff' }} />
126
+ </Space>
127
+ }
128
+ onClick={handleOpenModal}
129
+ style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}
130
+ />
131
+ <LocationModal
132
+ visible={modalVisible}
133
+ value={fieldValue}
134
+ onConfirm={handleConfirm}
135
+ onCancel={handleCancel}
136
+ mapId={mapId}
137
+ mapKey={mapApiKey}
138
+ readOnly={readOnly}
139
+ />
140
+ </>
141
+ )
142
+ }
143
+
144
+ /** 位置选择器阅读模式组件 */
145
+ function PockerPreviewText(props: LocationPickerProps) {
146
+ const { value, fieldNames: propsFieldNames } = props
147
+ const fieldNames = useMemo(
148
+ () => ({ ...VALUE_MAP, ...propsFieldNames }),
149
+ [propsFieldNames]
150
+ )
151
+ // 将业务字段映射为组件值
152
+ const fieldValue = value ? mapToComponentValue(value, fieldNames) : undefined
153
+ // 显示值
154
+ const displayValue = fieldValue?.address ?? ''
155
+ return <PreviewText.Input value={displayValue} />
156
+ }
157
+
158
+ export const LocationPicker = connect(
159
+ LocationPickerComp,
160
+ mapReadPretty(PockerPreviewText)
161
+ )
162
+
163
+ export default LocationPicker
@@ -0,0 +1,122 @@
1
+ import React, { useState, useCallback } from 'react'
2
+ import { Input, Button, List, message } from 'antd'
3
+ import { SearchOutlined } from '@ant-design/icons'
4
+ import { SearchResult } from './types'
5
+ import { fetchPlaceSuggestion } from './api'
6
+
7
+ interface SearchBoxProps {
8
+ onSearch?: () => void
9
+ onSelect: (result: SearchResult) => void
10
+ mapKey: string
11
+ }
12
+
13
+ export const SearchBox: React.FC<SearchBoxProps> = (props) => {
14
+ const { onSearch, onSelect, mapKey } = props
15
+
16
+ const [keyword, setKeyword] = useState('')
17
+ const [searchResults, setSearchResults] = useState<SearchResult[]>([])
18
+ const [searching, setSearching] = useState(false)
19
+
20
+ const handleSearch = useCallback(async () => {
21
+ if (!keyword.trim()) {
22
+ message.warning('请输入地址关键字')
23
+ return
24
+ }
25
+
26
+ setSearching(true)
27
+ try {
28
+ const data = await fetchPlaceSuggestion(keyword, { mapKey })
29
+ if (data && data.length > 0) {
30
+ // 模糊搜索结果
31
+ const results: SearchResult[] = data.map((item) => ({
32
+ title: item.title || '',
33
+ address: item.address || '',
34
+ lat: item.location?.lat || 0,
35
+ lng: item.location?.lng || 0,
36
+ category: item.category,
37
+ adcode: item.adcode,
38
+ province: item.province,
39
+ city: item.city,
40
+ district: item.district,
41
+ }))
42
+ setSearchResults(results)
43
+ onSearch?.()
44
+ } else {
45
+ message.warning('未找到相关地址')
46
+ setSearchResults([])
47
+ onSearch?.()
48
+ }
49
+ } catch (error) {
50
+ console.error('搜索地址失败:', error)
51
+ message.error('搜索地址失败,请稍后重试')
52
+ } finally {
53
+ setSearching(false)
54
+ }
55
+ }, [keyword, onSearch, mapKey])
56
+
57
+ const handleSelect = useCallback(
58
+ (result: SearchResult) => {
59
+ setSearchResults([])
60
+ setKeyword('')
61
+ onSelect(result)
62
+ },
63
+ [onSelect]
64
+ )
65
+
66
+ const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
67
+ setKeyword(e.target.value)
68
+ }, [])
69
+
70
+ const handleKeyPress = useCallback(
71
+ (e: React.KeyboardEvent<HTMLInputElement>) => {
72
+ if (e.key === 'Enter') {
73
+ handleSearch()
74
+ }
75
+ },
76
+ [handleSearch]
77
+ )
78
+
79
+ return (
80
+ <div>
81
+ <Input
82
+ placeholder="输入地址搜索..."
83
+ value={keyword}
84
+ onChange={handleChange}
85
+ onKeyDown={handleKeyPress}
86
+ suffix={
87
+ <Button
88
+ type="primary"
89
+ icon={<SearchOutlined />}
90
+ loading={searching}
91
+ onClick={handleSearch}
92
+ style={{ marginRight: -8 }}
93
+ />
94
+ }
95
+ style={{ width: '100%' }}
96
+ />
97
+ {searchResults.length > 0 && (
98
+ <List
99
+ size="small"
100
+ dataSource={searchResults}
101
+ renderItem={(item) => (
102
+ <List.Item
103
+ onClick={() => handleSelect(item)}
104
+ style={{ cursor: 'pointer' }}
105
+ >
106
+ <List.Item.Meta title={item.title} description={item.address} />
107
+ </List.Item>
108
+ )}
109
+ style={{
110
+ maxHeight: 150,
111
+ overflow: 'auto',
112
+ border: '1px solid #d9d9d9',
113
+ borderTop: 'none',
114
+ borderRadius: '0 0 8px 8px',
115
+ }}
116
+ />
117
+ )}
118
+ </div>
119
+ )
120
+ }
121
+
122
+ export default SearchBox
@@ -0,0 +1,77 @@
1
+ import {
2
+ GeocoderResponse,
3
+ MapLocationResponse,
4
+ SuggestionResponse,
5
+ } from './types'
6
+ import { fetchMapService, parseAdcode } from './utils'
7
+
8
+ /** 地址解析函数 */
9
+ export function fetchAddressInfo(
10
+ lat: number,
11
+ lng: number,
12
+ options: {
13
+ mapKey: string
14
+ }
15
+ ): Promise<{
16
+ address: string
17
+ provinceCode: string
18
+ cityCode: string
19
+ districtCode: string
20
+ provinceName: string
21
+ cityName: string
22
+ districtName: string
23
+ }> {
24
+ const TENCENT_MAP_KEY = options.mapKey
25
+ const url = `https://apis.map.qq.com/ws/geocoder/v1/?location=${lat},${lng}&output=jsonp&key=${TENCENT_MAP_KEY}`
26
+ return fetchMapService<GeocoderResponse>(url).then((res) => {
27
+ if (!res.result) {
28
+ throw new Error('获取地址失败')
29
+ }
30
+ /** 省市区编码 */
31
+ const adCodeInfo = parseAdcode(res.result.ad_info.adcode)
32
+ return {
33
+ address: res.result.address || '',
34
+ ...adCodeInfo,
35
+ provinceName: res.result.address_component.province,
36
+ cityName: res.result.address_component.city,
37
+ districtName: res.result.address_component.district,
38
+ }
39
+ })
40
+ }
41
+
42
+ /** 请求地图定位 */
43
+ export function fetchMapLocationInfo(
44
+ mapKey: string
45
+ ): Promise<{ lat: number; lng: number }> {
46
+ const url = `https://apis.map.qq.com/ws/location/v1/ip?key=${mapKey}&output=jsonp`
47
+ return fetchMapService<MapLocationResponse>(url).then((res) => {
48
+ if (res.result) {
49
+ return {
50
+ lat: res.result.location.lat,
51
+ lng: res.result.location.lng,
52
+ }
53
+ } else {
54
+ // 提示错误
55
+ throw new Error('获取定位失败')
56
+ }
57
+ })
58
+ }
59
+
60
+ /** 关键词输入提示 */
61
+ export function fetchPlaceSuggestion(
62
+ keyword: string,
63
+ options: {
64
+ mapKey: string
65
+ }
66
+ ): Promise<SuggestionResponse['data']> {
67
+ const TENCENT_MAP_KEY = options.mapKey
68
+ const encodedKeyword = keyword.trim()
69
+ const url = `https://apis.map.qq.com/ws/place/v1/suggestion?keyword=${encodedKeyword}&key=${TENCENT_MAP_KEY}&output=jsonp`
70
+ return fetchMapService<SuggestionResponse>(url).then((res) => {
71
+ if (res.data) {
72
+ return res.data
73
+ } else {
74
+ return []
75
+ }
76
+ })
77
+ }
@@ -0,0 +1,2 @@
1
+ /** 腾讯地图 key */
2
+ export const MAP_KEY = '4NNBZ-6WLWU-6DWVM-2RYMV-WBZ3V-7MFJS'