@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,784 @@
1
+ import html2canvas from 'html2canvas';
2
+ import jsPDF from 'jspdf';
3
+ import { ExportPageOptions } from '../types';
4
+ import { fileDownloadFromUrl } from './fileHelper';
5
+
6
+ // 注意png类型图片无法使用quality进行压缩
7
+ const IMAGE_TYPE = 'image/jpeg';
8
+
9
+ const EXTENSION = IMAGE_TYPE.split('/')[1].toLocaleUpperCase();
10
+
11
+ export class PageExporter {
12
+ private static defaultOptions: ExportPageOptions = {
13
+ filename: '导出文件.pdf',
14
+ quality: 0.9,
15
+ orientation: 'portrait',
16
+ format: 'a4',
17
+ includeBackground: true,
18
+ margin: { top: 15, right: 15, bottom: 15, left: 15 },
19
+ avoidBreakSelector: '.ant-card, .ant-pro-card, [pdf-no-break] .container .box',
20
+ minBlockHeight: 100,
21
+ showPageNumbers: true,
22
+ pageNumberFontSize: 10,
23
+ pageNumberColor: '#666666',
24
+ watermark: {
25
+ text: '',
26
+ font: '16px Arial',
27
+ color: 'rgb(153, 153, 153)',
28
+ opacity: 0.3,
29
+ spacing: 500,
30
+ rotation: -23,
31
+ },
32
+ };
33
+
34
+ /**
35
+ * 智能合并配置:只覆盖用户传入的字段,保留默认配置
36
+ */
37
+ private static mergeOptions(options: ExportPageOptions = {}): ExportPageOptions {
38
+ const merged = { ...this.defaultOptions, ...options };
39
+
40
+ // 对水印配置进行深度合并
41
+ if (options.watermark && this.defaultOptions.watermark) {
42
+ merged.watermark = {
43
+ ...this.defaultOptions.watermark,
44
+ ...options.watermark,
45
+ };
46
+ }
47
+
48
+ // 对边距配置进行深度合并
49
+ if (options.margin && this.defaultOptions.margin) {
50
+ merged.margin = {
51
+ ...this.defaultOptions.margin,
52
+ ...options.margin,
53
+ };
54
+ }
55
+
56
+ return merged;
57
+ }
58
+
59
+ /**
60
+ * 获取元素中需要避免分割的块的位置信息
61
+ */
62
+ private static getBlockPositions(
63
+ element: HTMLElement,
64
+ selector: string,
65
+ ): Array<{ top: number; bottom: number; height: number }> {
66
+ const positions: Array<{ top: number; bottom: number; height: number }> = [];
67
+ const blocks = element.querySelectorAll(selector);
68
+
69
+ // 获取容器元素的位置作为基准
70
+ const containerRect = element.getBoundingClientRect();
71
+ const containerScrollTop = element.scrollTop || 0;
72
+
73
+ blocks.forEach((block) => {
74
+ const blockElement = block as HTMLElement;
75
+
76
+ // 使用getBoundingClientRect获取更准确的位置
77
+ const blockRect = blockElement.getBoundingClientRect();
78
+
79
+ // 计算相对于容器的位置
80
+ const relativeTop = blockRect.top - containerRect.top + containerScrollTop;
81
+ const height = blockRect.height;
82
+ const relativeBottom = relativeTop + height;
83
+
84
+ // 只添加在容器范围内的块,并且高度大于10px
85
+ if (relativeTop >= 0 && height > 10) {
86
+ positions.push({
87
+ top: relativeTop,
88
+ bottom: relativeBottom,
89
+ height: height,
90
+ });
91
+ }
92
+ });
93
+
94
+ // 去重和排序 - 移除重叠度很高的块
95
+ const uniquePositions = this.removeDuplicateBlocks(positions);
96
+
97
+ return uniquePositions.sort((a, b) => a.top - b.top);
98
+ }
99
+
100
+ /**
101
+ * 移除重复和重叠的块
102
+ */
103
+ private static removeDuplicateBlocks(
104
+ positions: Array<{ top: number; bottom: number; height: number }>,
105
+ ): Array<{ top: number; bottom: number; height: number }> {
106
+ const unique: Array<{ top: number; bottom: number; height: number }> = [];
107
+
108
+ for (const pos of positions) {
109
+ // 检查是否与已有块重叠度过高
110
+ const isOverlapping = unique.some((existing) => {
111
+ const overlapTop = Math.max(pos.top, existing.top);
112
+ const overlapBottom = Math.min(pos.bottom, existing.bottom);
113
+ const overlapHeight = Math.max(0, overlapBottom - overlapTop);
114
+
115
+ // 如果重叠度超过80%,认为是重复块
116
+ const overlapRatio = overlapHeight / Math.min(pos.height, existing.height);
117
+ return overlapRatio > 0.8;
118
+ });
119
+
120
+ if (!isOverlapping) {
121
+ unique.push(pos);
122
+ }
123
+ }
124
+
125
+ return unique;
126
+ }
127
+
128
+ /**
129
+ * 计算智能分页点
130
+ */
131
+ private static calculateSmartBreakPoints(
132
+ totalHeight: number,
133
+ pageHeight: number,
134
+ blockPositions: Array<{ top: number; bottom: number; height: number }>,
135
+ minBlockHeight: number,
136
+ ): number[] {
137
+ const breakPoints: number[] = [];
138
+ let currentPageStart = 0;
139
+
140
+ // console.log('开始计算分页点,总高度:', totalHeight, '页面高度:', pageHeight);
141
+
142
+ while (currentPageStart < totalHeight) {
143
+ let currentPageEnd = currentPageStart + pageHeight;
144
+
145
+ // 如果已经到达或超过总高度,结束
146
+ if (currentPageEnd >= totalHeight) {
147
+ // console.log('到达末尾,停止分页');
148
+ break;
149
+ }
150
+
151
+ let adjustedBreakPoint = currentPageEnd;
152
+ let foundConflict = false;
153
+
154
+ // console.log(`检查分页点 ${currentPageEnd},当前页开始于 ${currentPageStart}`);
155
+
156
+ // 检查当前分页点是否会分割任何块
157
+ for (const block of blockPositions) {
158
+ // 如果块的高度小于最小高度,允许分割
159
+ if (block.height < minBlockHeight) {
160
+ // console.log(`跳过小块(高度${block.height}): ${block.top}-${block.bottom}`);
161
+ continue;
162
+ }
163
+
164
+ // 如果块跨越了当前分页点
165
+ if (block.top < currentPageEnd && block.bottom > currentPageEnd) {
166
+ // console.log(`发现冲突块: ${block.top}-${block.bottom}, 高度: ${block.height}`);
167
+ foundConflict = true;
168
+
169
+ // 检查是否可以将整个块放在当前页
170
+ if (block.top >= currentPageStart && block.bottom - currentPageStart <= pageHeight) {
171
+ // 可以放在当前页,将分页点移到块的结束位置后一点
172
+ adjustedBreakPoint = block.bottom + 1;
173
+ // console.log(`将分页点调整到块结束位置: ${adjustedBreakPoint}`);
174
+ } else if (block.top > currentPageStart) {
175
+ // 块无法完全放在当前页,将分页点移到块的开始位置
176
+ adjustedBreakPoint = block.top;
177
+ // console.log(`将分页点调整到块开始位置: ${adjustedBreakPoint}`);
178
+ } else {
179
+ // 块从页面开始就存在且太大,允许分割
180
+ // console.log(`块太大,允许分割: ${block.top}-${block.bottom}`);
181
+ foundConflict = false;
182
+ }
183
+ break;
184
+ }
185
+ }
186
+
187
+ if (!foundConflict) {
188
+ // console.log(`没有冲突,使用原始分页点: ${currentPageEnd}`);
189
+ adjustedBreakPoint = currentPageEnd;
190
+ }
191
+
192
+ // 确保分页点有进步,避免无限循环
193
+ if (adjustedBreakPoint <= currentPageStart) {
194
+ adjustedBreakPoint = currentPageStart + Math.min(pageHeight, totalHeight - currentPageStart);
195
+ // console.log(`调整分页点避免无限循环: ${adjustedBreakPoint}`);
196
+ }
197
+
198
+ breakPoints.push(adjustedBreakPoint);
199
+ // console.log(`添加分页点: ${adjustedBreakPoint}`);
200
+ currentPageStart = adjustedBreakPoint;
201
+ }
202
+
203
+ // console.log('最终分页点:', breakPoints);
204
+ return breakPoints;
205
+ }
206
+
207
+ /**
208
+ * 在canvas上添加水印
209
+ */
210
+ private static addWatermarkToCanvas(
211
+ canvas: HTMLCanvasElement,
212
+ watermarkConfig: ExportPageOptions['watermark'],
213
+ ): void {
214
+ if (!watermarkConfig?.text) {
215
+ return;
216
+ }
217
+
218
+ const {
219
+ text,
220
+ font = '20px Arial',
221
+ color = 'rgb(153, 153, 153)',
222
+ opacity = 0.3,
223
+ spacing = 500,
224
+ rotation = -30,
225
+ } = watermarkConfig;
226
+
227
+ const ctx = canvas.getContext('2d');
228
+ if (!ctx) {
229
+ console.warn('无法获取 canvas context');
230
+ return;
231
+ }
232
+
233
+ // 保存当前canvas状态
234
+ ctx.save();
235
+
236
+ // 设置水印样式
237
+ ctx.font = font;
238
+ ctx.fillStyle = color; // 直接使用颜色,不在这里设置透明度
239
+ ctx.textAlign = 'center';
240
+ ctx.textBaseline = 'middle';
241
+
242
+ // 设置全局透明度
243
+ ctx.globalAlpha = opacity;
244
+
245
+ // 添加重复的水印
246
+ const rotationRad = (rotation * Math.PI) / 180;
247
+
248
+ // 计算文本尺寸来确定合适的间距
249
+ const textMetrics = ctx.measureText(text);
250
+ const textWidth = textMetrics.width;
251
+ const textHeight = parseInt(font) || 20;
252
+
253
+ // 使用更合理的间距
254
+ const xSpacing = Math.max(spacing, textWidth + 50);
255
+ const ySpacing = Math.max(spacing * 0.6, textHeight + 50);
256
+
257
+ // 从合适的位置开始绘制,确保覆盖整个canvas
258
+ const startX = xSpacing / 2;
259
+ const startY = ySpacing / 2;
260
+
261
+ for (let x = startX; x < canvas.width + xSpacing; x += xSpacing) {
262
+ for (let y = startY; y < canvas.height + ySpacing; y += ySpacing) {
263
+ ctx.save();
264
+ ctx.translate(x, y);
265
+ ctx.rotate(rotationRad);
266
+ ctx.fillText(text, 0, 0);
267
+ ctx.restore();
268
+ }
269
+ }
270
+
271
+ // 恢复canvas状态
272
+ ctx.restore();
273
+ }
274
+
275
+ /**
276
+ * 从DOM元素生成canvas
277
+ */
278
+ private static async getCanvasFromElement(
279
+ element: HTMLElement,
280
+ config: ExportPageOptions,
281
+ ): Promise<HTMLCanvasElement> {
282
+ const canvas = await html2canvas(element, {
283
+ scale: 2, // 提高清晰度
284
+ useCORS: true,
285
+ allowTaint: true,
286
+ backgroundColor: '#ffffff', // 设置白色背景避免黑边
287
+ logging: false,
288
+ width: element.scrollWidth,
289
+ height: element.scrollHeight,
290
+ });
291
+
292
+ // 只有在启用水印且有水印配置时才添加水印
293
+ if (config.watermark?.text) {
294
+ // console.log('正在添加水印:', config.watermark);
295
+ this.addWatermarkToCanvas(canvas, config.watermark);
296
+ // console.log('水印添加完成');
297
+ } else {
298
+ // console.log('水印已禁用或未配置水印文本');
299
+ }
300
+
301
+ return canvas;
302
+ }
303
+
304
+ /**
305
+ * 获取智能分页点
306
+ */
307
+ private static getSmartBreakPoints(
308
+ element: HTMLElement,
309
+ imgHeight: number,
310
+ pageHeight: number,
311
+ config: ExportPageOptions,
312
+ ): number[] {
313
+ if (!config.avoidBreakSelector) {
314
+ return [];
315
+ }
316
+
317
+ const blockPositions = this.getBlockPositions(element, config.avoidBreakSelector);
318
+ // console.log(`${logPrefix}去重后找到的块数量:`, blockPositions.length);
319
+
320
+ // 输出前几个块的详细信息
321
+ // blockPositions.slice(0, 8).forEach((block, index) => {
322
+ // console.log(`${logPrefix}块 ${index + 1}:`, {
323
+ // top: Math.round(block.top),
324
+ // bottom: Math.round(block.bottom),
325
+ // height: Math.round(block.height)
326
+ // });
327
+ // });
328
+
329
+ // 将像素位置转换为PDF坐标
330
+ const scaleFactor = imgHeight / element.scrollHeight;
331
+ // console.log(`${logPrefix}缩放因子:`, scaleFactor.toFixed(4), 'imgHeight:', Math.round(imgHeight), 'scrollHeight:', element.scrollHeight);
332
+
333
+ const scaledPositions = blockPositions.map((pos) => ({
334
+ top: pos.top * scaleFactor,
335
+ bottom: pos.bottom * scaleFactor,
336
+ height: pos.height * scaleFactor,
337
+ }));
338
+
339
+ // console.log(`${logPrefix}缩放后的块位置:`);
340
+ // scaledPositions.slice(0, 8).forEach((block, index) => {
341
+ // console.log(`${logPrefix}缩放块 ${index + 1}:`, {
342
+ // top: Math.round(block.top * 10) / 10,
343
+ // bottom: Math.round(block.bottom * 10) / 10,
344
+ // height: Math.round(block.height * 10) / 10
345
+ // });
346
+ // });
347
+
348
+ const breakPoints = this.calculateSmartBreakPoints(
349
+ imgHeight,
350
+ pageHeight,
351
+ scaledPositions,
352
+ (config.minBlockHeight || 100) * scaleFactor,
353
+ );
354
+
355
+ // console.log(`${logPrefix}页面高度:`, Math.round(pageHeight), ' 总高度:', Math.round(imgHeight));
356
+ // console.log(`${logPrefix}计算的分页点:`, breakPoints.map(p => Math.round(p * 10) / 10));
357
+
358
+ return breakPoints;
359
+ }
360
+
361
+ /**
362
+ * 计算单个元素的页数(不实际生成PDF)
363
+ */
364
+ private static calculateElementPages(element: HTMLElement, config: ExportPageOptions): number {
365
+ // 模拟PDF尺寸计算
366
+ const pdfWidth = config.format === 'a4' ? 210 : config.format === 'a3' ? 297 : 215.9; // mm
367
+ const pdfHeight = config.format === 'a4' ? 297 : config.format === 'a3' ? 420 : 279.4; // mm
368
+ const pageHeight = pdfHeight - (config.margin?.top || 15) - (config.margin?.bottom || 15);
369
+ const imgWidth = pdfWidth - (config.margin?.left || 15) - (config.margin?.right || 15);
370
+
371
+ // 模拟canvas尺寸
372
+ const canvasHeight = element.scrollHeight * 2; // scale: 2
373
+ const imgHeight = (canvasHeight * imgWidth) / (element.scrollWidth * 2);
374
+
375
+ if (imgHeight <= pageHeight) {
376
+ return 1;
377
+ }
378
+
379
+ // 模拟智能分页计算
380
+ let elementPages = 1;
381
+ if (config.avoidBreakSelector) {
382
+ const blockPositions = this.getBlockPositions(element, config.avoidBreakSelector);
383
+ const scaleFactor = imgHeight / element.scrollHeight;
384
+ const scaledPositions = blockPositions.map((pos) => ({
385
+ top: pos.top * scaleFactor,
386
+ bottom: pos.bottom * scaleFactor,
387
+ height: pos.height * scaleFactor,
388
+ }));
389
+
390
+ const breakPoints = this.calculateSmartBreakPoints(
391
+ imgHeight,
392
+ pageHeight,
393
+ scaledPositions,
394
+ (config.minBlockHeight || 100) * scaleFactor,
395
+ );
396
+
397
+ let currentY = 0;
398
+ let pageCount = 0;
399
+
400
+ while (currentY < imgHeight) {
401
+ let pageEndY: number;
402
+
403
+ if (breakPoints.length > 0 && pageCount < breakPoints.length) {
404
+ pageEndY = breakPoints[pageCount];
405
+ } else {
406
+ pageEndY = Math.min(currentY + pageHeight, imgHeight);
407
+ }
408
+
409
+ const currentPageHeight = pageEndY - currentY;
410
+
411
+ if (currentPageHeight > 10) {
412
+ elementPages = pageCount + 1;
413
+ }
414
+
415
+ currentY = pageEndY;
416
+ pageCount++;
417
+ }
418
+ } else {
419
+ // 简单分页计算
420
+ elementPages = Math.ceil(imgHeight / pageHeight);
421
+ }
422
+
423
+ return elementPages;
424
+ }
425
+
426
+ /**
427
+ * 添加页码到PDF页面
428
+ */
429
+ private static addPageNumber(pdf: jsPDF, pageNumber: number, totalPages: number, config: ExportPageOptions): void {
430
+ if (!config.showPageNumbers) {
431
+ return;
432
+ }
433
+
434
+ const pdfWidth = pdf.internal.pageSize.getWidth();
435
+ const pdfHeight = pdf.internal.pageSize.getHeight();
436
+
437
+ // 设置页码样式
438
+ pdf.setFontSize(config.pageNumberFontSize || 10);
439
+ pdf.setTextColor(config.pageNumberColor || '#666666');
440
+
441
+ // 页码文本
442
+ const pageText = `${pageNumber}/${totalPages}`;
443
+
444
+ // 计算文本宽度以便右对齐
445
+ const textWidth = pdf.getTextWidth(pageText);
446
+
447
+ // 页码位置:右下角,距离右边距和下边距各5mm
448
+ const x = pdfWidth - (config.margin?.right || 15) - 5 - textWidth;
449
+ const y = pdfHeight - (config.margin?.bottom || 15) + 5;
450
+
451
+ // 添加页码
452
+ pdf.text(pageText, x, y);
453
+ }
454
+
455
+ /**
456
+ * 将单个元素添加到PDF中(支持智能分页)
457
+ */
458
+ private static addElementToPDF(
459
+ pdf: jsPDF,
460
+ canvas: HTMLCanvasElement,
461
+ element: HTMLElement,
462
+ config: ExportPageOptions,
463
+ startPageNumber: number = 1,
464
+ totalPagesInDocument: number = 1,
465
+ ): number {
466
+ const pdfWidth = pdf.internal.pageSize.getWidth();
467
+ const pdfHeight = pdf.internal.pageSize.getHeight();
468
+ const pageHeight = pdfHeight - (config.margin?.top || 15) - (config.margin?.bottom || 15);
469
+ const imgWidth = pdfWidth - config.margin!.left - config.margin!.right;
470
+ const imgHeight = (canvas.height * imgWidth) / canvas.width;
471
+
472
+ // 计算当前元素的页数
473
+ let elementPages = 1;
474
+ if (imgHeight > pageHeight) {
475
+ const breakPoints = this.getSmartBreakPoints(element, imgHeight, pageHeight, config);
476
+
477
+ // 模拟分页过程来计算当前元素的页数
478
+ let currentY = 0;
479
+ let pageCount = 0;
480
+
481
+ while (currentY < imgHeight) {
482
+ let pageEndY: number;
483
+
484
+ if (breakPoints.length > 0 && pageCount < breakPoints.length) {
485
+ pageEndY = breakPoints[pageCount];
486
+ } else {
487
+ pageEndY = Math.min(currentY + pageHeight, imgHeight);
488
+ }
489
+
490
+ const currentPageHeight = pageEndY - currentY;
491
+
492
+ if (currentPageHeight > 10) {
493
+ elementPages = pageCount + 1;
494
+ }
495
+
496
+ currentY = pageEndY;
497
+ pageCount++;
498
+ }
499
+ }
500
+
501
+ // 如果内容不超过一页,直接添加
502
+ if (imgHeight <= pageHeight) {
503
+ const imgData = canvas.toDataURL(IMAGE_TYPE, config.quality);
504
+ pdf.addImage(
505
+ imgData,
506
+ EXTENSION,
507
+ config.margin!.left,
508
+ config.margin!.top,
509
+ imgWidth,
510
+ Math.min(imgHeight, pageHeight),
511
+ );
512
+
513
+ // 添加页码
514
+ this.addPageNumber(pdf, startPageNumber, totalPagesInDocument, config);
515
+
516
+ return 1;
517
+ }
518
+
519
+ // 获取智能分页点
520
+ const breakPoints = this.getSmartBreakPoints(element, imgHeight, pageHeight, config);
521
+
522
+ let currentY = 0;
523
+ let pageCount = 0;
524
+
525
+ // 智能分页处理
526
+ while (currentY < imgHeight) {
527
+ if (pageCount > 0) {
528
+ pdf.addPage();
529
+ }
530
+
531
+ // 计算当前页要显示的图片高度
532
+ let pageEndY: number;
533
+
534
+ if (breakPoints.length > 0 && pageCount < breakPoints.length) {
535
+ // 使用智能分页点
536
+ pageEndY = breakPoints[pageCount];
537
+ // console.log(`${logPrefix}页面 ${pageCount + 1}: 使用智能分页点 ${pageEndY}`);
538
+ } else {
539
+ // 使用标准分页
540
+ pageEndY = Math.min(currentY + pageHeight, imgHeight);
541
+ // console.log(`${logPrefix}页面 ${pageCount + 1}: 使用标准分页 ${pageEndY}`);
542
+ }
543
+
544
+ const currentPageHeight = pageEndY - currentY;
545
+
546
+ // 如果当前页高度太小,跳过
547
+ if (currentPageHeight <= 10) {
548
+ // console.log(`${logPrefix}跳过高度太小的页面: ${currentPageHeight}`);
549
+ currentY = pageEndY;
550
+ continue;
551
+ }
552
+
553
+ // console.log(`${logPrefix}页面 ${pageCount + 1}: 从 ${currentY} 到 ${pageEndY}, 高度: ${currentPageHeight}`);
554
+
555
+ // 计算图片在canvas中的裁剪位置
556
+ const sourceY = (currentY / imgHeight) * canvas.height;
557
+ const sourceHeight = (currentPageHeight / imgHeight) * canvas.height;
558
+
559
+ // 创建裁剪后的canvas
560
+ const pageCanvas = document.createElement('canvas');
561
+ const pageCtx = pageCanvas.getContext('2d')!;
562
+ pageCanvas.width = canvas.width;
563
+ pageCanvas.height = sourceHeight;
564
+
565
+ // 绘制裁剪的部分
566
+ pageCtx.drawImage(canvas, 0, sourceY, canvas.width, sourceHeight, 0, 0, canvas.width, sourceHeight);
567
+
568
+ // 转换为图片数据
569
+ const pageImgData = pageCanvas.toDataURL(IMAGE_TYPE, config.quality);
570
+
571
+ // 添加到PDF - 每页都从相同的顶部边距开始
572
+ pdf.addImage(
573
+ pageImgData,
574
+ EXTENSION,
575
+ config.margin!.left,
576
+ config.margin!.top, // 每页都从顶部边距开始
577
+ imgWidth,
578
+ currentPageHeight,
579
+ );
580
+
581
+ // 添加页码
582
+ this.addPageNumber(pdf, startPageNumber + pageCount, totalPagesInDocument, config);
583
+
584
+ currentY = pageEndY;
585
+ pageCount++;
586
+ }
587
+
588
+ return elementPages;
589
+ }
590
+
591
+ /**
592
+ * 导出DOM元素为图片
593
+ * @param element - 要导出的DOM元素
594
+ * @param options - 导出配置
595
+ */
596
+ static async exportToImage(element: HTMLElement, options: ExportPageOptions = {}): Promise<void> {
597
+ const config = this.mergeOptions(options);
598
+
599
+ try {
600
+ // 使用html2canvas截取DOM,并添加水印
601
+ const canvas = await this.getCanvasFromElement(element, config);
602
+
603
+ const imageData = canvas.toDataURL(config.imageType, config.quality);
604
+
605
+ fileDownloadFromUrl(imageData, config.filename || '导出文件');
606
+
607
+ URL.revokeObjectURL(imageData);
608
+ } catch (error) {
609
+ console.error('图片导出失败:', error);
610
+ throw new Error('图片导出失败,请重试');
611
+ }
612
+ }
613
+
614
+ /**
615
+ * 预览图片(在新窗口中打开)
616
+ * @param element - 要预览的DOM元素
617
+ * @param options - 导出配置
618
+ */
619
+ static async previewImage(element: HTMLElement, options: ExportPageOptions = {}): Promise<void> {
620
+ const config = this.mergeOptions(options);
621
+
622
+ try {
623
+ // 使用html2canvas截取DOM,并添加水印
624
+ const canvas = await this.getCanvasFromElement(element, config);
625
+
626
+ const imageData = canvas.toDataURL(config.imageType, config.quality);
627
+
628
+ // 创建新窗口并显示图片
629
+ const newWindow = window.open('', '_blank');
630
+ if (newWindow) {
631
+ newWindow.document.write(`
632
+ <!DOCTYPE html>
633
+ <html>
634
+ <head>
635
+ <title>图片预览</title>
636
+ <style>
637
+ body {
638
+ margin: 0;
639
+ padding: 20px;
640
+ display: flex;
641
+ justify-content: center;
642
+ align-items: center;
643
+ min-height: 100vh;
644
+ background-color: #f5f5f5;
645
+ }
646
+ img {
647
+ max-width: 100%;
648
+ max-height: 100%;
649
+ box-shadow: 0 4px 8px rgba(0,0,0,0.1);
650
+ border-radius: 4px;
651
+ }
652
+ </style>
653
+ </head>
654
+ <body>
655
+ <img src="${imageData}" alt="预览图片" />
656
+ </body>
657
+ </html>
658
+ `);
659
+ newWindow.document.close();
660
+ } else {
661
+ // 如果无法打开新窗口,降级为直接打开图片
662
+ window.open(imageData, '_blank');
663
+ }
664
+ } catch (error) {
665
+ console.error('图片预览失败:', error);
666
+ throw new Error('图片预览失败,请重试');
667
+ }
668
+ }
669
+
670
+ /**
671
+ * 导出DOM元素为PDF
672
+ * @param element - 要导出的DOM元素
673
+ * @param options - 导出配置
674
+ */
675
+ static async exportToPDF(element: HTMLElement, options: ExportPageOptions = {}): Promise<void> {
676
+ const config = this.mergeOptions(options);
677
+
678
+ try {
679
+ // 计算总页数
680
+ const totalPages = this.calculateElementPages(element, config);
681
+
682
+ // 使用html2canvas截取DOM,并添加水印
683
+ const canvas = await this.getCanvasFromElement(element, config);
684
+
685
+ // 创建PDF
686
+ const pdf = new jsPDF({
687
+ orientation: config.orientation,
688
+ unit: 'mm',
689
+ format: config.format,
690
+ });
691
+
692
+ this.addElementToPDF(pdf, canvas, element, config, 1, totalPages);
693
+
694
+ // 保存PDF
695
+ pdf.save(config.filename!);
696
+ } catch (error) {
697
+ console.error('PDF导出失败:', error);
698
+ throw new Error('PDF导出失败,请重试');
699
+ }
700
+ }
701
+
702
+ /**
703
+ * 导出多个DOM元素为PDF(每个元素一页)
704
+ * @param elements - DOM元素数组
705
+ * @param options - 导出配置
706
+ */
707
+ static async exportMultipleToPDF(elements: HTMLElement[], options: ExportPageOptions = {}): Promise<void> {
708
+ const config = this.mergeOptions(options);
709
+
710
+ try {
711
+ // 预先计算所有元素的总页数
712
+ const elementPageCounts = elements.map((element) => this.calculateElementPages(element, config));
713
+ const totalPages = elementPageCounts.reduce((sum, count) => sum + count, 0);
714
+
715
+ const pdf = new jsPDF({
716
+ orientation: config.orientation,
717
+ unit: 'mm',
718
+ format: config.format,
719
+ });
720
+
721
+ let currentPageNumber = 1;
722
+
723
+ for (let i = 0; i < elements.length; i++) {
724
+ const element = elements[i];
725
+
726
+ const canvas = await this.getCanvasFromElement(element, config);
727
+
728
+ if (i > 0) {
729
+ pdf.addPage();
730
+ }
731
+
732
+ const pagesAdded = this.addElementToPDF(pdf, canvas, element, config, currentPageNumber, totalPages);
733
+ currentPageNumber += pagesAdded;
734
+ }
735
+
736
+ pdf.save(config.filename!);
737
+ } catch (error) {
738
+ console.error('PDF导出失败:', error);
739
+ throw new Error('PDF导出失败,请重试');
740
+ }
741
+ }
742
+
743
+ /**
744
+ * 预览PDF(在新窗口中打开)
745
+ * @param element - 要预览的DOM元素
746
+ * @param options - 导出配置
747
+ */
748
+ static async previewPDF(element: HTMLElement, options: ExportPageOptions = {}): Promise<void> {
749
+ const config = this.mergeOptions(options);
750
+
751
+ try {
752
+ // 计算总页数
753
+ const totalPages = this.calculateElementPages(element, config);
754
+
755
+ const canvas = await this.getCanvasFromElement(element, config);
756
+
757
+ const pdf = new jsPDF({
758
+ orientation: config.orientation,
759
+ unit: 'mm',
760
+ format: config.format,
761
+ });
762
+
763
+ this.addElementToPDF(pdf, canvas, element, config, 1, totalPages);
764
+
765
+ // 在新窗口中预览
766
+ const pdfBlob = pdf.output('blob');
767
+ const url = URL.createObjectURL(pdfBlob);
768
+ window.open(url, '_blank');
769
+
770
+ // 清理URL对象
771
+ setTimeout(() => URL.revokeObjectURL(url), 1000);
772
+ } catch (error) {
773
+ console.error('PDF预览失败:', error);
774
+ throw new Error('PDF预览失败,请重试');
775
+ }
776
+ }
777
+ }
778
+
779
+ // 导出便捷函数
780
+ export const exportToPDF = PageExporter.exportToPDF;
781
+ export const exportMultipleToPDF = PageExporter.exportMultipleToPDF;
782
+ export const previewPDF = PageExporter.previewPDF;
783
+ export const exportToImage = PageExporter.exportToImage;
784
+ export const previewImage = PageExporter.previewImage;