kn-cli 1.0.89 → 1.0.91

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 (150) hide show
  1. package/build/webpack.config.js +3 -3
  2. package/package.json +1 -1
  3. package/readme.md +7 -0
  4. package/src/create.js +22 -2
  5. package/src/utils/index.js +1 -1
  6. package/templates/template_admin/cli.config.js +1 -1
  7. package/templates/template_admin/jsconfig.json +5 -1
  8. package/templates/template_admin/package.json +1 -1
  9. package/templates/template_admin/public/index.html +2 -2
  10. package/templates/template_admin/public/src/components/{Auth → auth}/index.jsx +21 -3
  11. package/templates/template_admin/public/src/components/{IconFont → iconFont}/index.jsx +10 -0
  12. package/templates/template_admin/public/src/components/{Layout/Basic → layout/basic}/index.jsx +13 -3
  13. package/templates/template_admin/public/src/components/layout/centerBody/index.jsx +25 -0
  14. package/templates/template_admin/public/src/components/{Layout → layout}/index.jsx +15 -6
  15. package/templates/{template_offcial/public/src/components/Layout/Provider → template_admin/public/src/components/layout/provider}/index.jsx +8 -1
  16. package/templates/{template_app/public/src/components/Link → template_admin/public/src/components/link}/index.jsx +15 -0
  17. package/templates/template_admin/public/src/components/{Menu → menu}/index.jsx +15 -8
  18. package/templates/template_admin/public/src/components/{Page/PageLoading → page/pageLoading}/index.jsx +25 -4
  19. package/templates/template_admin/public/src/components/{Popup → popup}/index.jsx +13 -0
  20. package/templates/{template_app/public/src/components/Toast → template_admin/public/src/components/toast}/index.jsx +20 -1
  21. package/templates/template_admin/public/src/components/{TopMenu → topMenu}/index.jsx +13 -8
  22. package/templates/template_admin/public/src/dictionary/index.js +8 -3
  23. package/templates/template_admin/public/src/hooks/index.jsx +1 -0
  24. package/templates/template_admin/public/src/hooks/useDelay.jsx +5 -0
  25. package/templates/template_admin/public/src/hooks/useImageLoader.jsx +1 -2
  26. package/templates/template_admin/public/src/hooks/useLoading.jsx +5 -1
  27. package/templates/template_admin/public/src/hooks/usePreload.jsx +2 -1
  28. package/templates/template_admin/public/src/hooks/useScrollTop.jsx +12 -0
  29. package/templates/template_admin/public/src/hooks/useSearch.jsx +28 -2
  30. package/templates/template_admin/public/src/hooks/useUpdate.jsx +5 -0
  31. package/templates/template_admin/public/src/index.jsx +16 -2
  32. package/templates/template_admin/public/src/pages/material/index.jsx +2 -1
  33. package/templates/template_admin/public/src/pages/user/index.jsx +7 -2
  34. package/templates/template_admin/public/src/provider/app.jsx +39 -4
  35. package/templates/template_admin/public/src/provider/menu.jsx +4 -1
  36. package/templates/template_admin/public/src/route.jsx +8 -5
  37. package/templates/template_admin/public/src/services/index.js +38 -4
  38. package/templates/template_admin/public/src/services/user.js +3 -3
  39. package/templates/template_admin/public/src/type.js +48 -0
  40. package/templates/template_admin/public/src/utils/index.js +34 -18
  41. package/templates/template_app/cli.config.js +1 -1
  42. package/templates/template_app/jsconfig.json +5 -1
  43. package/templates/template_app/package.json +1 -1
  44. package/templates/template_app/public/src/components/{Auth → auth}/index.jsx +20 -2
  45. package/templates/template_app/public/src/components/{Header → header}/index.jsx +25 -1
  46. package/templates/template_app/public/src/components/{IconFont → iconFont}/index.jsx +10 -0
  47. package/templates/template_app/public/src/components/{Layout/App → layout/app}/index.jsx +12 -2
  48. package/templates/template_app/public/src/components/layout/index.jsx +6 -0
  49. package/templates/{template_admin/public/src/components/Layout/Provider → template_app/public/src/components/layout/provider}/index.jsx +3 -0
  50. package/templates/template_app/public/src/components/link/index.jsx +39 -0
  51. package/templates/template_app/public/src/components/{Marquee → marquee}/index.jsx +11 -2
  52. package/templates/template_app/public/src/components/{Page/PageLoading → page/pageLoading}/index.jsx +23 -3
  53. package/templates/template_app/public/src/components/{Popup → popup}/index.jsx +13 -0
  54. package/templates/{template_offcial/public/src/components/Toast → template_app/public/src/components/toast}/index.jsx +21 -1
  55. package/templates/template_app/public/src/dictionary/index.js +7 -3
  56. package/templates/template_app/public/src/hooks/index.jsx +1 -0
  57. package/templates/template_app/public/src/hooks/useDelay.jsx +5 -0
  58. package/templates/template_app/public/src/hooks/useImageLoader.jsx +1 -2
  59. package/templates/template_app/public/src/hooks/useLoading.jsx +5 -1
  60. package/templates/template_app/public/src/hooks/usePreload.jsx +2 -1
  61. package/templates/template_app/public/src/hooks/useScrollTop.jsx +12 -0
  62. package/templates/template_app/public/src/index.jsx +22 -5
  63. package/templates/template_app/public/src/pages/dictionary/index.jsx +9 -1
  64. package/templates/template_app/public/src/pages/index.jsx +16 -4
  65. package/templates/template_app/public/src/pages/list/index.jsx +7 -1
  66. package/templates/template_app/public/src/pages/login/index.jsx +10 -4
  67. package/templates/template_app/public/src/pages/user/index.jsx +7 -2
  68. package/templates/template_app/public/src/provider/app.jsx +5 -3
  69. package/templates/template_app/public/src/route.jsx +5 -2
  70. package/templates/template_app/public/src/services/index.js +10 -8
  71. package/templates/template_app/public/src/services/user.js +4 -4
  72. package/templates/template_app/public/src/type.js +27 -0
  73. package/templates/template_app/public/src/utils/index.js +6 -0
  74. package/templates/template_oa/cli.config.js +1 -1
  75. package/templates/template_oa/package.json +1 -1
  76. package/templates/template_oa_jwt/cli.config.js +1 -1
  77. package/templates/template_oa_jwt/package.json +1 -1
  78. package/templates/template_offcial/cli.config.js +1 -1
  79. package/templates/template_offcial/jsconfig.json +5 -1
  80. package/templates/template_offcial/package.json +1 -1
  81. package/templates/template_offcial/public/src/components/{Footer → footer}/index.jsx +15 -1
  82. package/templates/template_offcial/public/src/components/{Header → header}/index.jsx +14 -0
  83. package/templates/template_offcial/public/src/components/{IconFont → iconFont}/index.jsx +10 -0
  84. package/templates/template_offcial/public/src/components/{Layout → layout}/index.jsx +10 -3
  85. package/templates/{template_app/public/src/components/Layout/Provider → template_offcial/public/src/components/layout/provider}/index.jsx +7 -0
  86. package/templates/template_offcial/public/src/components/link/index.jsx +39 -0
  87. package/templates/template_offcial/public/src/components/{Page/PageLoading → page/pageLoading}/index.jsx +25 -4
  88. package/templates/template_offcial/public/src/components/{Popup → popup}/index.jsx +13 -0
  89. package/templates/{template_admin/public/src/components/Toast → template_offcial/public/src/components/toast}/index.jsx +20 -1
  90. package/templates/template_offcial/public/src/hooks/index.jsx +1 -0
  91. package/templates/template_offcial/public/src/hooks/useImageLoader.jsx +1 -0
  92. package/templates/template_offcial/public/src/hooks/useInToView.jsx +3 -0
  93. package/templates/template_offcial/public/src/hooks/usePreload.jsx +1 -0
  94. package/templates/template_offcial/public/src/hooks/useScroll.jsx +8 -0
  95. package/templates/template_offcial/public/src/index.jsx +15 -2
  96. package/templates/template_offcial/public/src/pages/index.jsx +8 -1
  97. package/templates/template_offcial/public/src/pages/pc/index.jsx +4 -2
  98. package/templates/template_offcial/public/src/provider/app.jsx +28 -2
  99. package/templates/template_offcial/public/src/route.jsx +4 -2
  100. package/templates/template_offcial/public/src/services/index.js +38 -2
  101. package/templates/template_offcial/public/src/services/user.js +3 -3
  102. package/templates/template_offcial/public/src/type.js +47 -0
  103. package/src/.DS_Store +0 -0
  104. package/templates/template_admin/.gitignore +0 -6
  105. package/templates/template_admin/public/src/components/Alert/index.jsx +0 -0
  106. package/templates/template_admin/public/src/components/Alert/index.less +0 -0
  107. package/templates/template_admin/public/src/components/Header/index.jsx +0 -57
  108. package/templates/template_admin/public/src/components/Layout/CenterBody/index.jsx +0 -15
  109. package/templates/template_admin/public/src/components/Link/index.jsx +0 -24
  110. package/templates/template_admin/public/src/components/Loading/index.jsx +0 -14
  111. package/templates/template_admin/public/src/components/Loading/index.less +0 -85
  112. package/templates/template_admin/public/src/components/mask/index.jsx +0 -47
  113. package/templates/template_admin/public/src/components/mask/index.less +0 -32
  114. package/templates/template_admin/public/src/hooks/useLogin.jsx +0 -33
  115. package/templates/template_app/.gitignore +0 -6
  116. package/templates/template_app/public/src/components/Header/index.less +0 -57
  117. package/templates/template_app/public/src/components/Layout/index.jsx +0 -4
  118. package/templates/template_app/public/src/hooks/useLogin.jsx +0 -33
  119. package/templates/template_oa/.gitignore +0 -6
  120. package/templates/template_oa_jwt/.gitignore +0 -6
  121. package/templates/template_offcial/.gitignore +0 -6
  122. package/templates/template_offcial/public/src/components/Alert/index.jsx +0 -0
  123. package/templates/template_offcial/public/src/components/Alert/index.less +0 -0
  124. package/templates/template_offcial/public/src/components/Link/index.jsx +0 -24
  125. /package/templates/template_admin/public/src/components/{IconFont → iconFont}/index.less +0 -0
  126. /package/templates/template_admin/public/src/components/{Layout/Basic → layout/basic}/index.less +0 -0
  127. /package/templates/template_admin/public/src/components/{Layout/CenterBody → layout/centerBody}/index.less +0 -0
  128. /package/templates/template_admin/public/src/components/{Layout → layout}/index.less +0 -0
  129. /package/templates/template_admin/public/src/components/{Link → link}/index.less +0 -0
  130. /package/templates/template_admin/public/src/components/{Menu → menu}/index.less +0 -0
  131. /package/templates/template_admin/public/src/components/{Page/PageLoading → page/pageLoading}/index.less +0 -0
  132. /package/templates/template_admin/public/src/components/{Popup → popup}/index.less +0 -0
  133. /package/templates/template_admin/public/src/components/{Toast → toast}/index.less +0 -0
  134. /package/templates/template_admin/public/src/components/{TopMenu → topMenu}/index.less +0 -0
  135. /package/templates/{template_admin/public/src/components/Header → template_app/public/src/components/header}/index.less +0 -0
  136. /package/templates/template_app/public/src/components/{IconFont → iconFont}/index.less +0 -0
  137. /package/templates/template_app/public/src/components/{Layout/App → layout/app}/index.less +0 -0
  138. /package/templates/template_app/public/src/components/{Link → link}/index.less +0 -0
  139. /package/templates/template_app/public/src/components/{Marquee → marquee}/index.less +0 -0
  140. /package/templates/template_app/public/src/components/{Page/PageLoading → page/pageLoading}/index.less +0 -0
  141. /package/templates/template_app/public/src/components/{Popup → popup}/index.less +0 -0
  142. /package/templates/template_app/public/src/components/{Toast → toast}/index.less +0 -0
  143. /package/templates/template_offcial/public/src/components/{Footer → footer}/index.less +0 -0
  144. /package/templates/template_offcial/public/src/components/{Header → header}/index.less +0 -0
  145. /package/templates/template_offcial/public/src/components/{IconFont → iconFont}/index.less +0 -0
  146. /package/templates/template_offcial/public/src/components/{Layout → layout}/index.less +0 -0
  147. /package/templates/template_offcial/public/src/components/{Link → link}/index.less +0 -0
  148. /package/templates/template_offcial/public/src/components/{Page/PageLoading → page/pageLoading}/index.less +0 -0
  149. /package/templates/template_offcial/public/src/components/{Popup → popup}/index.less +0 -0
  150. /package/templates/template_offcial/public/src/components/{Toast → toast}/index.less +0 -0
