kn-cli 1.0.130 → 1.0.133

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 (210) hide show
  1. package/build/vite.config.js +1 -1
  2. package/build/webpack.config.js +2 -1
  3. package/package.json +2 -1
  4. package/src/create.js +2 -0
  5. package/templates/template_admin_antd5/.vscode/settings.json +28 -0
  6. package/templates/template_admin_antd5/build.sh +8 -0
  7. package/templates/template_admin_antd5/cli.config.js +35 -0
  8. package/templates/template_admin_antd5/dev.sh +33 -0
  9. package/templates/template_admin_antd5/frontend_build.sh +48 -0
  10. package/templates/template_admin_antd5/init/prepare-commit-msg +5 -0
  11. package/templates/template_admin_antd5/init.sh +24 -0
  12. package/templates/template_admin_antd5/jsconfig.json +17 -0
  13. package/templates/template_admin_antd5/package.json +27 -0
  14. package/templates/template_admin_antd5/public/404.html +26 -0
  15. package/templates/template_admin_antd5/public/favicon.png +0 -0
  16. package/templates/template_admin_antd5/public/index.html +48 -0
  17. package/templates/template_admin_antd5/public/src/_antd.less +37 -0
  18. package/templates/template_admin_antd5/public/src/_mixin.module.less +79 -0
  19. package/templates/template_admin_antd5/public/src/_reset.module.less +134 -0
  20. package/templates/template_admin_antd5/public/src/_variable.module.less +85 -0
  21. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.eot +0 -0
  22. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.module.less +109 -0
  23. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.svg +75 -0
  24. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.ttf +0 -0
  25. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.woff +0 -0
  26. package/templates/template_admin_antd5/public/src/assets/iconfont/iconfont.woff2 +0 -0
  27. package/templates/template_admin_antd5/public/src/assets/images/arrow.png +0 -0
  28. package/templates/template_admin_antd5/public/src/assets/images/avatar.png +0 -0
  29. package/templates/template_admin_antd5/public/src/assets/images/icon-notice.png +0 -0
  30. package/templates/template_admin_antd5/public/src/assets/images/icon-user.png +0 -0
  31. package/templates/template_admin_antd5/public/src/assets/images/loadFail.png +0 -0
  32. package/templates/template_admin_antd5/public/src/assets/images/loading.svg +40 -0
  33. package/templates/template_admin_antd5/public/src/assets/images/login/bg.png +0 -0
  34. package/templates/template_admin_antd5/public/src/assets/images/login/logo.png +0 -0
  35. package/templates/template_admin_antd5/public/src/assets/images/login/slogan.png +0 -0
  36. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-dep-active.png +0 -0
  37. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-dep.png +0 -0
  38. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-log-active.png +0 -0
  39. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-log.png +0 -0
  40. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-loginlog-active.png +0 -0
  41. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-loginlog.png +0 -0
  42. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-role-active.png +0 -0
  43. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-role.png +0 -0
  44. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-user-active.png +0 -0
  45. package/templates/template_admin_antd5/public/src/assets/images/nav/icon-user.png +0 -0
  46. package/templates/template_admin_antd5/public/src/assets/images/nav/nav-toggle.png +0 -0
  47. package/templates/template_admin_antd5/public/src/assets/images/nav/slogan.png +0 -0
  48. package/templates/template_admin_antd5/public/src/assets/images/noData.png +0 -0
  49. package/templates/template_admin_antd5/public/src/assets/images/noSelect.png +0 -0
  50. package/templates/template_admin_antd5/public/src/assets/images/permission/403.png +0 -0
  51. package/templates/template_admin_antd5/public/src/assets/images/permission/404.png +0 -0
  52. package/templates/template_admin_antd5/public/src/assets/images/permission/503.png +0 -0
  53. package/templates/template_admin_antd5/public/src/assets/images/play.png +0 -0
  54. package/templates/template_admin_antd5/public/src/components/_table/column.jsx +47 -0
  55. package/templates/template_admin_antd5/public/src/components/_table/column.module.less +12 -0
  56. package/templates/template_admin_antd5/public/src/components/_table/index.jsx +71 -0
  57. package/templates/template_admin_antd5/public/src/components/_table/index.module.less +15 -0
  58. package/templates/template_admin_antd5/public/src/components/antd/antProvider.jsx +21 -0
  59. package/templates/template_admin_antd5/public/src/components/antd/index.jsx +146 -0
  60. package/templates/template_admin_antd5/public/src/components/antd/select/index.jsx +296 -0
  61. package/templates/template_admin_antd5/public/src/components/antd/select/index.module.less +21 -0
  62. package/templates/template_admin_antd5/public/src/components/antd/theme.js +173 -0
  63. package/templates/template_admin_antd5/public/src/components/antd/tooltip/detail/index.jsx +70 -0
  64. package/templates/template_admin_antd5/public/src/components/antd/tooltip/detail/index.module.less +12 -0
  65. package/templates/template_admin_antd5/public/src/components/antd/tooltip/index.jsx +69 -0
  66. package/templates/template_admin_antd5/public/src/components/antd/tooltip/index.module.less +28 -0
  67. package/templates/template_admin_antd5/public/src/components/auth/index.jsx +123 -0
  68. package/templates/template_admin_antd5/public/src/components/auth/index.module.less +7 -0
  69. package/templates/template_admin_antd5/public/src/components/auth/navCheck.jsx +27 -0
  70. package/templates/template_admin_antd5/public/src/components/badge/index.jsx +47 -0
  71. package/templates/template_admin_antd5/public/src/components/badge/index.module.less +44 -0
  72. package/templates/template_admin_antd5/public/src/components/button/index.jsx +17 -0
  73. package/templates/template_admin_antd5/public/src/components/debug/index.jsx +28 -0
  74. package/templates/template_admin_antd5/public/src/components/debug/index.module.less +10 -0
  75. package/templates/template_admin_antd5/public/src/components/empty/index.jsx +28 -0
  76. package/templates/template_admin_antd5/public/src/components/empty/index.module.less +20 -0
  77. package/templates/template_admin_antd5/public/src/components/error/index.jsx +39 -0
  78. package/templates/template_admin_antd5/public/src/components/icon/index.jsx +128 -0
  79. package/templates/template_admin_antd5/public/src/components/icon/playVideo/index.jsx +21 -0
  80. package/templates/template_admin_antd5/public/src/components/icon/playVideo/index.module.less +16 -0
  81. package/templates/template_admin_antd5/public/src/components/iconFont/index.jsx +20 -0
  82. package/templates/template_admin_antd5/public/src/components/iconFont/index.module.less +5 -0
  83. package/templates/template_admin_antd5/public/src/components/image/index.jsx +73 -0
  84. package/templates/template_admin_antd5/public/src/components/image/index.module.less +117 -0
  85. package/templates/template_admin_antd5/public/src/components/image/preview.jsx +85 -0
  86. package/templates/template_admin_antd5/public/src/components/layout/basic/index.jsx +49 -0
  87. package/templates/template_admin_antd5/public/src/components/layout/basic/index.module.less +76 -0
  88. package/templates/template_admin_antd5/public/src/components/layout/index.jsx +39 -0
  89. package/templates/template_admin_antd5/public/src/components/layout/index.module.less +63 -0
  90. package/templates/template_admin_antd5/public/src/components/layout/provider/index.jsx +32 -0
  91. package/templates/template_admin_antd5/public/src/components/leftMenu/index.jsx +106 -0
  92. package/templates/template_admin_antd5/public/src/components/leftMenu/index.module.less +42 -0
  93. package/templates/template_admin_antd5/public/src/components/link/index.jsx +39 -0
  94. package/templates/template_admin_antd5/public/src/components/link/index.module.less +11 -0
  95. package/templates/template_admin_antd5/public/src/components/menuIcon/index.jsx +33 -0
  96. package/templates/template_admin_antd5/public/src/components/menuIcon/index.module.less +49 -0
  97. package/templates/template_admin_antd5/public/src/components/page/pageLoading/index.jsx +51 -0
  98. package/templates/template_admin_antd5/public/src/components/page/pageLoading/index.module.less +29 -0
  99. package/templates/template_admin_antd5/public/src/components/popup/index.jsx +60 -0
  100. package/templates/template_admin_antd5/public/src/components/popup/index.module.less +18 -0
  101. package/templates/template_admin_antd5/public/src/components/react/index.jsx +13 -0
  102. package/templates/template_admin_antd5/public/src/components/resizeBox/index.jsx +144 -0
  103. package/templates/template_admin_antd5/public/src/components/resizeBox/index.module.css +90 -0
  104. package/templates/template_admin_antd5/public/src/components/select/defaultServicesSelect/index.jsx +182 -0
  105. package/templates/template_admin_antd5/public/src/components/select/dictSelect/index.jsx +84 -0
  106. package/templates/template_admin_antd5/public/src/components/select/index.jsx +7 -0
  107. package/templates/template_admin_antd5/public/src/components/select/useSelectList.jsx +217 -0
  108. package/templates/template_admin_antd5/public/src/components/table/aliTable/index.jsx +250 -0
  109. package/templates/template_admin_antd5/public/src/components/table/aliTable/index.module.less +105 -0
  110. package/templates/template_admin_antd5/public/src/components/table/column.jsx +128 -0
  111. package/templates/template_admin_antd5/public/src/components/table/column.module.less +50 -0
  112. package/templates/template_admin_antd5/public/src/components/table/imageTable/index.jsx +302 -0
  113. package/templates/template_admin_antd5/public/src/components/table/imageTable/index.module.less +196 -0
  114. package/templates/template_admin_antd5/public/src/components/table/imageTable/radio.jsx +15 -0
  115. package/templates/template_admin_antd5/public/src/components/table/imageTable/radio.module.less +18 -0
  116. package/templates/template_admin_antd5/public/src/components/table/index.jsx +475 -0
  117. package/templates/template_admin_antd5/public/src/components/table/index.module.less +133 -0
  118. package/templates/template_admin_antd5/public/src/components/text/index.jsx +98 -0
  119. package/templates/template_admin_antd5/public/src/components/text/index.module.less +13 -0
  120. package/templates/template_admin_antd5/public/src/components/toast/index.jsx +79 -0
  121. package/templates/template_admin_antd5/public/src/components/toast/index.module.less +43 -0
  122. package/templates/template_admin_antd5/public/src/components/topMenu/index.jsx +102 -0
  123. package/templates/template_admin_antd5/public/src/components/topMenu/index.module.less +89 -0
  124. package/templates/template_admin_antd5/public/src/components/topMenu/topBar/index.jsx +81 -0
  125. package/templates/template_admin_antd5/public/src/components/topMenu/topBar/index.module.less +97 -0
  126. package/templates/template_admin_antd5/public/src/components/video/index.jsx +96 -0
  127. package/templates/template_admin_antd5/public/src/components/video/index.module.less +132 -0
  128. package/templates/template_admin_antd5/public/src/components/video/preview.jsx +38 -0
  129. package/templates/template_admin_antd5/public/src/config.js +31 -0
  130. package/templates/template_admin_antd5/public/src/declarations.d.ts +1 -0
  131. package/templates/template_admin_antd5/public/src/dictionary/dictionary.js +289 -0
  132. package/templates/template_admin_antd5/public/src/dictionary/index.jsx +64 -0
  133. package/templates/template_admin_antd5/public/src/enum.js +41 -0
  134. package/templates/template_admin_antd5/public/src/hooks/index.jsx +29 -0
  135. package/templates/template_admin_antd5/public/src/hooks/useDebounceFn.jsx +33 -0
  136. package/templates/template_admin_antd5/public/src/hooks/useDelay.jsx +34 -0
  137. package/templates/template_admin_antd5/public/src/hooks/useEsc.jsx +98 -0
  138. package/templates/template_admin_antd5/public/src/hooks/useImageLoader.jsx +26 -0
  139. package/templates/template_admin_antd5/public/src/hooks/useInToView.jsx +58 -0
  140. package/templates/template_admin_antd5/public/src/hooks/useLoading.jsx +46 -0
  141. package/templates/template_admin_antd5/public/src/hooks/usePreload.jsx +67 -0
  142. package/templates/template_admin_antd5/public/src/hooks/useRouteMenu.jsx +263 -0
  143. package/templates/template_admin_antd5/public/src/hooks/useScrollTop.jsx +44 -0
  144. package/templates/template_admin_antd5/public/src/hooks/useSearch.jsx +163 -0
  145. package/templates/template_admin_antd5/public/src/hooks/useTableRowSelect.jsx +310 -0
  146. package/templates/template_admin_antd5/public/src/hooks/useThrottole.jsx +68 -0
  147. package/templates/template_admin_antd5/public/src/hooks/useTimer.jsx +42 -0
  148. package/templates/template_admin_antd5/public/src/hooks/useUpdate.jsx +16 -0
  149. package/templates/template_admin_antd5/public/src/hooks/useWatchServices.jsx +124 -0
  150. package/templates/template_admin_antd5/public/src/index.jsx +89 -0
  151. package/templates/template_admin_antd5/public/src/menuConfig/auth.jsx +92 -0
  152. package/templates/template_admin_antd5/public/src/menuConfig/dashboard.jsx +25 -0
  153. package/templates/template_admin_antd5/public/src/menuConfig/dna.jsx +76 -0
  154. package/templates/template_admin_antd5/public/src/menuConfig/index.jsx +17 -0
  155. package/templates/template_admin_antd5/public/src/mock/auth.js +33 -0
  156. package/templates/template_admin_antd5/public/src/mock/demo.js +122 -0
  157. package/templates/template_admin_antd5/public/src/mock/index.js +65 -0
  158. package/templates/template_admin_antd5/public/src/mock/utils.js +33 -0
  159. package/templates/template_admin_antd5/public/src/pages/antdComponents/index.jsx +142 -0
  160. package/templates/template_admin_antd5/public/src/pages/auth/user/create/index.jsx +47 -0
  161. package/templates/template_admin_antd5/public/src/pages/auth/user/create/index.module.less +6 -0
  162. package/templates/template_admin_antd5/public/src/pages/auth/user/dialog/index.jsx +96 -0
  163. package/templates/template_admin_antd5/public/src/pages/auth/user/index.jsx +214 -0
  164. package/templates/template_admin_antd5/public/src/pages/components/layout/index.jsx +75 -0
  165. package/templates/template_admin_antd5/public/src/pages/components/layout/index.module.less +78 -0
  166. package/templates/template_admin_antd5/public/src/pages/components/layout/titleBar/index.jsx +28 -0
  167. package/templates/template_admin_antd5/public/src/pages/components/layout/titleBar/index.module.less +44 -0
  168. package/templates/template_admin_antd5/public/src/pages/components/select/user.jsx +18 -0
  169. package/templates/template_admin_antd5/public/src/pages/demo/page1.jsx +21 -0
  170. package/templates/template_admin_antd5/public/src/pages/demo/page2.jsx +21 -0
  171. package/templates/template_admin_antd5/public/src/pages/demo/page3.jsx +21 -0
  172. package/templates/template_admin_antd5/public/src/pages/error/403.jsx +15 -0
  173. package/templates/template_admin_antd5/public/src/pages/error/404.jsx +15 -0
  174. package/templates/template_admin_antd5/public/src/pages/error/503.jsx +15 -0
  175. package/templates/template_admin_antd5/public/src/pages/error/permission.jsx +40 -0
  176. package/templates/template_admin_antd5/public/src/pages/error/permission.module.less +16 -0
  177. package/templates/template_admin_antd5/public/src/pages/home.jsx +90 -0
  178. package/templates/template_admin_antd5/public/src/pages/home.module.less +6 -0
  179. package/templates/template_admin_antd5/public/src/pages/login/index.jsx +113 -0
  180. package/templates/template_admin_antd5/public/src/pages/login/index.module.less +153 -0
  181. package/templates/template_admin_antd5/public/src/pages/pageTemplate.jsx +28 -0
  182. package/templates/template_admin_antd5/public/src/provider/app.jsx +201 -0
  183. package/templates/template_admin_antd5/public/src/provider/loading.jsx +47 -0
  184. package/templates/template_admin_antd5/public/src/provider/menu.jsx +161 -0
  185. package/templates/template_admin_antd5/public/src/provider/menu.module.less +35 -0
  186. package/templates/template_admin_antd5/public/src/route.jsx +127 -0
  187. package/templates/template_admin_antd5/public/src/services/demo.js +85 -0
  188. package/templates/template_admin_antd5/public/src/services/excel.js +43 -0
  189. package/templates/template_admin_antd5/public/src/services/http/index.js +155 -0
  190. package/templates/template_admin_antd5/public/src/services/index.js +126 -0
  191. package/templates/template_admin_antd5/public/src/services/interceptor/index.js +67 -0
  192. package/templates/template_admin_antd5/public/src/services/login.js +37 -0
  193. package/templates/template_admin_antd5/public/src/services/socket/index.jsx +99 -0
  194. package/templates/template_admin_antd5/public/src/services/token/index.js +41 -0
  195. package/templates/template_admin_antd5/public/src/type.js +67 -0
  196. package/templates/template_admin_antd5/public/src/utils/event.js +58 -0
  197. package/templates/template_admin_antd5/public/src/utils/format.js +135 -0
  198. package/templates/template_admin_antd5/public/src/utils/index.js +727 -0
  199. package/templates/template_admin_antd5/public/src/utils/menu.js +33 -0
  200. package/templates/template_admin_antd5/public/src/utils/rule.js +277 -0
  201. package/templates/template_admin_antd5/public/src/utils/storage.js +30 -0
  202. package/templates/template_admin_antd5/public/static/about.html +1 -0
  203. package/templates/template_admin_antd5/public/static/kssoLogin.html +22 -0
  204. package/templates/template_admin_antd5/readme.md +84 -0
  205. package/templates/template_admin_antd5/renamejstojsx.js +45 -0
  206. package/templates/template_admin_antd5/renameless.js +53 -0
  207. package/templates/template_admin_antd5/report.sh +25 -0
  208. package/templates/template_admin_antd5/shellUtil.sh +110 -0
  209. package/templates/template_admin_antd5/versionPublish.sh +16 -0
  210. package/templates/template_admin_antd5/webpack.api.js +105 -0
