@liujitcn/kratos-admin-core 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 (368) hide show
  1. package/README.md +168 -0
  2. package/build/getEnv.ts +46 -0
  3. package/build/plugins.ts +206 -0
  4. package/build/proxy.ts +29 -0
  5. package/dist/package/declarations/build/getEnv.d.ts +13 -0
  6. package/dist/package/declarations/build/plugins.d.ts +20 -0
  7. package/dist/package/declarations/build/proxy.d.ts +10 -0
  8. package/dist/package/declarations/index.d.ts +7 -0
  9. package/dist/package/declarations/src/App.vue.d.ts +3 -0
  10. package/dist/package/declarations/src/api/base/config.d.ts +7 -0
  11. package/dist/package/declarations/src/api/base/file.d.ts +11 -0
  12. package/dist/package/declarations/src/api/base/login.d.ts +18 -0
  13. package/dist/package/declarations/src/api/base/oauth.d.ts +12 -0
  14. package/dist/package/declarations/src/api/system/auth.d.ts +13 -0
  15. package/dist/package/declarations/src/api/system/base_dict.d.ts +8 -0
  16. package/dist/package/declarations/src/api/system/base_tenant.d.ts +9 -0
  17. package/dist/package/declarations/src/auth.d.ts +1 -0
  18. package/dist/package/declarations/src/bootstrap.d.ts +23 -0
  19. package/dist/package/declarations/src/components/Card/DataPanelCard.vue.d.ts +23 -0
  20. package/dist/package/declarations/src/components/CronExpression/index.vue.d.ts +15 -0
  21. package/dist/package/declarations/src/components/Dialog/FormDialog.vue.d.ts +74 -0
  22. package/dist/package/declarations/src/components/Dialog/ProDialog.vue.d.ts +58 -0
  23. package/dist/package/declarations/src/components/Dict/DictLabel.vue.d.ts +11 -0
  24. package/dist/package/declarations/src/components/Dict/index.vue.d.ts +30 -0
  25. package/dist/package/declarations/src/components/ECharts/config/index.d.ts +7 -0
  26. package/dist/package/declarations/src/components/ECharts/index.vue.d.ts +22 -0
  27. package/dist/package/declarations/src/components/ErrorMessage/index.vue.d.ts +12 -0
  28. package/dist/package/declarations/src/components/Grid/components/GridItem.vue.d.ts +34 -0
  29. package/dist/package/declarations/src/components/Grid/index.vue.d.ts +28 -0
  30. package/dist/package/declarations/src/components/Grid/interface/index.d.ts +7 -0
  31. package/dist/package/declarations/src/components/ImportExcel/index.vue.d.ts +26 -0
  32. package/dist/package/declarations/src/components/Loading/fullScreen.d.ts +5 -0
  33. package/dist/package/declarations/src/components/Loading/index.vue.d.ts +3 -0
  34. package/dist/package/declarations/src/components/PasswordStrength/index.vue.d.ts +13 -0
  35. package/dist/package/declarations/src/components/ProForm/components/DynamicList.vue.d.ts +15 -0
  36. package/dist/package/declarations/src/components/ProForm/components/KvList.vue.d.ts +26 -0
  37. package/dist/package/declarations/src/components/ProForm/components/ProFormItem.vue.d.ts +28 -0
  38. package/dist/package/declarations/src/components/ProForm/index.vue.d.ts +36 -0
  39. package/dist/package/declarations/src/components/ProForm/interface/index.d.ts +47 -0
  40. package/dist/package/declarations/src/components/ProTable/components/ColSetting.vue.d.ts +9 -0
  41. package/dist/package/declarations/src/components/ProTable/components/Pagination.vue.d.ts +15 -0
  42. package/dist/package/declarations/src/components/ProTable/components/TableColumn.vue.d.ts +9 -0
  43. package/dist/package/declarations/src/components/ProTable/interface/index.d.ts +187 -0
  44. package/dist/package/declarations/src/components/ProTable.d.ts +5 -0
  45. package/dist/package/declarations/src/components/SearchForm/components/SearchFormItem.vue.d.ts +21 -0
  46. package/dist/package/declarations/src/components/SearchForm/index.vue.d.ts +22 -0
  47. package/dist/package/declarations/src/components/SelectFilter/index.vue.d.ts +44 -0
  48. package/dist/package/declarations/src/components/SelectIcon/index.vue.d.ts +19 -0
  49. package/dist/package/declarations/src/components/SvgIcon/index.vue.d.ts +15 -0
  50. package/dist/package/declarations/src/components/SwitchDark/index.vue.d.ts +3 -0
  51. package/dist/package/declarations/src/components/TreeFilter/index.vue.d.ts +5866 -0
  52. package/dist/package/declarations/src/components/Upload/File.vue.d.ts +24 -0
  53. package/dist/package/declarations/src/components/Upload/Files.vue.d.ts +26 -0
  54. package/dist/package/declarations/src/components/Upload/Img.vue.d.ts +43 -0
  55. package/dist/package/declarations/src/components/Upload/Imgs.vue.d.ts +46 -0
  56. package/dist/package/declarations/src/components/WangEditor/index.vue.d.ts +29 -0
  57. package/dist/package/declarations/src/config/index.d.ts +6 -0
  58. package/dist/package/declarations/src/config/nprogress.d.ts +3 -0
  59. package/dist/package/declarations/src/directives/index.d.ts +5 -0
  60. package/dist/package/declarations/src/directives/modules/auth.d.ts +3 -0
  61. package/dist/package/declarations/src/directives/modules/copy.d.ts +8 -0
  62. package/dist/package/declarations/src/directives/modules/debounce.d.ts +8 -0
  63. package/dist/package/declarations/src/directives/modules/draggable.d.ts +3 -0
  64. package/dist/package/declarations/src/directives/modules/longpress.d.ts +7 -0
  65. package/dist/package/declarations/src/directives/modules/throttle.d.ts +3 -0
  66. package/dist/package/declarations/src/directives/modules/waterMarker.d.ts +5 -0
  67. package/dist/package/declarations/src/enums/httpEnum.d.ts +29 -0
  68. package/dist/package/declarations/src/format.d.ts +1 -0
  69. package/dist/package/declarations/src/hooks/interface/index.d.ts +36 -0
  70. package/dist/package/declarations/src/hooks/useAuthButtons.d.ts +8 -0
  71. package/dist/package/declarations/src/hooks/useDownload.d.ts +9 -0
  72. package/dist/package/declarations/src/hooks/useHandleData.d.ts +10 -0
  73. package/dist/package/declarations/src/hooks/useOnline.d.ts +6 -0
  74. package/dist/package/declarations/src/hooks/useSelection.d.ts +10 -0
  75. package/dist/package/declarations/src/hooks/useTable.d.ts +46 -0
  76. package/dist/package/declarations/src/hooks/useTheme.d.ts +12 -0
  77. package/dist/package/declarations/src/hooks/useTime.d.ts +13 -0
  78. package/dist/package/declarations/src/index.d.ts +3 -0
  79. package/dist/package/declarations/src/layouts/LayoutClassic/index.vue.d.ts +3 -0
  80. package/dist/package/declarations/src/layouts/LayoutColumns/index.vue.d.ts +3 -0
  81. package/dist/package/declarations/src/layouts/LayoutTransverse/index.vue.d.ts +3 -0
  82. package/dist/package/declarations/src/layouts/LayoutVertical/index.vue.d.ts +3 -0
  83. package/dist/package/declarations/src/layouts/components/Footer/index.vue.d.ts +3 -0
  84. package/dist/package/declarations/src/layouts/components/Header/ToolBarLeft.vue.d.ts +3 -0
  85. package/dist/package/declarations/src/layouts/components/Header/ToolBarRight.vue.d.ts +3 -0
  86. package/dist/package/declarations/src/layouts/components/Header/components/AssemblySize.vue.d.ts +3 -0
  87. package/dist/package/declarations/src/layouts/components/Header/components/Avatar.vue.d.ts +3 -0
  88. package/dist/package/declarations/src/layouts/components/Header/components/Breadcrumb.vue.d.ts +3 -0
  89. package/dist/package/declarations/src/layouts/components/Header/components/CollapseIcon.vue.d.ts +3 -0
  90. package/dist/package/declarations/src/layouts/components/Header/components/Fullscreen.vue.d.ts +3 -0
  91. package/dist/package/declarations/src/layouts/components/Header/components/InfoDialog.vue.d.ts +5 -0
  92. package/dist/package/declarations/src/layouts/components/Header/components/PasswordDialog.vue.d.ts +5 -0
  93. package/dist/package/declarations/src/layouts/components/Header/components/SearchMenu.vue.d.ts +3 -0
  94. package/dist/package/declarations/src/layouts/components/Header/components/ThemeSetting.vue.d.ts +3 -0
  95. package/dist/package/declarations/src/layouts/components/Main/components/Maximize.vue.d.ts +3 -0
  96. package/dist/package/declarations/src/layouts/components/Main/index.vue.d.ts +3 -0
  97. package/dist/package/declarations/src/layouts/components/Menu/SubMenu.vue.d.ts +7 -0
  98. package/dist/package/declarations/src/layouts/components/Tabs/components/MoreButton.vue.d.ts +3 -0
  99. package/dist/package/declarations/src/layouts/components/Tabs/index.vue.d.ts +3 -0
  100. package/dist/package/declarations/src/layouts/components/ThemeDrawer/index.vue.d.ts +3 -0
  101. package/dist/package/declarations/src/layouts/index.vue.d.ts +3 -0
  102. package/dist/package/declarations/src/layouts/indexAsync.vue.d.ts +3 -0
  103. package/dist/package/declarations/src/modules/index.d.ts +117 -0
  104. package/dist/package/declarations/src/modules/kratosAdmin.d.ts +4 -0
  105. package/dist/package/declarations/src/navigation.d.ts +2 -0
  106. package/dist/package/declarations/src/request.d.ts +2 -0
  107. package/dist/package/declarations/src/routers/index.d.ts +21 -0
  108. package/dist/package/declarations/src/routers/modules/dynamicRouter.d.ts +4 -0
  109. package/dist/package/declarations/src/routers/modules/staticRouter.d.ts +25 -0
  110. package/dist/package/declarations/src/rpc/base/v1/config.d.ts +23 -0
  111. package/dist/package/declarations/src/rpc/base/v1/file.d.ts +52 -0
  112. package/dist/package/declarations/src/rpc/base/v1/login.d.ts +107 -0
  113. package/dist/package/declarations/src/rpc/base/v1/oauth.d.ts +167 -0
  114. package/dist/package/declarations/src/rpc/common/v1/common.d.ts +57 -0
  115. package/dist/package/declarations/src/rpc/common/v1/enum.d.ts +58 -0
  116. package/dist/package/declarations/src/rpc/common/v1/types.d.ts +60 -0
  117. package/dist/package/declarations/src/rpc/google/protobuf/empty.d.ts +11 -0
  118. package/dist/package/declarations/src/rpc/google/protobuf/wrappers.d.ts +108 -0
  119. package/dist/package/declarations/src/rpc/system/admin/v1/auth.d.ts +156 -0
  120. package/dist/package/declarations/src/rpc/system/admin/v1/base_dict.d.ts +215 -0
  121. package/dist/package/declarations/src/rpc/system/admin/v1/base_tenant.d.ts +112 -0
  122. package/dist/package/declarations/src/rpc/system/common/v1/enum.d.ts +67 -0
  123. package/dist/package/declarations/src/security.d.ts +3 -0
  124. package/dist/package/declarations/src/stores/helper/persist.d.ts +9 -0
  125. package/dist/package/declarations/src/stores/index.d.ts +2 -0
  126. package/dist/package/declarations/src/stores/interface/index.d.ts +90 -0
  127. package/dist/package/declarations/src/stores/modules/auth.d.ts +168 -0
  128. package/dist/package/declarations/src/stores/modules/config.d.ts +26 -0
  129. package/dist/package/declarations/src/stores/modules/dict.d.ts +32 -0
  130. package/dist/package/declarations/src/stores/modules/global.d.ts +4 -0
  131. package/dist/package/declarations/src/stores/modules/keepAlive.d.ts +6 -0
  132. package/dist/package/declarations/src/stores/modules/tabs.d.ts +13 -0
  133. package/dist/package/declarations/src/stores/modules/user.d.ts +29 -0
  134. package/dist/package/declarations/src/stores/runtime.d.ts +4 -0
  135. package/dist/package/declarations/src/styles/theme/aside.d.ts +4 -0
  136. package/dist/package/declarations/src/styles/theme/header.d.ts +4 -0
  137. package/dist/package/declarations/src/styles/theme/menu.d.ts +4 -0
  138. package/dist/package/declarations/src/table.d.ts +1 -0
  139. package/dist/package/declarations/src/tenant.d.ts +1 -0
  140. package/dist/package/declarations/src/utils/color.d.ts +28 -0
  141. package/dist/package/declarations/src/utils/dict.d.ts +15 -0
  142. package/dist/package/declarations/src/utils/eleValidate.d.ts +4 -0
  143. package/dist/package/declarations/src/utils/errorHandler.d.ts +5 -0
  144. package/dist/package/declarations/src/utils/index.d.ts +192 -0
  145. package/dist/package/declarations/src/utils/is/index.d.ts +72 -0
  146. package/dist/package/declarations/src/utils/mittBus.d.ts +2 -0
  147. package/dist/package/declarations/src/utils/oauthProvider.d.ts +19 -0
  148. package/dist/package/declarations/src/utils/passwordCrypto.d.ts +6 -0
  149. package/dist/package/declarations/src/utils/passwordStrength.d.ts +36 -0
  150. package/dist/package/declarations/src/utils/proTable.d.ts +44 -0
  151. package/dist/package/declarations/src/utils/request.d.ts +11 -0
  152. package/dist/package/declarations/src/utils/router.d.ts +14 -0
  153. package/dist/package/declarations/src/utils/svg.d.ts +4 -0
  154. package/dist/package/declarations/src/utils/tenant.d.ts +6 -0
  155. package/dist/package/declarations/src/utils/utils.d.ts +12 -0
  156. package/dist/package/declarations/src/views/error/403.vue.d.ts +3 -0
  157. package/dist/package/declarations/src/views/error/404.vue.d.ts +3 -0
  158. package/dist/package/declarations/src/views/error/500.vue.d.ts +3 -0
  159. package/dist/package/declarations/src/views/error/pending.vue.d.ts +3 -0
  160. package/dist/package/declarations/src/views/login/components/LoginForm.vue.d.ts +4 -0
  161. package/dist/package/declarations/src/views/login/index.vue.d.ts +3 -0
  162. package/dist/package/declarations/vite.config.d.ts +13 -0
  163. package/dist/package/src/App.vue +25 -0
  164. package/dist/package/src/api/base/config.ts +19 -0
  165. package/dist/package/src/api/base/file.ts +75 -0
  166. package/dist/package/src/api/base/login.ts +81 -0
  167. package/dist/package/src/api/base/oauth.ts +50 -0
  168. package/dist/package/src/api/system/auth.ts +45 -0
  169. package/dist/package/src/api/system/base_dict.ts +19 -0
  170. package/dist/package/src/api/system/base_tenant.ts +20 -0
  171. package/dist/package/src/assets/fonts/DIN.otf +0 -0
  172. package/dist/package/src/assets/fonts/MetroDF.ttf +0 -0
  173. package/dist/package/src/assets/fonts/YouSheBiaoTiHei.ttf +0 -0
  174. package/dist/package/src/assets/fonts/font.scss +14 -0
  175. package/dist/package/src/assets/iconfont/iconfont.scss +47 -0
  176. package/dist/package/src/assets/iconfont/iconfont.ttf +0 -0
  177. package/dist/package/src/assets/images/403.png +0 -0
  178. package/dist/package/src/assets/images/404.png +0 -0
  179. package/dist/package/src/assets/images/500.png +0 -0
  180. package/dist/package/src/assets/images/avatar.png +0 -0
  181. package/dist/package/src/assets/images/login_bg.svg +33 -0
  182. package/dist/package/src/assets/images/login_left.png +0 -0
  183. package/dist/package/src/assets/images/logo.svg +1 -0
  184. package/dist/package/src/assets/images/notData.png +0 -0
  185. package/dist/package/src/assets/images/oauth/dingtalk.png +0 -0
  186. package/dist/package/src/assets/images/oauth/feishu.png +0 -0
  187. package/dist/package/src/assets/images/oauth/gitee.png +0 -0
  188. package/dist/package/src/assets/images/oauth/github.png +0 -0
  189. package/dist/package/src/assets/images/oauth/google.png +0 -0
  190. package/dist/package/src/assets/images/oauth/wechat.png +0 -0
  191. package/dist/package/src/assets/images/oauth/wechatwork.png +0 -0
  192. package/dist/package/src/auth.ts +1 -0
  193. package/dist/package/src/bootstrap.ts +69 -0
  194. package/dist/package/src/components/Card/DataPanelCard.vue +67 -0
  195. package/dist/package/src/components/CronExpression/index.vue +713 -0
  196. package/dist/package/src/components/Dialog/FormDialog.vue +160 -0
  197. package/dist/package/src/components/Dialog/ProDialog.vue +96 -0
  198. package/dist/package/src/components/Dict/DictLabel.vue +62 -0
  199. package/dist/package/src/components/Dict/index.vue +157 -0
  200. package/dist/package/src/components/ECharts/config/index.ts +45 -0
  201. package/dist/package/src/components/ECharts/index.vue +108 -0
  202. package/dist/package/src/components/ErrorMessage/index.vue +63 -0
  203. package/dist/package/src/components/Grid/components/GridItem.vue +69 -0
  204. package/dist/package/src/components/Grid/index.vue +169 -0
  205. package/dist/package/src/components/Grid/interface/index.ts +8 -0
  206. package/dist/package/src/components/ImportExcel/index.scss +3 -0
  207. package/dist/package/src/components/ImportExcel/index.vue +150 -0
  208. package/dist/package/src/components/Loading/fullScreen.ts +45 -0
  209. package/dist/package/src/components/Loading/index.scss +67 -0
  210. package/dist/package/src/components/Loading/index.vue +13 -0
  211. package/dist/package/src/components/PasswordStrength/index.vue +127 -0
  212. package/dist/package/src/components/ProForm/components/DynamicList.vue +59 -0
  213. package/dist/package/src/components/ProForm/components/KvList.vue +73 -0
  214. package/dist/package/src/components/ProForm/components/ProFormItem.vue +191 -0
  215. package/dist/package/src/components/ProForm/index.vue +120 -0
  216. package/dist/package/src/components/ProForm/interface/index.ts +74 -0
  217. package/dist/package/src/components/ProTable/components/ColSetting.vue +45 -0
  218. package/dist/package/src/components/ProTable/components/Pagination.vue +58 -0
  219. package/dist/package/src/components/ProTable/components/TableColumn.vue +234 -0
  220. package/dist/package/src/components/ProTable/index.vue +567 -0
  221. package/dist/package/src/components/ProTable/interface/index.ts +223 -0
  222. package/dist/package/src/components/ProTable.ts +8 -0
  223. package/dist/package/src/components/SearchForm/components/SearchFormItem.vue +168 -0
  224. package/dist/package/src/components/SearchForm/index.vue +105 -0
  225. package/dist/package/src/components/SelectFilter/index.scss +63 -0
  226. package/dist/package/src/components/SelectFilter/index.vue +113 -0
  227. package/dist/package/src/components/SelectIcon/index.scss +39 -0
  228. package/dist/package/src/components/SelectIcon/index.vue +105 -0
  229. package/dist/package/src/components/SvgIcon/index.vue +35 -0
  230. package/dist/package/src/components/SwitchDark/index.vue +12 -0
  231. package/dist/package/src/components/TreeFilter/index.scss +44 -0
  232. package/dist/package/src/components/TreeFilter/index.vue +207 -0
  233. package/dist/package/src/components/Upload/File.vue +201 -0
  234. package/dist/package/src/components/Upload/Files.vue +234 -0
  235. package/dist/package/src/components/Upload/Img.vue +306 -0
  236. package/dist/package/src/components/Upload/Imgs.vue +320 -0
  237. package/dist/package/src/components/WangEditor/index.scss +28 -0
  238. package/dist/package/src/components/WangEditor/index.vue +154 -0
  239. package/dist/package/src/config/index.ts +19 -0
  240. package/dist/package/src/config/nprogress.ts +12 -0
  241. package/dist/package/src/directives/index.ts +28 -0
  242. package/dist/package/src/directives/modules/auth.ts +25 -0
  243. package/dist/package/src/directives/modules/copy.ts +39 -0
  244. package/dist/package/src/directives/modules/debounce.ts +32 -0
  245. package/dist/package/src/directives/modules/draggable.ts +50 -0
  246. package/dist/package/src/directives/modules/longpress.ts +49 -0
  247. package/dist/package/src/directives/modules/throttle.ts +42 -0
  248. package/dist/package/src/directives/modules/waterMarker.ts +36 -0
  249. package/dist/package/src/enums/httpEnum.ts +35 -0
  250. package/dist/package/src/format.ts +1 -0
  251. package/dist/package/src/hooks/interface/index.ts +38 -0
  252. package/dist/package/src/hooks/useAuthButtons.ts +25 -0
  253. package/dist/package/src/hooks/useDownload.ts +44 -0
  254. package/dist/package/src/hooks/useHandleData.ts +38 -0
  255. package/dist/package/src/hooks/useOnline.ts +27 -0
  256. package/dist/package/src/hooks/useSelection.ts +34 -0
  257. package/dist/package/src/hooks/useTable.ts +151 -0
  258. package/dist/package/src/hooks/useTheme.ts +111 -0
  259. package/dist/package/src/hooks/useTime.ts +38 -0
  260. package/dist/package/src/index.ts +9 -0
  261. package/dist/package/src/layouts/LayoutClassic/index.scss +60 -0
  262. package/dist/package/src/layouts/LayoutClassic/index.vue +64 -0
  263. package/dist/package/src/layouts/LayoutColumns/index.scss +95 -0
  264. package/dist/package/src/layouts/LayoutColumns/index.vue +113 -0
  265. package/dist/package/src/layouts/LayoutTransverse/index.scss +60 -0
  266. package/dist/package/src/layouts/LayoutTransverse/index.vue +70 -0
  267. package/dist/package/src/layouts/LayoutVertical/index.scss +70 -0
  268. package/dist/package/src/layouts/LayoutVertical/index.vue +119 -0
  269. package/dist/package/src/layouts/components/Footer/index.scss +11 -0
  270. package/dist/package/src/layouts/components/Footer/index.vue +21 -0
  271. package/dist/package/src/layouts/components/Header/ToolBarLeft.vue +23 -0
  272. package/dist/package/src/layouts/components/Header/ToolBarRight.vue +44 -0
  273. package/dist/package/src/layouts/components/Header/components/AssemblySize.vue +39 -0
  274. package/dist/package/src/layouts/components/Header/components/Avatar.vue +226 -0
  275. package/dist/package/src/layouts/components/Header/components/Breadcrumb.vue +117 -0
  276. package/dist/package/src/layouts/components/Header/components/CollapseIcon.vue +21 -0
  277. package/dist/package/src/layouts/components/Header/components/Fullscreen.vue +28 -0
  278. package/dist/package/src/layouts/components/Header/components/InfoDialog.vue +22 -0
  279. package/dist/package/src/layouts/components/Header/components/PasswordDialog.vue +22 -0
  280. package/dist/package/src/layouts/components/Header/components/SearchMenu.vue +207 -0
  281. package/dist/package/src/layouts/components/Header/components/ThemeSetting.vue +14 -0
  282. package/dist/package/src/layouts/components/Main/components/Maximize.vue +39 -0
  283. package/dist/package/src/layouts/components/Main/index.scss +14 -0
  284. package/dist/package/src/layouts/components/Main/index.vue +90 -0
  285. package/dist/package/src/layouts/components/Menu/SubMenu.vue +132 -0
  286. package/dist/package/src/layouts/components/Tabs/components/MoreButton.vue +83 -0
  287. package/dist/package/src/layouts/components/Tabs/index.scss +69 -0
  288. package/dist/package/src/layouts/components/Tabs/index.vue +111 -0
  289. package/dist/package/src/layouts/components/ThemeDrawer/index.scss +137 -0
  290. package/dist/package/src/layouts/components/ThemeDrawer/index.vue +191 -0
  291. package/dist/package/src/layouts/index.vue +50 -0
  292. package/dist/package/src/layouts/indexAsync.vue +54 -0
  293. package/dist/package/src/modules/index.ts +233 -0
  294. package/dist/package/src/modules/kratosAdmin.ts +17 -0
  295. package/dist/package/src/navigation.ts +2 -0
  296. package/dist/package/src/request.ts +2 -0
  297. package/dist/package/src/routers/index.ts +143 -0
  298. package/dist/package/src/routers/modules/dynamicRouter.ts +160 -0
  299. package/dist/package/src/routers/modules/staticRouter.ts +73 -0
  300. package/dist/package/src/rpc/base/v1/config.ts +34 -0
  301. package/dist/package/src/rpc/base/v1/file.ts +66 -0
  302. package/dist/package/src/rpc/base/v1/login.ts +128 -0
  303. package/dist/package/src/rpc/base/v1/oauth.ts +199 -0
  304. package/dist/package/src/rpc/common/v1/common.ts +71 -0
  305. package/dist/package/src/rpc/common/v1/enum.ts +71 -0
  306. package/dist/package/src/rpc/common/v1/types.ts +77 -0
  307. package/dist/package/src/rpc/google/protobuf/empty.ts +19 -0
  308. package/dist/package/src/rpc/google/protobuf/wrappers.ts +124 -0
  309. package/dist/package/src/rpc/system/admin/v1/auth.ts +208 -0
  310. package/dist/package/src/rpc/system/admin/v1/base_dict.ts +249 -0
  311. package/dist/package/src/rpc/system/admin/v1/base_tenant.ts +134 -0
  312. package/dist/package/src/rpc/system/common/v1/enum.ts +80 -0
  313. package/dist/package/src/security.ts +3 -0
  314. package/dist/package/src/stores/helper/persist.ts +19 -0
  315. package/dist/package/src/stores/index.ts +8 -0
  316. package/dist/package/src/stores/interface/index.ts +102 -0
  317. package/dist/package/src/stores/modules/auth.ts +73 -0
  318. package/dist/package/src/stores/modules/config.ts +119 -0
  319. package/dist/package/src/stores/modules/dict.ts +65 -0
  320. package/dist/package/src/stores/modules/global.ts +54 -0
  321. package/dist/package/src/stores/modules/keepAlive.ts +22 -0
  322. package/dist/package/src/stores/modules/tabs.ts +77 -0
  323. package/dist/package/src/stores/modules/user.ts +109 -0
  324. package/dist/package/src/stores/runtime.ts +4 -0
  325. package/dist/package/src/styles/common.scss +144 -0
  326. package/dist/package/src/styles/element-dark.scss +46 -0
  327. package/dist/package/src/styles/element.scss +333 -0
  328. package/dist/package/src/styles/reset.scss +143 -0
  329. package/dist/package/src/styles/theme/aside.ts +16 -0
  330. package/dist/package/src/styles/theme/header.ts +25 -0
  331. package/dist/package/src/styles/theme/menu.ts +31 -0
  332. package/dist/package/src/styles/var.scss +2 -0
  333. package/dist/package/src/table.ts +1 -0
  334. package/dist/package/src/tenant.ts +1 -0
  335. package/dist/package/src/typings/global.d.ts +74 -0
  336. package/dist/package/src/typings/utils.d.ts +17 -0
  337. package/dist/package/src/typings/window.d.ts +8 -0
  338. package/dist/package/src/utils/color.ts +59 -0
  339. package/dist/package/src/utils/dict.ts +17 -0
  340. package/dist/package/src/utils/eleValidate.ts +14 -0
  341. package/dist/package/src/utils/errorHandler.ts +27 -0
  342. package/dist/package/src/utils/index.ts +403 -0
  343. package/dist/package/src/utils/is/index.ts +125 -0
  344. package/dist/package/src/utils/mittBus.ts +5 -0
  345. package/dist/package/src/utils/oauthProvider.ts +79 -0
  346. package/dist/package/src/utils/passwordCrypto.ts +71 -0
  347. package/dist/package/src/utils/passwordStrength.ts +86 -0
  348. package/dist/package/src/utils/proTable.ts +124 -0
  349. package/dist/package/src/utils/request.ts +296 -0
  350. package/dist/package/src/utils/router.ts +43 -0
  351. package/dist/package/src/utils/svg.ts +13 -0
  352. package/dist/package/src/utils/tenant.ts +10 -0
  353. package/dist/package/src/utils/utils.ts +40 -0
  354. package/dist/package/src/views/error/403.vue +8 -0
  355. package/dist/package/src/views/error/404.vue +8 -0
  356. package/dist/package/src/views/error/500.vue +8 -0
  357. package/dist/package/src/views/error/pending.vue +16 -0
  358. package/dist/package/src/views/login/components/LoginForm.vue +797 -0
  359. package/dist/package/src/views/login/index.scss +103 -0
  360. package/dist/package/src/views/login/index.vue +108 -0
  361. package/dist/package/src/vite-env.d.ts +3 -0
  362. package/dist/package/types/generated/auto-imports.d.ts +124 -0
  363. package/dist/package/types/generated/components.d.ts +151 -0
  364. package/package.json +199 -0
  365. package/tsconfig.json +21 -0
  366. package/types/generated/auto-imports.d.ts +124 -0
  367. package/types/generated/components.d.ts +151 -0
  368. package/vite.config.ts +239 -0
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <el-dialog v-model="dialogVisible" title="修改密码" width="500px" draggable>
3
+ <span>This is Password</span>
4
+ <template #footer>
5
+ <span class="dialog-footer">
6
+ <el-button @click="dialogVisible = false">取消</el-button>
7
+ <el-button type="primary" @click="dialogVisible = false">确认</el-button>
8
+ </span>
9
+ </template>
10
+ </el-dialog>
11
+ </template>
12
+
13
+ <script setup lang="ts">
14
+ import { ref } from "vue";
15
+
16
+ const dialogVisible = ref(false);
17
+ const openDialog = () => {
18
+ dialogVisible.value = true;
19
+ };
20
+
21
+ defineExpose({ openDialog });
22
+ </script>
@@ -0,0 +1,207 @@
1
+ <template>
2
+ <div class="search-menu">
3
+ <el-tooltip effect="dark" content="菜单搜索" placement="bottom" :show-after="200">
4
+ <i :class="'iconfont icon-sousuo'" class="toolBar-icon" @click="handleOpen"></i>
5
+ </el-tooltip>
6
+ <el-dialog class="search-dialog" v-model="isShowSearch" :width="600" :show-close="false" top="10vh">
7
+ <el-input
8
+ v-model="searchMenu"
9
+ ref="menuInputRef"
10
+ placeholder="菜单搜索:支持菜单名称、路径"
11
+ size="large"
12
+ clearable
13
+ :prefix-icon="Search"
14
+ ></el-input>
15
+ <div v-if="searchList.length" class="menu-list" ref="menuListRef">
16
+ <div
17
+ v-for="item in searchList"
18
+ :key="item.path"
19
+ :class="['menu-item', { 'menu-active': item.path === activePath }]"
20
+ @mouseenter="mouseoverMenuItem(item)"
21
+ @click="handleClickMenu()"
22
+ >
23
+ <div class="menu-lf">
24
+ <el-icon class="menu-icon">
25
+ <component :is="getRouteMetaIcon(item.meta)"></component>
26
+ </el-icon>
27
+ <span class="menu-title">{{ getRouteMetaTitle(item.meta) }}</span>
28
+ </div>
29
+ <i :class="'iconfont icon-huiche'" class="menu-enter" @click="handleOpen"></i>
30
+ </div>
31
+ </div>
32
+ <el-empty v-else class="mt20 mb20" :image-size="100" description="暂无菜单" />
33
+ </el-dialog>
34
+ </div>
35
+ </template>
36
+
37
+ <script setup lang="ts">
38
+ import { ref, computed, nextTick, watch } from "vue";
39
+ import { InputInstance } from "element-plus";
40
+ import { Search } from "@element-plus/icons-vue";
41
+ import { useAuthStore } from "../../../../stores/modules/auth";
42
+ import { useRouter } from "vue-router";
43
+ import { useDebounceFn } from "@vueuse/core";
44
+ import type { RouteItem } from "../../../../rpc/system/admin/v1/auth";
45
+ import { getRouteMetaHidden, getRouteMetaIcon, getRouteMetaTitle, getRouteTarget, isExternalPath } from "../../../../utils";
46
+
47
+ /** 可被菜单搜索展示的路由项。 */
48
+ interface SearchRouteItem extends RouteItem {
49
+ path: string;
50
+ }
51
+
52
+ const router = useRouter();
53
+ const authStore = useAuthStore();
54
+ const menuList = computed<SearchRouteItem[]>(() => {
55
+ return authStore.flatMenuListGet.filter((item): item is SearchRouteItem => {
56
+ return Boolean(item.path) && !getRouteMetaHidden(item.meta);
57
+ });
58
+ });
59
+
60
+ const activePath = ref("");
61
+ /** 鼠标移入菜单项时同步当前高亮路径。 */
62
+ const mouseoverMenuItem = (menu: SearchRouteItem) => {
63
+ activePath.value = menu.path;
64
+ };
65
+
66
+ const menuInputRef = ref<InputInstance | null>(null);
67
+ const isShowSearch = ref<boolean>(false);
68
+ const searchMenu = ref<string>("");
69
+
70
+ watch(isShowSearch, val => {
71
+ if (val) {
72
+ document.addEventListener("keydown", keyboardOperation);
73
+ } else {
74
+ document.removeEventListener("keydown", keyboardOperation);
75
+ }
76
+ });
77
+
78
+ /** 打开菜单搜索弹窗并聚焦输入框。 */
79
+ const handleOpen = () => {
80
+ isShowSearch.value = true;
81
+ nextTick(() => {
82
+ setTimeout(() => {
83
+ menuInputRef.value?.focus();
84
+ });
85
+ });
86
+ };
87
+
88
+ const searchList = ref<SearchRouteItem[]>([]);
89
+ /** 根据关键词刷新可跳转菜单列表。 */
90
+ const updateSearchList = () => {
91
+ searchList.value = searchMenu.value
92
+ ? menuList.value.filter(
93
+ item =>
94
+ (item.path.toLowerCase().includes(searchMenu.value.toLowerCase()) ||
95
+ getRouteMetaTitle(item.meta).toLowerCase().includes(searchMenu.value.toLowerCase())) &&
96
+ !getRouteMetaHidden(item.meta)
97
+ )
98
+ : [];
99
+ activePath.value = searchList.value.length ? searchList.value[0].path : "";
100
+ };
101
+
102
+ const debouncedUpdateSearchList = useDebounceFn(updateSearchList, 300);
103
+
104
+ watch(searchMenu, debouncedUpdateSearchList);
105
+
106
+ const menuListRef = ref<Element | null>(null);
107
+ /** 处理键盘上下键切换菜单高亮项。 */
108
+ const keyPressUpOrDown = (direction: number) => {
109
+ const length = searchList.value.length;
110
+ if (length === 0) return;
111
+ const index = searchList.value.findIndex(item => item.path === activePath.value);
112
+ const newIndex = (index + direction + length) % length;
113
+ activePath.value = searchList.value[newIndex].path;
114
+ nextTick(() => {
115
+ if (!menuListRef.value?.firstElementChild) return;
116
+ const menuItemHeight = menuListRef.value.firstElementChild.clientHeight + 12 || 0;
117
+ menuListRef.value.scrollTop = newIndex * menuItemHeight;
118
+ });
119
+ };
120
+
121
+ /** 处理菜单搜索弹窗内的键盘导航。 */
122
+ const keyboardOperation = (event: KeyboardEvent) => {
123
+ if (event.key === "ArrowUp") {
124
+ event.preventDefault();
125
+ keyPressUpOrDown(-1);
126
+ } else if (event.key === "ArrowDown") {
127
+ event.preventDefault();
128
+ keyPressUpOrDown(1);
129
+ } else if (event.key === "Enter") {
130
+ event.preventDefault();
131
+ handleClickMenu();
132
+ }
133
+ };
134
+
135
+ /** 跳转到当前选中的菜单路径。 */
136
+ const handleClickMenu = () => {
137
+ const menu = searchList.value.find(item => item.path === activePath.value);
138
+ if (!menu) return;
139
+ const target = getRouteTarget(menu);
140
+ if (!target) return;
141
+ if (isExternalPath(target)) {
142
+ window.open(target, "_blank", "noopener,noreferrer");
143
+ } else {
144
+ router.push(target);
145
+ }
146
+ searchMenu.value = "";
147
+ isShowSearch.value = false;
148
+ };
149
+ </script>
150
+
151
+ <style scoped lang="scss">
152
+ .search-menu {
153
+ :deep(.el-dialog) {
154
+ border-radius: 4px;
155
+ .el-dialog__header {
156
+ display: none;
157
+ }
158
+ }
159
+ .menu-list {
160
+ max-height: 515px;
161
+ margin-top: 15px;
162
+ overflow: auto;
163
+ .menu-item {
164
+ position: relative;
165
+ display: flex;
166
+ align-items: center;
167
+ justify-content: space-between;
168
+ height: 45px;
169
+ padding: 0 20px;
170
+ margin: 10px 0;
171
+ color: var(--el-text-color-secondary);
172
+ cursor: pointer;
173
+ background-color: transparent;
174
+ border: 1px solid var(--el-border-color);
175
+ border-radius: 6px;
176
+ transition: all 0.2s ease;
177
+ .menu-lf {
178
+ display: flex;
179
+ align-items: center;
180
+ }
181
+ .menu-icon {
182
+ margin-right: 8px;
183
+ font-size: 16px;
184
+ }
185
+ .menu-title {
186
+ font-size: 14px;
187
+ }
188
+ .menu-enter {
189
+ font-size: 17px;
190
+ }
191
+ }
192
+ .menu-active {
193
+ color: #ffffff;
194
+ background-color: var(--el-color-primary);
195
+ .menu-icon {
196
+ font-size: 18px;
197
+ }
198
+ .menu-title {
199
+ font-size: 16px;
200
+ }
201
+ .menu-enter {
202
+ font-size: 19px;
203
+ }
204
+ }
205
+ }
206
+ }
207
+ </style>
@@ -0,0 +1,14 @@
1
+ <template>
2
+ <div class="theme-setting">
3
+ <el-tooltip effect="dark" content="主题设置" placement="bottom" :show-after="200">
4
+ <i :class="'iconfont icon-zhuti'" class="toolBar-icon" @click="openDrawer"></i>
5
+ </el-tooltip>
6
+ </div>
7
+ </template>
8
+
9
+ <script setup lang="ts">
10
+ import mittBus from "../../../../utils/mittBus";
11
+ const openDrawer = () => {
12
+ mittBus.emit("openThemeDrawer");
13
+ };
14
+ </script>
@@ -0,0 +1,39 @@
1
+ <template>
2
+ <div class="maximize" @click="exitMaximize">
3
+ <i :class="'iconfont icon-tuichu'"></i>
4
+ </div>
5
+ </template>
6
+
7
+ <script setup lang="ts">
8
+ import { useGlobalStore } from "../../../../stores/modules/global";
9
+
10
+ const globalStore = useGlobalStore();
11
+ const exitMaximize = () => {
12
+ globalStore.setGlobalState("maximize", false);
13
+ };
14
+ </script>
15
+
16
+ <style scoped lang="scss">
17
+ .maximize {
18
+ position: fixed;
19
+ top: -25px;
20
+ right: -25px;
21
+ z-index: 999;
22
+ width: 55px;
23
+ height: 55px;
24
+ cursor: pointer;
25
+ background-color: var(--el-color-info);
26
+ border-radius: 50%;
27
+ opacity: 0.9;
28
+ &:hover {
29
+ background-color: var(--el-color-info-dark-2);
30
+ }
31
+ .iconfont {
32
+ position: relative;
33
+ top: 46%;
34
+ left: 19%;
35
+ font-size: 14px;
36
+ color: #ffffff;
37
+ }
38
+ }
39
+ </style>
@@ -0,0 +1,14 @@
1
+ .el-main {
2
+ box-sizing: border-box;
3
+ display: flex;
4
+ flex-direction: column;
5
+ height: 100%;
6
+ min-height: 0;
7
+ padding: 10px 12px;
8
+ overflow-x: hidden;
9
+ background-color: var(--el-bg-color-page);
10
+ }
11
+ .el-footer {
12
+ height: auto;
13
+ padding: 0;
14
+ }
@@ -0,0 +1,90 @@
1
+ <template>
2
+ <Maximize v-show="maximize" />
3
+ <Tabs v-show="tabs" />
4
+ <el-main>
5
+ <router-view v-slot="{ Component, route }">
6
+ <transition appear name="fade-transform" mode="out-in">
7
+ <keep-alive :include="keepAliveName">
8
+ <component :is="createComponentWrapper(Component, route)" v-if="isRouterShow" :key="route.fullPath" />
9
+ </keep-alive>
10
+ </transition>
11
+ </router-view>
12
+ </el-main>
13
+ <el-footer v-show="footer">
14
+ <Footer />
15
+ </el-footer>
16
+ </template>
17
+
18
+ <script setup lang="ts">
19
+ import { ref, onBeforeUnmount, provide, watch, h } from "vue";
20
+ import { storeToRefs } from "pinia";
21
+ import { useDebounceFn } from "@vueuse/core";
22
+ import { useGlobalStore } from "../../../stores/modules/global";
23
+ import { useKeepAliveStore } from "../../../stores/modules/keepAlive";
24
+ import Maximize from "./components/Maximize.vue";
25
+ import Tabs from "../../../layouts/components/Tabs/index.vue";
26
+ import Footer from "../../../layouts/components/Footer/index.vue";
27
+
28
+ const globalStore = useGlobalStore();
29
+ const { maximize, isCollapse, layout, tabs, footer } = storeToRefs(globalStore);
30
+
31
+ const keepAliveStore = useKeepAliveStore();
32
+ const { keepAliveName } = storeToRefs(keepAliveStore);
33
+
34
+ // 注入刷新页面方法
35
+ const isRouterShow = ref(true);
36
+ const refreshCurrentPage = (val: boolean) => (isRouterShow.value = val);
37
+ provide("refresh", refreshCurrentPage);
38
+
39
+ // 解决详情页 keep-alive 问题
40
+ const wrapperMap = new Map();
41
+ function createComponentWrapper(component, route) {
42
+ if (!component) return;
43
+ const wrapperName = route.fullPath;
44
+ const wrapperCache = wrapperMap.get(wrapperName);
45
+ if (!wrapperCache || wrapperCache.component !== component) {
46
+ // 按完整路由生成独立包装组件,避免多标签切换时复用同一个动态组件实例导致内容串页。
47
+ const wrapper = { name: wrapperName, render: () => h(component) };
48
+ wrapperMap.set(wrapperName, { component, wrapper });
49
+ return wrapper;
50
+ }
51
+ return wrapperCache.wrapper;
52
+ }
53
+
54
+ // 监听当前页面是否最大化,动态添加 class
55
+ watch(
56
+ () => maximize.value,
57
+ () => {
58
+ const app = document.getElementById("app") as HTMLElement;
59
+ if (maximize.value) app.classList.add("main-maximize");
60
+ else app.classList.remove("main-maximize");
61
+ },
62
+ { immediate: true }
63
+ );
64
+
65
+ // 监听布局变化,在 body 上添加相对应的 layout class
66
+ watch(
67
+ () => layout.value,
68
+ () => {
69
+ const body = document.body as HTMLElement;
70
+ body.setAttribute("class", layout.value);
71
+ },
72
+ { immediate: true }
73
+ );
74
+
75
+ // 监听窗口大小变化,折叠侧边栏
76
+ const screenWidth = ref(0);
77
+ const listeningWindow = useDebounceFn(() => {
78
+ screenWidth.value = document.body.clientWidth;
79
+ if (!isCollapse.value && screenWidth.value < 1200) globalStore.setGlobalState("isCollapse", true);
80
+ if (isCollapse.value && screenWidth.value > 1200) globalStore.setGlobalState("isCollapse", false);
81
+ }, 100);
82
+ window.addEventListener("resize", listeningWindow, false);
83
+ onBeforeUnmount(() => {
84
+ window.removeEventListener("resize", listeningWindow);
85
+ });
86
+ </script>
87
+
88
+ <style scoped lang="scss">
89
+ @use "./index.scss" as *;
90
+ </style>
@@ -0,0 +1,132 @@
1
+ <template>
2
+ <template v-for="subItem in menuList" :key="getRouteMenuKey(subItem)">
3
+ <el-sub-menu v-if="isSubMenu(subItem)" :index="getRouteMenuKey(subItem)">
4
+ <template #title>
5
+ <el-icon v-if="getRouteMetaIcon(subItem.meta)">
6
+ <component :is="getRouteMetaIcon(subItem.meta)"></component>
7
+ </el-icon>
8
+ <span class="sle">{{ getRouteMetaTitle(subItem.meta) }}</span>
9
+ </template>
10
+ <SubMenu :menu-list="getSubMenuChildren(subItem)" />
11
+ </el-sub-menu>
12
+ <el-menu-item v-else :index="getRouteMenuKey(getMenuItem(subItem))" @click="handleClickMenu(getMenuItem(subItem))">
13
+ <el-icon v-if="getRouteMetaIcon(getMenuItem(subItem).meta)">
14
+ <component :is="getRouteMetaIcon(getMenuItem(subItem).meta)"></component>
15
+ </el-icon>
16
+ <template #title>
17
+ <span class="sle">{{ getRouteMetaTitle(getMenuItem(subItem).meta) }}</span>
18
+ </template>
19
+ </el-menu-item>
20
+ </template>
21
+ </template>
22
+
23
+ <script setup lang="ts">
24
+ import { useRouter } from "vue-router";
25
+ import type { RouteItem } from "../../../rpc/system/admin/v1/auth";
26
+ import {
27
+ getRouteTarget,
28
+ getRouteMenuKey,
29
+ getRouteMetaAlwaysShow,
30
+ getRouteMetaHidden,
31
+ getRouteMetaIcon,
32
+ getRouteMetaTitle,
33
+ isExternalPath
34
+ } from "../../../utils";
35
+
36
+ defineProps<{ menuList: RouteItem[] }>();
37
+
38
+ const router = useRouter();
39
+ /** 侧边菜单渲染时必须具备路径的菜单项。 */
40
+ type VisibleRouteItem = RouteItem & { path: string };
41
+
42
+ const ensureRoutePath = (subItem: RouteItem): VisibleRouteItem => {
43
+ return {
44
+ ...subItem,
45
+ path: subItem.path ?? ""
46
+ };
47
+ };
48
+
49
+ /** 获取当前菜单节点应继续渲染的可见子菜单。 */
50
+ const getSubMenuChildren = (subItem: RouteItem) => {
51
+ const visibleChildren = (subItem.children ?? []).filter(item => !getRouteMetaHidden(item.meta));
52
+ if (getRouteMetaAlwaysShow(subItem.meta) || visibleChildren.length !== 1) return visibleChildren;
53
+ return visibleChildren[0].children ?? [];
54
+ };
55
+
56
+ const getMenuItem = (subItem: RouteItem): VisibleRouteItem => {
57
+ const visibleChildren = (subItem.children ?? []).filter(item => !getRouteMetaHidden(item.meta));
58
+ if (getRouteMetaAlwaysShow(subItem.meta) || visibleChildren.length !== 1) return ensureRoutePath(subItem);
59
+ return ensureRoutePath(visibleChildren[0]);
60
+ };
61
+
62
+ /** 判断当前节点是否需要渲染为子菜单容器。 */
63
+ const isSubMenu = (subItem: RouteItem) => {
64
+ const visibleChildren = (subItem.children ?? []).filter(item => !getRouteMetaHidden(item.meta));
65
+ if (!visibleChildren.length) return false;
66
+ return getRouteMetaAlwaysShow(subItem.meta) || visibleChildren.length > 1;
67
+ };
68
+
69
+ /** 处理侧边菜单点击并跳转内部路由或外链。 */
70
+ const handleClickMenu = (subItem: RouteItem) => {
71
+ const menuItem = getMenuItem(subItem);
72
+ const target = getRouteTarget(menuItem);
73
+ if (!target) return;
74
+ if (isExternalPath(target)) {
75
+ window.open(target, "_blank", "noopener,noreferrer");
76
+ return;
77
+ }
78
+ router.push(target);
79
+ };
80
+ </script>
81
+
82
+ <style lang="scss">
83
+ .el-sub-menu .el-sub-menu__title:hover {
84
+ color: var(--el-menu-hover-text-color) !important;
85
+ background-color: transparent !important;
86
+ }
87
+ .el-menu--collapse {
88
+ .is-active {
89
+ .el-sub-menu__title {
90
+ color: #ffffff !important;
91
+ background-color: var(--el-color-primary) !important;
92
+ }
93
+ }
94
+ }
95
+ .el-menu-item {
96
+ &:hover {
97
+ color: var(--el-menu-hover-text-color);
98
+ }
99
+ &.is-active {
100
+ color: var(--el-menu-active-color) !important;
101
+ background-color: var(--el-menu-active-bg-color) !important;
102
+ &::before {
103
+ position: absolute;
104
+ top: 0;
105
+ bottom: 0;
106
+ width: 4px;
107
+ content: "";
108
+ background-color: var(--el-color-primary);
109
+ }
110
+ }
111
+ }
112
+ .vertical,
113
+ .classic,
114
+ .transverse {
115
+ .el-menu-item {
116
+ &.is-active {
117
+ &::before {
118
+ left: 0;
119
+ }
120
+ }
121
+ }
122
+ }
123
+ .columns {
124
+ .el-menu-item {
125
+ &.is-active {
126
+ &::before {
127
+ right: 0;
128
+ }
129
+ }
130
+ }
131
+ }
132
+ </style>
@@ -0,0 +1,83 @@
1
+ <template>
2
+ <el-dropdown trigger="click" :teleported="false">
3
+ <div class="more-button">
4
+ <i :class="'iconfont icon-xiala'"></i>
5
+ </div>
6
+ <template #dropdown>
7
+ <el-dropdown-menu>
8
+ <el-dropdown-item @click="refresh">
9
+ <el-icon><Refresh /></el-icon>刷新当前
10
+ </el-dropdown-item>
11
+ <el-dropdown-item @click="maximize">
12
+ <el-icon><FullScreen /></el-icon>最大化
13
+ </el-dropdown-item>
14
+ <el-dropdown-item divided @click="closeCurrentTab">
15
+ <el-icon><Remove /></el-icon>关闭当前
16
+ </el-dropdown-item>
17
+ <el-dropdown-item @click="tabStore.closeTabsOnSide(currentTabPath, 'left')">
18
+ <el-icon><DArrowLeft /></el-icon>关闭左侧
19
+ </el-dropdown-item>
20
+ <el-dropdown-item @click="tabStore.closeTabsOnSide(currentTabPath, 'right')">
21
+ <el-icon><DArrowRight /></el-icon>关闭右侧
22
+ </el-dropdown-item>
23
+ <el-dropdown-item divided @click="tabStore.closeMultipleTab(currentTabPath)">
24
+ <el-icon><CircleClose /></el-icon>关闭其他
25
+ </el-dropdown-item>
26
+ <el-dropdown-item @click="closeAllTab">
27
+ <el-icon><FolderDelete /></el-icon>关闭全部
28
+ </el-dropdown-item>
29
+ </el-dropdown-menu>
30
+ </template>
31
+ </el-dropdown>
32
+ </template>
33
+
34
+ <script setup lang="ts">
35
+ import { computed, inject, nextTick } from "vue";
36
+ import { HOME_URL } from "../../../../config";
37
+ import { getAdminTabPath } from "../../../../modules";
38
+ import { useTabsStore } from "../../../../stores/modules/tabs";
39
+ import { useGlobalStore } from "../../../../stores/modules/global";
40
+ import { useKeepAliveStore } from "../../../../stores/modules/keepAlive";
41
+ import { useRoute, useRouter } from "vue-router";
42
+
43
+ const route = useRoute();
44
+ const router = useRouter();
45
+ const tabStore = useTabsStore();
46
+ const globalStore = useGlobalStore();
47
+ const keepAliveStore = useKeepAliveStore();
48
+ const currentTabPath = computed(() => getAdminTabPath(route));
49
+
50
+ // refresh current page
51
+ const refreshCurrentPage: Function = inject("refresh") as Function;
52
+ const refresh = () => {
53
+ setTimeout(() => {
54
+ route.meta.keepAlive && keepAliveStore.removeKeepAliveName(currentTabPath.value);
55
+ refreshCurrentPage(false);
56
+ nextTick(() => {
57
+ route.meta.keepAlive && keepAliveStore.addKeepAliveName(currentTabPath.value);
58
+ refreshCurrentPage(true);
59
+ });
60
+ }, 0);
61
+ };
62
+
63
+ // maximize current page
64
+ const maximize = () => {
65
+ globalStore.setGlobalState("maximize", true);
66
+ };
67
+
68
+ // Close Current
69
+ const closeCurrentTab = () => {
70
+ if (route.meta.affix) return;
71
+ tabStore.removeTabs(currentTabPath.value);
72
+ };
73
+
74
+ // Close All
75
+ const closeAllTab = () => {
76
+ tabStore.closeMultipleTab();
77
+ router.push(HOME_URL);
78
+ };
79
+ </script>
80
+
81
+ <style scoped lang="scss">
82
+ @use "../index.scss" as *;
83
+ </style>
@@ -0,0 +1,69 @@
1
+ .tabs-box {
2
+ background-color: var(--el-bg-color);
3
+ .tabs-menu {
4
+ position: relative;
5
+ width: 100%;
6
+ .el-dropdown {
7
+ position: absolute;
8
+ top: 0;
9
+ right: 0;
10
+ bottom: 0;
11
+ .more-button {
12
+ display: flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ width: 43px;
16
+ cursor: pointer;
17
+ border-left: 1px solid var(--el-border-color-light);
18
+ transition: all 0.3s;
19
+ &:hover {
20
+ background-color: var(--el-color-info-light-9);
21
+ }
22
+ .iconfont {
23
+ font-size: 12.5px;
24
+ }
25
+ }
26
+ }
27
+ :deep(.el-tabs) {
28
+ .el-tabs__header {
29
+ box-sizing: border-box;
30
+ height: 40px;
31
+ padding: 0 10px;
32
+ margin: 0;
33
+ .el-tabs__nav-wrap {
34
+ position: absolute;
35
+ width: calc(100% - 70px);
36
+ .el-tabs__nav {
37
+ display: flex;
38
+ border: none;
39
+ .el-tabs__item {
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ color: #afafaf;
44
+ border: none;
45
+ .tabs-icon {
46
+ margin: 1.5px 4px 0 0;
47
+ font-size: 15px;
48
+ }
49
+ .is-icon-close {
50
+ margin-top: 1px;
51
+ }
52
+ &.is-active {
53
+ color: var(--el-color-primary);
54
+ &::before {
55
+ position: absolute;
56
+ bottom: 0;
57
+ width: 100%;
58
+ height: 0;
59
+ content: "";
60
+ border-bottom: 2px solid var(--el-color-primary) !important;
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }