@flatbiz/antd 4.1.8 → 4.2.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 (261) hide show
  1. package/esm/_rollupPluginBabelHelpers-1f4d8910.js +3 -0
  2. package/esm/_rollupPluginBabelHelpers-1f4d8910.js.map +1 -0
  3. package/esm/attach-properties-to-component-9d9644cf.js +3 -0
  4. package/esm/attach-properties-to-component-9d9644cf.js.map +1 -0
  5. package/esm/button-operate/index.css +1 -0
  6. package/esm/button-operate/index.js +10 -0
  7. package/esm/button-operate/index.js.map +1 -0
  8. package/esm/button-operate-32f0fea1.js +3 -0
  9. package/esm/button-operate-32f0fea1.js.map +1 -0
  10. package/esm/button-wrapper/index.css +0 -0
  11. package/esm/button-wrapper/index.js +6 -0
  12. package/esm/button-wrapper/index.js.map +1 -0
  13. package/esm/button-wrapper-9bef2281.js +3 -0
  14. package/esm/button-wrapper-9bef2281.js.map +1 -0
  15. package/esm/cascader-wrapper/index.css +1 -0
  16. package/esm/cascader-wrapper/index.js +7 -0
  17. package/esm/cascader-wrapper/index.js.map +1 -0
  18. package/esm/check-list/index.css +1 -0
  19. package/esm/check-list/index.js +6 -0
  20. package/esm/check-list/index.js.map +1 -0
  21. package/esm/config-provider-wrapper/index.css +0 -0
  22. package/esm/config-provider-wrapper/index.js +6 -0
  23. package/esm/config-provider-wrapper/index.js.map +1 -0
  24. package/esm/config-provider-wrapper-dfe8f592.js +3 -0
  25. package/esm/config-provider-wrapper-dfe8f592.js.map +1 -0
  26. package/esm/context-25d0b686.js +3 -0
  27. package/esm/context-25d0b686.js.map +1 -0
  28. package/esm/create-drawer-wrapper-model/index.css +0 -0
  29. package/esm/create-drawer-wrapper-model/index.js +5 -0
  30. package/esm/create-drawer-wrapper-model/index.js.map +1 -0
  31. package/esm/create-modal-wrapper-model/index.css +0 -0
  32. package/esm/create-modal-wrapper-model/index.js +5 -0
  33. package/esm/create-modal-wrapper-model/index.js.map +1 -0
  34. package/esm/css-node-hover/index.css +1 -0
  35. package/esm/css-node-hover/index.js +5 -0
  36. package/esm/css-node-hover/index.js.map +1 -0
  37. package/esm/date-picker-wrapper/index.css +0 -0
  38. package/esm/date-picker-wrapper/index.js +5 -0
  39. package/esm/date-picker-wrapper/index.js.map +1 -0
  40. package/esm/date-picker-wrapper-407942d1.js +3 -0
  41. package/esm/date-picker-wrapper-407942d1.js.map +1 -0
  42. package/esm/date-range-picker-wrapper/index.css +0 -0
  43. package/esm/date-range-picker-wrapper/index.js +5 -0
  44. package/esm/date-range-picker-wrapper/index.js.map +1 -0
  45. package/esm/date-range-picker-wrapper-d22d0f60.js +3 -0
  46. package/esm/date-range-picker-wrapper-d22d0f60.js.map +1 -0
  47. package/esm/date-range-picker-wrapper-form-item/index.css +0 -0
  48. package/esm/date-range-picker-wrapper-form-item/index.js +8 -0
  49. package/esm/date-range-picker-wrapper-form-item/index.js.map +1 -0
  50. package/esm/dialog-alert/index.css +1 -0
  51. package/esm/dialog-alert/index.js +11 -0
  52. package/esm/dialog-alert/index.js.map +1 -0
  53. package/esm/dialog-confirm/index.css +1 -0
  54. package/esm/dialog-confirm/index.js +10 -0
  55. package/esm/dialog-confirm/index.js.map +1 -0
  56. package/esm/dialog-confirm-0bc1ee6e.js +3 -0
  57. package/esm/dialog-confirm-0bc1ee6e.js.map +1 -0
  58. package/esm/dialog-drawer/index.css +0 -0
  59. package/esm/dialog-drawer/index.js +9 -0
  60. package/esm/dialog-drawer/index.js.map +1 -0
  61. package/esm/dialog-loading/index.css +1 -0
  62. package/esm/dialog-loading/index.js +6 -0
  63. package/esm/dialog-loading/index.js.map +1 -0
  64. package/esm/dialog-modal/index.css +1 -0
  65. package/esm/dialog-modal/index.js +9 -0
  66. package/esm/dialog-modal/index.js.map +1 -0
  67. package/esm/dialog-modal-29b1ddf9.js +3 -0
  68. package/esm/dialog-modal-29b1ddf9.js.map +1 -0
  69. package/esm/dom-4d04aa64.js +3 -0
  70. package/esm/dom-4d04aa64.js.map +1 -0
  71. package/esm/drawer-wrapper/index.css +1 -0
  72. package/esm/drawer-wrapper/index.js +6 -0
  73. package/esm/drawer-wrapper/index.js.map +1 -0
  74. package/esm/dropdown-menu-wrapper/index.css +1 -0
  75. package/esm/dropdown-menu-wrapper/index.js +8 -0
  76. package/esm/dropdown-menu-wrapper/index.js.map +1 -0
  77. package/esm/dropdown-menu-wrapper-40f6a65b.js +3 -0
  78. package/esm/dropdown-menu-wrapper-40f6a65b.js.map +1 -0
  79. package/esm/easy-table/index.css +0 -0
  80. package/esm/easy-table/index.js +10 -0
  81. package/esm/easy-table/index.js.map +1 -0
  82. package/esm/editable-field/index.css +1 -0
  83. package/esm/editable-field/index.js +7 -0
  84. package/esm/editable-field/index.js.map +1 -0
  85. package/esm/editable-field-provider/index.css +0 -0
  86. package/esm/editable-field-provider/index.js +5 -0
  87. package/esm/editable-field-provider/index.js.map +1 -0
  88. package/esm/editable-table/index.css +1 -0
  89. package/esm/editable-table/index.js +13 -0
  90. package/esm/editable-table/index.js.map +1 -0
  91. package/esm/editor-wrapper/index.css +1 -0
  92. package/esm/editor-wrapper/index.js +5 -0
  93. package/esm/editor-wrapper/index.js.map +1 -0
  94. package/esm/fba-hooks/index.css +0 -0
  95. package/esm/fba-hooks/index.js +5 -0
  96. package/esm/fba-hooks/index.js.map +1 -0
  97. package/esm/fba-utils/index.css +0 -0
  98. package/esm/fba-utils/index.js +5 -0
  99. package/esm/fba-utils/index.js.map +1 -0
  100. package/esm/fba-utils-a4c7d94d.js +3 -0
  101. package/esm/fba-utils-a4c7d94d.js.map +1 -0
  102. package/esm/file-import/index.css +0 -0
  103. package/esm/file-import/index.js +5 -0
  104. package/esm/file-import/index.js.map +1 -0
  105. package/esm/flex-layout/index.css +1 -0
  106. package/esm/flex-layout/index.js +5 -0
  107. package/esm/flex-layout/index.js.map +1 -0
  108. package/esm/flex-layout-8d2b668b.js +3 -0
  109. package/esm/flex-layout-8d2b668b.js.map +1 -0
  110. package/esm/form-grid/index.css +0 -0
  111. package/esm/form-grid/index.js +5 -0
  112. package/esm/form-grid/index.js.map +1 -0
  113. package/esm/form-item-group/index.css +1 -0
  114. package/esm/form-item-group/index.js +7 -0
  115. package/esm/form-item-group/index.js.map +1 -0
  116. package/esm/form-item-wrapper/index.css +0 -0
  117. package/esm/form-item-wrapper/index.js +5 -0
  118. package/esm/form-item-wrapper/index.js.map +1 -0
  119. package/esm/gap/index.css +0 -0
  120. package/esm/gap/index.js +5 -0
  121. package/esm/gap/index.js.map +1 -0
  122. package/esm/icon-wrapper/index.css +1 -0
  123. package/esm/icon-wrapper/index.js +5 -0
  124. package/esm/icon-wrapper/index.js.map +1 -0
  125. package/esm/icon-wrapper-ed5fcacc.js +3 -0
  126. package/esm/icon-wrapper-ed5fcacc.js.map +1 -0
  127. package/esm/input-search-wrapper/index.css +0 -0
  128. package/esm/input-search-wrapper/index.js +6 -0
  129. package/esm/input-search-wrapper/index.js.map +1 -0
  130. package/esm/input-search-wrapper-10d4a9b9.js +3 -0
  131. package/esm/input-search-wrapper-10d4a9b9.js.map +1 -0
  132. package/esm/input-text-area-wrapper/index.css +0 -0
  133. package/esm/input-text-area-wrapper/index.js +6 -0
  134. package/esm/input-text-area-wrapper/index.js.map +1 -0
  135. package/esm/input-text-area-wrapper-c958fba0.js +3 -0
  136. package/esm/input-text-area-wrapper-c958fba0.js.map +1 -0
  137. package/esm/input-wrapper/index.css +0 -0
  138. package/esm/input-wrapper/index.js +6 -0
  139. package/esm/input-wrapper/index.js.map +1 -0
  140. package/esm/input-wrapper-b378eb5a.js +3 -0
  141. package/esm/input-wrapper-b378eb5a.js.map +1 -0
  142. package/esm/label-value-layout/index.css +1 -0
  143. package/esm/label-value-layout/index.js +5 -0
  144. package/esm/label-value-layout/index.js.map +1 -0
  145. package/esm/local-loading/index.css +1 -0
  146. package/esm/local-loading/index.js +6 -0
  147. package/esm/local-loading/index.js.map +1 -0
  148. package/esm/modal-action/index.css +0 -0
  149. package/esm/modal-action/index.js +5 -0
  150. package/esm/modal-action/index.js.map +1 -0
  151. package/esm/modal-wrapper/index.css +1 -0
  152. package/esm/modal-wrapper/index.js +6 -0
  153. package/esm/modal-wrapper/index.js.map +1 -0
  154. package/esm/page-fixed-footer/index.css +1 -0
  155. package/esm/page-fixed-footer/index.js +5 -0
  156. package/esm/page-fixed-footer/index.js.map +1 -0
  157. package/esm/page404/index.css +0 -0
  158. package/esm/page404/index.js +5 -0
  159. package/esm/page404/index.js.map +1 -0
  160. package/esm/permission/index.css +0 -0
  161. package/esm/permission/index.js +6 -0
  162. package/esm/permission/index.js.map +1 -0
  163. package/esm/pre-defined-class-name/index.css +1 -0
  164. package/esm/pre-defined-class-name/index.js +5 -0
  165. package/esm/pre-defined-class-name/index.js.map +1 -0
  166. package/esm/radio-group-wrapper/index.css +0 -0
  167. package/esm/radio-group-wrapper/index.js +5 -0
  168. package/esm/radio-group-wrapper/index.js.map +1 -0
  169. package/esm/relation-tree/index.css +1 -0
  170. package/esm/relation-tree/index.js +6 -0
  171. package/esm/relation-tree/index.js.map +1 -0
  172. package/esm/request-status/index.css +1 -0
  173. package/esm/request-status/index.js +5 -0
  174. package/esm/request-status/index.js.map +1 -0
  175. package/esm/request-status-03fc60e2.js +3 -0
  176. package/esm/request-status-03fc60e2.js.map +1 -0
  177. package/esm/roll-location-center/index.css +1 -0
  178. package/esm/roll-location-center/index.js +6 -0
  179. package/esm/roll-location-center/index.js.map +1 -0
  180. package/esm/roll-location-in-view/index.css +1 -0
  181. package/esm/roll-location-in-view/index.js +6 -0
  182. package/esm/roll-location-in-view/index.js.map +1 -0
  183. package/esm/rule-describe/index.css +1 -0
  184. package/esm/rule-describe/index.js +7 -0
  185. package/esm/rule-describe/index.js.map +1 -0
  186. package/esm/selector-wrapper/index.css +1 -0
  187. package/esm/selector-wrapper/index.js +7 -0
  188. package/esm/selector-wrapper/index.js.map +1 -0
  189. package/esm/selector-wrapper-6560eb49.js +3 -0
  190. package/esm/selector-wrapper-6560eb49.js.map +1 -0
  191. package/esm/selector-wrapper-search/index.css +0 -0
  192. package/esm/selector-wrapper-search/index.js +6 -0
  193. package/esm/selector-wrapper-search/index.js.map +1 -0
  194. package/esm/selector-wrapper-simple/index.css +0 -0
  195. package/esm/selector-wrapper-simple/index.js +7 -0
  196. package/esm/selector-wrapper-simple/index.js.map +1 -0
  197. package/esm/simple-layout/index.css +1 -0
  198. package/esm/simple-layout/index.js +6 -0
  199. package/esm/simple-layout/index.js.map +1 -0
  200. package/esm/simple-layout-1676e586.js +3 -0
  201. package/esm/simple-layout-1676e586.js.map +1 -0
  202. package/esm/sms-count-down/index.css +0 -0
  203. package/esm/sms-count-down/index.js +5 -0
  204. package/esm/sms-count-down/index.js.map +1 -0
  205. package/esm/styles/index.css +1 -0
  206. package/esm/styles/index.js +5 -0
  207. package/esm/styles/index.js.map +1 -0
  208. package/esm/switch-wrapper/index.css +0 -0
  209. package/esm/switch-wrapper/index.js +5 -0
  210. package/esm/switch-wrapper/index.js.map +1 -0
  211. package/esm/table-cell-render/index.css +0 -0
  212. package/esm/table-cell-render/index.js +12 -0
  213. package/esm/table-cell-render/index.js.map +1 -0
  214. package/esm/table-title-tooltip/index.css +0 -0
  215. package/esm/table-title-tooltip/index.js +5 -0
  216. package/esm/table-title-tooltip/index.js.map +1 -0
  217. package/esm/tabs-wrapper/index.css +1 -0
  218. package/esm/tabs-wrapper/index.js +5 -0
  219. package/esm/tabs-wrapper/index.js.map +1 -0
  220. package/esm/tag-group/index.css +0 -0
  221. package/esm/tag-group/index.js +6 -0
  222. package/esm/tag-group/index.js.map +1 -0
  223. package/esm/tag-list-select/index.css +0 -0
  224. package/esm/tag-list-select/index.js +5 -0
  225. package/esm/tag-list-select/index.js.map +1 -0
  226. package/esm/tag-list-select-066f682f.js +3 -0
  227. package/esm/tag-list-select-066f682f.js.map +1 -0
  228. package/esm/time-2782aa9b.js +3 -0
  229. package/esm/time-2782aa9b.js.map +1 -0
  230. package/esm/time-picker-wrapper/index.css +0 -0
  231. package/esm/time-picker-wrapper/index.js +5 -0
  232. package/esm/time-picker-wrapper/index.js.map +1 -0
  233. package/esm/time-range-picker-wrapper/index.css +0 -0
  234. package/esm/time-range-picker-wrapper/index.js +5 -0
  235. package/esm/time-range-picker-wrapper/index.js.map +1 -0
  236. package/esm/time-range-picker-wrapper-24adf0d0.js +3 -0
  237. package/esm/time-range-picker-wrapper-24adf0d0.js.map +1 -0
  238. package/esm/time-range-picker-wrapper-form-item/index.css +0 -0
  239. package/esm/time-range-picker-wrapper-form-item/index.js +8 -0
  240. package/esm/time-range-picker-wrapper-form-item/index.js.map +1 -0
  241. package/esm/tree-selector-wrapper/index.css +1 -0
  242. package/esm/tree-selector-wrapper/index.js +7 -0
  243. package/esm/tree-selector-wrapper/index.js.map +1 -0
  244. package/esm/tree-wrapper/index.css +1 -0
  245. package/esm/tree-wrapper/index.js +11 -0
  246. package/esm/tree-wrapper/index.js.map +1 -0
  247. package/esm/types/index.css +0 -0
  248. package/esm/types/index.js +4 -0
  249. package/esm/types/index.js.map +1 -0
  250. package/esm/upload-wrapper/index.css +1 -0
  251. package/esm/upload-wrapper/index.js +6 -0
  252. package/esm/upload-wrapper/index.js.map +1 -0
  253. package/esm/upload-wrapper-f20208d6.js +3 -0
  254. package/esm/upload-wrapper-f20208d6.js.map +1 -0
  255. package/esm/use-responsive-point-21b8c601.js +3 -0
  256. package/esm/use-responsive-point-21b8c601.js.map +1 -0
  257. package/index.d.ts +240 -256
  258. package/package.json +1 -1
  259. package/esm/index.css +0 -1
  260. package/esm/index.js +0 -5
  261. package/esm/index.js.map +0 -1
