@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,223 @@
1
+ import { Ref, VNode } from "vue";
2
+ import { BreakPoint, Responsive } from "../../../components/Grid/interface";
3
+ import type { Table } from "../../../hooks/interface";
4
+ import { TableColumnCtx } from "element-plus/es/components/table/src/table-column/defaults";
5
+
6
+ /** ProTable 默认行数据结构。 */
7
+ type DefaultRow = Record<string, any>;
8
+
9
+ /** 表格枚举选项结构,供搜索项、字典和状态列复用。 */
10
+ export interface EnumProps {
11
+ label?: string; // 选项框显示的文字
12
+ value?: string | number | boolean | any[]; // 选项框值
13
+ disabled?: boolean; // 是否禁用此选项
14
+ tagType?: string; // 当 tag 为 true 时,此选择会指定 tag 显示类型
15
+ children?: EnumProps[]; // 为树形选择时,可以通过 children 属性指定子选项
16
+ [key: string]: any;
17
+ }
18
+
19
+ /** Element Plus 表格内置列类型。 */
20
+ export type TypeProps = "index" | "selection" | "radio" | "expand" | "sort";
21
+
22
+ /** ProTable 搜索表单支持的控件类型。 */
23
+ export type SearchType =
24
+ | "input"
25
+ | "input-number"
26
+ | "select"
27
+ | "select-v2"
28
+ | "tree-select"
29
+ | "cascader"
30
+ | "date-picker"
31
+ | "time-picker"
32
+ | "time-select"
33
+ | "switch"
34
+ | "slider";
35
+
36
+ /** ProTable 组件属性。 */
37
+ export interface ProTableProps {
38
+ columns: ColumnProps[];
39
+ headerActions?: HeaderActionProps[];
40
+ data?: any[];
41
+ requestApi?: (params: any) => Promise<any>;
42
+ requestAuto?: boolean;
43
+ requestError?: (params: any) => void;
44
+ dataCallback?: (data: any) => any;
45
+ title?: string;
46
+ pagination?: boolean;
47
+ initParam?: any;
48
+ border?: boolean;
49
+ toolButton?: ("refresh" | "setting" | "search")[] | boolean;
50
+ rowKey?: string;
51
+ restoreSelectedRowKeys?: Array<string | number>;
52
+ searchCol?: number | Record<BreakPoint, number>;
53
+ }
54
+
55
+ /** 字典值在表格枚举中的目标类型。 */
56
+ export type DictValueType = "string" | "number";
57
+
58
+ /** 自定义搜索控件渲染时暴露的上下文。 */
59
+ export type SearchRenderScope = {
60
+ searchParam: { [key: string]: any };
61
+ placeholder: string;
62
+ clearable: boolean;
63
+ options: EnumProps[];
64
+ data: EnumProps[];
65
+ };
66
+
67
+ /** ProTable 单列搜索配置。 */
68
+ export type SearchProps = {
69
+ el?: SearchType; // 当前项搜索框的类型
70
+ label?: string; // 当前项搜索框的 label
71
+ props?: any; // 搜索项参数,根据 element plus 官方文档来传递,该属性所有值会透传到组件
72
+ key?: string; // 当搜索项 key 不为 prop 属性时,可通过 key 指定
73
+ tooltip?: string; // 搜索提示
74
+ order?: number; // 搜索项排序(从大到小)
75
+ span?: number; // 搜索项所占用的列数,默认为 1 列
76
+ offset?: number; // 搜索字段左侧偏移列数
77
+ defaultValue?: string | number | boolean | any[] | Ref<any>; // 搜索项默认值
78
+ dictCode?: string; // 搜索项独立使用的字典编码
79
+ dictValueType?: DictValueType; // 搜索项字典值类型
80
+ enum?: EnumProps[] | Ref<EnumProps[]>; // 搜索项独立使用的枚举字典
81
+ render?: (scope: SearchRenderScope) => VNode; // 自定义搜索内容渲染(tsx语法)
82
+ } & Partial<Record<BreakPoint, Responsive>>;
83
+
84
+ /** 枚举或树形数据字段映射配置。 */
85
+ export type FieldNamesProps = {
86
+ label: string;
87
+ value: string;
88
+ children?: string;
89
+ };
90
+
91
+ /** 单元格渲染和行内操作共享的上下文。 */
92
+ export type RenderScope<T extends DefaultRow = DefaultRow> = {
93
+ row: T;
94
+ $index: number;
95
+ column: TableColumnCtx<T>;
96
+ [key: string]: any;
97
+ };
98
+
99
+ /** 表头自定义渲染上下文。 */
100
+ export type HeaderRenderScope<T extends DefaultRow = DefaultRow> = {
101
+ $index: number;
102
+ column: TableColumnCtx<T>;
103
+ [key: string]: any;
104
+ };
105
+
106
+ /** ProTable 预置单元格渲染类型。 */
107
+ export type CellType = "image" | "status" | "actions" | "money";
108
+
109
+ /** 行内操作附加参数,支持静态对象或按行动态生成。 */
110
+ export type ColumnActionParams<T extends DefaultRow = DefaultRow> =
111
+ | Record<string, any>
112
+ | ((scope: RenderScope<T>) => Record<string, any>);
113
+
114
+ /** 表头操作按钮渲染和点击时的选择态上下文。 */
115
+ export type HeaderActionScope<T extends DefaultRow = DefaultRow> = {
116
+ selectedList: T[];
117
+ selectedListIds: Array<string | number>;
118
+ isSelected: boolean;
119
+ };
120
+
121
+ /** 表头操作附加参数,支持静态对象或按选择态动态生成。 */
122
+ export type HeaderActionParams<T extends DefaultRow = DefaultRow> =
123
+ | Record<string, any>
124
+ | ((scope: HeaderActionScope<T>) => Record<string, any>);
125
+
126
+ /** 图片列预置渲染配置。 */
127
+ export interface ImageCellProps<T extends DefaultRow = DefaultRow> {
128
+ src?: string | ((scope: RenderScope<T>) => string);
129
+ previewSrc?: string | ((scope: RenderScope<T>) => string);
130
+ width?: number | string;
131
+ height?: number | string;
132
+ previewWidth?: number | string;
133
+ previewHeight?: number | string;
134
+ }
135
+
136
+ /** 状态列预置渲染和变更配置。 */
137
+ export interface StatusCellProps<T extends DefaultRow = DefaultRow> {
138
+ activeValue: string | number | boolean;
139
+ inactiveValue: string | number | boolean;
140
+ activeText?: string;
141
+ inactiveText?: string;
142
+ disabled?: boolean | ((scope: RenderScope<T>) => boolean);
143
+ beforeChange?: (scope: RenderScope<T>, params?: Record<string, any>) => boolean | Promise<boolean>;
144
+ onChange?: (value: string | number | boolean, scope: RenderScope<T>, params?: Record<string, any>) => void | Promise<void>;
145
+ params?: ColumnActionParams<T>;
146
+ }
147
+
148
+ /** 金额列预置格式化配置。 */
149
+ export interface MoneyCellProps<T extends DefaultRow = DefaultRow> {
150
+ value?: number | string | ((scope: RenderScope<T>) => number | string | undefined | null);
151
+ prefix?: string;
152
+ suffix?: string;
153
+ }
154
+
155
+ /** 行内操作按钮配置。 */
156
+ export interface TableActionProps<T extends DefaultRow = DefaultRow> {
157
+ label: string;
158
+ icon?: any;
159
+ type?: "primary" | "success" | "warning" | "danger" | "info";
160
+ link?: boolean;
161
+ disabled?: boolean | ((scope: RenderScope<T>) => boolean);
162
+ hidden?: boolean | ((scope: RenderScope<T>) => boolean);
163
+ params?: ColumnActionParams<T>;
164
+ onClick: (scope: RenderScope<T>, params?: Record<string, any>) => void | Promise<void>;
165
+ }
166
+
167
+ /** 表头操作按钮配置。 */
168
+ export interface HeaderActionProps<T extends DefaultRow = DefaultRow> {
169
+ label: string;
170
+ icon?: any;
171
+ type?: "primary" | "success" | "warning" | "danger" | "info";
172
+ disabled?: boolean | ((scope: HeaderActionScope<T>) => boolean);
173
+ hidden?: boolean | ((scope: HeaderActionScope<T>) => boolean);
174
+ params?: HeaderActionParams<T>;
175
+ onClick: (scope: HeaderActionScope<T>, params?: Record<string, any>) => void | Promise<void>;
176
+ }
177
+
178
+ /** ProTable 列配置,扩展 Element Plus 表格列能力。 */
179
+ export interface ColumnProps<T extends DefaultRow = DefaultRow> extends Partial<
180
+ Omit<TableColumnCtx<T>, "type" | "children" | "renderCell" | "renderHeader">
181
+ > {
182
+ type?: TypeProps; // 列类型
183
+ cellType?: CellType; // 预置单元格类型
184
+ tag?: boolean | Ref<boolean>; // 是否是标签展示
185
+ isShow?: boolean | Ref<boolean>; // 是否显示在表格当中
186
+ isSetting?: boolean | Ref<boolean>; // 是否在 ColSetting 中可配置
187
+ search?: SearchProps | undefined; // 搜索项配置
188
+ dictCode?: string; // 字典编码,配置后优先使用 Dict / DictLabel 组件
189
+ dictValueType?: DictValueType; // 字典值类型
190
+ enum?: EnumProps[] | Ref<EnumProps[]> | ((params?: any) => Promise<any>); // 枚举字典
191
+ isFilterEnum?: boolean | Ref<boolean>; // 当前单元格值是否根据 enum 格式化(示例:enum 只作为搜索项数据)
192
+ fieldNames?: FieldNamesProps; // 指定 label && value && children 的 key 值
193
+ headerRender?: (scope: HeaderRenderScope<T>) => VNode; // 自定义表头内容渲染(tsx语法)
194
+ render?: (scope: RenderScope<T>) => VNode | string; // 自定义单元格内容渲染(tsx语法)
195
+ imageProps?: ImageCellProps<T>; // 图片列配置
196
+ statusProps?: StatusCellProps<T>; // 状态列配置
197
+ moneyProps?: MoneyCellProps<T>; // 金额列配置
198
+ actions?: TableActionProps<T>[]; // 操作按钮配置
199
+ _children?: ColumnProps<T>[]; // 多级表头
200
+ }
201
+
202
+ /** ProTable 对外暴露的组件实例状态和方法。 */
203
+ export interface ProTableInstance<T extends DefaultRow = DefaultRow> {
204
+ element?: unknown;
205
+ loading: boolean;
206
+ tableData: T[];
207
+ radio: string;
208
+ pageable: Table.Pageable;
209
+ searchParam: Record<string, any>;
210
+ searchInitParam: Record<string, any>;
211
+ isSelected: boolean;
212
+ selectedList: T[];
213
+ selectedListIds: Array<string | number>;
214
+ enumMap: Map<string, Record<string, any>[]>;
215
+ getTableList: () => Promise<void>;
216
+ search: () => void;
217
+ reset: () => void;
218
+ handleSizeChange: (size: number) => void;
219
+ handleCurrentChange: (page: number) => void;
220
+ clearSelection: () => void;
221
+ getTotal: () => number;
222
+ refreshEnums: () => Promise<void>;
223
+ }
@@ -0,0 +1,8 @@
1
+ import type { DefineComponent } from "vue";
2
+ import type { ProTableInstance, ProTableProps } from "./ProTable/interface";
3
+ import ProTableImplementation from "./ProTable/index.vue";
4
+
5
+ /** ProTable 公共组件 Adapter。 */
6
+ const ProTable = ProTableImplementation as unknown as DefineComponent<ProTableProps, ProTableInstance>;
7
+
8
+ export default ProTable;
@@ -0,0 +1,168 @@
1
+ <template>
2
+ <Dict
3
+ v-if="shouldUseDictComponent"
4
+ v-model="_searchParam[column.search?.key ?? handleProp(column.prop!)]"
5
+ :code="column.search?.dictCode ?? column.dictCode!"
6
+ :code-type="column.search?.dictValueType ?? column.dictValueType ?? 'number'"
7
+ :placeholder="placeholder.placeholder"
8
+ v-bind="handleSearchProps"
9
+ :style="handleSearchStyle"
10
+ />
11
+ <ElSelect
12
+ v-else-if="column.search?.el === 'select' && !column.search?.render"
13
+ v-bind="{ ...handleSearchProps, ...placeholder, searchParam: _searchParam, clearable }"
14
+ v-model="_searchParam[column.search?.key ?? handleProp(column.prop!)]"
15
+ :style="handleSearchStyle"
16
+ >
17
+ <el-option v-for="(col, index) in columnEnum" :key="index" :label="col[fieldNames.label]" :value="col[fieldNames.value]" />
18
+ </ElSelect>
19
+ <component
20
+ v-else
21
+ :is="searchComponent"
22
+ v-bind="{ ...handleSearchProps, ...placeholder, searchParam: _searchParam, clearable }"
23
+ v-model.trim="_searchParam[column.search?.key ?? handleProp(column.prop!)]"
24
+ :data="column.search?.el === 'tree-select' ? columnEnum : []"
25
+ :options="['cascader', 'select-v2'].includes(column.search?.el!) ? columnEnum : []"
26
+ >
27
+ <template v-if="column.search?.el === 'cascader'" #default="{ data }">
28
+ <span>{{ data[fieldNames.label] }}</span>
29
+ </template>
30
+ <slot v-if="column.search?.el !== 'cascader'"></slot>
31
+ </component>
32
+ </template>
33
+
34
+ <script setup lang="ts" name="SearchFormItem">
35
+ import { computed, inject, ref, unref, type Component } from "vue";
36
+ import {
37
+ ElCascader,
38
+ ElDatePicker,
39
+ ElInput,
40
+ ElInputNumber,
41
+ ElSelect,
42
+ ElSelectV2,
43
+ ElSlider,
44
+ ElSwitch,
45
+ ElTimePicker,
46
+ ElTimeSelect,
47
+ ElTreeSelect
48
+ } from "element-plus";
49
+ import Dict from "../../../components/Dict/index.vue";
50
+ import { handleProp } from "../../../utils";
51
+ import { ColumnProps, SearchType } from "../../../components/ProTable/interface";
52
+
53
+ /** 单个搜索表单项组件属性。 */
54
+ interface SearchFormItem {
55
+ column: ColumnProps;
56
+ searchParam: { [key: string]: any };
57
+ }
58
+ const props = defineProps<SearchFormItem>();
59
+
60
+ // Re receive SearchParam
61
+ const _searchParam = computed(() => props.searchParam);
62
+
63
+ const searchComponentMap: Record<SearchType, Component> = {
64
+ input: ElInput,
65
+ "input-number": ElInputNumber,
66
+ select: ElSelect,
67
+ "select-v2": ElSelectV2,
68
+ "tree-select": ElTreeSelect,
69
+ cascader: ElCascader,
70
+ "date-picker": ElDatePicker,
71
+ "time-picker": ElTimePicker,
72
+ "time-select": ElTimeSelect,
73
+ switch: ElSwitch,
74
+ slider: ElSlider
75
+ };
76
+
77
+ /**
78
+ * 获取搜索项实际渲染组件,避免按需加载后动态字符串组件无法解析。
79
+ */
80
+ const searchComponent = computed(() => {
81
+ const render = props.column.search?.render;
82
+ if (render) return render;
83
+ const searchEl = props.column.search?.el;
84
+ return searchEl ? searchComponentMap[searchEl] : ElInput;
85
+ });
86
+
87
+ /**
88
+ * 判断当前搜索项是否应直接使用字典组件渲染。
89
+ */
90
+ const shouldUseDictComponent = computed(() => {
91
+ return (
92
+ !!(props.column.search?.dictCode ?? props.column.dictCode) &&
93
+ props.column.search?.el === "select" &&
94
+ !props.column.search?.render
95
+ );
96
+ });
97
+
98
+ // 判断 fieldNames 设置 label && value && children 的 key 值
99
+ const fieldNames = computed(() => {
100
+ return {
101
+ label: props.column.fieldNames?.label ?? "label",
102
+ value: props.column.fieldNames?.value ?? "value",
103
+ children: props.column.fieldNames?.children ?? "children"
104
+ };
105
+ });
106
+
107
+ // 接收 enumMap (el 为 select-v2 需单独处理 enumData)
108
+ const enumMap = inject("enumMap", ref(new Map()));
109
+
110
+ const columnEnum = computed(() => {
111
+ const searchEnum = unref(props.column.search?.enum);
112
+ if (Array.isArray(searchEnum)) return searchEnum;
113
+ const staticEnum = typeof props.column.enum !== "function" ? unref(props.column.enum) : undefined;
114
+ if (Array.isArray(staticEnum) && staticEnum.length) return staticEnum;
115
+
116
+ let enumData = enumMap.value.get(props.column.prop);
117
+ if (!enumData) return [];
118
+ if (props.column.search?.el === "select-v2" && props.column.fieldNames) {
119
+ enumData = enumData.map((item: { [key: string]: any }) => {
120
+ return { ...item, label: item[fieldNames.value.label], value: item[fieldNames.value.value] };
121
+ });
122
+ }
123
+ return enumData;
124
+ });
125
+
126
+ /**
127
+ * 统一处理 Dict 搜索组件的宽度透传,避免覆盖组件默认宽度。
128
+ */
129
+ const handleSearchStyle = computed(() => {
130
+ return props.column.search?.props?.style ?? { width: "100%" };
131
+ });
132
+
133
+ // 处理透传的 searchProps (el 为 tree-select、cascader 的时候需要给下默认 label && value && children)
134
+ const handleSearchProps = computed(() => {
135
+ const label = fieldNames.value.label;
136
+ const value = fieldNames.value.value;
137
+ const children = fieldNames.value.children;
138
+ const searchEl = props.column.search?.el;
139
+ let searchProps = props.column.search?.props ?? {};
140
+ if (searchEl === "tree-select") {
141
+ searchProps = { ...searchProps, props: { ...searchProps, label, children }, nodeKey: value };
142
+ }
143
+ if (searchEl === "cascader") {
144
+ searchProps = { ...searchProps, props: { ...searchProps, label, value, children } };
145
+ }
146
+ return searchProps;
147
+ });
148
+
149
+ // 处理默认 placeholder
150
+ const placeholder = computed(() => {
151
+ const search = props.column.search;
152
+ if (["datetimerange", "daterange", "monthrange"].includes(search?.props?.type) || search?.props?.isRange) {
153
+ return {
154
+ rangeSeparator: search?.props?.rangeSeparator ?? "至",
155
+ startPlaceholder: search?.props?.startPlaceholder ?? "开始时间",
156
+ endPlaceholder: search?.props?.endPlaceholder ?? "结束时间"
157
+ };
158
+ }
159
+ const placeholder = search?.props?.placeholder ?? (search?.el?.includes("input") ? "请输入" : "请选择");
160
+ return { placeholder };
161
+ });
162
+
163
+ // 是否有清除按钮 (当搜索项有默认值时,清除按钮不显示)
164
+ const clearable = computed(() => {
165
+ const search = props.column.search;
166
+ return search?.props?.clearable ?? (search?.defaultValue == null || search?.defaultValue == undefined);
167
+ });
168
+ </script>
@@ -0,0 +1,105 @@
1
+ <template>
2
+ <div v-if="columns.length" class="card table-search" :class="{ 'table-search--no-operation': !showOperation }">
3
+ <el-form ref="formRef" :model="searchParam">
4
+ <Grid ref="gridRef" :collapsed="collapsed" :gap="[20, 0]" :cols="searchCol">
5
+ <GridItem v-for="(item, index) in columns" :key="item.prop" v-bind="getResponsive(item)" :index="index">
6
+ <el-form-item>
7
+ <template #label>
8
+ <el-space :size="4">
9
+ <span>{{ `${item.search?.label ?? item.label}` }}</span>
10
+ <el-tooltip v-if="item.search?.tooltip" effect="dark" :content="item.search?.tooltip" placement="top">
11
+ <i :class="'iconfont icon-yiwen'"></i>
12
+ </el-tooltip>
13
+ </el-space>
14
+ <span>&nbsp;:</span>
15
+ </template>
16
+ <SearchFormItem :column="item" :search-param="searchParam" />
17
+ </el-form-item>
18
+ </GridItem>
19
+ <GridItem v-if="showOperation" suffix>
20
+ <div class="operation">
21
+ <el-button type="primary" :icon="Search" @click="search"> 搜索 </el-button>
22
+ <el-button :icon="Delete" @click="reset"> 重置 </el-button>
23
+ <el-button v-if="showCollapse" type="primary" link class="search-isOpen" @click="collapsed = !collapsed">
24
+ {{ collapsed ? "展开" : "合并" }}
25
+ <el-icon class="el-icon--right">
26
+ <component :is="collapsed ? ArrowDown : ArrowUp"></component>
27
+ </el-icon>
28
+ </el-button>
29
+ </div>
30
+ </GridItem>
31
+ </Grid>
32
+ </el-form>
33
+ </div>
34
+ </template>
35
+ <script setup lang="ts" name="SearchForm">
36
+ import { computed, ref } from "vue";
37
+ import { ColumnProps } from "../../components/ProTable/interface";
38
+ import { BreakPoint } from "../../components/Grid/interface";
39
+ import { Delete, Search, ArrowDown, ArrowUp } from "@element-plus/icons-vue";
40
+ import SearchFormItem from "./components/SearchFormItem.vue";
41
+ import Grid from "../../components/Grid/index.vue";
42
+ import GridItem from "../../components/Grid/components/GridItem.vue";
43
+
44
+ /** ProTable 搜索表单组件属性。 */
45
+ interface ProTableProps {
46
+ columns?: ColumnProps[]; // 搜索配置列
47
+ searchParam?: { [key: string]: any }; // 搜索参数
48
+ searchCol: number | Record<BreakPoint, number>;
49
+ search: (params: any) => void; // 搜索方法
50
+ reset: (params: any) => void; // 重置方法
51
+ showOperation?: boolean; // 是否展示搜索、重置等操作按钮
52
+ }
53
+
54
+ // 默认值
55
+ const props = withDefaults(defineProps<ProTableProps>(), {
56
+ columns: () => [],
57
+ searchParam: () => ({}),
58
+ showOperation: true
59
+ });
60
+
61
+ // 获取响应式设置
62
+ const getResponsive = (item: ColumnProps) => {
63
+ return {
64
+ span: item.search?.span,
65
+ offset: item.search?.offset ?? 0,
66
+ xs: item.search?.xs,
67
+ sm: item.search?.sm,
68
+ md: item.search?.md,
69
+ lg: item.search?.lg,
70
+ xl: item.search?.xl
71
+ };
72
+ };
73
+
74
+ // 是否默认折叠搜索项
75
+ const collapsed = ref(true);
76
+
77
+ // 获取响应式断点
78
+ const gridRef = ref();
79
+ const breakPoint = computed<BreakPoint>(() => gridRef.value?.breakPoint);
80
+
81
+ // 判断是否显示 展开/合并 按钮
82
+ const showCollapse = computed(() => {
83
+ let show = false;
84
+ props.columns.reduce((prev, current) => {
85
+ prev +=
86
+ (current.search![breakPoint.value]?.span ?? current.search?.span ?? 1) +
87
+ (current.search![breakPoint.value]?.offset ?? current.search?.offset ?? 0);
88
+ if (typeof props.searchCol !== "number") {
89
+ if (prev >= props.searchCol[breakPoint.value]) show = true;
90
+ } else {
91
+ if (prev >= props.searchCol) show = true;
92
+ }
93
+ return prev;
94
+ }, 0);
95
+ return show;
96
+ });
97
+ </script>
98
+
99
+ <style scoped lang="scss">
100
+ .table-search--no-operation {
101
+ :deep(.el-form-item) {
102
+ margin-bottom: 0;
103
+ }
104
+ }
105
+ </style>
@@ -0,0 +1,63 @@
1
+ .select-filter {
2
+ width: 100%;
3
+ .select-filter-item {
4
+ display: flex;
5
+ align-items: center;
6
+ border-bottom: 1px dashed var(--el-border-color-light);
7
+ &:last-child {
8
+ border-bottom: none;
9
+ }
10
+ .select-filter-item-title {
11
+ margin-top: -2px;
12
+ span {
13
+ font-size: 14px;
14
+ color: var(--el-text-color-regular);
15
+ white-space: nowrap;
16
+ }
17
+ }
18
+ .select-filter-notData {
19
+ margin: 18px 0;
20
+ font-size: 14px;
21
+ color: var(--el-text-color-regular);
22
+ }
23
+ .select-filter-list {
24
+ display: flex;
25
+ flex: 1;
26
+ padding: 0;
27
+ margin: 13px 0;
28
+ li {
29
+ display: flex;
30
+ align-items: center;
31
+ padding: 5px 15px;
32
+ margin-right: 16px;
33
+ font-size: 13px;
34
+ color: var(--el-color-primary);
35
+ cursor: pointer;
36
+ list-style: none;
37
+ background: var(--el-color-primary-light-9);
38
+ border: 1px solid var(--el-color-primary-light-5);
39
+ border-radius: 32px;
40
+ &:hover {
41
+ color: #ffffff;
42
+ background: var(--el-color-primary);
43
+ border-color: var(--el-color-primary);
44
+ transition: 0.1s;
45
+ }
46
+ &.active {
47
+ font-weight: bold;
48
+ color: #ffffff;
49
+ background: var(--el-color-primary);
50
+ border-color: var(--el-color-primary);
51
+ }
52
+ .el-icon {
53
+ margin-right: 4px;
54
+ font-size: 16px;
55
+ font-weight: bold;
56
+ }
57
+ span {
58
+ white-space: nowrap;
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,113 @@
1
+ <template>
2
+ <div class="select-filter">
3
+ <div v-for="item in data" :key="item.key" class="select-filter-item">
4
+ <div class="select-filter-item-title">
5
+ <span>{{ item.title }} :</span>
6
+ </div>
7
+ <span v-if="!item.options.length" class="select-filter-notData">暂无数据 ~</span>
8
+ <el-scrollbar>
9
+ <ul class="select-filter-list">
10
+ <li
11
+ v-for="option in item.options"
12
+ :key="option.value"
13
+ :class="{
14
+ active:
15
+ option.value === selected[item.key] ||
16
+ (Array.isArray(selected[item.key]) && selected[item.key].includes(option.value))
17
+ }"
18
+ @click="select(item, option)"
19
+ >
20
+ <slot :row="option">
21
+ <el-icon v-if="option.icon">
22
+ <component :is="option.icon" />
23
+ </el-icon>
24
+ <span>{{ option.label }}</span>
25
+ </slot>
26
+ </li>
27
+ </ul>
28
+ </el-scrollbar>
29
+ </div>
30
+ </div>
31
+ </template>
32
+
33
+ <script setup lang="ts" name="selectFilter">
34
+ import { ref, watch } from "vue";
35
+
36
+ /** 筛选项候选值。 */
37
+ interface OptionsProps {
38
+ value: string | number;
39
+ label: string;
40
+ icon?: string;
41
+ }
42
+
43
+ /** 单组筛选配置。 */
44
+ interface SelectDataProps {
45
+ title: string; // 列表标题
46
+ key: string; // 当前筛选项 key 值
47
+ multiple?: boolean; // 是否为多选
48
+ options: OptionsProps[]; // 筛选数据
49
+ }
50
+
51
+ /** SelectFilter 组件属性。 */
52
+ interface SelectFilterProps {
53
+ data?: SelectDataProps[]; // 选择的列表数据
54
+ defaultValues?: { [key: string]: any }; // 默认值
55
+ }
56
+
57
+ const props = withDefaults(defineProps<SelectFilterProps>(), {
58
+ data: () => [],
59
+ defaultValues: () => ({})
60
+ });
61
+
62
+ // 重新接收默认值
63
+ const selected = ref<{ [key: string]: any }>({});
64
+ watch(
65
+ () => props.defaultValues,
66
+ () => {
67
+ props.data.forEach(item => {
68
+ if (item.multiple) selected.value[item.key] = props.defaultValues[item.key] ?? [""];
69
+ else selected.value[item.key] = props.defaultValues[item.key] ?? "";
70
+ });
71
+ },
72
+ { deep: true, immediate: true }
73
+ );
74
+
75
+ // emit
76
+ const emit = defineEmits<{
77
+ change: [value: any];
78
+ }>();
79
+
80
+ /**
81
+ * @description 选择筛选项
82
+ * @param {Object} item 选中的哪项列表
83
+ * @param {Object} option 选中的值
84
+ * @return void
85
+ * */
86
+ const select = (item: SelectDataProps, option: OptionsProps) => {
87
+ if (!item.multiple) {
88
+ // * 单选
89
+ if (selected.value[item.key] !== option.value) selected.value[item.key] = option.value;
90
+ } else {
91
+ // * 多选
92
+ // 如果选中的是第一个值,则直接设置
93
+ if (item.options[0].value === option.value) selected.value[item.key] = [option.value];
94
+ // 如果选择的值已经选中了,则删除选中的值
95
+ if (selected.value[item.key].includes(option.value)) {
96
+ let currentIndex = selected.value[item.key].findIndex((s: any) => s === option.value);
97
+ selected.value[item.key].splice(currentIndex, 1);
98
+ // 当全部删光时,把第第一个值选中
99
+ if (selected.value[item.key].length == 0) selected.value[item.key] = [item.options[0].value];
100
+ } else {
101
+ // 未选中点击值的时候,追加选中值
102
+ selected.value[item.key].push(option.value);
103
+ // 单选中全部并且点击到了未选中的值,把第一个值删除掉
104
+ if (selected.value[item.key].includes(item.options[0].value)) selected.value[item.key].splice(0, 1);
105
+ }
106
+ }
107
+ emit("change", selected.value);
108
+ };
109
+ </script>
110
+
111
+ <style scoped lang="scss">
112
+ @use "./index.scss" as *;
113
+ </style>