@kne-components/components-core 0.2.1 → 0.2.2

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 (196) hide show
  1. package/build/asset-manifest.json +126 -126
  2. package/build/index.html +1 -1
  3. package/build/remoteEntry.js +1 -1
  4. package/build/remoteEntry.js.map +1 -1
  5. package/build/static/css/1151.78ad5ff7.chunk.css +2 -0
  6. package/build/static/css/1151.78ad5ff7.chunk.css.map +1 -0
  7. package/build/static/css/1153.ea3b88f3.chunk.css +2 -0
  8. package/build/static/css/{1153.60b31fb7.chunk.css.map → 1153.ea3b88f3.chunk.css.map} +1 -1
  9. package/build/static/css/1454.e445aff5.chunk.css +2 -0
  10. package/build/static/css/1454.e445aff5.chunk.css.map +1 -0
  11. package/build/static/css/1554.b567803b.chunk.css +2 -0
  12. package/build/static/css/{1554.449879d8.chunk.css.map → 1554.b567803b.chunk.css.map} +1 -1
  13. package/build/static/css/{2503.001c4011.chunk.css → 2503.d61c75d2.chunk.css} +2 -2
  14. package/build/static/css/{2503.001c4011.chunk.css.map → 2503.d61c75d2.chunk.css.map} +1 -1
  15. package/build/static/css/2517.2612da74.chunk.css +2 -0
  16. package/build/static/css/2517.2612da74.chunk.css.map +1 -0
  17. package/build/static/css/2716.375b6815.chunk.css +2 -0
  18. package/build/static/css/{2716.99333cd2.chunk.css.map → 2716.375b6815.chunk.css.map} +1 -1
  19. package/build/static/css/{2730.7e673730.chunk.css → 2730.6ce16794.chunk.css} +2 -2
  20. package/build/static/css/{2730.7e673730.chunk.css.map → 2730.6ce16794.chunk.css.map} +1 -1
  21. package/build/static/css/{289.86faecfe.chunk.css → 289.035f9fa0.chunk.css} +2 -2
  22. package/build/static/css/{289.86faecfe.chunk.css.map → 289.035f9fa0.chunk.css.map} +1 -1
  23. package/build/static/css/{3142.67567aa2.chunk.css → 3142.46608818.chunk.css} +2 -2
  24. package/build/static/css/{3142.67567aa2.chunk.css.map → 3142.46608818.chunk.css.map} +1 -1
  25. package/build/static/css/3174.465efe14.chunk.css +2 -0
  26. package/build/static/css/3174.465efe14.chunk.css.map +1 -0
  27. package/build/static/css/3178.96712c30.chunk.css +2 -0
  28. package/build/static/css/3178.96712c30.chunk.css.map +1 -0
  29. package/build/static/css/3333.f1e089de.chunk.css +2 -0
  30. package/build/static/css/3333.f1e089de.chunk.css.map +1 -0
  31. package/build/static/css/{3843.aed498a3.chunk.css → 3843.df98188c.chunk.css} +2 -2
  32. package/build/static/css/{3843.aed498a3.chunk.css.map → 3843.df98188c.chunk.css.map} +1 -1
  33. package/build/static/css/398.924dec67.chunk.css +2 -0
  34. package/build/static/css/398.924dec67.chunk.css.map +1 -0
  35. package/build/static/css/4319.7b79a0de.chunk.css +2 -0
  36. package/build/static/css/4319.7b79a0de.chunk.css.map +1 -0
  37. package/build/static/css/4666.64836903.chunk.css +2 -0
  38. package/build/static/css/{4666.9c80e86a.chunk.css.map → 4666.64836903.chunk.css.map} +1 -1
  39. package/build/static/css/5443.cf3d128a.chunk.css +2 -0
  40. package/build/static/css/5443.cf3d128a.chunk.css.map +1 -0
  41. package/build/static/css/5600.043c03e3.chunk.css +2 -0
  42. package/build/static/css/5600.043c03e3.chunk.css.map +1 -0
  43. package/build/static/css/{5996.522d9ea0.chunk.css → 5996.41561dbf.chunk.css} +2 -2
  44. package/build/static/css/{5996.522d9ea0.chunk.css.map → 5996.41561dbf.chunk.css.map} +1 -1
  45. package/build/static/css/{6611.2f6c87ab.chunk.css → 6611.3a30a350.chunk.css} +2 -2
  46. package/build/static/css/{6611.2f6c87ab.chunk.css.map → 6611.3a30a350.chunk.css.map} +1 -1
  47. package/build/static/css/6779.bba00a34.chunk.css +2 -0
  48. package/build/static/css/6779.bba00a34.chunk.css.map +1 -0
  49. package/build/static/css/7121.4a9abc08.chunk.css +2 -0
  50. package/build/static/css/7121.4a9abc08.chunk.css.map +1 -0
  51. package/build/static/css/7227.a084c472.chunk.css +2 -0
  52. package/build/static/css/{7227.3f8ec931.chunk.css.map → 7227.a084c472.chunk.css.map} +1 -1
  53. package/build/static/css/{8725.661e2aa7.chunk.css → 8725.ea1f0646.chunk.css} +2 -2
  54. package/build/static/css/{8725.661e2aa7.chunk.css.map → 8725.ea1f0646.chunk.css.map} +1 -1
  55. package/build/static/css/931.de4ef84d.chunk.css +2 -0
  56. package/build/static/css/{931.b0504020.chunk.css.map → 931.de4ef84d.chunk.css.map} +1 -1
  57. package/build/static/css/9403.65af256a.chunk.css +2 -0
  58. package/build/static/css/{9403.0e333aef.chunk.css.map → 9403.65af256a.chunk.css.map} +1 -1
  59. package/build/static/css/{9449.d08585de.chunk.css → 9449.040250bd.chunk.css} +2 -2
  60. package/build/static/css/{9449.d08585de.chunk.css.map → 9449.040250bd.chunk.css.map} +1 -1
  61. package/build/static/js/1153.2dacd6a6.chunk.js +3 -0
  62. package/build/static/js/{1153.b177c609.chunk.js.map → 1153.2dacd6a6.chunk.js.map} +1 -1
  63. package/build/static/js/1454.f5b0ddef.chunk.js +3 -0
  64. package/build/static/js/1454.f5b0ddef.chunk.js.map +1 -0
  65. package/build/static/js/1554.a8cc392e.chunk.js +3 -0
  66. package/build/static/js/{1554.45371204.chunk.js.map → 1554.a8cc392e.chunk.js.map} +1 -1
  67. package/build/static/js/{2503.18850a38.chunk.js → 2503.4e88e446.chunk.js} +2 -2
  68. package/build/static/js/{2503.18850a38.chunk.js.map → 2503.4e88e446.chunk.js.map} +1 -1
  69. package/build/static/js/2517.e6a93d26.chunk.js +2 -0
  70. package/build/static/js/2517.e6a93d26.chunk.js.map +1 -0
  71. package/build/static/js/2615.408a7189.chunk.js +2 -0
  72. package/build/static/js/{2615.954a96d5.chunk.js.map → 2615.408a7189.chunk.js.map} +1 -1
  73. package/build/static/js/2716.2d038e25.chunk.js +3 -0
  74. package/build/static/js/{2716.0f1a1993.chunk.js.map → 2716.2d038e25.chunk.js.map} +1 -1
  75. package/build/static/js/2730.3d41f53c.chunk.js +2 -0
  76. package/build/static/js/{2730.b634f94e.chunk.js.map → 2730.3d41f53c.chunk.js.map} +1 -1
  77. package/build/static/js/{289.beec4d9a.chunk.js → 289.a890d4de.chunk.js} +2 -2
  78. package/build/static/js/{289.beec4d9a.chunk.js.map → 289.a890d4de.chunk.js.map} +1 -1
  79. package/build/static/js/3142.367892a4.chunk.js +2 -0
  80. package/build/static/js/{3142.46577140.chunk.js.map → 3142.367892a4.chunk.js.map} +1 -1
  81. package/build/static/js/{3174.3e6210cb.chunk.js → 3174.acbff207.chunk.js} +2 -2
  82. package/build/static/js/3174.acbff207.chunk.js.map +1 -0
  83. package/build/static/js/{3178.877a2977.chunk.js → 3178.1869b50f.chunk.js} +2 -2
  84. package/build/static/js/{3178.877a2977.chunk.js.map → 3178.1869b50f.chunk.js.map} +1 -1
  85. package/build/static/js/{3333.12b6bee9.chunk.js → 3333.bd18e3b1.chunk.js} +2 -2
  86. package/build/static/js/{3333.12b6bee9.chunk.js.map → 3333.bd18e3b1.chunk.js.map} +1 -1
  87. package/build/static/js/36.fde9057d.chunk.js +2 -0
  88. package/build/static/js/36.fde9057d.chunk.js.map +1 -0
  89. package/build/static/js/{3843.fb88a5c8.chunk.js → 3843.ac358d43.chunk.js} +2 -2
  90. package/build/static/js/{3843.fb88a5c8.chunk.js.map → 3843.ac358d43.chunk.js.map} +1 -1
  91. package/build/static/js/{398.363f4e47.chunk.js → 398.9e7d3c7d.chunk.js} +2 -2
  92. package/build/static/js/{398.363f4e47.chunk.js.map → 398.9e7d3c7d.chunk.js.map} +1 -1
  93. package/build/static/js/{4319.0892d371.chunk.js → 4319.e38e5594.chunk.js} +2 -2
  94. package/build/static/js/4319.e38e5594.chunk.js.map +1 -0
  95. package/build/static/js/439.e6bf1551.chunk.js +3 -0
  96. package/build/static/js/439.e6bf1551.chunk.js.map +1 -0
  97. package/build/static/js/{4666.dd2a1cbe.chunk.js → 4666.4f081c8e.chunk.js} +3 -3
  98. package/build/static/js/{4666.dd2a1cbe.chunk.js.map → 4666.4f081c8e.chunk.js.map} +1 -1
  99. package/build/static/js/{5443.67a28dfd.chunk.js → 5443.b765482d.chunk.js} +2 -2
  100. package/build/static/js/{5443.67a28dfd.chunk.js.map → 5443.b765482d.chunk.js.map} +1 -1
  101. package/build/static/js/5600.2c8647dd.chunk.js +2 -0
  102. package/build/static/js/5600.2c8647dd.chunk.js.map +1 -0
  103. package/build/static/js/{5698.2afc9c4c.chunk.js → 5698.62b4c73b.chunk.js} +2 -2
  104. package/build/static/js/{5698.2afc9c4c.chunk.js.map → 5698.62b4c73b.chunk.js.map} +1 -1
  105. package/build/static/js/{5996.f9bbbdf0.chunk.js → 5996.97effec5.chunk.js} +2 -2
  106. package/build/static/js/{5996.f9bbbdf0.chunk.js.map → 5996.97effec5.chunk.js.map} +1 -1
  107. package/build/static/js/6611.61ae6dfa.chunk.js +2 -0
  108. package/build/static/js/{6611.0759c161.chunk.js.map → 6611.61ae6dfa.chunk.js.map} +1 -1
  109. package/build/static/js/6779.86d57e2e.chunk.js +2 -0
  110. package/build/static/js/6779.86d57e2e.chunk.js.map +1 -0
  111. package/build/static/js/7121.d71b7adb.chunk.js +2 -0
  112. package/build/static/js/{7121.5a2464cb.chunk.js.map → 7121.d71b7adb.chunk.js.map} +1 -1
  113. package/build/static/js/7227.66261e4b.chunk.js +3 -0
  114. package/build/static/js/{7227.164af41b.chunk.js.map → 7227.66261e4b.chunk.js.map} +1 -1
  115. package/build/static/js/{8620.437a0aa1.chunk.js → 8620.0bbfd66d.chunk.js} +2 -2
  116. package/build/static/js/{8620.437a0aa1.chunk.js.map → 8620.0bbfd66d.chunk.js.map} +1 -1
  117. package/build/static/js/{8643.9887281e.chunk.js → 8643.4b5aa62b.chunk.js} +3 -3
  118. package/build/static/js/{8643.9887281e.chunk.js.map → 8643.4b5aa62b.chunk.js.map} +1 -1
  119. package/build/static/js/8725.92a063ba.chunk.js +2 -0
  120. package/build/static/js/{8725.c502bc04.chunk.js.map → 8725.92a063ba.chunk.js.map} +1 -1
  121. package/build/static/js/{931.b893cb78.chunk.js → 931.062494fd.chunk.js} +2 -2
  122. package/build/static/js/{931.b893cb78.chunk.js.map → 931.062494fd.chunk.js.map} +1 -1
  123. package/build/static/js/{9403.bc491501.chunk.js → 9403.3a8b1514.chunk.js} +2 -2
  124. package/build/static/js/9403.3a8b1514.chunk.js.map +1 -0
  125. package/build/static/js/9449.b28b65bb.chunk.js +2 -0
  126. package/build/static/js/{9449.5a03d5e0.chunk.js.map → 9449.b28b65bb.chunk.js.map} +1 -1
  127. package/build/static/js/main.91aa2aa0.js +2 -0
  128. package/build/static/js/main.91aa2aa0.js.map +1 -0
  129. package/package.json +1 -1
  130. package/build/static/css/1151.ea2073be.chunk.css +0 -2
  131. package/build/static/css/1151.ea2073be.chunk.css.map +0 -1
  132. package/build/static/css/1153.60b31fb7.chunk.css +0 -2
  133. package/build/static/css/1454.46e50659.chunk.css +0 -2
  134. package/build/static/css/1454.46e50659.chunk.css.map +0 -1
  135. package/build/static/css/1554.449879d8.chunk.css +0 -2
  136. package/build/static/css/2517.c2c09827.chunk.css +0 -2
  137. package/build/static/css/2517.c2c09827.chunk.css.map +0 -1
  138. package/build/static/css/2716.99333cd2.chunk.css +0 -2
  139. package/build/static/css/3174.c37bfa25.chunk.css +0 -2
  140. package/build/static/css/3174.c37bfa25.chunk.css.map +0 -1
  141. package/build/static/css/3178.c20ff929.chunk.css +0 -2
  142. package/build/static/css/3178.c20ff929.chunk.css.map +0 -1
  143. package/build/static/css/3333.faa80869.chunk.css +0 -2
  144. package/build/static/css/3333.faa80869.chunk.css.map +0 -1
  145. package/build/static/css/398.49e52825.chunk.css +0 -2
  146. package/build/static/css/398.49e52825.chunk.css.map +0 -1
  147. package/build/static/css/4319.1455f403.chunk.css +0 -2
  148. package/build/static/css/4319.1455f403.chunk.css.map +0 -1
  149. package/build/static/css/4666.9c80e86a.chunk.css +0 -2
  150. package/build/static/css/5443.3493636d.chunk.css +0 -2
  151. package/build/static/css/5443.3493636d.chunk.css.map +0 -1
  152. package/build/static/css/5600.a5fd63c7.chunk.css +0 -2
  153. package/build/static/css/5600.a5fd63c7.chunk.css.map +0 -1
  154. package/build/static/css/6779.040bac19.chunk.css +0 -2
  155. package/build/static/css/6779.040bac19.chunk.css.map +0 -1
  156. package/build/static/css/7121.2c640f6a.chunk.css +0 -2
  157. package/build/static/css/7121.2c640f6a.chunk.css.map +0 -1
  158. package/build/static/css/7227.3f8ec931.chunk.css +0 -2
  159. package/build/static/css/931.b0504020.chunk.css +0 -2
  160. package/build/static/css/9403.0e333aef.chunk.css +0 -2
  161. package/build/static/js/1153.b177c609.chunk.js +0 -3
  162. package/build/static/js/1454.3bedb8d0.chunk.js +0 -3
  163. package/build/static/js/1454.3bedb8d0.chunk.js.map +0 -1
  164. package/build/static/js/1554.45371204.chunk.js +0 -3
  165. package/build/static/js/2517.f19aba07.chunk.js +0 -2
  166. package/build/static/js/2517.f19aba07.chunk.js.map +0 -1
  167. package/build/static/js/2615.954a96d5.chunk.js +0 -2
  168. package/build/static/js/2716.0f1a1993.chunk.js +0 -3
  169. package/build/static/js/2730.b634f94e.chunk.js +0 -2
  170. package/build/static/js/3142.46577140.chunk.js +0 -2
  171. package/build/static/js/3174.3e6210cb.chunk.js.map +0 -1
  172. package/build/static/js/36.d6e82089.chunk.js +0 -2
  173. package/build/static/js/36.d6e82089.chunk.js.map +0 -1
  174. package/build/static/js/4319.0892d371.chunk.js.map +0 -1
  175. package/build/static/js/5600.1312855e.chunk.js +0 -2
  176. package/build/static/js/5600.1312855e.chunk.js.map +0 -1
  177. package/build/static/js/6611.0759c161.chunk.js +0 -2
  178. package/build/static/js/6779.067ddb78.chunk.js +0 -2
  179. package/build/static/js/6779.067ddb78.chunk.js.map +0 -1
  180. package/build/static/js/7121.5a2464cb.chunk.js +0 -2
  181. package/build/static/js/7227.164af41b.chunk.js +0 -3
  182. package/build/static/js/8725.c502bc04.chunk.js +0 -2
  183. package/build/static/js/8768.3949a507.chunk.js +0 -3
  184. package/build/static/js/8768.3949a507.chunk.js.map +0 -1
  185. package/build/static/js/9403.bc491501.chunk.js.map +0 -1
  186. package/build/static/js/9449.5a03d5e0.chunk.js +0 -2
  187. package/build/static/js/main.b2c1720d.js +0 -2
  188. package/build/static/js/main.b2c1720d.js.map +0 -1
  189. /package/build/static/js/{1153.b177c609.chunk.js.LICENSE.txt → 1153.2dacd6a6.chunk.js.LICENSE.txt} +0 -0
  190. /package/build/static/js/{1454.3bedb8d0.chunk.js.LICENSE.txt → 1454.f5b0ddef.chunk.js.LICENSE.txt} +0 -0
  191. /package/build/static/js/{1554.45371204.chunk.js.LICENSE.txt → 1554.a8cc392e.chunk.js.LICENSE.txt} +0 -0
  192. /package/build/static/js/{2716.0f1a1993.chunk.js.LICENSE.txt → 2716.2d038e25.chunk.js.LICENSE.txt} +0 -0
  193. /package/build/static/js/{8768.3949a507.chunk.js.LICENSE.txt → 439.e6bf1551.chunk.js.LICENSE.txt} +0 -0
  194. /package/build/static/js/{4666.dd2a1cbe.chunk.js.LICENSE.txt → 4666.4f081c8e.chunk.js.LICENSE.txt} +0 -0
  195. /package/build/static/js/{7227.164af41b.chunk.js.LICENSE.txt → 7227.66261e4b.chunk.js.LICENSE.txt} +0 -0
  196. /package/build/static/js/{8643.9887281e.chunk.js.LICENSE.txt → 8643.4b5aa62b.chunk.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/9403.bc491501.chunk.js","mappings":"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","sources":["common/utils/localStorage.js","webpack://@kne-components/components-core/./src/components/ButtonGroup/style.module.scss?7e95","components/ButtonGroup/index.js","webpack://@kne-components/components-core/./src/components/Content/style.module.scss?6a0e","components/Content/index.js","webpack://@kne-components/components-core/./src/components/Descriptions/style.module.scss?d348","components/Descriptions/index.js","webpack://@kne-components/components-core/./src/components/FileList/style.module.scss?bd2d","components/FileList/Title.js","components/FileList/locale/index.js","components/FileList/context.js","components/FileList/DragArea.js","components/FileList/FileList.js","components/FileList/FileUpload.js","webpack://@kne-components/components-core/./src/components/Filter/style.module.scss?eebc","components/Filter/locale/index.js","components/Filter/context.js","components/Filter/FilterLines.js","components/Filter/FilterValueDisplay.js","components/Filter/FilterOuter.js","components/Filter/Filter.js","components/Filter/FilterItem.js","components/Filter/withFieldItem.js","webpack://@kne-components/components-core/./src/common/components/TreeField/style.module.scss?bcd6","common/components/TreeField/index.js","components/Filter/PopoverItem.js","components/Filter/fields/InputFilterItem.js","components/Filter/fields/NumberRangeFilterItem.js","components/Filter/fields/DatePickerFilterItem.js","components/Filter/fields/DateRangePickerFilterItem.js","components/Filter/fields/TypeDateRangePickerFilterItem.js","components/Filter/fields/index.js","components/Filter/getFilterValue.js","components/Filter/AdvancedFilter/fields/CityFilterItem.js","components/Filter/AdvancedFilter/fields/ListFilterItem.js","components/Filter/AdvancedFilter/fields/InputFilterItem.js","components/Filter/AdvancedFilter/fields/index.js","components/Filter/AdvancedFilter/index.js","components/Filter/FilterItemContainer.js","components/Filter/index.js","webpack://@kne-components/components-core/./src/components/Highlight/style.module.scss?a31a","components/Highlight/index.js","webpack://@kne-components/components-core/./src/components/HistoryStore/style.module.scss?1856","components/HistoryStore/index.js","components/Layout/context.js","webpack://@kne-components/components-core/./src/components/Layout/style.module.scss?8c20","components/Layout/Page/FixedContainer.js","components/Layout/Page/Menu.js","components/Layout/Page/Page.js","components/Layout/Affix.js","components/Layout/Page/ContainerHeight.js","components/Layout/Page/Header.js","components/Layout/Page/HeaderInfo.js","components/Layout/Page/PageTitle.js","components/Layout/Page/Option.js","components/Layout/Layout.js","components/Layout/PermissionsPage.js","components/Layout/TablePage.js","components/Layout/StateBarPage.js","webpack://@kne-components/components-core/./src/components/Menu/style.module.scss?ca16","components/Menu/index.js","components/Navigation/favicon.svg","components/Navigation/locale/index.js","webpack://@kne-components/components-core/./src/components/Navigation/style.module.scss?d5bc","components/Navigation/index.js","webpack://@kne-components/components-core/./src/components/Notification/style.module.scss?659e","components/Notification/index.js","webpack://@kne-components/components-core/./src/components/Permissions/style.module.scss?e327","components/Permissions/index.js","webpack://@kne-components/components-core/./src/components/StateBar/style.module.scss?ecea","components/StateBar/index.js","webpack://@kne-components/components-core/./src/components/StateTag/style.module.scss?5aff","components/StateTag/index.js","webpack://@kne-components/components-core/./src/components/Table/style.module.scss?5d23","webpack://@kne-components/components-core/./src/components/Table/columns.module.scss?6c8d","components/Table/OptionsList.js","components/Table/Ellipsis.js","components/Table/ColItem.js","components/Table/HideInfoComponent.js","components/Table/columnTypes.js","components/Table/ColumnsControlContent.js","components/Table/useTableConfig.js","components/Table/useColumnTypeProps.js","components/Table/useGroupHeader.js","components/Table/useSort.js","components/Table/Table.js","components/Table/locale/index.js","components/Table/TablePage.js","components/ButtonGroup/README.md","components/Common/README.md","components/ConfirmButton/README.md","components/Content/README.md","components/Descriptions/README.md","components/Drawer/README.md","components/Enum/README.md","components/Features/README.md","components/File/README.md","components/FileList/README.md","components/FilePreview/README.md","components/Filter/README.md","components/FlexBox/README.md","components/FormInfo/README.md","components/Global/README.md","components/HelperGuide/README.md","components/Highlight/README.md","components/HistoryStore/README.md","components/Icon/README.md","components/Image/README.md","components/InfoPage/README.md","components/Intl/doc/locale/en-US.js","components/Intl/doc/locale/zh-CN.js","components/Intl/README.md","components/Layout/README.md","components/LoadingButton/README.md","components/Menu/README.md","components/Modal/README.md","components/Navigation/README.md","components/Notification/README.md","components/Permissions/README.md","components/StateBar/README.md","components/StateTag/README.md","components/Table/README.md","components/TablePage/README.md","components/Tooltip/README.md","../node_modules/readme/modules.js"],"sourcesContent":["const localStorage = {\n getItem: (key) => {\n const target = window.localStorage.getItem(key);\n try {\n const { dataType, value } = JSON.parse(target);\n if (dataType === \"object\" && value === \"null\") {\n return null;\n }\n if (dataType === \"undefined\") {\n return void 0;\n }\n if (dataType === \"number\") {\n return Number(value);\n }\n if (dataType === \"boolean\") {\n return Boolean(value);\n }\n return value;\n } catch (e) {\n return null;\n }\n },\n setItem: (key, value) => {\n const dataType = typeof value;\n window.localStorage.setItem(key, JSON.stringify({ dataType, value }));\n },\n};\n\nexport default localStorage;\n","// extracted by mini-css-extract-plugin\nexport default {\"width-container\":\"style_width-container__JfEbg__3Nde3\",\"hidden-container\":\"style_hidden-container__EdySA__3Nde3\",\"hidden-inner\":\"style_hidden-inner__vAN59__3Nde3\",\"menu-list\":\"style_menu-list__VDttR__3Nde3\",\"btn-item\":\"style_btn-item__mp5MQ__3Nde3\"};","import { startTransition, useState } from \"react\";\nimport useRefCallback from \"@kne/use-ref-callback\";\nimport { Button, Dropdown, Space } from \"antd\";\nimport classnames from \"classnames\";\nimport Icon from \"@components/Icon\";\nimport LoadingButton from \"@components/LoadingButton\";\nimport ConfirmButton from \"@components/ConfirmButton\";\nimport useResize from \"@common/hooks/useResize\";\nimport pick from \"lodash/pick\";\nimport style from \"./style.module.scss\";\nimport memoize from \"lodash/memoize\";\n\nconst areaWidthComputed = memoize(\n ({ amountWidth, moreBtnWidth, buttonWidthList, spaceProps, compact }) => {\n const spaceWidth = (() => {\n if (compact) {\n return 0;\n }\n\n if ([\"small\", \"middle\", \"large\"].indexOf(spaceProps.size) > -1) {\n return ([\"small\", \"middle\", \"large\"].indexOf(spaceProps.size) + 1) * 8;\n }\n\n if (Number.isInteger(spaceProps.size)) {\n return spaceProps.size;\n }\n return 8;\n })();\n\n let targetLength = 0,\n targetWidth = 0;\n\n // 采取先加后减策略\n while (\n amountWidth >=\n targetWidth +\n buttonWidthList[targetLength] +\n targetLength * spaceWidth &&\n targetLength < buttonWidthList.length\n ) {\n targetWidth += buttonWidthList[targetLength];\n targetLength += 1;\n }\n\n while (\n amountWidth <\n targetWidth +\n (targetLength - 1) * spaceWidth +\n (targetLength < buttonWidthList.length\n ? moreBtnWidth + spaceWidth\n : 0) &&\n targetLength > 0\n ) {\n targetWidth -= buttonWidthList[targetLength - 1];\n targetLength -= 1;\n }\n\n return targetLength;\n },\n ({ amountWidth, moreBtnWidth, buttonWidthList, spaceProps, compact }) => {\n return `${amountWidth}${moreBtnWidth}${buttonWidthList.join(\n \",\"\n )}${Object.values(spaceProps).join(\",\")}${compact && compact.toString()}`;\n }\n);\n\nconst ButtonGroup = ({ list, more, compact, ...props }) => {\n const spaceProps = pick(props, [\"size\", \"split\", \"align\", \"style\"]);\n const [showLength, setShowLength] = useState(list.length && 1);\n const computedLength = useRefCallback(() => {\n const el = targetRef.current,\n moreEl = moreRef.current,\n widthEl = ref.current;\n if (!el) {\n return;\n }\n\n const buttonEls = el.querySelectorAll(\".button-group-item\");\n if (!buttonEls) {\n return;\n }\n if (buttonEls.length === 0) {\n return;\n }\n\n const amountWidth = widthEl.clientWidth,\n moreBtnWidth = moreEl.clientWidth,\n buttonWidthList = [].map.call(buttonEls, (el) => el.offsetWidth);\n const targetLength = areaWidthComputed({\n amountWidth,\n moreBtnWidth,\n buttonWidthList,\n spaceProps,\n compact,\n });\n startTransition(() => {\n setShowLength(targetLength);\n });\n });\n const ref = useResize(computedLength);\n const targetRef = useResize(computedLength);\n const moreRef = useResize(computedLength);\n const otherList = list.slice(showLength);\n\n const renderButton = (renderItem, index, isDropdown) => {\n if (typeof renderItem === \"function\") {\n return renderItem({\n key: index,\n className: classnames(\"button-group-item\", style[\"btn-item\"]),\n isDropdown,\n });\n }\n const { className, confirm, buttonComponent, ...props } = renderItem;\n const isConfirm = confirm || props.message;\n const CurrentButton = isConfirm\n ? ConfirmButton\n : buttonComponent || LoadingButton;\n\n return (\n <CurrentButton\n danger={isConfirm && props.isDelete !== false}\n {...Object.assign(\n {},\n props,\n isConfirm && (props.isModal || isDropdown)\n ? {\n isModal: true,\n }\n : {}\n )}\n key={index}\n className={classnames(\n \"button-group-item\",\n style[\"btn-item\"],\n className\n )}\n />\n );\n };\n\n const SpaceComponent = compact ? Space.Compact : Space;\n\n return (\n <>\n <div className={style[\"width-container\"]} ref={ref} />\n <div className={style[\"hidden-container\"]}>\n <div className={style[\"hidden-inner\"]} ref={moreRef}>\n {more}\n </div>\n <div className={style[\"hidden-inner\"]} ref={targetRef}>\n <SpaceComponent {...spaceProps}>\n {list.map(renderButton)}\n </SpaceComponent>\n </div>\n </div>\n <SpaceComponent {...spaceProps}>\n {list\n .slice(0, showLength)\n .map((item, index) => renderButton(item, index, false))}\n {otherList.length > 0 && (\n <Dropdown\n overlayClassName={style[\"menu-list\"]}\n menu={{\n items: otherList.map((item, index) => {\n return {\n key: index,\n label: renderButton(item, index, true),\n };\n }),\n }}\n >\n {more}\n </Dropdown>\n )}\n </SpaceComponent>\n </>\n );\n};\n\nButtonGroup.defaultProps = {\n more: (\n <Button>\n 更多\n <Icon type=\"icon-arrow-thin-down\" />\n </Button>\n ),\n};\n\nexport default ButtonGroup;\n","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"style_content__KHqQn__3Nde3\",\"size-small\":\"style_size-small__RwAEB__3Nde3\",\"label\":\"style_label__EG-qx__3Nde3\",\"content-content\":\"style_content-content__AkJj-__3Nde3\",\"item\":\"style_item__WV0-i__3Nde3\"};","import { useLayoutEffect, useRef, useState } from \"react\";\nimport { Col, Row, Space } from \"antd\";\nimport classnames from \"classnames\";\nimport style from \"./style.module.scss\";\nimport Features from \"@components/Features\";\n\nexport const Label = ({ className, children, setWidth }) => {\n const ref = useRef(null);\n const setWidthRef = useRef(setWidth);\n setWidthRef.current = setWidth;\n useLayoutEffect(() => {\n const computed = () => {\n if (!ref.current) {\n return;\n }\n const { width } = ref.current.getBoundingClientRect();\n setWidth(width);\n };\n const resizeObserver = new ResizeObserver(computed);\n resizeObserver.observe(ref.current);\n computed();\n return () => {\n resizeObserver.disconnect();\n };\n }, [setWidth]);\n return (\n <div ref={ref} className={className}>\n {children}:\n </div>\n );\n};\n\nconst Content = ({ list, labelAlign, col, gutter, className, size }) => {\n const labelWidthListRef = useRef([]);\n const [maxLabelWidth, setMaxLabelWidth] = useState(0);\n return (\n <Row\n data-testid=\"components-core-content\"\n className={classnames(style[\"content\"], \"content\", className, {\n [style[\"size-small\"]]: size === \"small\",\n })}\n gutter={gutter}\n >\n {list\n .filter((item) => {\n if (typeof item.display === \"function\") {\n return item.display();\n }\n return item.display !== false;\n })\n .map(({ label, content, block, featureId }, index) => {\n const render = (\n <Col\n span={block === true ? 24 : 24 / col}\n key={index}\n className={style[\"item\"]}\n >\n <Space\n key={index}\n className={classnames(style[\"item\"], \"content-item\")}\n >\n {label ? (\n <div\n style={\n maxLabelWidth && labelAlign !== \"auto\"\n ? {\n minWidth: maxLabelWidth,\n textAlign: labelAlign,\n }\n : null\n }\n >\n <Label\n className={classnames(style[\"label\"], \"content-label\")}\n setWidth={(width) => {\n labelWidthListRef.current[index] = width;\n setMaxLabelWidth(\n Math.max(...labelWidthListRef.current)\n );\n }}\n >\n {label}\n </Label>\n </div>\n ) : null}\n <div\n className={classnames(\n style[\"content-content\"],\n \"content-content\"\n )}\n >\n {content}\n </div>\n </Space>\n </Col>\n );\n return featureId ? (\n <Features id={featureId}>{render}</Features>\n ) : (\n render\n );\n })}\n </Row>\n );\n};\n\nContent.defaultProps = {\n labelAlign: \"left\",\n col: 1,\n gutter: 0,\n list: [],\n};\n\nexport default Content;\n","// extracted by mini-css-extract-plugin\nexport default {\"descriptions\":\"style_descriptions__HozsO__3Nde3\",\"descriptions-item\":\"style_descriptions-item__vV+UK__3Nde3\",\"col-label\":\"style_col-label__ZFEwt__3Nde3\",\"col-content\":\"style_col-content__wtZ9I__3Nde3\"};","import { Col, Row } from \"antd\";\nimport classnames from \"classnames\";\nimport Features from \"@components/Features\";\nimport style from \"./style.module.scss\";\n\nconst Descriptions = ({ dataSource, isFull, className, ...props }) => {\n return (\n <Row {...props} className={classnames(style[\"descriptions\"], className)}>\n {dataSource.map((colItem, colIndex) => {\n const _colItem = colItem.slice(0, 2).filter((item) => {\n if (typeof item.display === \"function\") {\n return item.display(item, dataSource);\n }\n return item.display !== false;\n });\n return _colItem\n .slice(0, 2)\n .map(({ label, content, featureId }, itemIndex) => {\n const render = (\n <Col\n span={24 / _colItem.length}\n className={classnames(\n style[\"col-item\"],\n \"descriptions-col-item\"\n )}\n key={`${colIndex}-${itemIndex}`}\n >\n <Row\n wrap={false}\n className={classnames(\n style[\"descriptions-item\"],\n \"descriptions-item\"\n )}\n >\n <Col\n span={isFull ? 8 : 4 * _colItem.length}\n className={classnames(\n style[\"col-label\"],\n \"descriptions-col-label\"\n )}\n >\n {label}\n </Col>\n <Col\n span={isFull ? 16 : 24 - 4 * _colItem.length}\n className={classnames(\n style[\"col-content\"],\n \"descriptions-col-content\"\n )}\n >\n {content}\n </Col>\n </Row>\n </Col>\n );\n return featureId ? (\n <Features id={featureId} key={`${colIndex}-${itemIndex}`}>\n {render}\n </Features>\n ) : (\n render\n );\n });\n })}\n </Row>\n );\n};\n\nexport default Descriptions;\n","// extracted by mini-css-extract-plugin\nexport default {\"file-list-outer\":\"style_file-list-outer__wPhbb__3Nde3\",\"file-list-title\":\"style_file-list-title__zXM5r__3Nde3\",\"container\":\"style_container__P4RaF__3Nde3\",\"file-preview-inner\":\"style_file-preview-inner__cvE72__3Nde3\",\"file-preview\":\"style_file-preview__M-Asq__3Nde3\",\"drag-area\":\"style_drag-area__Q+lm7__3Nde3\",\"upload-drag-close\":\"style_upload-drag-close__u5o8W__3Nde3\",\"upload-drag-tips\":\"style_upload-drag-tips__z7puZ__3Nde3\",\"upload-drag-icon\":\"style_upload-drag-icon__sGGoS__3Nde3\",\"upload-drag-title\":\"style_upload-drag-title__9Afmb__3Nde3\",\"upload-drag-text\":\"style_upload-drag-text__o38vS__3Nde3\",\"list-item-outer\":\"style_list-item-outer__qfopH__3Nde3\",\"list-item\":\"style_list-item__QUzqW__3Nde3\",\"split\":\"style_split__8HVlD__3Nde3\",\"loading\":\"style_loading__OSlYB__3Nde3\",\"list-options\":\"style_list-options__4l3QJ__3Nde3\",\"list-time\":\"style_list-time__canbk__3Nde3\",\"title-group\":\"style_title-group__8IJkS__3Nde3\",\"upload-btn\":\"style_upload-btn__Q+Jxn__3Nde3\",\"total-count\":\"style_total-count__z1fyd__3Nde3\",\"file-select\":\"style_file-select__mHqyI__3Nde3\",\"file-name\":\"style_file-name__QkvMn__3Nde3\",\"file-select-info\":\"style_file-select-info__fOLiM__3Nde3\",\"file-select-option\":\"style_file-select-option__AbDrD__3Nde3\"};","import style from \"./style.module.scss\";\nimport { Col, Row, Segmented, Select, Space, Typography } from \"antd\";\nimport FileType from \"@kne/react-file-type\";\nimport last from \"lodash/last\";\nimport dayjs from \"dayjs\";\nimport Icon from \"@components/Icon\";\nimport { OptionButtons } from \"@components/File\";\nimport { FormattedMessage } from \"@components/Intl\";\n\nconst Title = ({\n currentTab,\n setCurrentTab,\n previewMap,\n previewList,\n getPermission,\n currentPreviewFileId,\n setCurrentPreviewFileId,\n itemApis,\n children,\n maxWidth,\n getPopupContainer,\n}) => {\n return (\n <div className={style[\"file-list-title\"]}>\n <Row align=\"middle\" justify=\"space-between\" wrap={false}>\n <Col>\n <Space className={style[\"title-group\"]} size={4}>\n <Segmented\n value={currentTab}\n onChange={setCurrentTab}\n options={[\n {\n label: (\n <Space size={4}>\n <Icon type=\"icon-shitu-liebiao\" />\n <FormattedMessage id=\"listText\" moduleName=\"FileList\" />\n </Space>\n ),\n value: \"list\",\n },\n {\n label: (\n <Space size={4}>\n <Icon type=\"icon-shitu-yulan\" />\n <FormattedMessage\n id=\"previewText\"\n moduleName=\"FileList\"\n />\n </Space>\n ),\n value: \"preview\",\n },\n ]}\n />\n {currentTab === \"preview\" &&\n currentPreviewFileId &&\n previewMap.get(currentPreviewFileId) && (\n <>\n <Select\n className={style[\"file-select\"]}\n variant=\"borderless\"\n popupMatchSelectWidth={false}\n value={currentPreviewFileId}\n onChange={setCurrentPreviewFileId}\n getPopupContainer={getPopupContainer}\n >\n {previewList.map(({ filename, userName, date, ossId }) => {\n return (\n <Select.Option\n className={style[\"file-select-option\"]}\n key={ossId}\n value={ossId}\n >\n <Space direction=\"vertical\">\n <Space size={4} align=\"start\">\n <FileType\n type={last(filename.split(\".\"))}\n size={14}\n ></FileType>\n <Typography.Text\n className={style[\"file-name\"]}\n ellipsis\n style={{ \"--max-width\": `${maxWidth}px` }}\n >\n {filename}\n </Typography.Text>\n </Space>\n {userName || date ? (\n <Space\n className={style[\"file-select-info\"]}\n size={24}\n >\n <div>\n <FormattedMessage\n id=\"uploadUser\"\n moduleName=\"FileList\"\n />\n :{userName}\n </div>\n <div>\n <FormattedMessage\n id=\"uploadTime\"\n moduleName=\"FileList\"\n />\n :\n {date &&\n dayjs(date).format(\"YYYY-MM-DD HH:mm:ss\")}\n </div>\n </Space>\n ) : null}\n </Space>\n </Select.Option>\n );\n })}\n </Select>\n <OptionButtons\n hasPreview={false}\n getPermission={getPermission}\n item={previewMap.get(currentPreviewFileId)}\n apis={itemApis}\n />\n <div className={style[\"total-count\"]}>\n <FormattedMessage\n id=\"totalCount\"\n values={{ count: previewList.length }}\n moduleName=\"FileList\"\n />\n </div>\n </>\n )}\n </Space>\n </Col>\n <Col>{children}</Col>\n </Row>\n </div>\n );\n};\n\nTitle.defaultProps = {\n maxWidth: 260,\n};\n\nexport default Title;\n","const importMessages = (locale) => {\n return {\n \"en-US\": () => import(\"./en-US\"),\n \"zh-CN\": () => import(\"./zh-CN\"),\n }[locale]();\n};\n\nexport default importMessages;\n","import { createContext, useContext as useReactContext } from \"react\";\n\nconst context = createContext({});\nexport const { Provider } = context;\n\nexport const useContext = () => {\n return useReactContext(context);\n};\n\nexport default context;\n","import style from \"./style.module.scss\";\nimport { useRef, useState } from \"react\";\nimport { Button, Space, Typography } from \"antd\";\nimport importMessages from \"./locale\";\nimport useOutside from \"@kne/use-click-outside\";\nimport classnames from \"classnames\";\nimport { Provider, useContext } from \"./context\";\nimport Icon from \"@components/Icon\";\nimport { FormattedMessage, useIntl, IntlProvider } from \"@components/Intl\";\nimport { InputFileText } from \"@common/hocs/withInputFile\";\nimport acceptFunc from \"@common/utils/accept\";\n\nexport const DragButton = ({ children }) => {\n const { onOpenChange, getDragButtonEl } = useContext();\n return (\n <div\n ref={getDragButtonEl}\n className={style[\"upload-btn\"]}\n onClick={() => {\n onOpenChange((open) => !open);\n }}\n >\n <Typography.Text className=\"ant-btn\">\n <Icon type=\"icon-tuozhuaishangchuan\" />\n {children || <FormattedMessage id=\"dragText\" moduleName=\"FileList\" />}\n </Typography.Text>\n </div>\n );\n};\n\nexport const UploadButton = ({ children }) => {\n const { accept, onFileSelected } = useContext();\n return (\n <InputFileText\n className={style[\"upload-btn\"]}\n accept={accept}\n multiple\n onChange={onFileSelected}\n >\n <Icon type=\"icon-tianjia\" />\n {children}\n </InputFileText>\n );\n};\nexport const DragAreaOuter = ({\n title,\n accept,\n fileSize,\n maxLength,\n onFileSelected,\n children,\n className,\n}) => {\n const [open, onOpenChange] = useState(false);\n const dragButtonRef = useRef(null);\n const dragOuterRef = useOutside((e) => {\n if (!dragButtonRef.current) {\n return;\n }\n if (\n dragButtonRef.current.contains(e.target) ||\n e.target === dragButtonRef.current\n ) {\n return;\n }\n onOpenChange(false);\n });\n return (\n <IntlProvider importMessages={importMessages} moduleName=\"FileList\">\n <Provider\n value={{\n open,\n onOpenChange,\n accept,\n fileSize,\n maxLength,\n onFileSelected,\n getDragButtonEl: (el) => {\n dragButtonRef.current = el;\n },\n }}\n >\n <Space className={style[\"file-list-outer\"]} direction=\"vertical\">\n {title}\n <div\n className={classnames(style[\"container\"], className)}\n ref={dragOuterRef}\n onDragEnter={() => {\n onOpenChange(true);\n }}\n >\n {children}\n </div>\n </Space>\n </Provider>\n </IntlProvider>\n );\n};\n\nDragAreaOuter.defaultProps = {\n fileSize: 20,\n accept: [\".png\", \".jpg\", \".pdf\", \".docx\", \".doc\"],\n};\n\nexport const UploadTips = ({ icon, title, renderTips }) => {\n const { accept, fileSize, maxLength } = useContext();\n const intl = useIntl({ moduleName: \"FileList\" });\n const tipsText = renderTips(\n intl.formatMessage(\n { id: \"dragTips\" },\n {\n accept: accept.map((str) => str.replace(/^\\./, \"\")).join(\"、\"),\n size: fileSize,\n }\n ),\n {\n fileSize,\n maxLength,\n accept,\n }\n );\n\n return (\n <div className={classnames(style[\"upload-drag-tips\"], \"upload-drag-tips\")}>\n <div className={style[\"upload-drag-icon\"]}>\n {icon || <Icon type=\"icon-shangchuan\" size={64} />}\n </div>\n <div className={style[\"upload-drag-title\"]}>\n {title || <FormattedMessage id=\"dragTitle\" moduleName=\"FileList\" />}\n </div>\n <div className={style[\"upload-drag-text\"]}>{tipsText}</div>\n </div>\n );\n};\n\nUploadTips.defaultProps = {\n renderTips: (defaultTips) => {\n return defaultTips;\n },\n};\n\nconst DragArea = ({ children, className }) => {\n const { open, accept, onOpenChange, onFileSelected } = useContext();\n if (!open) {\n return null;\n }\n return (\n <div\n className={classnames(style[\"drag-area\"], className)}\n onDragOver={(e) => {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = \"copy\";\n }}\n onDrop={(e) => {\n e.stopPropagation();\n e.preventDefault();\n if (e.dataTransfer.files.length === 0) {\n return;\n }\n onOpenChange(false);\n const fileList = Array.from(e.dataTransfer.files).filter((file) => {\n return acceptFunc(file, accept);\n });\n onFileSelected(fileList);\n }}\n onDragEnd={() => {\n onOpenChange(false);\n }}\n >\n <Button\n className={style[\"upload-drag-close\"]}\n type=\"text\"\n shape=\"circle\"\n size=\"small\"\n icon={<Icon type=\"icon-close-bold\" />}\n onClick={() => {\n onOpenChange(false);\n }}\n />\n {children}\n </div>\n );\n};\n\nDragArea.defaultProps = {\n children: <UploadTips />,\n};\n\nexport default DragArea;\n","import { useState, useMemo, useEffect } from \"react\";\nimport get from \"lodash/get\";\nimport { App, Space, Divider, Empty } from \"antd\";\nimport Title from \"./Title\";\nimport DragArea, { DragAreaOuter, DragButton, UploadButton } from \"./DragArea\";\nimport { List } from \"@components/File\";\nimport FilePreview from \"@components/FilePreview\";\nimport { useIntl, FormattedMessage, IntlProvider } from \"@components/Intl\";\nimport { useFileUpload } from \"@common/hocs/withInputFile\";\nimport { usePreset } from \"@components/Global\";\nimport importMessages from \"./locale\";\nimport style from \"./style.module.scss\";\n\nconst FileListInner = ({\n maxLength,\n list: previewList,\n setList,\n defaultTab,\n defaultPreviewFileId,\n apis: currentApis,\n getPermission,\n titleExtra,\n fileSize,\n accept,\n getPopupContainer,\n}) => {\n const { apis: baseApis } = usePreset();\n const apis = Object.assign({}, baseApis, currentApis);\n const { fileList: uploadingList, onFileSelected } = useFileUpload({\n maxLength,\n multiple: true,\n value: previewList,\n onChange: setList,\n concurrentCount: 1,\n onAdd: () => {\n setCurrentTab(\"list\");\n },\n onSave: apis.onSave,\n ossUpload: apis.ossUpload,\n });\n const [currentTab, setCurrentTab] = useState(defaultTab);\n const { formatMessage } = useIntl({ moduleName: \"FileList\" });\n const { message } = App.useApp();\n const previewMap = useMemo(() => {\n return new Map(\n previewList.map((item) => {\n return [item.ossId, item];\n })\n );\n }, [previewList]);\n const [currentPreviewFileId, setCurrentPreviewFileId] = useState(\n defaultPreviewFileId || get(previewList, \"[0].ossId\", null)\n );\n useEffect(() => {\n if (currentPreviewFileId && previewMap.get(currentPreviewFileId)) {\n return;\n }\n setCurrentPreviewFileId(get(previewList, \"[0].ossId\", null));\n }, [previewList, previewMap, currentPreviewFileId]);\n const itemApis = {\n onPreview: (item) => {\n setCurrentPreviewFileId(item.ossId);\n setCurrentTab(\"preview\");\n },\n onDelete: async (item) => {\n apis.onDelete && (await apis.onDelete(item));\n setList((list) => {\n const newList = list.slice(0);\n const index = list.findIndex(({ ossId }) => ossId === item.ossId);\n index > -1 && newList.splice(index, 1);\n return newList;\n });\n message.success(\n formatMessage({ id: \"successDelete\" }, { name: item.filename })\n );\n },\n onEdit: async ({ formData, item }) => {\n apis.onEdit && (await apis.onEdit({ formData, item }));\n setList((list) => {\n const newList = list.slice(0);\n const index = list.findIndex(({ ossId }) => ossId === item.ossId);\n index > -1 &&\n newList.splice(\n index,\n 1,\n Object.assign({}, item, { filename: formData.name })\n );\n return newList;\n });\n message.success(\n formatMessage({ id: \"successEditFileName\" }, { name: item.filename })\n );\n },\n };\n\n const titleExtraInner =\n typeof titleExtra === \"function\"\n ? titleExtra({\n currentPreviewFileId,\n currentTab,\n })\n : titleExtra;\n\n return (\n <DragAreaOuter\n title={\n <Title\n currentTab={currentTab}\n setCurrentTab={setCurrentTab}\n previewMap={previewMap}\n previewList={previewList}\n getPermission={getPermission}\n currentPreviewFileId={currentPreviewFileId}\n setCurrentPreviewFileId={setCurrentPreviewFileId}\n itemApis={itemApis}\n getPopupContainer={getPopupContainer}\n >\n <Space split={<Divider type=\"vertical\" />}>\n {titleExtraInner}\n {getPermission(\"add\", {}) ? (\n <>\n <DragButton>\n <FormattedMessage id=\"dragText\" moduleName=\"FileList\" />\n </DragButton>\n <UploadButton>\n <FormattedMessage id=\"uploadFile\" moduleName=\"FileList\" />\n </UploadButton>\n </>\n ) : null}\n </Space>\n </Title>\n }\n fileSize={fileSize}\n maxLength={maxLength}\n onFileSelected={onFileSelected}\n accept={accept}\n >\n {currentTab === \"list\" ? (\n <List\n dataSource={[...uploadingList, ...previewList]}\n getPermission={getPermission}\n apis={itemApis}\n />\n ) : null}\n {currentTab === \"preview\" ? (\n currentPreviewFileId ? (\n <div className={style[\"file-preview-inner\"]}>\n <FilePreview\n className={style[\"file-preview\"]}\n id={currentPreviewFileId}\n apis={apis}\n originName={previewMap.get(currentPreviewFileId)?.filename}\n />\n </div>\n ) : (\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n className=\"ant-empty-normal\"\n />\n )\n ) : null}\n <DragArea />\n </DragAreaOuter>\n );\n};\n\nFileListInner.defaultProps = {\n defaultTab: \"list\",\n titleExtra: null,\n accept: [\".png\", \".jpg\", \".pdf\", \".docx\", \".doc\"],\n fileSize: 20,\n maxLength: Number.MAX_VALUE,\n getPermission: () => true,\n};\n\nconst FileList = (props) => {\n return (\n <IntlProvider importMessages={importMessages} moduleName=\"FileList\">\n <FileListInner {...props} />\n </IntlProvider>\n );\n};\n\nexport default FileList;\n","import { Space, Divider, Row, Col } from \"antd\";\nimport DragArea, { DragAreaOuter, DragButton, UploadButton } from \"./DragArea\";\nimport { List } from \"@components/File\";\nimport { useFileUpload } from \"@common/hocs/withInputFile\";\nimport { usePreset } from \"@components/Global\";\n\nconst FileUpload = ({\n maxLength,\n list: previewList,\n setList,\n apis: currentApis,\n getPermission,\n fileSize,\n accept,\n}) => {\n const { apis: baseApis } = usePreset();\n const apis = Object.assign({}, baseApis, currentApis);\n const { fileList: uploadingList, onFileSelected } = useFileUpload({\n maxLength,\n multiple: true,\n value: previewList,\n onChange: setList,\n concurrentCount: 1,\n onSave: apis.onSave,\n ossUpload: apis.ossUpload,\n });\n return (\n <DragAreaOuter\n title={\n <Row>\n <Col flex={1}></Col>\n <Col>\n <Space split={<Divider type=\"vertical\" />}>\n <DragButton />\n <UploadButton>上传</UploadButton>\n </Space>\n </Col>\n </Row>\n }\n fileSize={fileSize}\n maxLength={maxLength}\n onFileSelected={onFileSelected}\n accept={accept}\n >\n <List\n dataSource={[...uploadingList, ...previewList]}\n getPermission={getPermission}\n apis={apis}\n />\n <DragArea />\n </DragAreaOuter>\n );\n};\n\nFileUpload.defaultProps = {\n accept: [\".png\", \".jpg\", \".pdf\", \".docx\", \".doc\"],\n fileSize: 20,\n maxLength: Number.MAX_VALUE,\n getPermission: () => true,\n};\n\nexport default FileUpload;\n","// extracted by mini-css-extract-plugin\nexport default {\"filter\":\"style_filter__Xml45__3Nde3\",\"filter-item-icon\":\"style_filter-item-icon__kVCRK__3Nde3\",\"filter-item-option-icon\":\"style_filter-item-option-icon__q1fz3__3Nde3\",\"filter-title\":\"style_filter-title__PlIpS__3Nde3\",\"filter-title-hidden\":\"style_filter-title-hidden__NJ1ZB__3Nde3\",\"ad-filter-title\":\"style_ad-filter-title__5-OzD__3Nde3\",\"ad-filter-line\":\"style_ad-filter-line__ga6UH__3Nde3\",\"filter-line\":\"style_filter-line__E+cRh__3Nde3\",\"clean-btn\":\"style_clean-btn__oSEvm__3Nde3\",\"filter-item\":\"style_filter-item__Q2ncE__3Nde3\",\"un-expand\":\"style_un-expand__4PFY8__3Nde3\",\"ad-filter-selected\":\"style_ad-filter-selected__KbLfG__3Nde3\",\"filter-label\":\"style_filter-label__qu26i__3Nde3\",\"filter-item-wrap\":\"style_filter-item-wrap__rOq7H__3Nde3\",\"option\":\"style_option__rd5Qo__3Nde3\",\"is-active\":\"style_is-active__OArQI__3Nde3\",\"is-visited\":\"style_is-visited__gZ5ni__3Nde3\",\"un-expand-shadow\":\"style_un-expand-shadow__fj92e__3Nde3\",\"filter-item-label\":\"style_filter-item-label__C781J__3Nde3\",\"filter-item-field\":\"style_filter-item-field__Ltfr8__3Nde3\",\"filter-drop-tag\":\"style_filter-drop-tag__DD-2P__3Nde3\",\"filter-list-tag\":\"style_filter-list-tag__Qt5hA__3Nde3\",\"filter-tag\":\"style_filter-tag__dUGfu__3Nde3\",\"filter-tag-value\":\"style_filter-tag-value__p-SFv__3Nde3\",\"pop-util-content\":\"style_pop-util-content__bx5zP__3Nde3\",\"pop-util-overlay\":\"style_pop-util-overlay__LEASt__3Nde3\",\"pop-util-footer\":\"style_pop-util-footer__Xat1s__3Nde3\",\"pop-util-text\":\"style_pop-util-text__pzeUy__3Nde3\",\"filter-item-inner\":\"style_filter-item-inner__LVXgh__3Nde3\",\"filter-item-text\":\"style_filter-item-text__MA8tU__3Nde3\",\"filter-item-number-range\":\"style_filter-item-number-range__U-OgQ__3Nde3\",\"filter-item-custom\":\"style_filter-item-custom__UusRa__3Nde3\",\"filter-item-custom-active\":\"style_filter-item-custom-active__uFtny__3Nde3\",\"filter-item-number-range-split\":\"style_filter-item-number-range-split__fVt8E__3Nde3\",\"filter-item-number-input\":\"style_filter-item-number-input__YPO6K__3Nde3\",\"range-picker\":\"style_range-picker__c6ngq__3Nde3\",\"cascader-select-wrap\":\"style_cascader-select-wrap__z5hu7__3Nde3\",\"cascader-dropdown-menu\":\"style_cascader-dropdown-menu__nhAH5__3Nde3\",\"filter-advanced\":\"style_filter-advanced__4cyDy__3Nde3\",\"filter-advanced-item-other\":\"style_filter-advanced-item-other__-v86K__3Nde3\",\"filter-advanced-item-other-inner\":\"style_filter-advanced-item-other-inner__sXLEV__3Nde3\",\"filter-advanced-more\":\"style_filter-advanced-more__OFXq4__3Nde3\"};","const importMessages = (locale) => {\n return {\n \"en-US\": () => import(\"./en-US\"),\n \"zh-CN\": () => import(\"./zh-CN\"),\n }[locale]();\n};\n\nexport default importMessages;\n","import { createContext, useContext as useReactContext } from \"react\";\n\nexport const context = createContext({});\n\nexport const { Provider } = context;\n\nexport const useContext = () => useReactContext(context);\n","import classnames from \"classnames\";\nimport { useState } from \"react\";\nimport Icon from \"@components/Icon\";\nimport style from \"./style.module.scss\";\nimport { Col, Row, Space } from \"antd\";\nimport { FormattedMessage, IntlProvider } from \"@components/Intl\";\nimport importMessages from \"./locale\";\nimport { useContext } from \"./context\";\nimport get from \"lodash/get\";\n\nconst Line = ({ list, children }) => {\n const { value, onChange } = useContext();\n return (\n <div className={style[\"filter-line\"]}>\n {list.map((item, index) => {\n const ComponentItem = item.type;\n return (\n <ComponentItem\n {...item.props}\n key={item.key || item.props.name || index}\n value={\n value\n ? get(value.get(item.props.name), \"value\")\n : item.props.value\n }\n onChange={\n onChange\n ? (value) =>\n onChange({\n name: item.props.name,\n label: item.props.label,\n value,\n })\n : item.props.onChange\n }\n />\n );\n })}\n {children}\n </div>\n );\n};\n\nconst FilterLines = ({\n className,\n list,\n displayLine,\n label,\n extra,\n children,\n}) => {\n const hasMore = list.length > displayLine;\n const [isExpand, setIsExpand] = useState(false);\n\n return (\n <IntlProvider importMessages={importMessages} moduleName=\"Filter\">\n <Space\n className={classnames(style[\"filter-title\"], className)}\n align=\"top\"\n size={16}\n >\n <span className={style[\"filter-label\"]}>\n {label || (\n <FormattedMessage\n id=\"filterText\"\n moduleName=\"Filter\"\n defaultMessage=\"筛选\"\n />\n )}\n </span>\n <Row justify=\"space-between\" wrap={false} align=\"middle\">\n <Col className={style[\"filter-list\"]} flex={1}>\n {list.slice(0, displayLine).map((item, index) => (\n <Line key={index} list={item}>\n {hasMore && isExpand === false && index === displayLine - 1 ? (\n <Space\n size={4}\n className={classnames(\n style[\"filter-item\"],\n style[\"option\"]\n )}\n onClick={() => {\n setIsExpand((value) => !value);\n }}\n >\n <FormattedMessage\n id=\"moreText\"\n moduleName=\"Filter\"\n defaultMessage=\"更多\"\n />\n <Icon\n className={style[\"filter-item-option-icon\"]}\n type=\"icon-arrow-thin-down\"\n />\n </Space>\n ) : null}\n </Line>\n ))}\n </Col>\n <Col>{extra}</Col>\n </Row>\n </Space>\n <Space\n className={classnames(style[\"filter-title\"], \"filter-title-wrap\")}\n align=\"center\"\n size={16}\n >\n {children}\n </Space>\n <Space\n className={classnames(style[\"filter-title\"], \"filter-title-wrap\", {\n [style[\"filter-title-hidden\"]]: !(hasMore && isExpand),\n })}\n align=\"top\"\n size={16}\n >\n <span className={style[\"filter-label\"]}>\n <FormattedMessage\n id=\"moreText\"\n moduleName=\"Filter\"\n defaultMessage=\"更多\"\n />\n </span>\n <div className={style[\"filter-list\"]}>\n {list.slice(displayLine).map((item, index) => (\n <Line key={index} list={item}>\n {index === list.length - displayLine - 1 && (\n <>\n <Space\n size={4}\n className={classnames(style[\"un-expand-shadow\"])}\n >\n <Space\n size={4}\n className={classnames(\n style[\"option\"],\n style[\"filter-item\"]\n )}\n >\n <FormattedMessage\n id=\"toggleUpText\"\n moduleName=\"Filter\"\n defaultMessage=\"收起\"\n />\n <Icon\n className={style[\"filter-item-option-icon\"]}\n type=\"icon-arrow-thin-up\"\n />\n </Space>\n </Space>\n <Space\n size={4}\n className={classnames(style[\"un-expand\"])}\n onClick={() => {\n setIsExpand((value) => !value);\n }}\n >\n <Space\n size={4}\n className={classnames(\n style[\"option\"],\n style[\"filter-item\"]\n )}\n >\n <FormattedMessage\n id=\"toggleUpText\"\n moduleName=\"Filter\"\n defaultMessage=\"收起\"\n />\n <Icon\n className={style[\"filter-item-option-icon\"]}\n type=\"icon-arrow-thin-up\"\n />\n </Space>\n </Space>\n </>\n )}\n </Line>\n ))}\n </div>\n </Space>\n </IntlProvider>\n );\n};\n\nFilterLines.defaultProps = {\n displayLine: 1,\n};\n\nexport default FilterLines;\n","import { Button, Space } from \"antd\";\nimport StateTag from \"@components/StateTag\";\nimport { FormattedMessage, IntlProvider } from \"@components/Intl\";\nimport style from \"@components/Filter/style.module.scss\";\nimport classnames from \"classnames\";\nimport importMessages from \"@components/Filter/locale\";\n\nconst FilterValueDisplay = ({ value: filterValue, extraExpand, onChange }) => {\n return (\n <IntlProvider importMessages={importMessages} moduleName=\"Filter\">\n <Space className={style[\"filter-title\"]} align=\"top\" size={16}>\n <span className={style[\"filter-label\"]}>\n <FormattedMessage\n id=\"selectedText\"\n moduleName=\"Filter\"\n defaultMessage=\"您已选择\"\n />\n </span>\n {/*<div className={style[\"filter-list\"]}>*/}\n <div className={style[\"filter-line\"]}>\n {filterValue.map(({ name, label, value }, index) => {\n return (\n <StateTag\n key={name}\n type=\"filterResult\"\n filterName={label}\n text={\n Array.isArray(value)\n ? value\n .map((item) => {\n return item.label;\n })\n .join(\",\")\n : value.label\n }\n closable\n onClose={() => {\n const newValue = filterValue.slice(0);\n newValue.splice(index, 1);\n onChange(newValue);\n }}\n />\n );\n })}\n <Space size={4} className={classnames(style[\"un-expand-shadow\"])}>\n {extraExpand}\n <Button size=\"small\">\n <FormattedMessage\n id=\"clearAllText\"\n moduleName=\"Filter\"\n defaultMessage=\"清空全部\"\n />\n </Button>\n </Space>\n <Space size={4} className={classnames(style[\"un-expand\"])}>\n {extraExpand}\n <Button\n size=\"small\"\n onClick={() => {\n onChange([]);\n }}\n >\n <FormattedMessage\n id=\"clearAllText\"\n moduleName=\"Filter\"\n defaultMessage=\"清空全部\"\n />\n </Button>\n </Space>\n\n </div>\n {/*</div>*/}\n </Space>\n </IntlProvider>\n );\n};\n\nexport default FilterValueDisplay;\n","import { Provider } from \"./context\";\nimport useControlValue from \"@kne/use-control-value\";\nimport clone from \"lodash/clone\";\nimport classnames from \"classnames\";\nimport style from \"./style.module.scss\";\nimport { useMemo } from \"react\";\nimport { isNotEmpty } from \"@components/Common\";\nimport importMessages from \"./locale\";\n\nimport { IntlProvider } from \"@components/Intl\";\n\nconst FilterOuter = ({ children, className, ...props }) => {\n const [valueBase, onChange] = useControlValue(props);\n\n const value = useMemo(() => {\n return valueBase.filter((item) => isNotEmpty(item.value));\n }, [valueBase]);\n\n const filterValue = useMemo(() => {\n return new Map(value.map((item) => [item.name, item]));\n }, [value]);\n\n return (\n <IntlProvider moduleName=\"Filter\" importMessages={importMessages}>\n <Provider\n value={{\n value: filterValue,\n onChange: (item) => {\n const newFilterValue = clone(filterValue);\n item.value\n ? newFilterValue.set(item.name, item)\n : newFilterValue.delete(item.name);\n onChange?.(Array.from(newFilterValue.values()));\n },\n }}\n >\n <div className={classnames(style[\"filter\"], className)}>\n {children({ props, value, onChange })}\n </div>\n </Provider>\n </IntlProvider>\n );\n};\n\nFilterOuter.defaultProps = {\n defaultValue: [],\n};\n\nexport default FilterOuter;\n","import FilterLines from \"./FilterLines\";\nimport FilterValueDisplay from \"./FilterValueDisplay\";\nimport FilterOuter from \"./FilterOuter\";\n\nconst Filter = (props) => {\n return (\n <FilterOuter {...props}>\n {({ props, value, onChange }) => {\n const { extraExpand, ...others } = props;\n return (\n <>\n <FilterLines {...others} />\n {value && value.length > 0 && (\n <FilterValueDisplay\n value={value}\n onChange={onChange}\n extraExpand={extraExpand}\n />\n )}\n </>\n );\n }}\n </FilterOuter>\n );\n};\n\nFilter.defaultProps = {\n defaultValue: [],\n};\n\nexport default Filter;\n","import classnames from \"classnames\";\nimport { Space } from \"antd\";\nimport Icon from \"@components/Icon\";\nimport style from \"./style.module.scss\";\n\nconst FilterItem = ({ open, active, label, children }) => {\n return (\n <Space className={style[\"filter-item-wrap\"]}>\n <div\n className={classnames(style[\"filter-item\"], {\n [style[\"is-active\"]]: active,\n [style[\"is-visited\"]]: open,\n })}\n >\n <Space className={style[\"filter-item-label\"]} size={4}>\n <div>{label}</div>\n <Icon\n className={style[\"filter-item-icon\"]}\n type=\"icon-triangle-down\"\n />\n </Space>\n <div className={style[\"filter-item-field\"]}>{children}</div>\n </div>\n </Space>\n );\n};\n\nexport default FilterItem;\n","import { useState } from \"react\";\nimport isNotEmpty from \"@common/utils/isNotEmpty\";\nimport FilterItem from \"./FilterItem\";\nimport style from \"./style.module.scss\";\n\nconst withFieldItem =\n (WrappedComponent) =>\n ({ value, onChange, interceptor, label, ...props }) => {\n const [open, setOpen] = useState(false);\n return (\n <FilterItem label={label} open={open} active={isNotEmpty(value)}>\n <WrappedComponent\n allowClear={false}\n {...props}\n className={style[\"filter-item-inner\"]}\n value={value}\n onChange={\n typeof interceptor === \"function\"\n ? (...args) => onChange(interceptor(...args))\n : onChange\n }\n valueType=\"all\"\n onOpenChange={setOpen}\n />\n </FilterItem>\n );\n };\n\nexport default withFieldItem;\n","// extracted by mini-css-extract-plugin\nexport default {\"scroll-loader\":\"style_scroll-loader__Rcuti__3Nde3\",\"is-popup\":\"style_is-popup__pCRv2__3Nde3\"};","import SelectInnerInput from \"@common/components/SelectInnerInput\";\nimport { useMemo, useRef } from \"react\";\nimport useRefCallback from \"@kne/use-ref-callback\";\nimport style from \"./style.module.scss\";\nimport classnames from \"classnames\";\nimport { Space, Tree } from \"antd\";\nimport SimpleBar from \"@common/components/SimpleBar\";\nimport get from \"lodash/get\";\nimport omit from \"lodash/omit\";\nimport memoize from \"lodash/memoize\";\n\nconst useSelectInnerContext = SelectInnerInput.useContext;\n\nconst TreeFieldInner = ({ value: selected, setValue: setSelect, size }) => {\n const { fetchApi, props } = useSelectInnerContext();\n const dataFormat = useRefCallback(props.dataFormat);\n const { single, isPopup, searchPlaceholder, ...others } = props;\n const fieldNamesRef = useRef(props.fieldNames);\n fieldNamesRef.current = props.fieldNames;\n const fetchData = fetchApi.data;\n const { treeData } = useMemo(\n () =>\n dataFormat(fetchData, {\n fieldNames: fieldNamesRef.current,\n }),\n [dataFormat, fetchData]\n );\n\n return (\n <Space direction=\"vertical\" size={16}>\n <SimpleBar\n className={classnames(style[\"scroll-loader\"], {\n [style[\"is-popup\"]]: props.isPopup,\n })}\n >\n <Tree\n {...omit(others, [\"value\", \"valueType\", \"children\", \"dataFormat\"])}\n size={size}\n checkable={!single}\n treeData={treeData}\n onCheck={setSelect}\n checkedKeys={selected}\n onSelect={\n single\n ? setSelect\n : (selectKeys) => {\n const selectKey = selectKeys[0];\n if (selectKey === void 0) {\n return;\n }\n setSelect((current) => {\n const newCurrent = current.slice(0);\n const index = newCurrent.indexOf(selectKey);\n if (index > -1) {\n newCurrent.splice(index, 1);\n } else {\n newCurrent.push(selectKey);\n }\n return newCurrent;\n });\n }\n }\n selectedKeys={single ? selected : undefined}\n />\n </SimpleBar>\n </Space>\n );\n};\n\nconst TreeField = ({ maxLength, dataFormat, ...props }) => {\n return (\n <SelectInnerInput\n {...props}\n dataFormat={(data) => {\n return dataFormat(data, { fieldNames: props.fieldNames });\n }}\n >\n {({ value, setValue }) => {\n return (\n <TreeFieldInner size={maxLength} value={value} setValue={setValue} />\n );\n }}\n </SelectInnerInput>\n );\n};\n\nTreeField.defaultProps = {\n searchPlaceholder: \"搜索\",\n maxLength: Number.MAX_VALUE,\n size: \"middle\",\n isPopup: true,\n checkStrictly: false,\n dataFormat: (data, { fieldNames }) => {\n const treeToList = memoize((nodeList, { fieldNames }) => {\n const list = [];\n const core = (nodeList) => {\n if (!(Array.isArray(nodeList) && nodeList.length > 0)) {\n return;\n }\n nodeList.forEach((node) => {\n const value = node[get(fieldNames, \"key\", \"key\")],\n label = node[get(fieldNames, \"title\", \"title\")],\n children = node[get(fieldNames, \"children\", \"children\")];\n list.push({ id: value, value, label });\n core(children);\n });\n };\n core(nodeList);\n return list;\n });\n\n return {\n treeData: data,\n list: treeToList(data, { fieldNames }),\n };\n },\n};\n\nexport default TreeField;\n","import { useState, useMemo } from \"react\";\nimport { Button, Col, Popover, Row } from \"antd\";\nimport FilterItem from \"./FilterItem\";\nimport isNotEmpty from \"@common/utils/isNotEmpty\";\nimport classnames from \"classnames\";\nimport { FormattedMessage } from \"@components/Intl\";\nimport style from \"./style.module.scss\";\n\nconst PopoverItem = ({\n value,\n label,\n onValidate,\n overlayClassName,\n placement,\n onOpenChange,\n onChange,\n children,\n}) => {\n const [state, setState] = useState(value);\n const [open, setOpen] = useState(false);\n const disabled = useMemo(() => {\n return onValidate && !onValidate(state);\n }, [onValidate, state]);\n return (\n <Popover\n open={open}\n trigger=\"click\"\n placement={placement}\n overlayClassName={classnames(style[\"pop-util-overlay\"], overlayClassName)}\n onOpenChange={(open) => {\n setOpen(open);\n setState(value);\n onOpenChange && onOpenChange(open);\n }}\n content={\n <span\n onClick={(e) => {\n e.stopPropagation();\n }}\n >\n <div className={style[\"pop-util-content\"]}>\n {children({ value: state, onChange: setState })}\n </div>\n <Row className={style[\"pop-util-footer\"]} justify=\"end\" gutter={8}>\n <Col>\n <Button\n size=\"small\"\n onClick={() => {\n setOpen(false);\n onOpenChange && onOpenChange(false);\n }}\n >\n <FormattedMessage\n id=\"cancelText\"\n moduleName=\"Filter\"\n defaultMessage=\"取消\"\n />\n </Button>\n </Col>\n <Col>\n <Button\n size=\"small\"\n type=\"primary\"\n disabled={disabled}\n onClick={() => {\n setOpen(false);\n onOpenChange && onOpenChange(false);\n onChange && onChange(state);\n }}\n >\n <FormattedMessage\n id=\"determineText\"\n moduleName=\"Filter\"\n defaultMessage=\"确定\"\n />\n </Button>\n </Col>\n </Row>\n </span>\n }\n >\n <span>\n <FilterItem open={open} active={isNotEmpty(value)} label={label} />\n </span>\n </Popover>\n );\n};\n\nPopoverItem.defaultProps = {\n placeholder: \"请选择\",\n placement: \"bottomLeft\",\n};\n\nexport default PopoverItem;\n","import PopoverItem from \"../PopoverItem\";\nimport { Input } from \"antd\";\nimport get from \"lodash/get\";\nimport style from \"../style.module.scss\";\n\nconst InputFilterItem = ({\n label,\n value,\n onChange,\n placeholder,\n onValidate,\n overlayClassName,\n placement,\n onOpenChange,\n ...props\n}) => {\n return (\n <PopoverItem\n label={label}\n value={value}\n onChange={onChange}\n {...{ onValidate, overlayClassName, placement, onOpenChange }}\n >\n {({ value, onChange }) => (\n <Input\n {...props}\n placeholder={placeholder || `请输入${label}`}\n className={style[\"filter-item-text\"]}\n value={get(value, \"value\", \"\")}\n onChange={(e) =>\n onChange(\n e.target.value\n ? { label: e.target.value, value: e.target.value }\n : null\n )\n }\n />\n )}\n </PopoverItem>\n );\n};\n\nexport default InputFilterItem;\n","import PopoverItem from \"../PopoverItem\";\nimport { Input, InputNumber, Space } from \"antd\";\nimport get from \"lodash/get\";\nimport isNumber from \"lodash/isNumber\";\nimport { useIntl } from \"@components/Intl\";\nimport style from \"../style.module.scss\";\nimport React from \"react\";\n\nconst computedFilterValue = (range, unit, formatMessage) => {\n if (!isNumber(range[0]) && !isNumber(range[1])) {\n return null;\n }\n\n return {\n label: ((range) => {\n if (isNumber(range[0]) && isNumber(range[1])) {\n return `${range[0]}-${range[1]}${unit || \"\"}`;\n }\n if (isNumber(range[0])) {\n return formatMessage({ id: \"over\" }, { count: range[0], unit });\n }\n if (isNumber(range[1])) {\n return formatMessage({ id: \"lessThan\" }, { count: range[1], unit });\n }\n })(range),\n value: [range[0] || null, range[1] || null],\n };\n};\n\nconst InputFilterItem = ({\n label,\n value,\n onChange,\n placeholder,\n onValidate,\n overlayClassName,\n placement,\n onOpenChange,\n unit,\n ...props\n}) => {\n const { formatMessage } = useIntl({ moduleName: \"Filter\" });\n return (\n <PopoverItem\n label={label}\n value={value}\n onChange={onChange}\n {...{ onValidate, overlayClassName, placement, onOpenChange }}\n >\n {({ value, onChange }) => (\n <Space.Compact>\n <InputNumber\n {...props}\n placeholder={\n placeholder || `${formatMessage({ id: \"pleaseInput\" })}${label}`\n }\n className={style[\"filter-item-number-range\"]}\n value={get(value, \"value[0]\", \"\")}\n onChange={(target) => {\n onChange(\n computedFilterValue(\n [target, get(value, \"value[1]\")],\n unit,\n formatMessage\n )\n );\n }}\n />\n <Input\n style={{\n width: 30,\n borderLeft: 0,\n borderRight: 0,\n pointerEvents: \"none\",\n }}\n placeholder=\"~\"\n disabled\n />\n <InputNumber\n {...props}\n placeholder={\n placeholder || `${formatMessage({ id: \"pleaseInput\" })}${label}`\n }\n className={style[\"filter-item-number-range\"]}\n value={get(value, \"value[1]\", \"\")}\n onChange={(target) => {\n onChange(\n computedFilterValue(\n [get(value, \"value[0]\"), target],\n unit,\n formatMessage\n )\n );\n }}\n />\n {unit && (\n <Input\n style={{\n width: 50,\n borderLeft: 0,\n }}\n value={unit}\n disabled\n />\n )}\n </Space.Compact>\n )}\n </PopoverItem>\n );\n};\n\nInputFilterItem.defaultProps = {\n onValidate: (value) => {\n const range = get(value, \"value\");\n return !(\n range &&\n isNumber(range[0]) &&\n isNumber(range[1]) &&\n range[1] < range[0]\n );\n },\n};\n\nexport default InputFilterItem;\n","import { DatePicker } from \"antd\";\nimport withFieldItem from \"../withFieldItem\";\nimport dayjs from \"dayjs\";\n\nconst DatePickerFilterItem = withFieldItem(\n ({ value, onChange, picker, ...props }) => {\n return (\n <DatePicker\n {...props}\n picker={picker}\n value={value && dayjs(value.value)}\n onChange={(value) => {\n const { format } = Object.assign({ format: \"YYYY-MM-DD\" }, props);\n value &&\n onChange({\n label:\n picker !== \"date\"\n ? `${value.startOf(picker).format(format)}~${value\n .endOf(picker)\n .format(format)}`\n : value.format(format),\n value: new Date(value.startOf(picker).valueOf()),\n });\n }}\n />\n );\n }\n);\n\nDatePickerFilterItem.defaultProps = \"date\";\n\nexport default DatePickerFilterItem;\n","import { DatePicker } from \"antd\";\nimport withFieldItem from \"../withFieldItem\";\nimport dayjs from \"dayjs\";\n\nconst DateRangePickerFilterItem = withFieldItem(\n ({ value, onChange, ...props }) => {\n return (\n <DatePicker.RangePicker\n {...props}\n allowEmpty={[false, false]}\n value={\n value &&\n Array.isArray(value.value) &&\n value.value.length === 2 &&\n value.value.map((item) => dayjs(item))\n }\n onChange={(value) => {\n const { format } = Object.assign({ format: \"YYYY-MM-DD\" }, props);\n onChange({\n label: value.map((item) => item.format(format)).join(\"~\"),\n value: value.map((item) => new Date(item.valueOf())),\n });\n }}\n />\n );\n }\n);\n\nexport default DateRangePickerFilterItem;\n","import PopoverItem from \"../PopoverItem\";\nimport TypeDateRangePickerField from \"@common/components/TypeDateRangePickerField\";\nimport get from \"lodash/get\";\nimport style from \"../style.module.scss\";\nimport dayjs from \"dayjs\";\n\nconst TypeDateRangePickerFilterItem = ({\n label,\n value,\n onChange,\n ...props\n}) => {\n return (\n <PopoverItem\n label={label}\n value={value}\n onChange={onChange}\n onValidate={(item) => {\n const value = item?.value;\n return (\n value?.type && Array.isArray(value?.value) && value.value.length === 2\n );\n }}\n >\n {({ value, onChange }) => (\n <TypeDateRangePickerField\n {...props}\n className={style[\"filter-item-text\"]}\n value={get(value, \"value\")}\n onChange={(pickerValue) => {\n const { format } = Object.assign({ format: \"YYYY-MM-DD\" }, props);\n const value = pickerValue?.value || [];\n onChange({\n label: (() => {\n if (value[0] && !value[1]) {\n return `${dayjs(value[0]).format(format)}以后`;\n }\n if (!value[0] && value[1]) {\n return `${dayjs(value[1]).format(format)}以前`;\n }\n if (value[0] && value[1]) {\n return `${dayjs(value[0]).format(format)}~${dayjs(\n value[1]\n ).format(format)}`;\n }\n return \"\";\n })(),\n value: pickerValue,\n });\n }}\n />\n )}\n </PopoverItem>\n );\n};\n\nexport default TypeDateRangePickerFilterItem;\n","import { FormattedMessage } from \"@components/Intl\";\nimport withFieldItem from \"../withFieldItem\";\nimport AdvancedSelectField, {\n UserField,\n} from \"@common/components/AdvancedSelectField\";\nimport FunctionSelectField from \"@common/components/FunctionSelectField\";\nimport AddressSelectField from \"@common/components/AddressSelectField\";\nimport IndustrySelectField from \"@common/components/IndustrySelectField\";\nimport CascaderField from \"@common/components/CascaderField\";\nimport TreeField from \"@common/components/TreeField\";\nimport InputFilterItemField from \"./InputFilterItem\";\nimport NumberRangeFilterItemField from \"./NumberRangeFilterItem\";\n\nconst withInputDefaultPlaceholder =\n (WrappedComponent) =>\n ({ placeholder, label, ...props }) =>\n (\n <FormattedMessage\n id=\"defaultInputPlaceholder\"\n moduleName=\"Filter\"\n values={{ label }}\n >\n {(text) => {\n return (\n <WrappedComponent\n {...props}\n label={label}\n placeholder={placeholder || text}\n />\n );\n }}\n </FormattedMessage>\n );\n\nexport const AdvancedSelectFilterItem = withFieldItem(AdvancedSelectField);\nexport const UserFilterItem = withFieldItem(UserField);\nexport const FunctionSelectFilterItem = withFieldItem(FunctionSelectField);\nexport const IndustrySelectFilterItem = withFieldItem(IndustrySelectField);\n\nexport const CityFilterItem = withFieldItem(AddressSelectField);\n\nexport const CascaderFilterItem = withFieldItem(CascaderField);\n\nexport const TreeFilterItem = withFieldItem(TreeField);\nexport const InputFilterItem =\n withInputDefaultPlaceholder(InputFilterItemField);\nexport const NumberRangeFilterItem = withInputDefaultPlaceholder(\n NumberRangeFilterItemField\n);\n\nexport { default as DatePickerFilterItem } from \"./DatePickerFilterItem\";\nexport { default as DateRangePickerFilterItem } from \"./DateRangePickerFilterItem\";\nexport { default as TypeDateRangePickerFilterItem } from \"./TypeDateRangePickerFilterItem\";\n","import transform from \"lodash/transform\";\n\nconst getFilterValue = (filterValue) => {\n return transform(\n filterValue,\n (result, { name, value }) => {\n result[name] = Array.isArray(value)\n ? value.map(({ value }) => value)\n : value.value;\n },\n {}\n );\n};\n\nexport default getFilterValue;\n","import { App, Tag } from \"antd\";\nimport AddressSelectField, {\n getLabelForLocal,\n withAddressApi,\n} from \"@common/components/AddressSelectField\";\nimport { FormattedMessage, useIntl } from \"@components/Intl\";\nimport { usePreset } from \"@components/Global\";\nimport { useMemo } from \"react\";\nimport style from \"../../style.module.scss\";\n\nconst { CheckableTag } = Tag;\n\nconst CityFilterItemInner = ({\n value,\n onChange,\n single,\n maxLength,\n addressApi,\n ...props\n}) => {\n const { message } = App.useApp();\n const { locale } = usePreset();\n const { formatMessage } = useIntl({ moduleName: \"Filter\" });\n const cityList = useMemo(() => {\n return addressApi.getChinaHotCities();\n }, [addressApi]);\n return (\n <>\n {cityList.map((city) => {\n const { code } = city;\n const name = getLabelForLocal(city, locale);\n return (\n <CheckableTag\n key={code}\n size=\"small\"\n checked={\n single\n ? value?.value === code\n : !!(value || []).find(({ value }) => value === code)\n }\n onChange={(checked) => {\n if (single) {\n onChange(checked ? { value: code, label: name } : null);\n return;\n }\n const newValue = (value || []).slice(0);\n checked\n ? newValue.push({ value: code, label: name })\n : (() => {\n const index = newValue.findIndex(\n ({ value }) => value === code\n );\n newValue.splice(index, 1);\n })();\n if (newValue.length > maxLength) {\n message.error(\n formatMessage(\n { id: \"maxSelectedCount\" },\n { count: maxLength }\n )\n );\n return;\n }\n onChange(newValue);\n }}\n >\n {name}\n </CheckableTag>\n );\n })}\n <CheckableTag\n className={style[\"filter-advanced-item-other\"]}\n size=\"small\"\n checked={\n (single ? value?.value : value?.value && value.value.length > 0) &&\n !cityList.find(({ code }) =>\n single\n ? value?.value === code\n : !!(value || []).find(({ value }) => value === code)\n )\n }\n >\n <FormattedMessage\n id={\"otherText\"}\n moduleName=\"Filter\"\n defaultMessage=\"其他\"\n />\n <AddressSelectField\n {...props}\n className={style[\"filter-advanced-item-other-inner\"]}\n maxLength={maxLength}\n value={\n single ? value?.value : (value || []).map(({ value }) => value)\n }\n single={single}\n onChange={(value, ...args) => {\n const getCityValue = (value) => {\n const { city } = addressApi.getCity(value);\n return { value: city?.code, label: city?.name };\n };\n onChange(\n single\n ? getCityValue(value)\n : value.map((value) => getCityValue(value))\n );\n }}\n />\n </CheckableTag>\n </>\n );\n};\nCityFilterItemInner.defaultProps = {\n single: false,\n maxLength: 5,\n};\nconst CityFilterItem = withAddressApi(CityFilterItemInner);\nexport default CityFilterItem;\n","import { Tag, App } from \"antd\";\nimport isEqual from \"lodash/isEqual\";\nimport * as fields from \"../../fields\";\nimport { useIntl } from \"@components/Intl\";\n\nconst { CheckableTag } = Tag;\nconst ListFilterItem = ({\n value,\n onChange,\n label,\n single,\n maxLength,\n items,\n custom,\n}) => {\n const { message } = App.useApp();\n const { formatMessage } = useIntl({ moduleName: \"Filter\" });\n return (\n <>\n {items.map(({ label, value: itemValue }) => {\n return (\n <CheckableTag\n key={label}\n size=\"small\"\n checked={\n single\n ? isEqual(itemValue, value?.value)\n : !!(value || []).find(({ value }) => isEqual(itemValue, value))\n }\n onChange={(checked) => {\n if (single) {\n onChange(checked ? { value: itemValue, label } : null);\n return;\n }\n const newValue = (value || []).slice(0);\n checked\n ? newValue.push({ value: itemValue, label })\n : (() => {\n const index = newValue.find(({ value }) =>\n isEqual(itemValue, value)\n );\n newValue.splice(index, 1);\n })();\n if (newValue.length > maxLength) {\n message.error(\n formatMessage(\n { id: \"maxSelectedCount\" },\n { count: maxLength }\n )\n );\n return;\n }\n onChange(newValue);\n }}\n >\n {label}\n </CheckableTag>\n );\n })}\n {custom &&\n (() => {\n const ComponentItem = Object.values(fields).find(\n (item) => item === custom.type\n );\n if (!ComponentItem) {\n return null;\n }\n return (\n <ComponentItem\n {...custom.props}\n value={value}\n placeholder={`${formatMessage({ id: \"pleaseInput\" })}${label}`}\n onChange={onChange}\n />\n );\n })()}\n </>\n );\n};\n\nListFilterItem.defaultProps = {\n single: false,\n maxLength: 5,\n items: [],\n};\n\nexport default ListFilterItem;\n","import { Input, Space, Button } from \"antd\";\nimport { useState, useEffect, useRef } from \"react\";\nimport useSimulationBlur from \"@kne/use-simulation-blur\";\nimport { useIntl } from \"@components/Intl\";\n\nconst InputFilterItem = ({ value, label, onChange, ...props }) => {\n const propsValue = value?.value;\n const [inputValue, setInputValue] = useState(propsValue || \"\");\n const [active, setActive] = useState(false);\n const { formatMessage } = useIntl({ moduleName: \"Filter\" });\n const searchHandler = () => {\n onChange(inputValue ? { label: inputValue, value: inputValue } : null);\n };\n const ref = useSimulationBlur(() => {\n setActive(false);\n searchHandler();\n });\n const inputValueRef = useRef(\"\");\n inputValueRef.current = inputValue;\n\n useEffect(() => {\n if (propsValue !== inputValueRef.current) {\n setInputValue(propsValue);\n }\n }, [propsValue]);\n return (\n <span ref={ref}>\n <Space.Compact>\n <Input\n placeholder={`${formatMessage({ id: \"pleaseInput\" })}${label}`}\n {...props}\n size=\"small\"\n value={inputValue}\n onFocus={() => {\n setActive(true);\n }}\n onChange={(e) => {\n setInputValue(e.target.value);\n }}\n onPressEnter={searchHandler}\n />\n {active && (\n <Button size=\"small\" type=\"primary\" onClick={searchHandler}>\n {formatMessage({ id: \"search\" })}\n </Button>\n )}\n </Space.Compact>\n </span>\n );\n};\n\nexport default InputFilterItem;\n","import CityFilterItem from \"./CityFilterItem\";\nimport ListFilterItem from \"./ListFilterItem\";\nimport InputFilterItem from \"./InputFilterItem\";\n\nconst fields = { CityFilterItem, ListFilterItem, InputFilterItem };\n\nexport default fields;\n","import FilterOuter from \"../FilterOuter\";\nimport MoreFilterLines from \"../FilterLines\";\nimport { Flex } from \"antd\";\nimport advancedFields from \"./fields\";\nimport { createWithIntl, useIntl } from \"@components/Intl\";\nimport get from \"lodash/get\";\nimport { useContext } from \"../context\";\nimport style from \"../style.module.scss\";\nimport FilterValueDisplay from \"../FilterValueDisplay\";\nimport importMessages from \"../locale\";\n\nconst Line = ({ list }) => {\n const { value, onChange } = useContext();\n return (\n <Flex gap={8}>\n {list.map((item, index) => {\n const ComponentItem = item.type;\n return (\n <Flex\n gap={16}\n key={item.key || item.props.name || index}\n align=\"center\"\n >\n <div className={style[\"filter-label\"]}>{item.props.label}:</div>\n <Flex wrap={true} align=\"center\">\n <ComponentItem\n {...item.props}\n value={\n value\n ? get(value.get(item.props.name), \"value\")\n : item.props.value\n }\n onChange={\n onChange\n ? (value) =>\n onChange({\n name: item.props.name,\n label: item.props.label,\n value,\n })\n : item.props.onChange\n }\n />\n </Flex>\n </Flex>\n );\n })}\n </Flex>\n );\n};\n\nconst AdvancedFilter = createWithIntl({ importMessages, moduleName: \"Filter\" })(\n (props) => {\n const { formatMessage } = useIntl({ moduleName: \"Filter\" });\n return (\n <FilterOuter {...props}>\n {({ value, onChange, props }) => {\n const { list, more } = props;\n return (\n <div>\n <Flex gap={8} vertical className={style[\"filter-advanced\"]}>\n {list.map((item, index) => {\n return <Line key={index} list={item} />;\n })}\n {more && (\n <MoreFilterLines\n className={style[\"filter-advanced-more\"]}\n label={`${formatMessage({ id: \"moreText\" })}:`}\n list={[more]}\n />\n )}\n </Flex>\n {value && value.length > 0 && (\n <FilterValueDisplay value={value} onChange={onChange} />\n )}\n </div>\n );\n }}\n </FilterOuter>\n );\n }\n);\n\nAdvancedFilter.fields = advancedFields;\nexport default AdvancedFilter;\n\nexport { advancedFields };\n","const FilterItemContainer = ({ children, ...props }) => {\n return children(props);\n};\n\nexport default FilterItemContainer;\n","import Filter from \"./Filter\";\nimport * as fields from \"./fields\";\nimport getFilterValue from \"./getFilterValue\";\n\nFilter.fields = fields;\nFilter.getFilterValue = getFilterValue;\nexport default Filter;\nexport { fields, getFilterValue };\nexport { default as AdvancedFilter, advancedFields } from \"./AdvancedFilter\";\nexport { default as FilterValueDisplay } from \"./FilterValueDisplay\";\nexport { default as FilterItem } from \"./FilterItem\";\nexport { default as FilterLines } from \"./FilterLines\";\nexport { default as PopoverItem } from \"./PopoverItem\";\nexport { default as withFieldItem } from \"./withFieldItem\";\nexport { default as FilterItemContainer } from \"./FilterItemContainer\";\nexport {\n NumberRangeFilterItem,\n InputFilterItem,\n CityFilterItem,\n AdvancedSelectFilterItem,\n UserFilterItem,\n FunctionSelectFilterItem,\n IndustrySelectFilterItem,\n CascaderFilterItem,\n TreeFilterItem,\n DatePickerFilterItem,\n DateRangePickerFilterItem,\n TypeDateRangePickerFilterItem,\n} from \"./fields\";\n","// extracted by mini-css-extract-plugin\nexport default {\"high-color\":\"style_high-color__-DN7m__3Nde3\"};","import { createContext, createElement, useContext, useMemo } from \"react\";\nimport style from \"./style.module.scss\";\n\nconst context = createContext({});\nconst { Provider } = context;\n\nconst escapeSpecialCharacter = (str) => {\n const pattern =\n /[`+~!@#_$%^*()=|{}':;,\\\\[\\].<>/?!¥…&()—【】‘;:”“。,、?\\s]/g;\n return str.replace(pattern, (match) => \"\\\\\" + match);\n};\n\nexport const HighlightProvider = ({ list, children, highlightClassName }) => {\n return (\n <Provider value={{ list, highlightClassName }}>\n <span data-testid=\"components-core-highlight\">{children}</span>\n </Provider>\n );\n};\nHighlightProvider.defaultProps = {\n caseSensitive: false,\n list: [],\n highlightClassName: \"\",\n};\nconst Highlight = ({ tagName, children }) => {\n const { list, caseSensitive, highlightClassName } = useContext(context);\n const renderStr = useMemo(() => {\n if (!children) return;\n let target = children?.toString();\n if (!list || list.length === 0) {\n return target;\n }\n const allWordsRe = list\n .map(function (word) {\n return \"(\" + escapeSpecialCharacter(word) + \")\";\n })\n .join(\"|\");\n\n const regExp = new RegExp(allWordsRe, caseSensitive ? \"gm\" : \"gim\");\n\n return target.replace(regExp, (innerMatch) => {\n return `<font class=\"${style[\"high-color\"]} ${highlightClassName}\">${innerMatch}</font>`;\n });\n }, [list, caseSensitive, children, highlightClassName]);\n\n return createElement(tagName, {\n dangerouslySetInnerHTML: { __html: renderStr },\n });\n};\nHighlight.defaultProps = {\n tagName: \"span\",\n children: \"\",\n};\n\n// Highlight.propTypes={\n// children:PropTypes.string\n// }\nexport default Highlight;\n","// extracted by mini-css-extract-plugin\nexport default {\"overlay\":\"style_overlay__ZS5Wz__3Nde3\",\"overlay-content\":\"style_overlay-content__IVFmc__3Nde3\",\"state-tag\":\"style_state-tag__+59RJ__3Nde3\"};","import style from \"./style.module.scss\";\nimport {\n useState,\n useCallback,\n useEffect,\n useRef,\n useLayoutEffect,\n} from \"react\";\nimport localStorage from \"@common/utils/localStorage\";\nimport StateTag from \"@components/StateTag\";\nimport { Popover, Space } from \"antd\";\nimport dropWhile from \"lodash/dropWhile\";\nimport uniqBy from \"lodash/uniqBy\";\nimport useClickOutside from \"@kne/use-click-outside\";\nimport classnames from \"classnames\";\n\nconst HistoryStore = ({\n className,\n overlayClassName,\n storeName,\n maxLength,\n label,\n children,\n onSelect,\n zIndex,\n getPopupContainer,\n}) => {\n const [list, setList] = useState(() => {\n return localStorage.getItem(storeName) || [];\n });\n const [open, setOpen] = useState(false);\n const openHistory = useCallback(() => {\n if (list.length === 0) {\n return;\n }\n setOpen(true);\n }, [list]);\n const storeNameRef = useRef(storeName);\n storeNameRef.current = storeName;\n useEffect(() => {\n localStorage.setItem(storeNameRef.current, list);\n }, [list]);\n\n const appendHistory = useCallback(\n (item) => {\n if (item.value && item.label) {\n setList((list) => {\n const newList = dropWhile(list, { value: item.value });\n newList.splice(0, 0, item);\n return maxLength\n ? uniqBy(newList, \"value\").slice(0, maxLength)\n : newList;\n });\n }\n setOpen(false);\n },\n [maxLength]\n );\n\n const close = useCallback(() => {\n setOpen(false);\n }, []);\n\n const outerRef = useClickOutside(close);\n\n const popoverChildrenRef = useRef(null),\n popoverContentRef = useRef(null);\n outerRef.current = {\n contains: (target) => {\n return (\n popoverChildrenRef.current.contains(target) ||\n (open && popoverContentRef.current.contains(target))\n );\n },\n };\n\n const onSelectRef = useRef(null);\n const setOnSelect = (callback) => {\n onSelectRef.current = callback;\n };\n\n const [width, setWidth] = useState(0);\n\n useLayoutEffect(() => {\n const callback = () => {\n setWidth(popoverChildrenRef.current.clientWidth);\n };\n callback();\n const resizeObserver = new ResizeObserver(callback);\n resizeObserver.observe(popoverChildrenRef.current);\n const mutationObserver = new MutationObserver(callback);\n mutationObserver.observe(popoverChildrenRef.current, {\n subtree: true,\n childList: true,\n });\n return () => {\n mutationObserver.disconnect();\n resizeObserver.disconnect();\n };\n }, []);\n\n return (\n <Popover\n zIndex={zIndex}\n placement=\"bottom\"\n transitionName={\"ant-slide-up\"}\n arrow={false}\n open={open}\n getPopupContainer={getPopupContainer}\n overlayClassName={classnames(overlayClassName, style[\"overlay\"])}\n content={\n <div\n className={style[\"overlay-content\"]}\n style={{ width }}\n ref={popoverContentRef}\n >\n <Space direction=\"vertical\">\n <div>{label}</div>\n <Space wrap>\n {list.map((item) => (\n <StateTag\n className={style[\"state-tag\"]}\n text={item.label}\n type={\"result\"}\n onClick={() => {\n onSelect && onSelect(item.value, item);\n onSelectRef.current &&\n onSelectRef.current(item.value, item);\n close();\n appendHistory(item);\n }}\n />\n ))}\n </Space>\n </Space>\n </div>\n }\n >\n <div ref={popoverChildrenRef} className={classnames(className)}>\n {children({\n open,\n openHistory,\n appendHistory,\n setOnSelect,\n close,\n })}\n </div>\n </Popover>\n );\n};\n\nHistoryStore.defaultProps = {\n maxLength: 5,\n label: \"最近搜索\",\n storeName: \"HISTORY_STORE_KEY\",\n};\n\nexport default HistoryStore;\n","import { createContext, useContext as useReactContext } from \"react\";\n\nexport const defaultProps = {\n menu: null,\n filter: null,\n menuOpen: true,\n menuWidth: \"240px\",\n menuFixed: true,\n menuCloseButton: true,\n backgroundColor: null,\n header: null,\n headerHeight: 0,\n headerFixed: true,\n headerInfo: null,\n backUrl: null,\n title: null,\n titleExtra: null,\n titleLeftExtra: null,\n noMargin: false,\n noPadding: false,\n optionFooterHeight: 0,\n option: null,\n optionWidth: \"400px\",\n optionNoPadding: false,\n optionFixed: true,\n optionFooter: null,\n};\n\nexport const context = createContext({});\n\nexport const { Provider, Consumer } = context;\n\nexport const useContext = () => {\n return useReactContext(context);\n};\n\nexport default context;\n","// extracted by mini-css-extract-plugin\nexport default {\"layout\":\"style_layout__k+lxR__3Nde3\",\"page-content\":\"style_page-content__4XeN8__3Nde3\",\"page-main\":\"style_page-main__P0yEF__3Nde3\",\"page-main-content\":\"style_page-main-content__1OVPN__3Nde3\",\"table-page\":\"style_table-page__JkbLf__3Nde3\",\"helper-guide\":\"style_helper-guide__vzw4z__3Nde3\",\"page-outer\":\"style_page-outer__2a6iH__3Nde3\",\"no-margin\":\"style_no-margin__S6caT__3Nde3\",\"page-menu\":\"style_page-menu__CZSa9__3Nde3\",\"closed\":\"style_closed__hmnft__3Nde3\",\"page-menu-inner\":\"style_page-menu-inner__rmKpu__3Nde3\",\"page-menu-main\":\"style_page-menu-main__OXg2M__3Nde3\",\"page-option-main\":\"style_page-option-main__LyfT3__3Nde3\",\"page-menu-main-outer\":\"style_page-menu-main-outer__yY+-Q__3Nde3\",\"page-option\":\"style_page-option__diS2S__3Nde3\",\"page-option-inner\":\"style_page-option-inner__Fj1JH__3Nde3\",\"page-option-footer\":\"style_page-option-footer__d7xE0__3Nde3\",\"fixed-container\":\"style_fixed-container__1VZwY__3Nde3\",\"is-fixed\":\"style_is-fixed__1aQhp__3Nde3\",\"page-menu-btn-outer\":\"style_page-menu-btn-outer__iVJiW__3Nde3\",\"page-menu-btn\":\"style_page-menu-btn__BiTy8__3Nde3\",\"page-title\":\"style_page-title__zw-Fd__3Nde3\",\"page-title-text\":\"style_page-title-text__Rj4RC__3Nde3\",\"no-padding\":\"style_no-padding__V7Dwy__3Nde3\",\"page-header\":\"style_page-header__a813p__3Nde3\",\"page-header-info\":\"style_page-header-info__cMrZR__3Nde3\",\"layout-menu\":\"style_layout-menu__yiab0__3Nde3\",\"sub-menu\":\"style_sub-menu__dyqK7__3Nde3\",\"no-collapsed\":\"style_no-collapsed__76h8W__3Nde3\",\"has-not-children\":\"style_has-not-children__fnjRK__3Nde3\",\"table-page-top\":\"style_table-page-top__bt1l9__3Nde3\",\"error-component\":\"style_error-component__HvghB__3Nde3\",\"state-bar-page\":\"style_state-bar-page__+aUM4__3Nde3\",\"back-icon\":\"style_back-icon__79v2G__3Nde3\"};","import style from \"../style.module.scss\";\nimport classnames from \"classnames\";\n\nconst FixedContainer = ({ className, isFixed, children }) => {\n if (isFixed) {\n return (\n <div\n className={classnames(\n className,\n \"fixed-container\",\n style[\"fixed-container\"],\n {\n [style[\"is-fixed\"]]: isFixed,\n }\n )}\n >\n {children}\n </div>\n );\n }\n return (\n <div\n className={classnames(\n className,\n \"fixed-container\",\n style[\"fixed-container\"]\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default FixedContainer;\n","import { Button, Col } from \"antd\";\nimport classnames from \"classnames\";\nimport style from \"../style.module.scss\";\nimport FixedContainer from \"./FixedContainer\";\nimport { useContext } from \"../context\";\nimport Icon from \"@components/Icon\";\nimport SimpleBar from \"@common/components/SimpleBar\";\nimport { useLocation } from \"react-router-dom\";\nimport get from \"lodash/get\";\nimport isNotEmpty from \"@utils/isNotEmpty\";\nimport localStorage from \"@utils/localStorage\";\nimport { useMemo } from \"react\";\n\nconst pageMenuOpenKey = \"CORE_PAGE_MENU_OPEN_KEY\";\n\nexport const useMenuOpen = () => {\n const location = useLocation();\n const pathModuleName = location.pathname.split(\"/\")[1];\n return useMemo(() => {\n const pageResult = localStorage.getItem(pageMenuOpenKey) || {};\n return isNotEmpty(get(pageResult, pathModuleName))\n ? get(pageResult, pathModuleName)\n : true;\n }, [pathModuleName]);\n};\n\nconst Menu = () => {\n const { pageProps, setPageProps } = useContext();\n const { menu, menuOpen, menuWidth, menuFixed, menuCloseButton } = pageProps;\n\n const location = useLocation();\n const pathModuleName = location.pathname.split(\"/\")[1];\n\n return menu ? (\n <Col\n className={classnames(style[\"page-menu\"], {\n [style[\"closed\"]]: !menuOpen,\n })}\n style={{ \"--width\": menuWidth }}\n >\n <FixedContainer className={style[\"page-menu-inner\"]} isFixed={menuFixed}>\n <div className={style[\"page-menu-main-outer\"]}>\n <SimpleBar className={style[\"page-menu-main\"]}>{menu}</SimpleBar>\n </div>\n </FixedContainer>\n {menuCloseButton ? (\n <FixedContainer\n className={classnames(style[\"page-menu-btn-outer\"], {\n [style[\"is-fixed\"]]: menuFixed,\n })}\n isFixed={menuFixed}\n >\n <Button\n className={classnames(style[\"page-menu-btn\"], {\n [style[\"closed\"]]: !menuOpen,\n })}\n icon={\n menuOpen ? (\n <Icon type=\"icon-arrow-bold-left\" />\n ) : (\n <Icon type=\"icon-arrow-bold-right\" />\n )\n }\n onClick={() => {\n setPageProps({ menuOpen: !pageProps.menuOpen });\n const pageResult = localStorage.getItem(pageMenuOpenKey) || {};\n pageResult[pathModuleName] = !pageProps.menuOpen;\n localStorage.setItem(pageMenuOpenKey, pageResult);\n setPageProps({ menuOpen: !pageProps.menuOpen });\n }}\n />\n </FixedContainer>\n ) : null}\n </Col>\n ) : null;\n};\n\nexport default Menu;\n","import { defaultProps, useContext } from \"../context\";\nimport isEqual from \"lodash/isEqual\";\nimport { useEffect, useRef } from \"react\";\nimport { Result } from \"antd\";\nimport Features from \"@components/Features\";\nimport { useMenuOpen } from \"./Menu\";\n\nconst PageInner = ({ children, isPass, ...props }) => {\n const { setPageProps } = useContext();\n const propsRef = useRef(null);\n const localMenuOpen = useMenuOpen();\n const localMenuOpenRef = useRef(localMenuOpen);\n localMenuOpenRef.current = localMenuOpen;\n useEffect(() => {\n if (!isEqual(propsRef.current, props)) {\n propsRef.current = props;\n /**\n * 解决两个页面都用header时,menuButton产生的跳动问题:如果下一个页面有header,\n * headerHeight由其header组件自己更新,不再统一重置为0。\n * optionFooter同理\n * */\n const targetProps = Object.assign(\n {},\n defaultProps,\n props,\n typeof localMenuOpenRef.current === \"boolean\"\n ? { menuOpen: localMenuOpenRef.current }\n : {}\n );\n if (targetProps.header && targetProps.headerHeight === 0) {\n delete targetProps[\"headerHeight\"];\n }\n if (targetProps.optionFooter && targetProps.optionFooterHeight === 0) {\n delete targetProps[\"optionFooter\"];\n }\n setPageProps(targetProps);\n }\n }, [props, setPageProps]);\n\n if (isPass === false) {\n return <Result status=\"403\" subTitle=\"暂未开放此功能\" />;\n }\n\n return children;\n};\n\nconst Page = ({ featureId, name, openFeatures, ...props }) => {\n if (openFeatures === true) {\n return (\n <Features id={name}>\n {({ isPass }) => <PageInner {...props} key={name} isPass={isPass} />}\n </Features>\n );\n }\n return <PageInner {...props} key={name} />;\n};\n\nPage.defaultProps = defaultProps;\n\nexport default Page;\n","import { Affix as AntdAffix } from \"antd\";\n\nconst Affix = ({ isFixed, offsetTop, offsetBottom, onChange, ...props }) => {\n if (!isFixed) {\n return <div {...props} />;\n }\n return (\n <AntdAffix\n {...props}\n offsetTop={Number.isInteger(offsetTop) ? offsetTop - 0.1 : offsetTop}\n offsetBottom={offsetBottom}\n onChange={onChange}\n />\n );\n};\n\nexport default Affix;\n","import { useContext } from \"@components/Layout/context\";\nimport { useLayoutEffect, useRef } from \"react\";\n\nconst useContainerHeight = ({ targetKey }) => {\n const { setPageProps } = useContext();\n const ref = useRef(null);\n useLayoutEffect(() => {\n const callback = () => {\n setPageProps({\n [targetKey]: ref.current.offsetHeight,\n });\n };\n\n callback();\n const resizeObserver = new MutationObserver(callback);\n resizeObserver.observe(ref.current, { subtree: true, childList: true });\n return () => {\n resizeObserver.disconnect();\n };\n }, [setPageProps, targetKey]);\n\n return ref;\n};\n\nconst ContainerHeight = ({ targetKey, ...props }) => {\n const ref = useContainerHeight({ targetKey });\n return <div {...props} ref={ref} />;\n};\n\nexport default ContainerHeight;\n","import { useContext } from \"../context\";\nimport Affix from \"../Affix\";\nimport { navigationHeight } from \"@components/Navigation\";\nimport ContainerHeight from \"./ContainerHeight\";\nimport style from \"../style.module.scss\";\n\nconst Header = () => {\n const { pageProps } = useContext();\n const { header, headerFixed } = pageProps;\n return header ? (\n <Affix\n isFixed={headerFixed}\n className={style[\"page-header\"]}\n offsetTop={navigationHeight}\n >\n <ContainerHeight targetKey=\"headerHeight\">{header}</ContainerHeight>\n </Affix>\n ) : null;\n};\n\nexport default Header;\n","import { useContext } from \"../context\";\nimport { useRef } from \"react\";\nimport style from \"../style.module.scss\";\nimport classnames from \"classnames\";\n\nconst HeaderInfo = () => {\n const { pageProps } = useContext();\n const { headerInfo } = pageProps;\n const headerInfoRef = useRef(null);\n return headerInfo ? (\n <div\n ref={headerInfoRef}\n className={classnames(style[\"page-header-info\"], \"page-header-info\")}\n >\n {headerInfo}\n </div>\n ) : null;\n};\n\nexport default HeaderInfo;\n","import { Col, Row, Space } from \"antd\";\nimport { useNavigate } from \"react-router-dom\";\nimport Filter from \"@components/Filter\";\nimport Icon from \"@components/Icon\";\nimport style from \"../style.module.scss\";\n\nconst PageTitle = ({ title, filter, titleExtra, titleLeftExtra, backUrl }) => {\n const navigator = useNavigate();\n if (filter) {\n return (\n <Filter className={style[\"page-title\"]} {...filter} extra={titleExtra} />\n );\n }\n if (!(title || titleLeftExtra || titleExtra)) {\n return null;\n }\n return (\n <Row justify=\"space-between\" align=\"middle\" className={style[\"page-title\"]}>\n <Col>\n <Space>\n {title ? (\n <div className={style[\"page-title-text\"]}>\n {backUrl ? (\n <Space>\n <span\n className={style[\"back-icon\"]}\n onClick={() => {\n navigator(backUrl);\n }}\n >\n <Icon type=\"icon-arrow-thin-left\" />\n </span>\n <span>{title}</span>\n </Space>\n ) : (\n title\n )}\n </div>\n ) : null}\n {titleLeftExtra ? titleLeftExtra : null}\n </Space>\n </Col>\n <Col>{titleExtra}</Col>\n </Row>\n );\n};\n\nexport default PageTitle;\n","import { Col, Space } from \"antd\";\nimport FixedContainer from \"./FixedContainer\";\nimport { useContext } from \"../context\";\nimport classnames from \"classnames\";\nimport SimpleBar from \"@common/components/SimpleBar\";\nimport ContainerHeight from \"./ContainerHeight\";\nimport style from \"../style.module.scss\";\n\nconst Option = () => {\n const { pageProps } = useContext();\n const {\n option,\n optionWidth,\n optionFixed,\n optionFooter,\n optionFooterHeight,\n optionNoPadding,\n } = pageProps;\n return option ? (\n <Col\n className={classnames(style[\"page-option\"], \"page-option\")}\n style={{\n \"--width\": optionWidth,\n \"--foot-height\": optionFooterHeight + \"px\",\n }}\n >\n <FixedContainer\n className={style[\"page-option-inner\"]}\n isFixed={optionFixed}\n >\n <SimpleBar\n className={classnames(style[\"page-option-main\"], \"page-option-main\")}\n style={{ padding: optionNoPadding ? \"0px\" : \"var(--padding-width)\" }}\n >\n {option}\n </SimpleBar>\n {optionFooter ? (\n <ContainerHeight\n className={style[\"page-option-footer\"]}\n targetKey=\"optionFooterHeight\"\n >\n <Space align=\"center\">{optionFooter}</Space>\n </ContainerHeight>\n ) : null}\n </FixedContainer>\n </Col>\n ) : null;\n};\n\nexport default Option;\n","import { Alert, Button, Col, Layout as AntdLayout, Row } from \"antd\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { defaultProps, Provider } from \"./context\";\nimport Navigation, { navigationHeight } from \"@components/Navigation\";\nimport { getScrollEl } from \"@common/utils/importantContainer\";\nimport ReactErrorBoundary from \"@kne/react-error-boundary\";\nimport { Header, HeaderInfo, Menu, Option, PageTitle } from \"./Page\";\nimport classnames from \"classnames\";\nimport style from \"./style.module.scss\";\nimport HelperGuide from \"@components/HelperGuide\";\nimport { usePermissions } from \"../Permissions\";\n\nconst { Content } = AntdLayout;\n\nconst ErrorComponent = () => {\n return (\n <Alert\n message=\"系统出了点小问题,可刷新页面进行解决\"\n showIcon\n type=\"error\"\n action={\n <Button size=\"small\" danger onClick={() => window.location.reload()}>\n 刷新\n </Button>\n }\n />\n );\n};\n\nconst ErrorBoundary = (props) => {\n return <ReactErrorBoundary {...props} errorComponent={ErrorComponent} />;\n};\n\nconst Layout = ({ children, theme, navigation }) => {\n const [scrollLeft, setScrollLeft] = useState(0);\n const [pageProps, _setPageProps] = useState(Object.assign({}, defaultProps));\n const { permissions } = usePermissions();\n const setPageProps = useCallback((value) => {\n return _setPageProps((pageProps) => {\n return Object.assign({}, pageProps, value);\n });\n }, []);\n useEffect(() => {\n const scrollEl = getScrollEl();\n const handlerScroll = () => {\n setScrollLeft(scrollEl.scrollLeft);\n };\n scrollEl.addEventListener(\"scroll\", handlerScroll);\n return () => {\n scrollEl.removeEventListener(\"scroll\", handlerScroll);\n };\n }, []);\n\n return (\n <AntdLayout\n className={style[\"layout\"]}\n style={Object.assign(\n {},\n {\n \"--nav-height\": navigationHeight + \"px\",\n \"--nav-height-base\": \"var(--nav-height)\",\n \"--scroll-left\": -scrollLeft + \"px\",\n },\n theme\n )}\n >\n {navigation && (\n <ErrorBoundary>\n <Navigation\n permissions={permissions}\n {...navigation}\n onChange={(path) => {\n navigation?.onChange && navigation.onChange(path);\n }}\n />\n </ErrorBoundary>\n )}\n <ErrorBoundary>\n <Content className={style[\"layout-content-wrap\"]}>\n <Provider value={{ pageProps, setPageProps }}>\n <ErrorBoundary>\n <Header />\n </ErrorBoundary>\n <ErrorBoundary>\n <HeaderInfo />\n </ErrorBoundary>\n <ErrorBoundary>\n <Row\n className={classnames(pageProps.className, style[\"page-outer\"])}\n wrap={false}\n style={{\n \"--nav-height\": `calc(${pageProps.headerHeight}px + var(--nav-height-base))`,\n \"--nav-only-height\": `var(--nav-height-base)`,\n }}\n >\n <ErrorBoundary>\n <Menu />\n </ErrorBoundary>\n <Col\n className={classnames(style[\"page-content\"], {\n [style[\"no-margin\"]]: pageProps.noMargin,\n })}\n flex={1}\n style={{ \"--background-color\": pageProps.backgroundColor }}\n >\n <div className={style[\"page-main\"]}>\n <ErrorBoundary>\n <PageTitle\n title={pageProps.title}\n backUrl={pageProps.backUrl}\n filter={pageProps.filter}\n titleExtra={pageProps.titleExtra}\n titleLeftExtra={pageProps.titleLeftExtra}\n />\n </ErrorBoundary>\n <div\n className={classnames(style[\"page-main-content\"], {\n [style[\"no-padding\"]]: pageProps.noPadding,\n })}\n >\n <ErrorBoundary>\n {pageProps.helperGuideName && (\n <HelperGuide\n className={style[\"helper-guide-page\"]}\n name={pageProps.helperGuideName}\n />\n )}\n {children}\n </ErrorBoundary>\n </div>\n </div>\n </Col>\n <ErrorBoundary>\n <Option />\n </ErrorBoundary>\n </Row>\n </ErrorBoundary>\n </Provider>\n </Content>\n </ErrorBoundary>\n </AntdLayout>\n );\n};\n\nLayout.defaultProps = {\n navigation: {},\n};\n\nexport default Layout;\n","import Page from \"./Page\";\nimport Permissions from \"@components/Permissions\";\n\nconst PermissionsPage = ({ permissions, ...props }) => {\n return (\n <Permissions {...Object.assign({}, permissions, { type: \"error\" })}>\n <Page {...props} />\n </Permissions>\n );\n};\n\nexport default PermissionsPage;\n","import { TablePage as Table } from \"@components/Table\";\nimport PermissionsPage from \"./PermissionsPage\";\nimport { forwardRef, useState } from \"react\";\nimport style from \"./style.module.scss\";\nimport HelperGuide from \"@components/HelperGuide\";\nimport classnames from \"classnames\";\n\nconst TablePage = forwardRef(\n (\n {\n helperGuideName,\n permissions,\n page,\n openFeatures,\n name,\n topArea,\n ...props\n },\n ref\n ) => {\n const [tableData, setTableData] = useState(null);\n return (\n <PermissionsPage\n name={name}\n openFeatures={openFeatures}\n permissions={permissions}\n {...page}\n >\n {topArea ? (\n <div className={style[\"table-page-top\"]}>\n {typeof topArea === \"function\" ? topArea(tableData) : topArea}\n </div>\n ) : null}\n <div className={style[\"table-page\"]}>\n {helperGuideName && (\n <HelperGuide\n className={classnames(\"helper-guide\", style[\"helper-guide\"])}\n name={helperGuideName}\n />\n )}\n <Table\n {...props}\n ref={ref}\n name={name}\n onRequestSuccess={(data) => {\n setTableData(data);\n }}\n />\n </div>\n </PermissionsPage>\n );\n }\n);\n\nexport default TablePage;\n","import StateBar from \"@components/StateBar\";\nimport PermissionsPage from \"./PermissionsPage\";\nimport style from \"./style.module.scss\";\nimport HelperGuide from \"@components/HelperGuide\";\n\nconst StateBarPage = ({\n helperGuideName,\n permissions,\n page,\n stateBar,\n children,\n ...props\n}) => {\n return (\n <PermissionsPage {...page} permissions={permissions} {...props}>\n <div className={style[\"state-bar-page\"]}>\n <StateBar {...stateBar} />\n </div>\n {helperGuideName && (\n <HelperGuide className={style[\"helper-guide\"]} name={helperGuideName} />\n )}\n {children}\n </PermissionsPage>\n );\n};\n\nexport default StateBarPage;\n","// extracted by mini-css-extract-plugin\nexport default {\"menu\":\"style_menu__gvIvn__3Nde3\",\"all-no-start-icon\":\"style_all-no-start-icon__CA+zR__3Nde3\",\"no-start-icon\":\"style_no-start-icon__LnC1S__3Nde3\",\"has-children\":\"style_has-children__m9tce__3Nde3\",\"has-children-node\":\"style_has-children-node__2bhEB__3Nde3\",\"is-root\":\"style_is-root__4hhOc__3Nde3\",\"title\":\"style_title__+Hcar__3Nde3\",\"active\":\"style_active__WU49K__3Nde3\",\"no-collapse\":\"style_no-collapse__aIZBM__3Nde3\",\"title-content\":\"style_title-content__cQXpK__3Nde3\",\"loading\":\"style_loading__1pU4P__3Nde3\"};","import style from \"./style.module.scss\";\nimport classnames from \"classnames\";\nimport { Spin } from \"antd\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport Permissions from \"@components/Permissions\";\nimport useControlValue from \"@kne/use-control-value\";\nimport Icon from \"@components/Icon\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport ensureSlash from \"@kne/ensure-slash\";\nimport { useFetch } from \"@kne/react-fetch\";\n\nconst treeEnhance = (items) => {\n const childrenKeys = {},\n nodeMapping = [];\n const traversal = (children, options) => {\n const { parentKey, depth } = Object.assign(\n {\n parentKey: \"root\",\n depth: 0,\n paths: [],\n },\n options\n );\n if (!(Array.isArray(children) && children.length > 0)) {\n return null;\n }\n return children.map((item, index) => {\n const currentKey = `${\n item.key ||\n `${parentKey !== \"root\" ? `${parentKey}-` : \"\"}node-${index}`\n }`;\n if (!childrenKeys[parentKey]) {\n childrenKeys[parentKey] = [];\n }\n childrenKeys[parentKey].push(currentKey);\n const children = traversal(item.children, {\n parentKey: currentKey,\n depth: depth + 1,\n });\n childrenKeys[currentKey] &&\n childrenKeys[parentKey].push(...childrenKeys[currentKey]);\n const targetItem = Object.assign({}, item, {\n key: currentKey,\n parentKey,\n depth,\n children: children,\n originItem: item,\n });\n nodeMapping[currentKey] = targetItem;\n return targetItem;\n });\n };\n\n return { items: traversal(items), childrenKeys, nodeMapping };\n};\n\nconst MenuItem = (props) => {\n const navigation = useNavigate();\n const {\n id,\n className,\n label,\n iconType,\n path,\n request,\n onClick,\n isOpen,\n isSelected,\n onOpenChange,\n children,\n fetchOptions,\n depth,\n onLoad,\n allowCollapsed,\n } = props;\n\n const hasChildren =\n (Array.isArray(children) && children.length > 0) || fetchOptions;\n const { refresh, isLoading } = useFetch(\n Object.assign({}, fetchOptions, {\n auto: !allowCollapsed && fetchOptions,\n onRequestSuccess: (data) => {\n onLoad(data);\n },\n })\n );\n\n const renderChildren = () => {\n if (!hasChildren) {\n return null;\n }\n if (!allowCollapsed || (isOpen && children)) {\n return <div className={style[\"children-list\"]}>{children}</div>;\n }\n\n if (!allowCollapsed || (isOpen && isLoading)) {\n return (\n <div className={style[\"children-list\"]}>\n <Spin className={style[\"loading\"]} size=\"small\" />\n </div>\n );\n }\n };\n return (\n <Permissions request={request}>\n <div className={classnames(className, style[\"menu-item\"])}>\n <div\n className={classnames(style[\"title\"], {\n [style[\"active\"]]: isSelected,\n [style[\"has-children\"]]: hasChildren,\n [style[\"no-collapse\"]]: hasChildren && !allowCollapsed,\n [style[\"no-start-icon\"]]: !iconType,\n [style[\"is-root\"]]: depth === 0,\n })}\n onClick={(e) => {\n e.stopPropagation();\n if (!hasChildren && path) {\n navigation(path);\n return;\n }\n if (!hasChildren && !fetchOptions) {\n onClick?.(id, props);\n return;\n }\n if (!allowCollapsed) {\n return;\n }\n fetchOptions && refresh({});\n onOpenChange(!isOpen);\n }}\n >\n {iconType && <Icon type={iconType} />}\n <span className={style[\"title-content\"]}>{label}</span>\n {hasChildren && allowCollapsed && (\n <Icon\n type={isOpen ? \"icon-arrow-bold-down\" : \"icon-arrow-bold-right\"}\n />\n )}\n </div>\n {renderChildren()}\n </div>\n </Permissions>\n );\n};\n\nconst Menu = ({ className, allowCollapsed, ...props }) => {\n const { pathname, search } = useLocation();\n const [selectedKey, setSelectKeyChange] = useControlValue(props, {\n value: \"currentKey\",\n defaultValue: \"defaultCurrentKey\",\n });\n\n const [items, setItems] = useControlValue(props, {\n defaultValue: \"defaultItems\",\n value: \"items\",\n onChange: \"onItemsChange\",\n });\n\n const {\n items: targetItems,\n defaultOpenKeys,\n links,\n childrenKeys,\n hasStartIcon,\n hasChildren,\n } = useMemo(() => {\n const {\n items: targetItems,\n childrenKeys,\n nodeMapping,\n } = treeEnhance(items);\n let hasStartIcon = false,\n hasChildren = false;\n const links = [],\n defaultOpenKeys = [];\n childrenKeys?.[\"root\"]?.forEach((key) => {\n const node = nodeMapping[key];\n if (node.iconType) {\n hasStartIcon = true;\n }\n node.path && links.push({ path: node.path, key });\n if (Array.isArray(node.children) && node.children.length > 0) {\n hasChildren = true;\n defaultOpenKeys.push(node.key);\n }\n });\n return {\n defaultOpenKeys,\n links,\n items: targetItems,\n childrenKeys,\n hasStartIcon,\n hasChildren,\n };\n }, [items]);\n useEffect(() => {\n const matchedPath = links.find(({ path }) => {\n return (\n ensureSlash(pathname.replace(/[#,?].*/, \"\")) === ensureSlash(path) ||\n ensureSlash(pathname + search) === ensureSlash(path)\n );\n });\n if (matchedPath) {\n setSelectKeyChange(matchedPath.key);\n }\n }, [links, pathname, search, setSelectKeyChange]);\n\n const [openKeys, setOpenKeys] = useControlValue(\n Object.assign({}, props, {\n defaultOpenKeys: props.defaultOpenKeys || defaultOpenKeys,\n }),\n {\n value: \"openKeys\",\n defaultValue: \"defaultOpenKeys\",\n onChange: \"onOpenChange\",\n }\n );\n\n const renderChildren = useCallback(\n (children, options) => {\n const { parentKey, depth, selectedKey, openKeys, paths } = Object.assign(\n {\n parentKey: null,\n depth: 0,\n paths: [],\n },\n options\n );\n if (Array.isArray(children) && children.length > 0) {\n return children.map(\n ({ children, key: currentKey, originItem, ...item }) => {\n return (\n <MenuItem\n {...Object.assign({}, item)}\n id={currentKey}\n parentId={parentKey}\n depth={depth}\n allowCollapsed={allowCollapsed}\n isSelected={\n currentKey === selectedKey ||\n (childrenKeys[currentKey] &&\n childrenKeys[currentKey].indexOf(selectedKey) > -1)\n }\n onClick={setSelectKeyChange}\n onLoad={(data) => {\n setItems((items) => {\n const core = (children) => {\n if (Array.isArray(children) && children.length > 0) {\n return children.map((item) => {\n return Object.assign({}, item, {\n children:\n originItem === item ? data : core(item.children),\n });\n });\n }\n return null;\n };\n\n return core(items);\n });\n }}\n isOpen={(openKeys || []).indexOf(currentKey) > -1}\n key={currentKey}\n onOpenChange={() => {\n setOpenKeys((openKeys) => {\n const newOpenKeys = openKeys.slice(0);\n if (openKeys.indexOf(currentKey) > -1) {\n newOpenKeys.splice(openKeys.indexOf(currentKey), 1);\n } else {\n newOpenKeys.push(currentKey);\n }\n return newOpenKeys;\n });\n }}\n >\n {renderChildren(children, {\n parentKey,\n depth: depth + 1,\n selectedKey,\n openKeys,\n paths: [...paths, currentKey],\n })}\n </MenuItem>\n );\n }\n );\n }\n return null;\n },\n [setItems, setOpenKeys, setSelectKeyChange, childrenKeys, allowCollapsed]\n );\n\n return (\n <div\n className={classnames(className, style[\"menu\"], {\n [style[\"all-no-start-icon\"]]: !hasStartIcon,\n [style[\"has-children-node\"]]: hasChildren,\n })}\n >\n {renderChildren(targetItems, { selectedKey, openKeys })}\n </div>\n );\n};\n\nMenu.defaultProps = {\n defaultItems: [],\n allowCollapsed: true,\n};\n\nexport default Menu;\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgFavicon(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n t: 1679367216639,\n className: \"icon\",\n viewBox: \"0 0 1030 1024\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"p-id\": 1696,\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n width: 201.171875,\n height: 200,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M252.479711 385.587015v293.958522l258.791705 146.528403 258.791704-146.528403V385.587015l-251.127142-145.62669L252.479711 385.587015z\",\n fill: \"#FFFFFF\",\n opacity: 0.1,\n \"p-id\": 1697\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M778.629396 405.875564A20.739405 20.739405 0 0 1 766.456267 405.875564l-39.675383-21.641119a22.091975 22.091975 0 0 1 21.190261-39.224526l39.675383 21.190261a22.542831 22.542831 0 0 1-10.820559 42.380523z m-518.485122-6.76285a22.542831 22.542831 0 0 1-19.837691-12.173129 22.091975 22.091975 0 0 1 9.918845-30.207394l40.12624-20.739405a22.993688 22.993688 0 0 1 30.207394 9.918846 22.542831 22.542831 0 0 1-9.918846 30.207394L270.513977 396.858431a20.739405 20.739405 0 0 1-10.369703 2.254283z m399.909829-57.258792a22.542831 22.542831 0 0 1-10.820559-2.705139l-39.675383-21.190262a22.993688 22.993688 0 0 1-9.017133-30.65825 22.091975 22.091975 0 0 1 30.207394-9.017133l39.675383 21.190261a22.542831 22.542831 0 0 1-10.369702 42.380523z m-279.531109-4.057709a22.542831 22.542831 0 0 1-9.918846-45.085663l40.12624-20.288548a22.542831 22.542831 0 0 1 30.207394 9.467989 22.993688 22.993688 0 0 1-9.918846 33.814247l-40.12624 20.288548a20.739405 20.739405 0 0 1-10.369702 1.803427zM541.027953 277.381425a19.386835 19.386835 0 0 1-10.820559-2.70514L519.837692 270.618575l-8.566276 4.508567a22.542831 22.542831 0 0 1-20.288549-40.577097l18.935979-9.017132a23.895401 23.895401 0 0 1 20.739405 0l21.190261 11.722272a22.091975 22.091975 0 0 1 9.017133 30.207394 22.091975 22.091975 0 0 1-19.837692 9.918846z\",\n fill: \"#FFFFFF\",\n \"p-id\": 1698\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1002.70514 289.554554a24.346258 24.346258 0 0 1-9.918846 0L513.074842 47.895401 33.814247 287.300271a22.542831 22.542831 0 0 1-30.207394-10.369703 22.993688 22.993688 0 0 1 9.918846-30.207394L503.155996 2.358882a22.993688 22.993688 0 0 1 20.288549 0l489.179441 244.364292a22.542831 22.542831 0 0 1-9.918846 45.085663z\",\n fill: \"#FFFFFF\",\n \"p-id\": 1699\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.085663 762.052299a22.542831 22.542831 0 0 1-9.918846-40.577096l81.154193-39.675383A22.542831 22.542831 0 0 1 135.256988 721.475203l-81.154193 39.675383a24.346258 24.346258 0 0 1-9.017132 0.901713z m889.540126-14.427412a24.346258 24.346258 0 0 1-9.918846 0l-80.703336-40.577096a22.542831 22.542831 0 0 1-10.369703-30.207394 22.091975 22.091975 0 0 1 30.207394-9.918846l80.703337 40.12624a22.542831 22.542831 0 0 1-9.918846 42.831379zM206.943192 683.15239a23.444545 23.444545 0 0 1-20.288548-12.623986 22.993688 22.993688 0 0 1 10.369702-30.207394l81.154193-39.675383a22.993688 22.993688 0 0 1 30.207394 10.369702 22.542831 22.542831 0 0 1-10.369702 30.207394l-81.154193 39.675383a24.346258 24.346258 0 0 1-9.918846 2.254284z m566.275924-16.230839a26.600541 26.600541 0 0 1-9.918845 0l-80.703337-40.577097a22.091975 22.091975 0 0 1-9.918846-30.207394 22.542831 22.542831 0 0 1 30.207394-9.918845l80.703337 40.126239a22.993688 22.993688 0 0 1 9.918846 30.207395 22.542831 22.542831 0 0 1-20.288549 10.369702z m-405.770965-62.669071a22.091975 22.091975 0 0 1-20.288548-12.623986 22.542831 22.542831 0 0 1 13.525699-30.207394l81.154193-39.224527a22.542831 22.542831 0 0 1 30.207394 10.369703 22.091975 22.091975 0 0 1-10.369702 29.756537l-81.154193 39.675384a26.600541 26.600541 0 0 1-11.271416 2.254283z m242.560866-18.034265a19.837692 19.837692 0 0 1-9.918846-2.254284l-80.703336-40.577096a22.091975 22.091975 0 0 1-9.918846-30.207394 22.542831 22.542831 0 0 1 30.207394-9.918846l80.703337 40.12624a23.444545 23.444545 0 0 1 9.918845 30.658251 22.542831 22.542831 0 0 1-18.485121 12.173129z\",\n fill: \"#FFFFFF\",\n \"p-id\": 1700\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M512.173129 1024a24.346258 24.346258 0 0 1-9.918846-2.254283L12.623986 783.242561a22.993688 22.993688 0 0 1-12.623986-20.288548V273.774572a23.444545 23.444545 0 0 1 10.820559-19.386835 21.641118 21.641118 0 0 1 21.641118 0l479.711452 238.954012L991.884581 253.486023a21.641118 21.641118 0 0 1 21.641118 0 23.444545 23.444545 0 0 1 10.820559 19.386835v490.081155a22.993688 22.993688 0 0 1-12.623986 20.288548l-490.081154 238.503156a22.542831 22.542831 0 0 1-9.467989 2.254283zM45.085663 748.526601l467.087466 225.428313 467.087466-225.428313V310.293959l-454.914337 225.428313a22.542831 22.542831 0 0 1-22.091975 0L45.085663 310.293959z\",\n fill: \"#FFFFFF\",\n \"p-id\": 1701\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M511.722272 1020.393147a22.542831 22.542831 0 0 1-22.542831-22.542831V526.254283a22.542831 22.542831 0 0 1 45.085663 0v471.596033a22.542831 22.542831 0 0 1-22.542832 22.542831z\",\n fill: \"#FFFFFF\",\n \"p-id\": 1702\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M512.623986 841.853922a18.935978 18.935978 0 0 1-9.918846-2.254283l-266.005411-128.043282a22.091975 22.091975 0 0 1-11.271415-20.288548V383.783589a22.542831 22.542831 0 0 1 22.542831-22.542832 22.542831 22.542831 0 0 1 22.542832 22.542832V676.38954l243.913435 117.222723 243.462579-117.222723V383.783589a22.542831 22.542831 0 0 1 22.542831-22.542832 22.542831 22.542831 0 0 1 22.542832 22.542832v307.48422a22.542831 22.542831 0 0 1-12.623986 20.288548l-266.00541 128.043282a19.837692 19.837692 0 0 1-11.722272 2.254283z\",\n fill: \"#FFFFFF\",\n \"p-id\": 1703\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgFavicon);\nexport default __webpack_public_path__ + \"static/media/favicon.477a5bb996fd5b367fe0dddc29f67824.svg\";\nexport { ForwardRef as ReactComponent };","const importMessages = (locale) => {\n return ({\n 'en-US': () => import('./en-US'), 'zh-CN': () => import('./zh-CN')\n })[locale]();\n};\n\nexport default importMessages;","// extracted by mini-css-extract-plugin\nexport default {\"navigation-wrap\":\"style_navigation-wrap__VF8x2__3Nde3\",\"navigation\":\"style_navigation__60RrS__3Nde3\",\"is-fixed\":\"style_is-fixed__kHFWj__3Nde3\",\"navigation-logo\":\"style_navigation-logo__q9qHu__3Nde3\",\"logo\":\"style_logo__lB9RC__3Nde3\",\"navigation-list\":\"style_navigation-list__EYtkg__3Nde3\",\"navigation-options\":\"style_navigation-options__0BdJU__3Nde3\",\"menu-overlay\":\"style_menu-overlay__zU-vZ__3Nde3\",\"more-icon\":\"style_more-icon__gNMnt__3Nde3\"};","import { Col, Layout, Menu, Row, Space } from \"antd\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport get from \"lodash/get\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport classnames from \"classnames\";\nimport logo from \"./favicon.svg\";\nimport Image from \"@components/Image\";\nimport importMessages from \"./locale\";\nimport { FormattedMessage, IntlProvider } from \"@components/Intl\";\nimport Icon from \"@components/Icon\";\nimport style from \"./style.module.scss\";\n\nconst { Header } = Layout;\n\nexport const navigationHeight = 48;\n\nconst SetTitle = ({ name, mapping, defaultTitle }) => {\n const propsRef = useRef({\n mapping,\n defaultTitle,\n });\n useEffect(() => {\n const title = get(propsRef.current.mapping.get(name), \"title\");\n document.title = (title ? title + \"-\" : \"\") + propsRef.current.defaultTitle;\n }, [name]);\n return null;\n};\n\nconst Navigation = ({\n permissions,\n list,\n headerLogo,\n rightOptions,\n isFixed,\n showIndex,\n indexLabel,\n defaultTitle,\n overflowedIndicator,\n base,\n onChange,\n className,\n}) => {\n const mapping = useMemo(() => {\n return new Map(list.map(({ key, ...others }) => [key, others]));\n }, [list]);\n const navigate = useNavigate();\n const location = useLocation();\n const navigationRef = useRef();\n const resizeObserverRef = useRef(null);\n const [nameLabel, setNameLabel] = useState(\"更多\");\n const pathModuleName = location.pathname\n .replace(new RegExp(`^${base}`), \"\")\n .split(\"/\")[1];\n const name = pathModuleName\n ? get(\n Array.from(mapping.entries()).find(([name, { path, permission }]) => {\n const _path =\n typeof path === \"function\" ? path(permission, permissions) : path;\n return _path.indexOf(\"/\" + pathModuleName) !== -1;\n }),\n \"[0]\"\n )\n : \"home\";\n useEffect(() => {\n const callback = () => {\n if (navigationRef.current) {\n const menuDom =\n navigationRef.current.querySelectorAll(`li[data-menu-id]`);\n let exist = false;\n for (let i = 0; i < menuDom.length; i++) {\n const dom = menuDom[i];\n const menuId = dom.getAttribute(\"data-menu-id\");\n if (menuId.indexOf(name) !== -1) {\n exist = true;\n break;\n }\n }\n let _nameLabel =\n mapping.get(name) && !exist ? get(mapping.get(name), \"title\") : \"\";\n setNameLabel(_nameLabel);\n }\n };\n const mutationObserverInitConfig = {\n attributes: true,\n childList: true,\n subtree: true,\n };\n if (navigationRef && navigationRef.current) {\n callback();\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n }\n resizeObserverRef.current = new MutationObserver(callback);\n resizeObserverRef.current.observe(\n navigationRef.current,\n mutationObserverInitConfig\n );\n }\n\n return () => {\n resizeObserverRef.current && resizeObserverRef.current.disconnect();\n };\n }, [name, mapping]);\n const indexNav = showIndex\n ? {\n label: indexLabel || (\n <FormattedMessage id=\"indexLabel\" moduleName=\"Navigation\" />\n ),\n key: \"home\",\n onClick: () => {\n onChange && onChange(\"/\");\n setTimeout(() => {\n navigate(\"/\");\n }, 0);\n },\n }\n : false;\n return (\n <IntlProvider importMessages={importMessages} moduleName=\"Navigation\">\n <FormattedMessage id=\"defaultTitle\" moduleName=\"Navigation\">\n {(text) => (\n <SetTitle\n defaultTitle={defaultTitle || text}\n mapping={mapping}\n name={name}\n />\n )}\n </FormattedMessage>\n <div className={classnames(style[\"navigation-wrap\"], className)}>\n <Header\n className={classnames(\"navigation\", style[\"navigation\"], {\n [style[\"is-fixed\"]]: isFixed,\n })}\n >\n <Row justify=\"space-around\" wrap={false}>\n <Col\n className={classnames(\n \"navigation-logo\",\n style[\"navigation-logo\"]\n )}\n >\n <Image\n className={classnames(style[\"logo\"])}\n src={logo}\n alt=\"logo\"\n {...headerLogo}\n />\n </Col>\n <Col\n ref={navigationRef}\n flex={1}\n className={classnames(\n \"navigation-list\",\n style[\"navigation-list\"]\n )}\n >\n <Menu\n selectedKeys={[name]}\n mode=\"horizontal\"\n overflowedIndicator={\n overflowedIndicator || (\n <Space size={4}>\n <span>\n {nameLabel || (\n <FormattedMessage\n id=\"overflowedIndicator\"\n moduleName=\"Navigation\"\n />\n )}\n </span>\n <span className={style[\"more-icon\"]}>\n <Icon type=\"icon-arrow-thin-down\" />\n </span>\n </Space>\n )\n }\n items={[\n indexNav,\n ...Array.from(mapping.entries())\n .filter(([name, { permission }]) => {\n if (typeof permission === \"string\") {\n return permissions.indexOf(permission) > -1;\n }\n if (typeof permission === \"function\") {\n return permission(permissions);\n }\n if (Array.isArray(permission)) {\n for (let item of permission) {\n if (permissions.indexOf(item) > -1) {\n return true;\n }\n }\n return false;\n }\n return true;\n })\n .map(([name, { title, path, permission }]) => {\n const _path =\n typeof path === \"function\"\n ? path(permission, permissions)\n : path;\n return {\n label: title,\n key: name,\n onClick: () => {\n onChange && onChange(_path);\n setTimeout(() => {\n navigate(_path);\n }, 0);\n },\n };\n }),\n ]}\n />\n </Col>\n <Col className={style[\"navigation-options\"]}>{rightOptions}</Col>\n </Row>\n </Header>\n </div>\n </IntlProvider>\n );\n};\n\nNavigation.defaultProps = {\n isFixed: true,\n permissions: [],\n list: [],\n showIndex: true,\n base: \"\",\n};\n\nexport default Navigation;\n","// extracted by mini-css-extract-plugin\nexport default {\"notification\":\"style_notification__Vv-MM__3Nde3\",\"list\":\"style_list__l8KOo__3Nde3\",\"header\":\"style_header__3dcv8__3Nde3\",\"item\":\"style_item__d92RS__3Nde3\",\"item-box\":\"style_item-box__dd-Lk__3Nde3\",\"index-1\":\"style_index-1__f97L0__3Nde3\",\"index-2\":\"style_index-2__04vAw__3Nde3\",\"item-box-main\":\"style_item-box-main__lnSak__3Nde3\",\"item-title\":\"style_item-title__mArMd__3Nde3\",\"level-high\":\"style_level-high__Uys7Y__3Nde3\",\"level-middle\":\"style_level-middle__EewyC__3Nde3\",\"level-low\":\"style_level-low__8kVyL__3Nde3\",\"title-icon\":\"style_title-icon__1EoAG__3Nde3\",\"item-subtitle\":\"style_item-subtitle__xeFJs__3Nde3\",\"close-btn\":\"style_close-btn__7qpG3__3Nde3\",\"is-loading\":\"style_is-loading__upVL+__3Nde3\",\"item-content\":\"style_item-content__8MlsG__3Nde3\",\"link-outer\":\"style_link-outer__kegyZ__3Nde3\",\"link\":\"style_link__F2CO-__3Nde3\",\"is-last-item\":\"style_is-last-item__MytRl__3Nde3\"};","import { Row, Col, Button, Typography } from \"antd\";\nimport QueueAnim from \"rc-queue-anim\";\nimport classnames from \"classnames\";\nimport SimpleBar from \"@common/components/SimpleBar\";\nimport { useGlobalContext, usePreset } from \"@components/Global\";\nimport Icon from \"@components/Icon\";\nimport Content from \"@components/Content\";\nimport style from \"./style.module.scss\";\nimport { useMemo, useRef, useState, useEffect } from \"react\";\nimport groupBy from \"lodash/groupBy\";\nimport first from \"lodash/first\";\nimport range from \"lodash/range\";\nimport LoadingButton, { useLoading } from \"@components/LoadingButton\";\nimport findIndex from \"lodash/findIndex\";\n\nconst LEVEL = [\"high\", \"middle\", \"low\"];\n\nconst NotificationItem = ({\n level,\n title,\n groupLength,\n subtitle,\n content,\n link,\n id,\n children,\n className,\n}) => {\n const { setGlobal } = useGlobalContext(\"notification\");\n const { apis, ajax } = usePreset();\n const { isLoading, callback } = useLoading(async () => {\n const { data: resData } = apis?.notification?.read\n ? await ajax(\n Object.assign({}, apis.notification.read, {\n data: { ids: [id] },\n })\n )\n : { data: { code: 0 } };\n\n if (resData.code === 0) {\n setGlobal((notification) => {\n const newList = (notification?.list || []).slice(0);\n const index = findIndex(newList, (item) => id === item.id);\n if (index > -1) {\n newList.splice(index, 1);\n }\n return Object.assign({}, notification, { list: newList });\n });\n }\n });\n return (\n <div\n className={classnames(style[\"item\"], className)}\n style={{ \"--group-length\": Math.min(groupLength, 3) || 1 }}\n >\n {groupLength &&\n groupLength > 1 &&\n range(1, Math.min(groupLength, 3))\n .reverse()\n .map((number) => (\n <div\n className={classnames(\n style[\"item-box\"],\n style[`index-${number}`]\n )}\n key={number}\n />\n ))}\n <div className={classnames(style[\"item-box\"], style[\"item-box-main\"])}>\n <div\n className={classnames(style[\"item-title\"], style[`level-${level}`])}\n >\n <Icon\n className={style[\"title-icon\"]}\n type={level === \"high\" ? \"icon-tishi\" : \"icon-daiwochuli\"}\n />\n <Typography.Text ellipsis>{title}</Typography.Text>\n </div>\n <div className={style[\"item-content\"]}>\n <div className={style[\"item-subtitle\"]}>\n <Typography.Text ellipsis>{subtitle || \"\"}</Typography.Text>\n <Icon\n className={classnames(style[\"close-btn\"], {\n [style[\"is-loading\"]]: isLoading,\n })}\n type=\"icon-close-thin\"\n onClick={() => {\n if (isLoading) {\n return;\n }\n\n if (!id) {\n return;\n }\n\n callback();\n }}\n />\n </div>\n {Array.isArray(content) ? (\n <Content list={content} labelAlign=\"auto\" size=\"small\" />\n ) : (\n children\n )}\n </div>\n {link && (\n <div className={style[\"link-outer\"]}>\n <LoadingButton\n className={style[\"link\"]}\n size=\"small\"\n onClick={async () => {\n const { data: resData } = apis?.notification?.read\n ? await ajax(\n Object.assign({}, apis.notification.read, {\n data: { ids: [id] },\n })\n )\n : { data: { code: 0 } };\n if (resData.code === 0) {\n window.open(link);\n }\n }}\n >\n 查看详情\n </LoadingButton>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nNotificationItem.defaultProps = {\n level: \"low\",\n};\n\nconst Notification = () => {\n const { global: notification, setGlobal } = useGlobalContext(\"notification\");\n const headOptionRef = useRef();\n const { apis, ajax } = usePreset();\n const [headOptionHeight, setHeadOptionHeight] = useState(32);\n\n useEffect(() => {\n headOptionRef.current &&\n setHeadOptionHeight(headOptionRef.current?.clientHeight);\n }, []);\n\n const { list, expand } = Object.assign(\n {},\n {\n expand: false,\n list: [],\n },\n notification\n );\n\n const groupList = useMemo(() => {\n const group = groupBy(list, (item) => item.level || \"low\");\n return LEVEL.map((name) => group[name] || []);\n }, [list]);\n\n if (list.length === 0) {\n return null;\n }\n\n return (\n <div\n className={style[\"notification\"]}\n style={{\n \"--head-option-height\": `${headOptionHeight}px`,\n }}\n >\n <div ref={headOptionRef}>\n <Row justify=\"end\" wrap={false} className={style[\"header\"]} gutter={8}>\n {groupList.some((item) => item.length > 1) && (\n <Col>\n <Button\n size=\"small\"\n onClick={() => {\n setGlobal(\n Object.assign({}, notification, { expand: !expand })\n );\n }}\n >\n {expand ? \"全部折叠\" : \"全部展开\"}\n </Button>\n </Col>\n )}\n <Col>\n <LoadingButton\n type=\"primary\"\n size=\"small\"\n onClick={async () => {\n const { data: resData } = apis?.notification?.read\n ? await ajax(\n Object.assign({}, apis.notification.read, {\n data: {\n ids: list.map((item) => item.id).filter((id) => !!id),\n },\n })\n )\n : { data: { code: 0 } };\n if (resData.code === 0) {\n setGlobal(Object.assign({}, notification, { list: [] }));\n }\n }}\n >\n 全部清除\n </LoadingButton>\n </Col>\n </Row>\n </div>\n <SimpleBar className={style[\"list\"]}>\n <QueueAnim leaveReverse duration={200} interval={20}>\n {groupList\n .filter((item) => item && item.length > 0)\n .map((item, groupKey) => {\n if (expand) {\n return item.map(\n (notification, index) =>\n notification && (\n <div key={`group-${groupKey}-${index}`}>\n <NotificationItem\n {...Object.assign({}, notification)}\n className={classnames({\n [style[\"is-last-item\"]]:\n +groupKey + 1 ===\n Math.min(\n groupList.filter(\n (item) => item && item.length\n )?.length,\n 3\n ) && index === item?.length - 1,\n })}\n />\n </div>\n )\n );\n }\n const firstItem = first(item);\n return (\n <div key={`group-${groupKey}-0`}>\n <NotificationItem\n {...Object.assign({}, firstItem)}\n groupLength={item.length}\n className={classnames({\n [style[\"is-last-item\"]]:\n groupList?.length &&\n +groupKey + 1 ===\n Math.min(\n groupList.filter((item) => item && item.length)\n ?.length,\n 3\n ),\n })}\n />\n </div>\n );\n })}\n </QueueAnim>\n </SimpleBar>\n </div>\n );\n};\n\nexport default Notification;\n","// extracted by mini-css-extract-plugin\nexport default {\"outer\":\"style_outer__vbHB9__3Nde3\"};","import { createElement } from \"react\";\nimport { Result, Tooltip } from \"antd\";\nimport get from \"lodash/get\";\nimport classnames from \"classnames\";\nimport style from \"./style.module.scss\";\nimport { useGlobalContext, usePreset } from \"@components/Global\";\n\nexport const computedIsPass = ({ permissions, request }) => {\n return Array.isArray(request) && request.length > 0\n ? request.some((currentKey) => (permissions || []).indexOf(currentKey) > -1)\n : true;\n};\n\nexport const usePermissions = () => {\n const { global } = useGlobalContext();\n const { permissions, permissionsPath } = usePreset();\n return {\n permissions:\n global.permissions ||\n permissions ||\n (permissionsPath && get(global, permissionsPath)) ||\n [],\n };\n};\n\nexport const usePermissionsPass = ({ request }) => {\n const { permissions } = usePermissions();\n return computedIsPass({ permissions, request });\n};\n\nconst Permissions = ({\n type,\n className,\n tagName,\n message,\n request,\n children,\n ...props\n}) => {\n const isPass = usePermissionsPass({ request });\n if (typeof children === \"function\") {\n return children({ isPass, type, request });\n }\n\n if (isPass === true) {\n return children;\n }\n\n if (type === \"error\") {\n return <Result status=\"403\" subTitle={message} />;\n }\n\n if (type === \"tooltip\") {\n return (\n <Tooltip title={message}>\n {createElement(\n tagName,\n { ...props, className: classnames(style[\"outer\"], className) },\n children\n )}\n </Tooltip>\n );\n }\n\n return null;\n};\n\nPermissions.defaultProps = {\n type: \"hidden\",\n tagName: \"span\",\n message: \"您暂无权限,请联系管理员\",\n};\n\nexport default Permissions;\n","// extracted by mini-css-extract-plugin\nexport default {\"state-bar\":\"style_state-bar__3jfis__3Nde3\",\"has-children\":\"style_has-children__oQDqU__3Nde3\",\"tab-tab-control\":\"style_tab-tab-control__SopeO__3Nde3\",\"tab-radio-control\":\"style_tab-radio-control__R8X6-__3Nde3\",\"tab-step-control\":\"style_tab-step-control__EQaCl__3Nde3\",\"inner-state-bar\":\"style_inner-state-bar__lWmOz__3Nde3\"};","import { Tabs } from \"antd\";\nimport classnames from \"classnames\";\nimport style from \"./style.module.scss\";\n\n/**\n *\n * @param className\n * @param type 'tab' | 'radio' | 'step'\n * @param stateOption\n * @param isInner\n * @param props\n * @returns {JSX.Element}\n * @constructor\n */\nconst StateBar = ({\n className,\n type = \"tab\",\n stateOption = [],\n isInner,\n ...props\n}) => {\n return (\n <Tabs\n {...props}\n data-testid={\"components-core-state-bar\"}\n className={classnames(\n style[\"state-bar\"],\n style[`tab-${type}-control`],\n className,\n {\n [style[\"inner-state-bar\"]]: isInner,\n [style[\"has-children\"]]: stateOption.some((item) => !!item.children),\n }\n )}\n style={{ \"--total-count\": stateOption.length }}\n animated={false}\n items={stateOption.map(({ tab, label, key, ...props }) => {\n return { label: tab || label, key, ...props };\n })}\n />\n );\n};\n\nexport default StateBar;\n","// extracted by mini-css-extract-plugin\nexport default {\"state-tag\":\"style_state-tag__Kx27z__3Nde3\",\"state-result-tag\":\"style_state-result-tag__CssDz__3Nde3\",\"state-skill-tag\":\"style_state-skill-tag__k0bQE__3Nde3\",\"state-tag-filter-result-wrapper\":\"style_state-tag-filter-result-wrapper__QYS5z__3Nde3\",\"state-tag-filter-name\":\"style_state-tag-filter-name__iJaJd__3Nde3\",\"state-tag-filterResult\":\"style_state-tag-filterResult__KTkot__3Nde3\",\"show-bg\":\"style_show-bg__OcL+R__3Nde3\",\"tag-text\":\"style_tag-text__JHCt+__3Nde3\",\"state-tag-wrapper\":\"style_state-tag-wrapper__A-gTE__3Nde3\"};","import React, { useMemo } from \"react\";\nimport classnames from \"classnames\";\n\nimport style from \"./style.module.scss\";\nimport { Space, Tag } from \"antd\";\n\nconst tagTypeEnum = {\n default: \"#666666\",\n skill: {\n color: \"#666666\",\n borderColor: \"#EEEEEE\",\n },\n result: \"#666666\",\n filterResult: \"#5CB8B2\",\n success: \"#027A48\",\n progress: \"#F09700\",\n danger: \"#D14343\",\n info: \"#155ACF\",\n other: \"#6740C3\",\n};\n\nconst StateTag = ({\n showBorder,\n text,\n type,\n showBackground,\n className,\n filterName,\n ...props\n}) => {\n const tagColor = useMemo(\n () => ({\n color: tagTypeEnum?.[type]?.color || tagTypeEnum[type],\n borderColor: tagTypeEnum?.[type]?.borderColor || tagTypeEnum[type],\n }),\n [type]\n );\n\n return (\n <Space\n data-testid={\"components-core-state-tag\"}\n className={classnames(\n style[\"state-tag-wrapper\"],\n type === \"filterResult\" ? style[\"state-tag-filter-result-wrapper\"] : \"\"\n )}\n align=\"center\"\n size={4}\n >\n {filterName ? (\n <span className={style[\"state-tag-filter-name\"]}>{filterName}:</span>\n ) : null}\n <Tag\n color={tagColor.color}\n {...props}\n style={{\n background: showBackground ? tagColor.color + \"0F\" : \"none\",\n color: tagColor.color,\n border: showBorder ? `1px solid ${tagColor.borderColor}` : \"none\",\n }}\n className={classnames(\n style[\"state-tag\"],\n className,\n type === \"result\" ? style[\"state-result-tag\"] : \"\",\n type === \"skill\" ? style[\"state-skill-tag\"] : \"\",\n style[`state-tag-${type}`],\n showBackground ? style[\"show-bg\"] : \"\",\n showBorder ? style[\"show-border\"] : \"\"\n )}\n >\n <span className={style[\"tag-text\"]}>{text}</span>\n </Tag>\n </Space>\n );\n};\n\nStateTag.defaultProps = {\n color: \"#666666\",\n type: \"default\",\n showBorder: false,\n showBackground: true,\n text: \"\",\n className: \"\",\n};\n\nexport default StateTag;\n","// extracted by mini-css-extract-plugin\nexport default {\"table\":\"style_table__z7kfz__3Nde3\",\"is-resize\":\"style_is-resize__ut6RW__3Nde3\",\"is-moving\":\"style_is-moving__BJ9wR__3Nde3\",\"cell-resize-bar\":\"style_cell-resize-bar__-mlUF__3Nde3\",\"is-computed\":\"style_is-computed__B9rIF__3Nde3\",\"options-column\":\"style_options-column__vsPTr__3Nde3\",\"options-btn\":\"style_options-btn__U3uoy__3Nde3\",\"tooltip\":\"style_tooltip__vJlkv__3Nde3\",\"table-changer-setting\":\"style_table-changer-setting__HcrwR__3Nde3\",\"width-changer-sign\":\"style_width-changer-sign__Aflyl__3Nde3\",\"columns-control\":\"style_columns-control__5-5ZF__3Nde3\",\"columns-control-content\":\"style_columns-control-content__MoeUI__3Nde3\",\"columns-control-content-title\":\"style_columns-control-content-title__P5sXV__3Nde3\",\"columns-control-content-scroller\":\"style_columns-control-content-scroller__CeYRV__3Nde3\",\"columns-control-content-footer\":\"style_columns-control-content-footer__0bQWm__3Nde3\",\"columns-control-content-input\":\"style_columns-control-content-input__G6yKq__3Nde3\",\"columns-control-content-list\":\"style_columns-control-content-list__aXvTs__3Nde3\",\"columns-control-content-item\":\"style_columns-control-content-item__jbyyE__3Nde3\",\"is-drag\":\"style_is-drag__U68aw__3Nde3\",\"columns-control-content-item-icon\":\"style_columns-control-content-item-icon__yJqZf__3Nde3\",\"sortable-drag\":\"style_sortable-drag__K5hWd__3Nde3\",\"sortable-ghost\":\"style_sortable-ghost__lKTd2__3Nde3\",\"columns-control-overlay\":\"style_columns-control-overlay__OxCIz__3Nde3\",\"sort-btn\":\"style_sort-btn__KvNLr__3Nde3\",\"sort-active-desc\":\"style_sort-active-desc__TIhMC__3Nde3\",\"sort-icon\":\"style_sort-icon__dB85I__3Nde3\",\"sort-active-asc\":\"style_sort-active-asc__RUBup__3Nde3\"};","// extracted by mini-css-extract-plugin\nexport default {\"col-item\":\"columns_col-item__Ym1Ec__3Nde3\",\"tag\":\"columns_tag__bQZLG__3Nde3\",\"avatar\":\"columns_avatar__SLPI+__3Nde3\",\"hover\":\"columns_hover__oAwHg__3Nde3\",\"primary\":\"columns_primary__6KtaA__3Nde3\",\"loading\":\"columns_loading__gtBay__3Nde3\",\"options\":\"columns_options__WvDZD__3Nde3\"};","import { Button } from \"antd\";\nimport classnames from \"classnames\";\nimport Icon from \"@components/Icon\";\nimport ButtonGroup from \"@components/ButtonGroup\";\nimport style from \"./style.module.scss\";\n\nconst OptionsList = ({ className, list = [], width }) => {\n return (\n <div\n className={classnames(className, style[\"options-column\"])}\n style={{\n \"--max-width\": width + \"px\",\n }}\n >\n <ButtonGroup\n list={list\n .filter((item) => !item?.hidden)\n .map(({ className, ...props }) =>\n Object.assign({}, props, {\n className: classnames(\n className,\n \"btn-no-padding\",\n style[\"options-btn\"]\n ),\n type: \"link\",\n })\n )}\n more={\n <Button\n icon={<Icon type=\"icon-gengduo2\" />}\n className=\"btn-no-padding\"\n type=\"link\"\n />\n }\n />\n </div>\n );\n};\n\nexport default OptionsList;\n","import { Typography } from \"antd\";\nimport style from \"./style.module.scss\";\n\nconst Ellipsis = ({ children, ellipsis }) => {\n return (\n <Typography.Text\n ellipsis={\n ellipsis &&\n Object.assign(\n {},\n {\n tooltip: {\n overlayClassName: style[\"tooltip\"],\n children: children,\n },\n }\n )\n }\n >\n {children}\n </Typography.Text>\n );\n};\n\nexport default Ellipsis;\n","import { useState } from \"react\";\nimport classnames from \"classnames\";\nimport columnsStyle from \"./columns.module.scss\";\n\nconst ColItem = ({\n type,\n item,\n isEmpty,\n emptyRender,\n hover,\n primary,\n children,\n width,\n style,\n onClick,\n colValue,\n}) => {\n const [loading, setLoading] = useState(false);\n return (\n <div\n style={Object.assign({}, style, { \"--max-width\": width + \"px\" })}\n className={classnames(\n columnsStyle[\"col-item\"],\n columnsStyle[type],\n isEmpty\n ? null\n : {\n [columnsStyle[\"hover\"]]: hover,\n [columnsStyle[\"primary\"]]: primary,\n [columnsStyle[\"loading\"]]: loading,\n }\n )}\n onClick={(e) => {\n if (typeof onClick === \"function\" && !isEmpty && !loading) {\n setLoading(true);\n Promise.resolve(\n onClick({ item, colItem: colValue, event: e })\n ).finally(() => {\n setLoading(false);\n });\n }\n }}\n >\n {isEmpty\n ? emptyRender({ type, item, hover, primary, children })\n : children}\n </div>\n );\n};\n\nColItem.defaultProps = {\n emptyRender: () => \"-\",\n};\n\nexport default ColItem;\n","import { createWithFetch } from \"@kne/react-fetch\";\nimport Ellipsis from \"./Ellipsis\";\nimport { Button } from \"antd\";\nimport ColItem from \"./ColItem\";\n\nconst DisplayInfo = createWithFetch({\n loading: null,\n})(({ data, children }) => {\n return children(data);\n});\n\nconst HideInfoComponent = ({\n api,\n expand,\n onExpand,\n ellipsis,\n hover,\n primary,\n emptyRender,\n isEmpty,\n}) => {\n if (expand) {\n return (\n <DisplayInfo {...api}>\n {(data) => {\n return (\n <ColItem\n type=\"hide-info-expand\"\n item={data}\n hover={hover}\n primary={primary}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n <Ellipsis ellipsis={ellipsis}>\n {typeof api.children === \"function\" ? api.children(data) : data}\n </Ellipsis>\n </ColItem>\n );\n }}\n </DisplayInfo>\n );\n }\n return (\n <ColItem\n type=\"hide-info\"\n primary\n isEmpty={isEmpty}\n emptyRender={emptyRender}\n >\n <Button className=\"btn-no-padding\" type=\"link\" onClick={onExpand}>\n 查看\n </Button>\n </ColItem>\n );\n};\n\nexport default HideInfoComponent;\n","import columnsStyle from \"./columns.module.scss\";\nimport dayjs from \"dayjs\";\nimport OptionsList from \"./OptionsList\";\nimport classnames from \"classnames\";\nimport StateTag from \"@components/StateTag\";\nimport Image from \"@components/Image\";\nimport Enum from \"@components/Enum\";\nimport HideInfoComponent from \"./HideInfoComponent\";\nimport Ellipsis from \"./Ellipsis\";\nimport ColItem from \"./ColItem\";\nimport omit from \"lodash/omit\";\n\n// init:160px min:120px max:400px\nconst date = (item, { hover, primary, isEmpty, emptyRender, ...props }) => {\n return (\n <ColItem\n {...props}\n type=\"date\"\n item={item}\n primary={primary}\n hover={hover}\n emptyRender={emptyRender}\n isEmpty={isEmpty || !dayjs(item).isValid()}\n >\n {dayjs(item).format(\"YYYY-MM-DD\")}\n </ColItem>\n );\n};\n\nconst dateShort = (\n item,\n { hover, primary, isEmpty, emptyRender, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"date-short\"\n item={item}\n primary={primary}\n hover={hover}\n emptyRender={emptyRender}\n isEmpty={isEmpty || !dayjs(item).isValid()}\n >\n {dayjs(item).format(\"YYYY-MM\")}\n </ColItem>\n );\n};\n\n// init:240px min:120px max:400px\nconst dateRange = (\n item,\n { hover, primary, isEmpty, emptyRender, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"date-range\"\n item={item}\n primary={primary}\n hover={hover}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n {dayjs(item?.[0]).format(\"YYYY-MM-DD HH:mm\") +\n \"-\" +\n dayjs(item?.[1]).format(\"HH:mm\")}\n </ColItem>\n );\n};\n// init:190px min:190px max:400px\nconst datetime = (\n item,\n { hover, primary, emptyRender, isEmpty, hideSecond, ...props }\n) => {\n return (\n <ColItem\n {...props}\n item={item}\n primary={primary}\n hover={hover}\n emptyRender={emptyRender}\n isEmpty={isEmpty || !dayjs(item).isValid()}\n >\n {dayjs(item).format(\n hideSecond ? \"YYYY-MM-DD HH:mm\" : \"YYYY-MM-DD HH:mm:ss\"\n )}\n </ColItem>\n );\n};\n// init:190px min:100px max:400px\nconst serialNumber = (\n item,\n { hover, primary, emptyRender, isEmpty, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"serial-number\"\n item={item}\n primary={primary}\n hover={hover}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n {item}\n </ColItem>\n );\n};\n// init:120px min:100px max:400px\nconst serialNumberShort = (\n item,\n { hover, primary, emptyRender, isEmpty, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"serial-number-short\"\n item={item}\n primary={primary}\n hover={hover}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n {item}\n </ColItem>\n );\n};\n// init:200px min:120px max:400px\nconst user = (\n item,\n { hover, primary, ellipsis, emptyRender, isEmpty, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"user\"\n item={item}\n primary={primary}\n hover={hover}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n <Ellipsis ellipsis={ellipsis}>{item}</Ellipsis>\n </ColItem>\n );\n};\n// init:100px 100px 400px\nconst userName = (\n item,\n { hover, primary, ellipsis, emptyRender, isEmpty, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"user-name\"\n item={item}\n primary={primary}\n hover={hover}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n <Ellipsis ellipsis={ellipsis}>{item}</Ellipsis>\n </ColItem>\n );\n};\n// init:240px 160px 400px\nconst contacts = (\n item,\n { hover, primary, ellipsis, emptyRender, isEmpty, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"contacts\"\n item={item}\n primary={primary}\n hover={hover}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n <Ellipsis ellipsis={ellipsis}>{item}</Ellipsis>\n </ColItem>\n );\n};\n// init:140px min:100px max:400px\nconst tag = (item, { emptyRender, isEmpty, ...props }) => {\n return (\n <ColItem\n {...props}\n type=\"tag\"\n item={item}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n {item &&\n (item.isEnum ? (\n <Enum\n name={item.name}\n moduleName={item.moduleName}\n force={item.force}\n >\n {({ type, description }) => (\n <StateTag\n type={type}\n {...Object.assign(\n {},\n omit(item, [\"name\", \"isEnum\", \"moduleName\", \"force\"])\n )}\n text={description}\n />\n )}\n </Enum>\n ) : (\n <StateTag {...Object.assign({}, item)} />\n ))}\n </ColItem>\n );\n};\n// init:80px min:64px max:200px\nconst avatar = (item, { emptyRender, isEmpty, ...props }) => {\n return (\n <ColItem\n {...props}\n type=\"avatar\"\n item={item}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n <Image.Avatar {...Object.assign({}, item)} size={32} />\n </ColItem>\n );\n};\n// init:70px min:70px max:400px\nconst singleRow = (\n item,\n { hover, primary, ellipsis, emptyRender, isEmpty, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"single-row\"\n item={item}\n hover={hover}\n primary={primary}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n <Ellipsis ellipsis={ellipsis}>{item}</Ellipsis>\n </ColItem>\n );\n};\n// init:80px min:80px max:400px\nconst hideInfo = (item, props) => {\n return <HideInfoComponent api={item} {...props} />;\n};\n// init:300px min:160px max:500px\nconst mainInfo = (\n item,\n { ellipsis, hover = true, primary = true, emptyRender, isEmpty, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"main-info\"\n item={item}\n hover={hover}\n primary={primary}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n <Ellipsis ellipsis={ellipsis}>{item}</Ellipsis>\n </ColItem>\n );\n};\n// init:400px 160px 600px\nconst description = (\n item,\n { hover, primary, ellipsis, emptyRender, isEmpty, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"description\"\n item={item}\n hover={hover}\n primary={primary}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n <Ellipsis ellipsis={ellipsis}>{item}</Ellipsis>\n </ColItem>\n );\n};\n\n// init:180px min:120px max:400px\nconst options = (item, { width }) => {\n return (\n <OptionsList\n className={classnames(columnsStyle[\"col-item\"], columnsStyle[\"options\"])}\n list={item}\n width={width}\n />\n );\n};\n\nconst other = (\n item,\n { hover, primary, ellipsis, emptyRender, isEmpty, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"other\"\n item={item}\n hover={hover}\n primary={primary}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n <Ellipsis ellipsis={ellipsis}>{item}</Ellipsis>\n </ColItem>\n );\n};\n\nconst sensitiveInfo = (\n item,\n { hover, primary, ellipsis, emptyRender, isEmpty, ...props }\n) => {\n return (\n <ColItem\n {...props}\n type=\"sensitiveInfo\"\n item={item}\n hover={hover}\n primary={primary}\n emptyRender={emptyRender}\n isEmpty={isEmpty}\n >\n <Ellipsis ellipsis={ellipsis}>{item}</Ellipsis>\n </ColItem>\n );\n};\n\nconst columnTypes = {\n date: {\n render: date,\n width: 160,\n min: 120,\n max: 400,\n },\n dateShort: {\n render: dateShort,\n width: 120,\n min: 100,\n max: 400,\n },\n dateRange: {\n render: dateRange,\n width: 240,\n min: 120,\n max: 400,\n },\n datetime: {\n render: datetime,\n width: 190,\n min: 190,\n max: 400,\n },\n serialNumber: {\n render: serialNumber,\n width: 190,\n min: 100,\n max: 400,\n },\n serialNumberShort: {\n render: serialNumberShort,\n width: 120,\n min: 100,\n max: 400,\n },\n user: {\n render: user,\n width: 200,\n min: 120,\n max: 400,\n },\n userName: {\n render: userName,\n width: 100,\n min: 100,\n max: 400,\n },\n contacts: {\n render: contacts,\n width: 240,\n min: 160,\n max: 400,\n },\n tag: {\n render: tag,\n width: 140,\n min: 100,\n max: 400,\n },\n avatar: {\n render: avatar,\n width: 80,\n min: 64,\n max: 200,\n },\n singleRow: {\n render: singleRow,\n width: 70,\n min: 70,\n max: 400,\n },\n hideInfo: {\n render: hideInfo,\n width: 120,\n min: 80,\n max: 400,\n },\n mainInfo: {\n render: mainInfo,\n width: 300,\n min: 160,\n max: 500,\n },\n description: {\n render: description,\n width: 400,\n min: 160,\n max: 600,\n },\n options: {\n render: options,\n width: 180,\n min: 120,\n max: 400,\n },\n sensitiveInfo: {\n render: sensitiveInfo,\n width: 200,\n min: 100,\n max: 400,\n },\n other: {\n render: other,\n width: 200,\n min: 120,\n max: 400,\n },\n otherSmall: {\n render: other,\n width: 100,\n min: 70,\n max: 400,\n },\n otherLarge: {\n render: other,\n width: 300,\n min: 120,\n max: 500,\n },\n};\n\nexport default columnTypes;\n","import { useMemo, useState } from \"react\";\nimport groupBy from \"lodash/groupBy\";\nimport Icon from \"@components/Icon\";\nimport LoadingButton from \"@components/LoadingButton\";\nimport { SearchInput } from \"@components/Common\";\nimport style from \"./style.module.scss\";\nimport { Button, Checkbox, Col, Collapse, List, Row, Tooltip } from \"antd\";\nimport { ReactSortable } from \"react-sortablejs\";\nimport classnames from \"classnames\";\nimport transform from \"lodash/transform\";\nimport get from \"lodash/get\";\nimport set from \"lodash/set\";\nimport cloneDeep from \"lodash/cloneDeep\";\n\nconst { Panel } = Collapse;\n\nconst ColumnsControlContent = ({\n close,\n onConfirm,\n columns,\n config: defaultValue,\n}) => {\n const [config, onChange] = useState(defaultValue || {});\n\n const [searchText, setSearchText] = useState(\"\");\n const { leftFixedColumns, rightFixedColumns, visibleColumns, hiddenColumns } =\n useMemo(() => {\n return transform(\n Object.assign(\n {\n leftFixedColumns: [],\n rightFixedColumns: [],\n visibleColumns: [],\n hiddenColumns: [],\n },\n groupBy(columns, (item) => {\n if (item.fixed === \"right\") {\n return \"rightFixedColumns\";\n }\n if (item.fixed === true || item.fixed === \"left\") {\n return \"leftFixedColumns\";\n }\n return (get(config, `${item.name}.visible`) !== true &&\n item.hidden) ||\n get(config, `${item.name}.visible`) === false\n ? \"hiddenColumns\"\n : \"visibleColumns\";\n })\n ),\n (result, value, key) => {\n result[key] = value.sort((a, b) => {\n return (\n get(config, `${a.name}.rank`, 0) -\n get(config, `${b.name}.rank`, 0)\n );\n });\n },\n {}\n );\n }, [columns, config]);\n\n const handlerColumnsChange = (columns) => {\n const newConfig = cloneDeep(config);\n const columnsList = [].concat(\n columns.leftFixedColumns,\n columns.visibleColumns,\n columns.rightFixedColumns\n );\n (columns.hiddenColumns || []).forEach((col) => {\n set(newConfig, `${col.name}.visible`, false);\n });\n columnsList.forEach((col, index) => {\n set(newConfig, `${col.name}.rank`, index + 1);\n });\n onChange(newConfig);\n };\n\n const renderColumn = (item) => {\n return (\n <>\n {item.titleText || item.title || \"未命名列\"}\n {item.groupHeader && item.groupHeader.length > 0\n ? `(${item.groupHeader.map(({ title }) => title).join(\"-\")})`\n : \"\"}\n </>\n );\n };\n\n return (\n <div className={style[\"columns-control-content\"]}>\n <div className={style[\"columns-control-content-title\"]}>\n <Row align=\"middle\" justify=\"space-between\">\n <Col>编辑表格</Col>\n <Col>\n <Tooltip title=\"恢复默认\">\n <LoadingButton\n type=\"text\"\n icon={<Icon type=\"icon-huifumorenshezhi\" />}\n onClick={async () => {\n onConfirm && (await onConfirm({}));\n close();\n }}\n />\n </Tooltip>\n </Col>\n </Row>\n </div>\n <div className={style[\"columns-control-content-scroller\"]}>\n <Collapse\n defaultActiveKey={[\"active\", \"un-active\"]}\n ghost={true}\n bordered\n >\n <Panel key=\"active\" header=\"显示的信息\">\n <List className={style[\"columns-control-content-list\"]}>\n {leftFixedColumns.map((item, index) => (\n <List.Item\n className={style[\"columns-control-content-item\"]}\n key={item.name || `left-${index}`}\n >\n <Checkbox checked disabled>\n {renderColumn(item)}\n </Checkbox>\n </List.Item>\n ))}\n <ReactSortable\n list={visibleColumns}\n filter=\".ignore-elements\"\n dragClass={style[\"sortable-drag\"]}\n ghostClass={style[\"sortable-ghost\"]}\n forceFallback\n setList={(visibleColumns) => {\n handlerColumnsChange({\n leftFixedColumns,\n visibleColumns,\n hiddenColumns,\n rightFixedColumns,\n });\n }}\n animation={300}\n delayOnTouchStart\n delay={2}\n >\n {visibleColumns.map((item, index) => (\n <List.Item\n className={classnames(\n style[\"columns-control-content-item\"],\n style[\"is-drag\"]\n )}\n key={item.name || `visible-${index}`}\n >\n <Icon\n type=\"icon-paixu\"\n className={style[\"columns-control-content-item-icon\"]}\n />\n <Checkbox\n checked\n disabled={\n item.fixed ||\n leftFixedColumns.length +\n visibleColumns.length +\n rightFixedColumns.length <=\n 1\n }\n onChange={(e) => {\n e.stopPropagation();\n e.preventDefault();\n const newConfig = Object.assign({}, config);\n newConfig[item.name] = Object.assign(\n {},\n newConfig[item.name],\n { visible: false }\n );\n onChange(newConfig);\n }}\n >\n {renderColumn(item)}\n </Checkbox>\n </List.Item>\n ))}\n </ReactSortable>\n {rightFixedColumns.map((item, index) => (\n <List.Item\n className={style[\"columns-control-content-item\"]}\n key={item.name || `right-${index}`}\n >\n <Checkbox checked disabled>\n {item.titleText || item.title || \"未命名列\"}\n </Checkbox>\n </List.Item>\n ))}\n </List>\n </Panel>\n <Panel\n key=\"un-active\"\n header={\n <Row wrap={false} justify=\"space-between\">\n <Col>隐藏的信息</Col>\n <Col\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <SearchInput\n prefix={<Icon type=\"icon-sousuo\" size={12} />}\n placeholder=\"搜索\"\n onSearch={(value) => {\n setSearchText(value);\n }}\n className={style[\"columns-control-content-input\"]}\n size=\"small\"\n />\n </Col>\n </Row>\n }\n >\n <List\n dataSource={hiddenColumns.filter(\n (item) =>\n typeof (item.titleText || item.title) === \"string\" &&\n (item.titleText || item.title).indexOf(searchText) > -1\n )}\n renderItem={(item) => {\n return (\n <List.Item\n className={style[\"columns-control-content-item\"]}\n key={item.key}\n >\n <Checkbox\n checked={false}\n onChange={(e) => {\n e.stopPropagation();\n e.preventDefault();\n const newConfig = Object.assign({}, config);\n newConfig[item.name] = Object.assign(\n {},\n newConfig[item.name],\n { visible: true }\n );\n onChange(newConfig);\n }}\n >\n {item.titleText || item.title || \"未命名列\"}\n </Checkbox>\n </List.Item>\n );\n }}\n />\n </Panel>\n </Collapse>\n </div>\n <Row\n className={style[\"columns-control-content-footer\"]}\n justify=\"end\"\n gutter={10}\n >\n <Col>\n <Button\n size=\"small\"\n onClick={() => {\n onChange(defaultValue || {});\n close();\n }}\n >\n 取消\n </Button>\n </Col>\n <Col>\n <LoadingButton\n type=\"primary\"\n size=\"small\"\n onClick={async () => {\n onConfirm && (await onConfirm(config));\n close();\n }}\n >\n 确定\n </LoadingButton>\n </Col>\n </Row>\n </div>\n );\n};\n\nexport default ColumnsControlContent;\n","import { startTransition, useEffect, useMemo, useRef, useState } from \"react\";\nimport useRefCallback from \"@kne/use-ref-callback\";\nimport classnames from \"classnames\";\nimport columnTypes from \"./columnTypes\";\nimport get from \"lodash/get\";\nimport sumBy from \"lodash/sumBy\";\nimport transform from \"lodash/transform\";\nimport pick from \"lodash/pick\";\nimport { Col, Popover, Row } from \"antd\";\nimport Icon from \"@components/Icon\";\nimport { usePreset } from \"@components/Global\";\nimport { useFetch } from \"@kne/react-fetch\";\nimport ColumnsControlContent from \"./ColumnsControlContent\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport style from \"./style.module.scss\";\nimport isEqual from \"lodash/isEqual\";\nimport findLastIndex from \"lodash/findLastIndex\";\n\nconst TableConfig = ({ title, columns, config, setConfig }) => {\n const [open, setOpen] = useState(false);\n return (\n <Row wrap={false}>\n <Col flex={1}>{title}</Col>\n <Col>\n <Popover\n open={open}\n onOpenChange={setOpen}\n trigger=\"click\"\n placement=\"bottomLeft\"\n overlayClassName={style[\"columns-control-overlay\"]}\n content={\n <ColumnsControlContent\n columns={columns}\n config={config}\n close={() => {\n setOpen(false);\n }}\n onConfirm={(newConfig) => {\n setConfig((config) => {\n return transform(\n newConfig,\n (result, value, key) => {\n result[key] = Object.assign(\n {},\n config[key],\n pick(value, [\"visible\", \"rank\"])\n );\n },\n {}\n );\n });\n }}\n />\n }\n >\n <span className={style[\"table-changer-setting\"]}>\n <Icon type=\"icon-shezhi\" />\n </span>\n </Popover>\n </Col>\n </Row>\n );\n};\n\nconst useTableConfig = ({ columns, name, controllerOpen, tableWidth }) => {\n const [currentMoveColumnIndex, setCurrentMoveColumnIndex] = useState(null);\n const currentMoveColumnIndexRef = useRef(currentMoveColumnIndex);\n currentMoveColumnIndexRef.current = currentMoveColumnIndex;\n const currentMoveColumnRef = useRef(null);\n const startPointRef = useRef(null);\n const [config, setConfigBase] = useState({});\n const { tableServerApis } = usePreset();\n const tablePageServerParams = tableServerApis?.getDataApi(name);\n\n const saveConfig = useDebouncedCallback((name, target) => {\n tableServerApis?.setDataFunc(name, target);\n }, 500);\n\n const setConfig = useRefCallback((newConfig) => {\n startTransition(() => {\n setConfigBase((config) => {\n const target =\n typeof newConfig === \"function\" ? newConfig(config) : newConfig;\n name && controllerOpen && saveConfig(name, target);\n return target;\n });\n });\n });\n\n const { send } = useFetch(\n Object.assign({\n ...Object.assign({}, tablePageServerParams),\n auto: false,\n cache: `TABLE_CONFIG_${name}`,\n isLocal: true,\n onRequestSuccess: (data) => {\n setConfigBase(Object.assign({}, data));\n },\n })\n );\n\n const getTableConfig = useRefCallback(() => {\n if (name && controllerOpen && tablePageServerParams) {\n send({ force: false });\n }\n });\n\n useEffect(() => {\n getTableConfig();\n }, [getTableConfig]);\n\n const visibleColumns = useMemo(() => {\n return columns\n .filter((col) => {\n return !(\n get(config, `${col.name}.visible`) === false ||\n (get(config, `${col.name}.visible`) !== true && col.hidden === true)\n );\n })\n .sort((a, b) => {\n const computedIndex = (item) => {\n return (\n get(config, `${item.name}.rank`, 0) +\n (item.fixed === \"left\" ? -10000 : 0) +\n (item.fixed === \"right\" ? 10000 : 0)\n );\n };\n return computedIndex(a) - computedIndex(b);\n });\n }, [columns, config]);\n\n const lastNotOptionsColumnIndex = useMemo(() => {\n return findLastIndex(visibleColumns, ({ type }) => type !== \"options\");\n }, [visibleColumns]);\n\n const totalWidth = useMemo(() => {\n return sumBy(\n visibleColumns,\n ({ type, name }) =>\n get(config, `${name}.width`) || columnTypes[type].width\n );\n }, [visibleColumns, config]);\n\n const computedRealWidth = ({ width, index }) => {\n return lastNotOptionsColumnIndex === index\n ? width + Math.max(tableWidth - totalWidth - 2, 0)\n : width;\n };\n\n const resizeBarRender = useRefCallback((column, index) => {\n return (\n <span\n className={classnames(style[\"cell-resize-bar\"])}\n onMouseDown={(e) => {\n currentMoveColumnRef.current = Object.assign({}, column, { index });\n startPointRef.current = e.clientX;\n setCurrentMoveColumnIndex(index);\n }}\n >\n <Icon type=\"icon-paixu\" />\n </span>\n );\n });\n\n const resize = useRefCallback((delta) => {\n if (currentMoveColumnIndex === null) {\n return;\n }\n if (!currentMoveColumnRef.current) {\n return;\n }\n const { name, width, min, max, index } = currentMoveColumnRef.current;\n const currentWidth = Math.min(Math.max(width + delta, min), max);\n if (currentWidth < computedRealWidth({ width: min, index })) {\n return;\n }\n setConfig((config) => {\n return Object.assign({}, config, {\n [name]: Object.assign({}, config[name], {\n width: currentWidth,\n }),\n });\n });\n });\n\n const computedColumnProps = useRefCallback((column, index) => {\n const { name, width, min, max } = column;\n let targetColumn = column;\n if (index === visibleColumns.length - 1) {\n targetColumn = Object.assign({}, column, {\n className: \"has-config-btn\",\n title: (\n <TableConfig\n title={column?.title}\n columns={columns}\n config={config}\n setConfig={setConfig}\n />\n ),\n });\n }\n\n const movingClass = () => {\n return {\n className: classnames({\n [style[\"is-moving\"]]: currentMoveColumnIndexRef.current === index,\n }),\n };\n };\n const currentWidth = Math.min(\n Math.max(get(config, `${name}.width`) || width, min),\n max\n );\n\n const realWidth = computedRealWidth({ width: currentWidth, index });\n\n return Object.assign({}, targetColumn, {\n onHeaderCell: movingClass,\n onCell: movingClass,\n width: realWidth,\n shouldCellUpdate: (record, prevRecord) => {\n return (\n currentMoveColumnIndexRef.current === null ||\n currentMoveColumnIndexRef.current === index ||\n column.type === \"hideInfo\" ||\n !isEqual(record[column.name], prevRecord[column.name])\n );\n },\n title: (\n <>\n {targetColumn.title}\n {!(realWidth > currentWidth && realWidth > max) &&\n resizeBarRender(\n Object.assign({}, targetColumn, { width: realWidth }),\n index\n )}\n </>\n ),\n });\n });\n\n useEffect(() => {\n const handlerCancelResize = () => {\n setCurrentMoveColumnIndex(null);\n startPointRef.current = null;\n currentMoveColumnRef.current = null;\n };\n\n const handlerResize = (e) => {\n if (\n currentMoveColumnIndexRef.current === null ||\n currentMoveColumnRef.current === null\n ) {\n return;\n }\n if (startPointRef.current === null) {\n startPointRef.current = e.clientX;\n return;\n }\n resize(e.clientX - startPointRef.current);\n };\n document.documentElement.addEventListener(\n \"mouseup\",\n handlerCancelResize,\n true\n );\n document.documentElement.addEventListener(\"mousemove\", handlerResize, true);\n return () => {\n document.documentElement.removeEventListener(\n \"mouseup\",\n handlerCancelResize,\n true\n );\n document.documentElement.removeEventListener(\n \"mousemove\",\n handlerResize,\n true\n );\n };\n }, [resize]);\n\n return {\n visibleColumns,\n currentMoveColumnIndex,\n resizeBarRender,\n columnsConfig: config,\n totalWidth,\n computedColumnProps,\n };\n};\n\nexport default useTableConfig;\n","import { useRef, useState } from \"react\";\nimport columnTypes from \"@components/Table/columnTypes\";\nimport isNil from \"lodash/isNil\";\nimport pick from \"lodash/pick\";\nimport memoize from \"lodash/memoize\";\nimport get from \"lodash/get\";\nimport useRefCallback from \"@kne/use-ref-callback\";\n\nconst useColumnTypeProps = ({ rowKey, renderProps }) => {\n const [expandInfo, setExpandInfo] = useState(null);\n const columnRenderPropsRef = useRef(renderProps);\n columnRenderPropsRef.current = renderProps;\n\n const computedColumnProps = useRefCallback(\n (col, index, { columnsConfig }) => {\n const {\n name,\n type,\n expandType,\n title,\n titleRender,\n fixed,\n emptyOf,\n emptyRender,\n groupHeader,\n sort,\n disableColItem,\n ...otherColProps\n } = col;\n const { render, width, min, max } = Object.assign(\n {},\n columnTypes[type],\n type === \"hideInfo\" &&\n !isNil(expandInfo) &&\n pick(columnTypes[expandType || \"other\"], [\"width\", \"min\", \"max\"])\n );\n const targetRender = memoize(render);\n\n return {\n name,\n title: typeof titleRender === \"function\" ? titleRender(title) : title,\n min,\n max,\n width,\n fixed,\n groupHeader,\n sort,\n type,\n render: (item) => {\n const itemKey =\n typeof rowKey === \"function\" ? rowKey(item) : item[rowKey];\n const colProps = Object.assign(\n {},\n col,\n typeof col.render === \"function\"\n ? col.render({\n ...columnRenderPropsRef.current,\n name,\n target: item,\n })\n : {}\n );\n\n const targetRenderWithProps = (colValue) => {\n const isEmpty = (\n emptyOf ||\n ((value) => value === \"\" || value === void 0 || value === null)\n )(colValue);\n return targetRender(colValue, {\n ...otherColProps,\n name,\n width: get(columnsConfig, `${name}.width`) || width,\n min,\n max,\n isEmpty,\n emptyRender,\n hover: colProps.hover,\n colValue: item,\n renderProps: columnRenderPropsRef.current,\n primary: colProps.primary,\n ellipsis: colProps.ellipsis,\n expand: expandInfo === itemKey,\n onExpand: () => setExpandInfo(itemKey),\n });\n };\n\n const colValue =\n colProps.hasOwnProperty(\"valueOf\") &&\n typeof colProps.valueOf === \"function\"\n ? colProps.valueOf(\n item,\n Object.assign(\n {},\n columnRenderPropsRef.current,\n {\n name,\n },\n disableColItem\n ? { targetRender: targetRenderWithProps }\n : {}\n )\n )\n : get(item, name);\n return disableColItem ? colValue : targetRenderWithProps(colValue);\n },\n };\n }\n );\n\n return {\n expandInfo,\n computedColumnProps,\n };\n};\n\nexport default useColumnTypeProps;\n","import { useMemo } from \"react\";\n\nconst useGroupHeader = (columns) => {\n return useMemo(() => {\n const groupHeaderColumns = columns.filter(\n (item) => item.groupHeader && item.groupHeader.length > 0\n );\n if (groupHeaderColumns.length > 0) {\n const newColumns = columns.slice(0);\n const group = [];\n const appendGroupHeader = (column) => {\n const { groupHeader } = column;\n if (!(groupHeader && groupHeader.length > 0)) {\n return;\n }\n const columnIndex = newColumns.indexOf(column);\n const core = (groupHeader, group) => {\n const [targetHeader, ...otherHeader] = groupHeader;\n let currentGroup = group.find(\n (item) => item.name === targetHeader.name\n );\n if (!currentGroup) {\n currentGroup = Object.assign(\n { startIndex: columnIndex },\n targetHeader,\n { children: [] }\n );\n group.push(currentGroup);\n }\n if (otherHeader.length > 0) {\n core(otherHeader, currentGroup.children);\n } else {\n currentGroup.children.push(column);\n }\n };\n core(groupHeader, group);\n newColumns.splice(columnIndex, 1);\n };\n groupHeaderColumns.forEach(appendGroupHeader);\n group.forEach((groupColumn, index) => {\n newColumns.splice(groupColumn.startIndex + index, 0, groupColumn);\n });\n\n return { columns: newColumns, hasGroupHeader: true };\n }\n return { columns, hasGroupHeader: false };\n }, [columns]);\n};\n\nexport default useGroupHeader;\n","import useControlValue from \"@kne/use-control-value\";\nimport Icon from \"@components/Icon\";\nimport classnames from \"classnames\";\nimport clone from \"lodash/clone\";\nimport { useCallback, useMemo } from \"react\";\nimport style from \"./style.module.scss\";\n\nconst sortArrayToMap = (sort) =>\n new Map(\n (sort || []).map(({ name, sort }) => {\n return [name, sort];\n })\n );\n\nconst useSort = (props) => {\n const [sort, setSort] = useControlValue(props, {\n value: \"sort\",\n defaultValue: \"defaultSort\",\n onChange: \"onSortChange\",\n });\n\n const mapSort = useMemo(() => {\n return sortArrayToMap(sort);\n }, [sort]);\n\n const setMapSort = useCallback(\n (callback) => {\n return setSort((sort) => {\n const newSort = callback(sortArrayToMap(sort));\n return Array.from(newSort).map(([name, sort]) => ({ name, sort }));\n });\n },\n [setSort]\n );\n\n return useCallback(\n ({ single, name }) => (\n <div\n className={classnames(style[\"sort-btn\"], {\n [style[\"sort-active-desc\"]]: mapSort.get(name) === \"DESC\",\n [style[\"sort-active-asc\"]]: mapSort.get(name) === \"ASC\",\n })}\n onClick={() => {\n setMapSort((sort) => {\n const current = sort.get(name);\n const targetValue = (() => {\n if (current === \"DESC\") {\n return \"ASC\";\n }\n if (current === \"ASC\") {\n return null;\n }\n return \"DESC\";\n })();\n if (single) {\n return new Map(targetValue ? [[name, targetValue]] : []);\n }\n const newSort = clone(sort);\n targetValue ? newSort.set(name, targetValue) : newSort.delete(name);\n return newSort;\n });\n }}\n >\n <Icon type=\"icon-triangle-up\" className={style[\"sort-icon\"]} />\n <Icon type=\"icon-triangle-down\" className={style[\"sort-icon\"]} />\n </div>\n ),\n [mapSort, setMapSort]\n );\n};\n\nexport default useSort;\n","import style from \"./style.module.scss\";\nimport { Table as AntdTable } from \"antd\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport classnames from \"classnames\";\nimport Scroller from \"@common/components/Scroller\";\nimport { getScrollEl } from \"@common/utils/importantContainer\";\nimport useResize from \"@common/hooks/useResize\";\nimport useTableConfig from \"./useTableConfig\";\nimport useColumnTypeProps from \"@components/Table/useColumnTypeProps\";\nimport useGroupHeader from \"./useGroupHeader\";\nimport useSort from \"./useSort\";\nimport useRefCallback from \"@kne/use-ref-callback\";\n\nconst Table = ({\n columns,\n className,\n getScrollEl,\n sticky,\n stickyOffset,\n pagination,\n columnRenderProps,\n rowKey,\n dataSource,\n controllerOpen,\n name,\n summary,\n scroll,\n onTablePropsReady,\n ...props\n}) => {\n const [tableWidth, setTableWidth] = useState(0);\n const [isLayout, setIsLayout] = useState(true);\n\n useEffect(() => {\n if (tableWidth) {\n setTimeout(() => {\n setIsLayout(false);\n }, 0);\n }\n }, [tableWidth]);\n const columnRenderPropsRef = useRef(columnRenderProps);\n columnRenderPropsRef.current = columnRenderProps;\n const ref = useResize(\n (el) => {\n setTableWidth(el.clientWidth);\n },\n { isDebounce: true }\n );\n const { expandInfo, computedColumnProps } = useColumnTypeProps({\n rowKey,\n renderProps: columnRenderProps,\n });\n\n const {\n columnsConfig,\n visibleColumns,\n computedColumnProps: computedColumnConfigProps,\n currentMoveColumnIndex,\n totalWidth,\n } = useTableConfig({\n columns,\n controllerOpen,\n name,\n computedColumnProps,\n tableWidth,\n });\n\n const sortRender = useSort(props);\n\n const targetColumns = useMemo(() => {\n return visibleColumns.map((col, index) => {\n let target = computedColumnProps(col, index, {\n rowKey,\n expandInfo,\n columnsConfig,\n });\n\n if (target.sort && col.type !== \"options\") {\n target = Object.assign({}, target, {\n title: (\n <>\n {target.title}\n {sortRender({\n name: col.name,\n single:\n typeof target.sort === \"object\" ? target.sort.single : true,\n })}\n </>\n ),\n });\n }\n\n if (controllerOpen) {\n target = computedColumnConfigProps(target, index, {\n tableWidth,\n columnsConfig,\n });\n }\n\n return target;\n });\n }, [\n visibleColumns,\n tableWidth,\n columnsConfig,\n expandInfo,\n rowKey,\n controllerOpen,\n computedColumnProps,\n computedColumnConfigProps,\n sortRender,\n ]);\n\n const { columns: groupColumns, hasGroupHeader } =\n useGroupHeader(targetColumns);\n\n const onTablePropsReadyCallback = useRefCallback(onTablePropsReady);\n\n useEffect(() => {\n onTablePropsReadyCallback &&\n onTablePropsReadyCallback({\n columns,\n groupColumns,\n dataSource,\n visibleColumns,\n });\n }, [\n onTablePropsReadyCallback,\n groupColumns,\n dataSource,\n columns,\n visibleColumns,\n ]);\n\n return (\n <div\n className={classnames(className, style[\"table\"], {\n [style[\"is-resize\"]]: currentMoveColumnIndex !== null,\n [style[\"is-computed\"]]: isLayout,\n [style[\"has-group-header\"]]: hasGroupHeader,\n })}\n ref={ref}\n style={{\n \"--sticky-offset\": stickyOffset,\n }}\n >\n {!isLayout && (\n <Scroller\n className=\"table-page-scroller\"\n scroller={{ getContainer: getScrollEl }}\n getScrollTarget={(el) => {\n return (\n el.querySelector(\".ant-table-body\") ||\n el.querySelector(\".ant-table-content\")\n );\n }}\n >\n <AntdTable\n {...props}\n sticky={\n sticky\n ? {\n getContainer: getScrollEl,\n }\n : false\n }\n dataSource={dataSource}\n rowKey={rowKey}\n columns={groupColumns}\n scroll={Object.assign(\n {},\n { x: Math.max(tableWidth, totalWidth) },\n scroll\n )}\n pagination={pagination}\n summary={\n typeof summary === \"function\"\n ? (current, ...args) => {\n return summary(\n Object.assign(\n {},\n { pageData: current },\n { columns: groupColumns }\n ),\n ...args\n );\n }\n : null\n }\n />\n </Scroller>\n )}\n </div>\n );\n};\n\nTable.defaultProps = {\n controllerOpen: true,\n rowKey: \"id\",\n getScrollEl,\n columnRenderProps: {},\n sticky: false,\n stickyOffset: \"var(--nav-height)\",\n pagination: false,\n};\n\nexport default Table;\n","const importMessages = (locale) => {\n return {\n \"en-US\": () => import(\"./en-US\"),\n \"zh-CN\": () => import(\"./zh-CN\"),\n }[locale]();\n};\n\nexport default importMessages;\n","import { withFetch } from \"@kne/react-fetch\";\nimport Table from \"./Table\";\nimport classnames from \"classnames\";\nimport Features from \"@components/Features\";\nimport get from \"lodash/get\";\nimport useRefCallback from \"@kne/use-ref-callback\";\nimport { forwardRef, useMemo, useState } from \"react\";\nimport style from \"./style.module.scss\";\nimport importMessages from \"./locale\";\nimport { FormattedMessage, IntlProvider } from \"@components/Intl\";\nimport localStorage from \"@common/utils/localStorage\";\nimport { getScrollEl } from \"@common/utils/importantContainer\";\n\nconst FeaturesColumnsConfig = ({ id, columns, children }) => {\n if (id) {\n return (\n <Features id={id}>\n {({ options }) =>\n children({\n columns: columns.filter((item) => {\n if (!item.name) {\n return true;\n }\n if (!Array.isArray(get(options, \"hiddenColumns\"))) {\n return true;\n }\n return options.hiddenColumns.indexOf(item.name) === -1;\n }),\n })\n }\n </Features>\n );\n }\n return children({ columns });\n};\n\nconst TablePageInner = withFetch(\n ({\n data,\n refresh,\n reload,\n requestParams,\n fetchProps,\n isComplete,\n setData,\n loadMore,\n send,\n dataFormat,\n className,\n featureId,\n columns,\n getColumns,\n pagination,\n columnRenderProps,\n summary,\n ...props\n }) => {\n const handlerDataFormat = useRefCallback(dataFormat);\n const formatData = useMemo(() => {\n return handlerDataFormat(data);\n }, [data, handlerDataFormat]);\n\n const tableProps = {\n dataSource: formatData.list,\n pagination: pagination.open\n ? {\n total: formatData.total,\n showTotal: (total) => (\n <>\n <FormattedMessage\n id=\"Page_Total\"\n moduleName=\"Table\"\n defaultMessage=\"共\"\n />\n <span className={style[\"total_text\"]}>{total}</span>\n <FormattedMessage\n id=\"Page_TotalCount\"\n moduleName=\"Table\"\n defaultMessage=\"条\"\n />\n </>\n ),\n current: get(\n requestParams,\n [pagination.paramsType, pagination.currentName],\n 1\n ),\n pageSize: pagination.pageSize,\n onChange: pagination.onChange\n ? pagination.onChange\n : (page, size) => {\n if (\n page !==\n get(\n requestParams,\n [pagination.paramsType, pagination.currentName],\n 1\n )\n ) {\n (pagination.requestType === \"refresh\" ? refresh : reload)({\n [pagination.paramsType]: {\n [pagination.currentName]: page,\n [pagination.pageSizeName]: size,\n },\n });\n } else {\n pagination.onShowSizeChange &&\n pagination.onShowSizeChange(page, size);\n }\n getScrollEl().scrollTop = 0;\n },\n size: pagination.size,\n showSizeChanger: pagination.showSizeChanger,\n showQuickJumper: pagination.showQuickJumper,\n }\n : false,\n };\n\n return (\n <IntlProvider importMessages={importMessages} moduleName=\"Table\">\n <FeaturesColumnsConfig id={featureId} columns={columns}>\n {({ columns }) => (\n <Table\n {...Object.assign({}, props, tableProps)}\n className={classnames(className, \"loading-container\", {\n \"is-loading\": !isComplete,\n })}\n columns={columns}\n columnRenderProps={{\n ...columnRenderProps,\n requestParams,\n fetchProps,\n data,\n }}\n summary={\n typeof summary === \"function\"\n ? (...args) => {\n return summary(\n Object.assign(\n {},\n {\n data,\n fetchProps,\n requestParams,\n refresh,\n reload,\n loadMore,\n send,\n dataFormat,\n pagination,\n },\n ...args\n )\n );\n }\n : null\n }\n />\n )}\n </FeaturesColumnsConfig>\n </IntlProvider>\n );\n }\n);\n\nTablePageInner.defaultProps = {\n pagination: {},\n columnRenderProps: {},\n sticky: true,\n dataFormat: (data) => {\n return {\n list: data.pageData,\n total: data.totalCount,\n };\n },\n};\n\nconst TablePage = forwardRef(({ pagination, ...props }, ref) => {\n pagination = Object.assign(\n {},\n {\n showSizeChanger: true,\n showQuickJumper: true,\n open: true,\n paramsType: \"data\",\n requestType: \"reload\",\n currentName: \"currentPage\",\n pageSizeName: \"perPage\",\n pageSize: 20, //size: \"small\",\n },\n pagination\n );\n const pageSizeKey = `${(\n props.name || \"common\"\n ).toUpperCase()}_TABLE_PAGE_SIZE`;\n const [pageSize, setPageSize] = useState(\n localStorage.getItem(pageSizeKey) || pagination.pageSize\n );\n const params = props[pagination.paramsType];\n const fetchParams = useMemo(() => {\n return {\n [pagination.paramsType]: Object.assign({}, params, {\n [pagination.pageSizeName]: pageSize,\n }),\n };\n }, [params, pagination.pageSizeName, pagination.paramsType, pageSize]);\n return (\n <TablePageInner\n {...props}\n {...fetchParams}\n pagination={Object.assign({}, pagination, {\n pageSize,\n onShowSizeChange: (current, size) => {\n localStorage.setItem(pageSizeKey, size);\n setPageSize(size);\n },\n })}\n ref={ref}\n />\n );\n});\n\nexport default TablePage;\n","import * as component_1 from '@components/ButtonGroup';\nimport * as component_2 from 'antd';\nimport * as component_3 from '@components/ConfirmButton';\nconst readmeConfig = {\n name: `ButtonGroup`,\n summary: `<p>用于根据当前容器空间自动计算多余按钮收起</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>list</td>\n<td>button按钮属性的数组</td>\n<td>array</td>\n<td>[]</td>\n</tr>\n<tr>\n<td>more</td>\n<td>更多按钮占位</td>\n<td>jsx</td>\n<td>&lt;Button&gt;更多&lt;Icon type=\"icon-arrow-thin-down\"/&gt;&lt;/Button&gt;</td>\n</tr>\n<tr>\n<td>compact</td>\n<td>是否为紧凑模式</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>size</td>\n<td>当compact为false时为按钮间隔大小,否则为按钮大小</td>\n<td>'small','middle','large',number</td>\n<td>8</td>\n</tr>\n<tr>\n<td>split,align</td>\n<td>参考antd Space</td>\n<td>-</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `ButtonGroup_e3fc2`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: ButtonGroup } = _ButtonGroup;\nconst { Button, Space } = antd;\nconst { useState } = React;\nconst BaseExample = () => {\n const [width, setWidth] = useState(200);\n return (\n <Space>\n <div style={{ width: \\`\\${width}px\\` }}>\n <ButtonGroup\n list={[\n {\n type: \"primary\",\n children: \"操作1\",\n },\n {\n children: \"操作2\",\n },\n {\n children: \"操作3\",\n },\n {\n children: \"操作3\",\n message: \"确定要执行操作吗?\",\n disabled: true,\n },\n ]}\n />\n </div>\n <Space>\n <Button\n onClick={() => {\n setWidth((width) => {\n return width + 20;\n });\n }}\n >\n 增加容器宽度\n </Button>\n <Button\n onClick={() => {\n setWidth((width) => {\n return width - 20;\n });\n }}\n >\n 减少容器宽度\n </Button>\n </Space>\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_ButtonGroup\",\n packageName: \"@components/ButtonGroup\",\n component: component_1\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_2\n}]\n},{\n title: `紧凑模式`,\n description: `紧凑模式`,\n code: `const { default: ButtonGroup } = _ButtonGroup;\nconst { Button, Space } = antd;\nconst { useState } = React;\nconst BaseExample = () => {\n const [width, setWidth] = useState(200);\n return (\n <Space>\n <div style={{ width: \\`\\${width}px\\` }}>\n <ButtonGroup\n compact\n list={[\n {\n type: \"primary\",\n children: \"操作1\",\n },\n {\n children: \"操作2\",\n },\n {\n children: \"操作3\",\n },\n {\n children: \"操作3\",\n message: \"确定要执行操作吗?\",\n },\n ]}\n />\n </div>\n <Space>\n <Button\n onClick={() => {\n setWidth((width) => {\n return width + 20;\n });\n }}\n >\n 增加容器宽度\n </Button>\n <Button\n onClick={() => {\n setWidth((width) => {\n return width - 20;\n });\n }}\n >\n 减少容器宽度\n </Button>\n </Space>\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_ButtonGroup\",\n packageName: \"@components/ButtonGroup\",\n component: component_1\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_2\n}]\n},{\n title: `渲染函数`,\n description: `渲染函数`,\n code: `const { default: ButtonGroup } = _ButtonGroup;\nconst { default: ConfirmButton } = _ConfirmButton;\nconst { Button, Space } = antd;\nconst { useState, useEffect } = React;\n\nconst LoadChildren = ({ children }) => {\n const [loading, setLoading] = useState(true);\n useEffect(() => {\n setTimeout(() => {\n setLoading(false);\n }, 1000);\n }, []);\n if (loading) {\n return null;\n }\n return children({\n onClick: () => {\n console.log(\"加载完成\");\n },\n });\n};\nconst BaseExample = () => {\n const [width, setWidth] = useState(200);\n return (\n <Space>\n <div style={{ width: \\`\\${width}px\\` }}>\n <ButtonGroup\n list={[\n (props) => {\n return (\n <Button {...props} type=\"primary\">\n 操作1\n </Button>\n );\n },\n (props) => {\n return <Button {...props}>操作2</Button>;\n },\n (props) => {\n return <Button {...props}>操作3</Button>;\n },\n (props) => {\n return (\n <LoadChildren key={props.key}>\n {({ onClick }) => {\n return (\n <ConfirmButton\n {...props}\n isModal={props.isDropdown}\n message=\"确定要执行操作吗?\"\n onClick={onClick}\n >\n 操作4\n </ConfirmButton>\n );\n }}\n </LoadChildren>\n );\n },\n ]}\n />\n </div>\n <Space>\n <Button\n onClick={() => {\n setWidth((width) => {\n return width + 20;\n });\n }}\n >\n 增加容器宽度\n </Button>\n <Button\n onClick={() => {\n setWidth((width) => {\n return width - 20;\n });\n }}\n >\n 减少容器宽度\n </Button>\n </Space>\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_ButtonGroup\",\n packageName: \"@components/ButtonGroup\",\n component: component_1\n},{\n name: \"_ConfirmButton\",\n packageName: \"@components/ConfirmButton\",\n component: component_3\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_2\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_9 from '@components/Common';\nimport * as component_10 from 'antd';\nimport * as component_11 from '@kne/react-fetch';\nimport * as component_12 from 'lodash';\nconst readmeConfig = {\n name: `Common`,\n summary: `<p>为组件库提供通用的组件、方法、hooks</p>\n<h3>组件</h3>\n<ol>\n<li>FetchButton Button触发加载数据</li>\n<li>ScrollLoader 下拉滚动加载组件</li>\n<li>SearchInput 提供防抖的查询输入框</li>\n<li>SimpleBarBox</li>\n</ol>\n<h3>方法</h3>\n<ol>\n<li>changeMoneyToChinese 将金额转化为大写的人民币金额</li>\n<li>getPopupContainer</li>\n<li>getScrollEl</li>\n<li>getContainerBody</li>\n</ol>\n<h3>hooks</h3>\n<ol>\n<li>withOSSFile</li>\n</ol>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: `Common_d13bc`,\n style: `.Common_d13bc .scroll-list {\n max-height: 300px;\n}`,\n list: [{\n title: `FetchButton`,\n description: `这里填写示例说明`,\n code: `const Common = _Common;\n\nconst { FetchButton } = Common;\n\nconst BaseExample = () => {\n return (\n <FetchButton\n api={{\n loader: () => {\n return [\n { label: \"1\", content: \"11\" },\n { label: \"2\", content: \"22\" },\n ];\n },\n }}\n modalProps={({ data }) => {\n console.log(data);\n alert(JSON.stringify(data));\n return {\n children: (\n <div>\n <div>我是一个弹窗</div>\n <div>{data[0].label}</div>\n <div>{data[0].content}</div>\n <div>{data[1].label}</div>\n <div>{data[1].content}</div>\n </div>\n ),\n };\n }}\n modalFunc={() => {}}\n >\n FetchButton\n </FetchButton>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Common\",\n packageName: \"@components/Common\",\n component: component_9\n}]\n},{\n title: `Enum`,\n description: `这里填写示例说明`,\n code: `const Common = _Common;\nconst { Space } = _antd;\n\nconst { AddressEnum, FunctionEnum, IndustryEnum } = Common;\n\nconst BaseExample = () => {\n return (\n <Space direction={\"vertical\"}>\n <AddressEnum name={\"010\"} />\n <FunctionEnum name={\"010\"} />\n <IndustryEnum name={\"010\"} />\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Common\",\n packageName: \"@components/Common\",\n component: component_9\n},{\n name: \"_antd\",\n packageName: \"antd\",\n component: component_10\n}]\n},{\n title: `ScrollLoader`,\n description: `这里填写示例说明`,\n code: `const { get, merge, range } = lodash;\nconst Common = _Common;\nconst { default: Fetch } = _reactFetch;\n\nconst { ScrollLoader } = Common;\n\nconst BaseExample = () => {\n console.log(Fetch, _reactFetch);\n return (\n <Fetch\n loader={({ data }) => {\n const params = Object.assign(\n {\n perPage: 20,\n currentPage: 1,\n },\n data\n );\n return new Promise((resolve) => {\n const start = (params.currentPage - 1) * params.perPage;\n setTimeout(() => {\n resolve({\n totalCount: 100,\n pageData: range(start, start + params.perPage).map((key) => {\n return {\n label: \\`第\\${key + 1}项\\`,\n value: key + 1,\n };\n }),\n });\n }, 500);\n });\n }}\n render={(fetchApi) => {\n const pagination = {\n paramsType: \"data\",\n current: \"currentPage\",\n pageSize: \"perPage\",\n defaultPageSize: 20,\n };\n const current = get(\n fetchApi.requestParams,\n [pagination.paramsType, pagination.current],\n 1\n ),\n pageSize =\n get(fetchApi.requestParams, [\n pagination.paramsType,\n pagination.pageSize,\n ]) || pagination.defaultPageSize;\n\n const formatData = {\n list: fetchApi.data.pageData,\n total: fetchApi.data.totalCount,\n };\n return (\n <ScrollLoader\n completeTips=\"\"\n className=\"scroll-list\"\n isLoading={!fetchApi.isComplete}\n noMore={!formatData.total || current * pageSize >= formatData.total}\n onLoader={async () => {\n await fetchApi.loadMore(\n merge({\n data: {\n [pagination.pageSize]: pageSize,\n [pagination.current]: current + 1,\n },\n }),\n (data, newData) => {\n return Object.assign({}, newData, {\n pageData: data.pageData.concat(newData.pageData),\n });\n }\n );\n }}\n >\n {formatData.list.map((item) => {\n return <div>{item.label}</div>;\n })}\n </ScrollLoader>\n );\n }}\n />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Common\",\n packageName: \"@components/Common\",\n component: component_9\n},{\n name: \"_reactFetch\",\n packageName: \"@kne/react-fetch\",\n component: component_11\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_12\n}]\n},{\n title: `SearchInput`,\n description: `搜索框`,\n code: `const Common = _Common;\n\nconst { SearchInput } = Common;\nconst { useState } = React;\n\nconst BaseExample = () => {\n const [value, setValue] = useState(\"\");\n return (\n <SearchInput\n value={value}\n onSearch={(value) => {\n setValue(value);\n console.log(value);\n }}\n />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Common\",\n packageName: \"@components/Common\",\n component: component_9\n}]\n},{\n title: `AdvancedSelect`,\n description: `高级选择`,\n code: `const { UserField } = _Common;\nconst { Space } = antd;\n\nconst BaseExample = () => {\n return (\n <Space>\n <UserField\n defaultValue={[1]}\n getSearchProps={(text) => {\n return {\n data: { keyword: text },\n };\n }}\n allowSelectAll\n showSelectedCount\n countUnit=\"人\"\n allLabel=\"所有人\"\n showSelectedTag={false}\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n value: 1,\n description: \"我是用户描述\",\n },\n {\n label: \"用户二\",\n value: 2,\n description: \"我是用户描述\",\n },\n {\n label: \"用户三\",\n value: 3,\n description: \"我是用户描述\",\n },\n ],\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Common\",\n packageName: \"@components/Common\",\n component: component_9\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_10\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_4 from '@components/ConfirmButton';\nimport * as component_5 from 'antd';\nimport * as component_6 from '@components/Global';\nconst readmeConfig = {\n name: `ConfirmButton`,\n summary: `<h3>何时使用</h3>\n<p>执行操作前确认后再执行</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>message</td>\n<td>删除提示</td>\n<td>jsx</td>\n<td>确定要删除吗?</td>\n</tr>\n<tr>\n<td>title</td>\n<td>删除提示标题</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>isDelete</td>\n<td>是否为删除操作</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>onClick</td>\n<td>点击确认后执行的事件</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onCancel</td>\n<td>点击取消后执行的事件</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>disabled</td>\n<td>按钮是否禁用</td>\n<td>boolean</td>\n<td>-</td>\n</tr>\n<tr>\n<td>showCancel</td>\n<td>是否显示取消按钮</td>\n<td>boolean</td>\n<td>-</td>\n</tr>\n<tr>\n<td>cancelText</td>\n<td>取消按钮文案</td>\n<td>string</td>\n<td>取消</td>\n</tr>\n<tr>\n<td>okText</td>\n<td>确认按钮文案</td>\n<td>string</td>\n<td>确认</td>\n</tr>\n<tr>\n<td>isModal</td>\n<td>是否以弹窗方式展示,默认为Popconfirm</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>placement</td>\n<td>当isModal为false时生效,指定Popconfirm的弹出方向</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getContainer</td>\n<td>指定Popconfirm或Modal弹出位置,一般不需要指定</td>\n<td>function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>ConfirmLink</h3>\n<p>另外的一种按钮形式参数同ConfirmButton</p>\n<h3>withConfirm</h3>\n<p>高阶组件可以自定义按钮</p>`,\n example: {\n isFull: false,\n className: `ConfirmButton_5f815`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: ConfirmButton, ConfirmLink } = _ConfirmButton;\nconst { Space } = antd;\nconst { PureGlobal } = global;\nconst BaseExample = () => {\n return (\n <Space direction={\"vertical\"}>\n <Space>\n <ConfirmButton\n isDelete={false}\n message=\"确定要删除吗\"\n onClick={() => {\n console.log(\"执行删除\");\n }}\n >\n 非警告-气泡-正文\n </ConfirmButton>\n <ConfirmButton\n onClick={() => {\n console.log(\"执行删除\");\n }}\n >\n 警告-气泡-正文\n </ConfirmButton>\n </Space>\n <Space>\n <ConfirmButton\n title=\"确定要删除吗?\"\n isDelete={false}\n message=\"确定要删除确定要删除确定要删除确定要删除确定要删除确定要删除\"\n onClick={() => {\n console.log(\"执行删除\");\n }}\n >\n 非警告-气泡-标题正文\n </ConfirmButton>\n <ConfirmButton\n title=\"确定要删除吗?\"\n message=\"确定要删除确定要删除确定要删除确定要删除确定要删除确定要删除\"\n onClick={() => {\n console.log(\"执行删除\");\n }}\n >\n 警告-气泡-标题正文\n </ConfirmButton>\n </Space>\n <Space>\n <ConfirmButton\n isModal\n isDelete={false}\n message=\"确定提交XX吗?\"\n onClick={() => {\n console.log(\"执行删除\");\n }}\n >\n 非警告-modal-正文\n </ConfirmButton>\n <ConfirmButton\n isModal\n onClick={() => {\n console.log(\"执行删除\");\n }}\n >\n 警告-modal-正文\n </ConfirmButton>\n </Space>\n <Space>\n <ConfirmButton\n isModal\n title=\"确定提交XX吗?\"\n isDelete={false}\n message=\"这里显示详情说明这里显示详情说明这里显示详情说明这里显示详情说明这里显示详情说明\"\n onClick={() => {\n console.log(\"执行删除\");\n }}\n >\n 非警告-modal-标题正文\n </ConfirmButton>\n <ConfirmButton\n isModal\n title=\"确定要删除吗?\"\n message=\"确定要删除确定要删除确定要删除确定要删除确定要删除确定要删除\"\n onClick={() => {\n console.log(\"执行删除\");\n }}\n >\n 有title的Modal确认删除\n </ConfirmButton>\n </Space>\n <ConfirmLink\n onClick={() => {\n console.log(\"执行删除\");\n }}\n >\n Link-警告-气泡-正文\n </ConfirmLink>\n </Space>\n );\n};\n\nrender(\n <PureGlobal>\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_ConfirmButton\",\n packageName: \"@components/ConfirmButton\",\n component: component_4\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_5\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_6\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_7 from '@components/Content';\nconst readmeConfig = {\n name: `Content`,\n summary: `<h3>何时使用</h3>\n<p>成组展示多个字段,常见于详情页的信息展示</p>\n<h3>特点</h3>\n<p>labelAlign不为auto时会自动计算label的最小宽度使所有label的宽度等于最长的label宽度使视觉上更加整齐有秩序感</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>list</td>\n<td>内容,为一个数组,数组里面每一个值{label,content}</td>\n<td>array</td>\n<td>[]</td>\n</tr>\n<tr>\n<td>labelAlign</td>\n<td>label的对齐方式可以传入的值 left,right,center,auto,为auto时label不计算最小宽度</td>\n<td>string</td>\n<td>left</td>\n</tr>\n<tr>\n<td>col</td>\n<td>显示列数</td>\n<td>number</td>\n<td>1</td>\n</tr>\n<tr>\n<td>gutter</td>\n<td>栅格间隔,可以写成像素值或支持响应式的对象写法来设置水平间隔 { xs: 8, sm: 16, md: 24}。或者使用数组形式同时设置 [水平间距, 垂直间距]</td>\n<td>number</td>\n<td>0</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `Content_f15c1`,\n style: ``,\n list: [{\n title: `基本示例`,\n description: `展示了一个基本内容`,\n code: `const {default:Content} = _Content;\nconst BaseExample = ()=>{\n return <Content list={[\n {label:'标题',content:'内容'},\n {label:'标题标题',content:'内容内容'},\n {label:'标题标',content:'内容内容内容内容内容内容内容内容内容内容'},\n {label:'标题标题标题',content:'内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容'}\n ]}/>;\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_7\n}]\n},{\n title: `labelAlign auto`,\n description: `展示了设置labelAlign为auto的情况`,\n code: `const {default: Content} = _Content;\nconst BaseExample = () => {\n return <Content labelAlign=\"auto\" list={[\n {label: '标题', content: '内容'},\n {label: '标题标题', content: '内容内容'},\n {label: '标题标', content: '内容内容内容内容内容内容内容内容内容内容'},\n {\n label: '标题标题标题',\n content: '内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容'\n }\n ]}/>;\n};\n\nrender(<BaseExample/>);\n\n`,\n scope: [{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_7\n}]\n},{\n title: `多列`,\n description: `展示了两列的情况`,\n code: `const {default: Content} = _Content;\nconst BaseExample = () => {\n return <Content col={2} labelAlign=\"auto\" list={[\n {label: '标题', content: '内容'},\n {label: '标题标题', content: '内容内容'},\n {label: '标题标', content: '内容内容内容内容内容内容内容内容内容内容'},\n {\n label: '标题标题标题',\n content: '内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容'\n }\n ]}/>;\n};\n\nrender(<BaseExample/>);\n\n`,\n scope: [{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_7\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_8 from '@components/Descriptions';\nconst readmeConfig = {\n name: `Descriptions`,\n summary: `<h3>何时使用</h3>\n<p>常见于详情页的信息展示</p>\n<h3>特点</h3>\n<ul>\n<li>最多支持两列数据展示,多余的列将不展示</li>\n<li>支持Features控制列内容开启和关闭</li>\n</ul>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>dataSource</td>\n<td>详情数据源,内部每个数组为一行数据,每行数据中每个对象为一列数据,每行最多包含2列内容,多余的会被丢弃</td>\n<td>array[[{display,label,content,featureId}]]</td>\n<td>-</td>\n</tr>\n<tr>\n<td>dataSource[[{display}]]</td>\n<td>数据是否展示,当为function时可以接收到(item,dataSource)参数,item为当前项配置,dataSource为整个组件的dataSource配置</td>\n<td>boolean,function</td>\n<td>true</td>\n</tr>\n<tr>\n<td>dataSource[[{label}]]</td>\n<td>数据展示的label</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>dataSource[[{content}]]</td>\n<td>数据展示的内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>dataSource[[{featureId}]]</td>\n<td>Features控制的id,参考Features组件的id参数</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `Descriptions_8bc84`,\n style: ``,\n list: [{\n title: `展示一个信息详情`,\n description: `展示一个信息详情`,\n code: `const { default: Descriptions } = _Descriptions;\nconst BaseExample = () => {\n return (\n <Descriptions\n dataSource={[\n [\n { label: \"客户名称\", content: \"腾讯\" },\n {\n label: \"发票抬头\",\n content: \"腾讯科技公司\",\n },\n ],\n [\n { label: \"发票类型\", content: \"增值税专用发票\" },\n {\n label: \"发票开具日期\",\n content: \"2022-08-15\",\n },\n ],\n [{ label: \"退票金额\", content: \"22000.00元\" }],\n [\n {\n label: \"发票号\",\n content: (\n <div>\n <div>00384895992774</div>\n <div>00384895992774</div>\n <div>00384895992774</div>\n <div>00384895992774</div>\n </div>\n ),\n },\n ],\n [\n { label: \"是否需要重开发票\", content: \"否\" },\n {\n label: \"是否涉及金融变动\",\n content: \"否\",\n },\n ],\n [\n { label: \"是否造成实质损失\", content: \"否\" },\n { label: \"责任归属\", content: \"客户原因\" },\n ],\n [\n {\n label: \"退票原因\",\n content: \"退票原因的描述退票原因的描述退票原因的描\",\n },\n ],\n [{ label: \"附件\", content: \"附件名称\" }],\n [\n { label: \"操作时间\", content: \"2022-08-01 16:32\" },\n {\n label: \"操作人\",\n content: \"西西歪\",\n },\n ],\n [\n {\n label: \"超长内容\",\n content:\n \"超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容\",\n },\n {\n label: \"超长英文\",\n content:\n \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n },\n ],\n ]}\n />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Descriptions\",\n packageName: \"@components/Descriptions\",\n component: component_8\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_13 from '@components/Drawer';\nimport * as component_14 from '@components/Global';\nimport * as component_15 from '@components/Content';\nimport * as component_16 from 'antd';\nimport * as component_17 from 'lodash';\nconst readmeConfig = {\n name: `Drawer`,\n summary: `<p>屏幕边缘滑出的浮层面板</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>footer</td>\n<td>弹窗的footer,当其被显式设置成null且footerButtons没有设置过时弹窗不显示footer。当它类型为function时可以得到close方法和withDecorator设置的props</td>\n<td>jsx,function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>footerButtons</td>\n<td>弹窗footer的按钮区,默认为确认和取消按钮,默认按钮分别响应onConfirm和onCancel方法,如果自定义设置footerButtons则需要自行传入onClick参数,onConfirm和onCancel方法将不生效</td>\n<td>array</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onClose</td>\n<td>弹窗关闭时调用,弹窗受控时由该方法将外部open状态修改</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onConfirm</td>\n<td>当footerButtons未自定义设置时点击确认按钮触发执行该方法,当其返回Promise点击后Promise,resolve之前确认按钮显示为loading状态,返回值为false或者Promise的resolve值为false时弹窗不会被关闭,其他情况弹窗默认关闭</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onCancel</td>\n<td>和onConfirm类似,其为点击取消按钮触发</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>弹窗内容,可以为jsx或者function,为function时可以接收到close和withDecorator设置的props</td>\n<td>jsx,function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>withDecorator</td>\n<td>弹窗修饰器,会接收到弹窗children的render方法,可以在其外部添加修饰内容后执行render方法,给render方法传入的值可以在children,footer,rightOptions类型为function时接收到对应的参数</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>maskClosable</td>\n<td>点击蒙层是否允许关闭</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n</tbody>\n</table>\n<p>其他参数参考antd Drawer组件</p>\n<h3>AppDrawer</h3>\n<p>全局抽屉包裹组件,提供消费上下文的默认环境,提供可消费 React context 的 drawer 的静态方法,可以简化 useDrawer 等方法需要手动植入 contextHolder 的问题。</p>\n<h3>useDrawer</h3>\n<p>获取一个执行后可以弹出一个Drawer组件的方法,前置条件是需要再全局注入AppDrawer包裹组件</p>\n<h4>return:drawer</h4>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>drawer</td>\n<td>执行后可以弹出一个Drawer弹窗,参数同Drawer组件参数</td>\n<td>function</td>\n</tr>\n</tbody>\n</table>\n<h3>DrawerButton</h3>\n<p>点击以后可以执行获取数据,在数据未返回时按钮展示为loading状态,数据返回后弹出Drawer弹窗</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>api</td>\n<td>@kne/react-fetch 所需参数</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>drawerProps</td>\n<td>同Drawer参数,当它为function时,执行function后返回的值作为drawerProps</td>\n<td>object,function({data,fetchApi,close})</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p>其他参数同antd Button 组件</p>`,\n example: {\n isFull: false,\n className: `Drawer_9b1ed`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Drawer, useDrawer, DrawerButton } = _Drawer;\nconst { Button, Space } = antd;\nconst { range } = lodash;\nconst { useRef, useState } = React;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\n\nconst api = {\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n {\n label: \"内容1\",\n content:\n \"内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1\",\n },\n {\n label: \"内容2\",\n content:\n \"内容2内容2内内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2容2内容2内容2内容2内容2内容2\",\n },\n { label: \"内容1\", content: \"内容1内容1内容1内容1内容1内容1内容1\" },\n {\n label: \"内容2\",\n content: \"内容2内容2内容2内容2内容2内容2内容2内容2\",\n },\n { label: \"内容1\", content: \"内容1内容1内容1内容1内容1内容1内容1\" },\n {\n label: \"内容2\",\n content: \"内容2内容2内容2内容2内容2内容2内容2内容2\",\n },\n { label: \"内容1\", content: \"内容1内容1内容1内容1内容1内容1内容1\" },\n {\n label: \"内容2\",\n content: \"内容2内容2内容2内容2内容2内容2内容2内容2\",\n },\n { label: \"内容1\", content: \"内容1内容1内容1内容1内容1内容1内容1\" },\n {\n label: \"内容2\",\n content: \"内容2内容2内容2内容2内容2内容2内容2内容2\",\n },\n { label: \"内容1\", content: \"内容1内容1内容1内容1内容1内容1内容1\" },\n {\n label: \"内容2\",\n content: \"内容2内容2内容2内容2内容2内容2内容2内容2\",\n },\n ]);\n }, 1000);\n });\n },\n};\n\nconst BaseExample = () => {\n const drawer = useDrawer();\n const [open, setOpen] = useState(false);\n return (\n <Space>\n <Button\n onClick={() => {\n setOpen(true);\n }}\n >\n open 组件打开\n </Button>\n <Button\n onClick={() => {\n drawer({\n title: \"标题\",\n children: \"打开了一个抽屉\",\n });\n }}\n >\n hook 打开\n </Button>\n <DrawerButton\n api={api}\n modalProps={({ data }) => {\n return {\n title: \"加载数据的弹窗\",\n children: <Content list={data} col={1} />,\n };\n }}\n >\n 按钮点击加载数据\n </DrawerButton>\n <Drawer title=\"Basic Drawer\" onClose={() => setOpen(false)} open={open}>\n <p>Some contents...</p>\n <p>Some contents...</p>\n <p>Some contents...</p>\n </Drawer>\n </Space>\n );\n};\n\nrender(\n <PureGlobal>\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_Drawer\",\n packageName: \"@components/Drawer\",\n component: component_13\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_14\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_15\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_16\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_17\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_18 from '@components/Enum';\nimport * as component_19 from 'antd';\nimport * as component_20 from '@components/Global';\nconst readmeConfig = {\n name: `Enum`,\n summary: ``,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: `Enum_cf204`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Enum } = _Enum;\nconst { PureGlobal } = global;\nconst { Space, Select } = antd;\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n locale: \"zh-CN\",\n enums: {\n testEnums: async ({ locale }) => {\n console.log(locale);\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n { value: \"1\", description: \"第一项\" },\n { value: \"2\", description: \"第二项\" },\n {\n value: \"3\",\n description: \"第三项\",\n },\n ]);\n }, 1000);\n });\n },\n },\n }}\n >\n <Space>\n <Enum moduleName=\"gender\" name=\"M\">\n {(data) => data.description}\n </Enum>\n <Enum moduleName=\"testEnums\" name=\"1\">\n {(data) => data.description}\n </Enum>\n <Enum moduleName=\"testEnums\" name=\"2\">\n {(data) => data.description}\n </Enum>\n <Enum moduleName=\"testEnums\">\n {(list) => {\n return (\n <Select\n placeholder=\"请选择\"\n options={list.map((item) => ({\n value: item.value,\n label: item.description,\n }))}\n />\n );\n }}\n </Enum>\n </Space>\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Enum\",\n packageName: \"@components/Enum\",\n component: component_18\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_19\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_20\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_21 from '@components/Features';\nimport * as component_22 from '@components/Global';\nimport * as component_23 from '@components/Layout';\nimport * as component_24 from 'react-router-dom';\nimport * as component_25 from 'antd';\nconst readmeConfig = {\n name: `Features`,\n summary: `<h3>何时使用</h3>\n<p>在系统中需要通过一些条件,系统性地让整个系统的某些功能屏蔽或者有另外的一些展现方式,可以用该组件来实现</p>\n<h3>特点</h3>\n<ul>\n<li>全局性配置,一次性声明,避免将各种判断语句散落在项目各处造成难以维护</li>\n<li>具有特征判断和依赖性判断,即当系统描述性文件中含有某个模块且含有所有依赖项模块则判断该组件为正常状态,其他情况为关闭状态</li>\n<li>可以通过配置文件给正常状态和关闭状态的组件传递不同的props来控制两种状态下组件的不同逻辑</li>\n<li>在配置文件中,组件的id是简写,只需要保证同一层级的组件id不重复就可以了,它的真实id会通过其所在的上下级关系,通过冒号将每一层的组件id链接起来组成其真实的id,你可以打开调试模式查看每一个组件实际运行时的id和判断状态</li>\n<li>组件的type可以设置为三种:system,module,feature。system为配置文件最顶级组件,module为功能模块,默认Layout的Page组件openFeatures为true时它的name会被设置成module,feature为具体的功能项</li>\n</ul>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>模块或功能id,通过Global里面的preset的features配置确定该模块开启或者关闭</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li>features 参数设置</li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>debug</td>\n<td>是否开启调试模式,开启后控制台会打印所有模块的id和判断结果</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>profile</td>\n<td>模块配置列表,具体参考下面profile参数说明</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li>profile参数说明</li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>模块的唯一标识符,需要保证在当前一级中不重复,实际id为所有父级的id用’:‘链接的字符串</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>type</td>\n<td>可能取值为system,module,feature,注意最外层的type必须为system</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>name</td>\n<td>模块的中文名称,不参与判断,只标识模块名帮助开发者识别</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>close</td>\n<td>模块是否关闭,可以缺省该值,缺省时profile里面存在某id的模块即为模块开启,不存在即为关闭。在特殊情况下,在profile存在该模块配置但是希望其关闭时可以显示指定该参数为true来关闭模块</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>dependencies</td>\n<td>依赖模块列表,每一项为一个模块id(该id必须为完整的id串,即带有所有父级id的用’:‘链接起来的字符串),当所有id的指代模块都被判断开启时,该模块被判断为开启</td>\n<td>array[string]</td>\n<td>-</td>\n</tr>\n<tr>\n<td>options</td>\n<td>模块开启时获取的参数</td>\n<td>any</td>\n<td>-</td>\n</tr>\n<tr>\n<td>rejectedOptions</td>\n<td>模块关闭时获取的参数</td>\n<td>any</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>被控制的模块,为function时可以接收到({isPass,options})参数 isPass为模块是否开启,options在模块开启时为options参数,在模块关闭时为rejectedOptions参数,其不为function类型时当模块关闭则不显示children,模块开启时正常显示children</td>\n<td>jsx,function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: true,\n className: `Features_98f77`,\n style: ``,\n list: [{\n title: `展示了一个系统中功能一开启功能二关闭的情况`,\n description: `展示了一个系统中功能一开启功能二关闭的情况`,\n code: `const { default: Features } = _Features;\nconst { default: Layout, PermissionsPage } = layout;\nconst { PureGlobal } = global;\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n features: {\n debug: true,\n profile: {\n id: \"erc\",\n type: \"system\",\n name: \"业务系统\",\n children: [\n {\n id: \"home\",\n type: \"module\",\n name: \"首页\",\n children: [\n {\n id: \"test\",\n type: \"feature\",\n name: \"测试功能\",\n dependencies: [\"erc:client\"],\n },\n ],\n },\n {\n id: \"position\",\n type: \"module\",\n name: \"职位\",\n children: [\n {\n id: \"position-list\",\n type: \"feature\",\n options: [],\n rejectedOptions: [],\n },\n ],\n },\n {\n id: \"client\",\n type: \"module\",\n name: \"客户\",\n },\n ],\n },\n },\n }}\n >\n <Layout navigation={{ isFixed: false }}>\n <PermissionsPage name=\"home\" openFeatures>\n <Features id=\"test\">功能模块一</Features>\n <Features id=\"test2\">功能模块二</Features>\n </PermissionsPage>\n </Layout>\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Features\",\n packageName: \"@components/Features\",\n component: component_21\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_22\n},{\n name: \"layout\",\n packageName: \"@components/Layout\",\n component: component_23\n}]\n},{\n title: `展示了打开页面特性配置开启和关闭的情况`,\n description: `展示了打开页面特性配置开启和关闭的情况`,\n code: `const { default: Features } = _Features;\nconst { default: Layout, PermissionsPage } = layout;\nconst { PureGlobal } = global;\nconst { Route, Routes } = Router;\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n features: {\n debug: true,\n profile: {\n id: \"erc\",\n type: \"system\",\n name: \"业务系统\",\n children: [\n {\n id: \"home\",\n type: \"module\",\n name: \"首页\",\n children: [\n {\n id: \"test\",\n type: \"feature\",\n name: \"测试功能\",\n },\n {\n id: \"test2\",\n type: \"feature\",\n name: \"测试功能2\",\n dependencies: [\"erc:client\"],\n },\n ],\n },\n ],\n },\n },\n }}\n >\n <Layout\n navigation={{\n isFixed: false,\n list: [\n {\n key: \"position\",\n title: \"职位\",\n path: \"/position\",\n },\n {\n key: \"client\",\n title: \"客户\",\n path: \"/client\",\n },\n ],\n }}\n >\n <Routes>\n <Route\n index\n element={\n <PermissionsPage name=\"home\" openFeatures>\n home页面模块\n <div>\n <Features id=\"test\">开启模块</Features>\n <Features id=\"test2\">关闭模块</Features>\n </div>\n </PermissionsPage>\n }\n />\n <Route\n path=\"/position\"\n element={\n <PermissionsPage name=\"position\" openFeatures>\n position页面模块\n </PermissionsPage>\n }\n />\n <Route\n path=\"/client\"\n element={\n <PermissionsPage name=\"client\">\n client页面模块,未打开features\n </PermissionsPage>\n }\n />\n </Routes>\n </Layout>\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Features\",\n packageName: \"@components/Features\",\n component: component_21\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_22\n},{\n name: \"layout\",\n packageName: \"@components/Layout\",\n component: component_23\n},{\n name: \"Router\",\n packageName: \"react-router-dom\",\n component: component_24\n}]\n},{\n title: `展示了一个系统中功能开启和关闭参数获取`,\n description: `展示了一个系统中功能开启和关闭参数获取`,\n code: `const { default: Features } = _Features;\nconst { default: Layout, PermissionsPage } = layout;\nconst { PureGlobal } = global;\nconst { useState } = React;\nconst { Button, Space } = antd;\nconst BaseExample = () => {\n const [close, setClose] = useState(false);\n return (\n <PureGlobal\n preset={{\n features: {\n debug: true,\n profile: {\n id: \"erc\",\n type: \"system\",\n name: \"业务系统\",\n children: [\n {\n id: \"home\",\n type: \"module\",\n name: \"首页\",\n children: [\n {\n id: \"test\",\n type: \"feature\",\n name: \"测试功能\",\n options: {\n state: \"开启\",\n },\n rejectedOptions: {\n state: \"关闭\",\n },\n close: close,\n },\n ],\n },\n ],\n },\n },\n }}\n >\n <Space direction=\"vertical\">\n <Button\n onClick={() => {\n setClose((value) => !value);\n }}\n >\n 切换\n </Button>\n <Layout navigation={{ isFixed: false }}>\n <PermissionsPage name=\"home\" openFeatures>\n <Features id=\"test\">\n {({ isPass, options }) => {\n return isPass\n ? \"模块开启,options:\" + JSON.stringify(options)\n : \"模块关闭,options:\" + JSON.stringify(options);\n }}\n </Features>\n </PermissionsPage>\n </Layout>\n </Space>\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Features\",\n packageName: \"@components/Features\",\n component: component_21\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_22\n},{\n name: \"layout\",\n packageName: \"@components/Layout\",\n component: component_23\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_25\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_26 from '@components/File';\nimport * as component_27 from '@components/Global';\nimport * as component_28 from '@kne/remote-loader';\nimport * as component_29 from 'lodash';\nimport * as component_30 from 'antd';\nconst readmeConfig = {\n name: `File`,\n summary: `<p>提供文件展示,OSS文件id转换访问地址,文件列表,下载等操作</p>\n<p>注意:</p>\n<ul>\n<li>如果需要显示或者转换oss id的文件,需要Global的preset apis设置过oss接口或者传入apis.oss参数,oss返回访问地址</li>\n</ul>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>如果文件为oss文件,传入ossId</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>url</td>\n<td>如果文件为普通文件地址,传入该参数</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>error</td>\n<td>加载文件失败展示组件</td>\n<td>jsx</td>\n<td>null</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>通过oss id获取oss文件地址接口{oss} oss为一个@kne/react-fetch参数,如果Global的preset已设置该值,切当前组件也需要应用该值时可以不传</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>loading</td>\n<td>加载文件loading过程中显示组件</td>\n<td>jsx</td>\n<td>null</td>\n</tr>\n</tbody>\n</table>\n<h4>Download</h4>\n<p>下载文件按钮</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>filename</td>\n<td>下载文件的文件名</td>\n<td>string</td>\n<td>未命名下载文件</td>\n</tr>\n<tr>\n<td>onSuccess</td>\n<td>下载成功回调函数</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onError</td>\n<td>下载失败回调函数</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>id</td>\n<td>如果文件为oss文件,传入ossId</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>url</td>\n<td>如果文件为普通文件地址,传入该参数</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>通过oss id获取oss文件地址接口{oss} oss为一个@kne/react-fetch参数,如果Global的preset已设置该值,切当前组件也需要应用该值时可以不传</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>List</h4>\n<p>显示文件列表,可以带有编辑文件名称,文件预览,文件删除等功能</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>dataSource</td>\n<td>文件列表</td>\n<td>array[{id,type,filename,date,userName}]</td>\n<td>[]</td>\n</tr>\n<tr>\n<td>dataSource[].id</td>\n<td>id:文件的id,一般为ossId</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>dataSource[].type</td>\n<td>文件状态为uploading时该行文件展示为loading状态</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>dataSource[].filename</td>\n<td>文件名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>dataSource[].date</td>\n<td>文件上传日期</td>\n<td>Date,date timestamp</td>\n<td>-</td>\n</tr>\n<tr>\n<td>dataSource[].userName</td>\n<td>文件上传人</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getPermission</td>\n<td>获取操作权限,会在render每条数据时调用,获取到参数列表[type,itemData],type:preview预览,edit编辑,download下载,返回false为没有权限,其他情况为有权限</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>hasPreview</td>\n<td>是否开启预览功能,和getPermission type:preview预览结果同事控制,全都判断通过才能开启预览功能</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>infoItemRenders</td>\n<td>自定义列</td>\n<td>array[{span,render}]</td>\n<td>-</td>\n</tr>\n<tr>\n<td>infoItemRenders[].span</td>\n<td>当前列栅格数</td>\n<td>number</td>\n<td>4</td>\n</tr>\n<tr>\n<td>infoItemRenders[].render</td>\n<td>render函数</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>用于操作的api</td>\n<td>object{onEdit,onPreview,onDelete}</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis.onEdit</td>\n<td>文件名编辑回调接口</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis.onPreview</td>\n<td>文件预览回调接口</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis.onDelete</td>\n<td>文件删除回调接口</td>\n<td>function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>OptionButtons</h4>\n<p>文件操作按钮,可以带有编辑文件名称,文件预览,文件删除等功能</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>apis</td>\n<td>用于操作的api</td>\n<td>object{onEdit,onPreview,onDelete}</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis.onEdit</td>\n<td>文件名编辑回调接口</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis.onPreview</td>\n<td>文件预览回调接口</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis.onDelete</td>\n<td>文件删除回调接口</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>hasPreview</td>\n<td>是否开启预览功能,和getPermission type:preview预览结果同事控制,全都判断通过才能开启预览功能</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n</tbody>\n</table>\n<h4>FileLink</h4>\n<p>外观类似Link的组件,点击后可以弹出文件预览框</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>title</td>\n<td>弹窗标题</td>\n<td>string,jsx</td>\n<td>originName</td>\n</tr>\n<tr>\n<td>id</td>\n<td>文件oss id</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>originName</td>\n<td>文件名称</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>通过oss id获取oss文件地址接口{oss} oss为一个@kne/react-fetch参数,如果Global的preset已设置该值,切当前组件也需要应用该值时可以不传</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>openDownload</td>\n<td>是否开启文件下载</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>modalProps</td>\n<td>modal的其他参数,参考Modal组件</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>downloadBlobFile(target, filename)</h4>\n<p>下载文件的方法</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>target</td>\n<td>下载链接地址,或者二进制数据</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>filename</td>\n<td>下载后的文件名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>{isLoading,download,...others} = useDownload({id,filename,apis,onError,onSuccess});</h4>\n<p>生成下载文件function的hooks,带有下载中的状态控制</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>文件ossId</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>filename</td>\n<td>下载后的文件名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onError</td>\n<td>下载失败回调</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onSuccess</td>\n<td>下载成功回调</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>通过oss id获取oss文件地址接口{oss} oss为一个@kne/react-fetch参数,如果Global的preset已设置该值,切当前组件也需要应用该值时可以不传</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>isLoading</td>\n<td>是否正在下载中</td>\n<td>boolean</td>\n<td>-</td>\n</tr>\n<tr>\n<td>download</td>\n<td>执行该方法开始下载</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>others</td>\n<td>其他@kne/react-fetch useFetch参数</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>modal = useFileModal()</h4>\n<p>文件预览弹框方法生成的hooks</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>modal</td>\n<td>执行后弹出文件预览弹窗</td>\n<td>function({title, id, originName, apis, openDownload, ...modalProps})</td>\n<td>-</td>\n</tr>\n<tr>\n<td>modal({title})</td>\n<td>弹窗标题</td>\n<td>string,jsx</td>\n<td>originName</td>\n</tr>\n<tr>\n<td>modal({id})</td>\n<td>文件oss id</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>modal({originName})</td>\n<td>文件名称</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>modal({apis})</td>\n<td>通过oss id获取oss文件地址接口{oss} oss为一个@kne/react-fetch参数,如果Global的preset已设置该值,切当前组件也需要应用该值时可以不传</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>modal({openDownload})</td>\n<td>是否开启文件下载</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>modalProps</td>\n<td>modal的其他参数,参考Modal组件</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `File_0b279`,\n style: ``,\n list: [{\n title: `获取文件地址`,\n description: `通过一个ossId获取文件地址`,\n code: `const { default: File } = _File;\nconst { PureGlobal } = global;\nconst { getPublicPath } = remoteLoader;\nconst BaseExample = () => {\n return <File id=\"qqq\">{({ url }) => url}</File>;\n};\n\nrender(\n <PureGlobal\n preset={{\n apis: {\n oss: {\n loader: async ({ params }) => {\n console.log(params);\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(getPublicPath(\"components-core\") + \"/avatar.png\");\n }, 1000);\n });\n },\n },\n },\n }}\n >\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_File\",\n packageName: \"@components/File\",\n component: component_26\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_27\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_28\n}]\n},{\n title: `文件下载`,\n description: `展示文件下载`,\n code: `const { Download } = _File;\nconst { PureGlobal } = global;\nconst { getPublicPath } = remoteLoader;\nconst BaseExample = () => {\n return (\n <Download\n id=\"123\"\n filename=\"下载的文件\"\n onSuccess={() => {\n console.log(\"下载成功\");\n }}\n >\n 文件下载\n </Download>\n );\n};\n\nrender(\n <PureGlobal\n preset={{\n apis: {\n oss: {\n loader: async ({ params }) => {\n console.log(params);\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(getPublicPath(\"components-core\") + \"/avatar.png\");\n }, 1000);\n });\n },\n },\n },\n }}\n >\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_File\",\n packageName: \"@components/File\",\n component: component_26\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_27\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_28\n}]\n},{\n title: `文件列表`,\n description: `展示文件列表`,\n code: `const { List } = _FileList;\nconst { Space } = antd;\nconst { PureGlobal } = global;\nconst { getPublicPath } = remoteLoader;\n\nconst BaseExample = () => {\n return (\n <Space direction=\"vertical\">\n <List\n dataSource={[\n {\n uuid: \"121233\",\n type: \"uploading\",\n filename: \"张三的简历.doc\",\n },\n {\n id: \"xxxxx\",\n filename: \"我是一份简历.pdf\",\n date: \"2022-07-15T11:09:15.000+08:00\",\n userName: \"用户名\",\n },\n ]}\n />\n <List dataSource={[]} />\n </Space>\n );\n};\n\nrender(\n <PureGlobal\n preset={{\n apis: {\n oss: {\n loader: async ({ params }) => {\n console.log(params);\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(getPublicPath(\"components-core\") + \"/mock/demo.pdf\");\n }, 1000);\n });\n },\n },\n },\n }}\n >\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FileList\",\n packageName: \"@components/File\",\n component: component_26\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_29\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_27\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_30\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_28\n}]\n},{\n title: `文件链接`,\n description: `展示文件链接`,\n code: `const { FileLink } = _File;\nconst { getPublicPath } = remoteLoader;\nconst { PureGlobal } = global;\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n apis: {\n oss: {\n loader: async ({ params }) => {\n const mapping = {\n \"01\": \"/avatar.png\",\n \"02\": \"/mock/demo.html\",\n \"03\": \"/mock/1_王晶简历-2023_06_2.pdf\",\n };\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(\n getPublicPath(\"components-core\") + mapping[params.id]\n );\n }, 1000);\n });\n },\n },\n },\n }}\n >\n <FileLink id=\"01\" originName=\"我是一个图片.jpg\" />\n <FileLink id=\"02\" originName=\"我是一个网页.html\" />\n <FileLink id=\"03\" originName=\"我是一个pdf.pdf\" />\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_File\",\n packageName: \"@components/File\",\n component: component_26\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_28\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_27\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_31 from '@components/FileList';\nimport * as component_32 from '@kne/remote-loader';\nimport * as component_33 from 'lodash';\nimport * as component_34 from 'antd';\nconst readmeConfig = {\n name: `FileList`,\n summary: `<p>文件列表展示,预览,上传</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: true,\n className: `FileList_a785a`,\n style: ``,\n list: [{\n title: `完整示例`,\n description: `提供一个上传文件,显示文件列表,预览文件的展示`,\n code: `const { default: FileList } = _FileList;\nconst { createWithRemoteLoader, getPublicPath } = remoteLoader;\nconst { useState } = React;\nconst { uniqueId } = lodash;\n\nconst ajax = {\n postForm: (config) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n data: {\n code: 0,\n data: {\n id: \"uBFNeYQBnHRXlZaTGZpA\",\n originalName: config.file.name,\n },\n },\n });\n }, 1000);\n });\n },\n};\n\nconst apis = {\n onSave: async ({ data }) => {\n return {\n ossId: uniqueId(),\n filename: data.originalName,\n date: new Date(),\n userName: \"哈哈哈\",\n };\n },\n onDelete: () => {},\n};\n\nconst preset = {\n apis: {\n oss: {\n loader: async ({ params }) => {\n const mapping = {\n \"01\": \"/avatar.png\",\n \"02\": \"/mock/demo.html\",\n \"03\": \"/mock/1_王晶简历-2023_06_2.pdf\",\n };\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(getPublicPath(\"components-core\") + mapping[\"03\"]);\n }, 1000);\n });\n },\n },\n previewOffice: {\n loader: async () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n name: \"测试开发_夏永昱_本科_5年.docx\",\n data: [\n {\n id: \"gWw26Y0BeK_D6zxND5vh\",\n originalName: \"attachment/gWw26Y0BeK_D6zxND5vh.pdf\",\n url:\n getPublicPath(\"components-core\") +\n \"/mock/1_王晶简历-2023_06_2.pdf\",\n },\n ],\n });\n }, 1000);\n });\n },\n },\n ossUpload: ({ file }) => {\n return ajax.postForm({ file });\n },\n },\n};\n\nconst BaseExample = createWithRemoteLoader({\n modules: [\"components-core:Global@PureGlobal\"],\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n const [list, setList] = useState([\n {\n ossId: \"uBFNeYQBnHRXlZaTGZpA\",\n filename: \"avatar.pdf\",\n },\n {\n ossId: \"gWw26Y0BeK_D6zxND5vh\",\n filename: \"测试开发_夏永昱_本科_5年.docx\",\n },\n ]);\n console.log(list);\n return (\n <PureGlobal preset={preset}>\n <FileList\n defaultPreviewFileId=\"gWw26Y0BeK_D6zxND5vh\"\n list={list}\n setList={setList}\n apis={apis}\n />\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FileList\",\n packageName: \"@components/FileList\",\n component: component_31\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_32\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_33\n}]\n},{\n title: `上传文件列表`,\n description: `展示一个上传文件展示上传成功文件列表`,\n code: `const { FileUpload } = _FileList;\nconst { createWithRemoteLoader, getPublicPath } = remoteLoader;\nconst { useState } = React;\nconst { uniqueId } = lodash;\n\nconst ajax = {\n postForm: (config) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n data: {\n code: 0,\n data: {\n id: \"uBFNeYQBnHRXlZaTGZpA\",\n originalName: config.file.name,\n },\n },\n });\n }, 1000);\n });\n },\n};\n\nconst apis = {\n onSave: async ({ data }) => {\n const id = uniqueId();\n return {\n id: id,\n ossId: id,\n filename: data.originalName,\n date: new Date(),\n userName: \"哈哈哈\",\n };\n },\n onDelete: () => {},\n};\n\nconst preset = {\n apis: {\n oss: {\n loader: async ({ params }) => {\n const mapping = {\n \"01\": \"/avatar.png\",\n \"02\": \"/mock/demo.html\",\n \"03\": \"/mock/1_王晶简历-2023_06_2.pdf\",\n };\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(getPublicPath(\"components-core\") + mapping[\"03\"]);\n }, 1000);\n });\n },\n },\n ossUpload: ({ file }) => {\n return ajax.postForm({ file });\n },\n },\n};\n\nconst BaseExample = createWithRemoteLoader({\n modules: [\"components-core:Global@PureGlobal\"],\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n const [list, setList] = useState([]);\n console.log(list);\n return (\n <PureGlobal preset={preset}>\n <FileUpload list={list} setList={setList} apis={apis} />\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FileList\",\n packageName: \"@components/FileList\",\n component: component_31\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_32\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_33\n}]\n},{\n title: `拖拽上传`,\n description: `展示一个拖拽上传文件,得到File对象`,\n code: `const { DragArea, DragAreaOuter, UploadButton, DragButton } = _FileList;\nconst { Row, Col, Divider, Space } = antd;\n\nconst BaseExample = () => {\n return (\n <DragAreaOuter\n title={\n <Row>\n <Col flex={1}>标题</Col>\n <Col>\n <Space split={<Divider type=\"vertical\" />}>\n <DragButton />\n <UploadButton>上传</UploadButton>\n </Space>\n </Col>\n </Row>\n }\n onFileSelected={(fileList) => {\n console.log(fileList);\n }}\n >\n <DragArea />\n </DragAreaOuter>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FileList\",\n packageName: \"@components/FileList\",\n component: component_31\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_34\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_35 from '@components/FilePreview';\nimport * as component_36 from '@kne/remote-loader';\nconst readmeConfig = {\n name: `FilePreview`,\n summary: `<p>文件预览</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: true,\n className: `FilePreview_143ff`,\n style: ``,\n list: [{\n title: `HtmlPreview`,\n description: `这里填写示例说明`,\n code: `const { default: FilePreview, HtmlPreview } = _FilePreview;\nconst { getPublicPath } = remoteLoader;\nconst BaseExample = () => {\n return (\n <HtmlPreview\n maxWidth={900}\n url={getPublicPath(\"components-core\") + \"/mock/demo2.html\"}\n />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FilePreview\",\n packageName: \"@components/FilePreview\",\n component: component_35\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_36\n}]\n},{\n title: `PdfPreview`,\n description: `这里填写示例说明`,\n code: `const { PdfPreview } = _FilePreview;\nconst { getPublicPath } = remoteLoader;\nconst BaseExample = () => {\n return (\n <PdfPreview\n maxWidth={900}\n url={getPublicPath(\"components-core\") + \"/mock/1_王晶简历-2023_06_2.pdf\"}\n renderTextLayer={true}\n />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FilePreview\",\n packageName: \"@components/FilePreview\",\n component: component_35\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_36\n}]\n},{\n title: `TextPreview`,\n description: `这里填写示例说明`,\n code: `const { TextPreview } = _FilePreview;\nconst { getPublicPath } = remoteLoader;\nconst BaseExample = () => {\n return (\n <TextPreview\n maxWidth={900}\n url={getPublicPath(\"components-core\") + \"/mock/demo.txt\"}\n />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FilePreview\",\n packageName: \"@components/FilePreview\",\n component: component_35\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_36\n}]\n},{\n title: `ImagePreview`,\n description: `这里填写示例说明`,\n code: `const { ImagePreview } = _FilePreview;\nconst { getPublicPath } = remoteLoader;\nconst BaseExample = () => {\n return (\n <ImagePreview url={getPublicPath(\"components-core\") + \"/mock/demo2.jpg\"} />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FilePreview\",\n packageName: \"@components/FilePreview\",\n component: component_35\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_36\n}]\n},{\n title: `unknown`,\n description: `这里填写示例说明`,\n code: `const { UnknownPreview } = _FilePreview;\nconst { getPublicPath } = remoteLoader;\nconst BaseExample = () => {\n return (\n <UnknownPreview url={getPublicPath(\"components-core\") + \"/mock/demo.des\"} />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FilePreview\",\n packageName: \"@components/FilePreview\",\n component: component_35\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_36\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_37 from '@components/Filter';\nimport * as component_38 from 'antd';\nimport * as component_39 from '@components/Filter/doc/mock/tree-data.json';\nconst readmeConfig = {\n name: `Filter`,\n summary: ``,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: true,\n className: `Filter_d7778`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const {\n default: Filter,\n InputFilterItem,\n DatePickerFilterItem,\n DateRangePickerFilterItem,\n TypeDateRangePickerFilterItem,\n CityFilterItem,\n AdvancedSelectFilterItem,\n UserFilterItem,\n FunctionSelectFilterItem,\n IndustrySelectFilterItem,\n getFilterValue,\n FilterItemContainer,\n} = _Filter;\nconst { useState } = React;\nconst BaseExample = () => {\n const [value, onChange] = useState([]);\n return (\n <Filter\n value={value}\n onChange={(value) => {\n console.log(getFilterValue(value));\n onChange(value);\n }}\n list={[\n [\n <InputFilterItem label=\"文字\" name=\"text\" />,\n <CityFilterItem label=\"城市\" name=\"city\" />,\n <FilterItemContainer name=\"select\" label=\"高级选择\">\n {(props) => (\n <div>\n <AdvancedSelectFilterItem\n {...props}\n api={{\n loader: () => {\n return {\n pageData: [\n { label: \"第一项\", value: 1 },\n {\n label: \"第二项\",\n value: 2,\n disabled: true,\n },\n {\n label: \"第三项\",\n value: 3,\n },\n ],\n };\n },\n }}\n />\n </div>\n )}\n </FilterItemContainer>,\n <DatePickerFilterItem label=\"日期\" name=\"date\" picker=\"week\" />,\n <TypeDateRangePickerFilterItem\n label=\"复杂日期范围\"\n name=\"type-data-range\"\n allowEmpty={[true, true]}\n />,\n <DateRangePickerFilterItem label=\"日期范围\" name=\"date-range\" />,\n <UserFilterItem\n label=\"用户选择\"\n name=\"user\"\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n value: 1,\n description: \"我是用户描述\",\n },\n {\n label: \"用户二\",\n value: 2,\n description: \"我是用户描述\",\n },\n {\n label: \"用户三\",\n value: 3,\n description: \"我是用户描述\",\n },\n ],\n };\n },\n }}\n />,\n <FunctionSelectFilterItem\n label=\"职能选择\"\n name=\"functionLast\"\n onlyAllowLastLevel\n />,\n <FunctionSelectFilterItem\n label=\"职能选择\"\n name=\"function\"\n selectLevel={3}\n maxLength={3}\n />,\n <FunctionSelectFilterItem\n label=\"职能选择\"\n name=\"functionSingle\"\n single\n />,\n <IndustrySelectFilterItem\n label=\"行业选择\"\n name=\"industryLast\"\n onlyAllowLastLevel\n />,\n <IndustrySelectFilterItem\n label=\"行业选择\"\n name=\"industry\"\n selectLevel={2}\n maxLength={3}\n />,\n <IndustrySelectFilterItem\n label=\"行业选择\"\n name=\"industrySingle\"\n single\n />,\n ],\n ]}\n />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Filter\",\n packageName: \"@components/Filter\",\n component: component_37\n}]\n},{\n title: `高级筛选`,\n description: `高级筛选`,\n code: `const {\n default: Filter,\n AdvancedFilter,\n InputFilterItem,\n DatePickerFilterItem,\n DateRangePickerFilterItem,\n TypeDateRangePickerFilterItem,\n CityFilterItem,\n AdvancedSelectFilterItem,\n UserFilterItem,\n FunctionSelectFilterItem,\n IndustrySelectFilterItem,\n NumberRangeFilterItem,\n getFilterValue,\n FilterItemContainer,\n} = _Filter;\nconst { useState } = React;\n\nconst {\n CityFilterItem: CityAdvancedFilterItem,\n ListFilterItem,\n InputFilterItem: InputAdvancedFilterItem,\n} = AdvancedFilter.fields;\nconst BaseExample = () => {\n const [value, onChange] = useState([]);\n return (\n <AdvancedFilter\n value={value}\n onChange={(value) => {\n console.log(getFilterValue(value));\n onChange(value);\n }}\n list={[\n [<CityAdvancedFilterItem name=\"currentCity\" label=\"当前城市\" single />],\n [<CityAdvancedFilterItem name=\"expectCity\" label=\"期望城市\" />],\n [\n <ListFilterItem\n name=\"experience\"\n label=\"工作经验\"\n single\n items={[\n {\n value: [null, 1],\n label: \"1年以下\",\n },\n {\n value: [1, 5],\n label: \"1-5年\",\n },\n { value: [5, null], label: \"5年以上\" },\n ]}\n custom={<NumberRangeFilterItem label=\"自定义\" unit=\"年\" />}\n />,\n ],\n [<InputAdvancedFilterItem name=\"company\" label=\"公司\" />],\n ]}\n more={[\n <InputFilterItem label=\"文字\" name=\"text\" />,\n <CityFilterItem label=\"城市\" name=\"city\" />,\n <FilterItemContainer name=\"select\" label=\"高级选择\">\n {(props) => (\n <div>\n <AdvancedSelectFilterItem\n {...props}\n api={{\n loader: () => {\n return {\n pageData: [\n { label: \"第一项\", value: 1 },\n {\n label: \"第二项\",\n value: 2,\n disabled: true,\n },\n {\n label: \"第三项\",\n value: 3,\n },\n ],\n };\n },\n }}\n />\n </div>\n )}\n </FilterItemContainer>,\n <DatePickerFilterItem label=\"日期\" name=\"date\" picker=\"week\" />,\n <TypeDateRangePickerFilterItem\n label=\"复杂日期范围\"\n name=\"type-data-range\"\n allowEmpty={[true, true]}\n />,\n <DateRangePickerFilterItem label=\"日期范围\" name=\"date-range\" />,\n <UserFilterItem\n label=\"用户选择\"\n name=\"user\"\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n value: 1,\n description: \"我是用户描述\",\n },\n {\n label: \"用户二\",\n value: 2,\n description: \"我是用户描述\",\n },\n {\n label: \"用户三\",\n value: 3,\n description: \"我是用户描述\",\n },\n ],\n };\n },\n }}\n />,\n <FunctionSelectFilterItem\n label=\"职能选择\"\n name=\"function\"\n onlyAllowLastLevel\n single\n />,\n <IndustrySelectFilterItem\n label=\"行业选择\"\n name=\"industry\"\n onlyAllowLastLevel\n />,\n ]}\n />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Filter\",\n packageName: \"@components/Filter\",\n component: component_37\n}]\n},{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Filter, TreeFilterItem } = _Filter;\nconst { default: treeData } = _data;\nconst { useState } = React;\nconst { Space } = antd;\n\nconst BaseExample = () => {\n const [filter, setFilter] = useState([]);\n const [filter2, setFilter2] = useState([]);\n\n return (\n <Space direction=\"vertical\">\n <Filter\n value={filter}\n onChange={setFilter}\n list={[\n [\n <TreeFilterItem\n name=\"tree\"\n single\n label=\"树组件\"\n fieldNames={{\n title: \"name\",\n key: \"id\",\n children: \"children\",\n }}\n api={{\n loader: () => {\n return treeData.children;\n },\n }}\n />,\n ],\n ]}\n />\n <Filter\n value={filter2}\n onChange={setFilter2}\n list={[\n [\n <TreeFilterItem\n name=\"tree\"\n label=\"树组件\"\n fieldNames={{\n title: \"name\",\n key: \"id\",\n children: \"children\",\n }}\n api={{\n loader: () => {\n return treeData.children;\n },\n }}\n />,\n ],\n ]}\n />\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Filter\",\n packageName: \"@components/Filter\",\n component: component_37\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_38\n},{\n name: \"_data\",\n packageName: \"@components/Filter/doc/mock/tree-data.json\",\n component: component_39\n}]\n},{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const {\n FilterValueDisplay,\n FilterItem,\n FilterLines,\n PopoverItem,\n InputFilterItem,\n CityFilterItem,\n AdvancedSelectFilterItem,\n UserFilterItem,\n FunctionSelectFilterItem,\n IndustrySelectFilterItem,\n} = _Filter;\nconst { Space, Input } = antd;\nconst { useState } = React;\nconst BaseExample = () => {\n const [value, setValue] = useState([\n {\n label: \"城市\",\n name: \"city\",\n value: [\n { label: \"上海\", value: \"010\" },\n { label: \"北京\", value: \"020\" },\n ],\n },\n {\n label: \"职能\",\n name: \"function\",\n value: [\n { label: \"产品经理\", value: \"010\" },\n { label: \"销售\", value: \"020\" },\n {\n label: \"客户经理\",\n value: \"030\",\n },\n ],\n },\n ]);\n return (\n <Space direction=\"vertical\">\n <FilterValueDisplay value={value} onChange={setValue} />\n <Space>\n <FilterItem label=\"客户\" />\n <FilterItem label=\"客户\" active />\n <FilterItem label=\"客户\" open />\n <FilterItem label=\"超长超长超长超长超长超长超长超长\" active open />\n </Space>\n <FilterLines\n list={[\n [\n <FilterItem label=\"客户\" />,\n <FilterItem label=\"职位\" />,\n <FilterItem label=\"职位负责人\" />,\n ],\n [\n <FilterItem label=\"开始时间\" />,\n <FilterItem label=\"结束时间\" />,\n <FilterItem label=\"职位BD人\" />,\n ],\n [\n <FilterItem label=\"开始时间\" />,\n <FilterItem label=\"结束时间\" />,\n <FilterItem label=\"职位BD人\" />,\n ],\n [\n <FilterItem label=\"开始时间\" />,\n <FilterItem label=\"结束时间\" />,\n <FilterItem label=\"职位BD人\" />,\n ],\n ]}\n />\n <PopoverItem label=\"客户\">\n {({ value, onChange }) => (\n <Input value={value} onChange={(e) => onChange(e.target.value)} />\n )}\n </PopoverItem>\n <FilterLines\n list={[\n [\n <InputFilterItem label=\"文字\" />,\n <CityFilterItem label=\"城市\" />,\n <AdvancedSelectFilterItem\n label=\"高级选择\"\n api={{\n loader: () => {\n return {\n pageData: [\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2, disabled: true },\n {\n label: \"第三项\",\n value: 3,\n },\n ],\n };\n },\n }}\n />,\n <UserFilterItem\n label=\"用户选择\"\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n value: 1,\n description: \"我是用户描述\",\n },\n {\n label: \"用户二\",\n value: 2,\n description: \"我是用户描述\",\n },\n {\n label: \"用户三\",\n value: 3,\n description: \"我是用户描述\",\n },\n ],\n };\n },\n }}\n />,\n <FunctionSelectFilterItem label=\"职能选择\" />,\n <IndustrySelectFilterItem label=\"行业选择\" />,\n ],\n ]}\n />\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Filter\",\n packageName: \"@components/Filter\",\n component: component_37\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_38\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_40 from '@components/FlexBox';\nimport * as component_41 from 'antd';\nimport * as component_42 from 'lodash';\nconst readmeConfig = {\n name: `FlexBox`,\n summary: `<p>用于根据盒子大小响应式展示不同列</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: true,\n className: `FlexBox_51df0`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: FlexBox } = _FlexBox;\nconst { Card } = antd;\nconst BaseExample = () => {\n return (\n <FlexBox\n dataSource={[\n {\n title: \"Title 1\",\n },\n {\n title: \"Title 2\",\n },\n {\n title: \"Title 3\",\n },\n {\n title: \"Title 4\",\n },\n {\n title: \"Title 5\",\n },\n {\n title: \"Title 6\",\n },\n ]}\n renderItem={(item) => (\n <FlexBox.Item>\n <Card title={item.title}>Card content</Card>\n </FlexBox.Item>\n )}\n />\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FlexBox\",\n packageName: \"@components/FlexBox\",\n component: component_40\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_41\n}]\n},{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: FlexBox } = _FlexBox;\nconst { Card, Button } = antd;\nconst { range } = lodash;\nconst { useRef } = React;\nconst BaseExample = () => {\n const ref = useRef();\n return (\n <div>\n <FlexBox.Fetch\n ref={ref}\n getFetchApi={({ size }) => {\n return {\n data: {\n pageSize: size,\n },\n loader: ({ data }) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n pageData: range(0, data.pageSize).map((index) => {\n return {\n key: index,\n title: \\`第\\${index}项\\`,\n };\n }),\n });\n }, 1000);\n });\n },\n };\n }}\n renderItem={(item) => (\n <FlexBox.Item>\n <Card title={item.title}>Card content</Card>\n </FlexBox.Item>\n )}\n />\n <Button\n onClick={() => {\n console.log(ref.current);\n }}\n >\n 获取FetchApi\n </Button>\n </div>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FlexBox\",\n packageName: \"@components/FlexBox\",\n component: component_40\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_41\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_42\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_46 from '@components/FormInfo';\nimport * as component_47 from '@components/Global';\nimport * as component_48 from '@components/Modal';\nimport * as component_49 from 'lodash';\nimport * as component_50 from 'antd';\nimport * as component_51 from '@kne/react-fetch';\nimport * as component_52 from '@components/Content';\nimport * as component_53 from '@components/Icon';\nimport * as component_54 from 'dayjs';\nconst readmeConfig = {\n name: `FormInfo`,\n summary: `<p>表单控件,自带数据域管理。包含数据录入、校验以及对应样式</p>\n<h3>何时使用</h3>\n<ul>\n<li>用于创建或编辑一个实体或收集信息</li>\n<li>需要对输入的数据类型进行校验时</li>\n</ul>\n<h3>概念</h3>\n<ul>\n<li>Form Data:\nForm提交时获取到的输出值通常用来提交给后端,不包含Form的校验信息,只包含Form组件可以向外部提供的数据输出信息。</li>\n<li>Form State:\nForm中用来存储一切状态的值,包含Field信息,校验信息,Form的值(需要一定的转换从才能变成Form Data),表单是否验证通过,表单错误信息等值。</li>\n<li>字段或称Field:\nForm中的一个项,必须拥有参数name,label,可选参数rule。name作为Form提交时获取到data的key值。\nlabel为字段展示给用户的名字以及字段报错时提示用户错误的语句中指代该字段的名字。\nrule为下方介绍的RULE。\n一个Field的取值可以是简单的Number,Boolean,String也可以是复杂的Array,Object等,所以在考虑一些值需要分成多个Field还是集中在一个Field时非常重要的。\n一个通用的规则是:<em><strong>对于Form来说,它的最小校验单元是一个Field</strong></em>。</li>\n<li>Field组件:\nField组件是Field的一部分,可以由用户自己实现也可以由组件库提供,通过Form提供的Field hooks将其变成Field。\nfield hooks主要接管Field组件的value,onChange参数,用来把Field组件的值获取到Form管理。Field组件必须为<em><strong>受控组件</strong></em>。\nfield hooks还会接管triggerValidate,用来获取Field的校验时机。field hooks会向Field组件提供Field的校验状态和校验错误信息。</li>\n<li>RULE:\n用于字段的校验。RULE可以为一个function或者正则表达式,不过推荐以大写字符串调用。\n字符串形式的RULE以空格为间隔可以传入多条规则,如:\"REQ TEL\",\n执行校验时会从左至右依次校验,如果左侧的规则校验失败则不再执行其右侧规则,返回校验失败状态及该规则失败原因提示作为字段校验失败原因。\n字符串RULE允许传入参数,参数以中划线隔开,可传入多个参数,如:\"LEN-3-10\"。\n字符串RULE使用前必须在Form组件中有所声明,Form的RULE声明有3个级别:\n默认级,包含于Form内部,提供了一些基本的校验规则。preset级:在项目的preset中声明,应该把项目中常用的或者是比较复杂的RULE声明集中维护于此。\nForm级:以rules参数传入Form组件,主要是某Form单独使用的RULE。\n如果声明字符相同,会以 Form级&gt;preset级&gt;默认级 进行覆盖。\nRULE声明为一个对象,key和去掉参数的字符串RULE相同,value为一个function称为校验函数。此function接收到的参数有三部分(\nvalue,[...args]\n,{data,{field}}),第一个参数value为当前字段的值,最后一个参数为form的状态,data是form的当前值,field是form里面当前字段的信息,\n中间参数args为字符串参数如:\"LEN-3-10\"会接收到3和20两个参数。校验函数返回{result,errMsg},\n或者一个Promise.resolve({result,errMsg})的Promise对象。result为校验是否通过,errMsg为失败提示,失败提示可以用%s占位,展示时会替换成字段的label。</li>\n<li>校验或称Validate:\nForm会在Field组件执行triggerValidate时执行当前Field的Validate,表单提交时执行所有Field的Validate。\nValidate会串行执行RULE里面的所有规则的校验函数,校验函数返回Promise时也会等待左边的校验函数的Promise完成再执行右边的规则校验函数。\n表单提交时,正在执行异步的校验函数的Field将不会重复执行Validate。表单提交时所有Field的校验状态为通过时才会执行onSubmit方法,否则会执行onError方法,\nonPrevSubmit方法在用户点击提交按钮时就会触发,不管Validate结果是否为通过。</li>\n<li>Event:\nForm采用了事件驱动的方式来设计,用以满足多种异步校验,和给Form提供强大的可扩展性。\nForm的API里面可以获取到的emitter就是Form内部的事件发射器,可以触发Form内部定义的事件,也可以自定义一些事件。同时可以通过emitter.addListener监听事件。\nForm内部定义的事件有:\nform-field-add:Field被添加进Form时触发,\nform-field-edit:Field的参数发生改变时触发,\norm-field-remove:Field被卸载时触发,\nform-field-validate:Field执行Validate时触发,\nform-field-data-change:Field的值发生修改时触发,\nform-data-reset:Form组件重置data时触发,\nform-data-set-field:Form组件给data赋值时触发,\nform-data-set-field-validate:Field被赋值时触发,\nform-validate-all:Form执行全部Field的Validate时触发,一般为表单提交时,\nform-submit:表单提交时触发。</li>\n<li>拦截器或称Interceptor:\n没有Field可以接收一个interceptor参数,字符串类型,和RULE类似可以再preset或者Form的interceptors props中声明以后使用,可以配置多个用空格连接。\n拦截器的作用是,在Field接收到一个新的值时,会串行执行拦截器的output部分,把其返回值输出到Form Data。\n在执行Form Data的赋值操作时把赋值作为输入串行执行拦截器的input部分,把其结果作为Form Data的输入。\n现在有个Field是日期选择,输出Date类型值,但是Form Data输出希望将其格式化为日期字符串,在表单编辑时Form\nData输入格式化后的日期字符串,但是Field只接收Date类型的值,\n以下例子可以来解决此问题:<pre><code class=\"language-jsx\">interceptors.input.use(\"date-string\", (value) =&gt; {\n return value ? new Date(value) : null;\n});\n\ninterceptors.output.use(\"date-string\", (value) =&gt; {\n return value ? dayjs(value).format(\"YYYY-MM-DD\") : \"\";\n});\n\n&lt;Field name=\"date\" label=\"日期\" interceptor=\"date-string\"/&gt;\n</code></pre>\n</li>\n<li>Group:\n当Form的data需要接收到一个复杂值的时候,可以使用Group来实现,如:<pre><code class=\"language-jsx\">&lt;Group name=\"baseInfo\"&gt;\n &lt;Field name=\"name\" label=\"名称\"/&gt;\n &lt;Field name=\"des\" label=\"说明\"/&gt;\n&lt;/Group&gt;\n</code></pre>\nForm的data可以接收到 {baseInfo:{name:\"xxx\",des:\"xxx\"}},Group的name和Field的name一致时也可以用来表示数组如:<pre><code class=\"language-jsx\">&lt;Group name=\"name\"&gt;\n &lt;Field name=\"name\" label=\"名称\"/&gt;\n&lt;/Group&gt;\n&lt;Group name=\"des\"&gt;\n &lt;Field name=\"des\" label=\"说明\"/&gt;\n&lt;/Group&gt;\n</code></pre>\nForm的data可以接收到 {name:[\"name1\",\"name2\"],des:[\"des1\",\"des2\"]}。\nGroup可以嵌套,如<pre><code class=\"language-jsx\">&lt;Group name=\"baseInfo\"&gt;\n &lt;Group name=\"info\"&gt;\n &lt;Field name=\"name\" label=\"名称\"/&gt;\n &lt;/Group&gt;\n &lt;Field name=\"des\" label=\"说明\"/&gt;\n&lt;/Group&gt;\n</code></pre>\nForm的data可以接收到 {baseInfo:{info:{name:'xxx'},des:'xxx'}}。\n支持点操作,如:<pre><code class=\"language-jsx\">&lt;Group name=\"baseInfo.info\"&gt;\n &lt;Field name=\"name\" label=\"名称\"/&gt;\n &lt;Field name=\"des\" label=\"说明\"/&gt;\n&lt;/Group&gt;\n</code></pre>\nForm的data可以接收到 {baseInfo:{info:{name:'xxx',des:'xxx'}}}。</li>\n<li>GroupList:\n使用Group实现的一个特殊的区域用来更方便的实现多段式的表单如:<pre><code class=\"language-jsx\">&lt;Button onClick={()=&gt;ref.current.onAdd()}&gt;添加&lt;/Button&gt;\n&lt;GroupList name=\"edu\" ref={ref}&gt;\n {(key,{index,length,onAdd,onRemore})=&gt;&lt;&gt;\n &lt;Button onClick={onRemore}&gt;删除&lt;/Button&gt;\n &lt;Field name=\"schoolName\" label=\"学校名称\"/&gt;\n &lt;Field name=\"degree\" label=\"学历\"/&gt;\n &lt;Field name=\"des\" label=\"说明\"/&gt;\n &lt;/&gt;}\n&lt;/GroupList&gt;\n</code></pre>\n以上是一个简历的学历列表的实现,可以点击添加按钮添加多段学历Field,可以点击删除按钮删除当前一段学历Field,\nForm的data可以接收到的 {edu:[{schoolName:'xxx',degree:'xxx',des:'xxx'}]}。\n当然你可以不用使用这样底层的API,FormInfo.List 已经帮你处理好一切。</li>\n</ul>\n<h3>特点</h3>\n<ul>\n<li>集中化校验规则管理,分层抽象,调用简便</li>\n<li>支持异步校验规则</li>\n<li>事件驱动式架构设计,便于扩展</li>\n<li>支持Group及GroupList,可轻松实现复杂表单</li>\n<li>UI,校验逻辑分层抽象,一次封装使用简单</li>\n<li>context和ref双重API暴露,在Form内还是Form外都能轻松获取</li>\n<li>form-helper提供基本的表单封装,灵活组合</li>\n<li>支持拦截器,便捷实现FormData和Field的值之间的转换</li>\n</ul>\n<h3>Field实现规范</h3>\n<ul>\n<li>FormInfo里面的Field都会放置在fields文件夹,其中每个文件夹代表一个Field</li>\n<li>一个Field只能默认导出会被引用,其他的方法枚举等需要放置在默认导出的组件的function的静态属性上</li>\n<li>一个Field的默认导出组件只能被放置在Form中作为Field被使用,它的Field组件会被挂载在默认导出的组件的function的Field静态属性上</li>\n<li>一个Field的Field组件必须支持受控和非受控两种形式</li>\n<li>一个Field的导出必须被包含在FormInfo导出的formModule中和FormInfo中,即:以下两种方法都可以获取到该Field<pre><code class=\"language-jsx\">import {SomeField} from \"@component/FormInfo\";\n</code></pre>\n<pre><code class=\"language-jsx\">import {formModule} from \"@component/FormInfo\";\nconst {SomeField} = formModule;\n</code></pre>\n</li>\n</ul>\n<h3>选择器类型Field组件实现规范</h3>\n<ul>\n<li>必须使用SelectInnerInput作为选择器的值显示和触发的输入框</li>\n<li>SelectInnerInput可以通过isPopup提供popup和modal两种展示形态和交互逻辑,Field组件可以通过自身的默认值或者调用SelectInnerInput时显式指定来设置最佳推荐的默认形式,一般情况一种选择器需要良好支持两种形式</li>\n<li>SelectInnerInput可以通过single决定输出值是单项还是多项,单项和多项的交互逻辑也可能不同,SelectInnerInput的内部value state都是使用多项值来处理的,在输入值和在onChange输出时根据参数转化成数组,一般情况一种选择器需要支持两种情况</li>\n<li>选择器可能会在顶部有一个搜索框,通过使用时是否传入getSearchProps来决定搜索框是否显示,在FormInfo/common中提供了默认的SearchInput实现,SelectInnerInput中管理了其searchText和setSearchText状态</li>\n<li>FormInfo/fields/AdvancedSelect/createList.js 实现了一个列表式选择器,实现了包括搜索,下拉加载等逻辑,只需要实现列表渲染逻辑就可以方便的扩展出新的List类型选择器</li>\n<li>通过SelectInnerInput.useContext 可以拿到选择器的用户传入属性(props),值到选项的映射(mapping),搜索框的state(searchText,setSearchText),数据加载器的API(fetchApi)原始value值(valueState),添加映射方法(appendItems)</li>\n</ul>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>data</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>debug</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>rules</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>interceptors</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>noFilter</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>onError</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>onSubmit</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>onPrevSubmit</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n<h3>SelectInnerInput</h3>\n<h3>formModule</h3>\n<h3>FormInfo</h3>\n<h3>preset</h3>\n<h3>List</h3>\n<h3>Form</h3>\n<p>同default导出组件</p>\n<h3>useField</h3>\n<h3>useReset</h3>\n<h3>useSubmit</h3>\n<h3>Group</h3>\n<h3>GroupList</h3>\n<h3>useFormContext</h3>\n<h3>RULES</h3>\n<h3>interceptors</h3>\n<h3>SubmitButton</h3>\n<h3>CancelButton</h3>\n<h3>ResetButton</h3>\n<h3>Field类型:antd组件</h3>\n<p>以下组件请参考antd具体的组件文档此处不再赘述</p>\n<p>Checkbox,CheckboxGroup,DatePicker,Input,InputNumber,RadioGroup,Select,Switch,TextArea,TimePicker,TreeSelect</p>\n<h3>Field类型:@kne/react-form-antd实现组件</h3>\n<p>DatePickerToday</p>\n<h3>Field类型:components-core实现组件</h3>\n<p>AddressSelect</p>\n<p>AdvancedSelect</p>\n<p>Avatar</p>\n<p>Cascader</p>\n<p>FunctionSelect</p>\n<p>IndustrySelect</p>\n<p>Money</p>\n<p>PartSelect</p>\n<p>PhoneNumber</p>\n<p>TableDataSelect</p>\n<p>Upload</p>\n<h3>FormModal</h3>\n<p>一个Form和Modal组合起来的组件,它预置了Form组件,children传入的内容和footer区域均在Form的context内</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>formProps</td>\n<td>同Form组件参数</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>useFormModal</h3>\n<p>获取一个执行后可以弹出一个FormModal组件的方法</p>\n<h4>return:formModal</h4>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>formModal</td>\n<td>执行后可以弹出一个FormModal弹窗,参数同FormModal组件参数</td>\n<td>function</td>\n</tr>\n</tbody>\n</table>\n<h3>FormModalButton</h3>\n<p>点击以后可以执行获取数据,在数据未返回时按钮展示为loading状态,数据返回后弹出FormModal弹窗</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>api</td>\n<td>@kne/react-fetch 所需参数</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>modalProps</td>\n<td>同FormModal参数,当它为function时,执行function后返回的值作为modalProps</td>\n<td>object,function({data,fetchApi,close})</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p>其他参数同antd Button 组件</p>`,\n example: {\n isFull: true,\n className: `FormInfo_f344c`,\n style: `.FormInfo_f344c .input > .ant-row > .ant-col {\n padding: 10px 0;\n}\n.FormInfo_f344c .input .ant-space-item:last-child {\n width: 100%;\n}`,\n list: [{\n title: `一个简单表单示例`,\n description: `展示了一个简单表单示例`,\n code: `const { default: FormInfo, Form, SubmitButton, ErrorTip, fields } = _FormInfo;\nconst { PureGlobal } = global;\nconst { useModal } = _Modal;\nconst { uniqueId } = lodash;\n\nconst {\n Input,\n TextArea,\n Upload,\n Avatar,\n TypeDateRangePicker,\n Rate,\n Switch,\n Slider,\n MoneyInput,\n} = fields;\n\nconst BaseExample = () => {\n const modal = useModal();\n return (\n <Form\n helperGuideName=\"test-from\"\n lang={[\n \"cn\",\n {\n name: \"EnUS\",\n label: \"英文\",\n options: {\n //labelTransform: (label) => label + \"(en)\",\n ignore: [{ name: \"avatar\" }, { name: \"photo\" }],\n disabled: [{ name: \"file\" }], //fields:[{name:'name'}]\n },\n },\n ]}\n rules={{\n REP: (value) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n result: false,\n errMsg: \"%s重复\",\n data: {\n user: \"我是一个重复的东西\",\n },\n });\n }, 1000);\n });\n },\n }}\n onSubmit={(data) => {\n modal({\n title: \"表单提交数据\",\n children: <pre>{JSON.stringify(data, null, 2)}</pre>,\n });\n }}\n >\n <FormInfo\n title=\"基本信息\"\n list={[\n <Avatar name=\"avatar\" label=\"头像\" labelHidden block />,\n <Avatar\n name=\"photo\"\n label=\"证件照\"\n dropModalSize=\"default\"\n border={50}\n width={960}\n height={540}\n block\n />,\n <ErrorTip\n name=\"name\"\n errorRender={({ validateData }) => {\n console.log(validateData);\n if (!validateData.REP) {\n return null;\n }\n return <div>哈哈哈{validateData.REP.user}</div>;\n }}\n >\n <Input\n name=\"name\"\n label=\"姓名\"\n rule=\"REQ LEN-3-10 REP\"\n tips=\"姓名\"\n />\n </ErrorTip>,\n <MoneyInput name=\"money\" label=\"金额\" rule=\"REQ\" tips={\"money\"} />,\n <Input name=\"phone\" label=\"手机\" rule=\"REQ TEL\" />,\n <Input name=\"email\" label=\"邮箱\" rule=\"EMAIL\" />,\n <Upload name=\"file\" label=\"文件\" tips=\"文件\" block />,\n <Rate name=\"rate\" label=\"评分\" tips=\"评分\" />,\n <Switch name=\"switch\" label=\"开关\" tips=\"开关\" />,\n <Slider name=\"slider\" label=\"滑动条\" tips=\"滑动条\" />,\n <TypeDateRangePicker\n name=\"type_date\"\n label=\"日期时间段\"\n tips=\"日期时间段\"\n rule=\"REQ\"\n />,\n <TextArea name=\"des\" label=\"备注\" tips=\"备注\" block />,\n <SubmitButton>提交</SubmitButton>,\n ]}\n />\n </Form>\n );\n};\n\nrender(\n <PureGlobal\n preset={{\n locale: \"en-US\",\n enums: {\n helperGuide: () => [\n {\n value: \"test-from-name\",\n content: \"测试帮助文档\",\n url: \"/\",\n },\n ],\n },\n apis: {\n oss: {\n loader: () => {\n return window.PUBLIC_URL + \"/avatar.png\";\n },\n },\n ossUpload: async ({ file }) => {\n console.log(file);\n return new Promise((resolve) => {\n setTimeout(() => {\n const id = uniqueId(\"file-\");\n resolve({\n data: {\n code: 0,\n data: {\n id,\n originalName: id + \"简历.pdf\",\n },\n },\n });\n }, 1000);\n });\n },\n },\n }}\n >\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Modal\",\n packageName: \"@components/Modal\",\n component: component_48\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_49\n}]\n},{\n title: `多行`,\n description: `展示了一个多行字段示例`,\n code: `const { default: FormInfo, Form, MultiField, SubmitButton, fields } = _FormInfo;\nconst { useModal } = _Modal;\n\nconst { Input, TextArea } = fields;\n\nconst BaseExample = () => {\n const modal = useModal();\n return (\n <Form\n onSubmit={(data) => {\n modal({\n title: \"表单提交数据\",\n children: <pre>{JSON.stringify(data, null, 2)}</pre>,\n });\n }}\n >\n <FormInfo\n list={[\n <MultiField\n name=\"no\"\n label=\"单号\"\n rule=\"REQ\"\n field={Input}\n maxLength={5}\n tips={\"单号\"}\n />,\n <Input name=\"name\" label=\"名称\" />,\n <MultiField name=\"description\" label=\"说明\" field={TextArea} />,\n ]}\n />\n <SubmitButton>提交</SubmitButton>\n </Form>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"_Modal\",\n packageName: \"@components/Modal\",\n component: component_48\n}]\n},{\n title: `一个含有多段列表的表单示例`,\n description: `展示了一个含有多段列表的表单示例,列表的最大长度为5,在添加5段之后添加按钮自动隐藏`,\n code: `const {\n default: FormInfo,\n Form,\n List,\n AdvancedSelect,\n TableList,\n Input,\n TextArea,\n SubmitButton,\n FormApiButton,\n} = _FormInfo;\nconst { PureGlobal } = global;\nconst { useModal } = _Modal;\nconst { Space } = antd;\n\nconst BaseExample = () => {\n const modal = useModal();\n return (\n <Form\n onSubmit={(data) => {\n modal({\n title: \"表单提交数据\",\n children: <pre>{JSON.stringify(data, null, 2)}</pre>,\n });\n }}\n >\n <Space direction=\"vertical\" size={16}>\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"name\" label=\"基本名称\" rule=\"REQ\" block />,\n <TextArea name=\"des\" label=\"基本描述\" block />,\n ]}\n />\n <List\n name=\"list\"\n title=\"列表\"\n itemTitle={({ index }) => \\`经历\\${index + 1}\\`}\n maxLength={5}\n list={[\n <Input name=\"name\" label=\"名称\" rule=\"REQ\" />,\n <Input name=\"title\" label=\"标题\" rule=\"REQ\" />,\n <TextArea name=\"des\" label=\"描述\" block rule=\"REQ\" />,\n ]}\n />\n <TableList\n name=\"tableList\"\n title=\"表格列表\"\n maxLength={5}\n minLength={1}\n list={[\n <Input name=\"name\" label=\"名称\" rule=\"REQ\" value=\"xxxxx\" />,\n <Input name=\"title\" label=\"标题\" rule=\"REQ\" />,\n <AdvancedSelect\n name=\"select\"\n label=\"选项\"\n rule=\"REQ\"\n value={[1]}\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"第一项\",\n value: 1,\n },\n {\n label: \"第二项\",\n value: 2,\n disabled: true,\n },\n {\n label: \"第三项\",\n value: 3,\n },\n ],\n };\n },\n }}\n />,\n ]}\n />\n <List\n name=\"mult-list\"\n important\n title=\"复杂列表\"\n itemTitle={({ index }) => \\`经历\\${index + 1}\\`}\n maxLength={5}\n minLength={1}\n list={[\n <Input name=\"name\" label=\"名称\" rule=\"REQ\" />,\n <Input name=\"title\" label=\"标题\" rule=\"REQ\" />,\n <TextArea name=\"des\" label=\"描述\" block rule=\"REQ\" />,\n <TableList\n block\n isUnshift={false}\n name=\"tableList\"\n title=\"表格列表\"\n maxLength={5}\n minLength={1}\n list={[\n <Input name=\"name\" label=\"名称\" rule=\"REQ\" value=\"xxxxx\" />,\n <Input name=\"title\" label=\"标题\" rule=\"REQ\" />,\n <AdvancedSelect\n name=\"select\"\n label=\"选项\"\n rule=\"REQ\"\n value={[1]}\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"第一项\",\n value: 1,\n },\n {\n label: \"第二项\",\n value: 2,\n disabled: true,\n },\n {\n label: \"第三项\",\n value: 3,\n },\n ],\n };\n },\n }}\n />,\n ]}\n />,\n ]}\n />\n\n <List\n name=\"mult-list-2\"\n important\n title=\"复杂列表2\"\n itemTitle={({ index }) => \\`经历\\${index + 1}\\`}\n maxLength={5}\n minLength={1}\n list={[\n <Input name=\"name\" label=\"名称\" rule=\"REQ\" />,\n <Input name=\"title\" label=\"标题\" rule=\"REQ\" />,\n <TextArea name=\"des\" label=\"描述\" block rule=\"REQ\" />,\n <List\n block\n name=\"tableList\"\n title=\"列表\"\n maxLength={5}\n minLength={1}\n list={[\n <Input name=\"name\" label=\"名称\" rule=\"REQ\" value=\"xxxxx\" />,\n <Input name=\"title\" label=\"标题\" rule=\"REQ\" />,\n <TextArea name=\"des\" label=\"描述\" block rule=\"REQ\" />,\n ]}\n />,\n ]}\n />\n <FormInfo\n list={[\n <SubmitButton>提交</SubmitButton>,\n <FormApiButton\n onClick={({ openApi }) => {\n openApi.setFields(\n [\n {\n groupName: \"tableList\",\n name: \"name\",\n value: \"\",\n },\n {\n groupName: \"tableList\",\n name: \"title\",\n value: \"ssssssss\",\n },\n ],\n { runValidate: false }\n );\n }}\n >\n 设置表单值\n </FormApiButton>,\n ]}\n />\n </Space>\n </Form>\n );\n};\n\nrender(\n <PureGlobal>\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Modal\",\n packageName: \"@components/Modal\",\n component: component_48\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_50\n}]\n},{\n title: `Modal Form弹窗`,\n description: `展示一个form弹窗`,\n code: `const { Space, Button } = antd;\nconst { PureGlobal } = global;\nconst {\n default: FormInfo,\n List,\n Input,\n TextArea,\n FormModal,\n useFormModal,\n CancelButton,\n FormApiButton,\n SubmitButton,\n FormModalButton,\n} = _FormInfo;\nconst { useState } = React;\nconst { default: Fetch } = fetch;\n\nconst BaseExample = () => {\n const [open, setOpen] = useState(false);\n const formModal = useFormModal();\n return (\n <Space wrap>\n <FormModal\n open={open}\n title=\"表单弹窗\"\n onClose={() => {\n setOpen(false);\n }}\n formProps={{\n data: {\n field1: \"field1field1field1field1\",\n },\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n setOpen(false);\n },\n }}\n >\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </FormModal>\n <Button\n onClick={() => {\n setOpen(true);\n }}\n >\n 组件调用\n </Button>\n <Button\n onClick={() => {\n const api = formModal({\n title: \"表单弹窗\",\n formProps: {\n data: {\n field1: \"field1field1field1field1\",\n },\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n api.close();\n },\n },\n children: (\n <div>\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </div>\n ),\n });\n }}\n >\n hooks调用\n </Button>\n <Button\n onClick={() => {\n const api = formModal({\n title: \"表单弹窗\",\n formProps: ({ data }) => {\n return {\n data: data,\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n api.close();\n },\n };\n },\n withDecorator: (render) => (\n <Fetch\n loader={() => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n field1: \"我接口获取的数据\",\n });\n }, 1000);\n });\n }}\n render={({ data }) => render({ data })}\n />\n ),\n children: (\n <div>\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </div>\n ),\n });\n }}\n >\n hooks加载form数据调用\n </Button>\n <Button\n onClick={() => {\n const api = formModal({\n title: \"表单弹窗\",\n footerButtons: [\n { ButtonComponent: CancelButton, children: \"取消\" },\n {\n ButtonComponent: FormApiButton,\n autoClose: false,\n onClick: (context) => {\n console.log(context);\n },\n children: \"FormApiButton\",\n },\n {\n ButtonComponent: SubmitButton,\n autoClose: false,\n children: \"提交\",\n },\n ],\n formProps: {\n data: {\n field1: \"field1field1field1field1\",\n },\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n api.close();\n },\n },\n children: (\n <div>\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </div>\n ),\n });\n }}\n >\n 自定义footerButtons\n </Button>\n <FormModalButton\n api={{\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n name: \"Lucy\",\n desc: \"个人介绍个人介绍个人介绍个人介绍个人介绍个人介绍个人介绍\",\n });\n }, 1000);\n });\n },\n }}\n modalProps={({ data, close }) => {\n return {\n title: \"加载数据的form弹窗\",\n formProps: {\n data,\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n close();\n },\n },\n children: (\n <FormInfo\n title=\"基本信息\"\n column={1}\n list={[\n <Input name=\"name\" label=\"姓名\" rule=\"REQ\" />,\n <TextArea name=\"desc\" label=\"介绍\" rule=\"REQ\" />,\n ]}\n />\n ),\n };\n }}\n >\n 加载form数据按钮\n </FormModalButton>\n </Space>\n );\n};\n\nrender(\n <PureGlobal>\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_50\n},{\n name: \"fetch\",\n packageName: \"@kne/react-fetch\",\n component: component_51\n}]\n},{\n title: `Modal Step Form弹窗`,\n description: `展示一个step form弹窗`,\n code: `const { Space, Button } = antd;\nconst { PureGlobal } = global;\nconst {\n default: FormInfo,\n List,\n Input,\n TextArea,\n FormModal,\n FormStepModal,\n useFormModal,\n useFormStepModal,\n CancelButton,\n FormApiButton,\n SubmitButton,\n FormModalButton,\n} = _FormInfo;\nconst { useState } = React;\nconst { default: Fetch } = fetch;\n\nconst BaseExample = () => {\n const [open, setOpen] = useState(false);\n const formModal = useFormStepModal();\n return (\n <Space wrap>\n <FormStepModal\n open={open}\n title=\"表单弹窗\"\n onClose={() => {\n setOpen(false);\n }}\n formProps={{\n data: {\n field1: \"field1field1field1field1\",\n },\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n setOpen(false);\n },\n }}\n items={[\n {\n name: \"basic\",\n title: \"基本信息\",\n children: (\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n ),\n },\n {\n name: \"list\",\n title: \"列表信息\",\n children: (\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n ),\n },\n ]}\n ></FormStepModal>\n <Button\n onClick={() => {\n setOpen(true);\n }}\n >\n 组件调用\n </Button>\n <Button\n onClick={() => {\n const api = formModal({\n title: \"表单弹窗\",\n formProps: {\n data: {\n field1: \"field1field1field1field1\",\n },\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n api.close();\n },\n },\n children: (\n <div>\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </div>\n ),\n });\n }}\n >\n hooks调用\n </Button>\n <Button\n onClick={() => {\n const api = formModal({\n title: \"表单弹窗\",\n formProps: ({ data }) => {\n return {\n data: data,\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n api.close();\n },\n };\n },\n withDecorator: (render) => (\n <Fetch\n loader={() => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n field1: \"我接口获取的数据\",\n });\n }, 1000);\n });\n }}\n render={({ data }) => render({ data })}\n />\n ),\n children: (\n <div>\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </div>\n ),\n });\n }}\n >\n hooks加载form数据调用\n </Button>\n <Button\n onClick={() => {\n const api = formModal({\n title: \"表单弹窗\",\n footerButtons: [\n { ButtonComponent: CancelButton, children: \"取消\" },\n {\n ButtonComponent: FormApiButton,\n autoClose: false,\n onClick: (context) => {\n console.log(context);\n },\n children: \"FormApiButton\",\n },\n {\n ButtonComponent: SubmitButton,\n autoClose: false,\n children: \"提交\",\n },\n ],\n formProps: {\n data: {\n field1: \"field1field1field1field1\",\n },\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n api.close();\n },\n },\n children: (\n <div>\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </div>\n ),\n });\n }}\n >\n 自定义footerButtons\n </Button>\n <FormModalButton\n api={{\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n name: \"Lucy\",\n desc: \"个人介绍个人介绍个人介绍个人介绍个人介绍个人介绍个人介绍\",\n });\n }, 1000);\n });\n },\n }}\n modalProps={({ data, close }) => {\n return {\n title: \"加载数据的form弹窗\",\n formProps: {\n data,\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n close();\n },\n },\n children: (\n <FormInfo\n title=\"基本信息\"\n column={1}\n list={[\n <Input name=\"name\" label=\"姓名\" rule=\"REQ\" />,\n <TextArea name=\"desc\" label=\"介绍\" rule=\"REQ\" />,\n ]}\n />\n ),\n };\n }}\n >\n 加载form数据按钮\n </FormModalButton>\n </Space>\n );\n};\n\nrender(\n <PureGlobal>\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_50\n},{\n name: \"fetch\",\n packageName: \"@kne/react-fetch\",\n component: component_51\n}]\n},{\n title: `Drawer Form 抽屉弹窗`,\n description: `展示一个form抽屉弹窗`,\n code: `const { Space, Button } = antd;\nconst { PureGlobal } = global;\nconst {\n default: FormInfo,\n List,\n Input,\n TextArea,\n FormDrawer,\n useFormDrawer,\n CancelButton,\n FormApiButton,\n SubmitButton,\n FormDrawerButton,\n} = _FormInfo;\nconst { useState } = React;\nconst { default: Fetch } = fetch;\n\nconst BaseExample = () => {\n const [open, setOpen] = useState(false);\n const formDrawer = useFormDrawer();\n return (\n <Space wrap>\n <FormDrawer\n open={open}\n title=\"表单弹窗\"\n onClose={() => {\n setOpen(false);\n }}\n formProps={{\n data: {\n field1: \"field1field1field1field1\",\n },\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n setOpen(false);\n },\n }}\n >\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </FormDrawer>\n <Button\n onClick={() => {\n setOpen(true);\n }}\n >\n 组件调用\n </Button>\n <Button\n onClick={() => {\n const api = formDrawer({\n title: \"表单弹窗\",\n formProps: {\n data: {\n field1: \"field1field1field1field1\",\n },\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n api.close();\n },\n },\n children: (\n <div>\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </div>\n ),\n });\n }}\n >\n hooks调用\n </Button>\n <Button\n onClick={() => {\n const api = formDrawer({\n title: \"表单弹窗\",\n formProps: ({ data }) => {\n return {\n data: data,\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n api.close();\n },\n };\n },\n withDecorator: (render) => (\n <Fetch\n loader={() => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n field1: \"我接口获取的数据\",\n });\n }, 1000);\n });\n }}\n render={({ data }) => render({ data })}\n />\n ),\n children: (\n <div>\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </div>\n ),\n });\n }}\n >\n hooks加载form数据调用\n </Button>\n <Button\n onClick={() => {\n const api = formDrawer({\n title: \"表单弹窗\",\n footerButtons: [\n { ButtonComponent: CancelButton, children: \"取消\" },\n {\n ButtonComponent: FormApiButton,\n autoClose: false,\n onClick: (context) => {\n console.log(context);\n },\n children: \"FormApiButton\",\n },\n {\n ButtonComponent: SubmitButton,\n autoClose: false,\n children: \"提交\",\n },\n ],\n formProps: {\n data: {\n field1: \"field1field1field1field1\",\n },\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n api.close();\n },\n },\n children: (\n <div>\n <FormInfo\n title=\"基本信息\"\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n <List\n title=\"列表\"\n name=\"list\"\n maxLength={3}\n list={[\n <Input name=\"field1\" label=\"字段1\" rule=\"REQ LEN-0-10\" />,\n <Input name=\"field2\" label=\"字段2\" rule=\"REQ LEN-0-10\" />,\n <TextArea name=\"field3\" label=\"字段3\" />,\n ]}\n />\n </div>\n ),\n });\n }}\n >\n 自定义footerButtons\n </Button>\n <FormDrawerButton\n api={{\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n name: \"Lucy\",\n desc: \"个人介绍个人介绍个人介绍个人介绍个人介绍个人介绍个人介绍\",\n });\n }, 1000);\n });\n },\n }}\n modalProps={({ data, close }) => {\n return {\n title: \"加载数据的form弹窗\",\n formProps: {\n data,\n onSubmit: async (data) => {\n console.log(data);\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n close();\n },\n },\n children: (\n <FormInfo\n title=\"基本信息\"\n column={1}\n list={[\n <Input name=\"name\" label=\"姓名\" rule=\"REQ\" />,\n <TextArea name=\"desc\" label=\"介绍\" rule=\"REQ\" />,\n ]}\n />\n ),\n };\n }}\n >\n 加载form数据按钮\n </FormDrawerButton>\n </Space>\n );\n};\n\nrender(\n <PureGlobal>\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_50\n},{\n name: \"fetch\",\n packageName: \"@kne/react-fetch\",\n component: component_51\n}]\n},{\n title: `选择控件的数据展示框`,\n description: `展示了一个选择控件的数据展示框,它是其他选择器的子组件一般不独立使用,开放该组件是为了方面自定义新的选择控件,但是请谨慎使用`,\n code: `const { SelectInnerInput } = _FormInfo;\nconst { PureGlobal } = global;\nconst { Space, Button, List } = antd;\nconst { default: Content } = _Content;\nconst { useState } = React;\n\nconst ControlledSelectInnerInput = (props) => {\n const [value, setValue] = useState([1, 2, 3]);\n\n return <SelectInnerInput {...props} value={value} onChange={setValue} />;\n};\n\nconst useSelectInnerContext = SelectInnerInput.useContext;\n\nconst ResetMapping = () => {\n const { mapping, appendMapping } = useSelectInnerContext();\n return (\n <span>\n <Button\n onClick={() => {\n appendMapping([\n { label: \"修改的项\", value: 1 },\n { label: \"新增的项\", value: 4 },\n ]);\n }}\n >\n 点击设置mapping值\n </Button>\n <List\n dataSource={mapping.values()}\n renderItem={(item) => <div>{item.label}</div>}\n />\n </span>\n );\n};\n\nconst BaseExample = () => {\n const children = \"选区内容\";\n return (\n <Content\n col={2}\n list={[\n {\n label: \"非受控状态\",\n content: (\n <SelectInnerInput\n defaultValue={[1, 2, 3]}\n onChange={(value) => {\n console.log(value);\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"受控状态\",\n content: (\n <ControlledSelectInnerInput>{children}</ControlledSelectInnerInput>\n ),\n },\n {\n label: \"mapping值显示\",\n content: (\n <SelectInnerInput\n defaultValue={[1, 2, 3]}\n api={{\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n {\n label: \"第三项\",\n value: 3,\n },\n ]);\n }, 1000);\n });\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"单项值显示\",\n content: (\n <SelectInnerInput\n single\n defaultValue={1}\n api={{\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n {\n label: \"第三项\",\n value: 3,\n },\n ]);\n }, 1000);\n });\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"多项超出情况\",\n content: (\n <SelectInnerInput\n defaultValue={[1, 2, 3, 4, 5, 6, 7, 8, 9]}\n api={{\n loader: () => {\n return [\n {\n label:\n \"第一项超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 1,\n },\n {\n label:\n \"第二项超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 2,\n },\n {\n label: \"第三项\",\n value: 3,\n },\n {\n label:\n \"第四项超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 4,\n },\n {\n label:\n \"第五项超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 5,\n },\n {\n label:\n \"第六项超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 6,\n },\n {\n label:\n \"第七项超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 7,\n },\n { label: \"第八项\", value: 8 },\n { label: \"第九项\", value: 9 },\n ];\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"单项超出情况\",\n content: (\n <SelectInnerInput\n defaultValue={1}\n single\n api={{\n loader: () => {\n return [\n {\n label:\n \"第一项超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 1,\n },\n {\n label:\n \"第二项超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 2,\n },\n {\n label: \"第三项\",\n value: 3,\n },\n {\n label:\n \"第四项超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 4,\n },\n {\n label:\n \"第五项超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 5,\n },\n {\n label:\n \"第六项超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 6,\n },\n {\n label:\n \"第七项超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 7,\n },\n { label: \"第八项\", value: 8 },\n { label: \"第九项\", value: 9 },\n ];\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"popup多项超出情况\",\n content: (\n <SelectInnerInput\n isPopup\n defaultValue={[1, 2, 3, 4, 5, 6, 7, 8]}\n api={{\n loader: () => {\n return [\n {\n label:\n \"第一项超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 1,\n },\n {\n label:\n \"第二项超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 2,\n },\n {\n label: \"第三项\",\n value: 3,\n },\n {\n label:\n \"第四项超级长超级长超级长超级长超级长超级长超级长超级长\",\n value: 4,\n },\n {\n label: \"第五项\",\n value: 5,\n },\n {\n label: \"第六项\",\n value: 6,\n },\n { label: \"第七项\", value: 7 },\n { label: \"第八项\", value: 8 },\n ];\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"popup选区\",\n content: (\n <SelectInnerInput\n single\n isPopup\n defaultValue={1}\n api={{\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n {\n label: \"第三项\",\n value: 3,\n },\n ]);\n }, 1000);\n });\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"更新mapping\",\n content: (\n <SelectInnerInput\n single\n isPopup\n defaultValue={1}\n api={{\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n {\n label: \"第三项\",\n value: 3,\n },\n ]);\n }, 1000);\n });\n },\n }}\n >\n <ResetMapping />\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"隐藏已选标签\",\n content: (\n <SelectInnerInput\n showSelectedTag={false}\n defaultValue={[1, 2, 3]}\n api={{\n loader: () => {\n return [\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n { label: \"第三项\", value: 3 },\n ];\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"popup隐藏已选标签\",\n content: (\n <SelectInnerInput\n isPopup\n showSelectedTag={false}\n defaultValue={[1, 2, 3]}\n api={{\n loader: () => {\n return [\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n { label: \"第三项\", value: 3 },\n ];\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"extra\",\n content: (\n <SelectInnerInput\n extra={<Button>添加</Button>}\n defaultValue={[1, 2, 3]}\n api={{\n loader: () => {\n return [\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n { label: \"第三项\", value: 3 },\n ];\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"popup的extra\",\n content: (\n <SelectInnerInput\n isPopup\n extra={({ close }) => <Button onClick={close}>添加</Button>}\n defaultValue={[1, 2, 3]}\n api={{\n loader: () => {\n return [\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n { label: \"第三项\", value: 3 },\n ];\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n {\n label: \"valueType为all\",\n content: (\n <SelectInnerInput\n isPopup\n valueType=\"all\"\n defaultValue={[\n { label: \"额外的一项\", value: 100 },\n { label: \"额外的二项\", value: 200 },\n ]}\n api={{\n loader: () => {\n return [\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n { label: \"第三项\", value: 3 },\n ];\n },\n }}\n >\n {children}\n </SelectInnerInput>\n ),\n },\n ]}\n />\n );\n};\n\nrender(\n <PureGlobal>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_50\n}]\n},{\n title: `高级选择组件`,\n description: `展示了高级选择组件的List形态`,\n code: `const { AdvancedSelect: _AdvancedSelect, SelectInnerInput } = _FormInfo;\nconst { PureGlobal } = global;\nconst { Space, Button } = antd;\nconst { default: Content } = _Content;\nconst { range, uniqueId } = lodash;\n\nconst AdvancedSelect = _AdvancedSelect.Field;\n\nconst useSelectInnerContext = SelectInnerInput.useContext;\n\nconst AddExtraButton = () => {\n const { appendItems, fetchApi } = useSelectInnerContext();\n\n return (\n <Button\n type=\"link\"\n onClick={() => {\n const id = uniqueId(\"new_item_\");\n appendItems({\n pageData: [\n {\n label: \"添加的新项目_\" + id,\n value: id,\n },\n ...fetchApi.data.pageData,\n ],\n totalCount: fetchApi.data.totalCount,\n });\n }}\n >\n 添加\n </Button>\n );\n};\n\nconst BaseExample = () => {\n return (\n <Content\n col={2}\n list={[\n {\n label: \"多选\",\n content: (\n <AdvancedSelect\n defaultValue={[1]}\n api={{\n loader: () => {\n return {\n pageData: [\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2, disabled: true },\n {\n label: \"第三项\",\n value: 3,\n },\n ],\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"单选\",\n content: (\n <AdvancedSelect\n single\n defaultValue={1}\n api={{\n loader: () => {\n return {\n pageData: range(0, 100).map((key) => {\n return {\n label: \\`第\\${key + 1}项\\`,\n value: key + 1,\n disabled: key === 2,\n };\n }),\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"多选modal\",\n content: (\n <AdvancedSelect\n defaultValue={[1]}\n isPopup={false}\n api={{\n loader: () => {\n return {\n pageData: [\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n {\n label: \"第三项\",\n value: 3,\n },\n ],\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"单选modal\",\n content: (\n <AdvancedSelect\n single\n defaultValue={1}\n isPopup={false}\n api={{\n loader: () => {\n return {\n pageData: [\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2 },\n {\n label: \"第三项\",\n value: 3,\n },\n ],\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"描述信息\",\n content: (\n <AdvancedSelect\n single\n defaultValue={1}\n api={{\n loader: () => {\n return {\n pageData: [\n { label: \"第一项\", value: 1, description: \"描述信息\" },\n {\n label: \"第二项\",\n value: 2,\n description: \"描述信息\",\n },\n {\n label: \"第三项\",\n value: 3,\n description: \"描述信息\",\n },\n ],\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"分页加载数据\",\n content: (\n <AdvancedSelect\n single\n defaultValue={90}\n getSearchProps={(text) => {\n return {\n data: { keyword: text },\n };\n }}\n displayItems={[{ label: \"第九十项\", value: 90 }]}\n extra={<AddExtraButton />}\n api={{\n loader: ({ data }) => {\n const params = Object.assign(\n {\n perPage: 20,\n currentPage: 1,\n },\n data\n );\n return new Promise((resolve) => {\n setTimeout(() => {\n const start = (params.currentPage - 1) * params.perPage;\n resolve({\n totalCount: 100,\n pageData: range(start, start + 20)\n .map((key) => {\n return {\n label: \\`第\\${key + 1}项\\`,\n value: key + 1,\n };\n })\n .filter(({ label }) => {\n return params.keyword\n ? label.indexOf(params.keyword) > -1\n : true;\n }),\n });\n }, 1000);\n });\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"modal分页加载数据\",\n content: (\n <AdvancedSelect\n defaultValue={[90]}\n isPopup={false}\n extra={<AddExtraButton />}\n getSearchProps={(text) => {\n return {\n data: { keyword: text },\n };\n }}\n displayItems={[{ label: \"第九十项\", value: 90 }]}\n api={{\n data: {\n perPage: 10,\n },\n loader: ({ data }) => {\n const params = Object.assign(\n {\n perPage: 20,\n currentPage: 1,\n },\n data\n );\n return new Promise((resolve) => {\n setTimeout(() => {\n const start = (params.currentPage - 1) * params.perPage;\n resolve({\n totalCount: 100,\n pageData: range(start, start + params.perPage)\n .map((key) => {\n return {\n label: \\`第\\${key + 1}项\\`,\n value: key + 1,\n };\n })\n .filter(({ label }) => {\n return params.keyword\n ? label.indexOf(params.keyword) > -1\n : true;\n }),\n });\n }, 1000);\n });\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n ]}\n />\n );\n};\n\nrender(\n <PureGlobal>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_50\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_49\n}]\n},{\n title: `用户选择组件`,\n description: `在List的交互逻辑基础上扩展出的不同列表样式`,\n code: `const { AdvancedSelect: _AdvancedSelect } = _FormInfo;\nconst { PureGlobal } = global;\nconst { Space, Button } = antd;\nconst { default: Content } = _Content;\nconst { range, uniqueId } = lodash;\n\nconst UserSelect = _AdvancedSelect.User.Field;\n\nconst BaseExample = () => {\n return (\n <Content\n col={2}\n list={[\n {\n label: \"多选\",\n content: (\n <UserSelect\n defaultValue={[1]}\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n value: 1,\n description: \"我是用户描述\",\n },\n {\n label: \"用户二\",\n value: 2,\n description: \"我是用户描述\",\n },\n {\n label: \"用户三\",\n value: 3,\n description: \"我是用户描述\",\n },\n ],\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"单选\",\n content: (\n <UserSelect\n single\n defaultValue={1}\n api={{\n loader: () => {\n return {\n pageData: range(0, 30).map((key) => {\n return {\n label: \\`用户\\${key + 1}\\`,\n description: \"我是用户描述\",\n value: key + 1,\n };\n }),\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"多选modal\",\n content: (\n <UserSelect\n defaultValue={[1]}\n isPopup={false}\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n value: 1,\n description: \"我是用户描述\",\n },\n {\n label: \"用户二\",\n value: 2,\n description: \"我是用户描述\",\n },\n {\n label: \"用户三\",\n value: 3,\n description: \"我是用户描述\",\n },\n ],\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"单选modal\",\n content: (\n <UserSelect\n single\n defaultValue={1}\n isPopup={false}\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n value: 1,\n description: \"我是用户描述\",\n },\n {\n label: \"用户二\",\n value: 2,\n description: \"我是用户描述\",\n },\n {\n label: \"用户三\",\n value: 3,\n description: \"我是用户描述\",\n },\n ],\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n ]}\n />\n );\n};\n\nrender(\n <PureGlobal>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_50\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_49\n}]\n},{\n title: `表格选择组件`,\n description: `在List的交互逻辑基础上扩展出的不同列表样式`,\n code: `const { AdvancedSelect: _AdvancedSelect } = _FormInfo;\nconst { PureGlobal } = global;\nconst { Space, Button } = antd;\nconst { default: Content } = _Content;\nconst { range, uniqueId } = lodash;\n\nconst TableSelect = _AdvancedSelect.Table.Field;\n\nconst BaseExample = () => {\n return (\n <Content\n col={2}\n list={[\n {\n label: \"多选\",\n content: (\n <TableSelect\n defaultValue={[1]}\n getSearchProps={(text) => {\n return {\n data: { keyword: text },\n };\n }}\n api={{\n data: {\n perPage: 10,\n },\n loader: ({ data }) => {\n const params = Object.assign(\n {\n perPage: 20,\n currentPage: 1,\n },\n data\n );\n return new Promise((resolve) => {\n setTimeout(() => {\n const start = (params.currentPage - 1) * params.perPage;\n resolve({\n totalCount: 100,\n pageData: range(start, start + params.perPage)\n .map((key) => {\n return {\n label: \\`员工\\${key + 1}\\`,\n company: \"北京科技有限公司\",\n department: \"技术部\",\n value: key + 1,\n };\n })\n .filter(({ label }) => {\n return params.keyword\n ? label.indexOf(params.keyword) > -1\n : true;\n }),\n });\n }, 1000);\n });\n },\n }}\n columns={[\n {\n title: \"姓名\",\n dataIndex: \"label\",\n },\n {\n title: \"所属公司\",\n dataIndex: \"company\",\n },\n {\n title: \"所属部门\",\n dataIndex: \"department\",\n },\n ]}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"单选\",\n content: (\n <TableSelect\n single\n defaultValue={1}\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n company: \"北京科技有限公司\",\n department: \"财务部\",\n value: 1,\n },\n {\n label: \"用户二\",\n company: \"北京科技有限公司\",\n department: \"技术部\",\n value: 2,\n },\n {\n label: \"用户三\",\n company: \"北京科技有限公司\",\n department: \"商务部\",\n value: 3,\n },\n ],\n };\n },\n }}\n columns={[\n {\n title: \"姓名\",\n dataIndex: \"label\",\n },\n {\n title: \"所属公司\",\n dataIndex: \"company\",\n },\n {\n title: \"所属部门\",\n dataIndex: \"department\",\n },\n ]}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"多选modal\",\n content: (\n <TableSelect\n defaultValue={[1]}\n isPopup={false}\n getSearchProps={(text) => {\n return {\n data: { keyword: text },\n };\n }}\n api={{\n data: {\n perPage: 10,\n },\n loader: ({ data }) => {\n const params = Object.assign(\n {\n perPage: 20,\n currentPage: 1,\n },\n data\n );\n return new Promise((resolve) => {\n setTimeout(() => {\n const start = (params.currentPage - 1) * params.perPage;\n resolve({\n totalCount: 100,\n pageData: range(start, start + params.perPage)\n .map((key) => {\n return {\n label: \\`员工\\${key + 1}\\`,\n company: \"北京科技有限公司\",\n department: \"技术部\",\n value: key + 1,\n };\n })\n .filter(({ label }) => {\n return params.keyword\n ? label.indexOf(params.keyword) > -1\n : true;\n }),\n });\n }, 1000);\n });\n },\n }}\n columns={[\n {\n title: \"姓名\",\n dataIndex: \"label\",\n },\n {\n title: \"所属公司\",\n dataIndex: \"company\",\n },\n {\n title: \"所属部门\",\n dataIndex: \"department\",\n },\n ]}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"单选modal\",\n content: (\n <TableSelect\n single\n isPopup={false}\n defaultValue={1}\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n company: \"北京科技有限公司\",\n department: \"财务部\",\n value: 1,\n },\n {\n label: \"用户二\",\n company: \"北京科技有限公司\",\n department: \"技术部\",\n value: 2,\n },\n {\n label: \"用户三\",\n company: \"北京科技有限公司\",\n department: \"商务部\",\n value: 3,\n },\n ],\n };\n },\n }}\n columns={[\n {\n title: \"姓名\",\n dataIndex: \"label\",\n },\n {\n title: \"所属公司\",\n dataIndex: \"company\",\n },\n {\n title: \"所属部门\",\n dataIndex: \"department\",\n },\n ]}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n ]}\n />\n );\n};\n\nrender(\n <PureGlobal>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_50\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_49\n}]\n},{\n title: `地址选择组件`,\n description: `展示地址选择组件`,\n code: `const { AddressSelect: _AddressSelect, AddressInput: _AddressInput } =\n _FormInfo;\nconst { PureGlobal } = global;\nconst { Space, Button } = antd;\nconst { default: Content } = _Content;\nconst { range, uniqueId } = lodash;\n\nconst AddressSelect = _AddressSelect.Field;\nconst AddressEnum = _AddressSelect.AddressEnum;\nconst AddressInput = _AddressInput.Field;\n\nconst BaseExample = () => {\n return (\n <Content\n col={2}\n list={[\n {\n label: \"多选\",\n content: (\n <AddressSelect\n maxLength={3}\n defaultValue={[\"110\"]}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"单选\",\n content: (\n <AddressSelect\n single\n defaultValue={\"110\"}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"modal多选\",\n content: (\n <AddressSelect\n maxLength={3}\n isPopup={false}\n defaultValue={[\"110\"]}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"modal单选\",\n content: (\n <AddressSelect\n isPopup={false}\n single\n defaultValue={\"110\"}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"valueType为all\",\n content: (\n <AddressSelect\n valueType=\"all\"\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"地址显示\",\n content: <AddressEnum name=\"270070\" />,\n },\n {\n label: \"显示父级\",\n content: <AddressEnum name=\"270070\" displayParent />,\n },\n {\n label: \"地址输入\",\n content: (\n <AddressInput\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n ]}\n />\n );\n};\n\nrender(\n <PureGlobal preset={{ locale: \"en-US\" }}>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_50\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_49\n}]\n},{\n title: `级联选择组件`,\n description: `展示级联选择组件`,\n code: `const { Cascader: _Cascader } = _FormInfo;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\n\nconst { range, get } = lodash;\n\nconst Cascader = _Cascader.Field;\n\nconst BaseExample = () => {\n return (\n <Content\n col={2}\n list={[\n {\n label: \"一次性获取数据\",\n content: (\n <Cascader\n onlyAllowLastLevel\n single\n api={{\n loader: async () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n {\n id: \"client\",\n value: \"client\",\n type: \"module\",\n name: \"客户\",\n label: \"客户\",\n children: [\n {\n id: \"client-list\",\n value: \"client-list\",\n type: \"feature\",\n name: \"客户列表页\",\n label: \"客户列表页\",\n },\n {\n id: \"client-detail\",\n value: \"client-detail\",\n type: \"module\",\n name: \"客户详情页\",\n label: \"客户详情页\",\n children: [\n {\n id: \"contract\",\n value: \"contract\",\n type: \"module\",\n name: \"合同信息\",\n label: \"合同信息\",\n },\n ],\n },\n {\n id: \"client-form\",\n value: \"client-form\",\n type: \"feature\",\n name: \"客户表单\",\n label: \"客户表单\",\n children: [\n {\n id: \"taxpayerIdNumber\",\n value: \"taxpayerIdNumber\",\n type: \"feature\",\n name: \"税号\",\n label: \"税号\",\n },\n ],\n },\n ],\n },\n {\n id: \"position\",\n value: \"position\",\n type: \"module\",\n name: \"职位\",\n label: \"职位\",\n children: [\n {\n id: \"position-list\",\n value: \"position-list\",\n type: \"feature\",\n name: \"职位列表页\",\n label: \"职位列表页\",\n },\n {\n id: \"position-detail\",\n value: \"position-detail\",\n type: \"module\",\n name: \"职位详情页\",\n label: \"职位详情页\",\n },\n {\n id: \"position-form\",\n value: \"position-form\",\n type: \"feature\",\n name: \"职位表单\",\n label: \"职位表单\",\n children: [\n {\n id: \"industry\",\n value: \"industry\",\n type: \"feature\",\n name: \"行业\",\n label: \"行业\",\n },\n ],\n },\n ],\n },\n ]);\n }, 1000);\n });\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"分层加载数据\",\n content: (\n <Cascader\n openLoadData\n onSearch={async (searchText) => {\n return range(0, 20).map((key) => {\n const parentId = \"2\";\n return {\n id: \\`\\${parentId ? \\`\\${parentId}-\\` : \"\"}\\${key + 1}\\`,\n label: \\`节点-\\${searchText}-\\${\n parentId ? \\`\\${parentId}-\\` : \"\"\n }\\${key + 1}\\`,\n parentId,\n };\n });\n }}\n api={{\n loader: async ({ data }) => {\n const parentId = get(data, \"id\", \"\");\n const level = parentId.split(\"-\").length;\n console.log(\"loadData\", parentId, level);\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(\n range(0, 20).map((key) => {\n return Object.assign(\n {\n id: \\`\\${parentId ? \\`\\${parentId}-\\` : \"\"}\\${key + 1}\\`,\n label: \\`节点-\\${parentId ? \\`\\${parentId}-\\` : \"\"}\\${\n key + 1\n }\\`,\n parentId,\n },\n level >= 3 ? { children: null } : {}\n );\n })\n );\n }, 1000);\n });\n },\n }}\n />\n ),\n },\n {\n label: \"modal分层加载数据\",\n content: (\n <Cascader\n openLoadData\n isPopup={false}\n api={{\n loader: async ({ data }) => {\n const parentId = get(data, \"id\", \"\");\n const level = parentId.split(\"-\").length;\n console.log(\"loadData\", parentId, level);\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(\n range(0, 20).map((key) => {\n return Object.assign(\n {\n id: \\`\\${parentId ? \\`\\${parentId}-\\` : \"\"}\\${key + 1}\\`,\n label: \\`节点-\\${parentId ? \\`\\${parentId}-\\` : \"\"}\\${\n key + 1\n }\\`,\n parentId,\n },\n level >= 3 ? { children: null } : {}\n );\n })\n );\n }, 1000);\n });\n },\n }}\n />\n ),\n },\n ]}\n />\n );\n};\n\nrender(\n <PureGlobal>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_49\n}]\n},{\n title: `职能选择`,\n description: `展示行业职能选择`,\n code: `const { FunctionSelect: _FunctionSelect } = _FormInfo;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\n\nconst { range, get } = lodash;\n\nconst FunctionSelect = _FunctionSelect.Field;\n\nconst BaseExample = () => {\n return (\n <Content\n col={2}\n list={[\n {\n label: \"职能选择\",\n content: (\n <FunctionSelect\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"modal职能选择\",\n content: (\n <FunctionSelect\n isPopup={false}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"职能选择无搜索\",\n content: (\n <FunctionSelect\n search={null}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"职能枚举显示\",\n content: <FunctionSelect.Enum name=\"001\" />,\n },\n ]}\n />\n );\n};\n\nrender(\n <PureGlobal preset={{ locale: \"en-US\" }}>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_49\n}]\n},{\n title: `行业选择`,\n description: `展示行业选择组件`,\n code: `const { IndustrySelect: _IndustrySelect } = _FormInfo;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\n\nconst { range, get } = lodash;\n\nconst IndustrySelect = _IndustrySelect.Field;\n\nconst BaseExample = () => {\n return (\n <Content\n col={2}\n list={[\n {\n label: \"行业选择\",\n content: (\n <IndustrySelect\n defaultValue={[\"001\"]}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"modal行业选择\",\n content: (\n <IndustrySelect\n isPopup={false}\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n {\n label: \"职能枚举显示\",\n content: <IndustrySelect.Enum name=\"004\" />,\n },\n ]}\n />\n );\n};\n\nrender(\n <PureGlobal preset={{ locale: \"en-US\" }}>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_49\n}]\n},{\n title: `金额输入`,\n description: `展示金额输入组件`,\n code: `const { MoneyInput: _MoneyInput } = _FormInfo;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\n\nconst MoneyInput = _MoneyInput.Field;\n\nconst BaseExample = () => {\n return (\n <Content\n col={2}\n list={[\n {\n label: \"金额输入\",\n content: <MoneyInput />,\n },\n ]}\n />\n );\n};\n\nrender(\n <PureGlobal>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n}]\n},{\n title: `电话号码输入`,\n description: `展示电话号码输入组件`,\n code: `const { PhoneNumber: _PhoneNumber } = _FormInfo;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\n\nconst PhoneNumber = _PhoneNumber.Field;\n\nconst BaseExample = () => {\n return (\n <Content\n col={2}\n list={[\n {\n label: \"电话输入\",\n content: (\n <PhoneNumber\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n ]}\n />\n );\n};\n\nrender(\n <PureGlobal>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n}]\n},{\n title: `薪资组件`,\n description: `展示填写薪资范围输入组件`,\n code: `const { SalaryInput, Form } = _FormInfo;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\n\nconst SalaryInputField = SalaryInput.Field;\n\nconst BaseExample = () => {\n return (\n <div>\n <Content\n col={1}\n list={[\n {\n label: \"薪资范围\",\n content: (\n <SalaryInputField\n onChange={(value) => {\n console.log(value);\n }}\n />\n ),\n },\n ]}\n />\n <Form\n rules={{\n SALARYRANGE: ({ min, max, type }) => {\n if (type !== 1) {\n if (!min || !max) {\n return {\n result: false,\n errMsg: \\`\\${!min ? \"最低薪资\" : \"最高薪资\"}不能为空\\`,\n };\n }\n if (min > max) {\n return {\n result: false,\n errMsg: \"最高薪资应大于最低薪资\",\n };\n }\n }\n return {\n result: true,\n errMsg: \"\",\n };\n },\n }}\n data={{ salaryRange: { type: 5, month: 12 } }}\n >\n <SalaryInput\n name=\"salaryRange\"\n label=\"薪资范围\"\n rule=\"REQ SALARYRANGE\"\n showMonth\n remindUnit\n />\n </Form>\n </div>\n );\n};\n\nrender(\n <PureGlobal>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n}]\n},{\n title: `可编辑的表格表单`,\n description: `可编辑的表格表单`,\n code: `const { TableInput, Form, Input, SubmitButton } = _FormInfo;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\n\nconst BaseExample = () => {\n return (\n <div>\n <Form\n data={{\n tableInput: {\n 1: { otherCode: \"111\" },\n 2: { otherCode: \"222\" },\n },\n }}\n onSubmit={(formData) => {\n console.log(formData);\n }}\n >\n <TableInput\n controllerOpen={false}\n name=\"tableInput\"\n label=\"表格表单\"\n columns={[\n {\n title: \"系统字段\",\n dataIndex: \"systemCode\",\n key: \"systemCode\",\n width: 200,\n },\n {\n title: \"对应的字段\",\n dataIndex: \"otherCode\",\n key: \"otherCode\",\n editable: (text, record, index) => index !== 0,\n field: {\n type: Input,\n rule: \"REQ\",\n getValue: (e) => e.target.value,\n },\n },\n ]}\n api={{\n loader: () => {\n return {\n pageData: [\n {\n id: 1,\n systemCode: \"流水号\",\n },\n {\n id: 2,\n systemCode: \"流水号2\",\n },\n ],\n };\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n />\n <SubmitButton>提交</SubmitButton>\n </Form>\n </div>\n );\n};\n\nrender(\n <PureGlobal>\n <div className=\"input\">\n <BaseExample />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_52\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_50\n}]\n},{\n title: `可扩展的AdvanceSelect`,\n description: `AdvanceSelect支持左右布局`,\n code: `const { AdvancedSelect } = _FormInfo;\nconst { PureGlobal } = global;\nconst { default: Icon } = icon;\nconst { useState } = React;\nconst { range, merge, get } = _lodash;\nconst dayjs = _dayjs;\nconst { Col } = _antd;\n\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n ajax: () => {\n return Promise.resolve({ data: { code: 0, data: [] } });\n },\n }}\n >\n <AdvancedSelect.Field\n getSearchProps={(text) => {\n return {\n data: { keyword: text },\n };\n }}\n displayItems={[{ label: \"第九十项\", value: 90 }]}\n api={{\n loader: ({ data }) => {\n const params = Object.assign(\n {\n perPage: 20,\n currentPage: 1,\n },\n data\n );\n return new Promise((resolve) => {\n setTimeout(() => {\n const start = (params.currentPage - 1) * params.perPage;\n resolve({\n totalCount: 100,\n pageData: range(start, start + 20)\n .map((key) => {\n return {\n label: \\`第\\${key + 1}项\\`,\n value: key + 1,\n };\n })\n .filter(({ label }) => {\n return params.keyword\n ? label.indexOf(params.keyword) > -1\n : true;\n }),\n });\n }, 1000);\n });\n },\n }}\n onChange={(value) => {\n console.log(value);\n }}\n single\n isPopup={false}\n label={\"面试官\"}\n placeholder={\"选择面试官\"}\n modalSize={\"large\"}\n wrapClassName={\"calendar-modal\"}\n selectIcon={\n <div>\n <Icon type={\"icon-gouxuan\"} />\n </div>\n }\n leftSpan={6}\n right={() => (\n <Col flex={1}>\n <div>我是header</div>\n <div>我是body</div>\n </Col>\n )}\n leftBottom={() => <div>我是leftBottom</div>}\n />\n </PureGlobal>\n );\n};\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_46\n},{\n name: \"icon\",\n packageName: \"@components/Icon\",\n component: component_53\n},{\n name: \"_antd\",\n packageName: \"antd\",\n component: component_50\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_47\n},{\n name: \"_lodash\",\n packageName: \"lodash\",\n component: component_49\n},{\n name: \"_dayjs\",\n packageName: \"dayjs\",\n component: component_54\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_55 from '@components/Global';\nimport * as component_56 from 'antd';\nimport * as component_57 from '@components/Icon';\nconst readmeConfig = {\n name: `Global`,\n summary: `<h3>何时使用</h3>\n<p>在使用components-core的任何组件的业务系统,需要将该组件放置于最外层,并且按照要求正确设置preset。</p>\n<p>以下是components-core组件系统中需要设置的preset值,及使用这些值的组件</p>\n<table>\n<thead>\n<tr>\n<th>名称</th>\n<th>说明</th>\n<th>类型</th>\n<th>使用组件</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>permissions</td>\n<td>配置功能权限列表,Permissions根据该列表里面是否存在某权限名称判断用户是否具有该功能权限,来控制对应操作行为</td>\n<td>array</td>\n<td>Permissions</td>\n</tr>\n<tr>\n<td>ajax</td>\n<td>用于发送ajax请求的方法,一般情况下其应该是一个axios对象</td>\n<td>object</td>\n<td>Image</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>用于和后端进行一些交互行为的接口集合</td>\n<td>object</td>\n<td>Image</td>\n</tr>\n<tr>\n<td>apis.oss</td>\n<td>用于通过一个ossId向后端oss服务获取一个可以访问到指定文件的url</td>\n<td>object</td>\n<td>Image</td>\n</tr>\n<tr>\n<td>apis.ossUpload</td>\n<td>用于向oss服务上传一个文件</td>\n<td>object</td>\n<td>FormInfo.Upload,FormInfo.Avatar</td>\n</tr>\n<tr>\n<td>features</td>\n<td>用于配置系统的特性参数</td>\n<td>object</td>\n<td>Features</td>\n</tr>\n<tr>\n<td>features.profile</td>\n<td>系统的特性列表参考组件Features</td>\n<td>object</td>\n<td>Features</td>\n</tr>\n<tr>\n<td>features.debug</td>\n<td>特性的调试模式,可以在控制台打印Features的id和状态</td>\n<td>boolean</td>\n<td>Features</td>\n</tr>\n<tr>\n<td>enums</td>\n<td>公共枚举值,详情参看Enum组件</td>\n<td>object</td>\n<td>Enum</td>\n</tr>\n<tr>\n<td>enums.helperGuide</td>\n<td>帮助文档枚举配置</td>\n<td>function</td>\n<td>HelperGuide</td>\n</tr>\n<tr>\n<td>formInfo</td>\n<td>表单配置</td>\n<td>object</td>\n<td>FormInfo.formModule</td>\n</tr>\n<tr>\n<td>formInfo.rules</td>\n<td>表单规则配置</td>\n<td>object</td>\n<td>FormInfo.formModule</td>\n</tr>\n</tbody>\n</table>\n<p>全局context管理设置及默认样式</p>\n<ul>\n<li>请将全局覆盖性的样式放在此组件中</li>\n<li>请将字体文件的引用放在此组件中</li>\n<li>请将antd的覆盖性样式放在此组件中</li>\n<li>该组件需要放置在应用根位置</li>\n</ul>\n<p>更新字体文件:</p>\n<ul>\n<li>将iconfont上下载的字体包解压后放在public文件夹下面</li>\n<li>更新src/common/params.js 中的变量 iconfontBase</li>\n<li>修改后构建该项目发布到对应环境</li>\n</ul>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>preset</td>\n<td>全局预设参数,可以通过usePreset获取,由业务系统设置</td>\n<td>object</td>\n<td>{}</td>\n</tr>\n<tr>\n<td>themeToken</td>\n<td>设置主题,参看antd的themeToken,一般只需要设置{colorPrimary}</td>\n<td>object</td>\n<td>{}</td>\n</tr>\n<tr>\n<td>init</td>\n<td>初始化方法,在系统首次加载时执行,可以返回Promise。用来放置系统显示之前的异步操作</td>\n<td>function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>PureGlobal</h3>\n<p>api同Global,但是少了页面错误捕获和className:container-body带来的默认最小宽度等样式设置,主要用在组件库的演示环境和弹窗中</p>\n<h3>usePreset</h3>\n<p>获取预设的preset,已经确定为系统需要使用的key值:permissions,apis,formOptions,modalOptions</p>\n<h3>useGlobalContext</h3>\n<p>获取和设置全局状态,该状态保存在Global组件一级,不会随着内部组件本身的销毁而销毁。\n主要给组件内部使用,业务应该避免使用该api设置新的global变量。业务如果有需要应当自行在顶级组件中设置context。</p>\n<h4>params:useGlobalContext(globalKey)</h4>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>globalKey</td>\n<td>全局参数的key,当存在globalKey时,默认获取和设置都是global[key],当不存在globalKey获取和设置的都是global,除非存在多个获取和设置global的key-value,否则不推荐直接使用不存在globalKey的情况</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>return:{global,setGlobal}</h4>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>global</td>\n<td>当前的global值</td>\n<td>any</td>\n</tr>\n<tr>\n<td>setGlobal</td>\n<td>设置当前的global值</td>\n<td>function</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `Global_4cc66`,\n style: `.Global_4cc66 .label {\n font-weight: bold;\n}`,\n list: [{\n title: `基本示例`,\n description: `展示了文字大小颜色行高的设置`,\n code: `const { PureGlobal } = _Global;\nconst { Space, Divider } = antd;\nconst BaseExample = () => {\n return (\n <PureGlobal>\n <Space direction=\"vertical\">\n <div className=\"label\">文字大小:</div>\n <div style={{ fontSize: 'var(--font-size-large)' }}>大号文字</div>\n <div>默认大小文字</div>\n <div style={{ fontSize: 'var(--font-size-small)' }}>小号文字</div>\n <Divider />\n <div className=\"label\">文字颜色:</div>\n <div style={{ color: 'var(--font-color)' }}>默认颜色</div>\n <div style={{ color: 'var(--font-color-grey)' }}>灰色</div>\n <div style={{ color: 'var(--font-color-grey-1)' }}>灰色1</div>\n <div style={{ color: 'var(--font-color-grey-2)' }}>灰色2</div>\n <Divider />\n <div className=\"label\">行高:</div>\n <div style={{ lineHeight: 'var(--line-height-large)' }}>\n 宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高宽松行高\n </div>\n <div>\n 默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高默认行高\n </div>\n <div style={{ lineHeight: 'var(--line-height-small)' }}>\n 紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高紧凑行高\n </div>\n </Space>\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Global\",\n packageName: \"@components/Global\",\n component: component_55\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_56\n}]\n},{\n title: `警告提示`,\n description: `展示了警告提示的覆盖样式`,\n code: `const { PureGlobal } = _Global;\nconst { Alert, Space } = antd;\n\nconst BasicExample = () => {\n return (\n <PureGlobal>\n <Space direction=\"vertical\">\n <Alert message=\"提示提示提示提示提示提示提示提示提示\" type=\"success\" showIcon />\n <Alert message=\"提示提示提示提示提示提示提示提示提示\" type=\"info\" showIcon />\n <Alert message=\"提示提示提示提示提示提示提示提示提示\" type=\"warning\" showIcon />\n <Alert message=\"提示提示提示提示提示提示提示提示提示\" type=\"error\" showIcon />\n\n <Alert message=\"标题标题标题标题\" description=\"提示提示提示提示提示提示提示提示提示\" type=\"success\" showIcon />\n <Alert message=\"标题标题标题标题\" description=\"提示提示提示提示提示提示提示提示提示\" type=\"info\" showIcon />\n <Alert message=\"标题标题标题标题\" description=\"提示提示提示提示提示提示提示提示提示\" type=\"warning\" showIcon />\n <Alert message=\"标题标题标题标题\" description=\"提示提示提示提示提示提示提示提示提示\" type=\"error\" showIcon />\n\n <Alert message=\"标题标题标题标题\" description=\"提示提示提示提示提示提示提示提示提示\" type=\"success\" showIcon closable />\n <Alert message=\"标题标题标题标题\" description=\"提示提示提示提示提示提示提示提示提示\" type=\"info\" showIcon closable />\n <Alert message=\"标题标题标题标题\" description=\"提示提示提示提示提示提示提示提示提示\" type=\"warning\" showIcon closable />\n <Alert message=\"标题标题标题标题\" description=\"提示提示提示提示提示提示提示提示提示\" type=\"error\" showIcon closable />\n </Space>\n </PureGlobal>\n );\n};\n\nrender(<BasicExample />);\n\n`,\n scope: [{\n name: \"_Global\",\n packageName: \"@components/Global\",\n component: component_55\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_56\n}]\n},{\n title: `按钮`,\n description: `展示了按钮的覆盖样式`,\n code: `const { PureGlobal } = _Global;\nconst { Button, Typography, Space } = antd;\nconst { default: Icon } = icon;\n\nconst BaseExample = () => {\n return (\n <PureGlobal>\n <Space direction=\"vertical\">\n <Space>\n <Button size=\"large\">大按钮</Button>\n <Button>默认按钮</Button>\n <Button size=\"small\">小按钮</Button>\n </Space>\n <Space>\n <Button type=\"primary\">按钮</Button>\n <Button type=\"link\">按钮</Button>\n <Button type=\"text\">按钮</Button>\n </Space>\n <Space>\n <Button danger>危险按钮</Button>\n <Button type=\"primary\" danger>\n 危险按钮\n </Button>\n <Button type=\"link\" danger>\n 危险按钮\n </Button>\n <Button type=\"text\" danger>\n 危险按钮\n </Button>\n </Space>\n <Space>\n <Button disabled>禁用按钮</Button>\n <Button type=\"primary\" danger disabled>\n 禁用危险按钮\n </Button>\n <Button type=\"link\" disabled>\n 禁用Link按钮\n </Button>\n <Button type=\"text\" disabled>\n 禁用Text按钮\n </Button>\n </Space>\n <Space>\n <Button type=\"text\" icon={<Icon type=\"icon-tianjia\" />}>\n 图标按钮\n </Button>\n <Button type=\"text\">\n 图标按钮右\n <Icon type=\"icon-arrow-thin-down\" />\n </Button>\n </Space>\n <Space>\n <Button type=\"primary\" icon={<Icon type=\"icon-tianjia\" />} />\n <Button icon={<Icon type=\"icon-tianjia\" />} />\n <Button danger icon={<Icon type=\"icon-tianjia\" />} />\n <Button type=\"link\" icon={<Icon type=\"icon-tianjia\" />} />\n <Button type=\"text\" icon={<Icon type=\"icon-tianjia\" />} />\n </Space>\n <Space>\n <Button type=\"primary\" disabled icon={<Icon type=\"icon-tianjia\" />} />\n <Button disabled icon={<Icon type=\"icon-tianjia\" />} />\n <Button disabled danger icon={<Icon type=\"icon-tianjia\" />} />\n <Button disabled type=\"link\" icon={<Icon type=\"icon-tianjia\" />} />\n <Button disabled type=\"text\" icon={<Icon type=\"icon-tianjia\" />} />\n </Space>\n <Space>\n <Typography.Link>Link文字</Typography.Link>\n <Typography.Text className=\"ant-btn\">文字</Typography.Text>\n <Typography.Link>\n <Icon type=\"icon-tianjia\" />\n Link文字\n </Typography.Link>\n <Typography.Text className=\"ant-btn\">\n <Icon type=\"icon-tianjia\" />\n 文字\n </Typography.Text>\n <Typography.Link className=\"ant-btn-dangerous\">\n Link文字\n </Typography.Link>\n </Space>\n <Space>\n <Button className=\"btn-no-padding\" type=\"link\" size=\"large\">\n 大按钮\n </Button>\n <Button className=\"btn-no-padding\" type=\"link\">\n 默认按钮\n </Button>\n <Button className=\"btn-no-padding\" type=\"link\" size=\"small\">\n 小按钮\n </Button>\n <Button className=\"btn-no-padding\" type=\"text\" size=\"large\">\n 大按钮\n </Button>\n <Button className=\"btn-no-padding\" type=\"text\">\n 默认按钮\n </Button>\n <Button className=\"btn-no-padding\" type=\"text\" size=\"small\">\n 小按钮\n </Button>\n <Button className=\"btn-no-padding\" type=\"link\" size=\"large\" danger>\n 大按钮\n </Button>\n <Button className=\"btn-no-padding\" type=\"link\" danger>\n 默认按钮\n </Button>\n <Button className=\"btn-no-padding\" type=\"link\" size=\"small\" danger>\n 小按钮\n </Button>\n </Space>\n </Space>\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Global\",\n packageName: \"@components/Global\",\n component: component_55\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_56\n},{\n name: \"icon\",\n packageName: \"@components/Icon\",\n component: component_57\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_43 from '@components/HelperGuide';\nimport * as component_44 from '@components/Global';\nconst readmeConfig = {\n name: `HelperGuide`,\n summary: `<p>给用户提供帮助文档</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: `HelperGuide_4e237`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: HelperGuide } = _HelperGuide;\nconst { PureGlobal } = Global;\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n enums: {\n helperGuide: () => [\n {\n value: \"test\",\n content:\n \"哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈\",\n url: \"/xxxx\",\n },\n ],\n },\n }}\n >\n <HelperGuide name=\"test\" />\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_HelperGuide\",\n packageName: \"@components/HelperGuide\",\n component: component_43\n},{\n name: \"Global\",\n packageName: \"@components/Global\",\n component: component_44\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_45 from '@components/Highlight';\nconst readmeConfig = {\n name: `Highlight`,\n summary: `<p>用于显示文本高亮</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: `Highlight_0b905`,\n style: ``,\n list: [{\n title: `基本文字高亮`,\n description: `展示基本文字高亮`,\n code: `const { default: Highlight, HighlightProvider } = _Highlight;\nconst BaseExample = () => {\n return (\n <HighlightProvider list={[\"哈\", \"呃呃\"]}>\n <Highlight>哈哈哈西西西西呃呃呃</Highlight>\n </HighlightProvider>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Highlight\",\n packageName: \"@components/Highlight\",\n component: component_45\n}]\n},{\n title: `xss测试`,\n description: `xss测试`,\n code: `const { default: Highlight, HighlightProvider } = _Highlight;\nconst BaseExample = () => {\n const str = '<img src=\"/aaaa\"/>';\n return (\n <HighlightProvider list={[\"哈\", \"呃呃\"]}>\n <Highlight>哈哈哈西西西西呃呃呃{str}</Highlight>\n </HighlightProvider>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Highlight\",\n packageName: \"@components/Highlight\",\n component: component_45\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_58 from '@components/HistoryStore';\nimport * as component_59 from 'antd';\nconst readmeConfig = {\n name: `HistoryStore`,\n summary: `<p>历史记录提示</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: `HistoryStore_a963f`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: HistoryStore } = _HistoryStore;\nconst { Input } = antd;\nconst { useState } = React;\nconst BaseExample = () => {\n const [value, setValue] = useState(\"\");\n return (\n <HistoryStore\n onSelect={(value) => {\n setValue(value);\n }}\n >\n {({ appendHistory, openHistory }) => (\n <Input.Search\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n }}\n onFocus={openHistory}\n onSearch={(value) => {\n appendHistory({\n value,\n label: value,\n });\n }}\n />\n )}\n </HistoryStore>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_HistoryStore\",\n packageName: \"@components/HistoryStore\",\n component: component_58\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_59\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_60 from '@components/Icon';\nimport * as component_61 from 'antd';\nimport * as component_62 from '@kne/react-fetch';\nimport * as component_63 from '@components/Global';\nimport * as component_64 from 'axios';\nimport * as component_65 from '@kne/remote-loader';\nconst readmeConfig = {\n name: `Icon`,\n summary: `<p>可以显示一个图标,图标必须在字体文件中被定义过</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>type</td>\n<td>图标类型,参考示例下的字符串</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>colorful</td>\n<td>是否是彩色图标</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>prefix</td>\n<td>图标前缀</td>\n<td>string</td>\n<td>\"\"</td>\n</tr>\n<tr>\n<td>size</td>\n<td>图标大小</td>\n<td>number</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: true,\n className: `Icon_81743`,\n style: `.Icon_81743 .item {\n width: 150px;\n word-break: break-all;\n}\n.Icon_81743 .item .ant-typography {\n position: relative;\n}\n.Icon_81743 .item .ant-typography-copy {\n visibility: hidden;\n position: absolute;\n right: -20px;\n}\n.Icon_81743 .item:hover .ant-typography-copy {\n visibility: visible;\n}`,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Icon } = _Icon;\nconst { Slider, Space, Typography } = antd;\nconst { useState } = React;\nconst { createWithFetch } = ReactFetch;\nconst { loadFont } = Global;\nconst { default: axios } = _axios;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst BaseExample = createWithRemoteLoader({\n modules: [\"components-iconfont:Font\"],\n})(({ remoteModules }) => {\n const [Font] = remoteModules;\n const [value, setValue] = useState(30);\n return (\n <Space direction=\"vertical\">\n <Space>\n <div>调整大小:</div>\n <Slider\n style={{ width: 100 }}\n max={60}\n min={12}\n value={value}\n onChange={setValue}\n />\n <div>{value}px</div>\n </Space>\n {\n <Font>\n {({ list }) => {\n return (\n <Space wrap align=\"top\" size=\"large\">\n {list.map(({ name, font_class }) => {\n return (\n <Space\n className=\"item\"\n direction=\"vertical\"\n align=\"center\"\n key={name}\n >\n <Icon type={font_class} size={value} />\n <Typography.Text\n copyable={{\n text:\n '<Icon type=\"' +\n font_class +\n '\" size={' +\n value +\n \"} />\",\n }}\n >\n {font_class}\n </Typography.Text>\n </Space>\n );\n })}\n </Space>\n );\n }}\n </Font>\n }\n </Space>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Icon\",\n packageName: \"@components/Icon\",\n component: component_60\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_61\n},{\n name: \"ReactFetch\",\n packageName: \"@kne/react-fetch\",\n component: component_62\n},{\n name: \"Global\",\n packageName: \"@components/Global\",\n component: component_63\n},{\n name: \"_axios\",\n packageName: \"axios\",\n component: component_64\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_65\n}]\n},{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Icon } = _Icon;\nconst { Space, Slider, Typography } = antd;\nconst { useState } = React;\nconst { createWithFetch } = ReactFetch;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: axios } = _axios;\n\nconst BaseExample = createWithRemoteLoader({\n modules: [\"components-iconfont:ColorfulFont\"],\n})(({ remoteModules }) => {\n const [ColorfulFont] = remoteModules;\n const [value, setValue] = useState(30);\n return (\n <Space direction=\"vertical\">\n <Space>\n <div>调整大小:</div>\n <Slider\n style={{ width: 100 }}\n max={60}\n min={12}\n value={value}\n onChange={setValue}\n />\n <div>{value}px</div>\n </Space>\n <ColorfulFont>\n {({ list }) => (\n <Space wrap align=\"top\" size=\"large\">\n {list.map(({ name }) => {\n return (\n <Space\n className=\"item\"\n direction=\"vertical\"\n align=\"center\"\n key={name}\n >\n <Icon colorful type={name} size={value} />\n <Typography.Text\n copyable={{\n text:\n '<Icon colorful type=\"' +\n name +\n '\" size={' +\n value +\n \"} />\",\n }}\n >\n {name}\n </Typography.Text>\n </Space>\n );\n })}\n </Space>\n )}\n </ColorfulFont>\n </Space>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Icon\",\n packageName: \"@components/Icon\",\n component: component_60\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_61\n},{\n name: \"ReactFetch\",\n packageName: \"@kne/react-fetch\",\n component: component_62\n},{\n name: \"Global\",\n packageName: \"@components/Global\",\n component: component_63\n},{\n name: \"_axios\",\n packageName: \"axios\",\n component: component_64\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_65\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_66 from '@components/Image';\nimport * as component_67 from '@components/Global';\nimport * as component_68 from 'antd';\nconst readmeConfig = {\n name: `Image`,\n summary: `<p>用于展示一张图片,和img标签不同的是,可以展示一张普通图片,也可以通过id加载一张oss图片,在加载oss地址和图片数据的时候会显示loading状态</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>src</td>\n<td>图片的src地址</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>id</td>\n<td>oss的id</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>loading</td>\n<td>加载时显示的组件</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>error</td>\n<td>加载错误时显示的组件</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>Image.Avatar</h3>\n<p>用antd的Avatar来显示图片,可以显示默认的男女头像,其他参数参考antd的Avatar组件</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>gender</td>\n<td>性别 F,female,f为女其他为男</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `Image_be53a`,\n style: ``,\n list: [{\n title: `通过src加载一个普通图片`,\n description: `通过src加载一个普通图片`,\n code: `const {default: Image} = _Image;\nconst BaseExample = () => {\n return <Image src={window.PUBLIC_URL + \"/logo512.png\"} style={{width: '100px', height: '100px'}}/>;\n};\n\nrender(<BaseExample/>);\n\n`,\n scope: [{\n name: \"_Image\",\n packageName: \"@components/Image\",\n component: component_66\n}]\n},{\n title: `通过id加载一个oss图片`,\n description: `图片一加载成功,图片二加载中,图片三加载失败`,\n code: `const {default: Image} = _Image;\nconst {PureGlobal} = global;\nconst {Space} = antd;\nconst BaseExample = () => {\n return <PureGlobal preset={{\n apis: {\n oss: {\n loader: ({params}) => {\n if(params.id ==='logo513.png'){\n return new Promise(()=>{\n\n });\n }\n return new Promise((resolve) => {\n resolve(window.PUBLIC_URL + '/' + params.id);\n });\n\n }\n }\n }\n }}>\n <Space>\n <Image id=\"logo512.png\" style={{width: '100px', height: '100px'}}/>\n <Image id=\"logo513.png\" style={{width: '100px', height: '100px'}}/>\n <Image id=\"logo511.png\" style={{width: '100px', height: '100px'}}/>\n </Space>\n </PureGlobal>;\n};\n\nrender(<BaseExample/>);\n\n`,\n scope: [{\n name: \"_Image\",\n packageName: \"@components/Image\",\n component: component_66\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_67\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_68\n}]\n},{\n title: `显示一个头像`,\n description: `显示图片头像和默认头像`,\n code: `const { default: Image } = _Image;\nconst { Space } = antd;\nconst BaseExample = () => {\n return (\n <Space>\n <Image.Avatar src={window.PUBLIC_URL + \"/avatar.png\"} shape=\"circle\" />\n <Image.Avatar\n src={window.PUBLIC_URL + \"/avatar.png\"}\n shape=\"circle\"\n size={80}\n />\n <Image.Avatar\n src={window.PUBLIC_URL + \"/avatar.png\"}\n shape=\"circle\"\n size={50}\n />\n\n <Image.Avatar shape=\"circle\" />\n <Image.Avatar gender=\"M\" shape=\"circle\" size={80} />\n <Image.Avatar gender=\"female\" shape=\"circle\" size={50} />\n <Image.Avatar gender=\"m\" shape=\"circle\" size={50} />\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Image\",\n packageName: \"@components/Image\",\n component: component_66\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_68\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_69 from '@components/InfoPage';\nimport * as component_70 from '@components/Content';\nimport * as component_71 from '@components/Descriptions';\nimport * as component_72 from 'antd';\nconst readmeConfig = {\n name: `InfoPage`,\n summary: `<h3>何时使用</h3>\n<p>一般用在复杂的详情展示页面,InfoPage提供了一个标准的展示信息的格式</p>\n<h3>特点</h3>\n<ul>\n<li>支持Content组件Descriptions组件的组合</li>\n<li>支持Collapse组件组合</li>\n<li>InfoPage.Part 需要放在InfoPage之下,InfoPage.Collapse,Content,Descriptions 需要放在 InfoPage.Part之下</li>\n</ul>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>children</td>\n<td>内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>InfoPage.Part</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>title</td>\n<td>标题</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>extra</td>\n<td>额外内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>InfoPage.Collapse</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>children</td>\n<td>内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `InfoPage_fb7ea`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: InfoPage } = _InfoPage;\nconst { default: Content } = _Content;\nconst { default: Descriptions } = _Descriptions;\nconst { Space, Button } = antd;\nconst BaseExample = () => {\n return (\n <InfoPage>\n <InfoPage.Part\n title=\"退票信息\"\n subTitle=\"我是一个退票信息\"\n extra={<Button>操作</Button>}\n >\n <Descriptions\n dataSource={[\n [\n { label: \"客户名称\", content: \"腾讯\" },\n {\n label: \"发票抬头\",\n content: \"腾讯科技公司\",\n },\n ],\n [\n { label: \"发票类型\", content: \"增值税专用发票\" },\n {\n label: \"发票开具日期\",\n content: \"2022-08-15\",\n },\n ],\n [{ label: \"退票金额\", content: \"22000.00元\" }],\n [\n {\n label: \"发票号\",\n content: (\n <div>\n <div>00384895992774</div>\n <div>00384895992774</div>\n <div>00384895992774</div>\n <div>00384895992774</div>\n </div>\n ),\n },\n ],\n [\n { label: \"是否需要重开发票\", content: \"否\" },\n {\n label: \"是否涉及金融变动\",\n content: \"否\",\n },\n ],\n [\n { label: \"是否造成实质损失\", content: \"否\" },\n { label: \"责任归属\", content: \"客户原因\" },\n ],\n [\n {\n label: \"退票原因\",\n content: \"退票原因的描述退票原因的描述退票原因的描\",\n },\n ],\n [{ label: \"附件\", content: \"附件名称\" }],\n [\n {\n label: \"操作时间\",\n content: \"2022-08-01 16:32\",\n },\n { label: \"操作人\", content: \"西西歪\" },\n ],\n ]}\n />\n </InfoPage.Part>\n <InfoPage.Part title=\"开票信息\">\n <Space direction=\"vertical\" size={24}>\n <Descriptions\n dataSource={[\n [{ label: \"客户名称\", content: \"腾讯\" }],\n [{ label: \"合同\", content: \"合同3\" }],\n ]}\n />\n <InfoPage.Part title=\"发票费用信息\">\n <Space direction=\"vertical\">\n <InfoPage.Collapse defaultActiveKey={[\"0\", \"1\"]}>\n <InfoPage.Collapse.Panel key=\"0\" header=\"项目类型1\">\n <Content\n labelAlign=\"auto\"\n col={3}\n gutter={[0, 12]}\n list={[\n { label: \"项目类型\", content: \"面试到岗\" },\n {\n label: \"费用类型\",\n content: \"服务费\",\n },\n { label: \"费用总金额\", content: \"10,000元\" },\n {\n label: \"本次支付费用比例\",\n content: \"30%\",\n },\n { label: \"本次支付费用金额\", content: \"3,000元\" },\n {\n label: \"开票候选人\",\n content: \"李小萌\",\n },\n ]}\n />\n </InfoPage.Collapse.Panel>\n <InfoPage.Collapse.Panel key=\"1\" header=\"项目类型2\">\n <Content\n labelAlign=\"auto\"\n col={3}\n gutter={[0, 12]}\n list={[\n { label: \"项目类型\", content: \"面试到岗\" },\n {\n label: \"费用类型\",\n content: \"服务费\",\n },\n { label: \"费用总金额\", content: \"10,000元\" },\n {\n label: \"本次支付费用比例\",\n content: \"30%\",\n },\n { label: \"本次支付费用金额\", content: \"3,000元\" },\n {\n label: \"开票候选人\",\n content: \"李小萌\",\n },\n ]}\n />\n </InfoPage.Collapse.Panel>\n </InfoPage.Collapse>\n <Descriptions\n dataSource={[\n [\n { label: \"客户付税比例\", content: \"1%\" },\n {\n label: \"客户所付税金\",\n content: \"30元\",\n },\n ],\n [\n { label: \"服务费\", content: \"2886.29元\" },\n {\n label: \"发票增值税\",\n content: \"172.38元\",\n },\n ],\n [{ label: \"发票金额\", content: \"22000.00元\" }],\n [\n {\n label: \"发票备注\",\n content: \"备注的内容备注的内容备注的内容备注的内容\",\n },\n ],\n ]}\n />\n </Space>\n </InfoPage.Part>\n <InfoPage.Part title=\"发票信息\">\n <Descriptions\n dataSource={[\n [{ label: \"付款信息\", content: \"ASB54492789374983798\" }],\n [\n {\n label: \"发票收件人\",\n content: \"西西歪\",\n },\n ],\n [{ label: \"附件\", content: \"附件名称\" }],\n [\n {\n label: \"预计入职日期\",\n content: \"2022-08-15\",\n },\n ],\n ]}\n />\n </InfoPage.Part>\n <InfoPage.Part title=\"业绩分配\">\n <InfoPage.Collapse defaultActiveKey={[\"0\", \"1\"]}>\n <InfoPage.Collapse.Panel key=\"0\" header=\"项目类型1\">\n <Content\n labelAlign=\"auto\"\n col={3}\n gutter={[0, 12]}\n list={[\n { label: \"分配用户\", content: \"王亚男\" },\n {\n label: \"分配比例\",\n content: \"40%\",\n },\n { label: \"分配金额\", content: \"1,200元\" },\n ]}\n />\n </InfoPage.Collapse.Panel>\n <InfoPage.Collapse.Panel key=\"1\" header=\"项目类型2\">\n <Content\n labelAlign=\"auto\"\n col={3}\n gutter={[0, 12]}\n list={[\n { label: \"分配用户\", content: \"王亚男\" },\n {\n label: \"分配比例\",\n content: \"40%\",\n },\n { label: \"分配金额\", content: \"1,200元\" },\n ]}\n />\n </InfoPage.Collapse.Panel>\n </InfoPage.Collapse>\n </InfoPage.Part>\n </Space>\n </InfoPage.Part>\n </InfoPage>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_InfoPage\",\n packageName: \"@components/InfoPage\",\n component: component_69\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_70\n},{\n name: \"_Descriptions\",\n packageName: \"@components/Descriptions\",\n component: component_71\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_72\n}]\n}]\n }\n};\nexport default readmeConfig;\n","const message = {\n ButtonText: \"confirm\"\n};\n\nexport default message;","const message = {\n ButtonText: \"确定\"\n};\n\nexport default message;","import * as component_77 from '@components/Intl';\nimport * as component_78 from '@components/Global';\nimport * as component_79 from 'antd';\nimport * as component_80 from '@components/Intl/doc/locale/en-US';\nimport * as component_81 from '@components/Intl/doc/locale/zh-CN';\nconst readmeConfig = {\n name: `Intl`,\n summary: `<p>支持系统国际化</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: `Intl_51734`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const {FormattedMessage, IntlProvider} = _Intl;\nconst {PureGlobal} = global;\nconst {Select, Space} = antd;\nconst {default: en} = localeEN;\nconst {default: cn} = localeCN;\nconst {useState} = React;\nconst BaseExample = () => {\n const [locale, setLocale] = useState('zh-CN');\n return (<Space>\n <Select value={locale} onChange={setLocale}\n options={['zh-CN', 'en-US'].map(key => ({value: key, label: key}))}/>\n <PureGlobal\n preset={{\n locale\n }}\n >\n <IntlProvider locale={locale} importMessages={locale => {\n return {\n default: {\n 'zh-CN': cn, 'en-US': en\n }[locale]\n };\n }}>\n <FormattedMessage defaultMessage=\"按钮\" id=\"ButtonText\">\n {text => <div>{text}</div>}\n </FormattedMessage>\n </IntlProvider>\n\n </PureGlobal>\n </Space>);\n};\n\nrender(<BaseExample/>);\n\n`,\n scope: [{\n name: \"_Intl\",\n packageName: \"@components/Intl\",\n component: component_77\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_78\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_79\n},{\n name: \"localeEN\",\n packageName: \"@components/Intl/doc/locale/en-US\",\n component: component_80\n},{\n name: \"localeCN\",\n packageName: \"@components/Intl/doc/locale/zh-CN\",\n component: component_81\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_73 from '@components/Layout';\nimport * as component_74 from '@components/Global';\nimport * as component_75 from 'antd';\nimport * as component_76 from '@components/Filter';\nconst readmeConfig = {\n name: `Layout`,\n summary: `<h3>何时使用</h3>\n<p>每个登录后的系统页面都应该在Layout的框架之下,它定义了页面的基本框架。根据设计对于页面的不同要求,适当选择不同的组合</p>\n<h3>特点</h3>\n<p>Layout将整个页面划分成以下几个区域</p>\n<ol>\n<li>导航区</li>\n<li>内容区</li>\n<li>左菜单区</li>\n<li>右操作区</li>\n<li>页头区</li>\n<li>页头信息区</li>\n<li>页面标题区</li>\n</ol>\n<p>通过给Page配置不同的参数实现不同区域的显示</p>\n<h3>注意</h3>\n<ul>\n<li>Page的name参数必须要传,用来在页面跳转时确定Page是不是同一个,决定着Page是否走install周期</li>\n<li>Page组件的参数是通过Context保存在Layout中的,这样做的目的是为了让页面跳转时,除页面区以外的区域在前后俩页面差别不大的情况下走更新周期而不是install周期,以此带来更快的渲染速度避免不必要的重复安装和卸载</li>\n<li>请尽量通过Page提供的参数来配置出设计要求的页面,不要自行用css实现,以便于Layout组件能从整体控制页面的基本形式和不同区域的padding和margin,让系统更加统一化标准化</li>\n</ul>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>navigation</td>\n<td>导航参数参考 Navigation 组件参数</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>一般放置Page组件</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>Page</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>menu</td>\n<td>左菜单区内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>filter</td>\n<td>页面标题位置筛选器参数,参考 Filter 组件参数</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>menuOpen</td>\n<td>左菜单是否默认打开</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>menuWidth</td>\n<td>左菜单宽度</td>\n<td>string</td>\n<td>240px</td>\n</tr>\n<tr>\n<td>menuFixed</td>\n<td>左菜单是否fixed布局</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>menuCloseButton</td>\n<td>控制左菜单显示隐藏的按钮是否显示</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>header</td>\n<td>页头区内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>headerFixed</td>\n<td>页头区是否fixed布局</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>headerInfo</td>\n<td>页头信息区内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>backUrl</td>\n<td>右侧内容区的标题前展示返回按钮,并返回到该url</td>\n<td>参考 useNavigate</td>\n<td>-</td>\n</tr>\n<tr>\n<td>title</td>\n<td>页面标题</td>\n<td>string,jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>titleExtra</td>\n<td>页面标题区右侧位置内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>titleLeftExtra</td>\n<td>页面标题区左侧位置内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>noMargin</td>\n<td>页面内容区是否去掉Margin</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>noPadding</td>\n<td>页面内容区是否去掉Padding</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>option</td>\n<td>右操作区内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>optionWidth</td>\n<td>右操作区宽度</td>\n<td>string</td>\n<td>400px</td>\n</tr>\n<tr>\n<td>optionNoPadding</td>\n<td>右操作区是否去掉Padding</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>optionFixed</td>\n<td>右操作区是否fixed布局</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>optionFooter</td>\n<td>右操作区底部内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>openFeatures</td>\n<td>Page是否启用Features,启用时如果配置文件中没有该模块id则判断为模块关闭,会将name作为Features的id进行设置</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n</tbody>\n</table>\n<h3>Affix</h3>\n<p>可以控制其中的内容是否是fixed布局</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>isFixed</td>\n<td>内容是否fixed布局</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>offsetTop</td>\n<td>距离窗口顶部达到指定偏移量后触发</td>\n<td>number</td>\n<td>0</td>\n</tr>\n<tr>\n<td>offsetBottom</td>\n<td>距离窗口底部达到指定偏移量后触发</td>\n<td>number</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onChange</td>\n<td>固定状态改变时触发的回调函数</td>\n<td>function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>Menu</h3>\n<p>显示一个菜单,最多支持两级,支持第一级展开收起,支持路径匹配自动高亮</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>items</td>\n<td>菜单项</td>\n<td>array[object]</td>\n<td>[]</td>\n</tr>\n<tr>\n<td>items[].label</td>\n<td>菜单项显示内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>items[].key</td>\n<td>菜单项的key要求必须唯一</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>items[].iconType</td>\n<td>菜单项前面的icon类型参考 Icon组件的type参数</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>items[].path</td>\n<td>菜单项的路径</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>items[].onClick</td>\n<td>菜单项点击触发事件,注意:如果菜单项已经传入path参数则该参数不生效</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>items[].children</td>\n<td>菜单项的第二级项列表,参考items参数。注意该组件只支持两级菜单,所以该参数内部的菜单项不再支持children参数</td>\n<td>array[object]</td>\n<td>-</td>\n</tr>\n<tr>\n<td>currentKey</td>\n<td>当前被选中的菜单项的key,如果菜单项又path参数,不需要传递该参数,组件会根据路由自动判断选中项</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onChange</td>\n<td>currentKey产生修改时触发函数,注意:如果菜单项已经传入path参数则该参数不生效</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>allowCollapsed</td>\n<td>是否允许一级菜单收起</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>defaultOpenKeys</td>\n<td>初始展开的 SubMenu 菜单项 key 数组</td>\n<td>string[]</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>PermissionsPage</h3>\n<p>加入权限判断的Page,错误类型默认为error,即在该页面没有权限时显示错误</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>permissions</td>\n<td>权限列表参考 Permissions 组件参数</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: true,\n className: `Layout_ebd9b`,\n style: `.Layout_ebd9b .layout-content {\n color: #fff;\n background: var(--primary-color-4);\n height: 100%;\n text-align: center;\n line-height: 300px;\n}\n.Layout_ebd9b .with-title-layout-content {\n height: 100%;\n}\n.Layout_ebd9b .layout-menu {\n background: #ff9c6e;\n color: #fff;\n height: 110vh;\n text-align: center;\n line-height: 300px;\n}\n.Layout_ebd9b .header {\n background: #ff9c6e;\n height: 100px;\n padding: 10px;\n color: #fff;\n}\n.Layout_ebd9b .right-options {\n background: var(--primary-color-4);\n height: 110vh;\n color: #fff;\n}\n.Layout_ebd9b .header-info {\n padding: 10px;\n height: 100px;\n background: var(--primary-color-4);\n color: #fff;\n}`,\n list: [{\n title: `基础上下布局`,\n description: `展示最基础的上导航栏,下内容的布局`,\n code: `const { default: Layout, Page } = _Layout;\nconst { PureGlobal } = global;\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n enums: {\n helperGuide: () => [\n {\n value: \"base-detail\",\n content: \"测试帮助文档\",\n url: \"/\",\n },\n ],\n },\n }}\n >\n <Layout navigation={{ isFixed: false }}>\n <Page name=\"base\" helperGuideName=\"base-detail\">\n <div className=\"layout-content\">内容区</div>\n </Page>\n </Layout>\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Layout\",\n packageName: \"@components/Layout\",\n component: component_73\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_74\n}]\n},{\n title: `带有左侧菜单布局`,\n description: `展示带有左侧菜单布局`,\n code: `const { default: Layout, Page, Menu } = layout;\nconst { Button, Space } = antd;\nconst { PureGlobal } = global;\n\nconst Example = () => {\n return (\n <Layout navigation={{ isFixed: false }}>\n <Page\n name=\"left-menu\"\n menuFixed={false}\n menu={\n <Menu\n items={[\n {\n label: \"父级标题1\",\n key: \"p-0\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-0\",\n path: \"/link1\",\n },\n {\n label: \"子标题2\",\n key: \"s-1\",\n path: \"/link2\",\n },\n ],\n },\n {\n label: \"父级标题2\",\n key: \"p-1\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-2\",\n path: \"/link3\",\n },\n {\n label: \"子标题2\",\n key: \"s-3\",\n path: \"/link4\",\n },\n ],\n },\n {\n label: \"父级标题3\",\n key: \"p-2\",\n iconType: \"icon-zhanghaodenglu\",\n path: \"/link5\",\n },\n ]}\n />\n }\n titleExtra={\n <Space>\n <Button type=\"primary\">新建</Button>\n </Space>\n }\n backUrl={\"/\"}\n title=\"标题\"\n >\n <div className=\"layout-content with-title-layout-content\">内容区</div>\n </Page>\n </Layout>\n );\n};\n\nrender(\n <PureGlobal>\n <Example />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"layout\",\n packageName: \"@components/Layout\",\n component: component_73\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_75\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_74\n}]\n},{\n title: `左侧固定带Header`,\n description: `展示带有header的左侧固定菜单布局`,\n code: `const { default: Layout, Page } = layout;\nconst { Button, Space } = antd;\nconst { PureGlobal } = global;\n\nconst Example = () => {\n return (\n <Space className=\"container\" direction=\"vertical\">\n <Layout navigation={{ isFixed: false }}>\n <Page\n name=\"with-header\"\n helperGuideName=\"base-detail\"\n menu={<div className=\"layout-menu\">左侧菜单区</div>}\n titleExtra={\n <Space>\n <Button type=\"primary\">新建</Button>\n </Space>\n }\n title=\"标题\"\n hideCloseSvg={true}\n headerHeight=\"40px\"\n menuFixed={false}\n header={<div className=\"header\">header</div>}\n headerFixed={false}\n headerInfo={<div className=\"header-info\">header info区域</div>}\n >\n <div>内容区</div>\n </Page>\n </Layout>\n </Space>\n );\n};\n\nrender(\n <PureGlobal\n preset={{\n enums: {\n helperGuide: () => [\n {\n value: \"base-detail\",\n content: \"测试帮助文档\",\n url: \"/\",\n },\n ],\n },\n }}\n >\n <Example />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"layout\",\n packageName: \"@components/Layout\",\n component: component_73\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_75\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_74\n}]\n},{\n title: `右侧固定`,\n description: `展示带有header的右侧固定菜单布局`,\n code: `const { default: Layout, Page } = layout;\nconst { Button, Space } = antd;\nconst { PureGlobal } = global;\n\nconst Example = () => {\n return (\n <Layout navigation={{ isFixed: false }}>\n <Page\n name=\"fix-right-menu\"\n optionFixed={false}\n option={<div className=\"right-options\">右侧操作区域</div>}\n optionFooter={\n <Space>\n <Button type=\"primary\">新建</Button>\n </Space>\n }\n titleExtra={\n <Space>\n <Button type=\"primary\">新建</Button>\n </Space>\n }\n title=\"标题\"\n header={<div className=\"header\">header</div>}\n headerFixed={false}\n menuFixed={false}\n >\n <div>内容区</div>\n </Page>\n </Layout>\n );\n};\n\nrender(\n <PureGlobal>\n <Example />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"layout\",\n packageName: \"@components/Layout\",\n component: component_73\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_75\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_74\n}]\n},{\n title: `带有filter的列表页`,\n description: `展示带有filter的列表页`,\n code: `const { default: Layout, Page } = layout;\nconst {\n InputFilterItem,\n CityFilterItem,\n AdvancedSelectFilterItem,\n UserFilterItem,\n FunctionSelectFilterItem,\n IndustrySelectFilterItem,\n getFilterValue,\n} = filter;\nconst { useState } = React;\nconst { Space, Button } = antd;\nconst { PureGlobal } = global;\nconst BaseExample = () => {\n const [filter, setFilter] = useState([]);\n return (\n <PureGlobal preset={{}}>\n <Layout navigation={{ isFixed: false }}>\n <Page\n name=\"base\"\n helperGuideName=\"base-detail\"\n titleExtra={\n <Space>\n <Button type=\"primary\">添加</Button>\n </Space>\n }\n filter={{\n extraExpand: (\n <Button type=\"primary\" size=\"small\">\n 订阅筛选项\n </Button>\n ),\n value: filter,\n onChange: (value) => {\n setFilter(value);\n console.log(getFilterValue(value));\n },\n list: [\n [\n <InputFilterItem label=\"文字\" name=\"text\" />,\n <CityFilterItem label=\"城市\" name=\"city\" />,\n <AdvancedSelectFilterItem\n label=\"高级选择\"\n name=\"select\"\n api={{\n loader: () => {\n return {\n pageData: [\n { label: \"第一项\", value: 1 },\n { label: \"第二项\", value: 2, disabled: true },\n {\n label: \"第三项\",\n value: 3,\n },\n ],\n };\n },\n }}\n />,\n <UserFilterItem\n label=\"用户选择\"\n name=\"user\"\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n value: 1,\n description: \"我是用户描述\",\n },\n {\n label: \"用户二\",\n value: 2,\n description: \"我是用户描述\",\n },\n {\n label: \"用户三\",\n value: 3,\n description: \"我是用户描述\",\n },\n ],\n };\n },\n }}\n />,\n <FunctionSelectFilterItem\n label=\"职能选择\"\n name=\"function\"\n onlyAllowLastLevel\n single\n />,\n <IndustrySelectFilterItem\n label=\"行业选择\"\n name=\"industry\"\n onlyAllowLastLevel\n />,\n ],\n [\n <UserFilterItem\n label=\"职位协助人\"\n name=\"position_user\"\n api={{\n loader: () => {\n return {\n pageData: [\n {\n label: \"用户一\",\n value: 1,\n description: \"我是用户描述\",\n },\n {\n label: \"用户二\",\n value: 2,\n description: \"我是用户描述\",\n },\n {\n label: \"用户三\",\n value: 3,\n description: \"我是用户描述\",\n },\n ],\n };\n },\n }}\n />,\n ],\n ],\n }}\n >\n <div className=\"layout-content\">内容区</div>\n </Page>\n </Layout>\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"layout\",\n packageName: \"@components/Layout\",\n component: component_73\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_75\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_74\n},{\n name: \"filter\",\n packageName: \"@components/Filter\",\n component: component_76\n}]\n},{\n title: `左侧导航菜单`,\n description: `展示一个左侧导航菜单`,\n code: `const { Menu } = layout;\nconst { Space } = antd;\nconst { useState } = React;\n\nconst ControlMenu = () => {\n const [current, setCurrent] = useState();\n return (\n <Menu\n currentKey={current}\n onChange={setCurrent}\n items={[\n {\n label: \"父级标题1\",\n key: \"p-0\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-0\",\n },\n {\n label: \"子标题2\",\n key: \"s-1\",\n },\n ],\n },\n {\n label: \"父级标题2\",\n key: \"p-1\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-2\",\n },\n {\n label: \"子标题2\",\n key: \"s-3\",\n },\n ],\n },\n {\n label: \"父级标题3\",\n key: \"p-2\",\n iconType: \"icon-zhanghaodenglu\",\n },\n ]}\n />\n );\n};\n\nconst Example = () => {\n return (\n <Space size={10}>\n <Menu\n items={[\n {\n label: \"父级标题1\",\n key: \"p-0\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-0\",\n path: \"/link1\",\n },\n {\n label: \"子标题2\",\n key: \"s-1\",\n path: \"/link2\",\n },\n ],\n },\n {\n label: \"父级标题2\",\n key: \"p-1\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-2\",\n path: \"/link3\",\n },\n {\n label: \"子标题2\",\n key: \"s-3\",\n path: \"/link4\",\n },\n ],\n },\n {\n label: \"父级标题3\",\n key: \"p-2\",\n iconType: \"icon-zhanghaodenglu\",\n path: \"/link5\",\n },\n ]}\n />\n <Menu\n items={[\n {\n iconType: \"icon-zhanghaodenglu\",\n label: \"子标题1\",\n key: \"s-0\",\n path: \"/link1\",\n },\n {\n iconType: \"icon-zhanghaodenglu\",\n label: \"子标题2\",\n key: \"s-1\",\n path: \"/link2\",\n },\n {\n iconType: \"icon-zhanghaodenglu\",\n label: \"子标题1\",\n key: \"s-2\",\n path: \"/link3\",\n },\n {\n iconType: \"icon-zhanghaodenglu\",\n label: \"子标题2\",\n key: \"s-3\",\n path: \"/link4\",\n },\n ]}\n />\n <Menu\n allowCollapsed={false}\n items={[\n {\n label: \"父级标题1\",\n key: \"p-0\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-0\",\n path: \"/link1\",\n },\n {\n label: \"子标题2\",\n key: \"s-1\",\n path: \"/link2\",\n },\n ],\n },\n {\n label: \"父级标题2\",\n key: \"p-1\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-2\",\n path: \"/link3\",\n },\n {\n label: \"子标题2\",\n key: \"s-3\",\n path: \"/link4\",\n },\n ],\n },\n {\n label: \"父级标题3\",\n key: \"p-2\",\n iconType: \"icon-zhanghaodenglu\",\n path: \"/link5\",\n },\n ]}\n />\n <ControlMenu />\n </Space>\n );\n};\n\nrender(<Example />);\n\n`,\n scope: [{\n name: \"layout\",\n packageName: \"@components/Layout\",\n component: component_73\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_75\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_82 from '@components/LoadingButton';\nimport * as component_83 from 'antd';\nconst readmeConfig = {\n name: `LoadingButton`,\n summary: `<h3>何时使用</h3>\n<p>当点击按钮时,需要显示loading状态,当然你可以使用antd Button的loading属性,但是这样你需要自己声明一个state来控制,LoadingButton组件可以帮你做好这件事情</p>\n<h3>特点</h3>\n<p>通过onClick返回的Promise来控制Button的loading状态</p>\n<p>children除了可以传正常的jsx以外还接受function参数,可以接收到loading状态以便根据loading状态显示不同文案</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>onClick</td>\n<td>点击按钮触发函数,可以返回一个Promise,当Promise再pending状态时Button将自动处于loading状态,当Promise返回结果会自动从loading切换回普通状态</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>Button的子元素,可以为jsx或者function,为function时可以接收到loading状态用来切换显示内容</td>\n<td>jsx,function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `LoadingButton_cd4ed`,\n style: ``,\n list: [{\n title: `带有加载状态按钮`,\n description: `点击按钮切换到加载状态,加载方法完成后自动切换为普通状态`,\n code: `const { default: LoadingButton } = _LoadingButton;\nconst { Space, message } = antd;\n\nconst clickHandler = () => {\n message.success(\"点击按钮1s后完成加载\");\n return new Promise((resolve) => {\n setTimeout(() => {\n message.success(\"完成\");\n resolve();\n }, 1000);\n });\n};\nconst BaseExample = () => {\n return (\n <Space wrap>\n <LoadingButton onClick={clickHandler}>按钮</LoadingButton>\n <LoadingButton onClick={clickHandler}>\n {(isLoading) => (isLoading ? \"正在加载中...\" : \"切换加载文案\")}\n </LoadingButton>\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_LoadingButton\",\n packageName: \"@components/LoadingButton\",\n component: component_82\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_83\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_84 from '@components/Menu';\nimport * as component_85 from 'antd';\nconst readmeConfig = {\n name: `Menu`,\n summary: `<p>支持远程加载数据的菜单</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: `Menu_b6154`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Menu } = _Menu;\nconst { Space } = antd;\nconst { useState } = React;\n\nconst ControlMenu = () => {\n const [current, setCurrent] = useState(\"s-0\");\n return (\n <Menu\n currentKey={current}\n onChange={setCurrent}\n items={[\n {\n label: \"父级标题1\",\n key: \"p-0\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-0\",\n },\n {\n label: \"子标题2\",\n key: \"s-1\",\n },\n ],\n },\n {\n label: \"父级标题2\",\n key: \"p-1\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-2\",\n },\n {\n label: \"子标题2\",\n key: \"s-3\",\n },\n ],\n },\n {\n label: \"父级标题3\",\n key: \"p-2\",\n iconType: \"icon-zhanghaodenglu\",\n },\n ]}\n />\n );\n};\nconst BaseExample = () => {\n return (\n <Space>\n <div style={{ maxWidth: \"200px\" }}>\n <Menu\n defaultItems={[\n {\n label: \"父级标题1\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label:\n \"子标题1超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长子标题1超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长子标题1超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长子标题1超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级长超级\",\n path: \"/link1\",\n },\n {\n label: \"子标题2\",\n path: \"/link2\",\n },\n ],\n },\n {\n label: \"父级标题2\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n path: \"/link3\",\n },\n {\n label: \"子标题2\",\n path: \"/link4\",\n },\n ],\n },\n {\n label: \"父级标题3\",\n iconType: \"icon-zhanghaodenglu\",\n fetchOptions: {\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n {\n label: \"子标题1\",\n path: \"/link5\",\n },\n {\n label: \"子标题2\",\n path: \"/link6\",\n },\n ]);\n }, 1000);\n });\n },\n },\n },\n ]}\n />\n </div>\n\n <Menu\n items={[\n {\n iconType: \"icon-zhanghaodenglu\",\n label: \"子标题1\",\n key: \"s-0\",\n path: \"/link1\",\n },\n {\n iconType: \"icon-zhanghaodenglu\",\n label: \"子标题2\",\n key: \"s-1\",\n path: \"/link2\",\n },\n {\n iconType: \"icon-zhanghaodenglu\",\n label: \"子标题1\",\n key: \"s-2\",\n path: \"/link3\",\n },\n {\n iconType: \"icon-zhanghaodenglu\",\n label: \"子标题2\",\n key: \"s-3\",\n path: \"/link4\",\n },\n ]}\n />\n <Menu\n allowCollapsed={false}\n items={[\n {\n label: \"父级标题1\",\n key: \"p-0\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-0\",\n path: \"/link1\",\n },\n {\n label: \"子标题2\",\n key: \"s-1\",\n path: \"/link2\",\n },\n ],\n },\n {\n label: \"父级标题2\",\n key: \"p-1\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n key: \"s-2\",\n path: \"/link3\",\n },\n {\n label: \"子标题2\",\n key: \"s-3\",\n path: \"/link4\",\n },\n ],\n },\n {\n label: \"父级标题3\",\n key: \"p-2\",\n iconType: \"icon-zhanghaodenglu\",\n path: \"/link5\",\n },\n ]}\n />\n <Menu\n allowCollapsed={false}\n defaultItems={[\n {\n label: \"父级标题1\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n path: \"/link1\",\n },\n {\n label: \"子标题2\",\n path: \"/link2\",\n },\n ],\n },\n {\n label: \"父级标题2\",\n iconType: \"icon-zhanghaodenglu\",\n children: [\n {\n label: \"子标题1\",\n path: \"/link3\",\n },\n {\n label: \"子标题2\",\n path: \"/link4\",\n },\n ],\n },\n {\n label: \"父级标题3\",\n iconType: \"icon-zhanghaodenglu\",\n fetchOptions: {\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n {\n label: \"子标题1\",\n path: \"/link5\",\n },\n {\n label: \"子标题2\",\n path: \"/link6\",\n },\n ]);\n }, 1000);\n });\n },\n },\n },\n ]}\n />\n <Menu\n defaultItems={[\n {\n label: \"父级标题1\",\n children: [\n {\n label: \"子标题1\",\n path: \"/link1\",\n },\n {\n label: \"子标题2\",\n path: \"/link2\",\n },\n ],\n },\n {\n label: \"父级标题2\",\n children: [\n {\n label: \"子标题1\",\n path: \"/link3\",\n },\n {\n label: \"子标题2\",\n path: \"/link4\",\n },\n ],\n },\n ]}\n />\n <ControlMenu />\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Menu\",\n packageName: \"@components/Menu\",\n component: component_84\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_85\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_86 from '@components/Modal';\nimport * as component_87 from '@components/Global';\nimport * as component_88 from 'antd';\nimport * as component_89 from '@kne/react-fetch';\nimport * as component_90 from '@components/Content';\nimport * as component_91 from '@components/FormInfo';\nconst readmeConfig = {\n name: `Modal`,\n summary: `<h3>何时使用</h3>\n<p>需要用户处理事务,又不希望跳转页面以致打断工作流程时,可以在当前页面正中打开一个浮层,承载相应的操作。</p>\n<h3>特点</h3>\n<p>该组件是antd Modal组件的再封装:</p>\n<ul>\n<li>修改了footer部分的设置逻辑,能更加简单的定义footer区域的功能</li>\n<li>添加了withDecorator可以更加方便的处理Modal外层的显示逻辑</li>\n<li>扩展了用于方法调用的useModal的hooks,可以通过hooks获得一个Modal的调用方法,并且保证其和Modal组件式调用有相同的UI表现和行为</li>\n<li>扩展了ModalButton组件,可以在点击该按钮时执行加载数据,并且Button的状态变为loading,在数据加载完成之后再弹出弹窗</li>\n<li>扩展了TabsModal组件,它是一个Tabs和Modal组合起来的组件,对弹窗title做了特殊处理,更加符合UI交互逻辑</li>\n</ul>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>footer</td>\n<td>弹窗的footer,当其被显式设置成null且footerButtons没有设置过时弹窗不显示footer。当它类型为function时可以得到close方法和withDecorator设置的props</td>\n<td>jsx,function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>footerButtons</td>\n<td>弹窗footer的按钮区,默认为确认和取消按钮,默认按钮分别响应onConfirm和onCancel方法,如果自定义设置footerButtons则需要自行传入onClick参数,onConfirm和onCancel方法将不生效</td>\n<td>array</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onClose</td>\n<td>弹窗关闭时调用,弹窗受控时由该方法将外部open状态修改</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onConfirm</td>\n<td>当footerButtons未自定义设置时点击确认按钮触发执行该方法,当其返回Promise点击后Promise,resolve之前确认按钮显示为loading状态,返回值为false或者Promise的resolve值为false时弹窗不会被关闭,其他情况弹窗默认关闭</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onCancel</td>\n<td>和onConfirm类似,其为点击取消按钮触发</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>弹窗内容,可以为jsx或者function,为function时可以接收到close和withDecorator设置的props</td>\n<td>jsx,function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>withDecorator</td>\n<td>弹窗修饰器,会接收到弹窗children的render方法,可以在其外部添加修饰内容后执行render方法,给render方法传入的值可以在children,footer,rightOptions类型为function时接收到对应的参数</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>rightOptions</td>\n<td>弹窗右侧区域,和children类似可以为jsx或者function类型</td>\n<td>jsx,function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>maskClosable</td>\n<td>点击蒙层是否允许关闭</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n</tbody>\n</table>\n<p>其他参数参考antd Modal组件</p>\n<h3>useModal</h3>\n<p>获取一个执行后可以弹出一个Modal组件的方法</p>\n<h4>return:modal</h4>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>modal</td>\n<td>执行后可以弹出一个Modal弹窗,参数同Modal组件参数</td>\n<td>function</td>\n</tr>\n</tbody>\n</table>\n<h3>TabsModal</h3>\n<p>一个Tabs和Modal组合起来的组件,对弹窗title做了特殊处理,更加符合UI交互逻辑</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>items</td>\n<td>同antd Tabs的items参数</td>\n<td>array</td>\n<td>-</td>\n</tr>\n<tr>\n<td>items[].label</td>\n<td>选项卡头显示文字</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>items[].children</td>\n<td>选项卡头显示内容,和antd Tabs不同的是它可以是一个function和Modal的children类似可以接收items[].withDecorator传入的参数</td>\n<td>jsx,function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>items[].key</td>\n<td>对应activeKey值</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>activeKey</td>\n<td>当前激活 tab 面板的 key</td>\n<td>string</td>\n<td></td>\n</tr>\n<tr>\n<td>withDecorator</td>\n<td>弹窗修饰器和Modal的withDecorator作用一致</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>defaultActiveKey</td>\n<td>初始化选中面板的 key,如果没有设置 activeKey</td>\n<td>string</td>\n<td></td>\n</tr>\n<tr>\n<td>onChange</td>\n<td>切换面板的回调</td>\n<td>function</td>\n<td></td>\n</tr>\n</tbody>\n</table>\n<h3>useTabsModal</h3>\n<p>获取一个执行后可以弹出一个TabsModal组件的方法</p>\n<h4>return:tabsModal</h4>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>tabsModal</td>\n<td>执行后可以弹出一个TabsModal弹窗,参数同TabsModal组件参数</td>\n<td>function</td>\n</tr>\n</tbody>\n</table>\n<h3>ModalButton</h3>\n<p>点击以后可以执行获取数据,在数据未返回时按钮展示为loading状态,数据返回后弹出Modal弹窗</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>api</td>\n<td>@kne/react-fetch 所需参数</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>modalProps</td>\n<td>同Modal参数,当它为function时,执行function后返回的值作为modalProps</td>\n<td>object,function({data,fetchApi,close})</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p>其他参数同antd Button 组件</p>\n<h3>TabsModalButton</h3>\n<p>点击以后可以执行获取数据,在数据未返回时按钮展示为loading状态,数据返回后弹出TabsModal弹窗</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>api</td>\n<td>@kne/react-fetch 所需参数</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>modalProps</td>\n<td>同TabsModal参数,当它为function时,执行function后返回的值作为modalProps</td>\n<td>object,function({data,fetchApi,close})</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p>其他参数同antd Button 组件</p>`,\n example: {\n isFull: false,\n className: `Modal_c59d6`,\n style: ``,\n list: [{\n title: `普通弹窗`,\n description: `展示弹窗的基本用法,自定义footer等功能。\n注意:\n1.onConfirm和onCancel只对于默认的footerButtons生效,如果是自定义的footerButtons则不需要传这两个参数,直接定义按钮的onClick即可。\n2.自定义的footerButtons的onClick可以返回一个Promise来延迟关闭弹窗,resolve的值为false不关闭弹窗,其他情况会自动关闭弹窗。在resolve未返回之前按钮会变成loading状态`,\n code: `const { default: Modal, useModal } = _Modal;\nconst { useState } = React;\nconst { Button, Space, message, Radio } = antd;\nconst { PureGlobal } = global;\n\nconst BaseExample = () => {\n const modal = useModal();\n const [size, setSize] = useState(\"default\");\n const [open, setOpen] = useState(false);\n return (\n <Space direction=\"vertical\">\n <Radio.Group\n value={size}\n options={[\n { label: \"small\", value: \"small\" },\n { label: \"default\", value: \"default\" },\n {\n label: \"large\",\n value: \"large\",\n },\n ]}\n onChange={(e) => {\n setSize(e.target.value);\n }}\n optionType=\"button\"\n buttonStyle=\"solid\"\n />\n <Space wrap>\n <Modal\n title=\"确定延迟关闭弹窗\"\n size={size}\n open={open}\n onClose={() => {\n setOpen(false);\n }}\n onConfirm={() => {\n return new Promise((resolve) => {\n message.success(\"弹窗1s后关闭\");\n setTimeout(() => {\n message.success(\"弹窗关闭\");\n resolve();\n }, 1000);\n });\n }}\n >\n <div>弹窗弹窗弹窗弹窗弹窗弹窗弹窗</div>\n </Modal>\n <Button\n onClick={() => {\n setOpen(true);\n }}\n >\n 确定延迟关闭弹窗\n </Button>\n <Button\n onClick={() => {\n modal({\n title: \"hooks调用弹框\",\n size,\n children: <div>弹窗弹窗弹窗弹窗弹窗弹窗弹窗</div>,\n });\n }}\n >\n hooks调用弹框\n </Button>\n <Button\n onClick={() => {\n modal({\n title: \"超高弹窗\",\n size,\n children: (\n <div style={{ height: \"2000px\" }}>\n 超高弹窗超高弹窗超高弹窗超高弹窗超高弹窗超高弹窗超高弹窗超高弹窗超高弹窗超高弹窗\n </div>\n ),\n });\n }}\n >\n 展示超高弹窗\n </Button>\n <Button\n onClick={() => {\n modal({\n title: \"自定义footer弹框\",\n size,\n children: <div>弹窗弹窗弹窗弹窗弹窗弹窗弹窗</div>,\n footer: ({ close }) => (\n <Space>\n <span>自定义footer</span>\n <Button\n type=\"link\"\n onClick={() => {\n close();\n }}\n >\n 关闭\n </Button>\n </Space>\n ),\n });\n }}\n >\n 展示自定义footer弹框\n </Button>\n <Button\n onClick={() => {\n modal({\n title: \"无footer弹框\",\n children: <div>弹窗弹窗弹窗弹窗弹窗弹窗弹窗</div>,\n footer: null,\n });\n }}\n >\n 无footer弹框\n </Button>\n <Button\n onClick={() => {\n modal({\n title: \"自定义按钮组\",\n size,\n children: <div>弹窗弹窗弹窗弹窗弹窗弹窗弹窗</div>,\n footerButtons: [\n {\n children: \"按钮一\",\n },\n {\n type: \"primary\",\n children: \"按钮二\",\n },\n {\n children: \"按钮三\",\n },\n ],\n });\n }}\n >\n 自定义按钮组\n </Button>\n <Button\n onClick={() => {\n modal({\n title: \"有rightOptions的弹窗\",\n size,\n children: <div>弹窗弹窗弹窗弹窗弹窗弹窗弹窗</div>,\n rightOptions: <div>右侧内容右侧内容右侧内容右侧内容</div>,\n });\n }}\n >\n 有rightOptions的弹窗\n </Button>\n <Button\n onClick={() => {\n const StateContainer = ({ children }) => {\n const [disabled, setDisabled] = useState(false);\n return children({ disabled, setDisabled });\n };\n\n modal({\n title: \"有rightOptions的弹窗\",\n size,\n withDecorator: (render) => {\n return <StateContainer>{render}</StateContainer>;\n },\n footerButtons: ({ disabled }) => [\n {\n type: \"primary\",\n disabled,\n children: \"确定\",\n },\n ],\n children: ({ disabled, setDisabled }) => (\n <div>\n 弹窗弹窗弹窗弹窗弹窗弹窗弹窗[{String(disabled)}]\n <Button\n onClick={() => {\n setDisabled((disabled) => !disabled);\n }}\n >\n 切换确定按钮disabled\n </Button>\n </div>\n ),\n });\n }}\n >\n children控制footerButtons状态\n </Button>\n </Space>\n </Space>\n );\n};\n\nrender(\n <PureGlobal>\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_Modal\",\n packageName: \"@components/Modal\",\n component: component_86\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_87\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_88\n}]\n},{\n title: `childrenRef的使用`,\n description: ``,\n code: `const { default: Modal, useModal } = _Modal;\nconst { Button } = antd;\nconst BaseExample = () => {\n const modal = useModal();\n\n return (\n <Button\n onClick={() => {\n modal({\n title: \"示例弹框\",\n children: ({ childrenRef }) => {\n return (\n <div ref={childrenRef}>\n 示例弹框示例弹框示例弹框示例弹框示例弹框示例弹框\n </div>\n );\n },\n onConfirm: (e, { childrenRef }) => {\n console.log(childrenRef.current);\n },\n });\n }}\n >\n 点击弹出弹框\n </Button>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Modal\",\n packageName: \"@components/Modal\",\n component: component_86\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_88\n}]\n},{\n title: `需要加载数据的弹窗`,\n description: `可以通过withDecorator属性实现弹窗的加载数据或者加载远程组件的逻辑,在数据或者远程组件加载完成之前弹窗展示loading状态,加载完成之后children可以获取到加载的数据`,\n code: `const { default: Modal, useModal } = _Modal;\nconst { useState } = React;\nconst { Button, Space } = antd;\nconst { default: Fetch } = fetch;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\n\nconst BaseExample = () => {\n const modal = useModal();\n const [open, setOpen] = useState(false);\n return (\n <Space wrap>\n <Modal\n title=\"组件调用方式\"\n withDecorator={(render) => (\n <Fetch\n loader={() => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n {\n label: \"内容1\",\n content: \"内容1内容1内容1内容1内容1内容1内容1\",\n },\n {\n label: \"内容2\",\n content: \"内容2内容2内容2内容2内容2内容2内容2内容2\",\n },\n ]);\n }, 1000);\n });\n }}\n render={({ data }) => render({ data })}\n />\n )}\n open={open}\n onClose={() => {\n setOpen(false);\n }}\n >\n {({ data }) => <Content list={data} col={2} />}\n </Modal>\n <Button\n onClick={() => {\n setOpen(true);\n }}\n >\n 组件调用方式\n </Button>\n <Button\n onClick={() => {\n modal({\n title: \"hooks调用方式\",\n withDecorator: (render) => (\n <Fetch\n loader={() => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n {\n label: \"内容1\",\n content: \"内容1内容1内容1内容1内容1内容1内容1\",\n },\n {\n label: \"内容2\",\n content: \"内容2内容2内容2内容2内容2内容2内容2内容2\",\n },\n ]);\n }, 1000);\n });\n }}\n render={({ data }) => render({ data })}\n />\n ),\n children: ({ data }) => <Content list={data} col={2} />,\n });\n }}\n >\n hooks调用方式\n </Button>\n <Button\n onClick={() => {\n modal({\n title: (props) => {\n return \"hooks调用方式\";\n },\n withDecorator: (render) => (\n <Fetch\n loader={() => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n {\n label: \"内容1\",\n content: \"内容1内容1内容1内容1内容1内容1内容1\",\n },\n {\n label: \"内容2\",\n content: \"内容2内容2内容2内容2内容2内容2内容2内容2\",\n },\n ]);\n }, 1000);\n });\n }}\n render={({ data }) => render({ data })}\n />\n ),\n children: ({ data }) => <Content list={data} col={2} />,\n });\n }}\n >\n hooks title调用方式\n </Button>\n </Space>\n );\n};\n\nrender(\n <PureGlobal>\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_Modal\",\n packageName: \"@components/Modal\",\n component: component_86\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_87\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_88\n},{\n name: \"fetch\",\n packageName: \"@kne/react-fetch\",\n component: component_89\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_90\n}]\n},{\n title: `可以弹出弹窗的按钮`,\n description: `可以点击按钮弹出弹窗,并且在弹窗弹出之前可以加载数据,加载数据时,按钮为loading状态,数据加载完成之后再弹出弹窗`,\n code: `const { ModalButton, TabsModalButton } = _Modal;\nconst { Space } = antd;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\nconst { default: FormInfo, Input, TextArea } = _FormInfo;\n\nconst api = {\n loader: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([\n { label: \"内容1\", content: \"内容1内容1内容1内容1内容1内容1内容1\" },\n {\n label: \"内容2\",\n content: \"内容2内容2内容2内容2内容2内容2内容2内容2\",\n },\n ]);\n }, 1000);\n });\n },\n};\n\nconst BaseExample = () => {\n return (\n <Space wrap>\n <ModalButton\n api={api}\n modalProps={({ data }) => {\n return {\n title: \"加载数据的弹窗\",\n children: <Content list={data} col={2} />,\n };\n }}\n >\n 点击加载数据\n </ModalButton>\n <TabsModalButton\n api={api}\n modalProps={({ data }) => {\n return {\n items: data.map(({ label, content }, index) => {\n return {\n key: index,\n children: content,\n label,\n };\n }),\n };\n }}\n >\n 点击加载数据的Tabs弹窗\n </TabsModalButton>\n </Space>\n );\n};\n\nrender(\n <PureGlobal>\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_Modal\",\n packageName: \"@components/Modal\",\n component: component_86\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_87\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_88\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_90\n},{\n name: \"_FormInfo\",\n packageName: \"@components/FormInfo\",\n component: component_91\n}]\n},{\n title: `tabs弹窗`,\n description: `展示一个tabs弹窗,tabs的选项的label会占据弹窗title位置,弹框的title将不显示\ntabs的items多加了withDecorator参数和Modal的withDecorator参数类似可以控制其外部显示及渲染内容\ntabs的items的children也可以是function,同样可以接收到TabsModal的withDecorator传回的参数`,\n code: `const { TabsModal, useTabsModal } = _Modal;\nconst { useState } = React;\nconst { default: Fetch } = fetch;\nconst { Button, Space } = antd;\nconst { PureGlobal } = global;\nconst { default: Content } = _Content;\n\nconst BaseExample = () => {\n const [open, setOpen] = useState(false);\n const tabsModal = useTabsModal();\n return <Space wrap>\n <TabsModal open={open} onClose={() => {\n setOpen(false);\n }} items={[{\n label: \"项目 1\", key: \"item-1\", children: <div>项目 1项目 1项目 1项目 1项目 1项目 1项目 1项目 1</div>\n }, {\n label: \"项目 2\", key: \"item-2\", children: <div>项目 2项目 2项目 2项目 2项目 2项目 2项目 2项目 2</div>\n }]} rightOptions={<div>右边栏内容右边栏内容右边栏内容右边栏内容</div>}>\n <div>弹窗弹窗弹窗弹窗弹窗弹窗弹窗</div>\n </TabsModal>\n <Button onClick={() => {\n setOpen(true);\n }}>组件调用方式</Button>\n <Button onClick={() => {\n tabsModal({\n rightOptions: <div>右边栏内容右边栏内容右边栏内容右边栏内容</div>, items: [{\n label: \"项目 1\", key: \"item-1\", children: <div>项目 1项目 1项目 1项目 1项目 1项目 1项目 1项目 1</div>\n }, {\n label: \"项目 2\", key: \"item-2\", children: <div>项目 2项目 2项目 2项目 2项目 2项目 2项目 2项目 2</div>\n }]\n });\n }}>hooks调用方式</Button>\n <Button onClick={() => {\n tabsModal({\n title: \"此title不展示\",\n rightOptions: ({ data }) => <Content list={data} />,\n withDecorator: (render) => <Fetch loader={() => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([{ label: \"内容1\", content: \"内容1内容1内容1内容1内容1内容1内容1\" }, {\n label: \"内容2\", content: \"内容2内容2内容2内容2内容2内容2内容2内容2\"\n }]);\n }, 1000);\n });\n }} render={({ data }) => render({ data })} />,\n items: [{\n label: \"项目 1\", key: \"item-1\", children: ({ data }) => <Content list={data} col={2} />\n }, {\n withDecorator: (render) => <Fetch loader={() => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve([{ label: \"内容3\", content: \"内容3内容3内容3内容3内容3内容3内容3\" }, {\n label: \"内容4\", content: \"内容4内容4内容4内容4内容4内容4内容4内容4\"\n }]);\n }, 1000);\n });\n }} render={({ data }) => render({ tabData: data })} />,\n label: \"项目 2\",\n key: \"item-2\",\n children: ({ data, tabData }) => <Content list={[...data, ...tabData]} col={2} />\n }]\n });\n }}>复杂数据加载</Button>\n </Space>;\n};\n\nrender(<PureGlobal><BaseExample /></PureGlobal>);\n`,\n scope: [{\n name: \"_Modal\",\n packageName: \"@components/Modal\",\n component: component_86\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_87\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_88\n},{\n name: \"fetch\",\n packageName: \"@kne/react-fetch\",\n component: component_89\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_90\n}]\n},{\n title: `消息确认和提示`,\n description: `展示确认消息提醒`,\n code: `const { default: Modal, useConfirmModal } = _Modal;\nconst { useState } = React;\nconst { Button, Space, message } = antd;\nconst { PureGlobal } = global;\nconst BaseExample = () => {\n const confirmModal = useConfirmModal();\n return (\n <Space wrap>\n <Button\n onClick={() => {\n confirmModal({\n danger: true,\n type: \"confirm\",\n title: \"确定要删除吗?\",\n message:\n \"确定要删除确定要删除确定要删除确定要删除确定要删除确定要删除\",\n });\n }}\n >\n confirm\n </Button>\n <Button\n onClick={() => {\n confirmModal({\n type: \"confirm\",\n confirmType: \"warning\",\n title: \"确定要编辑吗?\",\n message:\n \"确定要编辑确定要编辑确定要编辑确定要编辑确定要编辑确定要编辑确定要编辑\",\n });\n }}\n >\n confirm 警告\n </Button>\n <Button\n onClick={() => {\n confirmModal({\n type: \"info\",\n title: \"确定要删除吗?\",\n message:\n \"确定要删除确定要删除确定要删除确定要删除确定要删除确定要删除\",\n });\n }}\n >\n info\n </Button>\n <Button\n onClick={() => {\n confirmModal({\n type: \"info\",\n message:\n \"确定要删除确定要删除确定要删除确定要删除确定要删除确定要删除\",\n });\n }}\n >\n info无标题\n </Button>\n <Button\n onClick={() => {\n confirmModal({\n type: \"success\",\n title: \"确定要删除吗?\",\n message:\n \"确定要删除确定要删除确定要删除确定要删除确定要删除确定要删除\",\n });\n }}\n >\n success\n </Button>\n <Button\n onClick={() => {\n confirmModal({\n type: \"warning\",\n title: \"确定要删除吗?\",\n message:\n \"确定要删除确定要删除确定要删除确定要删除确定要删除确定要删除\",\n });\n }}\n >\n warning\n </Button>\n <Button\n onClick={() => {\n confirmModal({\n type: \"error\",\n title: \"确定要删除吗?\",\n message:\n \"确定要删除确定要删除确定要删除确定要删除确定要删除确定要删除\",\n });\n }}\n >\n error\n </Button>\n </Space>\n );\n};\n\nrender(\n <PureGlobal>\n <BaseExample />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_Modal\",\n packageName: \"@components/Modal\",\n component: component_86\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_87\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_88\n},{\n name: \"fetch\",\n packageName: \"@kne/react-fetch\",\n component: component_89\n},{\n name: \"_Content\",\n packageName: \"@components/Content\",\n component: component_90\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_92 from '@components/Navigation';\nimport * as component_93 from '@components/Global';\nimport * as component_94 from 'antd';\nconst readmeConfig = {\n name: `Navigation`,\n summary: `<h3>何时使用</h3>\n<p>系统的顶部导航,一级导航项偏左靠近 logo 放置,辅助菜单偏右放置。</p>\n<h3>特点</h3>\n<ul>\n<li>集成了Permissions权限判断,可以通过权限列表来判断导项是否显示</li>\n<li>在屏幕显示不了全部的一级导航时可以自动将后面的导航项收起到更多下拉菜单里面</li>\n</ul>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: true,\n className: `Navigation_84649`,\n style: `.Navigation_84649 .fold-items {\n width: 600px;\n}`,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Navigation } = _Navigation;\nconst { PureGlobal } = global;\n\nconst menuList = [\n {\n key: \"client\",\n title: \"客户\",\n path: \"/client\",\n permission: \"client:client:look\",\n },\n {\n key: \"position\",\n title: \"职位\",\n path: \"/position\",\n permission: \"jd:job:look\",\n },\n {\n key: \"ats\",\n title: \"招聘流程\",\n path: \"/ats\",\n },\n {\n key: \"talent\",\n title: \"人才库\",\n permission: \"cv:cv:look\",\n path: \"/talent\",\n },\n {\n key: \"contract\",\n title: \"合同\",\n permission: \"contract:mgr:look\",\n path: \"/contract\",\n },\n {\n key: \"payment\",\n title: \"付款信息\",\n permission: \"payment:mgr:look\",\n path: \"/payment\",\n },\n {\n key: \"invoice-center\",\n title: \"开票\",\n permission: \"client:invoice:center\",\n path: \"/invoice-center\",\n },\n {\n key: \"invoice-manage\",\n title: \"发票管理\",\n permission: \"client:invoice:manager\",\n path: \"/invoice-manage\",\n },\n {\n key: \"setting\",\n title: \"设置\",\n permission: (permissions) =>\n permissions.some(\n (x) =>\n [\n \"system:permissions:mgr\",\n \"system:org:mgr\",\n \"system:user:mgr\",\n ].indexOf(x) !== -1\n ),\n path: \"/setting\",\n },\n];\n\nrender(\n <PureGlobal>\n <Navigation\n list={menuList}\n isFixed={false}\n permissions={[\n \"client:client:look\",\n \"jd:job:look\",\n \"cv:cv:look\",\n \"contract:mgr:look\",\n \"payment:mgr:look\",\n \"client:invoice:center\",\n \"client:invoice:manager\",\n \"system:permissions:mgr\",\n ]}\n />\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_Navigation\",\n packageName: \"@components/Navigation\",\n component: component_92\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_93\n}]\n},{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Navigation } = _Navigation;\nconst { PureGlobal } = global;\n\nconst menuList = [\n {\n key: \"client\",\n title: \"客户\",\n path: \"/client\",\n permission: \"client:client:look\",\n },\n {\n key: \"position\",\n title: \"职位\",\n path: \"/position\",\n permission: \"jd:job:look\",\n },\n {\n key: \"ats\",\n title: \"招聘流程\",\n path: \"/ats\",\n },\n {\n key: \"talent\",\n title: \"人才库\",\n permission: \"cv:cv:look\",\n path: \"/talent\",\n },\n {\n key: \"contract\",\n title: \"合同\",\n permission: \"contract:mgr:look\",\n path: \"/contract\",\n },\n {\n key: \"payment\",\n title: \"付款信息\",\n permission: \"payment:mgr:look\",\n path: \"/payment\",\n },\n {\n key: \"invoice-center\",\n title: \"开票\",\n permission: \"client:invoice:center\",\n path: \"/invoice-center\",\n },\n {\n key: \"invoice-manage\",\n title: \"发票管理\",\n permission: \"client:invoice:manager\",\n path: \"/invoice-manage\",\n },\n {\n key: \"setting\",\n title: \"设置\",\n permission: (permissions) =>\n permissions.some(\n (x) =>\n [\n \"system:permissions:mgr\",\n \"system:org:mgr\",\n \"system:user:mgr\",\n ].indexOf(x) !== -1\n ),\n path: \"/setting\",\n },\n];\n\nrender(\n <PureGlobal>\n <div className=\"fold-items\">\n <Navigation\n isFixed={false}\n list={menuList}\n permissions={[\n \"client:client:look\",\n \"jd:job:look\",\n \"cv:cv:look\",\n \"contract:mgr:look\",\n \"payment:mgr:look\",\n \"client:invoice:center\",\n \"client:invoice:manager\",\n \"system:permissions:mgr\",\n ]}\n />\n </div>\n </PureGlobal>\n);\n\n`,\n scope: [{\n name: \"_Navigation\",\n packageName: \"@components/Navigation\",\n component: component_92\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_93\n}]\n},{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { useState } = React;\nconst { PureGlobal } = global;\nconst { default: Navigation } = _Navigation;\nconst { Checkbox, Space } = antd;\n\nconst menuList = [\n {\n key: \"client\",\n title: \"客户\",\n path: \"/client\",\n permission: \"client:client:look\",\n },\n {\n key: \"position\",\n title: \"职位\",\n path: \"/position\",\n permission: \"jd:job:look\",\n },\n {\n key: \"ats\",\n title: \"招聘流程\",\n path: \"/ats\",\n },\n {\n key: \"talent\",\n title: \"人才库\",\n permission: \"cv:cv:look\",\n path: \"/talent\",\n },\n {\n key: \"contract\",\n title: \"合同\",\n permission: \"contract:mgr:look\",\n path: \"/contract\",\n },\n {\n key: \"payment\",\n title: \"付款信息\",\n permission: \"payment:mgr:look\",\n path: \"/payment\",\n },\n {\n key: \"invoice-center\",\n title: \"开票\",\n permission: \"client:invoice:center\",\n path: \"/invoice-center\",\n },\n {\n key: \"invoice-manage\",\n title: \"发票管理\",\n permission: \"client:invoice:manager\",\n path: \"/invoice-manage\",\n },\n {\n key: \"setting\",\n title: \"设置\",\n permission: (permissions) =>\n permissions.some(\n (x) =>\n [\n \"system:permissions:mgr\",\n \"system:org:mgr\",\n \"system:user:mgr\",\n ].indexOf(x) !== -1\n ),\n path: \"/setting\",\n },\n];\n\nconst Example = () => {\n const [permissions, setPermissions] = useState([]);\n return (\n <PureGlobal>\n <Space className=\"container\" direction=\"vertical\" size={32}>\n <Navigation isFixed={false} list={menuList} permissions={permissions} />\n <Checkbox.Group\n value={permissions}\n options={[\n \"client:client:look\",\n \"jd:job:look\",\n \"cv:cv:look\",\n \"contract:mgr:look\",\n \"payment:mgr:look\",\n \"client:invoice:center\",\n \"client:invoice:manager\",\n \"system:permissions:mgr\",\n ]}\n onChange={(values) => {\n setPermissions(values);\n }}\n />\n </Space>\n </PureGlobal>\n );\n};\n\nrender(<Example />);\n\n`,\n scope: [{\n name: \"_Navigation\",\n packageName: \"@components/Navigation\",\n component: component_92\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_94\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_93\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_95 from '@components/Notification';\nimport * as component_96 from '@components/Global';\nimport * as component_97 from 'antd';\nconst readmeConfig = {\n name: `Notification`,\n summary: `<p>消息通知</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: `Notification_96d00`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Notification } = _Notification;\nconst { PureGlobal } = global;\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n ajax: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({ data: { code: 0, data: {} } });\n }, 1000);\n });\n },\n apis: {\n notification: {},\n },\n global: {\n notification: {\n list: [\n {\n id: 1,\n level: \"high\",\n title:\n \"我是一个高级通知我是一个高级通知我是一个高级通知我是一个高级通知我是一个高级通知我是一个高级通知我是一个高级通知我是一个高级通知\",\n subtitle:\n \"通知标题通知标题通知标题通知标题通知标题通知标题通知标题通知标题\",\n link: \"https://www.baidu.com\",\n content: [\n {\n label: \"字段\",\n content: \"哈哈哈哈\",\n },\n {\n label: \"字段\",\n content:\n \"哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈\",\n },\n {\n label: \"字段\",\n content: \"哈哈哈哈\",\n },\n {\n label: \"字段\",\n content: \"哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈\",\n },\n {\n label: \"字段\",\n content: \"哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈\",\n },\n ],\n },\n {\n id: 2,\n level: \"high\",\n title: \"我是一个高级通知2\",\n content: [\n {\n label: \"字段\",\n content: \"哈哈哈哈\",\n },\n ],\n },\n {\n id: 3,\n level: \"high\",\n title: \"我是一个高级通知3\",\n content: [\n {\n label: \"字段\",\n content: \"哈哈哈哈\",\n },\n ],\n },\n {\n id: 4,\n level: \"high\",\n title: \"我是一个高级通知4\",\n content: [\n {\n label: \"字段\",\n content: \"哈哈哈哈\",\n },\n ],\n },\n {\n id: 5,\n level: \"low\",\n title: \"我是一个低级通知\",\n content: [\n {\n label: \"字段\",\n content: \"哈哈哈哈\",\n },\n ],\n },\n {\n id: 6,\n level: \"low\",\n title: \"我是一个低级通知2\",\n content: [\n {\n label: \"字段\",\n content: \"哈哈哈哈\",\n },\n ],\n },\n {\n id: 7,\n level: \"middle\",\n title: \"我是一个中级通知\",\n children: \"哈哈哈哈\",\n },\n ],\n },\n },\n }}\n >\n <Notification />\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Notification\",\n packageName: \"@components/Notification\",\n component: component_95\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_96\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_97\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_98 from '@components/Permissions';\nimport * as component_99 from '@components/Global';\nimport * as component_100 from 'antd';\nconst readmeConfig = {\n name: `Permissions`,\n summary: `<h3>何时使用</h3>\n<p>在系统中存在一些功能和操作只允许某些角色用户使用,使用该组件可以让其包裹的组件或者区域根据系统的权限列表配置展示不同的状态</p>\n<h3>特点</h3>\n<p>通过在Global中的preset中设置permissions作为当前用户的权限列表,在Permissions组件配置permissions作为该功能要求具备的权限项,当要求具备的权限项全部在用户的权限列表中找到时为权限通过状态否则为权限不通过状态</p>\n<p>当权限不通过时,Permissions组件可以有三种方式呈现:</p>\n<ol>\n<li>用户可以看到操作功能的组件显示,但是不能进行操作,在鼠标移入时会以ToolTip提示错误原因,一般用在按钮等需要用户交互的功能位置</li>\n<li>用户不能看到操作功能或者数据呈现,对应区域显示错误原因,一般用在要数据展示等场景</li>\n<li>隐藏内部组件,一般用在不需要干扰到用户或用户不需要了解其没有权限的功能或数据等场景</li>\n</ol>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>type</td>\n<td>类型,可选值为hidden,tooltip,error,分别为隐藏,气泡提示,错误提示三种形式</td>\n<td>string</td>\n<td>hidden</td>\n</tr>\n<tr>\n<td>tagName</td>\n<td>当前组件的tagName,同React.createElement的type参数,默认为span</td>\n<td>string</td>\n<td>span</td>\n</tr>\n<tr>\n<td>message</td>\n<td>提示文案</td>\n<td>string</td>\n<td>您暂无权限,请联系管理员</td>\n</tr>\n<tr>\n<td>request</td>\n<td>权限列表为一个字符串数组,每个item为一项权限的key,所有权限在全局的permissions中存在则判断为权限通过</td>\n<td>array[string]</td>\n<td>[]</td>\n</tr>\n<tr>\n<td>children</td>\n<td>该参数可以传function类型,children({isPass, type, request}),isPass为权限校验是否通过,type为提示类型,request为所需权限列表,可以自行实现权限的展示</td>\n<td>jsx,function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `Permissions_d08cc`,\n style: `.Permissions_d08cc .box {\n padding: 20px;\n background: #f8f8f8;\n}`,\n list: [{\n title: `展示权限不通过的几种形式`,\n description: `通过切换不同的type,可以预览三种不同type的表现形式`,\n code: `const { default: Permissions } = _Permissions;\nconst { PureGlobal } = global;\nconst { Button, Radio, Space } = antd;\nconst { useState } = React;\n\nconst BaseExample = () => {\n const [type, setType] = useState(\"tooltip\");\n return (\n <PureGlobal\n preset={{\n permissions: [\"permission_1\", \"permission_2\"],\n }}\n >\n <Space direction=\"vertical\">\n <Radio.Group\n value={type}\n options={[\n { label: \"tooltip\", value: \"tooltip\" },\n {\n label: \"error\",\n value: \"error\",\n },\n { label: \"hidden\", value: \"hidden\" },\n ]}\n onChange={(e) => {\n setType(e.target.value);\n }}\n optionType=\"button\"\n buttonStyle=\"solid\"\n />\n <Permissions type={type} request={[\"permission_2\"]}>\n <div className=\"box\">\n <Button onClick={() => console.log(\"执行操作\")}>有权限操作</Button>\n </div>\n </Permissions>\n <Permissions type={type} request={[\"permission_3\"]}>\n <div className=\"box\">\n <Button onClick={() => console.log(\"执行操作\")}>无权限操作</Button>\n </div>\n </Permissions>\n </Space>\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Permissions\",\n packageName: \"@components/Permissions\",\n component: component_98\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_99\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_100\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_101 from '@components/StateBar';\nimport * as component_102 from 'antd';\nconst readmeConfig = {\n name: `StateBar`,\n summary: `<p>用于 State Bar</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>stateOption</td>\n<td>state操作列表</td>\n<td>string</td>\n<td>{key: string, tab: ReactNode}[]</td>\n</tr>\n<tr>\n<td>activeKey</td>\n<td>当前激活 tab 面板的 key</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>type</td>\n<td>当前tab展示样式</td>\n<td>'tab'、'radio'、'step'</td>\n<td>'tab'</td>\n</tr>\n<tr>\n<td>onChange</td>\n<td>事件返回选中的key</td>\n<td>(value: string) =&gt; void</td>\n<td></td>\n</tr>\n<tr>\n<td>tabBarExtraContent</td>\n<td>展示在state bar右侧</td>\n<td>ReactNode</td>\n<td>null</td>\n</tr>\n<tr>\n<td>isInner</td>\n<td>底部线延展至总长</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n</tbody>\n</table>\n<h3>Mapping</h3>\n<h4>stateOption</h4>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>key</td>\n<td>对应 activeKey</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>tab</td>\n<td>选项卡头显示文字</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `StateBar_de00a`,\n style: ``,\n list: [{\n title: `State Bar`,\n description: `State Bar`,\n code: `const { default: StateBar } = _StateBar;\nconst { Button, Radio, Space } = antd;\nconst { useState } = React;\n\nconst BaseExample = () => {\n const [size, setSize] = useState(\"default\");\n const [isInner, setIsInner] = useState(false);\n return (\n <Space direction=\"vertical\">\n <Radio.Group\n value={isInner}\n options={[\n { label: \"inner\", value: true },\n { label: \"normal\", value: false },\n ]}\n onChange={(e) => {\n setIsInner(e.target.value);\n }}\n optionType=\"button\"\n buttonStyle=\"solid\"\n />\n <Radio.Group\n value={size}\n options={[\n { label: \"small\", value: \"small\" },\n { label: \"default\", value: \"default\" },\n { label: \"large\", value: \"large\" },\n ]}\n onChange={(e) => {\n setSize(e.target.value);\n }}\n optionType=\"button\"\n buttonStyle=\"solid\"\n />\n <StateBar\n size={size}\n isInner={isInner}\n stateOption={[\n { tab: \"全部\", key: \"1\" },\n { tab: \"科目一\", key: \"2\" },\n {\n tab: \"科目二\",\n key: \"3\",\n },\n { tab: \"科目三\", key: \"4\" },\n { tab: \"科目四\", key: \"5\" },\n ]}\n />\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_StateBar\",\n packageName: \"@components/StateBar\",\n component: component_101\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_102\n}]\n},{\n title: `Radio State Bar`,\n description: `Radio State Bar`,\n code: `const { default: StateBar } = _StateBar;\nconst { Radio, Space } = antd;\nconst { useState } = React;\n\nconst BaseStateExample = () => {\n const [size, setSize] = useState(\"default\");\n return (\n <Space direction=\"vertical\">\n <Radio.Group\n value={size}\n options={[\n { label: \"small\", value: \"small\" },\n { label: \"default\", value: \"default\" },\n { label: \"large\", value: \"large\" },\n ]}\n onChange={(e) => {\n setSize(e.target.value);\n }}\n optionType=\"button\"\n buttonStyle=\"solid\"\n />\n <StateBar\n size={size}\n type=\"radio\"\n stateOption={[\n { tab: \"全部\", key: \"1\" },\n { tab: \"科目一\", key: \"2\" },\n { tab: \"科目二\", key: \"3\" },\n { tab: \"科目三\", key: \"4\" },\n { tab: \"科目四\", key: \"5\" },\n { tab: \"科目一1\", key: \"22\" },\n { tab: \"科目二2\", key: \"33\" },\n { tab: \"科目三3\", key: \"44\" },\n { tab: \"科目四4\", key: \"55\", style: { cursor: \"copy\" } },\n ]}\n />\n </Space>\n );\n};\n\nrender(<BaseStateExample />);\n\n`,\n scope: [{\n name: \"_StateBar\",\n packageName: \"@components/StateBar\",\n component: component_101\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_102\n}]\n},{\n title: `Step State Bar`,\n description: `Step State Bar`,\n code: `const { default: StateBar } = _StateBar;\n\nconst BaseStateExample = () => {\n return (\n <StateBar\n type=\"step\"\n stateOption={[\n { tab: \"全部\", key: \"1\" },\n { tab: \"科目一\", key: \"2\" },\n { tab: \"科目二\", key: \"3\" },\n { tab: \"科目三\", key: \"4\" },\n { tab: \"科目四\", key: \"5\" },\n { tab: \"科目一1\", key: \"22\" },\n { tab: \"科目二2\", key: \"33\" },\n { tab: \"科目三3\", key: \"44\" },\n { tab: \"科目四4\", key: \"55\", className: \"last\" },\n ]}\n tabBarExtraContent={<div>测试</div>}\n />\n );\n};\n\nrender(<BaseStateExample />);\n\n`,\n scope: [{\n name: \"_StateBar\",\n packageName: \"@components/StateBar\",\n component: component_101\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_103 from '@components/StateTag';\nimport * as component_104 from '@components/Descriptions';\nimport * as component_105 from 'lodash';\nconst readmeConfig = {\n name: `StateTag`,\n summary: `<p>用于展示标签</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>type</td>\n<td>tag的类型,类型决定显示的颜色</td>\n<td>'default'(#666666)、'skill'(#666666)(此时边框颜色为 #EEEEEE)、'success'(#027A48)、'progress'(#F09700)、'danger'(#D14343)、'info'(#155ACF)、'other'(#6740C3)(待定颜色)、'result'(#666666)、'filterResult'(#5CB8B2)</td>\n<td>'default'</td>\n</tr>\n<tr>\n<td>showBorder</td>\n<td>是否展示边框</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>showBackground</td>\n<td>是否展示背景色</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>text</td>\n<td>tag文案</td>\n<td>string</td>\n<td>''</td>\n</tr>\n<tr>\n<td>filterName</td>\n<td>tag类型为“filterResult”时显示在前边的文案</td>\n<td>string</td>\n<td>''</td>\n</tr>\n</tbody>\n</table>\n<p>其他参数参考 <a href=\"https://ant.design/components/tag-cn\">antd Tag.Tag</a></p>`,\n example: {\n isFull: true,\n className: `StateTag_cfeaa`,\n style: ``,\n list: [{\n title: `基本示例`,\n description: `状态标签`,\n code: `const { default: StateTag } = _StateTag;\nconst { default: Descriptions } = _Descriptions;\nconst { range } = lodash;\n\nconst BaseExample = () => {\n return (\n <div>\n <div>使用场景: 列表页Table,简历详情页</div>\n <br />\n <Descriptions\n dataSource={[\n [\n { label: \"使用规则\", content: \"待XX,暂停\" },\n { label: \"代码示例\", content: \\`{type: \"info\", text: \"标签内容\"}\\` },\n ],\n [\n {\n label: \"标签样式\",\n content: <StateTag {...{ type: \"info\", text: \"标签内容\" }} />,\n },\n {\n label: \"示例\",\n content: <StateTag {...{ type: \"info\", text: \"待提交开票\" }} />,\n },\n ],\n [\n { label: \"使用规则\", content: \"XX中,正在XX中\" },\n {\n label: \"代码示例\",\n content: \\`{type: \"progress\", text: \"退票审核中\"}\\`,\n },\n ],\n [\n {\n label: \"标签样式\",\n content: <StateTag {...{ type: \"progress\", text: \"标签内容\" }} />,\n },\n {\n label: \"示例\",\n content: (\n <StateTag {...{ type: \"progress\", text: \"退票审核中\" }} />\n ),\n },\n ],\n [\n { label: \"使用规则\", content: \"通过,成功,完成\" },\n {\n label: \"代码示例\",\n content: \\`{type: \"success\", text: \"标签内容\"}\\`,\n },\n ],\n [\n {\n label: \"标签样式\",\n content: <StateTag {...{ type: \"success\", text: \"标签内容\" }} />,\n },\n {\n label: \"示例\",\n content: <StateTag {...{ type: \"success\", text: \"标签内容\" }} />,\n },\n ],\n [\n { label: \"使用规则\", content: \"不通过,失败,淘汰,缺席,拒绝\" },\n {\n label: \"代码示例\",\n content: \\`{type: \"danger\", text: \"退票拒绝\"}\\`,\n },\n ],\n [\n {\n label: \"标签样式\",\n content: <StateTag {...{ type: \"danger\", text: \"标签内容\" }} />,\n },\n {\n label: \"示例\",\n content: <StateTag {...{ type: \"danger\", text: \"退票拒绝\" }} />,\n },\n ],\n [\n { label: \"使用规则\", content: \"取消,撤销,停止\" },\n { label: \"代码示例\", content: \\`{text: \"撤销开票审核\"}\\` },\n ],\n [\n {\n label: \"标签样式\",\n content: <StateTag {...{ text: \"标签内容\" }} />,\n },\n {\n label: \"示例\",\n content: <StateTag {...{ text: \"撤销开票审核\" }} />,\n },\n ],\n [\n { label: \"使用规则\", content: \"(暂时还未用到)\" },\n { label: \"代码示例\", content: \\`{type: \"other\", text: \"标签内容\"}\\` },\n ],\n [\n {\n label: \"标签样式\",\n content: <StateTag {...{ type: \"other\", text: \"标签内容\" }} />,\n },\n ],\n ]}\n />\n <br />\n <br />\n <div>个别特殊场景(需要单独询问UI):</div>\n <br />\n <Descriptions\n dataSource={[\n [\n { label: \"使用规则\", content: \"待XX,暂停\" },\n {\n label: \"示例\",\n content: (\n <div>\n <StateTag {...{ type: \"success\", text: \"已推荐简历\" }} />\n <StateTag {...{ type: \"success\", text: \"已退票\" }} />\n </div>\n ),\n },\n ],\n [\n { label: \"使用规则\", content: \"已XX待XX\" },\n {\n label: \"示例\",\n content: (\n <div>\n <StateTag {...{ type: \"success\", text: \"已开票待寄出\" }} />\n <StateTag {...{ type: \"success\", text: \"已待寄待收款\" }} />\n </div>\n ),\n },\n ],\n [\n {\n label: \"使用规则\",\n content: \"已XX+词语:根据后面的词语语义进行判断\",\n },\n {\n label: \"示例\",\n content: (\n <div>\n <StateTag {...{ type: \"success\", text: \"已成功\" }} />\n <StateTag {...{ type: \"default\", text: \"已取消\" }} />\n <StateTag {...{ type: \"danger\", text: \"已失败\" }} />\n <StateTag {...{ type: \"progress\", text: \"已暂停\" }} />\n </div>\n ),\n },\n ],\n [\n { label: \"使用规则\", content: \"完全根据语义语境判断\" },\n {\n label: \"示例\",\n content: (\n <div>\n <StateTag {...{ type: \"success\", text: \"全部到款\" }} />\n <StateTag {...{ type: \"success\", text: \"部分到款\" }} />\n <StateTag {...{ type: \"success\", text: \"简历亮点\" }} />\n <StateTag {...{ type: \"danger\", text: \"简历风险点\" }} />\n </div>\n ),\n },\n ],\n ]}\n />\n </div>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_StateTag\",\n packageName: \"@components/StateTag\",\n component: component_103\n},{\n name: \"_Descriptions\",\n packageName: \"@components/Descriptions\",\n component: component_104\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_105\n}]\n},{\n title: `基本示例`,\n description: `技能标签`,\n code: `const { default: StateTag } = _StateTag;\n\nconst BaseExample = () => {\n return (\n <div>\n <StateTag\n text={\"技能标签\"}\n type={\"skill\"}\n showBorder\n showBackground={false}\n />\n </div>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_StateTag\",\n packageName: \"@components/StateTag\",\n component: component_103\n}]\n},{\n title: `基本示例`,\n description: `下拉菜单、弹窗中已选结果标签`,\n code: `const { default: StateTag } = _StateTag;\n\nconst BaseExample = () => {\n return (\n <div>\n <StateTag\n text={\"技能标签\"}\n type={\"result\"}\n showBackground={false}\n closable\n onClose={() => console.log(\"close\")}\n />\n <StateTag\n text={\"技能标签\"}\n type={\"result\"}\n closable\n onClose={() => console.log(\"close\")}\n />\n </div>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_StateTag\",\n packageName: \"@components/StateTag\",\n component: component_103\n}]\n},{\n title: `基本示例`,\n description: `筛选组件中筛选结果标签`,\n code: `const { default: StateTag } = _StateTag;\n\nconst BaseExample = () => {\n return (\n <div>\n <StateTag\n filterName={\"BD\"}\n text={\"陈枫林,王晓晨\"}\n type={\"filterResult\"}\n closable\n onClose={() => console.log(\"close\")}\n />\n <br />\n <StateTag\n filterName={\"添加人\"}\n text={\"陈枫林,王晓晨,陈路,张力\"}\n type={\"filterResult\"}\n closable\n onClose={() => console.log(\"close\")}\n />\n </div>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_StateTag\",\n packageName: \"@components/StateTag\",\n component: component_103\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_111 from '@components/Table';\nimport * as component_112 from '@components/Global';\nimport * as component_113 from '@kne/react-fetch';\nimport * as component_114 from 'lodash';\nimport * as component_115 from 'antd';\nconst readmeConfig = {\n name: `Table`,\n summary: `<p>可以从后端获取数据,然后展示为一个表格</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: true,\n className: `Table_51c45`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Table } = _Table;\nconst { PureGlobal } = _Global;\nconst { preset } = reactFetch;\n\nconst ajax = (config) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n if (config.url === \"/api/v1/user/user/user_key_get\") {\n resolve({\n data: {\n code: 0,\n data: \\`{\"date\":{\"visible\":false},\"serialNumber\":{\"width\":400}}\\`,\n },\n });\n } else if (config.url === \"/api/v1/user/user/user_key_set\") {\n console.log(config.data);\n resolve({\n data: {\n code: 0,\n data: \"\",\n },\n });\n }\n }, 100);\n });\n};\n\npreset({\n ajax,\n});\n\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n ajax,\n tableServerApis: {\n getDataApi: (name) => {\n return {\n url: \"/api/v1/user/user/user_key_get\",\n method: \"GET\",\n params: {\n key: \\`table_config_v2_\\${name}\\`,\n },\n transformResponse: (response) => {\n const { data } = response;\n response.data = Object.assign({}, data, {\n data: (() => {\n try {\n return JSON.parse(data.data);\n } catch (e) {\n return [];\n }\n })(),\n });\n\n response.data = {\n code: response.data.code === 0 ? 200 : data.code,\n msg: response.data.msg,\n results: response.data.data,\n };\n\n return response;\n },\n cache: \"TABLE_PAGE_CONFIG\",\n };\n },\n setDataFunc: (name, data) => {\n return ajax({\n url: \"/api/v1/user/user/user_key_set\",\n data: {\n map: {\n [\\`table_config_v2_\\${name}\\`]: JSON.stringify(data),\n },\n },\n });\n },\n },\n }}\n >\n <Table\n name=\"test-table\"\n onTablePropsReady={({ columns, dataSource }) => {\n console.log({ columns, dataSource });\n }}\n dataSource={[\n {\n id: 0,\n date: \"2021-07-21\",\n datetime: \"2023-07-22 09:00:00\",\n serialNumber: \"SX00192932323434\",\n serialNumberShort: \"SH0023\",\n userName: \"林珊珊\",\n title: \"我是主要字段\",\n tagEnum: null,\n enUserName: \"Lin Shanshan\",\n phoneNumber: \"+86 18792877372\",\n email: \"a@a.com\",\n count: 4,\n description:\n \"我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述\",\n description2:\n \"我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述\",\n other: \"其他信息\",\n },\n {\n id: 1,\n date: \"\",\n datetime: \"2023-07-22 09:00:00\",\n serialNumber: \"SX00192932323434\",\n serialNumberShort: \"SH0023\",\n userName: \"林珊珊1\",\n title: \"我是主要字段\",\n tagEnum: \"Y\",\n enUserName: \"Lin Shanshan\",\n phoneNumber: null,\n email: \"a@a.com\",\n count: 5,\n description: \"我是一段描述\",\n description2: \"我是一段描述\",\n other: \"其他信息\",\n },\n ]}\n columns={[\n {\n name: \"date\",\n title: \"日期\",\n type: \"date\",\n hover: true,\n },\n {\n name: \"datetime\",\n title: \"日期时间\",\n type: \"datetime\",\n hideSecond: true,\n },\n {\n name: \"serialNumber\",\n title: \"编号\",\n type: \"serialNumber\",\n primary: true,\n onClick: async (item) => {\n console.log(item);\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true);\n }, 10000);\n });\n },\n },\n {\n name: \"serialNumberShort\",\n title: \"短编号\",\n type: \"serialNumberShort\",\n },\n {\n name: \"title\",\n title: \"主要信息\",\n type: \"mainInfo\",\n },\n {\n name: \"tag\",\n title: \"状态标签\",\n type: \"tag\",\n valueOf: () => ({ type: \"success\", text: \"审核通过\" }),\n },\n {\n name: \"tagEnum\",\n title: \"标签枚举\",\n type: \"tag\",\n valueOf: (item) =>\n item.tagEnum && {\n type: \"success\",\n isEnum: true,\n moduleName: \"marital\",\n name: item.tagEnum,\n },\n },\n {\n name: \"avatar\",\n title: \"头像\",\n type: \"avatar\",\n valueOf: () => ({ gender: \"F\" }),\n },\n {\n name: \"user\",\n title: \"用户\",\n type: \"user\",\n valueOf: (item) => \\`\\${item.enUserName} \\${item.userName}\\`,\n },\n {\n name: \"hideInfo\",\n title: \"隐藏字段\",\n type: \"hideInfo\",\n valueOf: (item) =>\n item[\"phoneNumber\"] && {\n loader: () => {\n return item[\"phoneNumber\"] + \"-\" + item[\"id\"];\n },\n },\n },\n {\n name: \"userName\",\n title: \"用户名\",\n type: \"userName\",\n },\n {\n name: \"contacts\",\n title: \"联系人\",\n type: \"contacts\",\n valueOf: (item) => \\`\\${item.userName} \\${item.phoneNumber}\\`,\n },\n {\n name: \"count\",\n title: \"数量\",\n type: \"singleRow\",\n render: ({ target }) => {\n return target.count === 5 ? { hover: true } : { hover: false };\n },\n },\n {\n name: \"description\",\n title: \"描述\",\n type: \"description\",\n },\n {\n name: \"description2\",\n title: \"描述(省略)\",\n type: \"description\",\n ellipsis: true,\n },\n {\n name: \"other\",\n title: \"其他\",\n type: \"other\",\n hover: true,\n },\n {\n name: \"options\",\n title: \"操作\",\n type: \"options\",\n valueOf: (item) => [\n {\n onClick: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n },\n children: \"分配\",\n message: \"确定要分配吗\",\n isDelete: false,\n },\n {\n children: \"审核\",\n },\n {\n onClick: () => {\n console.log(item);\n },\n children: \"淘汰\",\n },\n {\n onClick: () => {\n console.log(item);\n },\n children: \"一键约面\",\n },\n {\n children: \"删除\",\n confirm: true,\n onClick: () => {\n console.log(\"删除\");\n },\n },\n ],\n },\n ]}\n />\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Table\",\n packageName: \"@components/Table\",\n component: component_111\n},{\n name: \"_Global\",\n packageName: \"@components/Global\",\n component: component_112\n},{\n name: \"reactFetch\",\n packageName: \"@kne/react-fetch\",\n component: component_113\n}]\n},{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { PureGlobal } = _Global;\nconst { TablePage } = _Table;\nconst { range } = lodash;\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n features: {\n debug: true,\n profile: {\n id: \"erc\",\n type: \"system\",\n name: \"业务系统\",\n children: [\n {\n id: \"test\",\n type: \"feature\",\n name: \"测试功能\",\n options: {\n hiddenColumns: [\"date\", \"datetime\"],\n },\n },\n ],\n },\n },\n }}\n >\n <TablePage\n featureId=\"test\"\n sticky={false}\n rowSelection={{\n type: \"checkbox\",\n }}\n loader={() => {\n return {\n addUserName: \"我是大魔王\",\n pageData: range(0, 50).map((index) => ({\n id: index,\n date: \"2021-07-21\",\n datetime: \"2023-07-22 09:00:00\",\n serialNumber: \"SX00192932323434\",\n serialNumberShort: \"SH0023\",\n userName: \"林珊珊\" + index,\n title: \"我是主要字段\",\n enUserName: \"Lin Shanshan\",\n phoneNumber: \"+86 18792877372\",\n email: \"a@a.com\",\n count: 5,\n description:\n \"我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述\",\n other: \"其他信息\",\n })),\n totalCount: 50,\n };\n }}\n columns={[\n {\n name: \"date\",\n title: \"日期\",\n type: \"date\",\n hover: true,\n },\n {\n name: \"datetime\",\n title: \"日期时间\",\n type: \"datetime\",\n },\n {\n name: \"dateRange\",\n title: \"日期范围\",\n type: \"dateRange\",\n valueOf: ({ date, datetime }) => [date, datetime],\n },\n {\n name: \"serialNumber\",\n title: \"编号\",\n type: \"serialNumber\",\n primary: true,\n },\n {\n name: \"serialNumberShort\",\n title: \"短编号\",\n type: \"serialNumberShort\",\n },\n {\n name: \"title\",\n title: \"主要信息\",\n type: \"mainInfo\",\n },\n {\n name: \"phone\",\n title: \"手机号\",\n type: \"hideInfo\",\n primary: true,\n valueOf: (item) => ({\n loader: () => {\n return item[\"phoneNumber\"] + \"-\" + item[\"id\"];\n },\n }),\n },\n {\n name: \"email\",\n title: \"邮箱\",\n type: \"hideInfo\",\n valueOf: (item) => ({\n loader: () => {\n return item[\"email\"] + \"-\" + item[\"id\"];\n },\n children: (data) => {\n return \\`\\${data},\\${item[\"userName\"]}\\`;\n },\n }),\n },\n {\n name: \"tag\",\n title: \"状态标签\",\n type: \"tag\",\n valueOf: () => ({ type: \"success\", text: \"审核通过\" }),\n },\n {\n name: \"avatar\",\n title: \"头像\",\n type: \"avatar\",\n valueOf: () => ({ gender: \"F\" }),\n },\n {\n name: \"user\",\n title: \"用户\",\n type: \"user\",\n valueOf: (item) => \\`\\${item.enUserName} \\${item.userName}\\`,\n },\n {\n name: \"userName\",\n title: \"用户名\",\n type: \"userName\",\n },\n {\n name: \"contacts\",\n title: \"联系人\",\n type: \"contacts\",\n valueOf: (item) => \\`\\${item.userName} \\${item.phoneNumber}\\`,\n },\n {\n name: \"count\",\n title: \"数量\",\n type: \"singleRow\",\n },\n {\n name: \"description\",\n title: \"描述(省略)\",\n type: \"description\",\n ellipsis: true,\n },\n {\n name: \"other\",\n title: \"其他\",\n type: \"other\",\n hover: true,\n },\n {\n name: \"addUser\",\n title: \"添加人\",\n type: \"user\",\n render: ({ data }) => ({ valueOf: () => data.addUserName }),\n },\n {\n name: \"options\",\n title: \"操作\",\n type: \"options\",\n fixed: \"right\",\n valueOf: (item) => [\n {\n onClick: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n },\n children: \"编辑\",\n disabled: true,\n },\n {\n children: \"审核\",\n },\n {\n onClick: () => {\n console.log(item);\n },\n children: \"淘汰\",\n },\n {\n onClick: () => {\n console.log(item);\n },\n children: \"一键约面\",\n },\n {\n children: \"删除\",\n },\n ],\n },\n ]}\n />\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Table\",\n packageName: \"@components/Table\",\n component: component_111\n},{\n name: \"lodash\",\n packageName: \"lodash\",\n component: component_114\n},{\n name: \"_Global\",\n packageName: \"@components/Global\",\n component: component_112\n}]\n},{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Table } = _Table;\nconst { PureGlobal } = _Global;\nconst { preset } = reactFetch;\nconst { useState } = React;\nconst { Input } = antd;\nconst ajax = (config) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n if (config.url === \"/api/v1/user/user/user_key_get\") {\n resolve({\n data: {\n code: 0,\n data: \\`{\"date\":{},\"serialNumber\":{\"width\":400}}\\`,\n },\n });\n } else if (config.url === \"/api/v1/user/user/user_key_set\") {\n console.log(config.data);\n resolve({\n data: {\n code: 0,\n data: \"\",\n },\n });\n }\n }, 100);\n });\n};\n\npreset({\n ajax,\n});\n\nconst ValueEdit = ({ value, targetRender }) => {\n const [isEdit, setIsEdit] = useState(false);\n return (\n <span\n onClick={() => {\n setIsEdit(true);\n }}\n >\n {isEdit ? (\n <Input\n type=\"text\"\n size=\"small\"\n defaultValue={value}\n onBlur={() => {\n setIsEdit(false);\n }}\n />\n ) : (\n targetRender(value)\n )}\n </span>\n );\n};\n\nconst BaseExample = () => {\n return (\n <PureGlobal\n preset={{\n ajax,\n tableServerApis: {\n getDataApi: (name) => {\n return {\n url: \"/api/v1/user/user/user_key_get\",\n method: \"GET\",\n params: {\n key: \\`table_config_v2_\\${name}\\`,\n },\n transformResponse: (response) => {\n const { data } = response;\n response.data = Object.assign({}, data, {\n data: (() => {\n try {\n return JSON.parse(data.data);\n } catch (e) {\n return [];\n }\n })(),\n });\n\n response.data = {\n code: response.data.code === 0 ? 200 : data.code,\n msg: response.data.msg,\n results: response.data.data,\n };\n\n return response;\n },\n cache: \"TABLE_PAGE_CONFIG\",\n };\n },\n setDataFunc: (name, data) => {\n return ajax({\n url: \"/api/v1/user/user/user_key_set\",\n data: {\n map: {\n [\\`table_config_v2_\\${name}\\`]: JSON.stringify(data),\n },\n },\n });\n },\n },\n }}\n >\n <Table\n name=\"test-table\"\n dataSource={[\n {\n id: 0,\n date: \"2021-07-21\",\n datetime: \"2023-07-22 09:00:00\",\n serialNumber: \"SX00192932323434\",\n serialNumberShort: \"SH0023\",\n userName: \"林珊珊\",\n title: \"我是主要字段\",\n tagEnum: \"Y\",\n enUserName: \"Lin Shanshan\",\n phoneNumber: \"+86 18792877372\",\n email: \"a@a.com\",\n count: 4,\n description:\n \"我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述\",\n description2:\n \"我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述我是一段描述\",\n other: \"其他信息\",\n },\n {\n id: 1,\n date: \"\",\n datetime: \"2023-07-22 09:00:00\",\n serialNumber: \"SX00192932323434\",\n serialNumberShort: \"SH0023\",\n userName: \"林珊珊1\",\n title: \"我是主要字段\",\n tagEnum: \"Y\",\n enUserName: \"Lin Shanshan\",\n phoneNumber: \"+86 18792877372\",\n email: \"a@a.com\",\n count: 5,\n description: \"我是一段描述\",\n description2: \"我是一段描述\",\n other: \"其他信息\",\n },\n ]}\n columns={[\n {\n name: \"date\",\n title: \"日期\",\n sort: true,\n groupHeader: [\n {\n name: \"group1\",\n title: \"分组1\",\n },\n {\n name: \"group1-1\",\n title: \"分组1-1\",\n },\n ],\n type: \"date\",\n hover: true,\n },\n {\n name: \"datetime\",\n title: \"日期时间\",\n sort: true,\n groupHeader: [\n {\n name: \"group1\",\n title: \"分组1\",\n },\n {\n name: \"group1-2\",\n title: \"分组1-2\",\n },\n ],\n type: \"datetime\",\n },\n {\n name: \"serialNumber\",\n title: \"编号\",\n sort: true,\n groupHeader: [\n {\n name: \"group1\",\n title: \"分组1\",\n },\n {\n name: \"group1-1\",\n title: \"分组1-1\",\n },\n ],\n type: \"serialNumber\",\n primary: true,\n },\n {\n name: \"serialNumberShort\",\n title: \"短编号\",\n type: \"serialNumberShort\",\n },\n {\n name: \"title\",\n title: \"主要信息\",\n type: \"mainInfo\",\n disableColItem: true,\n valueOf: (item, { targetRender }) => (\n <ValueEdit value={item[\"title\"]} targetRender={targetRender} />\n ),\n },\n {\n name: \"tag\",\n title: \"状态标签\",\n type: \"tag\",\n valueOf: () => ({ type: \"success\", text: \"审核通过\" }),\n },\n {\n name: \"tagEnum\",\n title: \"标签枚举\",\n type: \"tag\",\n valueOf: (item) => ({\n type: \"success\",\n isEnum: true,\n moduleName: \"marital\",\n name: item.tagEnum,\n }),\n },\n {\n name: \"avatar\",\n title: \"头像\",\n type: \"avatar\",\n valueOf: () => ({ gender: \"F\" }),\n },\n {\n name: \"user\",\n title: \"用户\",\n type: \"user\",\n valueOf: (item) => \\`\\${item.enUserName} \\${item.userName}\\`,\n },\n {\n name: \"hideInfo\",\n title: \"隐藏字段\",\n type: \"hideInfo\",\n valueOf: (item) => ({\n loader: () => {\n return item[\"phoneNumber\"] + \"-\" + item[\"id\"];\n },\n }),\n },\n {\n name: \"userName\",\n title: \"用户名\",\n type: \"userName\",\n },\n {\n name: \"contacts\",\n title: \"联系人\",\n type: \"contacts\",\n valueOf: (item) => \\`\\${item.userName} \\${item.phoneNumber}\\`,\n },\n {\n name: \"count\",\n title: \"数量\",\n type: \"singleRow\",\n render: ({ target }) => {\n return target.count === 5 ? { hover: true } : { hover: false };\n },\n },\n {\n name: \"description\",\n title: \"描述\",\n type: \"description\",\n },\n {\n name: \"description2\",\n title: \"描述(省略)\",\n type: \"description\",\n ellipsis: true,\n },\n {\n name: \"other\",\n title: \"其他\",\n type: \"other\",\n hover: true,\n sort: true,\n },\n {\n name: \"options\",\n title: \"操作\",\n type: \"options\",\n fixed: \"right\",\n sort: true,\n valueOf: (item) => [\n {\n onClick: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 1000);\n });\n },\n children: \"分配Program及教练\",\n },\n {\n children: \"审核\",\n },\n {\n onClick: () => {\n console.log(item);\n },\n children: \"淘汰\",\n },\n {\n onClick: () => {\n console.log(item);\n },\n children: \"一键约面\",\n },\n {\n children: \"删除\",\n },\n ],\n },\n ]}\n onSortChange={(sort) => {\n console.log(\">>>>>>\", sort);\n }}\n />\n </PureGlobal>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Table\",\n packageName: \"@components/Table\",\n component: component_111\n},{\n name: \"_Global\",\n packageName: \"@components/Global\",\n component: component_112\n},{\n name: \"reactFetch\",\n packageName: \"@kne/react-fetch\",\n component: component_113\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_115\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_106 from '@components/TablePage';\nimport * as component_107 from 'lodash';\nimport * as component_108 from '@components/Global';\nimport * as component_109 from '@kne/react-fetch';\nimport * as component_110 from 'dayjs';\nconst readmeConfig = {\n name: `TablePage`,\n summary: `<p>可以从后端获取数据,然后展示为一个表格</p>\n<p><em><strong>(已废弃,不建议使用,请用Table的TablePage组件代替)</strong></em></p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>dataFormat</td>\n<td>用于处理后端返回的数据,作为表格数据</td>\n<td>function</td>\n<td>(data) =&gt; {return {list: data.data.pageData,total: data.data.totalCount};}</td>\n</tr>\n<tr>\n<td>pagination</td>\n<td>控制分页参数</td>\n<td>object</td>\n<td>{showSizeChanger: true,showQuickJumper: true,open: true,paramsType: 'data',requestType: 'reload',current: 'currentPage',pageSize: 'perPage',defaultPageSize: 20,size: 'default'}</td>\n</tr>\n<tr>\n<td>getColumns</td>\n<td>获取colums参数的函数,该函数的参数可以拿到请求结果数据,如果不传该函数则默认取colums属性 getColumns({data,formatData}),可以返回Promise</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>stickyOffset</td>\n<td>sticky模式,table header距离顶部位置,默认会取 --nav-height,注意:该组件会覆盖调sticky中设置的值,导致其设置不生效,需要配置该参数来实现功能</td>\n<td>string</td>\n<td>var(--nav-height)</td>\n</tr>\n<tr>\n<td>controllerOpen</td>\n<td>是否开启列控制,调整列宽和列显示</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n</tbody>\n</table>\n<p>其他参数参考</p>\n<p>表格参数:</p>\n<p><a href=\"https://ant.design/components/table-cn/\">antd Table</a></p>\n<p>请求数据参数:</p>\n<p><a href=\"/lib/react-fetch\">react-fetch</a></p>`,\n example: {\n isFull: true,\n className: `TablePage_b85cd`,\n style: `.TablePage_b85cd .table-Limit-height {\n height: 600px;\n overflow: auto;\n max-width: 1000px;\n margin: 0 auto;\n}`,\n list: [{\n title: `普通表格`,\n description: `展示一个普通的表格`,\n code: `const { default: TablePage } = tablePage;\nconst { PureGlobal } = global;\nconst { range } = _;\nconst { preset } = reactFetch;\n\nconst ajax = (config) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n if (config.url === \"/api/v1/user/user/user_key_get\") {\n resolve({\n data: {\n code: 0,\n data: \\`[{\\\"id\\\":\\\"clientName\\\",\\\"name\\\":\\\"客户名称\\\",\\\"width\\\":341,\\\"chosen\\\":false,\\\"selected\\\":false},{\\\"id\\\":\\\"city\\\",\\\"name\\\":\\\"工作地点\\\",\\\"width\\\":341,\\\"chosen\\\":false,\\\"selected\\\":false},{\\\"id\\\":\\\"startTime\\\",\\\"name\\\":\\\"职位开始时间\\\",\\\"hidden\\\":false,\\\"width\\\":200,\\\"chosen\\\":false,\\\"selected\\\":false},{\\\"id\\\":\\\"options\\\",\\\"name\\\":\\\"操作\\\",\\\"fixed\\\":\\\"right\\\",\\\"width\\\":341}]\\`,\n },\n });\n } else if (config.url === \"/api/v1/user/user/user_key_set\") {\n console.log(config.data);\n resolve({\n data: {\n code: 0,\n data: \"\",\n },\n });\n }\n }, 100);\n });\n};\n\npreset({\n ajax,\n});\n\nconst Example = () => {\n return (\n <PureGlobal\n preset={{\n ajax,\n tablePageServerApis: {\n getDataApi: (name) => {\n return {\n url: \"/api/v1/user/user/user_key_get\",\n method: \"GET\",\n params: {\n key: \\`table_config_\\${name}\\`,\n },\n transformResponse: (response) => {\n const { data } = response;\n response.data = Object.assign({}, data, {\n data: (() => {\n try {\n return JSON.parse(data.data);\n } catch (e) {\n return [];\n }\n })(),\n });\n\n response.data = {\n code: response.data.code === 0 ? 200 : data.code,\n msg: response.data.msg,\n results: response.data.data,\n };\n\n return response;\n },\n cache: \"TABLE_PAGE_CONFIG\",\n };\n },\n setDataFunc: (name, data) => {\n return ajax({\n url: \"/api/v1/user/user/user_key_set\",\n data: {\n map: {\n [\\`table_config_\\${name}\\`]: JSON.stringify(data),\n },\n },\n });\n },\n },\n }}\n >\n <TablePage\n name=\"test1\"\n rowSelection={{\n type: \"checkbox\",\n }}\n columns={[\n {\n title: (\n <div>\n 职位名称<i>~</i>\n </div>\n ),\n titleText: \"职位名称\",\n key: \"positionName\",\n fixed: \"left\",\n dataIndex: \"positionName\",\n },\n {\n title: \"客户名称\",\n key: \"clientName\",\n dataIndex: \"clientName\",\n },\n {\n title: \"工作地点\",\n key: \"city\",\n dataIndex: \"city\",\n },\n {\n title: \"工作地点1\",\n key: \"city1\",\n dataIndex: \"city\",\n },\n {\n title: \"工作地点2\",\n key: \"city2\",\n dataIndex: \"city\",\n },\n {\n title: \"工作地点3\",\n key: \"city3\",\n dataIndex: \"city\",\n },\n {\n title: \"工作地点4\",\n key: \"city4\",\n dataIndex: \"city\",\n },\n {\n title: \"工作地点5\",\n key: \"city5\",\n dataIndex: \"city\",\n },\n {\n title: \"工作地点6\",\n key: \"city6\",\n dataIndex: \"city\",\n },\n {\n title: \"工作地点7\",\n key: \"city7\",\n dataIndex: \"city\",\n },\n {\n title: \"工作地点8\",\n key: \"city8\",\n dataIndex: \"city\",\n },\n {\n title: \"工作地点9\",\n key: \"city9\",\n dataIndex: \"city\",\n },\n {\n title: \"职位开始时间\",\n key: \"startTime\",\n dataIndex: \"startTime\",\n hidden: true,\n },\n {\n title: \"操作\",\n key: \"options\",\n fixed: \"right\",\n width: 300,\n render: () => {\n return \"操作\";\n },\n },\n ]}\n sticky={false}\n data={{ currentPage: 1, perPage: 20 }}\n loader={({ data }) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n pageData: range(data.perPage).map((index) => ({\n id: index + (data.currentPage - 1) * data.perPage + 1,\n positionName:\n \"市场运营总监\" +\n (index + (data.currentPage - 1) * data.perPage + 1),\n clientName: \"大众\",\n city: \"北京\",\n startTime: \"2020-01-10\",\n })),\n totalCount: 100,\n });\n }, 100);\n });\n }}\n />\n </PureGlobal>\n );\n};\n\nrender(<Example />);\n\n`,\n scope: [{\n name: \"tablePage\",\n packageName: \"@components/TablePage\",\n component: component_106\n},{\n name: \"_\",\n packageName: \"lodash\",\n component: component_107\n},{\n name: \"global\",\n packageName: \"@components/Global\",\n component: component_108\n},{\n name: \"reactFetch\",\n packageName: \"@kne/react-fetch\",\n component: component_109\n}]\n},{\n title: `树形数据`,\n description: `展示一个树形数据的表格`,\n code: `const { default: TablePage } = tablePage;\nconst { range } = _;\n\nconst Example = () => {\n return (\n <TablePage\n name=\"test1\"\n columns={[\n {\n title: \"职位名称\",\n key: \"positionName\",\n fixed: \"left\",\n dataIndex: \"positionName\",\n },\n {\n title: \"客户名称\",\n key: \"clientName\",\n dataIndex: \"clientName\",\n },\n {\n title: \"工作地点\",\n key: \"city\",\n dataIndex: \"city\",\n },\n {\n title: \"职位开始时间\",\n key: \"startTime\",\n dataIndex: \"startTime\",\n hidden: true,\n },\n {\n title: \"操作\",\n key: \"options\",\n fixed: \"right\",\n width: 300,\n render: () => {\n return \"操作\";\n },\n },\n ]}\n sticky={false}\n data={{ currentPage: 1, perPage: 20 }}\n loader={({ data }) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n pageData: range(data.perPage).map((index) => ({\n id: index + (data.currentPage - 1) * data.perPage + 1,\n positionName:\n \"市场运营总监\" +\n (index + (data.currentPage - 1) * data.perPage + 1),\n clientName: \"大众\",\n city: \"北京\",\n startTime: \"2020-01-10\",\n children: range(10).map((i) => {\n return {\n id:\n index +\n (data.currentPage - 1) * data.perPage +\n 1 +\n \"-\" +\n i,\n positionName:\n \"市场运营总监\" +\n (index + (data.currentPage - 1) * data.perPage + 1) +\n \"-\" +\n i,\n clientName: \"大众\",\n city: \"北京\",\n startTime: \"2020-01-10\",\n children:\n index === 0\n ? [\n {\n id:\n index +\n (data.currentPage - 1) * data.perPage +\n 1 +\n \"-\" +\n i +\n \"-last\",\n positionName: \"最后一层\",\n clientName: \"最后一层\",\n city: \"最后一层\",\n startTime: \"2020-01-10\",\n },\n ]\n : null,\n };\n }),\n })),\n totalCount: 100,\n });\n }, 100);\n });\n }}\n />\n );\n};\n\nrender(<Example />);\n\n`,\n scope: [{\n name: \"tablePage\",\n packageName: \"@components/TablePage\",\n component: component_106\n},{\n name: \"_\",\n packageName: \"lodash\",\n component: component_107\n}]\n},{\n title: `固定表头表格`,\n description: `展示一个固定表头的表格`,\n code: `const { default: TablePage } = tablePage;\nconst { range } = _;\nconst { useRef } = React;\n\nconst Example = () => {\n const ref = useRef();\n return (\n <div className=\"table-Limit-height\" ref={ref}>\n <div\n style={{\n height: 700,\n }}\n >\n 请往下拉\n </div>\n <TablePage\n stickyOffset=\"0px\"\n scroller={{\n getContainer: () => ref.current,\n }}\n data={{ currentPage: 1, perPage: 20 }}\n columns={[\n {\n title: \"职位名称\",\n key: \"positionName\",\n fixed: \"left\",\n dataIndex: \"positionName\",\n },\n {\n title: \"客户名称\",\n key: \"clientName\",\n dataIndex: \"clientName\",\n },\n {\n title: \"工作地点\",\n key: \"city\",\n dataIndex: \"city\",\n },\n {\n title: \"职位开始时间\",\n key: \"startTime\",\n dataIndex: \"startTime\",\n },\n ]}\n loader={({ data }) => {\n return {\n pageData: range(data.perPage).map((index) => ({\n id: index + (data.currentPage - 1) * data.perPage + 1,\n positionName:\n \"市场运营总监\" +\n (index + (data.currentPage - 1) * data.perPage + 1),\n clientName: \"大众\",\n city: \"北京\",\n startTime: \"2020-01-10\",\n })),\n totalCount: 100,\n };\n }}\n />\n </div>\n );\n};\n\nrender(<Example />);\n\n`,\n scope: [{\n name: \"tablePage\",\n packageName: \"@components/TablePage\",\n component: component_106\n},{\n name: \"_\",\n packageName: \"lodash\",\n component: component_107\n}]\n},{\n title: `日期格式化表格`,\n description: `展示一个日期格式化表格`,\n code: `const { default: TablePage } = tablePage;\nconst { range } = _;\nconst dayjs = dayjs;\n\nconst dateFormat = (target) => {\n return dayjs(target).format(\"YYYY-MM-DD HH:mm:ss\");\n};\n\nconst Example = () => {\n return (\n <TablePage\n sticky={false}\n columns={[\n {\n title: \"职位名称\",\n key: \"positionName\",\n fixed: \"left\",\n dataIndex: \"positionName\",\n },\n {\n title: \"客户名称\",\n key: \"clientName\",\n dataIndex: \"clientName\",\n },\n {\n title: \"工作地点\",\n key: \"city\",\n dataIndex: \"city\",\n },\n {\n title: \"职位开始时间\",\n key: \"startTime\",\n dataIndex: \"startTime\",\n render: dateFormat,\n },\n {\n title: \"职位结束时间\",\n key: \"endTime\",\n dataIndex: \"endTime\",\n render: dateFormat,\n },\n ]}\n data={{ currentPage: 1, perPage: 10 }}\n loader={({ data }) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n pageData: range(data.perPage).map((index) => ({\n id: index + (data.currentPage - 1) * data.perPage + 1,\n positionName:\n \"市场运营总监\" +\n (index + (data.currentPage - 1) * data.perPage + 1),\n clientName: \"大众\",\n city: \"北京\",\n startTime: \"2020-01-10\",\n endTime: \"2020-02-10\",\n })),\n totalCount: 48,\n });\n }, 1000);\n });\n }}\n />\n );\n};\n\nrender(<Example />);\n\n`,\n scope: [{\n name: \"tablePage\",\n packageName: \"@components/TablePage\",\n component: component_106\n},{\n name: \"_\",\n packageName: \"lodash\",\n component: component_107\n},{\n name: \"dayjs\",\n packageName: \"dayjs\",\n component: component_110\n}]\n},{\n title: `动态column获取`,\n description: `展示动态column获取的表格`,\n code: `const { default: TablePage } = tablePage;\nconst { range } = _;\n\nconst Example = () => {\n return (\n <TablePage\n sticky={false}\n getColumns={({ data, formatData }) => {\n console.log(data, formatData);\n return Promise.resolve([\n {\n title: \"职位名称\",\n key: \"positionName\",\n fixed: \"left\",\n dataIndex: \"positionName\",\n },\n {\n title: \"客户名称\",\n key: \"clientName\",\n dataIndex: \"clientName\",\n },\n {\n title: \"工作地点\",\n key: \"city\",\n dataIndex: \"city\",\n },\n {\n title: \"职位开始时间\",\n key: \"startTime\",\n dataIndex: \"startTime\",\n },\n ]);\n }}\n data={{ currentPage: 1, perPage: 20 }}\n loader={({ data }) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n pageData: range(data.perPage).map((index) => ({\n id: index + (data.currentPage - 1) * data.perPage + 1,\n positionName:\n \"市场运营总监\" +\n (index + (data.currentPage - 1) * data.perPage + 1),\n clientName: \"大众\",\n city: \"北京\",\n startTime: \"2020-01-10\",\n })),\n totalCount: 100,\n });\n }, 1000);\n });\n }}\n />\n );\n};\n\nrender(<Example />);\n\n`,\n scope: [{\n name: \"tablePage\",\n packageName: \"@components/TablePage\",\n component: component_106\n},{\n name: \"_\",\n packageName: \"lodash\",\n component: component_107\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_116 from '@components/Tooltip';\nimport * as component_117 from 'antd/lib/space';\nimport * as component_118 from '@components/FormInfo';\nimport * as component_119 from '@kne/react-fetch';\nimport * as component_120 from '@components/Descriptions';\nimport * as component_121 from '@components/StateTag';\nconst readmeConfig = {\n name: `Tooltip`,\n summary: `<p>简单的文字提示气泡框</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>size</td>\n<td>默认宽度 360,small 宽度 240</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>title</td>\n<td>标题内容</td>\n<td>string,jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>showInfo</td>\n<td>展示标题旁的提示按钮</td>\n<td>boolean</td>\n<td>-</td>\n</tr>\n<tr>\n<td>importantInfo</td>\n<td>重要内容</td>\n<td>string,jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>subtitle</td>\n<td>副标题</td>\n<td>string,jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>content</td>\n<td>内容</td>\n<td>string,jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>importantInfoType</td>\n<td>重要内容类型,success,error,warning</td>\n<td>string,jsx</td>\n<td>-</td>\n</tr>\n<tr>\n<td>moreInfo</td>\n<td>其他内容</td>\n<td>jsx</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>TooltipFetch</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>api</td>\n<td>获取数据的接口,参考@kne/react-fetch</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>fetchContent</td>\n<td>当api接口返回值的时候调用,可以获取到接口参数,返回值会更新到Tootip的参数中</td>\n<td>function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: `Tooltip_c9830`,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Tooltip, TooltipInfoLabel } = _Tooltip;\nconst { default: Space } = space;\nconst {\n default: FormInfo,\n Form,\n Input,\n TypeDateRangePicker,\n SubmitButton,\n CancelButton,\n} = formInfo;\n\nconst MoreInfo = () => {\n return (\n <Form>\n <FormInfo\n column={1}\n list={[\n <Input label=\"姓名\" name=\"name\" rule=\"REQ\" />,\n <TypeDateRangePicker\n name=\"type_date\"\n label=\"日期时间段\"\n rule=\"REQ\"\n />,\n <Space\n style={{\n width: \"100%\",\n justifyContent: \"end\",\n }}\n >\n <CancelButton>取消</CancelButton>\n <SubmitButton>确定</SubmitButton>\n </Space>,\n ]}\n />\n </Form>\n );\n};\n\nconst BaseExample = () => {\n return (\n <Space>\n <Tooltip content=\"这里显示完整的信息\">小段信息</Tooltip>\n <Tooltip\n size=\"small\"\n content=\"这里显示完整的信息完整的信息,这里显示完整的信息完整的信息这里显示完整的信息完整的信息这里显示完整的信息完整的信息,这里显示完整的信息。\"\n >\n 大段信息\n </Tooltip>\n <Tooltip title=\"标题\" content=\"内容描述内容描述内容。\">\n 带有标题的小段信息\n </Tooltip>\n <Tooltip\n title=\"标题\"\n content=\"内容描述内容描述内容描述内容描述内容描述内容描述内容描述内容描述内容描述内容描述内容描述\"\n >\n 带有标题的大段信息\n </Tooltip>\n <Tooltip\n importantInfo=\"筛选日期范围内,职位上安排顾问面试的候选人总数。根据所填写的顾问【面试面试】时间来进行统计,而非在系统的操作时间。\"\n subtitle=\"示例:\"\n content=\"2022.10.21在系统操作顾问面试,但填写的顾问面试时间为2022.10.20,则数据会统计在2022.10.20,而非2022.10.21 。\"\n >\n 带有重要信息\n </Tooltip>\n <TooltipInfoLabel\n title=\"带有Info信息\"\n tooltipTitle={{\n importantInfo:\n \"筛选日期范围内,职位上安排顾问面试的候选人总数。根据所填写的顾问【面试面试】时间来进行统计,而非在系统的操作时间。\",\n subtitle: \"示例:\",\n content:\n \"2022.10.21在系统操作顾问面试,但填写的顾问面试时间为2022.10.20,则数据会统计在2022.10.20,而非2022.10.21 。\",\n }}\n />\n <Tooltip\n trigger=\"click\"\n title=\"标题\"\n content=\"辅助信息描述内容辅助信息描述内容辅助信息描述内容辅助信息描述内容辅助信息描述内容\"\n moreInfo={<MoreInfo />}\n >\n 带有表单信息\n </Tooltip>\n </Space>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Tooltip\",\n packageName: \"@components/Tooltip\",\n component: component_116\n},{\n name: \"space\",\n packageName: \"antd/lib/space\",\n component: component_117\n},{\n name: \"formInfo\",\n packageName: \"@components/FormInfo\",\n component: component_118\n}]\n},{\n title: `带有远程数据加载的提示`,\n description: `展示带有远程数据加载的提示`,\n code: `const { TooltipFetch } = _Tooltip;\nconst { preset } = reactFetch;\nconst { default: Descriptions } = _Descriptions;\nconst { default: StateTag } = _StateTag;\n\npreset({\n ajax: () => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n data: {\n code: 0,\n data: {\n clientName: \"腾讯\",\n title: \"腾讯科技公司\",\n type: \"增值税专用发票\",\n date: \"2022-08-15\",\n },\n },\n });\n }, 1000);\n });\n },\n});\n\nconst BaseExample = () => {\n return (\n <TooltipFetch\n api={{\n url: \"/api/data\",\n }}\n size=\"large\"\n fetchContent={(data) => {\n return {\n content: (\n <Descriptions\n dataSource={[\n [\n { label: \"客户名称\", content: data.clientName },\n { label: \"发票抬头\", content: data.title },\n ],\n [\n { label: \"发票类型\", content: data.type },\n { label: \"发票日期\", content: data.date },\n ],\n ]}\n />\n ),\n };\n }}\n >\n <StateTag text=\"哈哈哈\" />\n </TooltipFetch>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Tooltip\",\n packageName: \"@components/Tooltip\",\n component: component_116\n},{\n name: \"reactFetch\",\n packageName: \"@kne/react-fetch\",\n component: component_119\n},{\n name: \"_Descriptions\",\n packageName: \"@components/Descriptions\",\n component: component_120\n},{\n name: \"_StateTag\",\n packageName: \"@components/StateTag\",\n component: component_121\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import ButtonGroup from '@components/ButtonGroup/README.md';\nimport Common from '@components/Common/README.md';\nimport ConfirmButton from '@components/ConfirmButton/README.md';\nimport Content from '@components/Content/README.md';\nimport Descriptions from '@components/Descriptions/README.md';\nimport Drawer from '@components/Drawer/README.md';\nimport Enum from '@components/Enum/README.md';\nimport Features from '@components/Features/README.md';\nimport File from '@components/File/README.md';\nimport FileList from '@components/FileList/README.md';\nimport FilePreview from '@components/FilePreview/README.md';\nimport Filter from '@components/Filter/README.md';\nimport FlexBox from '@components/FlexBox/README.md';\nimport FormInfo from '@components/FormInfo/README.md';\nimport Global from '@components/Global/README.md';\nimport HelperGuide from '@components/HelperGuide/README.md';\nimport Highlight from '@components/Highlight/README.md';\nimport HistoryStore from '@components/HistoryStore/README.md';\nimport Icon from '@components/Icon/README.md';\nimport Image from '@components/Image/README.md';\nimport InfoPage from '@components/InfoPage/README.md';\nimport Intl from '@components/Intl/README.md';\nimport Layout from '@components/Layout/README.md';\nimport LoadingButton from '@components/LoadingButton/README.md';\nimport Menu from '@components/Menu/README.md';\nimport Modal from '@components/Modal/README.md';\nimport Navigation from '@components/Navigation/README.md';\nimport Notification from '@components/Notification/README.md';\nimport Permissions from '@components/Permissions/README.md';\nimport StateBar from '@components/StateBar/README.md';\nimport StateTag from '@components/StateTag/README.md';\nimport Table from '@components/Table/README.md';\nimport TablePage from '@components/TablePage/README.md';\nimport Tooltip from '@components/Tooltip/README.md';export default {ButtonGroup,Common,ConfirmButton,Content,Descriptions,Drawer,Enum,Features,File,FileList,FilePreview,Filter,FlexBox,FormInfo,Global,HelperGuide,Highlight,HistoryStore,Icon,Image,InfoPage,Intl,Layout,LoadingButton,Menu,Modal,Navigation,Notification,Permissions,StateBar,StateTag,Table,TablePage,Tooltip};\nexport const manifest = {\"name\":\"components-core\",\"version\":\"0.2.1\",\"open-version\":true,\"public-url\":\"/components-core\",\"modules\":[{\"name\":\"ButtonGroup\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/ButtonGroup\"},{\"name\":\"Common\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Common\"},{\"name\":\"ConfirmButton\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/ConfirmButton\"},{\"name\":\"Content\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Content\"},{\"name\":\"Descriptions\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Descriptions\"},{\"name\":\"Drawer\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Drawer\"},{\"name\":\"Enum\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Enum\"},{\"name\":\"Features\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Features\"},{\"name\":\"File\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/File\"},{\"name\":\"FileList\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/FileList\"},{\"name\":\"FilePreview\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/FilePreview\"},{\"name\":\"Filter\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Filter\"},{\"name\":\"FlexBox\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/FlexBox\"},{\"name\":\"FormInfo\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/FormInfo\"},{\"name\":\"Global\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Global\"},{\"name\":\"HelperGuide\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/HelperGuide\"},{\"name\":\"Highlight\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Highlight\"},{\"name\":\"HistoryStore\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/HistoryStore\"},{\"name\":\"Icon\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Icon\"},{\"name\":\"Image\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Image\"},{\"name\":\"InfoPage\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/InfoPage\"},{\"name\":\"Intl\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Intl\"},{\"name\":\"Layout\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Layout\"},{\"name\":\"LoadingButton\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/LoadingButton\"},{\"name\":\"Menu\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Menu\"},{\"name\":\"Modal\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Modal\"},{\"name\":\"Navigation\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Navigation\"},{\"name\":\"Notification\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Notification\"},{\"name\":\"Permissions\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Permissions\"},{\"name\":\"StateBar\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/StateBar\"},{\"name\":\"StateTag\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/StateTag\"},{\"name\":\"Table\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Table\"},{\"name\":\"TablePage\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/TablePage\"},{\"name\":\"Tooltip\",\"baseDir\":\"/home/runner/work/components-core/components-core/src/components/Tooltip\"}]};"],"names":["getItem","key","target","window","localStorage","dataType","value","JSON","parse","Number","Boolean","e","setItem","stringify","areaWidthComputed","memoize","_ref","amountWidth","moreBtnWidth","buttonWidthList","spaceProps","compact","spaceWidth","indexOf","size","isInteger","targetLength","targetWidth","length","_ref2","concat","join","Object","values","toString","ButtonGroup","_ref3","list","more","props","pick","showLength","setShowLength","useState","computedLength","useRefCallback","el","targetRef","current","moreEl","moreRef","widthEl","ref","buttonEls","querySelectorAll","clientWidth","map","call","offsetWidth","startTransition","useResize","otherList","slice","renderButton","renderItem","index","isDropdown","className","classnames","style","confirm","buttonComponent","isConfirm","message","CurrentButton","ConfirmButton","LoadingButton","_createElement","danger","isDelete","assign","isModal","SpaceComponent","Space","Compact","_jsxs","_Fragment","children","_jsx","item","Dropdown","overlayClassName","menu","items","label","defaultProps","Button","Icon","type","Label","setWidth","useRef","useLayoutEffect","computed","width","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","Content","labelAlign","col","gutter","labelWidthListRef","maxLabelWidth","setMaxLabelWidth","Row","filter","display","content","block","featureId","render","Col","span","minWidth","textAlign","Math","max","Features","id","dataSource","isFull","colItem","colIndex","_colItem","itemIndex","wrap","Title","currentTab","setCurrentTab","previewMap","previewList","getPermission","currentPreviewFileId","setCurrentPreviewFileId","itemApis","maxWidth","getPopupContainer","align","justify","Segmented","onChange","options","FormattedMessage","moduleName","get","Select","variant","popupMatchSelectWidth","filename","userName","date","ossId","Option","direction","FileType","last","split","Typography","Text","ellipsis","dayjs","format","OptionButtons","hasPreview","apis","count","locale","en-US","zh-CN","context","createContext","Provider","useContext","useReactContext","DragButton","onOpenChange","getDragButtonEl","onClick","open","UploadButton","accept","onFileSelected","InputFileText","multiple","DragAreaOuter","title","fileSize","maxLength","dragButtonRef","dragOuterRef","useOutside","contains","IntlProvider","importMessages","onDragEnter","UploadTips","_ref4","icon","renderTips","tipsText","useIntl","formatMessage","str","replace","defaultTips","DragArea","_ref5","onDragOver","stopPropagation","preventDefault","dataTransfer","dropEffect","onDrop","files","fileList","Array","from","file","acceptFunc","onDragEnd","shape","FileListInner","_previewMap$get","setList","defaultTab","defaultPreviewFileId","currentApis","titleExtra","baseApis","usePreset","uploadingList","useFileUpload","concurrentCount","onAdd","onSave","ossUpload","App","useApp","useMemo","Map","useEffect","onPreview","onDelete","async","newList","findIndex","splice","success","name","onEdit","formData","titleExtraInner","Divider","List","FilePreview","originName","Empty","image","PRESENTED_IMAGE_SIMPLE","MAX_VALUE","FileUpload","flex","Line","ComponentItem","FilterLines","displayLine","extra","hasMore","isExpand","setIsExpand","defaultMessage","filterValue","extraExpand","StateTag","filterName","text","isArray","closable","onClose","newValue","FilterOuter","valueBase","useControlValue","isNotEmpty","newFilterValue","clone","set","delete","defaultValue","Filter","others","FilterValueDisplay","active","WrappedComponent","interceptor","setOpen","FilterItem","allowClear","arguments","valueType","useSelectInnerContext","SelectInnerInput","TreeFieldInner","selected","setValue","setSelect","fetchApi","dataFormat","single","isPopup","searchPlaceholder","fieldNamesRef","fieldNames","fetchData","data","treeData","SimpleBar","Tree","omit","checkable","onCheck","checkedKeys","onSelect","selectKeys","selectKey","newCurrent","push","selectedKeys","undefined","TreeField","checkStrictly","treeToList","nodeList","core","forEach","node","PopoverItem","onValidate","placement","state","setState","disabled","Popover","trigger","placeholder","Input","computedFilterValue","range","unit","isNumber","InputFilterItem","InputNumber","borderLeft","borderRight","pointerEvents","DatePickerFilterItem","withFieldItem","picker","DatePicker","startOf","endOf","Date","valueOf","RangePicker","allowEmpty","TypeDateRangePickerField","pickerValue","withInputDefaultPlaceholder","AdvancedSelectFilterItem","AdvancedSelectField","UserFilterItem","UserField","FunctionSelectFilterItem","FunctionSelectField","IndustrySelectFilterItem","IndustrySelectField","CityFilterItem","AddressSelectField","CascaderFilterItem","CascaderField","TreeFilterItem","InputFilterItemField","NumberRangeFilterItem","NumberRangeFilterItemField","transform","result","CheckableTag","Tag","CityFilterItemInner","addressApi","cityList","getChinaHotCities","city","code","getLabelForLocal","checked","find","error","_ref6","getCityValue","getCity","withAddressApi","ListFilterItem","custom","itemValue","isEqual","fields","propsValue","inputValue","setInputValue","setActive","searchHandler","useSimulationBlur","inputValueRef","onFocus","onPressEnter","Flex","gap","AdvancedFilter","createWithIntl","vertical","MoreFilterLines","advancedFields","getFilterValue","HighlightProvider","highlightClassName","caseSensitive","Highlight","tagName","renderStr","allWordsRe","word","match","regExp","RegExp","innerMatch","createElement","dangerouslySetInnerHTML","__html","HistoryStore","storeName","zIndex","openHistory","useCallback","storeNameRef","appendHistory","dropWhile","uniqBy","close","outerRef","useClickOutside","popoverChildrenRef","popoverContentRef","onSelectRef","callback","mutationObserver","MutationObserver","subtree","childList","transitionName","arrow","setOnSelect","menuOpen","menuWidth","menuFixed","menuCloseButton","backgroundColor","header","headerHeight","headerFixed","headerInfo","backUrl","titleLeftExtra","noMargin","noPadding","optionFooterHeight","option","optionWidth","optionNoPadding","optionFixed","optionFooter","Consumer","isFixed","pageMenuOpenKey","Menu","pageProps","setPageProps","pathModuleName","useLocation","pathname","FixedContainer","pageResult","PageInner","isPass","propsRef","localMenuOpen","useMenuOpen","localMenuOpenRef","targetProps","Result","status","subTitle","Page","openFeatures","offsetTop","offsetBottom","AntdAffix","targetKey","offsetHeight","useContainerHeight","Header","Affix","navigationHeight","ContainerHeight","HeaderInfo","headerInfoRef","navigator","useNavigate","padding","AntdLayout","ErrorComponent","Alert","showIcon","action","location","reload","ErrorBoundary","ReactErrorBoundary","errorComponent","Layout","theme","navigation","scrollLeft","setScrollLeft","_setPageProps","permissions","usePermissions","scrollEl","getScrollEl","handlerScroll","addEventListener","removeEventListener","Navigation","path","PageTitle","helperGuideName","HelperGuide","Permissions","forwardRef","page","topArea","tableData","setTableData","PermissionsPage","Table","onRequestSuccess","stateBar","StateBar","MenuItem","iconType","request","isOpen","isSelected","fetchOptions","depth","onLoad","allowCollapsed","hasChildren","refresh","isLoading","useFetch","auto","Spin","search","selectedKey","setSelectKeyChange","setItems","targetItems","defaultOpenKeys","links","childrenKeys","hasStartIcon","_childrenKeys$root","nodeMapping","traversal","parentKey","paths","currentKey","targetItem","originItem","treeEnhance","matchedPath","ensureSlash","openKeys","setOpenKeys","renderChildren","parentId","newOpenKeys","defaultItems","SetTitle","mapping","defaultTitle","document","headerLogo","rightOptions","showIndex","indexLabel","overflowedIndicator","base","navigate","navigationRef","resizeObserverRef","nameLabel","setNameLabel","entries","permission","menuDom","exist","i","getAttribute","_nameLabel","mutationObserverInitConfig","attributes","indexNav","setTimeout","Image","src","logo","alt","mode","_path","LEVEL","NotificationItem","level","groupLength","subtitle","link","setGlobal","useGlobalContext","ajax","useLoading","_apis$notification","resData","notification","read","ids","min","reverse","number","_apis$notification2","Notification","global","headOptionRef","headOptionHeight","setHeadOptionHeight","_headOptionRef$curren","clientHeight","expand","groupList","group","groupBy","some","_apis$notification3","QueueAnim","leaveReverse","duration","interval","groupKey","_groupList$filter2","_groupList$filter","firstItem","first","computedIsPass","permissionsPath","usePermissionsPass","Tooltip","stateOption","isInner","Tabs","animated","tab","tagTypeEnum","default","skill","color","borderColor","filterResult","progress","info","other","showBorder","showBackground","tagColor","_tagTypeEnum$type","_tagTypeEnum$type2","background","border","hidden","tooltip","ColItem","isEmpty","emptyRender","hover","primary","colValue","loading","setLoading","columnsStyle","Promise","resolve","event","finally","DisplayInfo","createWithFetch","api","onExpand","Ellipsis","_ref17","columnTypes","isValid","dateShort","dateRange","datetime","hideSecond","serialNumber","serialNumberShort","user","_ref7","_ref8","contacts","_ref9","tag","_ref10","isEnum","Enum","force","_ref11","description","avatar","_ref12","Avatar","singleRow","_ref13","hideInfo","HideInfoComponent","mainInfo","_ref14","_ref15","_ref16","OptionsList","sensitiveInfo","_ref18","otherSmall","otherLarge","Panel","Collapse","onConfirm","columns","config","searchText","setSearchText","leftFixedColumns","rightFixedColumns","visibleColumns","hiddenColumns","fixed","sort","a","b","renderColumn","titleText","groupHeader","defaultActiveKey","ghost","bordered","Item","Checkbox","ReactSortable","dragClass","ghostClass","forceFallback","newConfig","cloneDeep","columnsList","handlerColumnsChange","animation","delayOnTouchStart","delay","visible","SearchInput","prefix","onSearch","TableConfig","setConfig","ColumnsControlContent","controllerOpen","tableWidth","currentMoveColumnIndex","setCurrentMoveColumnIndex","currentMoveColumnIndexRef","currentMoveColumnRef","startPointRef","setConfigBase","tableServerApis","tablePageServerParams","getDataApi","saveConfig","useDebouncedCallback","setDataFunc","send","cache","isLocal","getTableConfig","computedIndex","lastNotOptionsColumnIndex","findLastIndex","totalWidth","sumBy","computedRealWidth","resizeBarRender","column","onMouseDown","clientX","resize","delta","currentWidth","computedColumnProps","targetColumn","movingClass","realWidth","onHeaderCell","onCell","shouldCellUpdate","record","prevRecord","handlerCancelResize","handlerResize","documentElement","columnsConfig","rowKey","renderProps","expandInfo","setExpandInfo","columnRenderPropsRef","expandType","titleRender","emptyOf","disableColItem","otherColProps","isNil","targetRender","itemKey","colProps","targetRenderWithProps","hasOwnProperty","groupHeaderColumns","newColumns","appendGroupHeader","columnIndex","targetHeader","otherHeader","currentGroup","startIndex","groupColumn","hasGroupHeader","sortArrayToMap","setSort","mapSort","setMapSort","newSort","targetValue","sticky","stickyOffset","pagination","columnRenderProps","summary","scroll","onTablePropsReady","setTableWidth","isLayout","setIsLayout","isDebounce","useColumnTypeProps","computedColumnConfigProps","useTableConfig","sortRender","useSort","targetColumns","groupColumns","useGroupHeader","onTablePropsReadyCallback","Scroller","scroller","getContainer","getScrollTarget","querySelector","AntdTable","x","_len","args","_key","pageData","FeaturesColumnsConfig","TablePageInner","withFetch","requestParams","fetchProps","isComplete","setData","loadMore","getColumns","handlerDataFormat","formatData","tableProps","total","showTotal","paramsType","currentName","pageSize","requestType","pageSizeName","onShowSizeChange","scrollTop","showSizeChanger","showQuickJumper","totalCount","pageSizeKey","toUpperCase","setPageSize","params","fetchParams","example","scope","packageName","component","ButtonText","Common","Descriptions","Drawer","File","FileList","FlexBox","FormInfo","Global","InfoPage","Intl","Modal","TablePage","manifest"],"sourceRoot":""}