package/esm/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-array-change.ts","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/hooks/use-theme.ts","@flatbiz/antd/src/config-provider-wrapper/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/check-list/context.ts","@flatbiz/antd/src/check-list/utils.ts","@flatbiz/antd/src/check-list/check-list.tsx","@flatbiz/antd/src/check-list/check-list-item.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/types/index.ts","@flatbiz/antd/src/_utils/time.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/easy-table/context.ts","@flatbiz/antd/src/easy-table/model.ts","@flatbiz/antd/src/easy-table/easy-table.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/easy-table/filter.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/editable-field/context.ts","@flatbiz/antd/src/editable-field/editable-field.tsx","@flatbiz/antd/src/editable-field/editable-field-provider.tsx","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/use-request.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/form-item-wrapper/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/local-loading/index.tsx","@flatbiz/antd/src/modal-action/index.tsx","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/roll-location-center/center.tsx","@flatbiz/antd/src/roll-location-in-view/in-view.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-search/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-list-select/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/tag-group/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n hidden?: boolean;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n\n const debounceDuration = isUndefinedOrNull(props.debounceDuration) ? 500 : props.debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDuration);\n\n if (!hasPermission(props.permission)) {\n return null;\n }\n\n if (props.hidden) {\n return null;\n }\n\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { useRef } from 'react';\n\nexport const useArrayChange = <T>(dataList: Array<T>, forceUpdate = true) => {\n const changeListRef = useRef<Array<T>>(dataList);\n const update = hooks.useForceUpdate();\n const arrayOperate = {\n add: hooks.useCallbackRef((dataItem: T | Array<T>, isUnshift?: boolean) => {\n if (isUnshift) {\n const targetList = isArray(dataItem) ? dataItem : [dataItem];\n changeListRef.current = [...targetList, ...changeListRef.current];\n } else {\n changeListRef.current = changeListRef.current.concat(dataItem);\n }\n forceUpdate && update();\n }),\n update: hooks.useCallbackRef((index: number, dataItem: T) => {\n const target = changeListRef.current[index];\n if (target) {\n changeListRef.current[index] = { ...target, ...dataItem };\n }\n forceUpdate && update();\n }),\n delete: hooks.useCallbackRef((index: number) => {\n const deleteItem = changeListRef.current.splice(index, 1);\n forceUpdate && update();\n return deleteItem;\n }),\n resetList: hooks.useCallbackRef((dataList: Array<T>) => {\n changeListRef.current = dataList;\n forceUpdate && update();\n }),\n getList: hooks.useCallbackRef(() => {\n return changeListRef.current;\n }),\n };\n return [changeListRef.current, arrayOperate] as const;\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { theme } from 'antd';\n\nexport const useThemeToken = () => {\n const { token } = theme.useToken();\n return token;\n};\n","import { ConfigProvider } from 'antd';\nimport { ConfigProviderProps } from 'antd/es/config-provider';\nimport enUS from 'antd/es/locale/en_US';\nimport zhCN from 'antd/es/locale/zh_CN';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/zh-cn';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport weekday from 'dayjs/plugin/weekday';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\nimport weekYear from 'dayjs/plugin/weekYear';\nimport { useEffectCustom } from '../hooks';\ndayjs.extend(customParseFormat);\ndayjs.extend(advancedFormat);\ndayjs.extend(weekday);\ndayjs.extend(localeData);\ndayjs.extend(weekOfYear);\ndayjs.extend(weekYear);\ndayjs.extend(dayjsUtc);\n\nexport type ConfigProviderWrapperProps = Omit<ConfigProviderProps, 'locale'> & {\n locale?: 'en' | 'zh-cn';\n};\n\nexport const ConfigProviderWrapper = (props: ConfigProviderWrapperProps) => {\n const { locale, ...otherProps } = props;\n\n useEffectCustom(() => {\n dayjs.locale((props.locale as unknown as string) || 'zh-cn');\n }, []);\n return (\n <ConfigProvider\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...otherProps}\n locale={locale === 'en' ? enUS : zhCN}\n >\n {props.children}\n </ConfigProvider>\n );\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick?: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'menu'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const [menuItems, setMenuItems] = useState<ItemType[]>([]);\n\n const [statusMap, setStatusMap] = useState<Record<string, { open?: boolean; loading?: boolean }>>({});\n const onConfirmtTriggerClick = hooks.useCallbackRef((index, event) => {\n event.stopPropagation();\n setStatusMap({ [index]: { open: true } });\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, index: number, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n statusMap[index] = { loading: true, open: true };\n setStatusMap({ ...statusMap });\n result.finally(() => {\n statusMap[index] = { loading: false, open: false };\n setStatusMap({ ...statusMap });\n });\n return;\n }\n statusMap[index] = { loading: false, open: false };\n setStatusMap({ ...statusMap });\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n return item.onClick?.(event);\n });\n\n useEffectCustom(() => {\n const menuItemsNew: ItemType[] = [];\n menuList.filter(Boolean).forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <ButtonWrapper\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </ButtonWrapper>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item, index)}\n onCancel={(event) => {\n event?.stopPropagation();\n setStatusMap({});\n }}\n overlayClassName=\"dmw-popconfirm\"\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n open={statusMap[index]?.open || false}\n okButtonProps={{\n loading: statusMap[index]?.loading,\n }}\n >\n <Button\n size=\"small\"\n danger\n {...otherProps}\n onClick={onConfirmtTriggerClick.bind(null, index)}\n type={buttonType}\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItemsNew.push(confirm);\n } else {\n menuItemsNew.push(nromal);\n }\n });\n setMenuItems(menuItemsNew);\n }, [menuList, statusMap]);\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n menu={{ items: menuItems }}\n onOpenChange={(_open) => {\n if (!_open) {\n setStatusMap({});\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport {\n Button,\n ButtonProps,\n Divider,\n Popconfirm,\n PopconfirmProps,\n Popover,\n Space,\n SpaceProps,\n Tooltip,\n} from 'antd';\nimport { OverrideToken } from 'antd/es/theme/interface';\nimport { FC, Fragment, isValidElement, ReactElement, ReactNode, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper } from '../config-provider-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\n\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n /** hover 提示文字 */\n hoverTips?: string | React.ReactElement;\n /** hover 提示类型 默认:'tooltip' */\n tipsType?: 'popover' | 'tooltip';\n text: string | ReactElement;\n color?: string;\n onClick?: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n // 是否折叠合拢\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\n split?: boolean;\n spaceProps?: SpaceProps;\n}\n\nexport const ButtonOperateItemContent = (\n props: Pick<ButtonOperateItem, 'hoverTips' | 'tipsType'> & { children?: ReactNode },\n) => {\n if (props.hoverTips) {\n if (props.tipsType === 'popover') {\n return (\n <Popover content={props.hoverTips} zIndex={1000}>\n {props.children}\n </Popover>\n );\n }\n return (\n <Tooltip title={props.hoverTips} zIndex={1000}>\n {props.children}\n </Tooltip>\n );\n }\n return <Fragment>{props.children}</Fragment>;\n};\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!hasPermission(item.permission)) {\n return false;\n }\n return !item.hidden;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item.isFold;\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item.isFold;\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const size = !props.split ? toArray<number>(props.size)[0] || 10 : 0;\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n {...props.spaceProps}\n >\n {viewList.map((item, index) => {\n if (item && isValidElement(item))\n return (\n <ButtonOperateItemContent hoverTips={item.hoverTips} tipsType={item.tipsType}>\n {item}\n </ButtonOperateItemContent>\n );\n const { text, color, onClick, needConfirm, confirmMessage, style, popconfirmProps, ...otherProps } =\n item;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <ButtonOperateItemContent hoverTips={item.hoverTips} tipsType={item.tipsType} key={index}>\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n >\n <DefaultButton\n {...otherProps}\n onClick={undefined}\n type={type}\n danger\n style={style}\n color={color}\n >\n {isValidElement(text) ? <span>{text}</span> : text}\n </DefaultButton>\n </Popconfirm>\n </ButtonOperateItemContent>\n );\n }\n return (\n <ButtonOperateItemContent hoverTips={item.hoverTips} tipsType={item.tipsType} key={index}>\n <DefaultButton {...otherProps} type={type} style={style} onClick={onClick} color={color}>\n {isValidElement(text) ? <span>{text}</span> : text}\n </DefaultButton>\n </ButtonOperateItemContent>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nconst DefaultButton = (props) => {\n if (props.color && !props.disabled) {\n let buttonTheme: OverrideToken['Button'] = {};\n if (props.type === 'link') {\n buttonTheme = {\n colorLink: props.color,\n colorLinkActive: props.color,\n colorLinkHover: props.color,\n };\n } else if (props.type === 'primary') {\n buttonTheme = {\n colorPrimary: props.color,\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n };\n } else {\n buttonTheme = {\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n colorText: props.color,\n colorBorder: props.color,\n };\n }\n\n return (\n <ConfigProviderWrapper\n theme={{\n components: {\n Button: buttonTheme,\n },\n }}\n >\n <ButtonWrapper {...props}>{props.children}</ButtonWrapper>\n </ConfigProviderWrapper>\n );\n }\n return <ButtonWrapper {...props}>{props.children}</ButtonWrapper>;\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n split: true,\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\nimport './style.less';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n popupClassName={classNames('cascader-wrapper-popup', otherProps.popupClassName)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n","import { createCtx } from '@wove/react';\nimport { CheckListItemValue } from './types';\n\nexport const [useCheckListCtx, CheckListCtxProvider] = createCtx<{\n checkedValues: CheckListItemValue[];\n onChange: (value: CheckListItemValue, defaultChange?: boolean) => void;\n stopPropagation?: boolean;\n}>();\n","import { toArray } from '@flatbiz/utils';\nimport { CheckListItemValue, CheckListValue } from './types';\n\nexport const getValueList = (value?: CheckListValue, multiple?: boolean) => {\n if (value !== undefined) {\n const valueList = toArray<CheckListItemValue>(value);\n return multiple ? valueList : valueList.splice(0, 1);\n }\n return null;\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { ReactNode, useMemo } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { useArrayChange } from '../hooks/use-array-change';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport { CheckListCtxProvider } from './context';\nimport './style.less';\nimport { CheckListItemValue } from './types';\nimport { getValueList } from './utils';\n\nexport type CheckListSelectedValue<T extends 'multi' | 'radio'> = T extends 'multi'\n ? CheckListItemValue[]\n : CheckListItemValue;\n\nexport type CheckListProps<T extends 'multi' | 'radio'> = {\n multiple?: boolean;\n onChange?: (value: CheckListSelectedValue<T>, operateValue: CheckListItemValue) => void;\n onPreChange?: (value: CheckListItemValue) => Promise<void>;\n value?: CheckListSelectedValue<T>;\n defaultValue?: CheckListSelectedValue<T>;\n beforeExtra?: ReactNode;\n afterExtra?: ReactNode;\n stopPropagation?: boolean;\n required?: boolean;\n} & CommonPropsWithChildren;\n\nexport const CheckList = <T extends 'multi' | 'radio'>(props: CheckListProps<T>) => {\n const [checkedValues, arrayOperate] = useArrayChange<CheckListItemValue>([]);\n\n const valueList = useMemo(() => {\n return getValueList(props.value, props.multiple);\n }, [props.value, props.multiple]);\n\n useEffectCustom(() => {\n const current = valueList || getValueList(props.defaultValue, props.multiple);\n arrayOperate.resetList(current || []);\n }, []);\n\n hooks.useUpdateEffect(() => {\n arrayOperate.resetList(valueList || []);\n }, [valueList]);\n\n const onChange = hooks.useCallbackRef(async (value: CheckListItemValue, defaultChange) => {\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n const targetIndex = checkedValues.findIndex((temp) => temp === value);\n if (props.multiple === true) {\n if (checkedValues.length === 1 && targetIndex >= 0 && props.required) {\n return;\n }\n if (targetIndex >= 0) {\n arrayOperate.delete(targetIndex);\n } else {\n arrayOperate.add(value);\n }\n } else {\n if (targetIndex >= 0 && props.required) {\n return;\n } else {\n arrayOperate.resetList(targetIndex >= 0 ? [] : [value]);\n }\n }\n if (!defaultChange) {\n const newValues = arrayOperate.getList();\n let selectedValue;\n if (props.multiple) {\n selectedValue = newValues.length > 0 ? extend([], newValues) : undefined;\n } else {\n selectedValue = newValues.length > 0 ? newValues[0] : undefined;\n }\n props.onChange?.(selectedValue as CheckListSelectedValue<T>, value);\n }\n });\n\n return (\n <div className={classNames('check-list', props.className)} style={props.style}>\n <CheckListCtxProvider\n value={{\n onChange,\n checkedValues,\n stopPropagation: props.stopPropagation,\n }}\n >\n {props.beforeExtra}\n {props.children}\n {props.afterExtra}\n </CheckListCtxProvider>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement } from 'react';\nimport { useCheckListCtx } from './context';\nimport { CheckListItemValue } from './types';\n\nexport type CheckListItemContentProps = {\n checked?: boolean;\n disabled?: boolean;\n onClick?: (event) => void;\n className?: string;\n readonly?: boolean;\n style?: CSSProperties;\n};\n\nexport type CheckListItemProps = {\n value: CheckListItemValue;\n disabled?: boolean;\n readonly?: boolean;\n children: (data: CheckListItemContentProps) => ReactElement;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const CheckListItem = (props: CheckListItemProps) => {\n const context = useCheckListCtx();\n\n if (context === null) {\n console.error('CheckList.Item can only be used inside CheckList.');\n return null;\n }\n\n const onClick = hooks.useCallbackRef((event) => {\n if (context.stopPropagation) {\n event.stopPropagation();\n }\n if (!props.disabled) {\n context?.onChange(props.value);\n }\n });\n\n const checked = context?.checkedValues.findIndex((temp) => temp === props.value) >= 0;\n const checkedClassPrefix = 'check-list';\n\n const className = classNames(\n `${checkedClassPrefix}-item`,\n {\n [`${checkedClassPrefix}-disabled`]: props.disabled,\n [`${checkedClassPrefix}-readonly`]: props.readonly,\n [`${checkedClassPrefix}-checked`]: checked,\n },\n props.className,\n );\n\n return props.children({\n onClick,\n checked,\n disabled: props.disabled,\n readonly: props.readonly,\n className,\n style: props.style,\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement | ReactElement[];\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n const element = props.children as ReactElement;\n\n return (\n <Fragment>\n {cloneElement(element, {\n className: classNames('v-css-hover', element.props.className),\n style: { ...props.style, ...element.props.style },\n })}\n </Fragment>\n );\n};\n","export type FormItemNamePath = string | number | Array<string | number>;\n\nexport enum DayjsDateTypeEnum {\n YMDHms = 'YYYY-MM-DD HH:mm:ss',\n YMDHm = 'YYYY-MM-DD HH:mm',\n YMDH = 'YYYY-MM-DD HH',\n YMD = 'YYYY-MM-DD',\n}\n\nexport enum DayjsTimeTypeEnum {\n Hms = 'HH:mm:ss',\n Hm = 'HH:mm',\n H = 'HH',\n ms = 'mm:ss',\n m = 'mm',\n s = 'ss',\n}\n","import { Dayjs } from 'dayjs';\nimport { DayjsDateTypeEnum } from '../types';\n\nconst range = (start: number, end: number) => {\n const result: number[] = [];\n for (let i = start; i <= end; i++) {\n result.push(i);\n }\n return result;\n};\nexport const getDisabledHour = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledHourList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeHour = 0;\n let maxTimeHour = 23;\n\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n minTimeHour = options.minDateTime.get('hour');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n maxTimeHour = options.maxDateTime.get('hour');\n }\n let selectableMinute = range(minTimeHour, maxTimeHour);\n if (options.disabledHourList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledHourList?.includes(item));\n }\n return range(0, 23).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledMinute = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledMinuteList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeMinute = 0;\n let maxTimeMinute = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n minTimeMinute = options.minDateTime.get('minute');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n maxTimeMinute = options.maxDateTime.get('minute');\n }\n let selectableMinute = range(minTimeMinute, maxTimeMinute);\n if (options.disabledMinuteList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledMinuteList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledSecond = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledSecondList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeSecond = 0;\n let maxTimeSecond = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n minTimeSecond = options.minDateTime.get('second');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n maxTimeSecond = options.maxDateTime.get('second');\n }\n let selectableMinute = range(minTimeSecond, maxTimeSecond);\n if (options.disabledSecondList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledSecondList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport type { PickerDateProps } from 'antd/es/date-picker/generatePicker';\nimport dayjs from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<dayjs.Dayjs>, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:DayjsDateTypeEnum\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n\n format?: DayjsDateTypeEnum;\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型 DayjsDateTypeEnum.YMDHms;其他格式化类型自定义format\n * 4. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 5. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current: dayjs.Dayjs) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return dayjs(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || datePickerValue || dayjs(new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport type { Dayjs } from 'dayjs';\nimport dayjs from 'dayjs';\nimport { useMemo, useState } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<Dayjs>,\n 'value' | 'onChange' | 'onCalendarChange' | 'disabledDate' | 'format'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:DayjsDateTypeEnum\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsDateTypeEnum;\n};\n\ntype RangeValue = [Dayjs | null, Dayjs | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss;其他格式化类型自定义format\n * 4. 可设置disabledDateConfig,来控制日期项的disbaled状态\n * 5. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 6. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format, onOpenChange: onAntdOpenChange, ...otherProps } = props;\n const { maxDays, minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [dayjs(newDate1), dayjs(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Dayjs, Dayjs];\n\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime === true) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n onAntdOpenChange?.(open);\n };\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || dayjs(date1 || new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker.RangePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val as RangeValue)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { FormItemNamePath } from '../types';\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: DateRangePickerWrapperProps;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_date_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const DateRangePickerWrapperFormItem = (props: DateRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n dateRangePickerWrapperProps?.onChange?.(data);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","export const bodyAppendDivElement = () => {\n const div = document.createElement('div');\n const id = `id_${Date.now()}`;\n div.setAttribute('id', id);\n document.body.append(div);\n return {\n divElement: div,\n elementId: id,\n };\n};\n\nexport const removeBodyChild = (element: string) => {\n try {\n document.body.removeChild(document.querySelector(element) as Node);\n } catch (error) {\n //\n }\n};\n\nexport interface BodyAppendDivElementProps {\n divElement: HTMLDivElement;\n elementId: string;\n}\n","import { isPromise, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper, ButtonWrapperProps } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<\n ModalProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'okButtonProps' | 'cancelButtonProps'\n> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okHidden?: boolean;\n cancelHidden?: boolean;\n okButtonProps?: Omit<ButtonWrapperProps, 'hidden' | 'children' | 'onClick'>;\n cancelButtonProps?: Omit<ButtonWrapperProps, 'hidden' | 'children' | 'onClick'>;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n cancelButtonProps,\n content,\n configProviderProps,\n className,\n okHidden,\n cancelHidden,\n footer,\n cancelText,\n okText,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n const operateGroup = [\n <ButtonWrapper key=\"0\" {...cancelButtonProps} onClick={onCancelHandle} hidden={cancelHidden}>\n {cancelText || '取消'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"1\" type=\"primary\" {...okButtonProps} onClick={onOkHandle} hidden={okHidden}>\n {okText || '提交'}\n </ButtonWrapper>,\n ];\n\n const footerNew = footer || operateGroup;\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n maskClosable={true}\n centered={true}\n onCancel={onClose}\n destroyOnClose\n {...otherProps}\n className={classNames('v-dialog-modal', className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={divElement}\n footer={footerNew}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_modal_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_modal_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '取消',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelHidden: true,\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise, isString } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper, ButtonWrapperProps } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okButtonExtraProps?: Omit<ButtonWrapperProps, 'onClick' | 'children' | 'loading'>;\n cancelButtonExtraProps?: Omit<ButtonWrapperProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n okHidden?: boolean;\n cancelHidden?: boolean;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n okHidden,\n cancelHidden,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n {cancelHidden || cancelButtonExtraProps?.hidden ? null : (\n <ButtonWrapper {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </ButtonWrapper>\n )}\n {okHidden || okButtonExtraProps?.hidden ? null : (\n <ButtonWrapper type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle}>\n {okText || '提交'}\n </ButtonWrapper>\n )}\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n if (!okHidden || !cancelHidden) {\n return operateGroup;\n }\n return null;\n };\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Drawer\n maskClosable={true}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n extra={operatePosition === 'header' ? operateRenderHandle() : null}\n footer={operatePosition === 'footer' ? operateRenderHandle() : null}\n {...otherProps}\n open={open}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_drawer_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogDrawer.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_drawer_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal, theme } from 'antd';\nimport { CSSProperties, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useEffectCustom } from '../hooks';\nimport './loading.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogLoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogLoadingProps) => {\n const elementId = props.elementId;\n const { token } = theme.useToken();\n const colorPrimary = token.colorPrimary;\n\n const [open, setOpen] = useState(true);\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n });\n\n return (\n <Modal\n maskClosable={false}\n centered={true}\n destroyOnClose\n className={classNames('v-dialog-loading', props.className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={props.divElement}\n footer={null}\n // width={120}\n closable={false}\n style={{ '--v-loading-color': colorPrimary } as CSSProperties}\n >\n <div className={classNames('v-dialog-loading-content')}>\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">{props.message || '处理中'}</div>\n </div>\n </div>\n </Modal>\n );\n};\n\nexport const dialogLoading = {\n open: (props?: DialogLoadingProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_loading_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_loading_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n open: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.open = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.open = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useEasyTableCtx, EasyTableCtxProvider] = createCtx<{\n modelKey: string;\n onRequest: (params?: TPlainObject) => void;\n tableList: TPlainObject[];\n tableTotal: number;\n loading?: boolean;\n fieldNames: TPlainObject;\n pageSize: number;\n initRequest: boolean;\n initialValues: TPlainObject;\n onSetPaginationStatus: (status: boolean) => void;\n paginationStatus: boolean;\n}>();\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n queryCondition: TPlainObject;\n isInit: boolean;\n};\n\ntype ModelActionParams = {\n updateFilterCondition?: Partial<ModelState['queryCondition']>;\n resetFilterCondition: void;\n updateInitStatus: void;\n};\n\nconst defaultState: ModelState = {\n queryCondition: {},\n isInit: true,\n};\n\nconst _EasyTableModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n updateFilterCondition: (params) => {\n return (state) => {\n state.queryCondition = {\n ...state.queryCondition,\n ...params,\n };\n };\n },\n resetFilterCondition: () => {\n return (state) => {\n state.queryCondition = defaultState.queryCondition;\n };\n },\n updateInitStatus: () => {\n return (state) => {\n state.isInit = false;\n };\n },\n },\n state: defaultState,\n};\n\nconst easyTableModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const easyTableModel = (key: string) => {\n if (!easyTableModels[key]) {\n easyTableModels[key] = Model(_EasyTableModel);\n }\n return easyTableModels[key];\n};\n","import { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, FormInstance, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\n\ntype EasyTableServiceConfig = {\n /** 接口配置 */\n onRequest: (params?: TPlainObject) => Promise<TPlainObject | TPlainObject[]>;\n /** 请求参数处理 */\n requestParamsAdapter?: (params: TPlainObject) => TPlainObject;\n /**\n * 接口相应数据处理\n * @param params\n * ```\n * 返回数据为对象,包含两个字段\n * 1. 表格列表数据 - Array\n * 2. 表格条数总数 - Number\n * 其中 字段key 命名会通过 fieldNames 进行转义\n * ```\n */\n requestResultAdapter?: (params: TAny) => TPlainObject;\n};\n\nexport type EasyTableRefApi = {\n /** 外部发起请求服务 */\n onRequest: (params?: TPlainObject) => void;\n /** 获取请求参数 */\n getRequestParams: () => TPlainObject;\n /** 清楚查询条件 */\n clearQueryCondition: (values?: TPlainObject) => Promise<void>;\n form: FormInstance;\n /** 重置请求 */\n onResetRequest: (params?: TPlainObject) => void;\n};\n\nexport type EasyTableProps = {\n children: ReactElement | ReactElement[];\n modelKey: string;\n /** 接口数据配置 */\n serviceConfig: EasyTableServiceConfig;\n /**\n * 1. 查询条件Form initialValues\n * 2. 接口其他参数,例如常量类型\n */\n initialValues?: TPlainObject;\n /**\n * 分页初始化参数,默认值: pageSiz = 10\n * @deprecated 使用 pageSize 赋值\n */\n initialPaginationParams?: { pageSize?: number };\n /** 分页单页条数,默认值:10 */\n pageSize?: number;\n /** 字段映射 */\n fieldNames?: { list?: string; total?: string; pageNo?: string; pageSize?: string; uid?: string };\n /** 初始化是否请求,默认值:true */\n initRequest?: boolean;\n onDataSourceChange?: (dataSource: TAny) => void;\n /** 如果自定义查询按钮,可设置 Form onFinish */\n onFormFinish?: (values?: TPlainObject) => void;\n};\n\n/**\n * 对 查询条件+表格数据 进行深度封装,内置数据交互处理\n * ```\n * 1. 需要获取查询条件、主动发起请求等可通过ref操作\n * 2. 可通过属性 initRequest 设置初始化是否请求数据\n * 3. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize\n *\n * Demo https://fex.qa.tcshuke.com/docs/admin/main/crud/easy-table\n * ```\n */\nexport const EasyTable = forwardRef<EasyTableRefApi, EasyTableProps>((props: EasyTableProps, ref) => {\n const [dataSource, setDataSource] = useState<TPlainObject[]>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n const [state, actions] = easyTableModel(props.modelKey).useStore();\n const pageSize = props.pageSize || props.initialPaginationParams?.pageSize || 10;\n const initRequest = props.initRequest === undefined ? true : props.initRequest;\n const [paginationStatus, setPaginationStatus] = useState(false);\n\n const fieldNames = {\n list: 'list',\n total: 'tatal',\n pageNo: 'pageNo',\n pageSize: 'pageSize',\n ...props.fieldNames,\n };\n\n const [form] = Form.useForm();\n\n const onRequest = hooks.useCallbackRef(async (params) => {\n try {\n setLoading(true);\n const allState = await actions.updateFilterCondition(params);\n const queryCondition = cloneState(allState.queryCondition || {});\n const { requestParamsAdapter, onRequest, requestResultAdapter } = props.serviceConfig;\n const paramsNew = requestParamsAdapter ? requestParamsAdapter(queryCondition) : queryCondition;\n const respData = (await onRequest(paramsNew)) || {};\n props.onDataSourceChange?.(respData);\n const respDataNew = requestResultAdapter ? requestResultAdapter(respData) : respData;\n const respList = respDataNew[fieldNames.list];\n setDataSource(isArray(respList) ? respList : []);\n setTotal(respDataNew[fieldNames.total]);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void message.error(error.message);\n }\n });\n\n const clearQueryCondition = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (values) {\n void actions.updateFilterCondition(values);\n form.setFieldsValue(values);\n }\n });\n const onResetRequest = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (paginationStatus) {\n void onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: pageSize,\n ...props.initialValues,\n ...values,\n });\n } else {\n void onRequest({\n ...props.initialValues,\n ...values,\n });\n }\n });\n\n const getRequestParams = () => {\n return {\n ...state.queryCondition,\n ...form.getFieldsValue(),\n };\n };\n\n useImperativeHandle(ref, () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n getRequestParams,\n onResetRequest,\n form,\n };\n });\n\n const onSetPaginationStatus = (status: boolean) => {\n setPaginationStatus(status);\n };\n\n const onFormFinish = () => {\n const values = form.getFieldsValue();\n if (props.onFormFinish) {\n props.onFormFinish(values);\n } else {\n if (paginationStatus) {\n void onRequest({\n ...values,\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: state.queryCondition.pageSize,\n });\n } else {\n void onRequest(values);\n }\n }\n };\n\n return (\n <EasyTableCtxProvider\n value={{\n modelKey: props.modelKey,\n onRequest,\n tableList: dataSource,\n tableTotal: total,\n loading,\n fieldNames,\n pageSize,\n initRequest,\n initialValues: props.initialValues || {},\n onSetPaginationStatus,\n paginationStatus,\n }}\n >\n <Form\n form={form}\n onFinish={onFormFinish}\n initialValues={{\n ...props.initialValues,\n ...state.queryCondition,\n }}\n >\n {props.children}\n </Form>\n </EasyTableCtxProvider>\n );\n});\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n // 栅格占位格数,不考虑响应式\n span?: number;\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * 1. 设置 span 栅格占位格数,不考虑响应式\n * 2. grid 自定义响应式网格布局\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: Array<ReactElement | null>;\n rightList?: Array<ReactElement | null>;\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = (leftList || []).filter(Boolean);\n const _rightList = (rightList || []).filter(Boolean);\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>{_leftList.map((item) => item)}</Space>\n <Space>{_rightList?.map((item) => item)}</Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n const span = temp.props?.span as number;\n return temp.props?.[screenType] || span || defaultGrid[screenType];\n });\n if (operateColIndex < 0) {\n return { gridList: _currentGridList, gridGroupList: [] };\n }\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement | string[] | ReactElement[];\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n hidden?: boolean;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const theme = useThemeToken();\n const style = extend({ '--simple-layout-colorPrimary': theme.colorPrimary }, props.style, {\n padding: props.padding,\n width: props.width,\n });\n\n if (props.hidden) return <Fragment />;\n\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={classNames({ 'simple-layout-title-sign': props.titleLeftLine })}>\n <Space className=\"simple-layout-title-extra-space\">\n <div className=\"simple-layout-title\">{props.title}</div>\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? (\n <div\n className={classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.desc && !isArray(props.desc) ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.desc && isArray(props.desc) ? (\n <div className=\"simple-layout-desc\">\n <Space direction=\"vertical\" size={5}>\n {(props.desc as string[]).map((item) => {\n return item;\n })}\n </Space>\n </div>\n ) : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormOperateCol, FormOperateColProps, FormRow } from '../form-grid';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n // 查询按钮配置\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n // 重置按钮配置\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\n/**\n * 过滤条件\n * @param props\n * @returns\n *\n *```\n *1. 用法1\n * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * <EasyTableFilter>\n * <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * </EasyTableFilter>\n *\n * -- 自定义网格布局 使用 FormCol组件包装 Form.Item\n * <EasyTableFilter>\n * <FormCol span={12}><Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item></FormCol>\n * </EasyTableFilter>\n *\n * -- children 可为 function\n * <EasyTableFilter>\n * {(form) => {\n * return <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * }}\n * </EasyTableFilter>\n *2. 用户2(自定义布局)\n * EasyTableFilter设置 isPure = true,FormItem无布局规则\n *3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例\n *4. 默认布局下,可通过设置 filterOperate 设置操作按钮\n *```\n */\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const form = Form.useFormInstance();\n const { queryButtonProps, resetButtonProps, filterOperate } = props;\n\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children);\n const { modelKey, fieldNames, onRequest, pageSize, paginationStatus, initialValues } = useEasyTableCtx();\n const [, actions] = easyTableModel(modelKey).useStore();\n\n // const onQuery = hooks.useCallbackRef(() => {\n // if (paginationStatus) {\n // onRequest({\n // ...form.getFieldsValue(),\n // [fieldNames.pageNo]: 1,\n // [fieldNames.pageSiz]: state.queryCondition.pageSize,\n // });\n // } else {\n // onRequest(form.getFieldsValue());\n // }\n // });\n\n const onReset = hooks.useCallbackRef(async () => {\n await actions.resetFilterCondition();\n form.resetFields();\n if (paginationStatus) {\n onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSiz]: pageSize,\n ...initialValues,\n });\n } else {\n onRequest(initialValues);\n }\n });\n\n const formOperateColProps = {\n rightList: [\n !queryButtonProps?.hidden ? (\n <ButtonWrapper key=\"1\" type=\"primary\" htmlType=\"submit\" {...queryButtonProps}>\n {queryButtonProps?.text || '查询'}\n </ButtonWrapper>\n ) : null,\n !resetButtonProps?.hidden ? (\n <ButtonWrapper key=\"2\" onClick={onReset} {...resetButtonProps}>\n {resetButtonProps?.text || '重置'}\n </ButtonWrapper>\n ) : null,\n ],\n ...filterOperate?.(form),\n };\n\n if (props.isPure) {\n return <SimpleLayout>{children}</SimpleLayout>;\n }\n\n const formRowChildren = childrens\n .map((item, index) => {\n if ((item as ReactElement).type['domTypeName'] === 'FormCol') {\n return item;\n }\n return <FormCol key={index}>{item}</FormCol>;\n })\n .concat(<FormOperateCol key={99} {...formOperateColProps} />);\n\n return (\n <SimpleLayout>\n <FormRow gutter={[15, 0]}>{formRowChildren}</FormRow>\n </SimpleLayout>\n );\n};\n","import { getUuid, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'rowKey'> & {\n children?: ReactElement;\n /** 表格行 key 的取值 */\n rowKey: string;\n};\n\n/**\n * 表格渲染\n * @param props\n * ```\n * 1. 继承了 TableProps 可设置antd table功能\n * ```\n */\nexport const EasyTableTable = (props: EasyTableTableProps) => {\n const { children, rowKey, pagination, ...otherProps } = props;\n\n const {\n modelKey,\n fieldNames,\n onRequest,\n tableList,\n initRequest,\n pageSize,\n tableTotal,\n loading,\n initialValues,\n onSetPaginationStatus,\n } = useEasyTableCtx();\n const [state, actions] = easyTableModel(modelKey).useStore();\n\n const paginationData =\n pagination == false\n ? false\n : {\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo],\n pageSize: state.queryCondition[fieldNames.pageSize],\n total: tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n ...props.pagination,\n };\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n if (paginationData) {\n onRequest({ [fieldNames.pageSize]: data.pageSize, [fieldNames.pageNo]: data.current });\n }\n props.onChange?.(data, ...otherProps);\n };\n\n const dataSource = useMemo(() => {\n if (tableList.length === 0) {\n return [];\n }\n if (isUndefinedOrNull(tableList[0][rowKey])) {\n return tableList.map((item) => {\n item[rowKey] = getUuid();\n return item;\n });\n }\n return tableList;\n }, [tableList, rowKey]);\n\n useEffectCustom(() => {\n onSetPaginationStatus(paginationData !== false);\n if (initRequest !== false || !state.isInit) {\n if (paginationData) {\n void onRequest({\n [fieldNames.pageNo]: 1,\n [fieldNames.pageSize]: pageSize,\n ...initialValues,\n });\n } else {\n void onRequest(initialValues);\n }\n } else {\n void actions.updateFilterCondition(initialValues);\n }\n void actions.updateInitStatus();\n }, []);\n\n return (\n <SimpleLayout>\n {children ? <SimpleLayout>{children}</SimpleLayout> : null}\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n {...otherProps}\n pagination={paginationData}\n rowKey={rowKey}\n onChange={onChangePage}\n loading={loading}\n dataSource={dataSource}\n />\n </SimpleLayout>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Popover, Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n /**\n * 提示类型\n * @default 'tooltip'\n */\n tipsType?: 'popover' | 'tooltip';\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n hidden?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n 'icon-wrapper-tigger': props.onClick,\n },\n\n props.className,\n );\n\n if (props.hidden) return null;\n\n const _content = (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n if (props.hoverTips) {\n if (props.tipsType === 'popover') {\n return <Popover content={props.hoverTips}>{_content}</Popover>;\n }\n return <Tooltip title={props.hoverTips}>{_content}</Tooltip>;\n }\n return _content;\n};\n","import { createContext } from 'react';\n\nexport type EditableFieldContextContextApi = {\n editable: boolean;\n showEditableIcon: boolean;\n isCtx: boolean;\n};\n\nexport const EditableFieldContext = createContext<EditableFieldContextContextApi>({\n editable: false,\n showEditableIcon: false,\n isCtx: false,\n});\n","import { CheckOutlined, CloseOutlined, EditOutlined } from '@ant-design/icons';\nimport { isArray, isNumber, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Space } from 'antd';\nimport { isValidElement, ReactElement, ReactNode, useContext, useEffect, useRef, useState } from 'react';\nimport { useThemeToken } from '../hooks/use-theme';\nimport { IconWrapper } from '../icon-wrapper';\n\nimport { EditableFieldContext } from './context';\nimport './style.less';\n\nexport interface EditableFieldProps {\n className?: string;\n editRender: ReactElement | ((data: { value?: TAny; onChange?: (data?: TAny) => void }) => ReactElement);\n viewRender?: (value?: TAny) => ReactNode;\n value?: TAny;\n onChange?: (data?: TAny) => void;\n placeholderValue?: string;\n /** edit 区域是否铺满,showEditableIcon=false 无效 */\n isEditFull?: boolean;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否显示编辑、确认、取消操作icon,默认值:true */\n showEditableIcon?: boolean;\n /** 点击编辑按钮,操作前,返回reject不会开启编辑效果 */\n onClickEditIconPre?: (value?: TAny) => Promise<void>;\n onEditCallback?: (value?: TAny) => void;\n /** 点击确定按钮,操作前,返回reject不会执行确定功能 */\n onClickConfirmIconPre?: (value?: TAny, preValue?: TAny) => Promise<void>;\n onConfirmCallback?: (value?: TAny, preValue?: TAny) => void;\n /** 组件操作Icon配置 */\n iconConfig?: {\n editIcon?: (options: { onClick: () => void }) => ReactElement;\n confirmIcon?: (options: { onClick: () => void }) => ReactElement;\n cancelIcon?: (options: { onClick: () => void }) => ReactElement;\n };\n}\n\n/**\n * 可编辑字段组件\n * @param props\n * @returns\n * ```\n * 字段渲染有两种状态\n * 1. 只读:如果value类型为复杂格式,必须要通过【viewRender】来进行处理操作,转成简单数据类型\n * 2. 编辑:参数value的格式要求必须满足编辑组件入参value要求\n * 3. 可自定义编辑Icon、确定Icon、取消Icon\n * 4. 可拦截编辑操作、确定操作\n * ```\n */\nexport const EditableField = (props: EditableFieldProps) => {\n const {\n value,\n onChange,\n viewRender,\n placeholderValue = '-',\n editRender,\n isEditFull,\n onClickEditIconPre,\n onClickConfirmIconPre,\n iconConfig,\n onEditCallback,\n onConfirmCallback,\n } = props;\n const [isEdit, setIsEdit] = useState<boolean>(false);\n const ctx = useContext(EditableFieldContext);\n const originalValue = useRef<TAny>(value);\n\n const showEditableIcon = (function () {\n if (ctx.isCtx) {\n return props.showEditableIcon === undefined ? ctx.showEditableIcon : props.showEditableIcon;\n }\n return props.showEditableIcon === undefined ? true : props.showEditableIcon;\n })();\n\n const editable = (function () {\n if (ctx.isCtx) {\n return props.editable === undefined ? ctx.editable : props.editable;\n }\n return props.editable || false;\n })();\n\n const theme = useThemeToken();\n\n useEffect(() => {\n setIsEdit(editable);\n }, [editable]);\n\n const onClickEditIcon = async () => {\n if (onClickEditIconPre) {\n await onClickEditIconPre(value);\n }\n originalValue.current = value;\n setIsEdit(true);\n onEditCallback?.(value);\n };\n\n const editIcon = iconConfig?.editIcon ? (\n iconConfig.editIcon({ onClick: onClickEditIcon })\n ) : (\n <IconWrapper size=\"small\" icon={<EditOutlined />} onClick={onClickEditIcon} />\n );\n\n if (!isEdit) {\n const viewValue = (viewRender ? viewRender(props.value) : props.value) || placeholderValue;\n if (\n isString(viewValue) ||\n isNumber(viewValue) ||\n isUndefinedOrNull(viewValue) ||\n isValidElement(viewValue)\n ) {\n if (!showEditableIcon) {\n return viewValue;\n }\n return (\n <Space size={8}>\n <span>{viewValue}</span>\n {editIcon}\n </Space>\n );\n }\n console.warn('对象作为React子对象无效', viewValue);\n }\n\n const onCancel = () => {\n if (value !== originalValue.current) {\n props.onChange?.(originalValue.current);\n }\n setIsEdit(false);\n };\n\n const onEditChange = (value) => {\n let target = value;\n /** 为了处理 Input、TextArea等onChange取值 */\n if (typeof value === 'object' && !isArray(value) && value.target) {\n target = value.target?.value;\n }\n onChange?.(target);\n };\n\n const onOk = async () => {\n if (onClickConfirmIconPre) {\n await onClickConfirmIconPre(value, originalValue.current);\n }\n setIsEdit(false);\n onConfirmCallback?.(value, originalValue.current);\n };\n\n const editRenderElement = isValidElement(editRender)\n ? editRender\n : editRender({ value: value, onChange: onEditChange });\n\n if (!showEditableIcon) {\n return <editRenderElement.type value={value} onChange={onEditChange} {...editRenderElement.props} />;\n }\n\n const confirmIcon = iconConfig?.confirmIcon ? (\n iconConfig.confirmIcon({ onClick: onOk })\n ) : (\n <IconWrapper size=\"small\" icon={<CheckOutlined style={{ color: theme.colorPrimary }} />} onClick={onOk} />\n );\n\n const cancelIcon = iconConfig?.cancelIcon ? (\n iconConfig.cancelIcon({ onClick: onCancel })\n ) : (\n <IconWrapper\n size=\"small\"\n icon={<CloseOutlined style={{ color: theme.colorPrimary }} />}\n onClick={onCancel}\n />\n );\n\n return (\n <Space\n direction=\"horizontal\"\n size={12}\n style={{ display: 'flex', paddingRight: 6 }}\n className={classNames({ 'editable-field-full': isEditFull }, props.className)}\n >\n <editRenderElement.type value={value} onChange={onEditChange} {...editRenderElement.props} />\n {confirmIcon}\n {cancelIcon}\n </Space>\n );\n};\n","import { ReactElement } from 'react';\nimport { EditableFieldContext } from './context';\n\nexport interface EditableFieldProviderProps {\n children: ReactElement;\n editable?: boolean;\n showEditableIcon?: boolean;\n}\n\n/**\n * EditableFieldProvider 控制内部使有的 EditableField 状态\n * @param props\n * @returns\n */\nexport const EditableFieldProvider = (props: EditableFieldProviderProps) => {\n const editable = props.editable === undefined ? true : props.editable;\n const showEditableIcon = props.showEditableIcon === undefined ? false : props.showEditableIcon;\n\n return (\n <EditableFieldContext.Provider value={{ editable, isCtx: true, showEditableIcon }}>\n {props.children}\n </EditableFieldContext.Provider>\n );\n};\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: TAny) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as TAny[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, setInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={inputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, seInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n seInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={inputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { useThemeToken } from '../../hooks';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const theme = useThemeToken();\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color={theme.colorPrimary}>{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { json } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject } from '@flatbiz/utils';\nimport pubSub from 'pubsub-js';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustomAsync } from '../hooks/use-effect-custom-async';\nimport { usePrevious } from '../hooks/use-previous';\nimport { RequestStatus } from '../request-status';\nimport { SelectorServiceConfig, SelectorWrapperProps } from './types';\n\nexport const useRequest = (options: {\n cacheKey: string;\n serviceConfig?: SelectorServiceConfig;\n hasOuterSelectorList?: boolean;\n onChange?: SelectorWrapperProps['onChange'];\n outerSelectorList?: SelectorWrapperProps['selectorList'];\n onRespDataChange?: (dataList?: TPlainObject[]) => void;\n onSelectorRequestError?: SelectorWrapperProps['onSelectorRequestError'];\n useCache: boolean;\n}) => {\n const {\n cacheKey,\n serviceConfig,\n hasOuterSelectorList,\n outerSelectorList,\n onRespDataChange,\n onSelectorRequestError,\n onChange,\n useCache,\n } = options;\n const serviceRequestParams = serviceConfig?.params;\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys || [];\n const hasServiceRequestParams = serviceRequestParams && Object.keys(serviceRequestParams).length > 0;\n\n const [stateSelectorList, setStateSelectorList] = useState<TPlainObject[]>();\n const [requestStatus, setRequestStatus] = useState<RequestStatus>();\n const [refreshKey, setRefreshKey] = useState(Date.now());\n\n const serviceRequestParamsStringify = useMemo(() => {\n try {\n if (hasServiceRequestParams) {\n const sortDataStringify = JSON.stringify(json.sort(serviceRequestParams));\n if (sortDataStringify === '{}') {\n return undefined;\n }\n return sortDataStringify;\n }\n } catch (error) {}\n return undefined;\n }, [hasServiceRequestParams, serviceRequestParams]);\n // 将 undefined => 'undefined'\n const serviceRequestCahceKey = `${serviceRequestParamsStringify}`;\n const serviceRequestCahceStatusKey = `${serviceRequestParamsStringify}_status`;\n const pubSubKey = `${cacheKey}_${serviceRequestCahceKey}`;\n\n // 上一个参数值\n const prevServiceRequestParamsStringify = usePrevious(serviceRequestParamsStringify);\n\n const serviceRespDataAdapter = (respData) => {\n return serviceConfig?.onRequestResultAdapter?.(respData as unknown as TPlainObject) || respData || [];\n };\n\n const getWindowCacheData = () => {\n return window['__selector_wrapper_']?.[cacheKey];\n };\n const getWindowCacheValue = () => {\n return getWindowCacheData()?.[serviceRequestCahceKey];\n };\n const getWindowCacheStatus = () => {\n return getWindowCacheData()?.[serviceRequestCahceStatusKey];\n };\n\n const setWindowCache = (key, value) => {\n if (!window['__selector_wrapper_']) {\n window['__selector_wrapper_'] = {};\n }\n if (!window['__selector_wrapper_'][cacheKey]) {\n window['__selector_wrapper_'][cacheKey] = {};\n }\n window['__selector_wrapper_'][cacheKey][key] = value;\n };\n\n const onChangeRequestStatus = (status: RequestStatus) => {\n setWindowCache(serviceRequestCahceStatusKey, status);\n setRequestStatus(status);\n };\n\n const onRequest = async () => {\n try {\n onChangeRequestStatus('request-progress');\n\n const respData = await serviceConfig?.onRequest?.(serviceRequestParams || {});\n const respAdapterData = serviceRespDataAdapter(respData) || [];\n\n setWindowCache(serviceRequestCahceKey, respAdapterData);\n onChangeRequestStatus('request-success');\n setTimeout(() => {\n pubSub.publish(pubSubKey, {\n status: 'request-success',\n respData: respAdapterData,\n });\n });\n\n return respAdapterData;\n } catch (error) {\n console.error(error);\n onChangeRequestStatus('request-error');\n setStateSelectorList(undefined);\n setTimeout(() => {\n pubSub.publish(pubSubKey, {\n status: 'request-error',\n });\n });\n onSelectorRequestError?.(error);\n return Promise.reject();\n }\n };\n\n useEffectCustomAsync(async () => {\n if (hasOuterSelectorList) {\n setRequestStatus('request-success');\n setStateSelectorList(outerSelectorList);\n onRespDataChange?.(outerSelectorList);\n return;\n }\n if (requiredParamsKeys.length > 0) {\n const isEmpty = serviceRequestParams\n ? requiredParamsKeys.find((key) => isUndefinedOrNull(serviceRequestParams[key]))\n : true;\n if (isEmpty) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n setStateSelectorList([]);\n setRequestStatus('no-dependencies-params');\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n onChange?.(undefined);\n }\n return;\n }\n }\n\n // 不使用缓存模式\n if (useCache === false) {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig?.onRequest?.(serviceRequestParams || {});\n const respAdapterData = serviceRespDataAdapter(respData) || [];\n setRequestStatus('request-success');\n setStateSelectorList(respAdapterData);\n onRespDataChange?.(respAdapterData);\n } catch (error) {\n console.error(error);\n setRequestStatus('request-error');\n setStateSelectorList(undefined);\n onSelectorRequestError?.(error);\n }\n return;\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n const status = getWindowCacheStatus();\n if (status === 'request-success') {\n const dataList = getWindowCacheValue();\n setStateSelectorList(dataList);\n setRequestStatus(status);\n onRespDataChange?.(dataList);\n return;\n }\n if (status === 'request-progress') {\n setRequestStatus(status);\n pubSub.subscribe(pubSubKey, (_msg, { status, respData }) => {\n if (status === 'request-success') {\n setRequestStatus(status);\n setStateSelectorList(respData);\n onRespDataChange?.(respData);\n } else {\n setRequestStatus('request-error');\n setStateSelectorList(undefined);\n }\n });\n return;\n }\n const respAdapterData = await onRequest();\n setStateSelectorList(respAdapterData);\n setRequestStatus('request-success');\n onRespDataChange?.(respAdapterData);\n }, [serviceRequestParams, outerSelectorList, refreshKey]);\n\n const onRefreshRequest = () => {\n setRefreshKey(Date.now());\n };\n\n return {\n requestStatus,\n stateSelectorList,\n serviceRequestParamsStringify,\n onRefreshRequest,\n };\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n","import { arrayFind, TAny, toArray, TPlainObject, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select } from 'antd';\nimport { useMemo, useRef } from 'react';\nimport './style.less';\n\nimport { RedoOutlined } from '@ant-design/icons';\nimport { isString } from '@dimjs/lang';\nimport { RequestStatusRender } from '../request-status';\nimport { SelectorWrapperProps } from './types';\nimport { useRequest } from './use-request';\nimport { getVauleList } from './utils';\nexport * from './types';\n/**\n * 选择器包装组件\n * ```\n * 1. 不支持搜索 + 调用服务模式\n * ```\n */\nexport const SelectorWrapper = (props: SelectorWrapperProps) => {\n const {\n serviceConfig,\n showAllOption,\n onSelectorListChange,\n onSelectorListAllChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n selectorList: outerSelectorList,\n modelKey,\n fieldNames,\n value,\n labelInValue,\n useCache,\n ...otherProps\n } = props;\n\n const firstRenderSelectList = useRef(true);\n\n // props 是否存在 selectorList,selectorList = undefined 也算存在\n const hasOuterSelectorList = props.hasOwnProperty('selectorList');\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = { label: 'label', value: 'value', disabled: 'disabled', ...fieldNames };\n\n const allOptionConfig = useMemo(() => {\n if (!showAllOption) return null;\n const isTrue = showAllOption === true;\n return {\n [optionsItemLabelField]: isTrue ? '全部' : showAllOption.label,\n [optionsItemValueField]: isTrue ? '' : showAllOption.value,\n };\n }, [optionsItemLabelField, optionsItemValueField, showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple']);\n\n const { requestStatus, stateSelectorList, onRefreshRequest } = useRequest({\n cacheKey: modelKey,\n hasOuterSelectorList,\n onChange: props.onChange,\n serviceConfig,\n outerSelectorList,\n onRespDataChange: (dataList) => {\n if (firstRenderSelectList.current) {\n onSelectorListChange?.(dataList || []);\n firstRenderSelectList.current = false;\n }\n onSelectorListAllChange?.(dataList || []);\n },\n onSelectorRequestError,\n useCache: useCache === undefined ? true : useCache,\n });\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (labelInValue) {\n if (isMultiple) {\n props.onChange?.(selectedList, selectedList);\n } else {\n props.onChange?.(selectedList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n if (!otherParams) return props.onChange?.(undefined);\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig[optionsItemValueField]) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const selectorAllList = useMemo(() => {\n if (requestStatus !== 'request-success') return [];\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList);\n }, [allOptionConfig, requestStatus, stateSelectorList]);\n\n const loading = requestStatus === 'request-progress';\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, optionsItemValueField);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, optionsItemValueField, value]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n filterOption={filterOption}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n loading={loading}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onRefreshRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onRefreshRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {selectorAllList.map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? (\n <span className=\"v-selector-item-icon\">{props.icon?.(item, index)}</span>\n ) : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { useThemeToken } from '../../hooks';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: TAny) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n const theme = useThemeToken();\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListAllChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListAllChange={onSelectorListAllChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListAllChange={onSelectorListAllChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value, selectorList)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color={theme.colorPrimary}>\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { isPlainObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n const errorList = uploadList?.filter((item) => item['status'] === 'error') || [];\n let newList =\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n status: 'done',\n isOriginal: true,\n };\n }) || [];\n if (errorList.length > 0) {\n const newErrorList = errorList.map((item) => {\n return {\n uid: item.uid,\n name: item.name,\n status: 'error',\n isOriginal: true,\n response: item['response'],\n };\n }) as TAny[];\n newList = newList.concat(newErrorList);\n }\n setUploadList(newList);\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const handleResponse = (fileList: UploadFile<TAny>[]) => {\n const newFileList: TAny[] = [];\n let hasError = false;\n fileList.forEach((item) => {\n if (item['isOriginal']) {\n if (item['status'] !== 'error') {\n newFileList.push({\n [fieldNames.uid]: item.uid,\n [fieldNames.name]: item.name,\n [fieldNames.url]: item.url,\n });\n }\n } else if (isPlainObject(item.response)) {\n if (item.response.code === '0000') {\n const respData = item.response.data;\n const result = (props.onRequestResultAdapter?.(respData) || respData) as TPlainObject;\n newFileList.push({\n [fieldNames.uid]: result[fieldNames.uid] || item.uid,\n [fieldNames.name]: result[fieldNames.name] || item.name,\n [fieldNames.url]: result[fieldNames.url],\n });\n } else {\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n }\n }\n });\n if (hasError) {\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n }\n onChange?.(newFileList);\n };\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const newFileList = [...info.fileList];\n const donwList = newFileList.filter((item) => item.status === 'done' || item['isOriginal']);\n\n const allDone = donwList.length === newFileList.length;\n if (allDone) {\n handleResponse(newFileList);\n }\n flushSync(() => setUploadList(newFileList));\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { TAny } from '@flatbiz/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: TAny; onChange?: (value?: TAny) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n tableRowIndex: props.tableRowIndex,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n }) => ReactElement | null;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, renderMiddleware, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n const tableRowName = [props.name, record.name];\n const completeName = columnItem.dataIndex ? [...tableRowName, columnItem.dataIndex] : tableRowName;\n const customRender = renderMiddleware?.({\n name: completeName,\n tableRowIndex: record.name,\n operation: record.operation,\n tableRowName,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties } from 'react';\nimport './style.less';\nimport { varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props: EditorWrapperProps) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n // const varStyleString = useMemo(() => {\n // const merge = { ...defaultVarStyle, ...props.varStyle };\n // let varStyleString = '';\n // Object.keys(merge).map((key) => {\n // varStyleString += `${key}:${merge[key]};`;\n // });\n // return varStyleString;\n // }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n // templates: [\n // editorTemplates.block,\n // editorTemplates.primary_p,\n // editorTemplates.secondary_p,\n // editorTemplates.warning_p,\n // editorTemplates.danger_p,\n // editorTemplates.success_p,\n // editorTemplates.p,\n // ],\n // template_replace_values: {\n // varStyle: varStyleString,\n // },\n // template_preview_replace_values: {\n // varStyle: varStyleString,\n // },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport { useThemeToken } from '../../hooks';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n const theme = useThemeToken();\n\n const style = { '--form-item-group-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={{ ...style, ...props.style }}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string | ReactElement;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n hidden?: boolean;\n required?: boolean;\n colon?: boolean;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n hidden={props.hidden}\n required={props.required}\n colon={props.colon}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { composeProps } from '@flatbiz/utils';\nimport { Form, FormItemProps } from 'antd';\nimport { cloneElement, isValidElement, ReactElement, ReactNode } from 'react';\n\nexport interface FormItemWrapperProps extends FormItemProps {\n wrapper?: (children: ReactNode) => ReactElement;\n /** 设置wrapper后,before、after失效 */\n before?: ReactNode;\n /** 设置wrapper后,before、after失效 */\n after?: ReactNode;\n}\n\ninterface FormItemWrapperChildrenProps {\n wrapper?: FormItemWrapperProps['wrapper'];\n children: React.ReactElement;\n before?: ReactNode;\n after?: ReactNode;\n}\n\nconst FormItemWrapperChildren = (props: FormItemWrapperChildrenProps) => {\n const { wrapper, children, ...rest } = props;\n // composeProps 合并执行 Form.Item 传的 onChange 以及组件本身的方法\n const _children = cloneElement(children, composeProps(children.props, rest, true));\n if (wrapper) {\n return wrapper(_children);\n }\n if (props.before || props.after) {\n return (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {props.before ? <span style={{ marginRight: 10 }}>{props.before}</span> : null}\n <div style={{ flex: 1 }}>{_children}</div>\n {props.after ? <span style={{ marginLeft: 10 }}>{props.after}</span> : null}\n </div>\n );\n }\n return _children;\n};\n\n/**\n * 对 Form.Item 的 children 增加 before、after\n * @param props\n * @returns\n */\nexport const FormItemWrapper = (props: FormItemWrapperProps) => {\n const { wrapper, children, before, after, ...rest } = props;\n\n return (\n <Form.Item {...rest}>\n {isValidElement(children) ? (\n <FormItemWrapperChildren wrapper={wrapper} before={before} after={after}>\n {children}\n </FormItemWrapperChildren>\n ) : (\n children\n )}\n </Form.Item>\n );\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Result, Spin } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustomAsync } from '../hooks';\nimport './style.less';\n\nexport type LocalLoadingServiceConfig = {\n onRequest: (params?: TAny) => Promise<TPlainObject>;\n params?: TPlainObject;\n};\n\nexport interface LocalLoadingProps {\n /** 接口数据配置 */\n serviceConfig: LocalLoadingServiceConfig;\n /** children 为函数,参数【respData】为接口返回数据 */\n children: (respData?: TAny) => ReactElement;\n /**\n * 是否异步,默认:false\n * ```\n * true(异步):onRequest、react dom渲染同步执行\n * false(同步):onRequest有结果了才渲染 react dom\n * ```\n */\n isAsync?: boolean;\n /** 自定义异常渲染处理 */\n errorRender?: (error?: TAny) => ReactElement;\n}\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果\n * 2. error显示效果\n * 3. 正常接口数据渲染\n * ```\n * @param props\n * @returns\n */\nexport const LocalLoading = (props: LocalLoadingProps) => {\n const { serviceConfig, isAsync, children, errorRender } = props;\n const [result, setResult] = useState<{ status: 'success' | 'error' | 'loading'; respData?: TAny }>({\n status: 'loading',\n });\n\n const onRequest = async () => {\n try {\n if (result.status !== 'loading') {\n setResult({ status: 'loading' });\n }\n const respData = await serviceConfig.onRequest(serviceConfig.params);\n setResult({\n status: 'success',\n respData,\n });\n } catch (error) {\n setResult({\n status: 'error',\n respData: error,\n });\n }\n };\n\n useEffectCustomAsync(onRequest, []);\n\n const loadingHeight = 200;\n\n if (result.status === 'error') {\n if (errorRender) {\n return errorRender(result.respData);\n }\n return (\n <Result\n status=\"error\"\n className=\"local-loading-error\"\n title={'数据获取异常'}\n subTitle={(result.respData?.message as string) || '数据处理异常'}\n style={{ minHeight: loadingHeight }}\n extra={[\n <Button type=\"primary\" key=\"console\" onClick={onRequest}>\n 重新获取\n </Button>,\n ]}\n />\n );\n }\n const isLoading = result.status === 'loading';\n\n if (isLoading && !isAsync) {\n return (\n <div style={{ height: loadingHeight, display: 'flex', justifyContent: 'center' }}>\n <Spin spinning={true}>\n <Fragment />\n </Spin>\n </div>\n );\n }\n\n return (\n <Fragment>\n <div style={{ display: isLoading ? 'flex' : 'none', justifyContent: 'center', height: loadingHeight }}>\n <Spin spinning={isLoading} />\n </div>\n {children(result.respData)}\n </Fragment>\n );\n};\n","import { Fragment, isValidElement, ReactElement, useState } from 'react';\n\ntype onClick = (e?: React.MouseEvent<HTMLElement>) => void;\n\nexport interface ModalActionProps {\n children: ReactElement | ((data: { onClose: () => void; open: boolean }) => ReactElement);\n action?:\n | (ReactElement & { onClick?: onClick })\n | ((data: { onClick: onClick; onClose: () => void; open: boolean }) => ReactElement);\n}\n\n/**\n * 弹框 触发器\n * ```\n * <ModalAction action={<Button type=\"primary\">打开</Button>}>\n * {({ onClose }) => (\n * <Modal onOk={onClose}>xxx</Modal>\n * )}\n * </ModalAction>\n * ```\n */\nexport const ModalAction = (props: ModalActionProps) => {\n const { action, children } = props;\n\n const [open, setOpen] = useState<boolean>(false);\n\n const handleOnClick = async (e: unknown) => {\n if (isValidElement(action)) {\n const { onClick } = action.props;\n if (typeof onClick === 'function') {\n await onClick?.(e);\n }\n }\n setOpen(true);\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const childrenReactElement = isValidElement(children) ? children : children({ onClose, open });\n\n return (\n <Fragment>\n {isValidElement(action) ? (\n <action.type {...action.props} onClick={handleOnClick} />\n ) : (\n action?.({ onClick: handleOnClick, onClose, open })\n )}\n <childrenReactElement.type\n open={open}\n onClose={onClose}\n onCancel={onClose}\n {...childrenReactElement.props}\n />\n </Fragment>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n open: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.open = true;\n };\n },\n closeModal() {\n return (state) => {\n state.open = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { Result } from 'antd';\n\nexport type Page404Props = {\n message?: string;\n};\n\nexport const Page404 = (props: Page404Props) => {\n return <Result status=\"404\" title=\"404\" subTitle={props.message} />;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_160: 'form-label-160',\n label_width_170: 'form-label-170',\n label_width_180: 'form-label-180',\n label_width_190: 'form-label-190',\n label_width_200: 'form-label-200',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n label_value_vertical: 'form-label-value-vertical',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_160: 'form-item-label-160',\n label_width_170: 'form-item-label-170',\n label_width_180: 'form-item-label-180',\n label_width_190: 'form-item-label-190',\n label_width_200: 'form-item-label-200',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n label_value_vertical: 'form-item-label-value-vertical',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { useEffectCustom } from '@flatbiz/antd';\nimport { useMutationObserver } from 'ahooks';\nimport { CSSProperties, ReactElement, useRef } from 'react';\nimport './style.less';\n\nexport type RollLocationCenterProps = {\n renderList: { activeKey: string; render: ReactElement }[];\n activeKey?: string;\n behavior?: ScrollBehavior;\n direction?: 'horizontal' | 'vertical';\n style?: CSSProperties;\n className?: string;\n};\nexport const RollLocationCenter = (props: RollLocationCenterProps) => {\n const rollLocationCenterRef = useRef<HTMLDivElement>(null);\n const behavior = props.behavior || 'smooth';\n const direction = props.direction || 'vertical';\n\n const targetVerticalRoll = (key: string) => {\n const targetNode = rollLocationCenterRef.current?.querySelector(\n `.roll-location-center-${key}`,\n ) as HTMLDivElement;\n const parentNodeHeight = rollLocationCenterRef.current?.offsetHeight as number;\n const targetNodeOffsetTop = targetNode.offsetTop;\n const targetNodeHeight = targetNode.offsetHeight;\n if (targetNodeOffsetTop <= targetNodeHeight) {\n rollLocationCenterRef.current?.scrollTo({ top: 0, behavior });\n } else {\n const rollHeight = targetNodeOffsetTop - parentNodeHeight / 2 + targetNodeHeight / 2;\n if (rollHeight > 0) {\n rollLocationCenterRef.current?.scrollTo({ top: rollHeight, behavior });\n } else {\n rollLocationCenterRef.current?.scrollTo({ top: 0, behavior });\n }\n }\n };\n const targetHorizontalRoll = (key: string) => {\n const targetNode = rollLocationCenterRef.current?.querySelector(\n `.roll-location-center-${key}`,\n ) as HTMLDivElement;\n const parentNodeWidth = rollLocationCenterRef.current?.offsetWidth as number;\n const targetNodeOffsetLeft = targetNode.offsetLeft;\n const targetNodeWidth = targetNode.offsetWidth;\n if (targetNodeOffsetLeft <= targetNodeWidth) {\n rollLocationCenterRef.current?.scrollTo({ left: 0, behavior });\n } else {\n const rollWidth = targetNodeOffsetLeft - parentNodeWidth / 2 + targetNodeWidth / 2;\n if (rollWidth > 0) {\n rollLocationCenterRef.current?.scrollTo({ left: rollWidth, behavior });\n } else {\n rollLocationCenterRef.current?.scrollTo({ left: 0, behavior });\n }\n }\n };\n\n useEffectCustom(() => {\n if (props.activeKey) {\n if (direction === 'vertical') {\n targetVerticalRoll(props.activeKey);\n } else {\n targetHorizontalRoll(props.activeKey);\n }\n }\n }, [props.activeKey]);\n\n useMutationObserver(\n () => {\n if (props.activeKey) {\n if (direction === 'vertical') {\n targetVerticalRoll(props.activeKey);\n } else {\n targetHorizontalRoll(props.activeKey);\n }\n }\n },\n rollLocationCenterRef,\n {\n subtree: true,\n childList: true,\n characterData: true,\n },\n );\n\n return (\n <div\n className={classNames('roll-location-center', `roll-location-center-${direction}`, props.className)}\n style={props.style}\n ref={rollLocationCenterRef}\n >\n {props.renderList.map((item) => {\n return (\n <div className={`roll-location-center-${item.activeKey}`} key={item.activeKey}>\n {item.render}\n </div>\n );\n })}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { useEffectCustom } from '@flatbiz/antd';\nimport { useMutationObserver } from 'ahooks';\nimport { CSSProperties, ReactElement, useRef } from 'react';\nimport './style.less';\n\nexport type RollLocationInViewProps = {\n renderList: { activeKey: string; render: ReactElement }[];\n activeKey?: string;\n behavior?: ScrollBehavior;\n // 激活节点在边界时,上下节点露出偏移量\n activeOffset?: number;\n direction?: 'horizontal' | 'vertical';\n style?: CSSProperties;\n className?: string;\n};\nexport const RollLocationInView = (props: RollLocationInViewProps) => {\n const rollLocationInViewRef = useRef<HTMLDivElement>(null);\n const behavior = props.behavior || 'smooth';\n const activeOffset = props.activeOffset || 0;\n const direction = props.direction || 'vertical';\n\n const targetVerticalRoll = (key: string) => {\n try {\n const targetNode = rollLocationInViewRef.current?.querySelector(\n `.roll-location-in-view-item-${key}`,\n ) as HTMLDivElement;\n const parentNodeHeight = rollLocationInViewRef.current?.offsetHeight as number;\n const scrollerScrollTop = rollLocationInViewRef.current?.scrollTop as number;\n const targetNodeOffsetTop = targetNode.offsetTop;\n const targetTop2ScrollWindowHeight = targetNodeOffsetTop - scrollerScrollTop;\n const targetNodeHeight = targetNode.offsetHeight;\n if (targetNodeOffsetTop === 0) {\n rollLocationInViewRef.current?.scrollTo({ top: 0, behavior });\n } else {\n if (targetTop2ScrollWindowHeight < 0) {\n rollLocationInViewRef.current?.scrollTo({ top: targetNodeOffsetTop - activeOffset, behavior });\n } else if (\n targetTop2ScrollWindowHeight >= 0 &&\n targetTop2ScrollWindowHeight + targetNodeHeight < parentNodeHeight\n ) {\n //\n } else {\n const xx = targetNodeOffsetTop - (parentNodeHeight - targetNodeHeight);\n rollLocationInViewRef.current?.scrollTo({ top: xx + activeOffset, behavior });\n }\n }\n } catch (error) {\n // 异常不处理\n }\n };\n const targetHorizontalRoll = (key: string) => {\n try {\n const targetNode = rollLocationInViewRef.current?.querySelector(\n `.roll-location-in-view-item-${key}`,\n ) as HTMLDivElement;\n const parentNodeWidth = rollLocationInViewRef.current?.offsetWidth as number;\n const scrollerScrollLeft = rollLocationInViewRef.current?.scrollLeft as number;\n const targetNodeOffsetLeft = targetNode.offsetLeft;\n const targetTop2ScrollWindowWidth = targetNodeOffsetLeft - scrollerScrollLeft;\n const targetNodeWidth = targetNode.offsetWidth;\n if (targetNodeOffsetLeft === 0) {\n rollLocationInViewRef.current?.scrollTo({ left: 0, behavior });\n } else {\n if (targetTop2ScrollWindowWidth < 0) {\n rollLocationInViewRef.current?.scrollTo({ left: targetNodeOffsetLeft - activeOffset, behavior });\n } else if (\n targetTop2ScrollWindowWidth >= 0 &&\n targetTop2ScrollWindowWidth + targetNodeWidth < parentNodeWidth\n ) {\n //\n } else {\n const xx = targetNodeOffsetLeft - (parentNodeWidth - targetNodeWidth);\n rollLocationInViewRef.current?.scrollTo({ left: xx + activeOffset, behavior });\n }\n }\n } catch (error) {\n // 异常不处理\n }\n };\n\n useEffectCustom(() => {\n if (props.activeKey) {\n if (direction === 'vertical') {\n targetVerticalRoll(props.activeKey);\n } else {\n targetHorizontalRoll(props.activeKey);\n }\n }\n }, [props.activeKey]);\n\n useMutationObserver(\n () => {\n if (props.activeKey) {\n if (direction === 'vertical') {\n targetVerticalRoll(props.activeKey);\n } else {\n targetHorizontalRoll(props.activeKey);\n }\n }\n },\n rollLocationInViewRef,\n {\n subtree: true,\n childList: true,\n characterData: true,\n },\n );\n\n return (\n <div\n className={classNames('roll-location-in-view', `roll-location-in-view-${direction}`, props.className)}\n style={props.style}\n ref={rollLocationInViewRef}\n >\n {props.renderList.map((item) => {\n return (\n <div className={`roll-location-in-view-item-${item.activeKey}`} key={item.activeKey}>\n {item.render}\n </div>\n );\n })}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n const theme = useThemeToken();\n\n const style = { '--rule-describe-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames('v-rule-describe', props.className)} style={style}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-title-index\">{index + 1}. </span>\n <span className=\"v-rule-describe-item-title-content\">{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-title-index\"></span>\n <span className=\"v-rule-describe-item-title-content\">{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSearchServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSearchProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string; searchKeyword?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSearchServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 只支持 search + 服务 功能\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSearch = (props: SelectorWrapperSearchProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label || 'label';\n const optionsItemValueField = fieldNames?.value || 'value';\n const optionsItemDisabledField = fieldNames?.disabled || 'disabled';\n const searchKeyword = fieldNames?.searchKeyword || 'searchKeyword';\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async (keyword) => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.({\n ...serviceParams,\n [searchKeyword]: keyword,\n });\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n setDataSource([]);\n void startDataSourceRequest(value);\n }, 300);\n\n const loading = requestStatus === 'request-progress';\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n filterOption={false}\n onSearch={onSearch}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': '请输入搜索条件',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label || 'label';\n const optionsItemValueField = fieldNames?.value || 'value';\n const optionsItemDisabledField = fieldNames?.disabled || 'disabled';\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagListSelectValue = string | number | boolean;\nexport type TagListSelectDataItem = { label: string; value: TagListSelectValue; color?: string };\n\nexport type TagListSelectProps = {\n dataList: TagListSelectDataItem[];\n /** 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同 */\n colorMap?: Record<string, string>;\n value?: TagListSelectValue;\n /** 是否强制匹配,默认值false */\n forceMatch?: boolean;\n};\n\n/**\n * 在列表数据中通过value匹配数据,以Tag形式展示\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagListSelect\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagListSelect: FC<TagListSelectProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagListSelect.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagListSelect, TagListSelectProps } from '../tag-list-select';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny, index: number) => ButtonOperateProps) => {\n return (_value: string | number, record, index: number) => {\n const operateProps = options(record, index);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value || defaultValue;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n return (_value, _record, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\nconst tableColumnIndexRender2 = (method?: () => { pageNo?: number; pageSize?: number }) => {\n return (_value, _record, index: number) => {\n const { pageNo, pageSize } = method?.() || {};\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagListSelectProps['dataList'],\n colorMap?: TagListSelectProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagListSelect dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容,一般为Icon */\n extra: ReactElement;\n extraPosition?: 'before' | 'after';\n onClick?: (e) => void;\n /** 是否显示原单元格数据,默认值:true */\n showData?: boolean;\n /** 溢出显示【...】, 最大长度(默认:20个字节) */\n showMaxNumber?: number;\n /** 未溢出显示【extra】配置,默认值:true */\n notOverflowShowExtra?: boolean;\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const notOverflowShowExtra = isUndefinedOrNull(options.notOverflowShowExtra)\n ? true\n : options.notOverflowShowExtra;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n\n if (options.extra && showData) {\n if (renderValue === value && !notOverflowShowExtra) {\n return value;\n }\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n return <span onClick={options.onClick}>{options.extra}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示原单元格数据,默认值:true\n * 3. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @deprecated 已过时,请使用 serialNumberCell\n */\n indexCell: tableColumnIndexRender,\n /**\n * table 序号展示,如果存在pageSize、pageNo参数可分页展示累加序号,否则每页都从1开始\n * ```\n * render: tableCellRender.serialNumberCell(() => {\n * return { pageNo,pageSize };\n * }),\n * ```\n */\n serialNumberCell: tableColumnIndexRender2,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content?: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} className={className} defaultActiveKey={defaultActiveKey} onChange={onChange} />\n );\n};\n","import { Space, SpaceProps, Tag } from 'antd';\nimport { FC } from 'react';\nimport { useThemeToken } from '../hooks';\n\ntype TagGroupDataItem = { label: string; value: string | number; color?: string };\n\nexport type TagGroupProps = {\n dataList: TagGroupDataItem[];\n /**\n * 颜色配置数据,例如:{ 1:'red', 2: 'blue'} key值与 dataList中value相同\n */\n colorMap?: Record<string, string>;\n spaceProps?: SpaceProps;\n};\n\n/**\n * Tag 列表显示\n */\nexport const TagGroup: FC<TagGroupProps> = (props) => {\n const theme = useThemeToken();\n return (\n <Space wrap size={5} {...props.spaceProps}>\n {props.dataList.map((item, index) => {\n const color = item.color || props.colorMap?.[item.value] || theme.colorPrimary;\n return (\n <Tag color={color} key={index}>\n {item.label}\n </Tag>\n );\n })}\n </Space>\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\ndayjs.extend(isSameOrBefore);\ndayjs.extend(isSameOrAfter);\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * 1. minTime、maxTime设置为 DayjsTimeTypeEnum,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimePickerWrapper = (props: TimePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, format, ...otherProps } = props;\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const customFormat = format || DayjsTimeTypeEnum.Hms;\n\n const onChangeTime = hooks.useCallbackRef((time: dayjs.Dayjs | null, timeString: string) => {\n if (time) {\n onChange?.(timeString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value) {\n return dayjs(value, customFormat);\n }\n return undefined;\n }, [customFormat, props.value]);\n\n const getDisabledTime: TimePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n const showNow = useMemo(() => {\n const now = dayjs();\n return (\n now.isSameOrAfter(dayjs(minTime || '00:00:00', customFormat)) &&\n now.isSameOrBefore(dayjs(maxTime || '23:59:59', customFormat))\n );\n }, [customFormat, maxTime, minTime]);\n\n return (\n <TimePicker\n showNow={showNow}\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={customFormat}\n />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimeRangePickerProps } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type TimeRangePickerWrapperProps = Omit<TimeRangePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minTime、maxTime设置格式,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n// export declare type EventValue<DateType> = DateType | null;\n// export declare type RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 HH:mm:ss,其他格式化类型自定义format\n * 4. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, ...otherProps } = props;\n\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const format = useMemo(() => {\n return props.format || DayjsTimeTypeEnum.Hms;\n }, [props.format]);\n\n const onChangeTime = hooks.useCallbackRef((date, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n onChange?.([timeStart, timeEnd]);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value && value.length > 0) {\n return [\n value[0] ? dayjs(value[0], format) : value[0],\n value[1] ? dayjs(value[1], format) : value[1],\n ] as [Dayjs, Dayjs];\n }\n return undefined;\n }, [props.value, format]);\n\n const getDisabledTime: TimeRangePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n return (\n <TimePicker.RangePicker\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={format}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { TimeRangePickerWrapper, TimeRangePickerWrapperProps } from '../time-range-picker-wrapper';\nimport { FormItemNamePath } from '../types';\n\nexport type TimeRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 TimeRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n timeRangePickerWrapperProps?: Omit<TimeRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_time_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const TimeRangePickerWrapperFormItem = (props: TimeRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, timeRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_time_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_time_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <TimeRangePickerWrapper {...timeRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n const treeSelectValue = useMemo(() => {\n if (isArray(renderValueList) && renderValueList.length === 0) {\n return undefined;\n }\n return isMultiple ? renderValueList : renderValueList[0];\n }, [isMultiple, renderValueList]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeSelectValue}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonWrapper","_useState","useState","loading","setLoading","debounceDuration","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","permission","hidden","Button","_extends","useArrayChange","dataList","forceUpdate","changeListRef","useRef","update","useForceUpdate","arrayOperate","add","useCallbackRef","dataItem","isUnshift","targetList","current","concat","index","target","delete","deleteItem","splice","resetList","getList","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","resolve","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useResponsivePoint","screens","Grid","useBreakpoint","useMemo","filter","keys","key","order","targetIndex","findIndex","useSafeState","initialState","setState","isMounted","useIsMounted","value","useThemeToken","_theme$useToken","theme","useToken","token","dayjs","extend","customParseFormat","advancedFormat","weekday","localeData","weekOfYear","weekYear","dayjsUtc","ConfigProviderWrapper","locale","otherProps","_objectWithoutPropertiesLoose","_excluded","ConfigProvider","componentSize","space","size","enUS","zhCN","DropdownMenuWrapper","menuList","dropdownOtherProps","menuItems","setMenuItems","_useState2","statusMap","setStatusMap","onConfirmtTriggerClick","event","_setStatusMap","stopPropagation","open","onConfirm","item","menuItemsNew","Boolean","forEach","_statusMap$index","_statusMap$index2","text","color","needConfirm","confirmMessage","type","style","popconfirmProps","_excluded2","newStyle","buttonType","nromal","label","_createElement","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","overlayClassName","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","menu","items","onOpenChange","_open","ButtonOperateItemContent","hoverTips","tipsType","Popover","content","Tooltip","ButtonOperate","operateList","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","isFold","foldList","filterList","split","toArray","className","_classNames","_jsxs","Space","Divider","wrap","_isUndefined","spaceProps","map","placement","DefaultButton","undefined","length","foldIcon","_MoreOutlined","buttonTheme","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","components","defaultProps","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","$await_3","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","popupClassName","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","_createCtx","_createCtx2","useCheckListCtx","CheckListCtxProvider","getValueList","CheckList","_useArrayChange","checkedValues","defaultValue","useUpdateEffect","defaultChange","newValues","selectedValue","onPreChange","$If_1","call","this","temp","required","beforeExtra","afterExtra","CheckListItem","_classNames2","context","checked","checkedClassPrefix","readonly","CssNodeHover","element","cloneElement","DayjsDateTypeEnum","DayjsTimeTypeEnum","range","start","end","i","getDisabledHour","_options$minDateTime","_options$maxDateTime","minTimeHour","maxTimeHour","minDateTime","format","YMD","get","maxDateTime","selectableMinute","disabledHourList","_options$disabledHour","getDisabledMinute","_options$minDateTime2","_options$maxDateTime2","minTimeMinute","maxTimeMinute","YMDH","disabledMinuteList","_options$disabledMinu","getDisabledSecond","_options$minDateTime3","_options$maxDateTime3","minTimeSecond","maxTimeSecond","YMDHm","disabledSecondList","_options$disabledSeco","DatePickerWrapper","_ref","disabledDateConfig","minDate","maxDate","minDateTimeDayInst","maxDateTimeDayInst","customFormat","showTime","YMDHms","onChangeDate","date","dateString","getDisabledDate","currentDate","flatbizDate","in","gte","datePickerValue","dateNormalize","getDisabledTime","Date","disabledHours","disabledMinutes","disabledSeconds","DatePicker","disabledDate","disabledTime","width","DateRangePickerWrapper","onAntdOpenChange","maxDays","dates","setDates","hackValue","setHackValue","_ref2","date1","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","createElement","id","now","setAttribute","body","append","divElement","elementId","removeBodyChild","removeChild","querySelector","ModalRender","onOk","cancelButtonProps","configProviderProps","okHidden","cancelHidden","footer","setOpen","_Form$useForm","useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","operateGroup","footerNew","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","_window$elementId2","_window2","dialogConfirm","dialogAlert","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","dialogDrawer","closable","dialogLoading","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWrapperContent","operationProps","DrawerWrapperFooter","DrawerWrapper","keyboard","forceRender","Content","Footer","drawerModels","createDrawerWrapperModel","useEasyTableCtx","EasyTableCtxProvider","queryCondition","isInit","_EasyTableModel","updateFilterCondition","resetFilterCondition","updateInitStatus","easyTableModels","easyTableModel","EasyTable","_props$initialPaginat","dataSource","setDataSource","total","setTotal","_useState3","_easyTableModel$useSt","pageSize","initialPaginationParams","initRequest","_useState4","paginationStatus","setPaginationStatus","list","pageNo","allState","_props$serviceConfig","requestParamsAdapter","_onRequest","requestResultAdapter","paramsNew","respDataNew","respList","onDataSourceChange","clearQueryCondition","$await_4","resetFields","setFieldsValue","onResetRequest","$await_5","initialValues","getRequestParams","getFieldsValue","onSetPaginationStatus","onFormFinish","_extends3","tableList","tableTotal","onFinish","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","currentValue","hasOperateList","find","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_useMemo","_currentGridList","_temp$props","_temp$props2","span","itemProps","newProps","SimpleLayout","labelAlign","formLabelAlign","layoutType","padding","titleExtra","titleLeftLine","desc","direction","contentStyle","EasyTableFilter","queryButtonProps","resetButtonProps","filterOperate","childrens","Children","_useEasyTableCtx","onReset","pageSiz","formOperateColProps","htmlType","isPure","formRowChildren","gutter","EasyTableTable","rowKey","pagination","paginationData","showSizeChanger","showTotal","onChangePage","_len","arguments","Array","_key","apply","getUuid","Table","scroll","x","bordered","IconWrapper","hideHoverBgColor","_content","EditableFieldContext","createContext","editable","showEditableIcon","isCtx","EditableField","viewRender","_props$placeholderVal","placeholderValue","editRender","isEditFull","onClickEditIconPre","onClickConfirmIconPre","iconConfig","onEditCallback","onConfirmCallback","isEdit","setIsEdit","ctx","useContext","originalValue","onClickEditIcon","editIcon","_EditOutlined","viewValue","_isNumber","warn","onEditChange","_value$target","$If_2","editRenderElement","confirmIcon","_CheckOutlined","cancelIcon","_CloseOutlined","display","paddingRight","EditableFieldProvider","Provider","getEditable","tableRowIndex","CheckboxGroupFormItemContent","_props$fieldConfig","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","inputValueRef","isFirstUseValueRef","inputKey","setInputKey","nativeEvent","onCompositionEnd","InputSearchWrapper","defaultSearchInputKey","setDefaultSearchInputKey","Search","InputTextAreaWrapper","seInputKey","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","useRequest","cacheKey","hasOuterSelectorList","outerSelectorList","onRespDataChange","onSelectorRequestError","useCache","serviceRequestParams","requiredParamsKeys","hasServiceRequestParams","stateSelectorList","setStateSelectorList","setRequestStatus","refreshKey","setRefreshKey","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","sort","serviceRequestCahceKey","serviceRequestCahceStatusKey","pubSubKey","prevServiceRequestParamsStringify","getWindowCacheData","_window$__selector_wr","getWindowCacheValue","_getWindowCacheData","getWindowCacheStatus","_getWindowCacheData2","setWindowCache","onChangeRequestStatus","$Try_2_Catch","setTimeout","pubSub","publish","reject","isEmpty","_respAdapterData","_dataList","$Try_3_Post","$Try_3_Catch","$await_6","subscribe","_msg","$await_7","onRefreshRequest","getVauleList","valueKey","_isObject","SelectorWrapper","showAllOption","onSelectorListAllChange","onLabelRenderAdapter","labelInValue","firstRenderSelectList","hasOwnProperty","_label$value$disabled","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","allOptionConfig","isTrue","isMultiple","mode","_useRequest","onRespChange","selectedList","onInnerChange","_value","otherParams","filterTarget","arrayFind","selectorAllList","selectValue","filterOption","input","option","mergeString","toLowerCase","indexOf","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","String","arrayField2LabelValue","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","isBaseData","_isBoolean","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","errorList","newList","isOriginal","newErrorList","handleResponse","fileList","newFileList","hasError","_newFileList$push","code","_newFileList$push2","onUploadChange","info","file","donwList","allDone","flushSync","tempUid","Upload","UploadTrigger","listType","_PlusOutlined","marginTop","ghost","UploadWrapperFormItemContent","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","_props$formListConfig","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","onTableAfterRender","block","EditorWrapper","_","editor","getContent","respValue","_Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","maxCount","accept","FlexLayout","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","FormItemCard","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","colon","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","FormItemWrapperChildren","wrapper","rest","_children","composeProps","alignItems","marginLeft","FormItemWrapper","Gap","inline","LabelValueLayout","labelWidth","Descriptions","column","LocalLoading","isAsync","errorRender","setResult","loadingHeight","_result$respData","Result","subTitle","minHeight","isLoading","justifyContent","ModalAction","action","handleOnClick","_onClick","childrenReactElement","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","modalModels","createModalWrapperModel","PageFixedFooter","Page404","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_160","label_width_170","label_width_180","label_width_190","label_width_200","label_width_auto","label_align_left","label_align_right","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","isCancel","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RollLocationCenter","rollLocationCenterRef","behavior","targetVerticalRoll","_rollLocationCenterRe","_rollLocationCenterRe2","targetNode","parentNodeHeight","offsetHeight","targetNodeOffsetTop","offsetTop","targetNodeHeight","_rollLocationCenterRe3","scrollTo","top","rollHeight","_rollLocationCenterRe4","_rollLocationCenterRe5","targetHorizontalRoll","_rollLocationCenterRe6","_rollLocationCenterRe7","parentNodeWidth","offsetWidth","targetNodeOffsetLeft","offsetLeft","targetNodeWidth","_rollLocationCenterRe8","left","rollWidth","_rollLocationCenterRe9","_rollLocationCenterRe10","activeKey","useMutationObserver","subtree","childList","characterData","renderList","RollLocationInView","rollLocationInViewRef","activeOffset","_rollLocationInViewRe","_rollLocationInViewRe2","_rollLocationInViewRe3","scrollerScrollTop","scrollTop","targetTop2ScrollWindowHeight","_rollLocationInViewRe4","_rollLocationInViewRe5","_rollLocationInViewRe6","xx","_rollLocationInViewRe7","_rollLocationInViewRe8","_rollLocationInViewRe9","scrollerScrollLeft","scrollLeft","targetTop2ScrollWindowWidth","_rollLocationInViewRe10","_rollLocationInViewRe11","_rollLocationInViewRe12","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","ruleItemDescStyle","SelectorWrapperSearch","searchKeyword","serviceParams","keyword","unshift","onSearch","useDebounceCallback","SelectorWrapperSimple","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagListSelect","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","_record","tableColumnIndexRender2","method","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","handle","showData","notOverflowShowExtra","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","serialNumberCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","_props$isSticky","isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","Tabs","TagGroup","isSameOrBefore","isSameOrAfter","TimePickerWrapper","disabledTimeConfig","minTime","maxTime","Hms","onChangeTime","time","timeString","timePickerValue","hour","minute","showNow","TimePicker","TimeRangePickerWrapper","timeStart","timeEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","labelInValueFieldNames","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckable","treeCheckStrictly","labelInValueFieldNamesMerge","innerOperateValue","setInnerOperateValue","log","expandedKeys","getTreeExpandedKeys","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","labelInValueList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isNumber","getValueOrDefault","treeSelectValue","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","innerOperateValueRef","_params","$Try_2_Post","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","_props$loadDataServic","_props$loadDataServic2","_respData3","loadDataServiceConfig","getParams","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}