@@ -109,7 +109,7 @@ if(CLI_CONFIG?.entry){
109
109
  ////////////// OUTPUT ///////////////
110
110
  const output= {
111
111
  // devtoolModuleFilenameTemplate:'webpack:///dist/[resource-path]',
112
- filename: `[name]${hashMode ? '-[chunkhash]' : ''}.js`,
112
+ filename: hashMode?`[name]-[chunkhash].js`:`[name].js?v=${NowDateTime}`,
113
113
  path: path.join(dirname, distFolder,distJsFolder),
114
114
  publicPath: resource_path_relative,
115
115
  };
@@ -305,7 +305,7 @@ if(jsSplitMode){
305
305
  if(jsSplitMode===true||jsSplitMode?.runtime!==false){
306
306
  if(indexHtml){//只有当会注入到html内时才允许带runtime,避免多entry情况下入口js变为chunk.js
307
307
  optimization.runtimeChunk= {
308
- name: 'runtime', // 所有入口有自己的runtime.js
308
+ name: `runtime`, // 所有入口有自己的runtime.js
309
309
  };
310
310
  }
311
311
  }
@@ -443,7 +443,7 @@ if (!devMode) {
443
443
  if(cssSplitMode){
444
444
  plugins.push(
445
445
  new MiniCssExtractPlugin({
446
- filename: `[name]${hashMode ? '-[chunkhash:8]' : ''}.css`,
446
+ filename: hashMode?`[name]-[chunkhash:8].css`:`[name].css?v=${NowDateTime}`,
447
447
  ignoreOrder: true
448
448
  }),
449
449
  )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kn-cli",
3
- "version": "1.0.89",
3
+ "version": "1.0.91",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/readme.md CHANGED
@@ -140,6 +140,13 @@ report
140
140
 
141
141
 
142
142
  # 更新日志
143
+ * 1.0.91
144
+ 创建项目时自动将项目名称设置为当前文件夹的名称
145
+ 模版内doc注释规范化、文件夹首字母大写更正
146
+
147
+ * 1.0.90
148
+ 优化在hashMode=false的情况下,html内引用js、css资源时在尾部增加v=版本号
149
+
143
150
  * 1.0.89
144
151
  cli在npm i时,默认增加` export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true` 解决puppeteer包安装引起的异常
145
152
 
package/src/create.js CHANGED
@@ -2,7 +2,7 @@
2
2
  const chalk= require("chalk");
3
3
  const path= require( "path");
4
4
  const {Listr} = require('listr2');
5
- const {TaskNodeVersion,copyDir}= require('./utils');
5
+ const {TaskNodeVersion,copyDir,replaceFileData}= require('./utils');
6
6
  const inquirer = require('inquirer');
7
7
  const ROOT=path.resolve(__dirname,"../");
8
8
 
@@ -13,6 +13,7 @@ const ROOT=path.resolve(__dirname,"../");
13
13
  */
14
14
  module.exports=async ()=> {
15
15
  const sourceDir = process.cwd();
16
+ const project_name = path.parse(sourceDir).base;//新建的项目名称以当前文件夹名为名
16
17
  const templatesDir = path.resolve(ROOT,"templates");
17
18
  let templateName='';
18
19
  const answer = await inquirer.prompt([
@@ -51,7 +52,26 @@ module.exports=async ()=> {
51
52
  },
52
53
  {
53
54
  title: "项目创建中",
54
- task: () => copyDir(path.resolve(templatesDir,templateName),sourceDir)
55
+ task: async () => {
56
+ const project_dir = path.resolve(templatesDir,templateName);
57
+ // 将模版复制到目标目录
58
+ const req= await copyDir(project_dir,sourceDir);
59
+ if(req){
60
+ // 替换工程名称
61
+ const cliConfigName = path.resolve(sourceDir,'cli.config.js');
62
+ const packageConfigName = path.resolve(sourceDir,'package.json');
63
+ await replaceFileData(cliConfigName,function(data){
64
+ data = data.replace(/projectName/ig,project_name);
65
+ return data;
66
+ });
67
+ await replaceFileData(packageConfigName,function(data){
68
+ data = data.replace(/projectName/ig,project_name);
69
+ return data;
70
+ });
71
+ return true;
72
+ }
73
+ return false;
74
+ }
55
75
  },
56
76
  ]);
57
77
  try{
@@ -12,7 +12,7 @@ module.exports = {
12
12
  if(err){
13
13
  throw new Error(err);
14
14
  }
15
- resolve();
15
+ resolve(true);
16
16
  })
17
17
  })
18
18
  },
@@ -1,6 +1,6 @@
1
1
 
2
2
  module.exports = {
3
- name:'template-admin',
3
+ name:'projectName',
4
4
  registryType:'npm',//npm镜像源,taobao|npm
5
5
  less:{
6
6
  javascriptEnabled:true,//是否开启less js
@@ -3,8 +3,12 @@
3
3
  "baseUrl": ".",
4
4
  "emitDecoratorMetadata": true,
5
5
  "experimentalDecorators": true,
6
+ "lib": ["dom", "ES2021"],
7
+ "allowJs":true,
8
+ "checkJs": true,
9
+ "jsx": "react",
6
10
  "paths": {
7
11
  "@/*": ["./public/src/*"]
8
- }
12
+ },
9
13
  }
10
14
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "template_admin",
2
+ "name": "projectName",
3
3
  "version": "1.0.0",
4
4
  "main": "lib/index",
5
5
  "scripts": {
@@ -21,8 +21,8 @@
21
21
  var docEl = document.documentElement;
22
22
  function setRemUnit(type) {
23
23
  let w = Math.max(window.innerWidth, docEl.clientWidth, docEl.offsetWidth);
24
- let defaultWidth = 375;//填入设计稿上的宽度
25
- w = w > defaultWidth ? defaultWidth : w;
24
+ let defaultWidth = 1200;//填入设计稿上的宽度
25
+ // w = w > defaultWidth ? defaultWidth : w;
26
26
  var rem = w / defaultWidth * 100;
27
27
  docEl.style.fontSize = rem + 'px'
28
28
  }
@@ -1,8 +1,19 @@
1
+ // @ts-ignore
1
2
  import React, { useEffect, useState } from 'react';
2
- import ProviderApp from '@/provider/app';
3
+ // @ts-ignore
3
4
  import { useNavigate } from 'react-router-dom';
4
- import {useLoading} from '@/hooks';
5
5
 
6
+ import ProviderApp from '@/provider/app';
7
+ import {useLoading} from '@/hooks/index';
8
+
9
+ /**
10
+ * 检查用户是否带有某个权限
11
+ * @param {object} props
12
+ * @param {string} [props.name] - 权限的名称
13
+ * @param {JSX.Element} [props.children] - 子组件
14
+ *
15
+ * @returns {JSX.Element}
16
+ */
6
17
  export const AuthShow=(props)=>{
7
18
  const {name} = props;
8
19
  const app = ProviderApp.useContainer();
@@ -12,6 +23,13 @@ export const AuthShow=(props)=>{
12
23
  return <></>
13
24
  }
14
25
 
26
+ /**
27
+ * 用户登录态校验
28
+ * @param {object} props
29
+ * @param {JSX.Element} [props.children] - 当登录校验合法后显示的子组件
30
+ *
31
+ * @returns {JSX.Element}
32
+ */
15
33
  export const AuthLogin=(props)=>{
16
34
  const navigate = useNavigate();
17
35
  const [pass,setPass] = useState(false)
@@ -32,7 +50,7 @@ export const AuthLogin=(props)=>{
32
50
  navigate('/superAdminLogin');
33
51
  }
34
52
  }
35
- useEffect(check,[]);
53
+ useEffect(()=>{check()},[]);
36
54
 
37
55
  if(pass){
38
56
  return props.children;
@@ -1,6 +1,16 @@
1
+ // @ts-ignore
1
2
  import React from "react";
3
+ // @ts-ignore
2
4
  import styles from'./index.less';
3
5
 
6
+ /**
7
+ * iconFont图标
8
+ * @param {object} props
9
+ * @param {string} [props.icon] - 图标名称
10
+ * @param {string} [props.className] - 扩展类名
11
+ *
12
+ * @returns {JSX.Element}
13
+ */
4
14
  const IconFont=(props)=>{
5
15
  const {icon,className,...others} = props;
6
16
  return (
@@ -1,13 +1,23 @@
1
+ // @ts-ignore
1
2
  import React from 'react';
3
+ // @ts-ignore
2
4
  import {Outlet} from 'react-router-dom';
3
- import {LayoutCenterBody} from '@/components/Layout';
4
5
 
6
+ import {LayoutCenterBody} from '@/components/layout';
5
7
 
8
+ // @ts-ignore
6
9
  import styles from './index.less';
7
10
 
8
-
11
+ /**
12
+ * 基础页面框架
13
+ * @param {object} props
14
+ * @param {JSX.Element} [props.nav] - 左侧导航栏组件
15
+ * @param {JSX.Element} [props.topMenu] - 顶部导航栏组件
16
+ *
17
+ * @returns {JSX.Element}
18
+ */
9
19
  const LayoutBasic=(props)=>{
10
- const {className,nav="",topMenu=""} = props;
20
+ const {nav="",topMenu=""} = props;
11
21
  return (
12
22
  <LayoutCenterBody layout='x-center'>
13
23
  <section className={styles.wrap} >
@@ -0,0 +1,25 @@
1
+ // @ts-ignore
2
+ import React from 'react';
3
+
4
+ // @ts-ignore
5
+ import styles from './index.less';
6
+
7
+ /**
8
+ * 居中定位的layout
9
+ * @param {object} props
10
+ * @param {string} [props.className] - 扩展类样式
11
+ * @param {string} [props.layout='normal'] - 布局样式,xy-center|x-center|y-center
12
+ * @param {JSX.Element|string} [props.children] - 容器内的子组件
13
+ *
14
+ * @returns {JSX.Element}
15
+ */
16
+ const LayoutCenterBody=(props)=>{
17
+ const {className,layout='normal'} = props;
18
+
19
+ return (
20
+ <section data-layout={layout} className={ className?`${styles.contentBody} ${className}`:styles.contentBody }>
21
+ {props.children}
22
+ </section>
23
+ )
24
+ }
25
+ export default LayoutCenterBody;
@@ -1,16 +1,25 @@
1
+ // @ts-ignore
1
2
  import React from 'react';
2
- import ProviderApp from '@/provider/app';
3
-
3
+ // @ts-ignore
4
4
  import {Outlet} from 'react-router-dom';
5
+ // @ts-ignore
5
6
  import { ConfigProvider } from 'antd';
6
- import LayoutBasic from './Basic';
7
- import LayoutCenterBody from './CenterBody';
7
+ // @ts-ignore
8
8
  import zhCN from 'antd/lib/locale/zh_CN';
9
9
 
10
+ import ProviderApp from '@/provider/app';
11
+ import LayoutBasic from './basic/index';
12
+ import LayoutCenterBody from './centerBody/index';
13
+
14
+ // @ts-ignore
10
15
  import styles from './index.less';
11
16
 
12
- // 站点最基础的layout,用于控制一些全局环境变量
13
- const Layout = (props) => {
17
+ /**
18
+ * 页面根框架,用于注入各类provider
19
+ *
20
+ * @returns {JSX.Element}
21
+ */
22
+ const Layout = () => {
14
23
  return (
15
24
  <ProviderApp.Provider>
16
25
  <ConfigProvider locale={zhCN}>
@@ -1,8 +1,15 @@
1
+ // @ts-ignore
1
2
  import React from 'react';
3
+ // @ts-ignore
2
4
  import {Outlet} from 'react-router-dom';
5
+
3
6
  import ProviderApp from '@/provider/app';
4
7
 
5
- const LayoutProvider=(props)=>{
8
+ /**
9
+ * 注入AppProvider
10
+ * @returns {JSX.Element}
11
+ */
12
+ const LayoutProvider=()=>{
6
13
  return (
7
14
  <ProviderApp.Provider>
8
15
  <Outlet />
@@ -1,7 +1,22 @@
1
+ // @ts-ignore
1
2
  import React from 'react';
3
+
2
4
  import { openLink } from '@/utils';
5
+
6
+ // @ts-ignore
3
7
  import styles from './index.less';
4
8
 
9
+ /**
10
+ * 超链接组件
11
+ * @param {object} [props]
12
+ * @param {JSX.Element|string} [props.children] - 子组件
13
+ * @param {string} [props.className] - 扩展类样式名称
14
+ * @param {Function} [props.onClick] - 点击链接的回调
15
+ * @param {string} [props.href] - 跳转链接
16
+ * @param {string} [props.target] - 当target='_blank'时代表新窗口打开
17
+ *
18
+ * @returns {JSX.Element}
19
+ */
5
20
  const Link=(props)=>{
6
21
  const {children,className='',onClick,href='',target=''} = props;
7
22
 
@@ -1,12 +1,16 @@
1
-
2
- import { Menu } from 'antd';
1
+ // @ts-ignore
3
2
  import React, { useEffect, useRef, useState } from 'react';
3
+ // @ts-ignore
4
+ import { Menu } from 'antd';
5
+ // @ts-ignore
4
6
  import {matchPath,useLocation,useNavigate,} from 'react-router-dom';
7
+ // @ts-ignore
5
8
  import { AppstoreOutlined, MailOutlined, SettingOutlined } from '@ant-design/icons';
6
- import {useDelay,useLoading} from '@/hooks';
7
- import ProviderMenu from '@/provider/menu';
8
9
 
10
+ import {useLoading} from '@/hooks/index';
11
+ import ProviderMenu from '@/provider/menu';
9
12
 
13
+ // @ts-ignore
10
14
  import styles from './index.less';
11
15
 
12
16
  const ICON_NAME={
@@ -17,11 +21,14 @@ const ICON_NAME={
17
21
 
18
22
 
19
23
 
20
-
21
- const LeftMenu=(props)=>{
24
+ /**
25
+ * 左侧导航栏的demo组件
26
+ *
27
+ * @returns {JSX.Element}
28
+ */
29
+ const LeftMenu=()=>{
22
30
 
23
31
  const providerMenu = ProviderMenu.useContainer();
24
- const delay = useDelay();
25
32
  const loader = useLoading();
26
33
  const [menus,setMenus] = useState([]);
27
34
  const [openKeys,setOpenKeys] = useState([]);
@@ -54,7 +61,7 @@ const LeftMenu=(props)=>{
54
61
  return item;
55
62
  }
56
63
 
57
-
64
+ // @ts-ignore
58
65
  window.matchPath=matchPath;
59
66
 
60
67
 
@@ -1,13 +1,27 @@
1
- import React,{useEffect, useState} from 'react';
1
+ // @ts-ignore
2
+ import React from 'react';
3
+ // @ts-ignore
2
4
  import ReactDOM from 'react-dom';
3
- import CSS from './index.less';
4
- import Popup from '@/components/Popup';
5
+
6
+ import Popup from '@/components/popup';
7
+
8
+ // @ts-ignore
5
9
  import imgLoading from '@/assets/images/loading.svg';
6
10
 
11
+ // @ts-ignore
12
+ import CSS from './index.less';
13
+
14
+ /**
15
+ * 页面Loading状态
16
+ * @param {object} [props]
17
+ * @param {boolean} [props.visible=true] - 是否显示状态
18
+ *
19
+ * @returns {JSX.Element}
20
+ */
7
21
  const PageLoading = (props) => {
8
22
  const {visible=true} = props;
9
23
  if(!visible){
10
- return '';
24
+ return <></>;
11
25
  }
12
26
  return (
13
27
  <div className={CSS.wrap } >
@@ -18,6 +32,13 @@ const PageLoading = (props) => {
18
32
  );
19
33
  };
20
34
 
35
+ /**
36
+ * 全屏置顶显示一个页面loading组件
37
+ * @param {object} [props]
38
+ * @param {boolean} [props.canTouch=false] - 是否允许用户点击屏幕穿透到下面的组件
39
+ *
40
+ * @returns {(string)=>void}
41
+ */
21
42
  export const ShowPageLoading=(props={canTouch:false})=>{
22
43
  let popup = Popup(()=>{},{cantouch:props.canTouch});
23
44
  ReactDOM.render(
@@ -1,8 +1,21 @@
1
+ // @ts-ignore
1
2
  import React from 'react';
3
+ // @ts-ignore
2
4
  import ReactDOM from 'react-dom';
5
+
6
+ // @ts-ignore
3
7
  import styles from './index.less';
4
8
  styles;
5
9
 
10
+ /**
11
+ * 一个全屏置顶的遮罩层
12
+ * @param {(result)=>void} reslove - 遮罩层的关闭回调
13
+ * @param {Object} [options] - 参数
14
+ * @param {boolean} [options.cantouch=false] - 是否允许被点击穿透
15
+ * @param {boolean} [options.transparent=false] - 是否遮罩层完全透明
16
+ *
17
+ * @returns { {dom:HTMLElement,destory:()=>void} }
18
+ */
6
19
  const Popup = (reslove,options) => {
7
20
  let rootDom = document.createElement('div');
8
21
  rootDom.className='popup-box';
@@ -1,7 +1,13 @@
1
+ // @ts-ignore
1
2
  import React,{useEffect} from 'react';
3
+ // @ts-ignore
2
4
  import ReactDOM from 'react-dom';
5
+
6
+ // @ts-ignore
7
+ import Popup from '@/components/popup';
8
+
9
+ // @ts-ignore
3
10
  import styles from './index.less';
4
- import Popup from '@/components/Popup/index.jsx';
5
11
 
6
12
  const toastList=[];
7
13
  const runNext=()=>{
@@ -43,12 +49,25 @@ const Toast=props=>{
43
49
  )
44
50
  }
45
51
 
52
+ /**
53
+ * @typedef {object} ToastOptions
54
+ * @property {string} message - 吐司文案内容
55
+ * @property {number} [delay=2000] - 持续时间,毫秒
56
+ * @property {string} [position] - 显示位置,center|top|bottom
57
+ * @property {Function} [resolve] - 显示完毕的回调
58
+ */
46
59
 
60
+ /**
61
+ * 显示一个吐司信息
62
+ * @param {ToastOptions|string} [props] - 文案内容或一个配置参数
63
+ * @returns { Promise }
64
+ */
47
65
  const ShowToast=props=>{
48
66
  if(typeof props === 'string'){
49
67
  props = {message:props}
50
68
  }
51
69
  return new Promise((resolve) => {
70
+ // @ts-ignore
52
71
  props.resolve = resolve;
53
72
  toastList.push(props);
54
73
  if(toastList.length===1){
@@ -1,15 +1,20 @@
1
+ // @ts-ignore
1
2
  import React, { useState,useEffect, useRef} from 'react';
3
+ // @ts-ignore
2
4
  import { matchPath,useLocation,useNavigate } from 'react-router-dom';
3
-
4
-
5
+ // @ts-ignore
5
6
  import { LogoutOutlined, UserOutlined } from '@ant-design/icons';
6
- import imgAvatar from '@/assets/images/avatar.png';
7
- import { Menu,Dropdown } from 'antd'
7
+ // @ts-ignore
8
+ import { Menu,Dropdown } from 'antd';
9
+
8
10
  import ProviderApp from '@/provider/app';
9
11
  import ProviderMenu from '@/provider/menu';
10
- import styles from './index.less';
11
12
  import {GET_MENU} from '@/services/auth';
12
13
 
14
+ // @ts-ignore
15
+ import imgAvatar from '@/assets/images/avatar.png';
16
+ // @ts-ignore
17
+ import styles from './index.less';
13
18
 
14
19
  /**
15
20
  * 菜单下的隐藏子路由集
@@ -53,9 +58,9 @@ const SUB_MENU_CONFIG=[
53
58
  左侧导航栏数据为顶部导航栏数据的menus内子项{label,icon,children}组成
54
59
  routeTemplate用来识别动态参数的路由,同前端本地路由配置同步即可
55
60
  当顶部导航栏只有一项时,将自动隐藏顶部导航菜单
56
- * @returns
61
+ * @returns {JSX.Element}
57
62
  */
58
- const TopMenu=(props)=>{
63
+ const TopMenu=()=>{
59
64
  const app = ProviderApp.useContainer();
60
65
  const providerMenu = ProviderMenu.useContainer();
61
66
  const curRoute = useLocation();
@@ -187,7 +192,7 @@ const TopMenu=(props)=>{
187
192
  setSelectedKeys([]);
188
193
  providerMenu.setMenus([]);
189
194
  }
190
- useEffect(loadMenu,[]);
195
+ useEffect(()=>{loadMenu()},[]);
191
196
 
192
197
  useEffect(()=>{
193
198
  reloadOpenMenu();
@@ -1,8 +1,12 @@
1
1
 
2
- import React, { useState, useEffect,useMemo} from 'react';
3
- import {GET_USER_TYPE} from '@/services/user';
2
+ // @ts-ignore
3
+ import React from 'react';
4
+ // @ts-ignore
4
5
  import {useDictionary} from 'kn-hooks';
5
- import ShowToast from '@/components/Toast';
6
+
7
+ import {GET_USER_TYPE} from '@/services/user';
8
+ import ShowToast from '@/components/toast';
9
+
6
10
  export const SelectOption=(props)=>{
7
11
  const {value}=props;
8
12
  const name = props['data-keyname'];
@@ -10,6 +14,7 @@ export const SelectOption=(props)=>{
10
14
  ShowToast(`点击option name=${name},value=${value},label=${props.children}`)
11
15
  if(props.onClick)props.onClick();
12
16
  }
17
+ // @ts-ignore
13
18
  return <hgroup onClick={onClick} key={value} name={name} value={value}>{props.children}</hgroup>
14
19
  }
15
20
 
@@ -6,6 +6,7 @@ import usePreload from './usePreload';
6
6
  import useSearch from './useSearch';
7
7
  import useUpdate from './useUpdate';
8
8
  import useLoading from './useLoading';
9
+ // @ts-ignore
9
10
  import {usePagination,usePaginationWithForm} from 'kn-hooks';
10
11
 
11
12
  export {
@@ -1,18 +1,23 @@
1
+ // @ts-ignore
1
2
  import { useRef,useState,useMemo, useEffect } from 'react';
2
3
 
3
4
  const useDelay=()=>{
4
5
  const [loading,setLoading] = useState(false);
5
6
  const refSet = useRef();
7
+ // @ts-ignore
6
8
  refSet.current = setLoading;
7
9
  useEffect(()=>{
10
+ // @ts-ignore
8
11
  refSet.current = setLoading;
9
12
  },[setLoading]);
10
13
 
11
14
  const actions=useMemo(()=>{
12
15
  const wait=(ms)=>{
16
+ // @ts-ignore
13
17
  refSet.current(true);
14
18
  return new Promise(res=>{
15
19
  setTimeout(()=>{
20
+ // @ts-ignore
16
21
  refSet.current(false);
17
22
  res();
18
23
  }, ms);
@@ -1,7 +1,6 @@
1
+ // @ts-ignore
1
2
  import React, { useEffect,useState,useMemo } from 'react';
2
3
 
3
-
4
-
5
4
  const useImageLoader=(img_src)=>{
6
5
  const [src,setSrc] = useState('');
7
6
  useEffect(() => {
@@ -1,5 +1,7 @@
1
+ // @ts-ignore
1
2
  import { useRef,useState, useEffect } from 'react';
2
- import {ShowPageLoading} from '@/components/Page/PageLoading';
3
+
4
+ import {ShowPageLoading} from '@/components/page/pageLoading';
3
5
 
4
6
  const useLoading=(props={})=>{
5
7
  const {canTouch=false} = props;
@@ -20,10 +22,12 @@ const useLoading=(props={})=>{
20
22
  useEffect(()=>{
21
23
  if(count > 0 ){
22
24
  if(!refPageLoading.current){
25
+ // @ts-ignore
23
26
  refPageLoading.current = ShowPageLoading({canTouch:canTouch});
24
27
  }
25
28
  }else{
26
29
  if(refPageLoading.current){
30
+ // @ts-ignore
27
31
  refPageLoading.current();//销毁
28
32
  refPageLoading.current=null;
29
33
  }
@@ -1,4 +1,5 @@
1
- import React, { useEffect,useState,useMemo,useRef,useCallback } from 'react';
1
+ // @ts-ignore
2
+ import React, { useState,useMemo,useCallback } from 'react';
2
3
 
3
4
  const usePreload=(files)=>{
4
5
  const [list] = useState(files);
@@ -1,8 +1,19 @@
1
+ // @ts-ignore
1
2
  import { useState, useMemo, useEffect } from 'react'
3
+ // @ts-ignore
2
4
  import { createContainer } from 'unstated-next'
3
5
 
6
+ /**
7
+ * @typedef {[HTMLElement,Function]} UseStateElement
8
+ */
9
+
10
+
4
11
  const useActivity = () => {
5
12
  const [scrollTop, setScrollTop] = useState(0);
13
+
14
+ /**
15
+ * @type UseStateElement
16
+ */
6
17
  const [containerNode, setContainerNode] = useState();
7
18
  const [clientHeight, setClientHeight] = useState(0);
8
19
  const [titleRefs, setTitleRefs] = useState({});
@@ -12,6 +23,7 @@ const useActivity = () => {
12
23
  setContainerNode(node);
13
24
  setClientHeight(node.clientHeight)
14
25
  node.addEventListener('scroll', (e) => {
26
+ // @ts-ignore
15
27
  setScrollTop(e.target.scrollTop);
16
28
  })
17
29
  }, [])