create-meadminjs 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/bin/cli.js +3 -0
  2. package/bin/index.js +3 -0
  3. package/dist/cli.d.ts +1 -0
  4. package/dist/cli.js +97 -0
  5. package/dist/file-zuupOgeh.js +78 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.js +98 -0
  8. package/package.json +38 -0
  9. package/template/meadmin/.editorconfig +11 -0
  10. package/template/meadmin/.env +21 -0
  11. package/template/meadmin/.eslintrc.json +7 -0
  12. package/template/meadmin/.husky/pre-commit +4 -0
  13. package/template/meadmin/.mocharc.json +6 -0
  14. package/template/meadmin/.prettierignore +30 -0
  15. package/template/meadmin/.prettierrc.cjs +47 -0
  16. package/template/meadmin/.vscode/extensions.json +3 -0
  17. package/template/meadmin/.vscode/settings.json +28 -0
  18. package/template/meadmin/README.md +41 -0
  19. package/template/meadmin/bootstrap.js +2 -0
  20. package/template/meadmin/meadmin.sql +571 -0
  21. package/template/meadmin/nx.json +10 -0
  22. package/template/meadmin/packageTemplate.json +80 -0
  23. package/template/meadmin/pnpm-workspace.yaml +4 -0
  24. package/template/meadmin/public/admin/.gitkeep +0 -0
  25. package/template/meadmin/public/index/.gitkeep +0 -0
  26. package/template/meadmin/public/index/images/layout/bannerCode.jpg +0 -0
  27. package/template/meadmin/public/index/images/layout/bannerGift.jpg +0 -0
  28. package/template/meadmin/public/index/images/layout/bannerManage.jpg +0 -0
  29. package/template/meadmin/src/app/admin/controller/base.controller.ts +6 -0
  30. package/template/meadmin/src/app/admin/controller/example/demo.controller.ts +98 -0
  31. package/template/meadmin/src/app/admin/controller/file.controller.ts +105 -0
  32. package/template/meadmin/src/app/admin/controller/login.controller.ts +81 -0
  33. package/template/meadmin/src/app/admin/controller/system/admin.controller.ts +73 -0
  34. package/template/meadmin/src/app/admin/controller/system/menu.controller.ts +80 -0
  35. package/template/meadmin/src/app/admin/controller/system/role.controller.ts +81 -0
  36. package/template/meadmin/src/app/admin/controller/user.controller.ts +86 -0
  37. package/template/meadmin/src/app/admin/controller/userFile.controller.ts +84 -0
  38. package/template/meadmin/src/app/admin/dto/captchaResult.dto.ts +8 -0
  39. package/template/meadmin/src/app/admin/dto/example/demoCreate.dto.ts +9 -0
  40. package/template/meadmin/src/app/admin/dto/example/demoQuery.dto.ts +20 -0
  41. package/template/meadmin/src/app/admin/dto/example/demoUpdate.dto.ts +11 -0
  42. package/template/meadmin/src/app/admin/dto/fileCreate.dto.ts +9 -0
  43. package/template/meadmin/src/app/admin/dto/fileQuery.dto.ts +20 -0
  44. package/template/meadmin/src/app/admin/dto/fileUp.dto.ts +28 -0
  45. package/template/meadmin/src/app/admin/dto/fileUpdate.dto.ts +11 -0
  46. package/template/meadmin/src/app/admin/dto/loginCaptchaParam.dto.ts +9 -0
  47. package/template/meadmin/src/app/admin/dto/loginInfoResult.dto.ts +24 -0
  48. package/template/meadmin/src/app/admin/dto/loginParam.dto.ts +13 -0
  49. package/template/meadmin/src/app/admin/dto/loginResult.dto.ts +10 -0
  50. package/template/meadmin/src/app/admin/dto/system/adminCreate.dto.ts +14 -0
  51. package/template/meadmin/src/app/admin/dto/system/adminQuery.dto.ts +30 -0
  52. package/template/meadmin/src/app/admin/dto/system/adminUpdate.dto.ts +24 -0
  53. package/template/meadmin/src/app/admin/dto/system/menuCreate.dto.ts +11 -0
  54. package/template/meadmin/src/app/admin/dto/system/menuQuery.dto.ts +20 -0
  55. package/template/meadmin/src/app/admin/dto/system/menuTreeAllResult.dto.ts +9 -0
  56. package/template/meadmin/src/app/admin/dto/system/menuUpdate.dto.ts +8 -0
  57. package/template/meadmin/src/app/admin/dto/system/roleCreate.dto.ts +11 -0
  58. package/template/meadmin/src/app/admin/dto/system/roleQuery.dto.ts +20 -0
  59. package/template/meadmin/src/app/admin/dto/system/roleTreeAllResult.dto.ts +12 -0
  60. package/template/meadmin/src/app/admin/dto/system/roleUpdate.dto.ts +14 -0
  61. package/template/meadmin/src/app/admin/dto/userCreate.dto.ts +9 -0
  62. package/template/meadmin/src/app/admin/dto/userFileCreate.dto.ts +9 -0
  63. package/template/meadmin/src/app/admin/dto/userFileQuery.dto.ts +20 -0
  64. package/template/meadmin/src/app/admin/dto/userFileUp.dto.ts +28 -0
  65. package/template/meadmin/src/app/admin/dto/userFileUpdate.dto.ts +11 -0
  66. package/template/meadmin/src/app/admin/dto/userQuery.dto.ts +26 -0
  67. package/template/meadmin/src/app/admin/dto/userUpdate.dto.ts +11 -0
  68. package/template/meadmin/src/app/admin/middleware/admin.middleware.ts +41 -0
  69. package/template/meadmin/src/app/admin/service/example/demo.service.ts +260 -0
  70. package/template/meadmin/src/app/admin/service/file.service.ts +123 -0
  71. package/template/meadmin/src/app/admin/service/login.serveice.ts +209 -0
  72. package/template/meadmin/src/app/admin/service/system/admin.service.ts +206 -0
  73. package/template/meadmin/src/app/admin/service/system/menu.service.ts +133 -0
  74. package/template/meadmin/src/app/admin/service/system/role.service.ts +161 -0
  75. package/template/meadmin/src/app/admin/service/user.service.ts +205 -0
  76. package/template/meadmin/src/app/admin/service/userFile.service.ts +126 -0
  77. package/template/meadmin/src/app/home.controller.ts +19 -0
  78. package/template/meadmin/src/app/index/controller/base.controller.ts +6 -0
  79. package/template/meadmin/src/app/index/controller/file.controller.ts +116 -0
  80. package/template/meadmin/src/app/index/controller/index.controller.ts +70 -0
  81. package/template/meadmin/src/app/index/controller/login.controller.ts +81 -0
  82. package/template/meadmin/src/app/index/controller/user.controller.ts +43 -0
  83. package/template/meadmin/src/app/index/dto/captchaResult.dto.ts +8 -0
  84. package/template/meadmin/src/app/index/dto/fileCreate.dto.ts +9 -0
  85. package/template/meadmin/src/app/index/dto/fileQuery.dto.ts +20 -0
  86. package/template/meadmin/src/app/index/dto/fileUp.dto.ts +28 -0
  87. package/template/meadmin/src/app/index/dto/fileUpdate.dto.ts +11 -0
  88. package/template/meadmin/src/app/index/dto/loginCaptchaParam.dto.ts +9 -0
  89. package/template/meadmin/src/app/index/dto/loginParam.dto.ts +13 -0
  90. package/template/meadmin/src/app/index/dto/loginResult.dto.ts +10 -0
  91. package/template/meadmin/src/app/index/dto/userCreate.dto.ts +26 -0
  92. package/template/meadmin/src/app/index/dto/userUpdate.dto.ts +33 -0
  93. package/template/meadmin/src/app/index/middleware/index.middleware.ts +28 -0
  94. package/template/meadmin/src/app/index/service/file.service.ts +127 -0
  95. package/template/meadmin/src/app/index/service/login.serveice.ts +178 -0
  96. package/template/meadmin/src/app/index/service/user.service.ts +87 -0
  97. package/template/meadmin/src/config/config.default.ts +154 -0
  98. package/template/meadmin/src/config/config.unittest.ts +7 -0
  99. package/template/meadmin/src/config/database.ts +30 -0
  100. package/template/meadmin/src/configuration.ts +107 -0
  101. package/template/meadmin/src/controller/api.controller.ts +21 -0
  102. package/template/meadmin/src/decorators/admin/permission.ts +41 -0
  103. package/template/meadmin/src/decorators/index/permission.ts +37 -0
  104. package/template/meadmin/src/decorators/index.ts +61 -0
  105. package/template/meadmin/src/decorators/sequelize.ts +65 -0
  106. package/template/meadmin/src/decorators/swagger.ts +170 -0
  107. package/template/meadmin/src/decorators/transactions.ts +42 -0
  108. package/template/meadmin/src/dict/code.enum.ts +8 -0
  109. package/template/meadmin/src/dto/page.dto.ts +16 -0
  110. package/template/meadmin/src/entities/abstract/adminBase.entity.ts +35 -0
  111. package/template/meadmin/src/entities/abstract/adminTree.entity.ts +258 -0
  112. package/template/meadmin/src/entities/abstract/base.entity.ts +69 -0
  113. package/template/meadmin/src/entities/abstract/indexBase.entity.ts +39 -0
  114. package/template/meadmin/src/entities/exampleBook.entity.ts +22 -0
  115. package/template/meadmin/src/entities/exampleDemo.entity.ts +104 -0
  116. package/template/meadmin/src/entities/file.entity.ts +68 -0
  117. package/template/meadmin/src/entities/systemAdmin.entity.ts +164 -0
  118. package/template/meadmin/src/entities/systemMenu.entity.ts +161 -0
  119. package/template/meadmin/src/entities/systemRole.entity.ts +99 -0
  120. package/template/meadmin/src/entities/user.entity.ts +160 -0
  121. package/template/meadmin/src/entities/userFile.entity.ts +68 -0
  122. package/template/meadmin/src/fileManage/index.ts +12 -0
  123. package/template/meadmin/src/fileManage/storage/base.ts +6 -0
  124. package/template/meadmin/src/fileManage/storage/local.ts +93 -0
  125. package/template/meadmin/src/filter/badRequest.filter.ts +14 -0
  126. package/template/meadmin/src/filter/default.filter.ts +28 -0
  127. package/template/meadmin/src/filter/forbidden.filter.ts +15 -0
  128. package/template/meadmin/src/filter/index.ts +6 -0
  129. package/template/meadmin/src/filter/notfound.filter.ts +10 -0
  130. package/template/meadmin/src/filter/unauthorized.filter.ts +15 -0
  131. package/template/meadmin/src/filter/validate.filter.ts +23 -0
  132. package/template/meadmin/src/helper/dotenv.ts +13 -0
  133. package/template/meadmin/src/helper/dto.ts +195 -0
  134. package/template/meadmin/src/helper/snowflake.ts +50 -0
  135. package/template/meadmin/src/helper/utils.ts +57 -0
  136. package/template/meadmin/src/interface.ts +12 -0
  137. package/template/meadmin/src/locales/en.json +13 -0
  138. package/template/meadmin/src/logger.ts +24 -0
  139. package/template/meadmin/src/middleware/report.middleware.ts +23 -0
  140. package/template/meadmin/src/response/apiBase.res.ts +12 -0
  141. package/template/meadmin/src/response/apiError.res.ts +6 -0
  142. package/template/meadmin/src/response/apiPage.res.ts +19 -0
  143. package/template/meadmin/src/response/apiSuccess.res.ts +17 -0
  144. package/template/meadmin/src/ruleType/index.ts +3 -0
  145. package/template/meadmin/src/ruleType/string.ts +29 -0
  146. package/template/meadmin/src/service/dataSourceManager.service.ts +55 -0
  147. package/template/meadmin/src/service/response.service.ts +65 -0
  148. package/template/meadmin/src/types/decorator.ts +31 -0
  149. package/template/meadmin/src/types/entity.ts +209 -0
  150. package/template/meadmin/src/types/fileManage.ts +48 -0
  151. package/template/meadmin/src/types/koa.interface.ts +12 -0
  152. package/template/meadmin/src/types/uploadOptions.ts +7 -0
  153. package/template/meadmin/test/controller/api.test.ts +17 -0
  154. package/template/meadmin/test/controller/home.test.ts +18 -0
  155. package/template/meadmin/test/setup.ts +15 -0
  156. package/template/meadmin/test/tsconfig.json +19 -0
  157. package/template/meadmin/tsconfig.json +28 -0
  158. package/template/meadmin/types/mwtsc.d.ts +9 -0
  159. package/template/meadmin/uploadFile/admin/.gitkeep +0 -0
  160. package/template/meadmin/uploadFile/index/.gitkeep +0 -0
  161. package/template/meadmin/view/admin/.prettierignore +28 -0
  162. package/template/meadmin/view/admin/.prettierrc.cjs +4 -0
  163. package/template/meadmin/view/admin/cli/autoImport.ts +3 -0
  164. package/template/meadmin/view/admin/eslint.config.js +91 -0
  165. package/template/meadmin/view/admin/index.html +65 -0
  166. package/template/meadmin/view/admin/packageTemplate.json +123 -0
  167. package/template/meadmin/view/admin/plugins/autoComponents.ts +10 -0
  168. package/template/meadmin/view/admin/plugins/autoImport.ts +64 -0
  169. package/template/meadmin/view/admin/plugins/autoImportApi.ts +14 -0
  170. package/template/meadmin/view/admin/plugins/babel.ts +25 -0
  171. package/template/meadmin/view/admin/plugins/index.ts +107 -0
  172. package/template/meadmin/view/admin/plugins/svgLoader.ts +22 -0
  173. package/template/meadmin/view/admin/plugins/vueSetUpExtend.ts +5 -0
  174. package/template/meadmin/view/admin/public/favicon.ico +0 -0
  175. package/template/meadmin/view/admin/public/logo.png +0 -0
  176. package/template/meadmin/view/admin/public/logo.svg +1 -0
  177. package/template/meadmin/view/admin/src/App.vue +46 -0
  178. package/template/meadmin/view/admin/src/api/api.model.ts +11 -0
  179. package/template/meadmin/view/admin/src/api/example/demo.ts +189 -0
  180. package/template/meadmin/view/admin/src/api/file.ts +124 -0
  181. package/template/meadmin/view/admin/src/api/login.ts +55 -0
  182. package/template/meadmin/view/admin/src/api/system/admin.ts +111 -0
  183. package/template/meadmin/view/admin/src/api/system/menu.ts +125 -0
  184. package/template/meadmin/view/admin/src/api/system/role.ts +111 -0
  185. package/template/meadmin/view/admin/src/api/user.ts +106 -0
  186. package/template/meadmin/view/admin/src/api/userFile.ts +121 -0
  187. package/template/meadmin/view/admin/src/app.ts +13 -0
  188. package/template/meadmin/view/admin/src/assets/images/404.svg +339 -0
  189. package/template/meadmin/view/admin/src/assets/images/captcha.png +0 -0
  190. package/template/meadmin/view/admin/src/components/meButton.vue +39 -0
  191. package/template/meadmin/view/admin/src/components/meComponent.ts +73 -0
  192. package/template/meadmin/view/admin/src/components/meDarkSwitch.vue +36 -0
  193. package/template/meadmin/view/admin/src/components/meDialog/hooks/minMax.ts +163 -0
  194. package/template/meadmin/view/admin/src/components/meDialog/index.vue +86 -0
  195. package/template/meadmin/view/admin/src/components/meFilesView.vue +52 -0
  196. package/template/meadmin/view/admin/src/components/meKeepAlive/core/Suspense.ts +15 -0
  197. package/template/meadmin/view/admin/src/components/meKeepAlive/core/apiAsyncComponent.ts +3 -0
  198. package/template/meadmin/view/admin/src/components/meKeepAlive/core/component.ts +5 -0
  199. package/template/meadmin/view/admin/src/components/meKeepAlive/core/componentPublicInstance.ts +6 -0
  200. package/template/meadmin/view/admin/src/components/meKeepAlive/core/devtools.ts +43 -0
  201. package/template/meadmin/view/admin/src/components/meKeepAlive/core/errorHandling.ts +17 -0
  202. package/template/meadmin/view/admin/src/components/meKeepAlive/core/renderer.ts +103 -0
  203. package/template/meadmin/view/admin/src/components/meKeepAlive/core/shapeFlags.ts +13 -0
  204. package/template/meadmin/view/admin/src/components/meKeepAlive/core/vnode.ts +9 -0
  205. package/template/meadmin/view/admin/src/components/meKeepAlive/index.ts +347 -0
  206. package/template/meadmin/view/admin/src/components/meLocaleSelect.vue +34 -0
  207. package/template/meadmin/view/admin/src/components/meNumber.vue +74 -0
  208. package/template/meadmin/view/admin/src/components/meSearchForm.vue +175 -0
  209. package/template/meadmin/view/admin/src/components/meSearchMenu/index.vue +87 -0
  210. package/template/meadmin/view/admin/src/components/meSearchMenu/useSearchMenu.ts +87 -0
  211. package/template/meadmin/view/admin/src/components/meSelectFile/index.vue +87 -0
  212. package/template/meadmin/view/admin/src/components/meSelectFile/meSelectFile.ts +3 -0
  213. package/template/meadmin/view/admin/src/components/meSelectList.vue +80 -0
  214. package/template/meadmin/view/admin/src/components/meSelectUserFile/index.vue +96 -0
  215. package/template/meadmin/view/admin/src/components/meSelectUserFile/meSelectUserFile.ts +3 -0
  216. package/template/meadmin/view/admin/src/components/meSetting.vue +20 -0
  217. package/template/meadmin/view/admin/src/components/meSettingMenu.vue +152 -0
  218. package/template/meadmin/view/admin/src/components/meSizeSelect.vue +28 -0
  219. package/template/meadmin/view/admin/src/components/meUpload.vue +114 -0
  220. package/template/meadmin/view/admin/src/components/meUploadUserFile.vue +114 -0
  221. package/template/meadmin/view/admin/src/components/meVxeTable/components/pagination.vue +67 -0
  222. package/template/meadmin/view/admin/src/components/meVxeTable/directives/resize.ts +31 -0
  223. package/template/meadmin/view/admin/src/components/meVxeTable/index.vue +287 -0
  224. package/template/meadmin/view/admin/src/components/meVxeTable/install.ts +30 -0
  225. package/template/meadmin/view/admin/src/components/meVxeTable/util.ts +11 -0
  226. package/template/meadmin/view/admin/src/components/meWangEditor/index.vue +121 -0
  227. package/template/meadmin/view/admin/src/components/meWangEditor/meWangEditor.scss +24 -0
  228. package/template/meadmin/view/admin/src/components/page.vue +24 -0
  229. package/template/meadmin/view/admin/src/components/service/meImageViewer.ts +23 -0
  230. package/template/meadmin/view/admin/src/config/index.ts +11 -0
  231. package/template/meadmin/view/admin/src/config/locale.ts +245 -0
  232. package/template/meadmin/view/admin/src/config/login.ts +5 -0
  233. package/template/meadmin/view/admin/src/config/theme.ts +19 -0
  234. package/template/meadmin/view/admin/src/dict/configEnum.ts +5 -0
  235. package/template/meadmin/view/admin/src/dict/eventEnmu.ts +14 -0
  236. package/template/meadmin/view/admin/src/dict/menuModeEnum.ts +5 -0
  237. package/template/meadmin/view/admin/src/dict/pageEnum.ts +6 -0
  238. package/template/meadmin/view/admin/src/directives/clickOutside.ts +2 -0
  239. package/template/meadmin/view/admin/src/entry-client.ts +8 -0
  240. package/template/meadmin/view/admin/src/entry-server.ts +69 -0
  241. package/template/meadmin/view/admin/src/env.d.ts +6 -0
  242. package/template/meadmin/view/admin/src/event/index.ts +30 -0
  243. package/template/meadmin/view/admin/src/event/module.ts +1 -0
  244. package/template/meadmin/view/admin/src/event/modules/core.ts +27 -0
  245. package/template/meadmin/view/admin/src/hooks/actionModel.ts +54 -0
  246. package/template/meadmin/view/admin/src/hooks/core/computedProxy.ts +10 -0
  247. package/template/meadmin/view/admin/src/hooks/index.ts +24 -0
  248. package/template/meadmin/view/admin/src/icons/index.ts +52 -0
  249. package/template/meadmin/view/admin/src/icons/svg/dashboard.svg +5 -0
  250. package/template/meadmin/view/admin/src/icons/svg/moon.svg +5 -0
  251. package/template/meadmin/view/admin/src/icons/svg/size.svg +5 -0
  252. package/template/meadmin/view/admin/src/icons/svg/sunny.svg +5 -0
  253. package/template/meadmin/view/admin/src/icons/svg/translation.svg +5 -0
  254. package/template/meadmin/view/admin/src/layout/components/expand.vue +18 -0
  255. package/template/meadmin/view/admin/src/layout/components/header/components/tagBar/components/contextmenu.vue +180 -0
  256. package/template/meadmin/view/admin/src/layout/components/header/components/tagBar/index.vue +322 -0
  257. package/template/meadmin/view/admin/src/layout/components/header/components/topBar/components/left.vue +59 -0
  258. package/template/meadmin/view/admin/src/layout/components/header/components/topBar/components/right/components/messageBox.vue +82 -0
  259. package/template/meadmin/view/admin/src/layout/components/header/components/topBar/components/right/components/user.vue +53 -0
  260. package/template/meadmin/view/admin/src/layout/components/header/components/topBar/components/right/index.vue +44 -0
  261. package/template/meadmin/view/admin/src/layout/components/header/components/topBar/components/topMenu.vue +33 -0
  262. package/template/meadmin/view/admin/src/layout/components/header/components/topBar/index.vue +30 -0
  263. package/template/meadmin/view/admin/src/layout/components/header/index.vue +15 -0
  264. package/template/meadmin/view/admin/src/layout/components/menu/components/menuItem.vue +72 -0
  265. package/template/meadmin/view/admin/src/layout/components/menu/index.vue +147 -0
  266. package/template/meadmin/view/admin/src/layout/components/page.vue +33 -0
  267. package/template/meadmin/view/admin/src/layout/components/title.vue +21 -0
  268. package/template/meadmin/view/admin/src/layout/index.vue +104 -0
  269. package/template/meadmin/view/admin/src/locales/helper.ts +127 -0
  270. package/template/meadmin/view/admin/src/locales/hooks.ts +50 -0
  271. package/template/meadmin/view/admin/src/locales/i18n.ts +16 -0
  272. package/template/meadmin/view/admin/src/locales/lang/en/default.json +65 -0
  273. package/template/meadmin/view/admin/src/locales/lang/en/index.ts +7 -0
  274. package/template/meadmin/view/admin/src/locales/lang/en/meTable.json +7 -0
  275. package/template/meadmin/view/admin/src/locales/lang/en/meVxeTable.ts +11 -0
  276. package/template/meadmin/view/admin/src/locales/lang/en/menu.json +1 -0
  277. package/template/meadmin/view/admin/src/locales/lang/en/rule.json +12 -0
  278. package/template/meadmin/view/admin/src/locales/lang/zh-cn/default.json +6 -0
  279. package/template/meadmin/view/admin/src/locales/lang/zh-cn/index.ts +7 -0
  280. package/template/meadmin/view/admin/src/locales/lang/zh-cn/meVxeTable.ts +2 -0
  281. package/template/meadmin/view/admin/src/main.ts +21 -0
  282. package/template/meadmin/view/admin/src/router/constant.ts +2 -0
  283. package/template/meadmin/view/admin/src/router/guard/index.ts +52 -0
  284. package/template/meadmin/view/admin/src/router/index.ts +115 -0
  285. package/template/meadmin/view/admin/src/setElGlobel.ts +16 -0
  286. package/template/meadmin/view/admin/src/store/index.ts +8 -0
  287. package/template/meadmin/view/admin/src/store/modules/global.ts +66 -0
  288. package/template/meadmin/view/admin/src/store/modules/route.ts +69 -0
  289. package/template/meadmin/view/admin/src/store/modules/setting.ts +46 -0
  290. package/template/meadmin/view/admin/src/store/modules/user.ts +115 -0
  291. package/template/meadmin/view/admin/src/styles/element-plus.scss +40 -0
  292. package/template/meadmin/view/admin/src/styles/index.scss +122 -0
  293. package/template/meadmin/view/admin/src/styles/transition.scss +33 -0
  294. package/template/meadmin/view/admin/src/styles/variables.scss +5 -0
  295. package/template/meadmin/view/admin/src/utils/fileMd5Work.ts +109 -0
  296. package/template/meadmin/view/admin/src/utils/fileUpload.ts +154 -0
  297. package/template/meadmin/view/admin/src/utils/formatting.ts +62 -0
  298. package/template/meadmin/view/admin/src/utils/helper.ts +315 -0
  299. package/template/meadmin/view/admin/src/utils/loading.ts +63 -0
  300. package/template/meadmin/view/admin/src/utils/log.ts +8 -0
  301. package/template/meadmin/view/admin/src/utils/mitt.ts +152 -0
  302. package/template/meadmin/view/admin/src/utils/nProgress.ts +31 -0
  303. package/template/meadmin/view/admin/src/utils/permission.ts +76 -0
  304. package/template/meadmin/view/admin/src/utils/request.ts +152 -0
  305. package/template/meadmin/view/admin/src/utils/userFileUpload.ts +154 -0
  306. package/template/meadmin/view/admin/src/utils/validate.ts +17 -0
  307. package/template/meadmin/view/admin/src/views/404.vue +50 -0
  308. package/template/meadmin/view/admin/src/views/example/demo/components/addOrUp.vue +118 -0
  309. package/template/meadmin/view/admin/src/views/example/demo/components/info.vue +56 -0
  310. package/template/meadmin/view/admin/src/views/example/demo/dict.ts +8 -0
  311. package/template/meadmin/view/admin/src/views/example/demo/index.vue +126 -0
  312. package/template/meadmin/view/admin/src/views/example/demo/lang/dict.ts +8 -0
  313. package/template/meadmin/view/admin/src/views/example/demo/lang/en.json +14 -0
  314. package/template/meadmin/view/admin/src/views/file/components/add.vue +24 -0
  315. package/template/meadmin/view/admin/src/views/file/components/info.vue +51 -0
  316. package/template/meadmin/view/admin/src/views/file/components/up.vue +72 -0
  317. package/template/meadmin/view/admin/src/views/file/index.vue +132 -0
  318. package/template/meadmin/view/admin/src/views/file/lang/en.json +11 -0
  319. package/template/meadmin/view/admin/src/views/login/components/header.vue +20 -0
  320. package/template/meadmin/view/admin/src/views/login/index.vue +163 -0
  321. package/template/meadmin/view/admin/src/views/redirect.vue +12 -0
  322. package/template/meadmin/view/admin/src/views/system/admin/components/addOrUp.vue +111 -0
  323. package/template/meadmin/view/admin/src/views/system/admin/components/info.vue +75 -0
  324. package/template/meadmin/view/admin/src/views/system/admin/dict.ts +7 -0
  325. package/template/meadmin/view/admin/src/views/system/admin/index.vue +145 -0
  326. package/template/meadmin/view/admin/src/views/system/admin/lang/en.json +19 -0
  327. package/template/meadmin/view/admin/src/views/system/menuRole/components/menu/components/addOrUp.vue +145 -0
  328. package/template/meadmin/view/admin/src/views/system/menuRole/components/menu/components/info.vue +68 -0
  329. package/template/meadmin/view/admin/src/views/system/menuRole/components/menu/dict.ts +36 -0
  330. package/template/meadmin/view/admin/src/views/system/menuRole/components/menu/index.vue +162 -0
  331. package/template/meadmin/view/admin/src/views/system/menuRole/components/menu/lang/en.json +20 -0
  332. package/template/meadmin/view/admin/src/views/system/menuRole/components/role/components/addOrUp.vue +94 -0
  333. package/template/meadmin/view/admin/src/views/system/menuRole/components/role/components/info.vue +59 -0
  334. package/template/meadmin/view/admin/src/views/system/menuRole/components/role/dict.ts +7 -0
  335. package/template/meadmin/view/admin/src/views/system/menuRole/components/role/index.vue +153 -0
  336. package/template/meadmin/view/admin/src/views/system/menuRole/components/role/lang/en.json +14 -0
  337. package/template/meadmin/view/admin/src/views/system/menuRole/index.vue +59 -0
  338. package/template/meadmin/view/admin/src/views/user/components/addOrUp.vue +120 -0
  339. package/template/meadmin/view/admin/src/views/user/components/info.vue +56 -0
  340. package/template/meadmin/view/admin/src/views/user/dict.ts +7 -0
  341. package/template/meadmin/view/admin/src/views/user/file/components/add.vue +24 -0
  342. package/template/meadmin/view/admin/src/views/user/file/components/info.vue +54 -0
  343. package/template/meadmin/view/admin/src/views/user/file/components/up.vue +82 -0
  344. package/template/meadmin/view/admin/src/views/user/file/index.vue +148 -0
  345. package/template/meadmin/view/admin/src/views/user/file/lang/en.json +17 -0
  346. package/template/meadmin/view/admin/src/views/user/index.vue +145 -0
  347. package/template/meadmin/view/admin/src/views/user/lang/en.json +18 -0
  348. package/template/meadmin/view/admin/template/components.d.ts +9 -0
  349. package/template/meadmin/view/admin/template/directives.d.ts +6 -0
  350. package/template/meadmin/view/admin/template/meIconComponents.d.ts +6 -0
  351. package/template/meadmin/view/admin/tsconfig.json +33 -0
  352. package/template/meadmin/view/admin/tsconfig.node.json +17 -0
  353. package/template/meadmin/view/admin/types/api.d.ts +15 -0
  354. package/template/meadmin/view/admin/types/auto-imports.d.ts +302 -0
  355. package/template/meadmin/view/admin/types/global.d.ts +60 -0
  356. package/template/meadmin/view/admin/types/globalComponents.d.ts +13 -0
  357. package/template/meadmin/view/admin/types/melIconComponents.d.d.ts +9 -0
  358. package/template/meadmin/view/admin/types/vue-router.d.ts +39 -0
  359. package/template/meadmin/view/admin/types/vueCustomProperties .d.ts +6 -0
  360. package/template/meadmin/view/admin/types/vueExtendType.d.ts +43 -0
  361. package/template/meadmin/view/admin/vite.config.ts +110 -0
  362. package/template/meadmin/view/index/.prettierignore +28 -0
  363. package/template/meadmin/view/index/.prettierrc.cjs +4 -0
  364. package/template/meadmin/view/index/README.md +84 -0
  365. package/template/meadmin/view/index/cli/autoImport.ts +3 -0
  366. package/template/meadmin/view/index/eslint.config.js +91 -0
  367. package/template/meadmin/view/index/index.html +22 -0
  368. package/template/meadmin/view/index/packageTemplate.json +122 -0
  369. package/template/meadmin/view/index/plugins/autoComponents.ts +10 -0
  370. package/template/meadmin/view/index/plugins/autoImport.ts +64 -0
  371. package/template/meadmin/view/index/plugins/autoImportApi.ts +14 -0
  372. package/template/meadmin/view/index/plugins/babel.ts +25 -0
  373. package/template/meadmin/view/index/plugins/index.ts +103 -0
  374. package/template/meadmin/view/index/plugins/svgLoader.ts +22 -0
  375. package/template/meadmin/view/index/plugins/vueSetUpExtend.ts +5 -0
  376. package/template/meadmin/view/index/public/favicon.ico +0 -0
  377. package/template/meadmin/view/index/public/logo.png +0 -0
  378. package/template/meadmin/view/index/public/logo.svg +1 -0
  379. package/template/meadmin/view/index/src/App.vue +30 -0
  380. package/template/meadmin/view/index/src/api/api.model.ts +11 -0
  381. package/template/meadmin/view/index/src/api/file.ts +123 -0
  382. package/template/meadmin/view/index/src/api/index.ts +25 -0
  383. package/template/meadmin/view/index/src/api/login.ts +72 -0
  384. package/template/meadmin/view/index/src/api/user.ts +42 -0
  385. package/template/meadmin/view/index/src/app.ts +39 -0
  386. package/template/meadmin/view/index/src/assets/images/404.svg +339 -0
  387. package/template/meadmin/view/index/src/assets/images/avatar.jpg +0 -0
  388. package/template/meadmin/view/index/src/components/meButton.vue +34 -0
  389. package/template/meadmin/view/index/src/components/meDialog/hooks/minMax.ts +166 -0
  390. package/template/meadmin/view/index/src/components/meDialog/index.vue +86 -0
  391. package/template/meadmin/view/index/src/components/meNumber.vue +74 -0
  392. package/template/meadmin/view/index/src/components/meSelectFile/index.vue +92 -0
  393. package/template/meadmin/view/index/src/components/meSelectFile/meSelectFile.ts +3 -0
  394. package/template/meadmin/view/index/src/components/meUpAvatar.vue +166 -0
  395. package/template/meadmin/view/index/src/components/meUpload.vue +111 -0
  396. package/template/meadmin/view/index/src/components/meVxeTable/components/pagination.vue +67 -0
  397. package/template/meadmin/view/index/src/components/meVxeTable/directives/resize.ts +31 -0
  398. package/template/meadmin/view/index/src/components/meVxeTable/index.vue +286 -0
  399. package/template/meadmin/view/index/src/components/meVxeTable/install.ts +18 -0
  400. package/template/meadmin/view/index/src/components/meVxeTable/util.ts +11 -0
  401. package/template/meadmin/view/index/src/components/meWangEditor/index.vue +121 -0
  402. package/template/meadmin/view/index/src/components/meWangEditor/meWangEditor.scss +24 -0
  403. package/template/meadmin/view/index/src/components/service/meImageViewer.ts +23 -0
  404. package/template/meadmin/view/index/src/config/index.ts +2 -0
  405. package/template/meadmin/view/index/src/config/login.ts +5 -0
  406. package/template/meadmin/view/index/src/dict/eventEnmu.ts +13 -0
  407. package/template/meadmin/view/index/src/dict/pageEnum.ts +8 -0
  408. package/template/meadmin/view/index/src/directives/clickOutside.ts +2 -0
  409. package/template/meadmin/view/index/src/entry-client.ts +8 -0
  410. package/template/meadmin/view/index/src/entry-server.ts +83 -0
  411. package/template/meadmin/view/index/src/env.d.ts +6 -0
  412. package/template/meadmin/view/index/src/event/index.ts +23 -0
  413. package/template/meadmin/view/index/src/hooks/actionModel.ts +54 -0
  414. package/template/meadmin/view/index/src/hooks/core/computedProxy.ts +10 -0
  415. package/template/meadmin/view/index/src/hooks/index.ts +24 -0
  416. package/template/meadmin/view/index/src/icons/index.ts +52 -0
  417. package/template/meadmin/view/index/src/icons/svg/dashboard.svg +5 -0
  418. package/template/meadmin/view/index/src/icons/svg/moon.svg +5 -0
  419. package/template/meadmin/view/index/src/icons/svg/size.svg +5 -0
  420. package/template/meadmin/view/index/src/icons/svg/sunny.svg +5 -0
  421. package/template/meadmin/view/index/src/icons/svg/translation.svg +5 -0
  422. package/template/meadmin/view/index/src/layout/default/components/footer.vue +22 -0
  423. package/template/meadmin/view/index/src/layout/default/components/header/components/menuItem.vue +69 -0
  424. package/template/meadmin/view/index/src/layout/default/components/header/components/user.vue +55 -0
  425. package/template/meadmin/view/index/src/layout/default/components/header/index.vue +53 -0
  426. package/template/meadmin/view/index/src/layout/default/index.vue +63 -0
  427. package/template/meadmin/view/index/src/layout/default/layout.scss +1 -0
  428. package/template/meadmin/view/index/src/layout/default/page.vue +11 -0
  429. package/template/meadmin/view/index/src/layout/layoutRoute.vue +13 -0
  430. package/template/meadmin/view/index/src/main.ts +28 -0
  431. package/template/meadmin/view/index/src/router/guard/index.ts +53 -0
  432. package/template/meadmin/view/index/src/router/index.ts +73 -0
  433. package/template/meadmin/view/index/src/router/routes/001-index.ts +42 -0
  434. package/template/meadmin/view/index/src/router/routes/002-demo.ts +12 -0
  435. package/template/meadmin/view/index/src/router/routes/003-user.ts +27 -0
  436. package/template/meadmin/view/index/src/router/routes/demo/001-demo.ts +36 -0
  437. package/template/meadmin/view/index/src/setElGlobel.ts +7 -0
  438. package/template/meadmin/view/index/src/store/index.ts +11 -0
  439. package/template/meadmin/view/index/src/store/module.ts +5 -0
  440. package/template/meadmin/view/index/src/store/modules/global.ts +52 -0
  441. package/template/meadmin/view/index/src/store/modules/route.ts +20 -0
  442. package/template/meadmin/view/index/src/store/modules/user.ts +98 -0
  443. package/template/meadmin/view/index/src/styles/element-plus.scss +40 -0
  444. package/template/meadmin/view/index/src/styles/index.scss +122 -0
  445. package/template/meadmin/view/index/src/styles/transition.scss +33 -0
  446. package/template/meadmin/view/index/src/styles/variables.scss +6 -0
  447. package/template/meadmin/view/index/src/utils/cookies.ts +59 -0
  448. package/template/meadmin/view/index/src/utils/fileMd5Work.ts +109 -0
  449. package/template/meadmin/view/index/src/utils/fileUpload.ts +156 -0
  450. package/template/meadmin/view/index/src/utils/helper.ts +261 -0
  451. package/template/meadmin/view/index/src/utils/loading.ts +71 -0
  452. package/template/meadmin/view/index/src/utils/log.ts +8 -0
  453. package/template/meadmin/view/index/src/utils/mitt.ts +152 -0
  454. package/template/meadmin/view/index/src/utils/nProgress.ts +52 -0
  455. package/template/meadmin/view/index/src/utils/request.ts +182 -0
  456. package/template/meadmin/view/index/src/utils/server.ts +73 -0
  457. package/template/meadmin/view/index/src/utils/validate.ts +17 -0
  458. package/template/meadmin/view/index/src/views/404.vue +50 -0
  459. package/template/meadmin/view/index/src/views/index/index.vue +137 -0
  460. package/template/meadmin/view/index/src/views/login/components/login.vue +117 -0
  461. package/template/meadmin/view/index/src/views/login/components/register.vue +192 -0
  462. package/template/meadmin/view/index/src/views/login/index.vue +147 -0
  463. package/template/meadmin/view/index/src/views/promiseError.vue +48 -0
  464. package/template/meadmin/view/index/src/views/redirect.vue +9 -0
  465. package/template/meadmin/view/index/src/views/user/components/editPass.vue +83 -0
  466. package/template/meadmin/view/index/src/views/user/components/userInfo.vue +91 -0
  467. package/template/meadmin/view/index/src/views/user/index.vue +67 -0
  468. package/template/meadmin/view/index/template/components.d.ts +9 -0
  469. package/template/meadmin/view/index/template/directives.d.ts +6 -0
  470. package/template/meadmin/view/index/template/meIconComponents.d.ts +6 -0
  471. package/template/meadmin/view/index/tsconfig.json +33 -0
  472. package/template/meadmin/view/index/tsconfig.node.json +17 -0
  473. package/template/meadmin/view/index/types/api.d.ts +15 -0
  474. package/template/meadmin/view/index/types/auto-imports.d.ts +301 -0
  475. package/template/meadmin/view/index/types/components.d.ts +25 -0
  476. package/template/meadmin/view/index/types/directives.d.ts +7 -0
  477. package/template/meadmin/view/index/types/global.d.ts +51 -0
  478. package/template/meadmin/view/index/types/globalComponents.d.ts +14 -0
  479. package/template/meadmin/view/index/types/meIconComponents.d.ts +11 -0
  480. package/template/meadmin/view/index/types/vue-router.d.ts +17 -0
  481. package/template/meadmin/view/index/types/vueCustomProperties .d.ts +6 -0
  482. package/template/meadmin/view/index/types/vueExtendType.d.ts +43 -0
  483. package/template/meadmin/view/index/vite.config.ts +92 -0
