kn-cli 1.0.131 → 1.0.134

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 (211) hide show
  1. package/build/shellUtil.sh +2 -2
  2. package/build/start.sh +3 -2
  3. package/build/vite.config.js +1 -1
  4. package/package.json +2 -1
  5. package/src/create.js +2 -0
  6. package/templates/template_admin_antd5/.vscode/settings.json +28 -0
  7. package/templates/template_admin_antd5/build.sh +8 -0
  8. package/templates/template_admin_antd5/cli.config.js +35 -0
  9. package/templates/template_admin_antd5/dev.sh +33 -0
  10. package/templates/template_admin_antd5/frontend_build.sh +48 -0
  11. package/templates/template_admin_antd5/init/prepare-commit-msg +5 -0
  12. package/templates/template_admin_antd5/init.sh +24 -0
  13. package/templates/template_admin_antd5/jsconfig.json +17 -0
  14. package/templates/template_admin_antd5/package.json +27 -0
  15. package/templates/template_admin_antd5/public/404.html +26 -0
  16. package/templates/template_admin_antd5/public/favicon.png +0 -0
  17. package/templates/template_admin_antd5/public/index.html +48 -0
  18. package/templates/template_admin_antd5/public/src/_antd.less +37 -0
  19. package/templates/template_admin_antd5/public/src/_mixin.module.less +79 -0
  20. package/templates/template_admin_antd5/public/src/_reset.module.less +134 -0
  21. package/templates/template_admin_antd5/public/src/_variable.module.less +85 -0
  22. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.eot +0 -0
  23. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.module.less +109 -0
  24. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.svg +75 -0
  25. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.ttf +0 -0
  26. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.woff +0 -0
  27. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.woff2 +0 -0
  28. package/templates/template_admin_antd5/public/src/assets/images/arrow.png +0 -0
  29. package/templates/template_admin_antd5/public/src/assets/images/avatar.png +0 -0
  30. package/templates/template_admin_antd5/public/src/assets/images/icon-notice.png +0 -0
  31. package/templates/template_admin_antd5/public/src/assets/images/icon-user.png +0 -0
  32. package/templates/template_admin_antd5/public/src/assets/images/loadFail.png +0 -0
  33. package/templates/template_admin_antd5/public/src/assets/images/loading.svg +40 -0
  34. package/templates/template_admin_antd5/public/src/assets/images/login/bg.png +0 -0
  35. package/templates/template_admin_antd5/public/src/assets/images/login/logo.png +0 -0
  36. package/templates/template_admin_antd5/public/src/assets/images/login/slogan.png +0 -0
  37. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-dep-active.png +0 -0
  38. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-dep.png +0 -0
  39. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-log-active.png +0 -0
  40. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-log.png +0 -0
  41. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-loginlog-active.png +0 -0
  42. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-loginlog.png +0 -0
  43. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-role-active.png +0 -0
  44. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-role.png +0 -0
  45. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-user-active.png +0 -0
  46. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-user.png +0 -0
  47. package/templates/template_admin_antd5/public/src/assets/images/nav/nav-toggle.png +0 -0
  48. package/templates/template_admin_antd5/public/src/assets/images/nav/slogan.png +0 -0
  49. package/templates/template_admin_antd5/public/src/assets/images/noData.png +0 -0
  50. package/templates/template_admin_antd5/public/src/assets/images/noSelect.png +0 -0
  51. package/templates/template_admin_antd5/public/src/assets/images/permission/403.png +0 -0
  52. package/templates/template_admin_antd5/public/src/assets/images/permission/404.png +0 -0
  53. package/templates/template_admin_antd5/public/src/assets/images/permission/503.png +0 -0
  54. package/templates/template_admin_antd5/public/src/assets/images/play.png +0 -0
  55. package/templates/template_admin_antd5/public/src/components/_table/column.jsx +47 -0
  56. package/templates/template_admin_antd5/public/src/components/_table/column.module.less +12 -0
  57. package/templates/template_admin_antd5/public/src/components/_table/index.jsx +71 -0
  58. package/templates/template_admin_antd5/public/src/components/_table/index.module.less +15 -0
  59. package/templates/template_admin_antd5/public/src/components/antd/antProvider.jsx +21 -0
  60. package/templates/template_admin_antd5/public/src/components/antd/index.jsx +146 -0
  61. package/templates/template_admin_antd5/public/src/components/antd/select/index.jsx +296 -0
  62. package/templates/template_admin_antd5/public/src/components/antd/select/index.module.less +21 -0
  63. package/templates/template_admin_antd5/public/src/components/antd/theme.js +173 -0
  64. package/templates/template_admin_antd5/public/src/components/antd/tooltip/detail/index.jsx +70 -0
  65. package/templates/template_admin_antd5/public/src/components/antd/tooltip/detail/index.module.less +12 -0
  66. package/templates/template_admin_antd5/public/src/components/antd/tooltip/index.jsx +69 -0
  67. package/templates/template_admin_antd5/public/src/components/antd/tooltip/index.module.less +28 -0
  68. package/templates/template_admin_antd5/public/src/components/auth/index.jsx +123 -0
  69. package/templates/template_admin_antd5/public/src/components/auth/index.module.less +7 -0
  70. package/templates/template_admin_antd5/public/src/components/auth/navCheck.jsx +27 -0
  71. package/templates/template_admin_antd5/public/src/components/badge/index.jsx +47 -0
  72. package/templates/template_admin_antd5/public/src/components/badge/index.module.less +44 -0
  73. package/templates/template_admin_antd5/public/src/components/button/index.jsx +17 -0
  74. package/templates/template_admin_antd5/public/src/components/debug/index.jsx +28 -0
  75. package/templates/template_admin_antd5/public/src/components/debug/index.module.less +10 -0
  76. package/templates/template_admin_antd5/public/src/components/empty/index.jsx +28 -0
  77. package/templates/template_admin_antd5/public/src/components/empty/index.module.less +20 -0
  78. package/templates/template_admin_antd5/public/src/components/error/index.jsx +39 -0
  79. package/templates/template_admin_antd5/public/src/components/icon/index.jsx +128 -0
  80. package/templates/template_admin_antd5/public/src/components/icon/playVideo/index.jsx +21 -0
  81. package/templates/template_admin_antd5/public/src/components/icon/playVideo/index.module.less +16 -0
  82. package/templates/template_admin_antd5/public/src/components/iconFont/index.jsx +20 -0
  83. package/templates/template_admin_antd5/public/src/components/iconFont/index.module.less +5 -0
  84. package/templates/template_admin_antd5/public/src/components/image/index.jsx +73 -0
  85. package/templates/template_admin_antd5/public/src/components/image/index.module.less +117 -0
  86. package/templates/template_admin_antd5/public/src/components/image/preview.jsx +85 -0
  87. package/templates/template_admin_antd5/public/src/components/layout/basic/index.jsx +49 -0
  88. package/templates/template_admin_antd5/public/src/components/layout/basic/index.module.less +76 -0
  89. package/templates/template_admin_antd5/public/src/components/layout/index.jsx +39 -0
  90. package/templates/template_admin_antd5/public/src/components/layout/index.module.less +63 -0
  91. package/templates/template_admin_antd5/public/src/components/layout/provider/index.jsx +32 -0
  92. package/templates/template_admin_antd5/public/src/components/leftMenu/index.jsx +106 -0
  93. package/templates/template_admin_antd5/public/src/components/leftMenu/index.module.less +42 -0
  94. package/templates/template_admin_antd5/public/src/components/link/index.jsx +39 -0
  95. package/templates/template_admin_antd5/public/src/components/link/index.module.less +11 -0
  96. package/templates/template_admin_antd5/public/src/components/menuIcon/index.jsx +33 -0
  97. package/templates/template_admin_antd5/public/src/components/menuIcon/index.module.less +49 -0
  98. package/templates/template_admin_antd5/public/src/components/page/pageLoading/index.jsx +51 -0
  99. package/templates/template_admin_antd5/public/src/components/page/pageLoading/index.module.less +29 -0
  100. package/templates/template_admin_antd5/public/src/components/popup/index.jsx +60 -0
  101. package/templates/template_admin_antd5/public/src/components/popup/index.module.less +18 -0
  102. package/templates/template_admin_antd5/public/src/components/react/index.jsx +13 -0
  103. package/templates/template_admin_antd5/public/src/components/resizeBox/index.jsx +144 -0
  104. package/templates/template_admin_antd5/public/src/components/resizeBox/index.module.css +90 -0
  105. package/templates/template_admin_antd5/public/src/components/select/defaultServicesSelect/index.jsx +182 -0
  106. package/templates/template_admin_antd5/public/src/components/select/dictSelect/index.jsx +84 -0
  107. package/templates/template_admin_antd5/public/src/components/select/index.jsx +7 -0
  108. package/templates/template_admin_antd5/public/src/components/select/useSelectList.jsx +217 -0
  109. package/templates/template_admin_antd5/public/src/components/table/aliTable/index.jsx +250 -0
  110. package/templates/template_admin_antd5/public/src/components/table/aliTable/index.module.less +105 -0
  111. package/templates/template_admin_antd5/public/src/components/table/column.jsx +128 -0
  112. package/templates/template_admin_antd5/public/src/components/table/column.module.less +50 -0
  113. package/templates/template_admin_antd5/public/src/components/table/imageTable/index.jsx +302 -0
  114. package/templates/template_admin_antd5/public/src/components/table/imageTable/index.module.less +196 -0
  115. package/templates/template_admin_antd5/public/src/components/table/imageTable/radio.jsx +15 -0
  116. package/templates/template_admin_antd5/public/src/components/table/imageTable/radio.module.less +18 -0
  117. package/templates/template_admin_antd5/public/src/components/table/index.jsx +475 -0
  118. package/templates/template_admin_antd5/public/src/components/table/index.module.less +133 -0
  119. package/templates/template_admin_antd5/public/src/components/text/index.jsx +98 -0
  120. package/templates/template_admin_antd5/public/src/components/text/index.module.less +13 -0
  121. package/templates/template_admin_antd5/public/src/components/toast/index.jsx +79 -0
  122. package/templates/template_admin_antd5/public/src/components/toast/index.module.less +43 -0
  123. package/templates/template_admin_antd5/public/src/components/topMenu/index.jsx +102 -0
  124. package/templates/template_admin_antd5/public/src/components/topMenu/index.module.less +89 -0
  125. package/templates/template_admin_antd5/public/src/components/topMenu/topBar/index.jsx +81 -0
  126. package/templates/template_admin_antd5/public/src/components/topMenu/topBar/index.module.less +97 -0
  127. package/templates/template_admin_antd5/public/src/components/video/index.jsx +96 -0
  128. package/templates/template_admin_antd5/public/src/components/video/index.module.less +132 -0
  129. package/templates/template_admin_antd5/public/src/components/video/preview.jsx +38 -0
  130. package/templates/template_admin_antd5/public/src/config.js +31 -0
  131. package/templates/template_admin_antd5/public/src/declarations.d.ts +1 -0
  132. package/templates/template_admin_antd5/public/src/dictionary/dictionary.js +289 -0
  133. package/templates/template_admin_antd5/public/src/dictionary/index.jsx +64 -0
  134. package/templates/template_admin_antd5/public/src/enum.js +41 -0
  135. package/templates/template_admin_antd5/public/src/hooks/index.jsx +29 -0
  136. package/templates/template_admin_antd5/public/src/hooks/useDebounceFn.jsx +33 -0
  137. package/templates/template_admin_antd5/public/src/hooks/useDelay.jsx +34 -0
  138. package/templates/template_admin_antd5/public/src/hooks/useEsc.jsx +98 -0
  139. package/templates/template_admin_antd5/public/src/hooks/useImageLoader.jsx +26 -0
  140. package/templates/template_admin_antd5/public/src/hooks/useInToView.jsx +58 -0
  141. package/templates/template_admin_antd5/public/src/hooks/useLoading.jsx +46 -0
  142. package/templates/template_admin_antd5/public/src/hooks/usePreload.jsx +67 -0
  143. package/templates/template_admin_antd5/public/src/hooks/useRouteMenu.jsx +263 -0
  144. package/templates/template_admin_antd5/public/src/hooks/useScrollTop.jsx +44 -0
  145. package/templates/template_admin_antd5/public/src/hooks/useSearch.jsx +163 -0
  146. package/templates/template_admin_antd5/public/src/hooks/useTableRowSelect.jsx +310 -0
  147. package/templates/template_admin_antd5/public/src/hooks/useThrottole.jsx +68 -0
  148. package/templates/template_admin_antd5/public/src/hooks/useTimer.jsx +42 -0
  149. package/templates/template_admin_antd5/public/src/hooks/useUpdate.jsx +16 -0
  150. package/templates/template_admin_antd5/public/src/hooks/useWatchServices.jsx +124 -0
  151. package/templates/template_admin_antd5/public/src/index.jsx +89 -0
  152. package/templates/template_admin_antd5/public/src/menuConfig/auth.jsx +92 -0
  153. package/templates/template_admin_antd5/public/src/menuConfig/dashboard.jsx +25 -0
  154. package/templates/template_admin_antd5/public/src/menuConfig/dna.jsx +76 -0
  155. package/templates/template_admin_antd5/public/src/menuConfig/index.jsx +17 -0
  156. package/templates/template_admin_antd5/public/src/mock/auth.js +33 -0
  157. package/templates/template_admin_antd5/public/src/mock/demo.js +122 -0
  158. package/templates/template_admin_antd5/public/src/mock/index.js +65 -0
  159. package/templates/template_admin_antd5/public/src/mock/utils.js +33 -0
  160. package/templates/template_admin_antd5/public/src/pages/antdComponents/index.jsx +142 -0
  161. package/templates/template_admin_antd5/public/src/pages/auth/user/create/index.jsx +47 -0
  162. package/templates/template_admin_antd5/public/src/pages/auth/user/create/index.module.less +6 -0
  163. package/templates/template_admin_antd5/public/src/pages/auth/user/dialog/index.jsx +96 -0
  164. package/templates/template_admin_antd5/public/src/pages/auth/user/index.jsx +214 -0
  165. package/templates/template_admin_antd5/public/src/pages/components/layout/index.jsx +75 -0
  166. package/templates/template_admin_antd5/public/src/pages/components/layout/index.module.less +78 -0
  167. package/templates/template_admin_antd5/public/src/pages/components/layout/titleBar/index.jsx +28 -0
  168. package/templates/template_admin_antd5/public/src/pages/components/layout/titleBar/index.module.less +44 -0
  169. package/templates/template_admin_antd5/public/src/pages/components/select/user.jsx +18 -0
  170. package/templates/template_admin_antd5/public/src/pages/demo/page1.jsx +21 -0
  171. package/templates/template_admin_antd5/public/src/pages/demo/page2.jsx +21 -0
  172. package/templates/template_admin_antd5/public/src/pages/demo/page3.jsx +21 -0
  173. package/templates/template_admin_antd5/public/src/pages/error/403.jsx +15 -0
  174. package/templates/template_admin_antd5/public/src/pages/error/404.jsx +15 -0
  175. package/templates/template_admin_antd5/public/src/pages/error/503.jsx +15 -0
  176. package/templates/template_admin_antd5/public/src/pages/error/permission.jsx +40 -0
  177. package/templates/template_admin_antd5/public/src/pages/error/permission.module.less +16 -0
  178. package/templates/template_admin_antd5/public/src/pages/home.jsx +90 -0
  179. package/templates/template_admin_antd5/public/src/pages/home.module.less +6 -0
  180. package/templates/template_admin_antd5/public/src/pages/login/index.jsx +113 -0
  181. package/templates/template_admin_antd5/public/src/pages/login/index.module.less +153 -0
  182. package/templates/template_admin_antd5/public/src/pages/pageTemplate.jsx +28 -0
  183. package/templates/template_admin_antd5/public/src/provider/app.jsx +201 -0
  184. package/templates/template_admin_antd5/public/src/provider/loading.jsx +47 -0
  185. package/templates/template_admin_antd5/public/src/provider/menu.jsx +161 -0
  186. package/templates/template_admin_antd5/public/src/provider/menu.module.less +35 -0
  187. package/templates/template_admin_antd5/public/src/route.jsx +127 -0
  188. package/templates/template_admin_antd5/public/src/services/demo.js +85 -0
  189. package/templates/template_admin_antd5/public/src/services/excel.js +43 -0
  190. package/templates/template_admin_antd5/public/src/services/http/index.js +155 -0
  191. package/templates/template_admin_antd5/public/src/services/index.js +126 -0
  192. package/templates/template_admin_antd5/public/src/services/interceptor/index.js +67 -0
  193. package/templates/template_admin_antd5/public/src/services/login.js +37 -0
  194. package/templates/template_admin_antd5/public/src/services/socket/index.jsx +99 -0
  195. package/templates/template_admin_antd5/public/src/services/token/index.js +41 -0
  196. package/templates/template_admin_antd5/public/src/type.js +67 -0
  197. package/templates/template_admin_antd5/public/src/utils/event.js +58 -0
  198. package/templates/template_admin_antd5/public/src/utils/format.js +135 -0
  199. package/templates/template_admin_antd5/public/src/utils/index.js +727 -0
  200. package/templates/template_admin_antd5/public/src/utils/menu.js +33 -0
  201. package/templates/template_admin_antd5/public/src/utils/rule.js +277 -0
  202. package/templates/template_admin_antd5/public/src/utils/storage.js +30 -0
  203. package/templates/template_admin_antd5/public/static/about.html +1 -0
  204. package/templates/template_admin_antd5/public/static/kssoLogin.html +22 -0
  205. package/templates/template_admin_antd5/readme.md +84 -0
  206. package/templates/template_admin_antd5/renamejstojsx.js +45 -0
  207. package/templates/template_admin_antd5/renameless.js +53 -0
  208. package/templates/template_admin_antd5/report.sh +25 -0
  209. package/templates/template_admin_antd5/shellUtil.sh +110 -0
  210. package/templates/template_admin_antd5/versionPublish.sh +16 -0
  211. package/templates/template_admin_antd5/webpack.api.js +105 -0
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import { CloseOutlined } from '@ant-design/icons';
3
+ import Popup from '@/components/popup';
4
+ // @ts-ignore
5
+ import styles from './index.module.less';
6
+ import { ReactRender } from '@/components/react';
7
+
8
+ const ModalPreview = (props) => {
9
+ const { destory, src } = props;
10
+
11
+ const onCancel = () => {
12
+ destory && destory();
13
+ };
14
+
15
+ return (
16
+ <section className={styles.main}>
17
+ <div className={styles.current}>
18
+ <video controls src={src} className={styles.video}>
19
+ <a href={src} download>
20
+ 下载
21
+ </a>
22
+ </video>
23
+ <CloseOutlined className={styles.close} onClick={onCancel} />
24
+ </div>
25
+ </section>
26
+ );
27
+ };
28
+
29
+ const ShowPreview = (props = {}) => {
30
+ return new Promise((resolve) => {
31
+ let popup = Popup(resolve);
32
+ ReactRender(
33
+ <ModalPreview destory={popup.destory} {...props} />,
34
+ popup.dom
35
+ );
36
+ });
37
+ };
38
+ export default ShowPreview;
@@ -0,0 +1,31 @@
1
+
2
+
3
+ // 权限调试开关
4
+ // @ts-ignore
5
+ export const AUTH_DEBUG_OPEN= BUILD_ENV=='prod'?false:true;
6
+ // 菜单权限调试开关
7
+ export const AUTH_ROUTE_DEBUG_OPEN=false;
8
+
9
+
10
+ // 当前你需要模拟调试哪个环境下的数据
11
+ export const DEBUG_ENV='local';
12
+ // export const DEBUG_ENV='dev';
13
+ // export const DEBUG_ENV='pre';
14
+ // export const DEBUG_ENV='local';
15
+
16
+
17
+
18
+ const DEBUG_API_HOST_CONFIG={
19
+ // @ts-ignore
20
+ local:API_HOST,// 本地调试
21
+ dev:'/devapi/api',
22
+ pre:'/preapi/api',
23
+ prod:'/prodapi/api',
24
+ }
25
+
26
+ // 配置本地调试时api调用的接口地址,
27
+ export const DEBUG_API_HOST=DEBUG_API_HOST_CONFIG[DEBUG_ENV]
28
+
29
+ // 调试vconsole
30
+ // @ts-ignore
31
+ export const DEBUG_VCONSOLE= BUILD_ENV=='local';
@@ -0,0 +1 @@
1
+ declare module '*.less';
@@ -0,0 +1,289 @@
1
+
2
+ import React,{ useState, useMemo, useEffect } from 'react';
3
+
4
+
5
+ /**
6
+ * @template [T=object]
7
+ * @callback Api
8
+ * @param {Object} params - 调用接口用到的参数
9
+ * @returns {Promise<T>}
10
+ */
11
+
12
+
13
+ /**
14
+ * @typedef DictionaryItem
15
+ * 字典数据的结构
16
+ * @property {string} id - 数据唯一ID
17
+ * @property {string} name - 数据唯一id对应的别名
18
+ * @property {string} label - 展示给用户看的文字
19
+ * @property {boolean} [disabled] - 是否禁用
20
+ * @property {object} [data] - 原始数据
21
+ * @property {string} [subLabel] - 副标题
22
+ * @property {string} [type] - 是不是多选框
23
+ */
24
+
25
+
26
+ /**
27
+ * @typedef RenderOptions
28
+ * @property {(item:DictionaryItem)=>JSX.Element} [onRender] - 渲染拦截器
29
+ */
30
+
31
+ /**
32
+ * @typedef CreateOptions
33
+ * @property {DictionaryItem[]} [types] - 字典数据列表
34
+ * @property {string} [idKey='id'] - id的字段名
35
+ * @property {string} [nameKey='name'] - id的字段名
36
+ * @property {string} [labelKey='label'] - id的字段名
37
+ * @property {(item:DictionaryItem)=>JSX.Element} [onRender] - 渲染Item的拦截器
38
+ */
39
+
40
+
41
+ /**
42
+ * @typedef GetOptionsProps
43
+ * @property {object} props
44
+ * @property {(item:DictionaryItem)=>boolean} [props.onFilter] - 数据唯一id对应的别名
45
+ * @property {(item:DictionaryItem)=>boolean} [props.onDisabled] - 数据唯一id对应的别名
46
+ */
47
+
48
+ /**
49
+ * @typedef RenderOptionsProps
50
+ * @property {object} props
51
+ * @property {DictionaryItem[]} [props.options] - 数据唯一id对应的别名
52
+ * @property {JSX.Element} [props.OptionComponent] - 数据唯一id对应的别名
53
+ */
54
+
55
+
56
+
57
+ /**
58
+ * @typedef EnumResult
59
+ * @property {DictionaryItem[]} types - 字典数据列表
60
+ * @property {(labelOrName:string)=>string} [getId] - 搜索字典项中,label或name匹配labelOrName的项目,返回其id的值
61
+ * @property {(id:string)=>string} [getName] - 匹配id复合的对象,返回其name的值
62
+ * @property {(id:string)=>string} [getLabel] - 匹配id复合的对象,返回其label的值
63
+ * @property {(idOrNameOrLabel:string)=>DictionaryItem} [getItem] - 匹配id,label,name只要符合的返回对象
64
+ * @property {(props?:GetOptionsProps)=>DictionaryItem[]} [getOptions] - 获取选项列表
65
+ * @property {(props?:RenderOptions)=>JSX.Element[]} [render] - 触发渲染
66
+ *
67
+ */
68
+
69
+
70
+ /**
71
+ * @typedef CreateApiDictionaryOptions
72
+ * @property {Api} [api] - 用于获取字典列表的接口
73
+ * @property {(request:object)=>object} [beforeApi] - (request:object)=>object 接口调用前的参数拦截器
74
+ * @property {(response:object)=>object} [afterApi] - (reponse:object)=>object[] 接口调用后的拦截器
75
+ */
76
+
77
+ /**
78
+ * @typedef {CreateOptions & CreateApiDictionaryOptions} CreateDictionaryOptions
79
+ */
80
+
81
+ /**
82
+ * @typedef CreateDictoryResult
83
+ * @property {()=>boolean} isReady - 是否加载完毕
84
+ * @property {()=>void} reload - 重新加载
85
+ *
86
+ */
87
+
88
+ /**
89
+ * @typedef {CreateDictoryResult & EnumResult} UseDictionaryResult
90
+ */
91
+
92
+
93
+ const DEFAULT_CONFIG={
94
+ beforeApi:null,
95
+ afterApi:null,
96
+ idKey:'id',
97
+ nameKey:'name',
98
+ labelKey:'label'
99
+ };
100
+
101
+
102
+ /**
103
+ * @function
104
+ * @description 全局设置SelectOption和RadioOption
105
+ * @param {Object} params
106
+ *
107
+ * @returns {void}
108
+ */
109
+ export const SetConfig = ({beforeApi,afterApi,idKey,nameKey,labelKey})=>{
110
+ if(beforeApi)DEFAULT_CONFIG.beforeApi = beforeApi;
111
+ if(afterApi)DEFAULT_CONFIG.afterApi = afterApi;
112
+ if(idKey)DEFAULT_CONFIG.idKey = idKey;
113
+ if(nameKey)DEFAULT_CONFIG.nameKey = nameKey;
114
+ if(labelKey)DEFAULT_CONFIG.labelKey = labelKey;
115
+ };
116
+
117
+
118
+ /**
119
+ * 创建一个静态的字典
120
+ * @param {CreateOptions} props
121
+ * @returns {EnumResult}
122
+ */
123
+ export const createEnum=props=>{
124
+ const {
125
+ idKey = DEFAULT_CONFIG.idKey,
126
+ nameKey = DEFAULT_CONFIG.nameKey,
127
+ labelKey = DEFAULT_CONFIG.labelKey,
128
+ types,
129
+ onRender
130
+ } = props;
131
+
132
+ const idMap={};
133
+ const labelMap={};
134
+ const nameMap={};
135
+
136
+ if(types){
137
+ types.forEach(item=>{
138
+ idMap[''+item[idKey]] = item;
139
+ labelMap[''+item[labelKey]] = item;
140
+ nameMap[''+item[nameKey]] = item;
141
+ })
142
+ }
143
+
144
+ const getLabel = (id) => {
145
+ let key = ''+id;
146
+ if(!types)return '';
147
+ if(idMap[key]){
148
+ return idMap[key][labelKey]
149
+ }
150
+ return '';
151
+ };
152
+ const getName = (id) => {
153
+ let key = ''+id;
154
+ if(!types)return '';
155
+ if(idMap[key]){
156
+ return idMap[key][nameKey]
157
+ }
158
+ return '';
159
+ };
160
+ const getId = (labelOrName) => {
161
+ let key = ''+labelOrName;
162
+ if(!types)return '';
163
+ if(nameMap[key]){
164
+ return nameMap[key][idKey]
165
+ }
166
+ if(labelMap[key]){
167
+ return labelMap[key][idKey]
168
+ }
169
+ return '';
170
+ };
171
+ const getItem=(idOrNameOrLabel)=>{
172
+ let key = ''+idOrNameOrLabel;
173
+ if(!types)return null;
174
+ if(idMap[key]){
175
+ return idMap[key]
176
+ }
177
+ if(nameMap[key]){
178
+ return nameMap[key]
179
+ }
180
+ if(labelMap[key]){
181
+ return labelMap[key]
182
+ }
183
+ return null;
184
+ };
185
+ const getOptions=(props)=>{
186
+ const {onFilter,onDisabled}=props;
187
+ let req=[];
188
+ if(!types)return req;
189
+ types.forEach(item=>{
190
+ let show=true;
191
+ let disabled=false;
192
+
193
+ if(onFilter){
194
+ show = onFilter(item);
195
+ }
196
+ if(onDisabled){
197
+ disabled = onDisabled(item);
198
+ }
199
+ if(show){
200
+ req.push({
201
+ ...item,
202
+ disabled:disabled,
203
+ })
204
+ }
205
+ })
206
+ return req;
207
+ }
208
+ const render=(props)=>{
209
+ const _onRender = props?.onRender || onRender;
210
+ let req=[];
211
+ if(!_onRender)return req;
212
+ types.forEach(item=>{
213
+ if(_onRender){
214
+ let component=_onRender(item);
215
+ if(component){
216
+ req.push(component);
217
+ }
218
+ }
219
+ })
220
+ return req;
221
+ }
222
+ return { types, getLabel, getId, getName,getItem,getOptions,render };
223
+ }
224
+
225
+
226
+ /**
227
+ * @function
228
+ * @description 创建字典hooks工具
229
+ * @param {CreateDictionaryOptions} options
230
+ *
231
+ * @returns {()=>UseDictionaryResult}
232
+ */
233
+ export const createDictionary=options=>{
234
+ const {
235
+ api,
236
+ beforeApi = DEFAULT_CONFIG.beforeApi,
237
+ afterApi = DEFAULT_CONFIG.afterApi,
238
+ } = options;
239
+ const defaultTypes = options.types || null;
240
+ return ()=>{
241
+ /**
242
+ * @type {[EnumResult,React.Dispatch<React.SetStateAction<EnumResult>>]}
243
+ */
244
+ const [enumItem, setEnumItem] = useState(()=>{
245
+ if(!api)return createEnum({...options,types:defaultTypes||[]})
246
+ return {types:null}
247
+ });
248
+
249
+ const init = async () => {
250
+ if(!api)return;
251
+ let params={};
252
+ let items=[];
253
+ if(beforeApi){
254
+ params = beforeApi();
255
+ }
256
+ let ret = await api(params);
257
+ if(afterApi){
258
+ items = afterApi(ret);
259
+ }else{
260
+ if (+ret?.code === 0) {
261
+ items = ret.data.body;
262
+ }
263
+ }
264
+ let value=createEnum({...options,types:items||[]});
265
+ setEnumItem(value);
266
+ };
267
+
268
+ const isReady = () => {
269
+ return enumItem?.types !== null;
270
+ };
271
+ const reload = () => {
272
+ init();
273
+ };
274
+
275
+ useEffect(() => {
276
+ init();
277
+ }, [api,beforeApi,afterApi]);
278
+
279
+ const actions = useMemo(() => {
280
+ return { isReady, reload,...enumItem };
281
+ }, [enumItem]);
282
+
283
+ return actions;
284
+ }
285
+ }
286
+
287
+
288
+
289
+
@@ -0,0 +1,64 @@
1
+
2
+ // @ts-ignore
3
+ import React from 'react';
4
+
5
+ import { Select,Radio } from '@/components/antd';
6
+ // @ts-ignore
7
+ import { createDictionary,SetConfig } from './dictionary';
8
+
9
+
10
+
11
+ const BeforeApi=()=>{
12
+
13
+ }
14
+ const AfterApi=()=>{
15
+
16
+ }
17
+
18
+ SetConfig({
19
+ beforeApi:BeforeApi,
20
+ afterApi:AfterApi,
21
+ })
22
+
23
+
24
+ export const onRenderSelectItem=(item)=>{
25
+ return <Select.Option key={item.id} data={item}>{item.label}</Select.Option>
26
+ }
27
+
28
+ /**
29
+ * 消息已读状态的
30
+ */
31
+ export const DictMessageStatus=[
32
+ {label: '未读',id: '0',name: '0'},
33
+ {label: '已读',id: '1',name: '1'}
34
+ ]
35
+
36
+ /**
37
+ * 消息已读状态
38
+ */
39
+ export const useMessageStatus= createDictionary({
40
+ types: DictMessageStatus,
41
+ onRender:onRenderSelectItem
42
+ });
43
+
44
+
45
+ /**
46
+ * 消息已读状态
47
+ */
48
+ export const useEmDemos= createDictionary({
49
+ types: new Array(10000).fill(10000).map((item,idx)=>{
50
+ return {label:`${idx}`,id:`${idx}`,name:`${idx}`}
51
+ }),
52
+ onRender:onRenderSelectItem
53
+ });
54
+
55
+ /**
56
+ * 用户状态
57
+ */
58
+ export const useState= createDictionary({
59
+ types:[
60
+ {label:'启用',id:'1',name:'open'},
61
+ {label:'禁用',id:'0',name:'disabled'},
62
+ {label:'离职',id:'2',name:'out'},
63
+ ]
64
+ });
@@ -0,0 +1,41 @@
1
+
2
+
3
+ /**
4
+ * @enum {string}
5
+ */
6
+ export const ENUM_MESSAGE_STATE={
7
+ Delivered:'Delivered',
8
+ Failed:'Failed',// 发送失败
9
+ Read:'Read', // 已读
10
+ RecallFailed:'RecallFailed',
11
+ Recalled:'Recalled', // 已撤回
12
+ Recalling:'Recalling',
13
+ Received:'Received',
14
+ Sending:'Sending',// 发送中
15
+ Sent:'Sent'
16
+ }
17
+
18
+
19
+
20
+
21
+ /**
22
+ * 消息中心的消息类型
23
+ * @enum {string}
24
+ */
25
+ export const ENUM_EVENT_BUS_TYPE={
26
+ NEW_MSG:'new_msg',// 新消息
27
+ UPDATE_MSG:'update_msg',// 老消息状态变更
28
+ REMOVE_SESSION:'remove_session',
29
+ NEW_SESSION:'new_session',
30
+ CHANGE_INPUT_VALUE:'change_input_value',
31
+ NEW_NOTIFY:'new_notify',//有新的消息通知
32
+ ADD_WORK_USER:'add_work_user',//接入新账号
33
+ UPDATE_WORK_USER:'update_work_user',//工作账号内容变更
34
+ MSG_READ:'msg_read',//已读某个消息
35
+ UPDATE_NOTIFY_UNREAD:'update_notify_unread',//更新未读消息数量
36
+ CHAT_UNREAD_COUNT:'CHAT_UNREAD_COUNT',//更新聊天未读消息数
37
+ SEND_MESSAGE:'SEND_MESSAGE',//发送一条消息,
38
+ UPDATE_TIMELINE:'UPDATE_TIMELINE',//刷新TIMELINE
39
+
40
+
41
+ }
@@ -0,0 +1,29 @@
1
+ import useImageLoader from './useImageLoader';
2
+ import useDelay from './useDelay';
3
+ import usePreload from './usePreload';
4
+ import useSearch from './useSearch';
5
+ import useUpdate from './useUpdate';
6
+ import useLoading from './useLoading';
7
+ import useDebounceFn from './useDebounceFn';
8
+ import useInToView from './useInToView';
9
+ import useTimer from './useTimer';
10
+ import useEsc from './useEsc';
11
+
12
+ // @ts-ignore
13
+ import { usePagination, usePaginationWithForm } from 'kn-hooks';
14
+
15
+ export {
16
+ usePaginationWithForm,
17
+ usePagination,
18
+ useImageLoader,
19
+ useDelay,
20
+ usePreload,
21
+ useSearch,
22
+ useUpdate,
23
+ useLoading,
24
+ useDebounceFn,
25
+ useInToView,
26
+ useTimer,
27
+ useEsc
28
+
29
+ };
@@ -0,0 +1,33 @@
1
+ import React,{useRef} from 'react';
2
+
3
+ /**
4
+ * 防抖函数(可延迟开始前执行或延迟后执行)
5
+ * @param {Function} fn - 必填项;要防抖处理的函数
6
+ * @param {object} [options] - 可选项;
7
+ * @param {number} [options.wait] - 可选项;等待时间,单位为毫秒
8
+ * @param {boolean} [options.leading] - 可选项;是否在延迟开始前调用函数,默认否
9
+ * @returns
10
+ */
11
+ const UseDebounceFn = (fn,options)=>{
12
+ const timer = useRef(null);
13
+
14
+ const run = function(){
15
+ const _arguments = arguments;
16
+ if (options?.leading && !timer.current) {
17
+ fn.apply(this, _arguments);
18
+ }
19
+ if (timer.current) {
20
+ clearTimeout(timer.current);
21
+ timer.current = null;
22
+ }
23
+ timer.current = setTimeout(function () {
24
+ timer.current = null;
25
+ if (!options?.leading) {
26
+ fn.apply(this, _arguments);
27
+ }
28
+ }, options?.wait || 300);
29
+ }
30
+ return [run];
31
+ }
32
+
33
+ export default UseDebounceFn;
@@ -0,0 +1,34 @@
1
+ // @ts-ignore
2
+ import { useRef,useState,useMemo, useEffect } from 'react';
3
+
4
+ const useDelay=()=>{
5
+ const [loading,setLoading] = useState(false);
6
+ const refSet = useRef();
7
+ // @ts-ignore
8
+ refSet.current = setLoading;
9
+ useEffect(()=>{
10
+ // @ts-ignore
11
+ refSet.current = setLoading;
12
+ },[setLoading]);
13
+
14
+ const actions=useMemo(()=>{
15
+ const wait=(ms)=>{
16
+ // @ts-ignore
17
+ refSet.current(true);
18
+ return new Promise(res=>{
19
+ setTimeout(()=>{
20
+ // @ts-ignore
21
+ refSet.current(false);
22
+ res();
23
+ }, ms);
24
+ })
25
+ }
26
+ return {
27
+ wait,
28
+ loading
29
+ };
30
+ },[loading]);
31
+ return actions;
32
+ }
33
+
34
+ export default useDelay;
@@ -0,0 +1,98 @@
1
+ // @ts-ignore
2
+ import { useRef,useState,useMemo, useEffect } from 'react';
3
+
4
+
5
+ const onEscList=[];
6
+ let onEscCount=0;
7
+ const onEsc=(e)=>{
8
+ if (e.key.toLocaleLowerCase() === 'escape' || e.key.toLocaleLowerCase() === 'esc') {
9
+ if(onEscList.length>0){
10
+ for (let i = onEscList.length - 1; i >= 0; i--) {
11
+ const fn = onEscList[i];
12
+ if( fn(e) ){
13
+ break;
14
+ }
15
+ }
16
+ }
17
+ }
18
+ }
19
+
20
+
21
+ const addEventListener=(fn)=>{
22
+ let find=false;
23
+ for(let _fn of onEscList){
24
+ if(_fn==fn){
25
+ find=true;
26
+ break;
27
+ }
28
+ }
29
+ if(find)return false;
30
+ onEscList.push(fn);
31
+ return true;
32
+ }
33
+ const removeEventListener=(fn)=>{
34
+ for(let i=0;i<onEscList.length;i++){
35
+ if(onEscList[i]==fn){
36
+ onEscList.splice(i,1);
37
+ return true;
38
+ }
39
+ }
40
+ return false;
41
+ }
42
+
43
+ /**
44
+ * @typedef {object} UseEsc
45
+ * @property {(fn:(event:*)=>boolean)=>void} addEventListener - 监听esc,返回true时会停止冒泡
46
+ * @property {(fn:(event:*)=>boolean)=>void} removeEventListener - 取消监听
47
+ */
48
+
49
+ /**
50
+ *
51
+ * @param {object} props
52
+ * @param {string} props.name
53
+ *
54
+ * @returns {UseEsc}
55
+ */
56
+ const useEsc=(props)=>{
57
+ let refFn = useRef();
58
+
59
+ const _addEventListener=(fn)=>{
60
+ if(addEventListener(fn)){
61
+ refFn.current=fn;
62
+ }
63
+ }
64
+ const _removeEventListener=(fn)=>{
65
+ if( removeEventListener(fn) ){
66
+ refFn.current=null;
67
+ }
68
+ }
69
+ useEffect(()=>{
70
+ // console.log('开始监听esc',props.name)
71
+ onEscCount++;
72
+ if(onEscCount == 1){
73
+ // console.log('初次加载监听esc',props.name)
74
+ window.addEventListener('keyup',onEsc)
75
+ }
76
+ return ()=>{
77
+ if(refFn.current){
78
+ _removeEventListener(refFn.current);
79
+ }
80
+ // console.log('取消监听esc',props.name)
81
+ onEscCount--;
82
+ if(onEscCount==0){
83
+ // console.log('最终销毁监听esc',props.name)
84
+ window.removeEventListener('keyup',onEsc)
85
+ }
86
+ }
87
+ },[]);
88
+
89
+ const actions=useMemo(()=>{
90
+ return {
91
+ addEventListener:_addEventListener,
92
+ removeEventListener:_removeEventListener
93
+ };
94
+ },[_addEventListener,_removeEventListener]);
95
+ return actions;
96
+ }
97
+
98
+ export default useEsc;
@@ -0,0 +1,26 @@
1
+ // @ts-ignore
2
+ import React, { useEffect,useState,useMemo } from 'react';
3
+
4
+ const useImageLoader=(img_src)=>{
5
+ const [src,setSrc] = useState('');
6
+ useEffect(() => {
7
+ if(img_src===src)return;
8
+ if(!img_src)return;
9
+ let img = new Image();
10
+ img.onload = () => {
11
+ setSrc(img_src);
12
+ };
13
+ img.onerror = () => {
14
+ setSrc('');
15
+ console.log(`图片加载失败:${img_src}`)
16
+ };
17
+ img.src = img_src;
18
+ }, [img_src]);
19
+
20
+ const actions=useMemo(()=>{
21
+ return src;
22
+ },[src]);
23
+ return actions;
24
+ }
25
+
26
+ export default useImageLoader;