@cfmm/umi-plugins-ui-v2 0.0.1

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 (526) hide show
  1. package/README.md +29 -0
  2. package/dist/cjs/components/ActionLogDrawer.tpl +148 -0
  3. package/dist/cjs/components/AddDrawerForm.tpl +38 -0
  4. package/dist/cjs/components/AuthorizeRender.tpl +11 -0
  5. package/dist/cjs/components/Authorized.tpl +39 -0
  6. package/dist/cjs/components/AuthorizedRoute.tpl +33 -0
  7. package/dist/cjs/components/AvatarDropdown.tpl +101 -0
  8. package/dist/cjs/components/CheckPermissions.tpl +100 -0
  9. package/dist/cjs/components/CopyButton.tpl +49 -0
  10. package/dist/cjs/components/CrudTable.tpl +650 -0
  11. package/dist/cjs/components/DicDropDownList.tpl +60 -0
  12. package/dist/cjs/components/DndTabs.tpl +159 -0
  13. package/dist/cjs/components/DndTag.tpl +89 -0
  14. package/dist/cjs/components/DropdownButton.tpl +123 -0
  15. package/dist/cjs/components/DynamicIcon.tpl +73 -0
  16. package/dist/cjs/components/DynamicIconModal.tpl +196 -0
  17. package/dist/cjs/components/EditMultiLangForm.tpl +366 -0
  18. package/dist/cjs/components/ExportPageWrapper.tpl +224 -0
  19. package/dist/cjs/components/FlieListModal.tpl +79 -0
  20. package/dist/cjs/components/FormUpload.tpl +561 -0
  21. package/dist/cjs/components/GlobalFooter.tpl +21 -0
  22. package/dist/cjs/components/GlobalHeader.less +51 -0
  23. package/dist/cjs/components/GlobalHeader.tpl +313 -0
  24. package/dist/cjs/components/HeaderSearch.less +32 -0
  25. package/dist/cjs/components/HeaderSearch.tpl +92 -0
  26. package/dist/cjs/components/HighlightStr.tpl +41 -0
  27. package/dist/cjs/components/ImportDataUpload.tpl +94 -0
  28. package/dist/cjs/components/ImportExecl.less +10 -0
  29. package/dist/cjs/components/ImportExecl.tpl +108 -0
  30. package/dist/cjs/components/KeepAliveDndTabs.tpl +151 -0
  31. package/dist/cjs/components/KeepAliveTabs.less +23 -0
  32. package/dist/cjs/components/KeepAliveTabs.tpl +136 -0
  33. package/dist/cjs/components/Loading.css +19 -0
  34. package/dist/cjs/components/LoadingSvg.tpl +14 -0
  35. package/dist/cjs/components/MenuFooter.css +13 -0
  36. package/dist/cjs/components/MenuFooter.tpl +24 -0
  37. package/dist/cjs/components/MyColorPicker.tpl +19 -0
  38. package/dist/cjs/components/MyFooterToolbar.css +6 -0
  39. package/dist/cjs/components/MyFooterToolbar.tpl +56 -0
  40. package/dist/cjs/components/MyPageContainer.tpl +43 -0
  41. package/dist/cjs/components/MyReactEcharts.tpl +11 -0
  42. package/dist/cjs/components/MySelect.tpl +267 -0
  43. package/dist/cjs/components/MySelectLang.tpl +22 -0
  44. package/dist/cjs/components/MySetps.tpl +85 -0
  45. package/dist/cjs/components/MyTagList.tpl +57 -0
  46. package/dist/cjs/components/MyUpload.less +39 -0
  47. package/dist/cjs/components/MyUpload.tpl +609 -0
  48. package/dist/cjs/components/NoFoundPage.tpl +46 -0
  49. package/dist/cjs/components/PDFWrapper.tpl +96 -0
  50. package/dist/cjs/components/PageLoading.tpl +16 -0
  51. package/dist/cjs/components/PermissionSelect.tpl +230 -0
  52. package/dist/cjs/components/ProFormUTCDatePicker.tpl +20 -0
  53. package/dist/cjs/components/ProFormUTCRangePicker.tpl +20 -0
  54. package/dist/cjs/components/PromiseRender.tpl +93 -0
  55. package/dist/cjs/components/QrCodeModal.tpl +19 -0
  56. package/dist/cjs/components/RandomAvatar.tpl +34 -0
  57. package/dist/cjs/components/RefDrawerForm.tpl +75 -0
  58. package/dist/cjs/components/ReportTable.tpl +336 -0
  59. package/dist/cjs/components/Secured.tpl +66 -0
  60. package/dist/cjs/components/ThemeSwitch.tpl +74 -0
  61. package/dist/cjs/components/TimeTypeSelect.tpl +35 -0
  62. package/dist/cjs/components/TipsTableTitle.tpl +37 -0
  63. package/dist/cjs/components/UTCDatePicker.tpl +107 -0
  64. package/dist/cjs/components/UTCRangePicker.tpl +142 -0
  65. package/dist/cjs/components/UpdateForm.tpl +32 -0
  66. package/dist/cjs/components/UserDisable.tpl +58 -0
  67. package/dist/cjs/components/UserNoPagePermission.tpl +58 -0
  68. package/dist/cjs/components/UserNoPermission.tpl +58 -0
  69. package/dist/cjs/components/ViewTableItemDrawer.tpl +29 -0
  70. package/dist/cjs/components/VolumeFormItem.tpl +59 -0
  71. package/dist/cjs/components/WangEditor.css +53 -0
  72. package/dist/cjs/components/WangEditor.tpl +174 -0
  73. package/dist/cjs/components/WangEditorView.tpl +24 -0
  74. package/dist/cjs/components/fileTypeMap.tpl +96 -0
  75. package/dist/cjs/components/renderAuthorize.tpl +44 -0
  76. package/dist/cjs/context/KeepAliveTabs.tpl +13 -0
  77. package/dist/cjs/context/index.tpl +1 -0
  78. package/dist/cjs/hooks/useAction.tpl +126 -0
  79. package/dist/cjs/hooks/useActionLocales.tpl +108 -0
  80. package/dist/cjs/hooks/useAuthority.tpl +27 -0
  81. package/dist/cjs/hooks/useColumnTitle.tpl +47 -0
  82. package/dist/cjs/hooks/useFormatLocale.tpl +82 -0
  83. package/dist/cjs/hooks/useKeepAliveTabs.tpl +255 -0
  84. package/dist/cjs/hooks/useMatchRoute.tpl +76 -0
  85. package/dist/cjs/hooks/useMemoizedFn.tpl +32 -0
  86. package/dist/cjs/hooks/useOutlet.tpl +20 -0
  87. package/dist/cjs/hooks/usePageExport.tpl +155 -0
  88. package/dist/cjs/hooks/useQueryTableList.tpl +91 -0
  89. package/dist/cjs/hooks/useRouteAuth.tpl +122 -0
  90. package/dist/cjs/index.d.ts +6 -0
  91. package/dist/cjs/index.js +122 -0
  92. package/dist/cjs/locales/en-US.d.ts +163 -0
  93. package/dist/cjs/locales/en-US.js +16 -0
  94. package/dist/cjs/locales/enUS/ActionLogDrawer.d.ts +6 -0
  95. package/dist/cjs/locales/enUS/ActionLogDrawer.js +11 -0
  96. package/dist/cjs/locales/enUS/DynamicIconModal.d.ts +4 -0
  97. package/dist/cjs/locales/enUS/DynamicIconModal.js +9 -0
  98. package/dist/cjs/locales/enUS/EditMultiLangForm.d.ts +16 -0
  99. package/dist/cjs/locales/enUS/EditMultiLangForm.js +21 -0
  100. package/dist/cjs/locales/enUS/File.d.ts +54 -0
  101. package/dist/cjs/locales/enUS/File.js +60 -0
  102. package/dist/cjs/locales/enUS/GlobalFooter.d.ts +4 -0
  103. package/dist/cjs/locales/enUS/GlobalFooter.js +9 -0
  104. package/dist/cjs/locales/enUS/GlobalHeader.d.ts +10 -0
  105. package/dist/cjs/locales/enUS/GlobalHeader.js +15 -0
  106. package/dist/cjs/locales/enUS/MyFooterToolbar.d.ts +5 -0
  107. package/dist/cjs/locales/enUS/MyFooterToolbar.js +10 -0
  108. package/dist/cjs/locales/enUS/PermissionSelect.d.ts +4 -0
  109. package/dist/cjs/locales/enUS/PermissionSelect.js +9 -0
  110. package/dist/cjs/locales/enUS/TimeTypeSelect.d.ts +6 -0
  111. package/dist/cjs/locales/enUS/TimeTypeSelect.js +11 -0
  112. package/dist/cjs/locales/enUS/common.d.ts +74 -0
  113. package/dist/cjs/locales/enUS/common.js +82 -0
  114. package/dist/cjs/locales/enUS/index.d.ts +163 -0
  115. package/dist/cjs/locales/enUS/index.js +25 -0
  116. package/dist/cjs/locales/enUS/pages.d.ts +10 -0
  117. package/dist/cjs/locales/enUS/pages.js +15 -0
  118. package/dist/cjs/locales/th-TH.d.ts +163 -0
  119. package/dist/cjs/locales/th-TH.js +16 -0
  120. package/dist/cjs/locales/zh-CN.d.ts +163 -0
  121. package/dist/cjs/locales/zh-CN.js +16 -0
  122. package/dist/cjs/locales/zh-TW.d.ts +162 -0
  123. package/dist/cjs/locales/zh-TW.js +16 -0
  124. package/dist/cjs/locales/zhCN/ActionLogDrawer.d.ts +6 -0
  125. package/dist/cjs/locales/zhCN/ActionLogDrawer.js +11 -0
  126. package/dist/cjs/locales/zhCN/DynamicIconModal.d.ts +4 -0
  127. package/dist/cjs/locales/zhCN/DynamicIconModal.js +9 -0
  128. package/dist/cjs/locales/zhCN/EditMultiLangForm.d.ts +16 -0
  129. package/dist/cjs/locales/zhCN/EditMultiLangForm.js +21 -0
  130. package/dist/cjs/locales/zhCN/File.d.ts +54 -0
  131. package/dist/cjs/locales/zhCN/File.js +60 -0
  132. package/dist/cjs/locales/zhCN/GlobalFooter.d.ts +4 -0
  133. package/dist/cjs/locales/zhCN/GlobalFooter.js +9 -0
  134. package/dist/cjs/locales/zhCN/GlobalHeader.d.ts +10 -0
  135. package/dist/cjs/locales/zhCN/GlobalHeader.js +15 -0
  136. package/dist/cjs/locales/zhCN/MyFooterToolbar.d.ts +5 -0
  137. package/dist/cjs/locales/zhCN/MyFooterToolbar.js +10 -0
  138. package/dist/cjs/locales/zhCN/PermissionSelect.d.ts +4 -0
  139. package/dist/cjs/locales/zhCN/PermissionSelect.js +9 -0
  140. package/dist/cjs/locales/zhCN/TimeTypeSelect.d.ts +6 -0
  141. package/dist/cjs/locales/zhCN/TimeTypeSelect.js +11 -0
  142. package/dist/cjs/locales/zhCN/common.d.ts +74 -0
  143. package/dist/cjs/locales/zhCN/common.js +82 -0
  144. package/dist/cjs/locales/zhCN/index.d.ts +163 -0
  145. package/dist/cjs/locales/zhCN/index.js +25 -0
  146. package/dist/cjs/locales/zhCN/pages.d.ts +10 -0
  147. package/dist/cjs/locales/zhCN/pages.js +15 -0
  148. package/dist/cjs/locales/zhTW/ActionLogDrawer.d.ts +6 -0
  149. package/dist/cjs/locales/zhTW/ActionLogDrawer.js +11 -0
  150. package/dist/cjs/locales/zhTW/DynamicIconModal.d.ts +4 -0
  151. package/dist/cjs/locales/zhTW/DynamicIconModal.js +9 -0
  152. package/dist/cjs/locales/zhTW/EditMultiLangForm.d.ts +16 -0
  153. package/dist/cjs/locales/zhTW/EditMultiLangForm.js +21 -0
  154. package/dist/cjs/locales/zhTW/File.d.ts +53 -0
  155. package/dist/cjs/locales/zhTW/File.js +59 -0
  156. package/dist/cjs/locales/zhTW/GlobalFooter.d.ts +4 -0
  157. package/dist/cjs/locales/zhTW/GlobalFooter.js +9 -0
  158. package/dist/cjs/locales/zhTW/GlobalHeader.d.ts +10 -0
  159. package/dist/cjs/locales/zhTW/GlobalHeader.js +15 -0
  160. package/dist/cjs/locales/zhTW/MyFooterToolbar.d.ts +5 -0
  161. package/dist/cjs/locales/zhTW/MyFooterToolbar.js +10 -0
  162. package/dist/cjs/locales/zhTW/PermissionSelect.d.ts +4 -0
  163. package/dist/cjs/locales/zhTW/PermissionSelect.js +9 -0
  164. package/dist/cjs/locales/zhTW/TimeTypeSelect.d.ts +6 -0
  165. package/dist/cjs/locales/zhTW/TimeTypeSelect.js +11 -0
  166. package/dist/cjs/locales/zhTW/common.d.ts +74 -0
  167. package/dist/cjs/locales/zhTW/common.js +82 -0
  168. package/dist/cjs/locales/zhTW/index.d.ts +162 -0
  169. package/dist/cjs/locales/zhTW/index.js +25 -0
  170. package/dist/cjs/locales/zhTW/pages.d.ts +10 -0
  171. package/dist/cjs/locales/zhTW/pages.js +15 -0
  172. package/dist/cjs/services/index.tpl +160 -0
  173. package/dist/cjs/types/ActionLogDrawerTypes.d.ts +1 -0
  174. package/dist/cjs/types/ActionLogDrawerTypes.js +7 -0
  175. package/dist/cjs/types/AvatarDropdownTypes.d.ts +1 -0
  176. package/dist/cjs/types/AvatarDropdownTypes.js +7 -0
  177. package/dist/cjs/types/CrudTableTypes.d.ts +1 -0
  178. package/dist/cjs/types/CrudTableTypes.js +7 -0
  179. package/dist/cjs/types/DatePickerTypes.d.ts +1 -0
  180. package/dist/cjs/types/DatePickerTypes.js +7 -0
  181. package/dist/cjs/types/DicDropDownListTypes.d.ts +1 -0
  182. package/dist/cjs/types/DicDropDownListTypes.js +7 -0
  183. package/dist/cjs/types/DndTabsTypes.d.ts +1 -0
  184. package/dist/cjs/types/DndTabsTypes.js +7 -0
  185. package/dist/cjs/types/DndTagTypes.d.ts +1 -0
  186. package/dist/cjs/types/DndTagTypes.js +7 -0
  187. package/dist/cjs/types/DropdownButtonTypes.d.ts +2 -0
  188. package/dist/cjs/types/DropdownButtonTypes.js +8 -0
  189. package/dist/cjs/types/DynamicIconTypes.d.ts +1 -0
  190. package/dist/cjs/types/DynamicIconTypes.js +7 -0
  191. package/dist/cjs/types/EditMultiLangFormTypes.d.ts +1 -0
  192. package/dist/cjs/types/EditMultiLangFormTypes.js +7 -0
  193. package/dist/cjs/types/ExportPageWrapperTypes.d.ts +1 -0
  194. package/dist/cjs/types/ExportPageWrapperTypes.js +7 -0
  195. package/dist/cjs/types/GlobalHeaderTypes.d.ts +1 -0
  196. package/dist/cjs/types/GlobalHeaderTypes.js +7 -0
  197. package/dist/cjs/types/HeaderSearchTypes.d.ts +1 -0
  198. package/dist/cjs/types/HeaderSearchTypes.js +7 -0
  199. package/dist/cjs/types/HighlightStrTypes.d.ts +1 -0
  200. package/dist/cjs/types/HighlightStrTypes.js +7 -0
  201. package/dist/cjs/types/ImportDataUploadTypes.d.ts +1 -0
  202. package/dist/cjs/types/ImportDataUploadTypes.js +7 -0
  203. package/dist/cjs/types/ImportExeclTypes.d.ts +1 -0
  204. package/dist/cjs/types/ImportExeclTypes.js +7 -0
  205. package/dist/cjs/types/KeepAliveTabsTypes.d.ts +1 -0
  206. package/dist/cjs/types/KeepAliveTabsTypes.js +7 -0
  207. package/dist/cjs/types/MenuFooterTypes.d.ts +1 -0
  208. package/dist/cjs/types/MenuFooterTypes.js +7 -0
  209. package/dist/cjs/types/MyFooterToolbarTypes.d.ts +1 -0
  210. package/dist/cjs/types/MyFooterToolbarTypes.js +7 -0
  211. package/dist/cjs/types/MyPageContainerTypes.d.ts +1 -0
  212. package/dist/cjs/types/MyPageContainerTypes.js +7 -0
  213. package/dist/cjs/types/MySelectLangTypes.d.ts +1 -0
  214. package/dist/cjs/types/MySelectLangTypes.js +7 -0
  215. package/dist/cjs/types/MySelectTypes.d.ts +1 -0
  216. package/dist/cjs/types/MySelectTypes.js +7 -0
  217. package/dist/cjs/types/MySetpsTypes.d.ts +1 -0
  218. package/dist/cjs/types/MySetpsTypes.js +7 -0
  219. package/dist/cjs/types/MyTagListTypes.d.ts +1 -0
  220. package/dist/cjs/types/MyTagListTypes.js +7 -0
  221. package/dist/cjs/types/MyUploadTypes.d.ts +1 -0
  222. package/dist/cjs/types/MyUploadTypes.js +7 -0
  223. package/dist/cjs/types/PermissionSelectTypes.d.ts +1 -0
  224. package/dist/cjs/types/PermissionSelectTypes.js +7 -0
  225. package/dist/cjs/types/QrCodeModalTypes.d.ts +1 -0
  226. package/dist/cjs/types/QrCodeModalTypes.js +7 -0
  227. package/dist/cjs/types/RandomAvatarTypes.d.ts +1 -0
  228. package/dist/cjs/types/RandomAvatarTypes.js +7 -0
  229. package/dist/cjs/types/RefDrawerFormTypes.d.ts +1 -0
  230. package/dist/cjs/types/RefDrawerFormTypes.js +7 -0
  231. package/dist/cjs/types/ReportTableTypes.d.ts +1 -0
  232. package/dist/cjs/types/ReportTableTypes.js +7 -0
  233. package/dist/cjs/types/ThemeSwitchTypes.d.ts +1 -0
  234. package/dist/cjs/types/ThemeSwitchTypes.js +7 -0
  235. package/dist/cjs/types/ViewTableItemDrawerTypes.d.ts +1 -0
  236. package/dist/cjs/types/ViewTableItemDrawerTypes.js +7 -0
  237. package/dist/cjs/types/VolumeFormItemTypes.d.ts +1 -0
  238. package/dist/cjs/types/VolumeFormItemTypes.js +7 -0
  239. package/dist/cjs/types/WangEditorTypes.d.ts +1 -0
  240. package/dist/cjs/types/WangEditorTypes.js +7 -0
  241. package/dist/cjs/types/index.d.ts +35 -0
  242. package/dist/cjs/types/index.js +250 -0
  243. package/dist/cjs/types/servicesTypes.d.ts +1 -0
  244. package/dist/cjs/types/servicesTypes.js +7 -0
  245. package/dist/cjs/utils/Authorized.tpl +17 -0
  246. package/dist/cjs/utils/authority.tpl +51 -0
  247. package/dist/cjs/utils/authorityFunction.tpl +17 -0
  248. package/dist/cjs/utils/excelHelper.tpl +825 -0
  249. package/dist/cjs/utils/exportPage.tpl +784 -0
  250. package/dist/cjs/utils/fileHelper.tpl +251 -0
  251. package/dist/cjs/utils/importHelper.tpl +283 -0
  252. package/dist/cjs/utils/utils.tpl +26 -0
  253. package/dist/cjs/utils/xmlRequest.tpl +92 -0
  254. package/dist/cjs/writeTmpFile/index.d.ts +5 -0
  255. package/dist/cjs/writeTmpFile/index.js +34 -0
  256. package/dist/cjs/writeTmpFile/runtime.d.ts +5 -0
  257. package/dist/cjs/writeTmpFile/runtime.js +15 -0
  258. package/dist/cjs/writeTmpFile/writeConstants.d.ts +6 -0
  259. package/dist/cjs/writeTmpFile/writeConstants.js +13 -0
  260. package/dist/cjs/writeTmpFile/writeIndex.d.ts +5 -0
  261. package/dist/cjs/writeTmpFile/writeIndex.js +10 -0
  262. package/dist/cjs/writeTmpFile/writeTypes.d.ts +5 -0
  263. package/dist/cjs/writeTmpFile/writeTypes.js +12 -0
  264. package/dist/esm/components/ActionLogDrawer.tpl +148 -0
  265. package/dist/esm/components/AddDrawerForm.tpl +38 -0
  266. package/dist/esm/components/AuthorizeRender.tpl +11 -0
  267. package/dist/esm/components/Authorized.tpl +39 -0
  268. package/dist/esm/components/AuthorizedRoute.tpl +33 -0
  269. package/dist/esm/components/AvatarDropdown.tpl +101 -0
  270. package/dist/esm/components/CheckPermissions.tpl +100 -0
  271. package/dist/esm/components/CopyButton.tpl +49 -0
  272. package/dist/esm/components/CrudTable.tpl +650 -0
  273. package/dist/esm/components/DicDropDownList.tpl +60 -0
  274. package/dist/esm/components/DndTabs.tpl +159 -0
  275. package/dist/esm/components/DndTag.tpl +89 -0
  276. package/dist/esm/components/DropdownButton.tpl +123 -0
  277. package/dist/esm/components/DynamicIcon.tpl +73 -0
  278. package/dist/esm/components/DynamicIconModal.tpl +196 -0
  279. package/dist/esm/components/EditMultiLangForm.tpl +366 -0
  280. package/dist/esm/components/ExportPageWrapper.tpl +224 -0
  281. package/dist/esm/components/FlieListModal.tpl +79 -0
  282. package/dist/esm/components/FormUpload.tpl +561 -0
  283. package/dist/esm/components/GlobalFooter.tpl +21 -0
  284. package/dist/esm/components/GlobalHeader.less +51 -0
  285. package/dist/esm/components/GlobalHeader.tpl +313 -0
  286. package/dist/esm/components/HeaderSearch.less +32 -0
  287. package/dist/esm/components/HeaderSearch.tpl +92 -0
  288. package/dist/esm/components/HighlightStr.tpl +41 -0
  289. package/dist/esm/components/ImportDataUpload.tpl +94 -0
  290. package/dist/esm/components/ImportExecl.less +10 -0
  291. package/dist/esm/components/ImportExecl.tpl +108 -0
  292. package/dist/esm/components/KeepAliveDndTabs.tpl +151 -0
  293. package/dist/esm/components/KeepAliveTabs.less +23 -0
  294. package/dist/esm/components/KeepAliveTabs.tpl +136 -0
  295. package/dist/esm/components/Loading.css +19 -0
  296. package/dist/esm/components/LoadingSvg.tpl +14 -0
  297. package/dist/esm/components/MenuFooter.css +13 -0
  298. package/dist/esm/components/MenuFooter.tpl +24 -0
  299. package/dist/esm/components/MyColorPicker.tpl +19 -0
  300. package/dist/esm/components/MyFooterToolbar.css +6 -0
  301. package/dist/esm/components/MyFooterToolbar.tpl +56 -0
  302. package/dist/esm/components/MyPageContainer.tpl +43 -0
  303. package/dist/esm/components/MyReactEcharts.tpl +11 -0
  304. package/dist/esm/components/MySelect.tpl +267 -0
  305. package/dist/esm/components/MySelectLang.tpl +22 -0
  306. package/dist/esm/components/MySetps.tpl +85 -0
  307. package/dist/esm/components/MyTagList.tpl +57 -0
  308. package/dist/esm/components/MyUpload.less +39 -0
  309. package/dist/esm/components/MyUpload.tpl +609 -0
  310. package/dist/esm/components/NoFoundPage.tpl +46 -0
  311. package/dist/esm/components/PDFWrapper.tpl +96 -0
  312. package/dist/esm/components/PageLoading.tpl +16 -0
  313. package/dist/esm/components/PermissionSelect.tpl +230 -0
  314. package/dist/esm/components/ProFormUTCDatePicker.tpl +20 -0
  315. package/dist/esm/components/ProFormUTCRangePicker.tpl +20 -0
  316. package/dist/esm/components/PromiseRender.tpl +93 -0
  317. package/dist/esm/components/QrCodeModal.tpl +19 -0
  318. package/dist/esm/components/RandomAvatar.tpl +34 -0
  319. package/dist/esm/components/RefDrawerForm.tpl +75 -0
  320. package/dist/esm/components/ReportTable.tpl +336 -0
  321. package/dist/esm/components/Secured.tpl +66 -0
  322. package/dist/esm/components/ThemeSwitch.tpl +74 -0
  323. package/dist/esm/components/TimeTypeSelect.tpl +35 -0
  324. package/dist/esm/components/TipsTableTitle.tpl +37 -0
  325. package/dist/esm/components/UTCDatePicker.tpl +107 -0
  326. package/dist/esm/components/UTCRangePicker.tpl +142 -0
  327. package/dist/esm/components/UpdateForm.tpl +32 -0
  328. package/dist/esm/components/UserDisable.tpl +58 -0
  329. package/dist/esm/components/UserNoPagePermission.tpl +58 -0
  330. package/dist/esm/components/UserNoPermission.tpl +58 -0
  331. package/dist/esm/components/ViewTableItemDrawer.tpl +29 -0
  332. package/dist/esm/components/VolumeFormItem.tpl +59 -0
  333. package/dist/esm/components/WangEditor.css +53 -0
  334. package/dist/esm/components/WangEditor.tpl +174 -0
  335. package/dist/esm/components/WangEditorView.tpl +24 -0
  336. package/dist/esm/components/fileTypeMap.tpl +96 -0
  337. package/dist/esm/components/renderAuthorize.tpl +44 -0
  338. package/dist/esm/context/KeepAliveTabs.tpl +13 -0
  339. package/dist/esm/context/index.tpl +1 -0
  340. package/dist/esm/hooks/useAction.tpl +126 -0
  341. package/dist/esm/hooks/useActionLocales.tpl +108 -0
  342. package/dist/esm/hooks/useAuthority.tpl +27 -0
  343. package/dist/esm/hooks/useColumnTitle.tpl +47 -0
  344. package/dist/esm/hooks/useFormatLocale.tpl +82 -0
  345. package/dist/esm/hooks/useKeepAliveTabs.tpl +255 -0
  346. package/dist/esm/hooks/useMatchRoute.tpl +76 -0
  347. package/dist/esm/hooks/useMemoizedFn.tpl +32 -0
  348. package/dist/esm/hooks/useOutlet.tpl +20 -0
  349. package/dist/esm/hooks/usePageExport.tpl +155 -0
  350. package/dist/esm/hooks/useQueryTableList.tpl +91 -0
  351. package/dist/esm/hooks/useRouteAuth.tpl +122 -0
  352. package/dist/esm/index.d.ts +6 -0
  353. package/dist/esm/index.js +115 -0
  354. package/dist/esm/locales/en-US.d.ts +163 -0
  355. package/dist/esm/locales/en-US.js +9 -0
  356. package/dist/esm/locales/enUS/ActionLogDrawer.d.ts +6 -0
  357. package/dist/esm/locales/enUS/ActionLogDrawer.js +5 -0
  358. package/dist/esm/locales/enUS/DynamicIconModal.d.ts +4 -0
  359. package/dist/esm/locales/enUS/DynamicIconModal.js +3 -0
  360. package/dist/esm/locales/enUS/EditMultiLangForm.d.ts +16 -0
  361. package/dist/esm/locales/enUS/EditMultiLangForm.js +15 -0
  362. package/dist/esm/locales/enUS/File.d.ts +54 -0
  363. package/dist/esm/locales/enUS/File.js +54 -0
  364. package/dist/esm/locales/enUS/GlobalFooter.d.ts +4 -0
  365. package/dist/esm/locales/enUS/GlobalFooter.js +3 -0
  366. package/dist/esm/locales/enUS/GlobalHeader.d.ts +10 -0
  367. package/dist/esm/locales/enUS/GlobalHeader.js +9 -0
  368. package/dist/esm/locales/enUS/MyFooterToolbar.d.ts +5 -0
  369. package/dist/esm/locales/enUS/MyFooterToolbar.js +4 -0
  370. package/dist/esm/locales/enUS/PermissionSelect.d.ts +4 -0
  371. package/dist/esm/locales/enUS/PermissionSelect.js +3 -0
  372. package/dist/esm/locales/enUS/TimeTypeSelect.d.ts +6 -0
  373. package/dist/esm/locales/enUS/TimeTypeSelect.js +5 -0
  374. package/dist/esm/locales/enUS/common.d.ts +74 -0
  375. package/dist/esm/locales/enUS/common.js +76 -0
  376. package/dist/esm/locales/enUS/index.d.ts +163 -0
  377. package/dist/esm/locales/enUS/index.js +18 -0
  378. package/dist/esm/locales/enUS/pages.d.ts +10 -0
  379. package/dist/esm/locales/enUS/pages.js +9 -0
  380. package/dist/esm/locales/th-TH.d.ts +163 -0
  381. package/dist/esm/locales/th-TH.js +9 -0
  382. package/dist/esm/locales/zh-CN.d.ts +163 -0
  383. package/dist/esm/locales/zh-CN.js +9 -0
  384. package/dist/esm/locales/zh-TW.d.ts +162 -0
  385. package/dist/esm/locales/zh-TW.js +9 -0
  386. package/dist/esm/locales/zhCN/ActionLogDrawer.d.ts +6 -0
  387. package/dist/esm/locales/zhCN/ActionLogDrawer.js +5 -0
  388. package/dist/esm/locales/zhCN/DynamicIconModal.d.ts +4 -0
  389. package/dist/esm/locales/zhCN/DynamicIconModal.js +3 -0
  390. package/dist/esm/locales/zhCN/EditMultiLangForm.d.ts +16 -0
  391. package/dist/esm/locales/zhCN/EditMultiLangForm.js +15 -0
  392. package/dist/esm/locales/zhCN/File.d.ts +54 -0
  393. package/dist/esm/locales/zhCN/File.js +54 -0
  394. package/dist/esm/locales/zhCN/GlobalFooter.d.ts +4 -0
  395. package/dist/esm/locales/zhCN/GlobalFooter.js +3 -0
  396. package/dist/esm/locales/zhCN/GlobalHeader.d.ts +10 -0
  397. package/dist/esm/locales/zhCN/GlobalHeader.js +9 -0
  398. package/dist/esm/locales/zhCN/MyFooterToolbar.d.ts +5 -0
  399. package/dist/esm/locales/zhCN/MyFooterToolbar.js +4 -0
  400. package/dist/esm/locales/zhCN/PermissionSelect.d.ts +4 -0
  401. package/dist/esm/locales/zhCN/PermissionSelect.js +3 -0
  402. package/dist/esm/locales/zhCN/TimeTypeSelect.d.ts +6 -0
  403. package/dist/esm/locales/zhCN/TimeTypeSelect.js +5 -0
  404. package/dist/esm/locales/zhCN/common.d.ts +74 -0
  405. package/dist/esm/locales/zhCN/common.js +76 -0
  406. package/dist/esm/locales/zhCN/index.d.ts +163 -0
  407. package/dist/esm/locales/zhCN/index.js +18 -0
  408. package/dist/esm/locales/zhCN/pages.d.ts +10 -0
  409. package/dist/esm/locales/zhCN/pages.js +9 -0
  410. package/dist/esm/locales/zhTW/ActionLogDrawer.d.ts +6 -0
  411. package/dist/esm/locales/zhTW/ActionLogDrawer.js +5 -0
  412. package/dist/esm/locales/zhTW/DynamicIconModal.d.ts +4 -0
  413. package/dist/esm/locales/zhTW/DynamicIconModal.js +3 -0
  414. package/dist/esm/locales/zhTW/EditMultiLangForm.d.ts +16 -0
  415. package/dist/esm/locales/zhTW/EditMultiLangForm.js +15 -0
  416. package/dist/esm/locales/zhTW/File.d.ts +53 -0
  417. package/dist/esm/locales/zhTW/File.js +53 -0
  418. package/dist/esm/locales/zhTW/GlobalFooter.d.ts +4 -0
  419. package/dist/esm/locales/zhTW/GlobalFooter.js +3 -0
  420. package/dist/esm/locales/zhTW/GlobalHeader.d.ts +10 -0
  421. package/dist/esm/locales/zhTW/GlobalHeader.js +9 -0
  422. package/dist/esm/locales/zhTW/MyFooterToolbar.d.ts +5 -0
  423. package/dist/esm/locales/zhTW/MyFooterToolbar.js +4 -0
  424. package/dist/esm/locales/zhTW/PermissionSelect.d.ts +4 -0
  425. package/dist/esm/locales/zhTW/PermissionSelect.js +3 -0
  426. package/dist/esm/locales/zhTW/TimeTypeSelect.d.ts +6 -0
  427. package/dist/esm/locales/zhTW/TimeTypeSelect.js +5 -0
  428. package/dist/esm/locales/zhTW/common.d.ts +74 -0
  429. package/dist/esm/locales/zhTW/common.js +76 -0
  430. package/dist/esm/locales/zhTW/index.d.ts +162 -0
  431. package/dist/esm/locales/zhTW/index.js +18 -0
  432. package/dist/esm/locales/zhTW/pages.d.ts +10 -0
  433. package/dist/esm/locales/zhTW/pages.js +9 -0
  434. package/dist/esm/services/index.tpl +160 -0
  435. package/dist/esm/types/ActionLogDrawerTypes.d.ts +1 -0
  436. package/dist/esm/types/ActionLogDrawerTypes.js +1 -0
  437. package/dist/esm/types/AvatarDropdownTypes.d.ts +1 -0
  438. package/dist/esm/types/AvatarDropdownTypes.js +1 -0
  439. package/dist/esm/types/CrudTableTypes.d.ts +1 -0
  440. package/dist/esm/types/CrudTableTypes.js +1 -0
  441. package/dist/esm/types/DatePickerTypes.d.ts +1 -0
  442. package/dist/esm/types/DatePickerTypes.js +1 -0
  443. package/dist/esm/types/DicDropDownListTypes.d.ts +1 -0
  444. package/dist/esm/types/DicDropDownListTypes.js +1 -0
  445. package/dist/esm/types/DndTabsTypes.d.ts +1 -0
  446. package/dist/esm/types/DndTabsTypes.js +1 -0
  447. package/dist/esm/types/DndTagTypes.d.ts +1 -0
  448. package/dist/esm/types/DndTagTypes.js +1 -0
  449. package/dist/esm/types/DropdownButtonTypes.d.ts +2 -0
  450. package/dist/esm/types/DropdownButtonTypes.js +2 -0
  451. package/dist/esm/types/DynamicIconTypes.d.ts +1 -0
  452. package/dist/esm/types/DynamicIconTypes.js +1 -0
  453. package/dist/esm/types/EditMultiLangFormTypes.d.ts +1 -0
  454. package/dist/esm/types/EditMultiLangFormTypes.js +1 -0
  455. package/dist/esm/types/ExportPageWrapperTypes.d.ts +1 -0
  456. package/dist/esm/types/ExportPageWrapperTypes.js +1 -0
  457. package/dist/esm/types/GlobalHeaderTypes.d.ts +1 -0
  458. package/dist/esm/types/GlobalHeaderTypes.js +1 -0
  459. package/dist/esm/types/HeaderSearchTypes.d.ts +1 -0
  460. package/dist/esm/types/HeaderSearchTypes.js +1 -0
  461. package/dist/esm/types/HighlightStrTypes.d.ts +1 -0
  462. package/dist/esm/types/HighlightStrTypes.js +1 -0
  463. package/dist/esm/types/ImportDataUploadTypes.d.ts +1 -0
  464. package/dist/esm/types/ImportDataUploadTypes.js +1 -0
  465. package/dist/esm/types/ImportExeclTypes.d.ts +1 -0
  466. package/dist/esm/types/ImportExeclTypes.js +1 -0
  467. package/dist/esm/types/KeepAliveTabsTypes.d.ts +1 -0
  468. package/dist/esm/types/KeepAliveTabsTypes.js +1 -0
  469. package/dist/esm/types/MenuFooterTypes.d.ts +1 -0
  470. package/dist/esm/types/MenuFooterTypes.js +1 -0
  471. package/dist/esm/types/MyFooterToolbarTypes.d.ts +1 -0
  472. package/dist/esm/types/MyFooterToolbarTypes.js +1 -0
  473. package/dist/esm/types/MyPageContainerTypes.d.ts +1 -0
  474. package/dist/esm/types/MyPageContainerTypes.js +1 -0
  475. package/dist/esm/types/MySelectLangTypes.d.ts +1 -0
  476. package/dist/esm/types/MySelectLangTypes.js +1 -0
  477. package/dist/esm/types/MySelectTypes.d.ts +1 -0
  478. package/dist/esm/types/MySelectTypes.js +1 -0
  479. package/dist/esm/types/MySetpsTypes.d.ts +1 -0
  480. package/dist/esm/types/MySetpsTypes.js +1 -0
  481. package/dist/esm/types/MyTagListTypes.d.ts +1 -0
  482. package/dist/esm/types/MyTagListTypes.js +1 -0
  483. package/dist/esm/types/MyUploadTypes.d.ts +1 -0
  484. package/dist/esm/types/MyUploadTypes.js +1 -0
  485. package/dist/esm/types/PermissionSelectTypes.d.ts +1 -0
  486. package/dist/esm/types/PermissionSelectTypes.js +1 -0
  487. package/dist/esm/types/QrCodeModalTypes.d.ts +1 -0
  488. package/dist/esm/types/QrCodeModalTypes.js +1 -0
  489. package/dist/esm/types/RandomAvatarTypes.d.ts +1 -0
  490. package/dist/esm/types/RandomAvatarTypes.js +1 -0
  491. package/dist/esm/types/RefDrawerFormTypes.d.ts +1 -0
  492. package/dist/esm/types/RefDrawerFormTypes.js +1 -0
  493. package/dist/esm/types/ReportTableTypes.d.ts +1 -0
  494. package/dist/esm/types/ReportTableTypes.js +1 -0
  495. package/dist/esm/types/ThemeSwitchTypes.d.ts +1 -0
  496. package/dist/esm/types/ThemeSwitchTypes.js +1 -0
  497. package/dist/esm/types/ViewTableItemDrawerTypes.d.ts +1 -0
  498. package/dist/esm/types/ViewTableItemDrawerTypes.js +1 -0
  499. package/dist/esm/types/VolumeFormItemTypes.d.ts +1 -0
  500. package/dist/esm/types/VolumeFormItemTypes.js +1 -0
  501. package/dist/esm/types/WangEditorTypes.d.ts +1 -0
  502. package/dist/esm/types/WangEditorTypes.js +1 -0
  503. package/dist/esm/types/index.d.ts +35 -0
  504. package/dist/esm/types/index.js +35 -0
  505. package/dist/esm/types/servicesTypes.d.ts +1 -0
  506. package/dist/esm/types/servicesTypes.js +1 -0
  507. package/dist/esm/utils/Authorized.tpl +17 -0
  508. package/dist/esm/utils/authority.tpl +51 -0
  509. package/dist/esm/utils/authorityFunction.tpl +17 -0
  510. package/dist/esm/utils/excelHelper.tpl +825 -0
  511. package/dist/esm/utils/exportPage.tpl +784 -0
  512. package/dist/esm/utils/fileHelper.tpl +251 -0
  513. package/dist/esm/utils/importHelper.tpl +283 -0
  514. package/dist/esm/utils/utils.tpl +26 -0
  515. package/dist/esm/utils/xmlRequest.tpl +92 -0
  516. package/dist/esm/writeTmpFile/index.d.ts +5 -0
  517. package/dist/esm/writeTmpFile/index.js +5 -0
  518. package/dist/esm/writeTmpFile/runtime.d.ts +5 -0
  519. package/dist/esm/writeTmpFile/runtime.js +8 -0
  520. package/dist/esm/writeTmpFile/writeConstants.d.ts +6 -0
  521. package/dist/esm/writeTmpFile/writeConstants.js +7 -0
  522. package/dist/esm/writeTmpFile/writeIndex.d.ts +5 -0
  523. package/dist/esm/writeTmpFile/writeIndex.js +4 -0
  524. package/dist/esm/writeTmpFile/writeTypes.d.ts +5 -0
  525. package/dist/esm/writeTmpFile/writeTypes.js +7 -0
  526. package/package.json +58 -0