@@ -0,0 +1,310 @@
1
+
2
+
3
+
4
+ // @ts-ignore
5
+ import React,{ useState,useMemo,useRef, useEffect } from 'react';
6
+ // @ts-ignore
7
+ import {Checkbox,message} from "@/components/antd";
8
+
9
+
10
+ /**
11
+ * @typedef {object} UseTableRowSelect
12
+ * @property {(item:object|object[],isChecked:boolean)=>void} onSelect - 当有行选中时
13
+ * @property {(selected:string[],rows:object[],changes:object[])=>void} onSelectAll - 当有行选中时
14
+ * @property {()=>void} clear - 清空所有选项
15
+ * @property {string[]} checked - 当前选中的行key值
16
+ * @property {object[]} checkedItems - 当前选中的对象
17
+ * @property {boolean} checkStrictly - false:父子关联,true:父子不关联
18
+ * @property {(mode:string)=>void} setMode - 设置当前模式
19
+ * @property {string} mode - 当前模式 ''普通,'search'过滤模式
20
+ * @property {Function} renderCell - 自定义选中按钮的渲染
21
+ *
22
+ */
23
+
24
+ const Mode={
25
+ Default:'',
26
+ Search:'search'
27
+ }
28
+
29
+ /**
30
+ * 管理Table组件的跨分页行选中状态数据
31
+ * @param {object} [params]
32
+ * @param {string[]} [params.defaultValue] - 默认选中的key值列表
33
+ * @param {object[]} [params.defaultValueItems] - 默认选中的所有对象
34
+ * @param {boolean} [params.checkStrictly=false] - 是否关闭父子节点关联,false=父子关联,true=父子不关联
35
+ * @param {number} [params.maxCount] - 最多选择数量
36
+ * @param {string} [params.rowKey='id'] - 主键的key值
37
+ * @param {boolean} [params.isRadio=false] - 是否是radio模式
38
+ * @param {(values:string[],items:object[],type:string)=>void} [params.onChange] - 变化回调
39
+ *
40
+ * @returns {UseTableRowSelect}
41
+ */
42
+ const useTableRowSelect=(params={})=>{
43
+ const {defaultValue,defaultValueItems,checkStrictly:_checkStrictly=false,maxCount,rowKey='id',isRadio=false,onChange} = params;
44
+ /**
45
+ * @type {*}
46
+ */
47
+ const refSelf = useRef();
48
+ const [checked,setChecked]= useState([]);
49
+ const [checkedItems,setCheckedItems]= useState([]);
50
+
51
+ const [mode,setMode] = useState('');//过滤模式判断
52
+ const [checkStrictly]=useState(_checkStrictly)
53
+ const [lastSelectType,setLastSelectType] = useState('');
54
+ const [init,setInit] = useState(0);
55
+
56
+ const _onSelect=(keys,items)=>{
57
+ let error = null;
58
+ if(isRadio){
59
+ if(keys[0]){
60
+ setChecked([keys[0]]);
61
+ setCheckedItems([items[0]]);
62
+ if(onChange)onChange([keys[0]],[items[0]],'add');
63
+ return;
64
+ }
65
+ }
66
+ let addKeys=[];
67
+ let addItems=[];
68
+ keys.forEach((key,idx)=>{
69
+ if(checked.includes(key)==false){
70
+ if(maxCount!=undefined && maxCount > 0 && checked.length >= maxCount){
71
+ error=`已选择最大数量${maxCount}个`;
72
+ return;
73
+ }
74
+ addKeys.push(key);
75
+ addItems.push({...items[idx]});
76
+ checked.push(key);
77
+ checkedItems.push({...items[idx]})
78
+ }
79
+ })
80
+ if(error){
81
+ message.error(error);
82
+ }
83
+ setLastSelectType('add');
84
+ setChecked([...checked]);
85
+ setCheckedItems([...checkedItems]);
86
+ if(onChange)onChange(addKeys,addItems,'add');
87
+ }
88
+
89
+ const _onUnSelect=(keys)=>{
90
+ let removeKeys=[];
91
+ let removeItems=[];
92
+ keys.forEach(key=>{
93
+ const idx = checked.indexOf(key);
94
+ if( idx >= 0 ){
95
+ removeKeys.push(checked[idx]);
96
+ checked.splice(idx,1)
97
+ if(checkedItems[idx]){
98
+ removeItems.push(checkedItems[idx]);
99
+ checkedItems.splice(idx,1);
100
+ }
101
+ }
102
+ })
103
+ setLastSelectType('remove');
104
+ setChecked([...checked]);
105
+ setCheckedItems([...checkedItems]);
106
+ if(onChange)onChange(removeKeys,removeItems,'remove');
107
+
108
+ }
109
+ const clear=()=>{
110
+ let removeKeys=[...checked];
111
+ let removeItems=[...checkedItems];
112
+ setLastSelectType('remove');
113
+ setChecked([])
114
+ setCheckedItems([]);
115
+ if(onChange)onChange(removeKeys,removeItems,'remove');
116
+ }
117
+
118
+ /**
119
+ * 遍历当前节点与之相关的父子所有节点
120
+ * @param {object} record
121
+ * @param {boolean} isChecked
122
+ * @returns {{keys:string[],items:object[]}}
123
+ */
124
+ const getAllKeys = (record,isChecked,_checked)=>{
125
+ let keys=[];
126
+ let items=[];
127
+ keys.push(record[rowKey]);
128
+ items.push(record);
129
+ // 选中父级,则子级全部选中
130
+ if(record.children && record.children.length>0){
131
+ record.children.forEach(child=>{
132
+ let childs = getAllKeys(child,isChecked,[...keys,..._checked]);
133
+ keys = [...keys,...childs.keys]
134
+ items = [...items,...childs.items]
135
+ })
136
+ }
137
+ // 父子关联计算
138
+ if(checkStrictly==false&&mode != Mode.Search){
139
+ const getParentKeys=(record,isChecked)=>{
140
+ let keys=[];
141
+ let items=[];
142
+ if(record.parent && record.parent?.children?.length>0){
143
+ if(isChecked){
144
+ // 父节点下所有子节点都选中的话,父节点也默认选中
145
+ const every = record.parent.children.every(child=>{
146
+ if(child[rowKey]==record[rowKey]){
147
+ return true;
148
+ }
149
+ if(isChecked){
150
+ return _checked.includes(child[rowKey]);
151
+ }
152
+ return _checked.includes(child[rowKey])==false;
153
+ });
154
+ if(every){
155
+ keys.push(record.parent[rowKey])
156
+ items.push(record.parent);
157
+
158
+ if(record.parent.parent){
159
+ let parentKeys=getParentKeys(record.parent,isChecked);
160
+ keys = [...keys,...parentKeys.keys];
161
+ items = [...items,...parentKeys.items];
162
+ }
163
+ }
164
+ }else{
165
+ // 只要有子节点没有选中,则父节点不选中
166
+ keys.push(record.parent[rowKey])
167
+ items.push(record.parent);
168
+ if(record.parent.parent){
169
+ let parentKeys=getParentKeys(record.parent,isChecked);
170
+ keys = [...keys,...parentKeys.keys];
171
+ items = [...items,...parentKeys.items];
172
+ }
173
+ }
174
+ }
175
+ return {keys,items}
176
+ }
177
+ let req=getParentKeys(record,isChecked);
178
+ keys = [...keys,...req.keys]
179
+ items = [...items,...req.items]
180
+ }
181
+ return {keys,items}
182
+ }
183
+ const onSelectAll=(selected,rows,changes)=>{
184
+ let keys=[];
185
+ let items=[];
186
+ let isChecked = false;
187
+ if(selected==true){
188
+ isChecked = true;
189
+ }else if(Array.isArray(selected)){
190
+ if(selected?.length>0){
191
+ isChecked=true
192
+ }
193
+ }
194
+ changes.forEach((item,idx)=>{
195
+ let req = getAllKeys(item,isChecked,[...checked,...keys]);
196
+ keys = [...keys,...req.keys];
197
+ items = [...items,...req.items];
198
+
199
+ })
200
+ if(isChecked){
201
+ refSelf.current._onSelect(keys,items);
202
+ }else{
203
+ refSelf.current._onUnSelect(keys,items);
204
+ }
205
+ }
206
+ const onSelect=(record,isChecked)=>{
207
+ let _keys=[],_items=[];
208
+ if(Array.isArray(record)){
209
+ for(let item of record){
210
+ let {keys,items} = getAllKeys(item,isChecked,checked);
211
+ _keys = [..._keys,...keys];
212
+ _items = [..._items,...items];
213
+ }
214
+ }else{
215
+ let {keys,items} = getAllKeys(record,isChecked,checked);
216
+ _keys = keys;
217
+ _items = items;
218
+ }
219
+ if(isChecked){
220
+ refSelf.current._onSelect(_keys,_items);
221
+ }else{
222
+ refSelf.current._onUnSelect(_keys,_items);
223
+ }
224
+ }
225
+
226
+ const renderCell=(_checked,record,index)=>{
227
+ const {checked,onSelect,mode} = refSelf.current;
228
+
229
+ // 渲染父级
230
+ if(record.children){
231
+ let count=0;
232
+ let max=record.children.length;
233
+ // 父子不关联
234
+ if(checkStrictly == true){
235
+ return <div onClick={e=>e.stopPropagation()}>
236
+ <Checkbox
237
+ onChange={(e)=>{
238
+ onSelect(record,!_checked)
239
+ }} indeterminate={false} checked={_checked}
240
+ />
241
+ </div>;
242
+ }
243
+ record.children.forEach(item=>{
244
+ if(checked.includes(item[rowKey])){
245
+ count++;
246
+ }
247
+ });
248
+ let half = false;
249
+ let _parentChecked;
250
+ if(mode == Mode.Search){
251
+ half= count >0;
252
+ _parentChecked=false;
253
+ }else{
254
+ half = count > 0 && count < max;
255
+ _parentChecked = count == max;
256
+ }
257
+ return <div onClick={e=>e.stopPropagation()}>
258
+ <Checkbox
259
+ onChange={(e)=>{
260
+ onSelect(record,!_checked)
261
+ }} indeterminate={half} checked={_parentChecked}
262
+ />
263
+ </div>;
264
+ }
265
+
266
+ // 渲染子级
267
+ return <div onClick={e=>e.stopPropagation()}><Checkbox checked={_checked} onChange={(e)=>{
268
+ e.stopPropagation();
269
+ onSelect(record,!_checked)
270
+ }}/></div>
271
+ }
272
+ useEffect(()=>{
273
+ if(init==0){
274
+ if(defaultValueItems){
275
+ onSelect(defaultValueItems,true);
276
+ setInit(1);
277
+ }
278
+ }
279
+ },[])
280
+
281
+
282
+ refSelf.current={
283
+ _onSelect,
284
+ _onUnSelect,
285
+ onSelect,
286
+ checked,
287
+ mode
288
+ }
289
+
290
+ const actions=useMemo(()=>{
291
+ return {
292
+ onSelectAll,
293
+ onSelect,
294
+ clear,
295
+ checkStrictly,
296
+ checked,
297
+ checkedItems,
298
+ setMode,
299
+ mode,
300
+ renderCell,
301
+ lastSelectType
302
+ };
303
+ },[checked,checkedItems,mode,renderCell,checkStrictly,lastSelectType]);
304
+
305
+ return actions;
306
+ }
307
+
308
+ useTableRowSelect.Mode=Mode;
309
+
310
+ export default useTableRowSelect;
@@ -0,0 +1,68 @@
1
+ import React,{useRef} from 'react';
2
+ import { useState } from 'react';
3
+
4
+ /**
5
+ * @typedef useThrottole
6
+ * @property {boolean} throttleing - 是否在节流中
7
+ * @property {(fn:function)=>function} makeThrottole - 制作节流方法
8
+ * @property {()=>boolean} isThrottole - 判断是否节流中
9
+ */
10
+
11
+ const OUTPUT_LOG=false;
12
+ /**
13
+ * 节流函数
14
+ * @param {object} props
15
+ * @param {number} props.throttle - 节流时间
16
+ *
17
+ * @returns {useThrottole}
18
+ */
19
+ const useThrottole = ({throttle})=>{
20
+
21
+ const refThrottle= useRef(0)
22
+ const [throttleing,setThrottle] = useState(false);
23
+
24
+ const isThrottole=()=>{
25
+ return refThrottle.current > 0;
26
+ }
27
+
28
+ const startThrottole=()=>{
29
+ if(OUTPUT_LOG)console.log('节流-开始')
30
+ setThrottle(true);
31
+ refThrottle.current=throttle;
32
+ }
33
+
34
+ const releaseThrottle=()=>{
35
+
36
+ setTimeout(()=>{
37
+ if(OUTPUT_LOG)console.log('节流-释放')
38
+ setThrottle(false);
39
+ refThrottle.current=0;
40
+ },refThrottle.current)
41
+ }
42
+
43
+ const makeThrottole=(fn)=>{
44
+ if(OUTPUT_LOG)console.log('节流-创建方法')
45
+ return async (...args)=>{
46
+ if(isThrottole()){return;}
47
+ if(fn){
48
+ startThrottole();
49
+ try{
50
+ if(OUTPUT_LOG)console.log('节流-执行')
51
+ return await fn(...args);
52
+ }catch(ex){
53
+ if(OUTPUT_LOG)console.error('useThrottole:',ex);
54
+ }finally{
55
+ releaseThrottle();
56
+ }
57
+ }
58
+ }
59
+ }
60
+ if(OUTPUT_LOG)console.log('当前节流状态:',throttleing)
61
+ return {
62
+ throttleing,
63
+ makeThrottole,
64
+ isThrottole,
65
+ }
66
+ }
67
+
68
+ export default useThrottole;
@@ -0,0 +1,42 @@
1
+ // @ts-ignore
2
+ import { useRef,useState,useMemo, useEffect } from 'react';
3
+
4
+ const useTimer=(ms)=>{
5
+ const [time,setTime] = useState(0);
6
+ const refTimer = useRef();
7
+ const refTime = useRef();
8
+
9
+ useEffect(()=>{
10
+ // @ts-ignore
11
+ refTime.current = {time,setTime};
12
+ })
13
+ useEffect(()=>{
14
+ return ()=>{
15
+ if(refTimer.current){
16
+ window.clearInterval(refTimer.current);
17
+ }
18
+ }
19
+ },[])
20
+ useEffect(()=>{
21
+ if(refTimer.current){
22
+ window.clearInterval(refTimer.current);
23
+ }
24
+ // @ts-ignore
25
+ refTimer.current = setInterval(()=>{
26
+ // @ts-ignore
27
+ refTime.current.setTime(v=>v+ms);
28
+ },ms);
29
+
30
+
31
+ },[ms]);
32
+
33
+ const actions=useMemo(()=>{
34
+ return {
35
+ time,
36
+ };
37
+ },[time]);
38
+
39
+ return actions;
40
+ }
41
+
42
+ export default useTimer;
@@ -0,0 +1,16 @@
1
+ // @ts-ignore
2
+ import { useState, useMemo } from 'react';
3
+
4
+
5
+ /**
6
+ * 更新计数器
7
+ */
8
+ const useUpdate=()=>{
9
+ const [count,setCount] = useState(1);
10
+ const action = useMemo(()=>{
11
+ return [count,()=>{setCount(count+1)}]
12
+ },[count,setCount])
13
+ return action;
14
+ }
15
+
16
+ export default useUpdate;
@@ -0,0 +1,124 @@
1
+ import React, {useEffect, useRef, useState, useMemo} from 'react';
2
+ import {hasValue} from '@/utils';
3
+
4
+ /**
5
+ * @typedef UseWatchServices
6
+ * @property {*} response
7
+ * @property {*} error
8
+ * @property {(servicesProps:object,required?:boolean|Array)=>Promise} update
9
+ * @property {number} loading - 是否加载中
10
+ *
11
+ *
12
+ */
13
+
14
+ /**
15
+ * @param {object} props
16
+ * @param {Function} props.services
17
+ * @param {boolean} [props.debug=false]
18
+ * @param {string} [props.name=''] - 调试用的名称
19
+ *
20
+ *
21
+ * @returns {UseWatchServices}
22
+ */
23
+ const useWatchServices = (props) => {
24
+ const {services,debug=false,name=''} = props;
25
+
26
+ const [response, setResponse] = useState();
27
+ const [error, setError] = useState(false);
28
+ const refOlder = useRef();
29
+ const refDestory = useRef(false);
30
+ const [loading,setLoading] = useState(0);
31
+
32
+ /**
33
+ * @type {React.MutableRefObject<object>}
34
+ */
35
+ const refSelf = useRef({});
36
+ refSelf.current={loading,setLoading};
37
+
38
+ /**
39
+ * @type {React.MutableRefObject<object>}
40
+ */
41
+ const refUpdate = useRef();
42
+
43
+ const isChangeRequest = (servicesProps) => {
44
+ if (!refOlder.current) return true;
45
+ let old = refOlder.current || {};
46
+ let current = servicesProps || {};
47
+ let _strOld = JSON.stringify(old);
48
+ let _strCurrent = JSON.stringify(current);
49
+ if (_strOld != _strCurrent) {
50
+ return true;
51
+ }
52
+ return false;
53
+ };
54
+ const isRequired = (servicesProps, required = false) => {
55
+ if (!required) return true;
56
+ let req = true;
57
+ if (Array.isArray(required)) {
58
+ for (let key of required) {
59
+ if (!hasValue(servicesProps[key])) {
60
+ req = false;
61
+ break;
62
+ }
63
+ }
64
+ }
65
+
66
+ return req;
67
+ };
68
+ const update = async (servicesProps, required = false) => {
69
+ let _isRequired = isRequired(servicesProps, required);
70
+ if (!_isRequired) {
71
+ if(debug)console.log(`[useWatchServices][${name}]:缺少必要参数`,servicesProps,required)
72
+ if(response){
73
+ setResponse(undefined);
74
+ setError(undefined);
75
+ }
76
+ return;
77
+ }
78
+ if (!isChangeRequest(servicesProps)) {
79
+ if(debug)console.log(`[useWatchServices][${name}]:参数重复无需刷新`,servicesProps)
80
+ return;
81
+ }
82
+
83
+ refOlder.current = servicesProps;
84
+ refUpdate.current = servicesProps;
85
+ refSelf.current.setLoading(v=>v+1);
86
+ const req = await services(servicesProps);
87
+ if (refUpdate.current != servicesProps) {
88
+ if(debug)console.log(`[useWatchServices][${name}]:已有更新的接口调用取消当前接口`,servicesProps)
89
+ refSelf.current.setLoading(v=>v-1);
90
+ return;
91
+ }
92
+
93
+ if (req?.code == 0) {
94
+ setError(undefined);
95
+ setResponse(req);
96
+ } else {
97
+ setError(req.msg);
98
+ setResponse(undefined);
99
+ }
100
+ refSelf.current.setLoading(v=>v-1);
101
+ refOlder.current = servicesProps;
102
+ return req;
103
+ };
104
+ useEffect(() => {
105
+ refDestory.current = false;
106
+ return () => {
107
+ refDestory.current = true;
108
+ };
109
+ }, []);
110
+
111
+ const result = useMemo(() => {
112
+ if(debug)console.log(`[useWatchServices][${name}]:更新`,loading,error,response)
113
+ return {
114
+ response,
115
+ error,
116
+ update,
117
+ loading
118
+ };
119
+ }, [services,response,error,loading]);
120
+
121
+ return result;
122
+ };
123
+
124
+ export default useWatchServices;
@@ -0,0 +1,89 @@
1
+ // @ts-ignore
2
+ import React from 'react';
3
+ import './_antd.less';
4
+ import './_reset.module.less';
5
+ import RouteList from './route';
6
+ // @ts-ignore
7
+ import moment from 'moment';
8
+ import { ReactRender } from './components/react';
9
+ import {DEBUG_VCONSOLE} from '@/config';
10
+ moment.locale('zh-cn');
11
+
12
+
13
+ let _error=window.console.error;
14
+ window.console.error=(...args)=>{
15
+ let filter=false;
16
+ for (const arg of args) {
17
+ console.log(arg);
18
+ if(typeof arg == 'string'){
19
+ if( /Form.*already.*set.*'initialValues'/.test(arg)){
20
+ filter=true;
21
+ break;
22
+ }
23
+ }
24
+ }
25
+ if(filter)return;
26
+ _error(...args)
27
+ }
28
+
29
+ // @ts-ignore
30
+ if(MOCK){
31
+ // @ts-ignore
32
+ let mock = require('@/mock');
33
+ mock;
34
+ }
35
+
36
+ // @ts-ignore
37
+ window.appLog=(txt)=>{
38
+ console.log(txt);
39
+ }
40
+
41
+ /* eslint-disable */
42
+ // @ts-ignore
43
+ if(DEBUG_VCONSOLE){
44
+ // @ts-ignore
45
+ let VConsole = require('vconsole');
46
+ // @ts-ignore
47
+ const vConsole = new VConsole();
48
+ setTimeout(() => {
49
+ vConsole.setSwitchPosition(70, 10);
50
+ }, 2000);
51
+ }
52
+
53
+ // @ts-ignore
54
+ if(BUILD_ENV){
55
+ // @ts-ignore
56
+ window.appLog(`代码环境类型:${BUILD_ENV}`);
57
+ }
58
+
59
+ // @ts-ignore
60
+ if (VERSION_HASH) {
61
+ // @ts-ignore
62
+ window.appLog(`VERSION_HASH:${VERSION_HASH}`);
63
+ }
64
+
65
+ // @ts-ignore
66
+ window.appLog(`log init`);
67
+ // @ts-ignore
68
+ window.appLog(`${location.href}`);
69
+ // @ts-ignore
70
+ window.appLog(`ua:${navigator.userAgent}`);
71
+ /* eslint-enable */
72
+
73
+
74
+ ReactRender(<RouteList />, document.getElementById('main-view'));
75
+
76
+
77
+ // 只需在入口文件中启用 HMR
78
+ // @ts-ignore
79
+ if (module.hot) {
80
+ console.warn('热更刷新监听')
81
+ // @ts-ignore
82
+ module.hot.accept('./route', () => {
83
+ console.warn('热更刷新')
84
+ const NextApp = require('./route').default;
85
+ ReactRender(<NextApp />, document.getElementById('main-view'));
86
+ });
87
+ }
88
+
89
+