@@ -0,0 +1,156 @@
1
+ import { FileInfo, uploadFileApi } from '@/api/file.js';
2
+ import { UploadProgressEvent, UploadRawFile, UploadRequestOptions } from 'element-plus';
3
+ import SparkMD5 from 'spark-md5';
4
+ import md5WorkerURL from './fileMd5Work.js?url';
5
+ let md5Worker: Worker;
6
+ if (!import.meta.env.SSR) {
7
+ md5Worker = new Worker(md5WorkerURL, { type: 'module' });
8
+ }
9
+
10
+ export class UploadAjaxError extends Error {
11
+ name = 'UploadAjaxError';
12
+ status: number;
13
+ method: string;
14
+ url: string;
15
+
16
+ constructor(message: string, status: number, method: string, url: string) {
17
+ super(message);
18
+ this.status = status;
19
+ this.method = method;
20
+ this.url = url;
21
+ }
22
+ }
23
+
24
+ /**
25
+ * 获取文件md5
26
+ * @param file
27
+ * @param chunkSize
28
+ * @param progress
29
+ * @returns
30
+ */
31
+ const getMd5 = (file: UploadRawFile, chunkSize = 1024 * 1024, progress?: (progress: string) => void) =>
32
+ new Promise<string>((resolve, reject) => {
33
+ const workHandler = (e: MessageEvent) => {
34
+ const data = e.data;
35
+ if (data.uid !== file.uid) {
36
+ return;
37
+ }
38
+ if (data.status === 'success') {
39
+ md5Worker.removeEventListener('message', workHandler);
40
+ resolve(data.md5);
41
+ } else if (data.status === 'progress') {
42
+ // 计算中,更新进度
43
+ progress?.(data.percent);
44
+ } else if (data.status === 'failed') {
45
+ md5Worker.removeEventListener('message', workHandler);
46
+ // 计算中,更新进度
47
+ reject(data.error);
48
+ }
49
+ };
50
+ // worker 的监听
51
+ md5Worker.addEventListener('message', workHandler);
52
+ // 通知 worker 计算 MD5
53
+ md5Worker.postMessage({ file, chunkSize, uid: file.uid });
54
+ });
55
+
56
+ //执行分片上传
57
+ const uploadChunksExecute = (file: UploadRawFile, currentChunk: number, chunkSize: number, data: UploadRequestOptions['data'] = {}) =>
58
+ new Promise<Partial<FileInfo>>((resolve, reject) => {
59
+ try {
60
+ const start = currentChunk * chunkSize;
61
+ const end = start + chunkSize >= file.size ? file.size : start + chunkSize;
62
+ const fileReader = new FileReader();
63
+ fileReader.onload = async (e) => {
64
+ try {
65
+ const formData = new FormData();
66
+ const upFile = new File([e.target!.result || ''], file.name, { type: file.type });
67
+ data.start = start + '';
68
+ data.chunkMd5 = SparkMD5.ArrayBuffer.hash(e.target!.result as ArrayBuffer);
69
+ Object.keys(data).forEach((key) => {
70
+ formData.append(key, Array.isArray(data[key]) ? String(data[key]) : data[key]);
71
+ });
72
+ formData.append('file', upFile);
73
+ //执行文件上传
74
+ return resolve(await uploadFileApi()(formData));
75
+ } catch (e) {
76
+ reject(e);
77
+ }
78
+ };
79
+ fileReader.onerror = (error) => {
80
+ reject(error);
81
+ };
82
+ fileReader.readAsArrayBuffer(File.prototype.slice.call(file, start, end));
83
+ } catch (e) {
84
+ reject(e);
85
+ }
86
+ });
87
+ /**
88
+ * 文件分片上传
89
+ * @param file
90
+ * @param chunkSize
91
+ * @param data
92
+ * @param progress
93
+ * @returns
94
+ */
95
+ const uploadChunks = (file: UploadRawFile, chunkSize: number, data: UploadRequestOptions['data'] = {}, progress?: (progress: string) => void) =>
96
+ new Promise(async (resolve, reject) => {
97
+ try {
98
+ let currentChunk = 0;
99
+ const chunks = Math.ceil(file.size / chunkSize); // 总分片数
100
+ if (chunks > 1) {
101
+ //先上传一个分片确保校验和秒传
102
+ const res = await uploadChunksExecute(file, currentChunk, chunkSize, Object.assign(data, { chunkIndex: currentChunk + '', over: '0' }));
103
+ if (res.id) {
104
+ progress?.('100');
105
+ return resolve(res);
106
+ }
107
+ currentChunk++;
108
+ progress?.(((currentChunk / chunks) * 100).toFixed(2));
109
+ //一次并发上传3个分片
110
+ const parallelNum = 3;
111
+ for (; currentChunk < chunks - 1; ) {
112
+ const promiseArr = [];
113
+ for (let i = 0; i < parallelNum; i++) {
114
+ if (currentChunk < chunks - 1) {
115
+ promiseArr.push(uploadChunksExecute(file, currentChunk, chunkSize, Object.assign(data, { chunkIndex: currentChunk + '', over: '0' })));
116
+ currentChunk++;
117
+ }
118
+ }
119
+ await Promise.all(promiseArr);
120
+ progress?.(((currentChunk / chunks) * 100).toFixed(2));
121
+ }
122
+ }
123
+ //确保上传完其余分片再上传最后一个分片
124
+ const res = await uploadChunksExecute(file, currentChunk, chunkSize, Object.assign(data, { chunkIndex: currentChunk + '', over: '1' }));
125
+ progress?.('100');
126
+ return resolve(res);
127
+ } catch (e) {
128
+ reject(e);
129
+ }
130
+ });
131
+
132
+ //上传请求兼容 element-plus上传事件
133
+ export const fileUpload = async (options: UploadRequestOptions) => {
134
+ const chunkSize = 1024 * 1024;
135
+ const progressEvt = new ProgressEvent('uploadProgress', {
136
+ lengthComputable: true,
137
+ loaded: 0,
138
+ total: 100,
139
+ }) as UploadProgressEvent;
140
+ progressEvt.percent = 0;
141
+ // 将 MD5 值放到请求参数里
142
+ options.data.md5 = await getMd5(options.file, chunkSize, (process) => {
143
+ //md5进度占总进度5%
144
+ progressEvt.percent = (+process * 5) / 100;
145
+ options.onProgress(progressEvt);
146
+ });
147
+ options.data.chunk = '1';
148
+ options.data.name = options.file.name;
149
+ // 上传分片,第一个分片会查询文件是否存在
150
+ const res = await uploadChunks(options.file, chunkSize, options.data, (process) => {
151
+ //上传进度占总进度95%
152
+ progressEvt.percent = (+process * 95) / 100 + 5;
153
+ options.onProgress(progressEvt);
154
+ });
155
+ return res; //调用onSuccess和return后都会触发Success事件,这里只返回不调用,否则会触发两遍Success事件;
156
+ };
@@ -0,0 +1,261 @@
1
+ import dayjs from 'dayjs';
2
+ import { clone, cloneDeep } from 'lodash-es';
3
+ import { SearchTreeOptions, default as XEUtils } from 'xe-utils';
4
+
5
+ /**
6
+ * 对象中的每个可便利元素按序执行一个由您提供的 reducer 函数,
7
+ * 每一次运行 reducer 会将先前元素的计算结果作为参数传入,
8
+ * 最后将其结果汇总为单个返回值。
9
+ * @param object 用户遍历的对象
10
+ * @param callbackfn “reducer” 函数,包含四个参数:
11
+ * previousValue:上一次调用 callbackFn 时的返回值。在第一次调用时,其值则为 initialValue。
12
+ * currentValue:数组中正在处理的元素。
13
+ * currentKey:数组中正在处理的元素的key。
14
+ * object:用于遍历的d对象。
15
+ * @param initialValue 作为第一次调用 callback 函数时参数 previousValue 的值
16
+ * @returns
17
+ */
18
+ export function objectRreduce<T, P extends Record<string, any> = Record<string, any>>(
19
+ object: P,
20
+ callbackfn: (previousValue: T, currentValue: P[keyof P], currentKey: string, object: P) => T,
21
+ initialValue: T,
22
+ ): T {
23
+ for (const i in object) {
24
+ if (Object.hasOwn(object, i)) {
25
+ initialValue = callbackfn(initialValue, object[i], i, object);
26
+ }
27
+ }
28
+ return initialValue;
29
+ }
30
+
31
+ /**
32
+ * 合并对象的value(value必须为数组)
33
+ * @param object
34
+ * @returns
35
+ */
36
+ export function concatObjectValue<T, P extends Record<string, T[]> = Record<string, T[]>>(object: P) {
37
+ return objectRreduce(
38
+ object,
39
+ (currentValue, previousValue) => {
40
+ return currentValue.concat(previousValue || []);
41
+ },
42
+ [] as T[],
43
+ );
44
+ }
45
+
46
+ /**
47
+ * 文件名转驼峰
48
+ * @param fileName
49
+ * @param nameTemplate
50
+ * @returns
51
+ */
52
+ export const fileToHump = function (fileName: string): string {
53
+ const index = fileName.lastIndexOf('.');
54
+ if (index > 0) {
55
+ fileName = fileName.slice(0, index);
56
+ }
57
+ const fileNameArr = fileName.replace(/\\/g, '/').split('/');
58
+ if (fileNameArr[fileNameArr.length - 1] === 'index' || fileNameArr[fileNameArr.length - 1] === 'Index') {
59
+ fileNameArr.pop();
60
+ }
61
+ for (let i = 1, len = fileNameArr.length; i < len; i++) {
62
+ fileNameArr[i] = fileNameArr[i].slice(0, 1).toUpperCase() + fileNameArr[i].slice(1);
63
+ }
64
+ return fileNameArr.join('');
65
+ };
66
+
67
+ /**
68
+ * 混色
69
+ * @param color1 16进制颜色1
70
+ * @param color2 16进制颜色2
71
+ * @param opacity 透明度0-1
72
+ * @returns
73
+ */
74
+ export const mixColor = function (color1: string, color2: string, opacity: number) {
75
+ let red1 = parseInt(color1.slice(1, 3), 16);
76
+ let green1 = parseInt(color1.slice(3, 5), 16);
77
+ let blue1 = parseInt(color1.slice(5, 7), 16);
78
+ if (opacity === 0) {
79
+ return [red1, green1, blue1].toString();
80
+ }
81
+ const red2 = parseInt(color2.slice(1, 3), 16);
82
+ const green2 = parseInt(color2.slice(3, 5), 16);
83
+ const blue2 = parseInt(color2.slice(5, 7), 16);
84
+ red1 += Math.round(opacity * (red2 - red1));
85
+ green1 += Math.round(opacity * (green2 - green1));
86
+ blue1 += Math.round(opacity * (blue2 - blue1));
87
+ return '#' + red1.toString(16) + green1.toString(16) + blue1.toString(16);
88
+ };
89
+
90
+ /**
91
+ * 获取灰阶值 越小颜色越深
92
+ * @param color
93
+ * @returns
94
+ */
95
+ export const getColorLuma = function (color: string) {
96
+ const red = parseInt(color.slice(1, 3), 16);
97
+ const green = parseInt(color.slice(3, 5), 16);
98
+ const blue = parseInt(color.slice(5, 7), 16);
99
+ return red * 0.299 + green * 0.587 + blue * 0.114;
100
+ };
101
+
102
+ /**
103
+ * 树形结构搜索
104
+ */
105
+ type TreeData<Key extends string[]> = {
106
+ [k in Key[number]]: string | number;
107
+ } & { [k: string]: any };
108
+ export const searchTreeTable = function <Key extends string[], T extends TreeData<Key>>(
109
+ searchText: number | string,
110
+ searchProps: Key,
111
+ data: T[],
112
+ options: SearchTreeOptions = { children: 'children' },
113
+ formatStr = (str: string, filterRE: RegExp) => str.replace(filterRE, (match) => `<span class="keyword-lighten">${match}</span>`),
114
+ ) {
115
+ const search = XEUtils.toValueString(searchText).trim().toLowerCase();
116
+ if (search) {
117
+ const filterRE = new RegExp(search, 'gi');
118
+ const rest = XEUtils.searchTree(data, (item) => searchProps.some((key) => XEUtils.toValueString(item[key]).toLowerCase().indexOf(search) > -1), options);
119
+ XEUtils.eachTree(
120
+ rest,
121
+ (item) => {
122
+ searchProps.forEach((key: Key[number]) => {
123
+ item[key] = formatStr(XEUtils.toValueString(item[key]), filterRE) as T[Key[number]];
124
+ });
125
+ },
126
+ options,
127
+ );
128
+ return rest;
129
+ }
130
+ return cloneDeep(data);
131
+ };
132
+
133
+ /**
134
+ * 递归代理对象/数组,响应后触发update方法
135
+ * @param value
136
+ * @param update
137
+ * @returns
138
+ */
139
+ export const proxyValue = <T extends Record<string | number, any> | any[]>(value: T, update: () => void): T => {
140
+ return new Proxy<T>(value, {
141
+ get: function (obj, prop) {
142
+ if (obj[prop as keyof T] && typeof obj[prop as keyof T] === 'object') {
143
+ return proxyValue(obj[prop as keyof T] as T, update);
144
+ }
145
+ return obj[prop as keyof T];
146
+ },
147
+ set: function (obj, prop, value) {
148
+ const oldV = obj[prop as keyof T];
149
+ obj[prop as keyof T] = value;
150
+ update();
151
+ setTimeout(() => (obj[prop as keyof T] = oldV));
152
+ return true;
153
+ },
154
+ });
155
+ };
156
+
157
+ export type TreeArrayItem<T, C extends string | number> = { [K in C]: TreeArrayItem<T, C>[] } & T;
158
+ /**
159
+ * 数组转为树结构
160
+ * @param arr
161
+ * @param key
162
+ * @param parentKey
163
+ * @param childrenKey
164
+ * @returns
165
+ */
166
+ export const listToTree = <T extends Record<string, any>>(arr: T[], key: keyof T = 'id' as const, parentKey: keyof T = 'parentId' as const, childrenKey = 'children' as const) => {
167
+ const treeNode = new Map();
168
+ const newArr = clone(arr);
169
+ newArr.forEach((item) => {
170
+ (item as any)[childrenKey] = [];
171
+ treeNode.set(item[key], item);
172
+ });
173
+ const rootArr = [] as Array<TreeArrayItem<T, typeof childrenKey>>;
174
+ arr.forEach((item) => {
175
+ const parentNode = treeNode.get(item[parentKey]);
176
+ if (parentNode) {
177
+ parentNode[childrenKey].push(item);
178
+ } else {
179
+ rootArr.push(treeNode.get(item[key]));
180
+ }
181
+ });
182
+ return rootArr;
183
+ };
184
+
185
+ /**
186
+ * 状态转boolean
187
+ * @param status
188
+ * @returns
189
+ */
190
+ export const statusToBoolean = (status?: 0 | 1 | '0' | '1') => {
191
+ if (status === undefined) {
192
+ return undefined;
193
+ }
194
+
195
+ return status == '1';
196
+ };
197
+
198
+ /**
199
+ * 重置对象值,会改变原对象
200
+ * @param obj
201
+ * @param fromObj
202
+ * @returns
203
+ */
204
+ export const resetObj = <T extends Record<any, any>>(obj: Record<any, any>, fromObj: T) => {
205
+ Object.keys(obj).forEach((key) => (obj[key] = undefined));
206
+ Object.assign(obj, fromObj);
207
+ return obj as T;
208
+ };
209
+
210
+ /**
211
+ * 递归去除数组/对象的空值值
212
+ * @param obj
213
+ * @returns
214
+ */
215
+ export function clearEmptyParam<T extends Record<any, any> | any[]>(obj: T, emptyArr = [null, undefined]) {
216
+ if (Array.isArray(obj)) {
217
+ const newObj = [] as any[];
218
+ obj.forEach((item) => {
219
+ if (emptyArr.includes(item)) {
220
+ return;
221
+ } else if (Array.isArray(item)) {
222
+ newObj.push(clearEmptyParam(item));
223
+ } else if (typeof item === 'object') {
224
+ newObj.push(clearEmptyParam(item));
225
+ } else {
226
+ newObj.push(item);
227
+ }
228
+ });
229
+ return newObj;
230
+ } else {
231
+ const newObj = {} as Record<any, any>;
232
+ Object.keys(obj).forEach((key) => {
233
+ if (emptyArr.includes(obj[key])) {
234
+ return;
235
+ } else if (Array.isArray(obj[key])) {
236
+ newObj[key] = clearEmptyParam(obj[key]);
237
+ } else if (typeof obj[key] === 'object') {
238
+ newObj[key] = clearEmptyParam(obj[key]);
239
+ } else {
240
+ newObj[key] = obj[key];
241
+ }
242
+ });
243
+ return newObj;
244
+ }
245
+ }
246
+
247
+ //格式化表格数据
248
+ export function formatterStr<T>({ cellValue }: { cellValue: T }) {
249
+ return [undefined, null, ''].includes(cellValue as any) ? '--' : (cellValue as T extends undefined | null ? string : T);
250
+ }
251
+ //格式化表格时间数据
252
+ export function formatterAt<T extends string | null | undefined | Date>({ cellValue }: { cellValue: T }, formatStr = 'YYYY-MM-DD HH:mm:ss') {
253
+ return cellValue ? dayjs(cellValue).format(formatStr) : formatterStr({ cellValue });
254
+ }
255
+
256
+ //根据文件名判断是否是图片
257
+ export function isImage(filename: string) {
258
+ const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];
259
+ const fileExtension = filename.split('.').pop()?.toLowerCase();
260
+ return fileExtension ? imageExtensions.includes(fileExtension) : false;
261
+ }
@@ -0,0 +1,71 @@
1
+ import { LoadingOptions } from 'element-plus';
2
+ import { throttle } from 'lodash-es';
3
+ const loadingInstance: Record<string, ReturnType<typeof ElLoading.service>> = {};
4
+ class Loading {
5
+ constructor(private execLoading: (options?: LoadingOptions) => void, private execClose: () => void) {
6
+ this.execLoading = execLoading;
7
+ this.execClose = execClose;
8
+ }
9
+ public number = 0;
10
+ public loading(options?: LoadingOptions, number = 1) {
11
+ this.number += number;
12
+ this.execLoading(options);
13
+ }
14
+ public throttleClose = throttle(
15
+ function (this: Loading) {
16
+ if (this.number <= 0) {
17
+ this.execClose();
18
+ this.number = 0;
19
+ }
20
+ },
21
+ 220,
22
+ { leading: false },
23
+ );
24
+ public close(number = 1) {
25
+ if (this.number > 0) {
26
+ this.number -= Math.min(this.number, number);
27
+ this.throttleClose();
28
+ } else {
29
+ this.forceClose();
30
+ }
31
+ }
32
+ public forceClose() {
33
+ this.number = 0;
34
+ this.execClose();
35
+ this.throttleClose.cancel();
36
+ }
37
+ }
38
+
39
+ export const loadingObject = {
40
+ global: new Loading(
41
+ (options?: LoadingOptions) => (loadingInstance.global = ElLoading.service(options)),
42
+ () => loadingInstance.global?.close(),
43
+ ),
44
+ layout: new Loading(
45
+ (options?: LoadingOptions) => (loadingInstance.layout = ElLoading.service(Object.assign({ target: '#me-main-scroll' }, options))),
46
+ () => loadingInstance.layout?.close(),
47
+ ),
48
+ };
49
+
50
+ export function loading(options?: LoadingOptions, number = 1, mode: keyof typeof loadingObject = 'global') {
51
+ if (!import.meta.env.SSR) {
52
+ const loading = loadingObject[mode];
53
+ loading.loading(options, number);
54
+ return loading;
55
+ }
56
+ return new Loading(
57
+ () => {},
58
+ () => {},
59
+ );
60
+ }
61
+
62
+ export function closeLoading(force = false, number = 1, mode: keyof typeof loadingObject = 'global'): void {
63
+ if (!import.meta.env.SSR) {
64
+ const loading = loadingObject[mode];
65
+ if (force) {
66
+ loading.forceClose();
67
+ return;
68
+ }
69
+ loading.close(number);
70
+ }
71
+ }
@@ -0,0 +1,8 @@
1
+ export default {
2
+ warn(message?: string, ...optionalParams: any[]) {
3
+ console.warn(`[meadmin warn]:${message}`, ...optionalParams);
4
+ },
5
+ error(message?: string, ...optionalParams: any[]) {
6
+ console.error(`[meadmin error]:${message}`, ...optionalParams);
7
+ },
8
+ };
@@ -0,0 +1,152 @@
1
+ // 根据开源项目mitt自定义更改
2
+ import EventEnum from '@/dict/eventEnmu';
3
+ import { onUnmounted } from 'vue';
4
+ type EventType = EventEnum;
5
+
6
+ // An event handler can take an optional event argument
7
+ // and should not return a value
8
+ export type Handler<T = unknown> = (event: T) => void | Promise<void>;
9
+ export type WildcardHandler<T = Record<string, unknown>> = (type: keyof T, event: T[keyof T]) => void | Promise<void>;
10
+
11
+ // An array of all currently registered event handlers for a type
12
+ export type EventHandlerList<T = unknown> = Array<Handler<T>>;
13
+ export type WildCardEventHandlerList<T = Record<string, unknown>> = Array<WildcardHandler<T>>;
14
+
15
+ // A map of event types and their corresponding event handlers.
16
+ export type EventHandlerMap<Events extends Record<EventType, unknown>> = Map<keyof Events | '*', EventHandlerList<Events[keyof Events]> | WildCardEventHandlerList<Events>>;
17
+
18
+ export interface Mitter<Events extends Record<EventType, unknown>> {
19
+ all: EventHandlerMap<Events>;
20
+
21
+ once: (<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>, needUnmounted?: boolean) => void) & ((type: '*', handler: WildcardHandler<Events>, needUnmounted?: boolean) => void);
22
+
23
+ on: (<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>, needUnmounted?: boolean) => void) & ((type: '*', handler: WildcardHandler<Events>, needUnmounted?: boolean) => void);
24
+
25
+ off: (<Key extends keyof Events>(type: Key, handler?: Handler<Events[Key]>) => void) & ((type: '*', handler: WildcardHandler<Events>) => void);
26
+
27
+ emit: (<Key extends keyof Events>(type: Key, event: Events[Key]) => any[]) & (<Key extends keyof Events>(type: undefined extends Events[Key] ? Key : never) => any[]);
28
+ }
29
+
30
+ /**
31
+ * Mitt: Tiny (~200b) functional event emitter / pubsub.
32
+ * @name Mitter
33
+ * @returns {Mitt}
34
+ */
35
+ export default function mitter<Events extends Record<EventType, unknown>>(all?: EventHandlerMap<Events>, once?: Set<Handler<Events[keyof Events]> | WildcardHandler<Events>>) {
36
+ type GenericEventHandler = Handler<Events[keyof Events]> | WildcardHandler<Events>;
37
+ all = all ?? new Map();
38
+ once = once ?? new Set();
39
+
40
+ return {
41
+ /**
42
+ * A Map of event names to registered handler functions.
43
+ */
44
+ all,
45
+
46
+ /**
47
+ * Register an once event handler for the given type.
48
+ * @param {string|symbol} type Type of event to listen for, or `'*'` for all events
49
+ * @param {Function} handler Function to call in response to given event
50
+ * @param needUnmounted 是否需要在Unmounted时移除监听
51
+ * @memberOf mitt
52
+ */
53
+ once<Key extends keyof Events>(type: Key, handler: GenericEventHandler, needUnmounted = false) {
54
+ const handlers: GenericEventHandler[] | undefined = all!.get(type);
55
+ if (handlers) {
56
+ handlers.push(handler);
57
+ } else {
58
+ all!.set(type, [handler] as EventHandlerList<Events[keyof Events]>);
59
+ once!.add(handler as Handler<Events[keyof Events]>);
60
+ }
61
+ needUnmounted &&
62
+ onUnmounted(() => {
63
+ this.off<Key>(type, handler as any);
64
+ });
65
+ },
66
+
67
+ /**
68
+ * Register an event handler for the given type.
69
+ * @param {string|symbol} type Type of event to listen for, or `'*'` for all events
70
+ * @param {Function} handler Function to call in response to given event
71
+ * @param needUnmounted 是否需要在Unmounted时移除监听
72
+ * @memberOf mitt
73
+ */
74
+ on<Key extends keyof Events>(type: Key, handler: GenericEventHandler, needUnmounted = false) {
75
+ const handlers: GenericEventHandler[] | undefined = all!.get(type);
76
+ if (handlers) {
77
+ handlers.push(handler);
78
+ } else {
79
+ all!.set(type, [handler] as EventHandlerList<Events[keyof Events]>);
80
+ }
81
+ needUnmounted &&
82
+ onUnmounted(() => {
83
+ this.off<Key>(type, handler as any);
84
+ });
85
+ },
86
+
87
+ /**
88
+ * Remove an event handler for the given type.
89
+ * If `handler` is omitted, all handlers of the given type are removed.
90
+ * @param {string|symbol} type Type of event to unregister `handler` from (`'*'` to remove a wildcard handler)
91
+ * @param {Function} [handler] Handler function to remove
92
+ * @memberOf mitt
93
+ */
94
+ off<Key extends keyof Events>(type: Key, handler?: GenericEventHandler) {
95
+ const handlers: GenericEventHandler[] | undefined = all!.get(type);
96
+ if (handlers) {
97
+ if (handler) {
98
+ handlers.splice(handlers.indexOf(handler) >>> 0, 1);
99
+ once!.delete(handler);
100
+ } else {
101
+ all!.set(type, []);
102
+ }
103
+ }
104
+ },
105
+
106
+ /**
107
+ * Invoke all handlers for the given type.(会顺序执行)
108
+ * If present, `'*'` handlers are invoked after type-matched handlers.
109
+ *
110
+ * Note: Manually firing '*' handlers is not supported.
111
+ *
112
+ * @param {string|symbol} type The event type to invoke
113
+ * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler
114
+ * @memberOf mitt
115
+ */
116
+ emit<Key extends keyof Events>(type: Key, evt: Events[Key]) {
117
+ let handlers = all!.get(type);
118
+ const result = [];
119
+ if (handlers) {
120
+ handlers = (handlers as EventHandlerList<Events[keyof Events]>).slice();
121
+ for (const handler of handlers) {
122
+ const res = handler(evt);
123
+ if (res instanceof Promise) {
124
+ res.catch((error) => {
125
+ console.error(error);
126
+ });
127
+ }
128
+ result.push(res);
129
+ if (once!.has(handler)) {
130
+ this.off(type, handler);
131
+ }
132
+ }
133
+ }
134
+
135
+ handlers = all!.get('*');
136
+ if (handlers) {
137
+ handlers = (handlers as WildCardEventHandlerList<Events>).slice();
138
+ for (const handler of handlers) {
139
+ const res = handler(type, evt);
140
+ if (res instanceof Promise) {
141
+ res.catch((error) => {
142
+ console.error(error);
143
+ });
144
+ }
145
+ result.push(res);
146
+ }
147
+ once!.clear();
148
+ }
149
+ return result;
150
+ },
151
+ } as Mitter<Events>;
152
+ }
@@ -0,0 +1,52 @@
1
+ import nProgress from 'nprogress';
2
+ import 'nprogress/nprogress.css';
3
+
4
+ let number = 0;
5
+ export const done = (n = 1) => {
6
+ number -= n;
7
+ if (number <= 0) {
8
+ if (!import.meta.env.SSR) {
9
+ nProgress.done();
10
+ }
11
+ number = 0;
12
+ } else {
13
+ if (!import.meta.env.SSR) {
14
+ nProgress.set(number / (number + n));
15
+ }
16
+ }
17
+ };
18
+
19
+ export const forceDone = () => {
20
+ number = 0;
21
+ if (!import.meta.env.SSR) {
22
+ nProgress.done();
23
+ }
24
+ };
25
+
26
+ export const start = (n = 1) => {
27
+ if (!import.meta.env.SSR) {
28
+ if (number <= 0) {
29
+ nProgress.start();
30
+ number = n;
31
+ } else {
32
+ number += n;
33
+ }
34
+ }
35
+ };
36
+
37
+ export const set = (n: number) => {
38
+ if (n > 0 && !import.meta.env.SSR) {
39
+ if (number <= 0) {
40
+ start(number);
41
+ } else {
42
+ nProgress.set(n);
43
+ }
44
+ }
45
+ };
46
+
47
+ export const remove = () => {
48
+ number = 0;
49
+ if (!import.meta.env.SSR) {
50
+ nProgress.remove();
51
+ }
52
+ };