@@ -0,0 +1,825 @@
1
+ import { ColumnsState, ProColumns } from '@ant-design/pro-components';
2
+ import ExcelJS, { Worksheet } from 'exceljs';
3
+ import React from 'react';
4
+ import { fileDownloadFromBlob } from './fileHelper';
5
+
6
+ // 类型定义
7
+ export interface ExportResult<T> {
8
+ flatColumns: ProColumns<T>[];
9
+ headers: string[][];
10
+ mergeCells: string[];
11
+ }
12
+
13
+ export interface ColumnProcessOptions<T> {
14
+ columns: ProColumns<T>[];
15
+ columnsStateMap?: Record<string, ColumnsState>;
16
+ filters?: any[];
17
+ }
18
+
19
+ export type DataRowGenerator = () => Promise<any[]>;
20
+
21
+ // 延时函数
22
+ // eslint-disable-next-line no-promise-executor-return
23
+ export const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
24
+
25
+ /**
26
+ * 获取jsx中的文本
27
+ * @param {React.ReactNode | string} jsx
28
+ * @returns 返回文本和各个节点文本的数组 { text, textArray }
29
+ */
30
+ export const extractTextFromJSX = (
31
+ jsx: React.ReactNode | string | number,
32
+ ): { text: string | number; textArray: (string | number)[] } => {
33
+ if (typeof jsx === 'string' || typeof jsx === 'number') {
34
+ return { text: jsx, textArray: [jsx] };
35
+ }
36
+ const textArray: (string | number)[] = [];
37
+
38
+ React.Children.forEach(jsx, (child) => {
39
+ if (React.isValidElement(child)) {
40
+ if (typeof child.props.children === 'string' || typeof jsx === 'number' || Array.isArray(child.props.children)) {
41
+ if(Array.isArray(child.props.children)) {
42
+ textArray.push(child.props.children.join(' '));
43
+ }else {
44
+ textArray.push(child.props.children);
45
+ }
46
+ } else {
47
+ const { textArray: nestedArray } = extractTextFromJSX(child.props.children);
48
+ textArray.push(...nestedArray);
49
+ }
50
+ }
51
+ });
52
+
53
+ const text = textArray.join(' ');
54
+ return { text, textArray };
55
+ };
56
+
57
+ /**
58
+ * 设置列头(带样式)
59
+ * @param workSheet Excel工作表对象
60
+ * @param headerTitleArray 表头标题数组
61
+ * @returns Promise
62
+ */
63
+ export const setWorksheetHeader = (
64
+ workSheet: ExcelJS.Worksheet,
65
+ headerTitleArray: string[],
66
+ ): Promise<ExcelJS.Worksheet> => {
67
+ return new Promise((resolve, reject) => {
68
+ try {
69
+ if (!workSheet) {
70
+ throw new Error('parameter workSheet is null');
71
+ }
72
+
73
+ // 设置列的基本配置
74
+ const headerColumns: Partial<ExcelJS.Column>[] = headerTitleArray.map((item) => ({
75
+ header: item,
76
+ width: 15, // 与genExcelWithMutilHeader保持一致的列宽
77
+ }));
78
+
79
+ workSheet.columns = headerColumns;
80
+
81
+ // 获取表头行并设置样式
82
+ const headerRow = workSheet.getRow(1);
83
+ if (headerRow) {
84
+ headerRow.eachCell({ includeEmpty: true }, (cell: ExcelJS.Cell) => {
85
+ // 设置与genExcelWithMutilHeader相同的样式
86
+ cell.font = { bold: true };
87
+ cell.alignment = {
88
+ vertical: 'middle',
89
+ horizontal: 'center',
90
+ };
91
+ cell.border = {
92
+ top: { style: 'thin' },
93
+ left: { style: 'thin' },
94
+ bottom: { style: 'thin' },
95
+ right: { style: 'thin' },
96
+ };
97
+ });
98
+ }
99
+
100
+ resolve(workSheet);
101
+ } catch (err) {
102
+ reject(err);
103
+ }
104
+ });
105
+ };
106
+
107
+ /**
108
+ * 导出Excel(单级表头)
109
+ * @param fileName 文件名
110
+ * @param workSheetName Sheet名
111
+ * @param headerColumns 列名数组
112
+ * @param genRowFun 创建行的函数
113
+ */
114
+ export const genExcel = (
115
+ fileName: string,
116
+ workSheetName: string,
117
+ headerColumns: string[],
118
+ genRowFun: DataRowGenerator,
119
+ ): void => {
120
+ // 参数验证
121
+ if (!fileName || !workSheetName || !headerColumns.length) {
122
+ console.error('genExcel: 缺少必要参数');
123
+ return;
124
+ }
125
+
126
+ const workBook = new ExcelJS.Workbook();
127
+
128
+ // 设置工作簿元数据
129
+ workBook.created = new Date();
130
+ workBook.modified = new Date();
131
+ workBook.lastPrinted = new Date();
132
+
133
+ const workSheet = workBook.addWorksheet(workSheetName, {
134
+ properties: { tabColor: { argb: 'FF00FF00' } },
135
+ });
136
+
137
+ setWorksheetHeader(workSheet, headerColumns)
138
+ .then(() => {
139
+ // 调用外部方法,生成数据行
140
+ return genRowFun();
141
+ })
142
+ .then((newRows: any[]) => {
143
+ try {
144
+ // 批量添加数据行
145
+ if (newRows?.length > 0) {
146
+ newRows.forEach((row) => {
147
+ workSheet.addRow(row);
148
+ });
149
+ }
150
+ return true;
151
+ } catch (error) {
152
+ console.error('添加数据行时发生错误:', error);
153
+ throw error;
154
+ }
155
+ })
156
+ .then(() => {
157
+ // 调用xlsx的方法写成文件
158
+ return workBook.xlsx.writeBuffer();
159
+ })
160
+ .then((buffer: any) => {
161
+ // 下载文件
162
+ fileDownloadFromBlob(fileName, buffer);
163
+ })
164
+ .catch((error) => {
165
+ console.error('生成Excel文件时发生错误:', error);
166
+ // 可以在这里添加用户友好的错误提示
167
+ });
168
+ };
169
+
170
+ type RowStyleType = {
171
+ height?: number;
172
+ fontSize?: number;
173
+ bold?: boolean;
174
+ color?: string;
175
+ bgColor?: string;
176
+ };
177
+
178
+ /**
179
+ * Excel导出统一配置选项
180
+ */
181
+ export interface ExcelExportOptions {
182
+ /** 第一行:表头标题 */
183
+ title?: string;
184
+ /** 第一行样式配置 */
185
+ titleStyle?: RowStyleType;
186
+ /** 注意事项(支持字符串或数组,数组每项为一行) */
187
+ notice?: string | string[];
188
+ /** 注意事项样式配置 */
189
+ noticeStyle?: RowStyleType;
190
+ /** 编号行(用于匹配字段,会隐藏) */
191
+ codeColumns?: string[];
192
+ /** 列配置 */
193
+ worksheetColumns?: Worksheet['columns'];
194
+ /** 锁定的列索引数组(从0开始),这些列不允许修改 */
195
+ lockedColumns?: number[];
196
+ /** 工作表保护密码(可选) */
197
+ sheetPassword?: string;
198
+ /** 是否锁定基础行(数据行前的行),默认为 true */
199
+ lockHeaderRows?: boolean;
200
+ /** 自定义合并单元格范围数组(如 ['A1:B2', 'C1:D1']) */
201
+ mergeCells?: string[];
202
+ /** 数据行高度,默认 22 */
203
+ dataRowHeight?: number;
204
+ }
205
+
206
+ // 兼容旧版本的类型别名
207
+ export type ExcelHeaderOptions = ExcelExportOptions;
208
+
209
+ /**
210
+ * 通用Excel导出方法
211
+ * @param fileName 文件名
212
+ * @param workSheetName Sheet名
213
+ * @param headerColumns 列名数组(一维数组)或多级表头(二维数组)
214
+ * @param data 数据行数组或生成数据的函数
215
+ * @param options 配置选项
216
+ */
217
+ export const genExcelAdvanced = async (
218
+ fileName: string,
219
+ workSheetName: string,
220
+ headerColumns: string[] | string[][],
221
+ data: any[] | (() => Promise<any[]>) | (() => any[]),
222
+ options?: ExcelExportOptions,
223
+ ): Promise<void> => {
224
+ // 参数验证
225
+ if (!fileName || !workSheetName || !headerColumns.length) {
226
+ console.error('genExcelAdvanced: 缺少必要参数');
227
+ return;
228
+ }
229
+
230
+ const workBook = new ExcelJS.Workbook();
231
+ workBook.created = new Date();
232
+ workBook.modified = new Date();
233
+ workBook.lastPrinted = new Date();
234
+
235
+ const workSheet = workBook.addWorksheet(workSheetName, {
236
+ properties: { tabColor: { argb: 'FF00FF00' } },
237
+ });
238
+
239
+ // 判断是否为多级表头
240
+ const isMultiHeader = Array.isArray(headerColumns[0]);
241
+ // 获取最后一行表头(用于确定列数)
242
+ const lastHeaderRow = isMultiHeader
243
+ ? (headerColumns as string[][])[headerColumns.length - 1]
244
+ : (headerColumns as string[]);
245
+ const colCount = lastHeaderRow.length;
246
+
247
+ // 设置列宽
248
+ workSheet.columns = options?.worksheetColumns ?? lastHeaderRow.map(() => ({ width: 20 }));
249
+
250
+ // 是否锁定基础行(默认为 true)
251
+ const lockHeaderRows = options?.lockHeaderRows !== false;
252
+ let currentRowIndex = 0;
253
+
254
+ // ========== 第一行:标题(可选) ==========
255
+ if (options?.title !== undefined) {
256
+ currentRowIndex++;
257
+ const titleRow = workSheet.addRow([options.title]);
258
+ if (colCount > 1) {
259
+ workSheet.mergeCells(currentRowIndex, 1, currentRowIndex, colCount);
260
+ }
261
+ const titleCell = titleRow.getCell(1);
262
+ titleCell.font = {
263
+ size: options?.titleStyle?.fontSize ?? 16,
264
+ bold: options?.titleStyle?.bold ?? true,
265
+ color: { argb: options?.titleStyle?.color ?? 'FF000000' },
266
+ };
267
+ if (options?.titleStyle?.bgColor) {
268
+ titleCell.fill = {
269
+ type: 'pattern',
270
+ pattern: 'solid',
271
+ fgColor: { argb: options.titleStyle.bgColor },
272
+ };
273
+ }
274
+ titleCell.alignment = { horizontal: 'left', vertical: 'middle' };
275
+ titleRow.height = options?.titleStyle?.height ?? 40;
276
+ titleCell.border = {
277
+ top: { style: 'thin' },
278
+ left: { style: 'thin' },
279
+ bottom: { style: 'thin' },
280
+ right: { style: 'thin' },
281
+ };
282
+ if (lockHeaderRows) {
283
+ titleRow.eachCell((cell) => {
284
+ cell.protection = { locked: true };
285
+ });
286
+ }
287
+ }
288
+
289
+ // ========== 第二行:注意事项(可选) ==========
290
+ if (options?.notice) {
291
+ currentRowIndex++;
292
+ const noticeText = Array.isArray(options.notice)
293
+ ? options.notice.join('\n')
294
+ : options.notice;
295
+ const noticeRow = workSheet.addRow([noticeText]);
296
+ if (colCount > 1) {
297
+ workSheet.mergeCells(currentRowIndex, 1, currentRowIndex, colCount);
298
+ }
299
+ const noticeCell = noticeRow.getCell(1);
300
+ noticeCell.font = {
301
+ size: options?.noticeStyle?.fontSize ?? 10,
302
+ bold: options?.noticeStyle?.bold ?? false,
303
+ color: { argb: options?.noticeStyle?.color ?? 'FFFF0000' },
304
+ };
305
+ if (options?.noticeStyle?.bgColor) {
306
+ noticeCell.fill = {
307
+ type: 'pattern',
308
+ pattern: 'solid',
309
+ fgColor: { argb: options.noticeStyle.bgColor },
310
+ };
311
+ }
312
+ noticeCell.alignment = { horizontal: 'left', vertical: 'middle', wrapText: true };
313
+ noticeRow.height = options?.noticeStyle?.height ?? 30;
314
+ noticeCell.border = {
315
+ top: { style: 'thin' },
316
+ left: { style: 'thin' },
317
+ bottom: { style: 'thin' },
318
+ right: { style: 'thin' },
319
+ };
320
+ if (lockHeaderRows) {
321
+ noticeRow.eachCell((cell) => {
322
+ cell.protection = { locked: true };
323
+ });
324
+ }
325
+ }
326
+
327
+ // ========== 编号行(可选,隐藏) ==========
328
+ if (options?.codeColumns && options.codeColumns.length > 0) {
329
+ currentRowIndex++;
330
+ const codeColumnRow = workSheet.addRow(options.codeColumns);
331
+ codeColumnRow.eachCell((cell) => {
332
+ cell.border = {
333
+ top: { style: 'thin' },
334
+ left: { style: 'thin' },
335
+ bottom: { style: 'thin' },
336
+ right: { style: 'thin' },
337
+ };
338
+ if (lockHeaderRows) {
339
+ cell.protection = { locked: true };
340
+ }
341
+ });
342
+ codeColumnRow.alignment = { horizontal: 'center', vertical: 'middle' };
343
+ codeColumnRow.hidden = true;
344
+ }
345
+
346
+ // ========== 列名行(支持多级表头) ==========
347
+ if (isMultiHeader) {
348
+ // 多级表头
349
+ (headerColumns as string[][]).forEach((headerRow) => {
350
+ currentRowIndex++;
351
+ const processedRow = headerRow.map((cell) => (cell === '' ? undefined : cell));
352
+ const row = workSheet.addRow(processedRow);
353
+ row.eachCell({ includeEmpty: true }, (cell) => {
354
+ cell.font = { bold: true };
355
+ cell.alignment = { vertical: 'middle', horizontal: 'center' };
356
+ cell.border = {
357
+ top: { style: 'thin' },
358
+ left: { style: 'thin' },
359
+ bottom: { style: 'thin' },
360
+ right: { style: 'thin' },
361
+ };
362
+ if (lockHeaderRows) {
363
+ cell.protection = { locked: true };
364
+ }
365
+ });
366
+ });
367
+ } else {
368
+ // 单级表头
369
+ currentRowIndex++;
370
+ const columnHeaderRow = workSheet.addRow(headerColumns as string[]);
371
+ columnHeaderRow.eachCell((cell) => {
372
+ cell.font = { bold: true, color: { argb: '00000000' } };
373
+ cell.fill = {
374
+ type: 'pattern',
375
+ pattern: 'solid',
376
+ fgColor: { argb: 'FFD9D9D9' },
377
+ };
378
+ cell.alignment = { horizontal: 'center', vertical: 'middle' };
379
+ cell.border = {
380
+ top: { style: 'thin' },
381
+ left: { style: 'thin' },
382
+ bottom: { style: 'thin' },
383
+ right: { style: 'thin' },
384
+ };
385
+ if (lockHeaderRows) {
386
+ cell.protection = { locked: true };
387
+ }
388
+ });
389
+ columnHeaderRow.height = 25;
390
+ }
391
+
392
+ // ========== 处理自定义合并单元格 ==========
393
+ if (options?.mergeCells && options.mergeCells.length > 0) {
394
+ options.mergeCells.forEach((cellRange) => {
395
+ try {
396
+ workSheet.mergeCells(cellRange);
397
+ } catch (error) {
398
+ console.warn(`合并单元格失败: ${cellRange}`, error);
399
+ }
400
+ });
401
+ }
402
+
403
+ // ========== 锁定列配置 ==========
404
+ const lockedColumns = options?.lockedColumns ?? [];
405
+ const hasLockedColumns = lockedColumns.length > 0;
406
+
407
+ // ========== 获取数据行 ==========
408
+ const rows = typeof data === 'function' ? await data() : data;
409
+
410
+ // ========== 添加数据行 ==========
411
+ if (rows?.length > 0) {
412
+ rows.forEach((row) => {
413
+ const dataRow = workSheet.addRow(row);
414
+ dataRow.eachCell({ includeEmpty: true }, (cell, colNumber) => {
415
+ if (colNumber <= colCount) {
416
+ cell.border = {
417
+ top: { style: 'thin' },
418
+ left: { style: 'thin' },
419
+ bottom: { style: 'thin' },
420
+ right: { style: 'thin' },
421
+ };
422
+ cell.alignment = { horizontal: 'center', vertical: 'middle' };
423
+ if (hasLockedColumns) {
424
+ cell.protection = { locked: lockedColumns.includes(colNumber - 1) };
425
+ }
426
+ }
427
+ });
428
+ dataRow.height = options?.dataRowHeight ?? 22;
429
+ });
430
+ }
431
+
432
+ // ========== 启用工作表保护 ==========
433
+ if (lockHeaderRows || hasLockedColumns) {
434
+ workSheet.protect(options?.sheetPassword ?? '', {
435
+ selectLockedCells: true,
436
+ selectUnlockedCells: true,
437
+ formatColumns: true,
438
+ formatRows: true,
439
+ insertRows: true,
440
+ deleteRows: true,
441
+ });
442
+ }
443
+
444
+ // ========== 生成并下载文件 ==========
445
+ try {
446
+ const buffer = await workBook.xlsx.writeBuffer();
447
+ fileDownloadFromBlob(fileName, buffer as unknown as Blob);
448
+ } catch (error) {
449
+ console.error('生成Excel文件时发生错误:', error);
450
+ }
451
+ };
452
+
453
+ /**
454
+ * 创建Excel,支持多级表头及单元格合并(兼容旧版本)
455
+ * @deprecated 请使用 genExcelAdvanced 代替
456
+ */
457
+ export const genExcelWithMutilHeader = (
458
+ fileName: string,
459
+ workSheetName: string,
460
+ headerColumns: string[][],
461
+ mergeCellArray: string[],
462
+ genRowFun: DataRowGenerator,
463
+ ): void => {
464
+ genExcelAdvanced(fileName, workSheetName, headerColumns, genRowFun, {
465
+ mergeCells: mergeCellArray,
466
+ lockHeaderRows: false,
467
+ });
468
+ };
469
+
470
+ /**
471
+ * 导出Excel(扩展版,兼容旧版本)
472
+ * @deprecated 请使用 genExcelAdvanced 代替
473
+ */
474
+ export const genExcelWithHeader = async (
475
+ fileName: string,
476
+ workSheetName: string,
477
+ headerColumns: string[],
478
+ genRowFun: any,
479
+ codeColumns: string[],
480
+ options?: ExcelHeaderOptions,
481
+ ) => {
482
+ return genExcelAdvanced(fileName, workSheetName, headerColumns, genRowFun, {
483
+ ...options,
484
+ codeColumns,
485
+ });
486
+ };
487
+
488
+ /**
489
+ * 将数字索引转换为Excel列名(A, B, C, ..., Z, AA, AB, ...)
490
+ * @param cellIndex 从0开始的列索引
491
+ * @returns Excel列名
492
+ */
493
+ export const convertNumberToCellName = (cellIndex: number): string => {
494
+ let cellName = '';
495
+ let index = cellIndex;
496
+
497
+ while (index >= 0) {
498
+ cellName = String.fromCharCode(65 + (index % 26)) + cellName;
499
+ index = Math.floor(index / 26) - 1;
500
+ }
501
+
502
+ return cellName;
503
+ };
504
+
505
+ /**
506
+ * 根据表格columns,获取过滤且排序后的columns
507
+ * @param param 列,变更属性,过滤值
508
+ * @returns
509
+ */
510
+ export const getExportColumns = <T>({
511
+ columns = [],
512
+ columnsStateMap = {},
513
+ filters = [],
514
+ }: {
515
+ columns: ProColumns<T>[];
516
+ columnsStateMap?: Record<string, ColumnsState>;
517
+ filters?: any[];
518
+ }): ProColumns<T>[] => {
519
+ const filterList = columns.filter((item) => {
520
+ return (
521
+ // 排除隐藏在表格的列
522
+ !item.hideInTable &&
523
+ // 排除主动过滤的列
524
+ !filters.includes(item.dataIndex) &&
525
+ // 排除在于columnsStateMap中且columnsStateMapp[item.dataIndex].show为false的列(排除表格右上角工具隐藏的列)
526
+ (!columnsStateMap[item.dataIndex as string] || (columnsStateMap[item.dataIndex as string]?.show ?? true))
527
+ );
528
+ });
529
+
530
+ // 根据拖动的顺序排序
531
+ const orderList = filterList
532
+ .map((item) => {
533
+ let title: any = item.title;
534
+
535
+ // 如果title是函数,则取返回值
536
+ if (typeof title === 'function') {
537
+ title = title(item, 'table', React.createElement('div'));
538
+ }
539
+
540
+ // 如果title是jsx或者函数返回jsx,去节点中的文本
541
+ if (React.isValidElement(title)) {
542
+ title = extractTextFromJSX(title)?.text ?? title;
543
+ }
544
+
545
+ return {
546
+ ...item,
547
+ title,
548
+ order: columnsStateMap[item.dataIndex as string]?.order,
549
+ };
550
+ })
551
+ .sort((a, b) => {
552
+ if ((a.order || a.order === 0) && (b.order || b.order === 0)) {
553
+ return a.order - b.order;
554
+ }
555
+ return 1;
556
+ });
557
+ return orderList || [];
558
+ };
559
+
560
+ /**
561
+ * 处理组合列,将多级表头展开为平级列,并生成表头结构
562
+ * @param columns 原始列配置
563
+ * @param columnsStateMap 列状态映射
564
+ * @param filters 过滤条件
565
+ * @returns 返回展开后的列配置、表头结构和合并单元格信息
566
+ */
567
+ export const getExportColumnsWithGroupSupport = <T>(options: ColumnProcessOptions<T>): ExportResult<T> => {
568
+ const { columns = [], columnsStateMap = {}, filters = [] } = options;
569
+ const flatColumns: ProColumns<T>[] = [];
570
+ const mergeCells: string[] = [];
571
+ const firstLevelHeaders: string[] = [];
572
+ const secondLevelHeaders: string[] = [];
573
+
574
+ let columnIndex = 0;
575
+
576
+ /**
577
+ * 处理列标题,支持函数和JSX格式
578
+ */
579
+ const processTitle = (title: any, column: ProColumns<T>): string => {
580
+ if (typeof title === 'function') {
581
+ title = title(column, 'table', React.createElement('div'));
582
+ }
583
+ if (React.isValidElement(title)) {
584
+ title = extractTextFromJSX(title)?.text ?? title;
585
+ }
586
+ return title || '';
587
+ };
588
+
589
+ /**
590
+ * 检查列是否应该显示
591
+ */
592
+ const shouldShowColumn = (column: ProColumns<T>): boolean => {
593
+ return (
594
+ !column.hideInTable &&
595
+ !filters.includes(column.dataIndex) &&
596
+ (!columnsStateMap[column.dataIndex as string] || (columnsStateMap[column.dataIndex as string]?.show ?? true))
597
+ );
598
+ };
599
+
600
+ /**
601
+ * 处理单个列
602
+ */
603
+ const processColumn = (column: ProColumns<T>): void => {
604
+ const title = processTitle(column.title, column);
605
+
606
+ if (column.children && column.children.length > 0) {
607
+ // 组合列:处理子列
608
+ const childrenStart = columnIndex;
609
+ let childrenCount = 0;
610
+
611
+ // 只处理显示的子列
612
+ const visibleChildren = column.children.filter(shouldShowColumn);
613
+
614
+ visibleChildren.forEach((child) => {
615
+ const childTitle = processTitle(child.title, child);
616
+
617
+ // 添加到扁平列表
618
+ flatColumns.push({
619
+ ...child,
620
+ title: childTitle,
621
+ order: columnsStateMap[child.dataIndex as string]?.order,
622
+ });
623
+
624
+ // 第一级表头:父列标题
625
+ firstLevelHeaders.push(title);
626
+ // 第二级表头:子列标题
627
+ secondLevelHeaders.push(childTitle);
628
+
629
+ childrenCount++;
630
+ columnIndex++;
631
+ });
632
+
633
+ // 生成合并单元格信息(父列标题跨越所有子列)
634
+ if (childrenCount > 1) {
635
+ const startCell = convertNumberToCellName(childrenStart);
636
+ const endCell = convertNumberToCellName(childrenStart + childrenCount - 1);
637
+ mergeCells.push(`${startCell}1:${endCell}1`);
638
+ } else if (childrenCount === 1) {
639
+ // 只有一个子列时,仍需要在第一行显示父标题
640
+ const cellName = convertNumberToCellName(childrenStart);
641
+ mergeCells.push(`${cellName}1:${cellName}1`);
642
+ }
643
+ } else if (shouldShowColumn(column)) {
644
+ // 普通列
645
+ flatColumns.push({
646
+ ...column,
647
+ title,
648
+ order: columnsStateMap[column.dataIndex as string]?.order,
649
+ });
650
+
651
+ // 普通列需要跨两行显示
652
+ firstLevelHeaders.push(title);
653
+ secondLevelHeaders.push('');
654
+
655
+ // 生成跨行合并信息
656
+ const cellName = convertNumberToCellName(columnIndex);
657
+ mergeCells.push(`${cellName}1:${cellName}2`);
658
+
659
+ columnIndex++;
660
+ }
661
+ };
662
+
663
+ // 过滤显示的列并处理排序
664
+ const visibleColumns = columns.filter((column) => {
665
+ // 组合列:检查是否至少有一个子列可见
666
+ if (column.children && column.children.length > 0) {
667
+ return column.children.some(shouldShowColumn);
668
+ }
669
+ // 普通列:直接检查可见性
670
+ return shouldShowColumn(column);
671
+ });
672
+
673
+ // 按order排序(如果有的话)
674
+ const sortedColumns = visibleColumns.sort((a, b) => {
675
+ const aOrder = columnsStateMap[a.dataIndex as string]?.order;
676
+ const bOrder = columnsStateMap[b.dataIndex as string]?.order;
677
+
678
+ if ((aOrder || aOrder === 0) && (bOrder || bOrder === 0)) {
679
+ return aOrder - bOrder;
680
+ }
681
+ return 0;
682
+ });
683
+
684
+ // 处理所有列
685
+ sortedColumns.forEach(processColumn);
686
+
687
+ return {
688
+ flatColumns,
689
+ headers: [firstLevelHeaders, secondLevelHeaders],
690
+ mergeCells,
691
+ };
692
+ };
693
+
694
+ const getFormatValue = (value: any, type: ProColumns<any>['valueType'], getLocalDate?: any) => {
695
+ let newValue = value;
696
+ if (value && type) {
697
+ if (type === 'percent') {
698
+ newValue = (value * 100).toFixed(2) + '%';
699
+ } else if (type === 'dateTime' || type === 'date') {
700
+ newValue = getLocalDate?.(value);
701
+ }
702
+ }
703
+ return newValue;
704
+ };
705
+
706
+ /**
707
+ * 根据取值的columns,获取需要导出的数据
708
+ * @param columns 取值的列(过滤排序后)特殊类型如百分比,日期需要定义valueType
709
+ * @param data 表格的数据
710
+ * @param getLocalDate hooks中的方法,用于转换日期时间
711
+ * @param textArrJoin 获取render中的节点文本Arr,使用textArrJoin字符拼接
712
+ * @param batchSize 每次切割条数
713
+ * @param progressUpdateInterval 进度更新间隔,默认每1000条数据更新一次
714
+ * @param delayMs 批处理间的延迟时间,避免UI阻塞
715
+ * @returns
716
+ * @description 需要dataIndex对应到字段名,如果是嵌套对象,格式为'aa.bb' 以 . 分割
717
+ * @description 如果查询条件是id,比如select组件,又没有render的情况,可以直接取到的数据请使用dataIndex对应到导出数据,key作为查询id,有逻辑请用renderText
718
+ * @description 注意:如果依赖外部状态,可能有异常
719
+ * @description 注意:如果有render或者renderText会获取文本使用空格,自定义拼接传入textArrJoin,render使用自定义组件时无法获取节点文本,因为props.children并没有,而是props[自定义组件的参数],该情况请定义renderText
720
+ */
721
+ export const getExportValueForColumns = async <T = any>({
722
+ columns,
723
+ data,
724
+ getLocalDate,
725
+ handlePercentChange,
726
+ textArrJoin,
727
+ batchSize = 500,
728
+ progressUpdateInterval = batchSize * 2, // 进度更新间隔,默认每次切割条数的2倍
729
+ delayMs = 30, // 批处理间的延迟时间
730
+ }: {
731
+ columns: ProColumns<T>[];
732
+ data: readonly T[];
733
+ getLocalDate?: (date: any) => string | undefined;
734
+ handlePercentChange?: (percent: number) => void;
735
+ textArrJoin?: string;
736
+ batchSize?: number;
737
+ progressUpdateInterval?: number;
738
+ delayMs?: number;
739
+ }): Promise<any[]> => {
740
+ // 1. 参数校验
741
+ if (!columns.length || !data.length) return Promise.resolve([]);
742
+
743
+ // 2. 预处理列,提取dataIndex路径,避免在循环中重复计算
744
+ const colInfos = columns.map((col) => ({
745
+ col,
746
+ paths: typeof col.dataIndex === 'string' ? col.dataIndex.split('.') : [],
747
+ hasRenderText: Boolean(col.renderText),
748
+ hasRender: Boolean(col.render),
749
+ valueType: col.valueType,
750
+ }));
751
+
752
+ // 3. 批处理相关变量
753
+ const dataCopy = [...data];
754
+ const allRows: any[] = [];
755
+ const totalItems = data.length;
756
+ const totalBatches = Math.ceil(totalItems / batchSize);
757
+
758
+ // 4. 进度追踪
759
+ let processedCount = 0;
760
+ let lastProgressUpdate = 0;
761
+ const updateProgress = (count: number) => {
762
+ if (!handlePercentChange) return;
763
+
764
+ // 只在达到特定间隔或处理完所有数据时更新进度
765
+ if (count === totalItems || count - lastProgressUpdate >= progressUpdateInterval) {
766
+ const percent = ((count / totalItems) * 100).toFixed(2);
767
+ handlePercentChange(Number(percent));
768
+ lastProgressUpdate = count;
769
+ }
770
+ };
771
+
772
+ // 5. 处理单条数据的函数
773
+ const processItem = (item: T, idx: number): any[] => {
774
+ const rowValues: any[] = [];
775
+
776
+ for (const { col, paths, hasRenderText, hasRender, valueType } of colInfos) {
777
+ // 5.1 获取原始值(处理嵌套对象)
778
+ const rawValue = paths.length
779
+ ? paths.reduce((obj: any, key: string) => obj && obj[key], item)
780
+ : item[col.dataIndex as keyof T];
781
+
782
+ // 5.2 应用渲染函数或默认格式化
783
+ let value;
784
+ if (hasRenderText) {
785
+ value = col.renderText!(rawValue, item, idx, {} as any);
786
+ } else if (hasRender) {
787
+ value = col.render!(rawValue, item, idx, undefined, {} as any);
788
+ } else {
789
+ value = getFormatValue(rawValue, valueType, getLocalDate);
790
+ }
791
+
792
+ // 5.3 从JSX中提取文本
793
+ if ((hasRenderText || hasRender) && value) {
794
+ const { text, textArray } = extractTextFromJSX(value);
795
+ value = textArrJoin ? textArray.join(textArrJoin) : text;
796
+ }
797
+
798
+ rowValues.push(value);
799
+ }
800
+
801
+ // 5.4 更新进度
802
+ processedCount++;
803
+ updateProgress(processedCount);
804
+
805
+ return rowValues;
806
+ };
807
+
808
+ // 6. 批处理
809
+ for (let batchIndex = 0; batchIndex < totalBatches; batchIndex++) {
810
+ const start = batchIndex * batchSize;
811
+ const end = Math.min(start + batchSize, totalItems);
812
+ const batch = dataCopy.slice(start, end);
813
+
814
+ // 6.1 处理当前批次数据
815
+ const batchRows = batch.map((item, idx) => processItem(item, start + idx));
816
+ allRows.push(...batchRows);
817
+
818
+ // 6.2 批处理间添加延迟,避免UI阻塞
819
+ if (batchIndex < totalBatches - 1 && delayMs > 0) {
820
+ await delay(delayMs);
821
+ }
822
+ }
823
+
824
+ return Promise.resolve(allRows);
825
+ };