kn-cli 1.0.3 → 1.0.5

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 (39) hide show
  1. package/build/package.json +1 -1
  2. package/build/webpack.config.js +4 -3
  3. package/package.json +1 -1
  4. package/readme.md +10 -32
  5. package/templates/template_app/frontend_build.sh +16 -3
  6. package/templates/template_app/package.json +9 -7
  7. package/templates/template_app/public/src/_reset.less +2 -7
  8. package/templates/template_app/public/src/_variable.less +5 -0
  9. package/templates/template_app/public/src/assets/images/loading.svg +22 -34
  10. package/templates/template_app/public/src/components/Auth/index.jsx +44 -0
  11. package/templates/template_app/public/src/components/Header/index.jsx +44 -10
  12. package/templates/template_app/public/src/components/Header/index.less +33 -7
  13. package/templates/template_app/public/src/components/Layout/App/index.jsx +4 -3
  14. package/templates/template_app/public/src/components/Layout/App/index.less +1 -5
  15. package/templates/template_app/public/src/components/Layout/Provider/index.jsx +12 -0
  16. package/templates/template_app/public/src/components/Layout/index.jsx +2 -1
  17. package/templates/template_app/public/src/components/Page/PageLoading/index.jsx +13 -3
  18. package/templates/template_app/public/src/components/Page/PageLoading/index.less +4 -4
  19. package/templates/template_app/public/src/dictionary/index.js +4 -1
  20. package/templates/template_app/public/src/hooks/index.jsx +4 -3
  21. package/templates/template_app/public/src/hooks/useLoading.jsx +42 -0
  22. package/templates/template_app/public/src/hooks/useNextPage.jsx +89 -0
  23. package/templates/template_app/public/src/index.jsx +2 -0
  24. package/templates/template_app/public/src/mock/index.js +1 -0
  25. package/templates/template_app/public/src/mock/user.js +47 -1
  26. package/templates/template_app/public/src/mock/utils.js +10 -0
  27. package/templates/template_app/public/src/pages/index.jsx +160 -1
  28. package/templates/template_app/public/src/pages/index.less +22 -0
  29. package/templates/template_app/public/src/pages/login/index.jsx +30 -0
  30. package/templates/template_app/public/src/pages/user/index.jsx +13 -0
  31. package/templates/template_app/public/src/provider/app.jsx +34 -3
  32. package/templates/template_app/public/src/route.jsx +13 -4
  33. package/templates/template_app/public/src/services/index.js +14 -34
  34. package/templates/template_app/public/src/services/user.js +13 -0
  35. package/templates/template_app/public/static/kssoLogin.html +22 -0
  36. package/templates/template_app/readme.md +2 -2
  37. package/templates/template_app/webpack.api.js +3 -3
  38. package/templates/template_app/public/pluginjs/swiper-bundle.min.css +0 -13
  39. package/templates/template_app/public/pluginjs/swiper-bundle.min.js +0 -14
@@ -3,7 +3,7 @@
3
3
  "version": "1.0.0",
4
4
  "main": "lib/index",
5
5
  "scripts": {
6
- "dev": "cross-env webpack-dev-server --progress",
6
+ "dev": "cross-env webpack-dev-server",
7
7
  "start": "cross-env webpack-dev-server -d",
8
8
  "build": "cross-env webpack -p --progress --colors --mode production",
9
9
  "build:dev": "cross-env webpack -p --progress --colors --mode production",
@@ -119,7 +119,7 @@ module.exports = {
119
119
  '@babel/preset-env',
120
120
  {
121
121
  targets: devMode
122
- ? { chrome: '80' }
122
+ ? { chrome: '90' }
123
123
  : {
124
124
  chrome: '40',
125
125
  ie: '11',
@@ -255,6 +255,7 @@ module.exports = {
255
255
  minimizer: [
256
256
  new TerserPlugin({
257
257
  parallel: true,
258
+ sourceMap:true
258
259
  // terserOptions:{
259
260
  // compress:false,
260
261
  // mangle:false
@@ -325,8 +326,8 @@ module.exports = {
325
326
  }),
326
327
  new webpack.SourceMapDevToolPlugin({
327
328
  filename: 'sourcemap/[file].map',
328
- publicPath: resource_path_relative,
329
- fileContext: 'js',
329
+ // publicPath: resource_path_relative,
330
+ // fileContext: 'js',
330
331
  })
331
332
  ],
332
333
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kn-cli",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/readme.md CHANGED
@@ -1,38 +1,16 @@
1
1
  # kn-cli
2
+ 项目脚手架
2
3
 
4
+ # 快速开始
5
+ 1. 安装: npm i kn-cli -g
6
+ 2. 创建项目: kn-cli --create
7
+ 3. 调试项目: kn-cli --dev
8
+ 4. 编译项目: kn-cli --build
9
+ 5. 当项目中需要添加第三方npm包时,务必使用--save参数`npm i 包名 --save`
3
10
 
4
- # 本地链接cli的方法
5
- 1. 在本工程目录外任意新建一个文件夹,如:`/Users/myProject`
6
- 2. 在终端内定位文件夹位置`cd /Users/myProject`
7
- 3. nvm use v16.8.0
8
- 4. 链接当前kn-cli目录:`npm link /Users/kingnet-cli`
9
- 5. 接下来查看是否链接成功: `kn-cli -v` 如果能正常打印版本号则代表成功
10
11
 
11
- # cli 基础使用方法
12
- 1. 查看版本号: `kn-cli -v`
13
- 2. 创建项目: `kn-cli --create`
14
- 3. 启动调试: `kn-cli --dev`
15
- 3. 打包编译: `kn-cli --build`
12
+ > 项目创建后,记得执行sh init.sh 以激活git分支提交日志
16
13
 
14
+ # cli 其它常用方法
15
+ 1. 查看版本号: `kn-cli -v`
17
16
 
18
- # cli 扩展功能
19
- ## iconfont
20
- 1. 将制作好的svg图标放入项目根目录`tools/iconfont/svg` 文件夹内
21
- 2. 执行 `kn-cli --iconfont`
22
- 3. 编译后的文件在 `tools/iconfont/dist/`文件夹下
23
- ## tinypnt 图片压缩
24
- 执行 `kn-cli --tinypng`,工具将自动扫描项目根目录下`src/assets/`内的所有图片,对可压缩的进行压缩并替换原有文件
25
-
26
-
27
- # 目录说明
28
- build: 编译相关的配置文件
29
- temp: 每次项目调试、编译时的临时缓存文件夹,可完全删除
30
- templates: 存放`kn-cli -i`创建的各类项目模板
31
-
32
- # CICD构建流程
33
- 1. sh frontend_build.sh 其中其实执行了
34
- a. npm i
35
- b. kn-cli --build
36
- c. mv dist ../release/
37
-
38
-
@@ -29,6 +29,16 @@ checkNode(){
29
29
  }
30
30
 
31
31
 
32
+ checkKnCli(){
33
+ if ! [ -x "$(command -v kn-cli)" ]
34
+ then
35
+ npm i kn-cli -g
36
+ return 0
37
+ fi
38
+ return 0
39
+ }
40
+
41
+
32
42
  checkResult(){
33
43
  ret=$?
34
44
  if [ $ret != 0 ]
@@ -49,9 +59,11 @@ build(){
49
59
  rm -rf release
50
60
  checkResult "清理release"
51
61
 
52
- cd public
53
- npm i kn-cli@1.0.2 -g
54
- checkResult "npm kn-cli"
62
+ checkKnCli
63
+ checkResult "检查kn-cli"
64
+
65
+ # npm i kn-cli@1.0.2 -g
66
+ # checkResult "npm kn-cli"
55
67
 
56
68
  kn-cli --build
57
69
  checkResult "kn-cli --build"
@@ -63,6 +75,7 @@ build(){
63
75
  checkNode
64
76
  checkResult "检查node"
65
77
 
78
+
66
79
  build
67
80
  checkResult "build"
68
81
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "app",
2
+ "name": "mobile-app",
3
3
  "version": "1.0.0",
4
4
  "main": "lib/index",
5
5
  "scripts": {
@@ -7,13 +7,15 @@
7
7
  },
8
8
  "license": "MIT",
9
9
  "dependencies": {
10
- "axios": "^1.1.3",
11
- "react": "^17.0.2",
12
- "react-dom": "^17.0.2",
13
- "react-router": "^6.3.0",
14
- "react-router-dom": "^6.3.0",
10
+ "antd-mobile": "~5.27.0",
11
+ "axios": "~1.1.3",
12
+ "moment": "~2.29.4",
13
+ "react": "~17.0.2",
14
+ "react-dom": "~17.0.2",
15
+ "react-router": "~6.3.0",
16
+ "react-router-dom": "~6.3.0",
15
17
  "unstated-next": "~1.1.0",
16
- "vconsole": "^3.9.5"
18
+ "vconsole": "~3.9.5"
17
19
  },
18
20
  "engines": {
19
21
  "node": "16.18.0"
@@ -9,12 +9,7 @@
9
9
  width:100vw;
10
10
  height: 100%;
11
11
  // height:100vh;
12
-
13
- padding:env(safe-area-inset-top)
14
- env(safe-area-inset-right)
15
- env(safe-area-inset-bottom)
16
- env(safe-area-inset-left);
17
- padding-bottom:0;
12
+ padding:var(--safeTop) var(--safeRight) var(--safeBottom) var(--safeLeft);
18
13
  }
19
14
 
20
15
  body,#main-view{
@@ -103,7 +98,7 @@ a,div,p,span,section,hgroup{
103
98
 
104
99
 
105
100
  #__vconsole *{
106
- font-size:24PX;
101
+ font-size:14PX;
107
102
  }
108
103
 
109
104
  body[data-debug-layout]{
@@ -4,8 +4,13 @@
4
4
  :root{
5
5
  --safeTop: constant(safe-area-inset-top);
6
6
  --safeBottom: constant(safe-area-inset-bottom);
7
+ --safeLeft: constant(safe-area-inset-left);
8
+ --safeRight: constant(safe-area-inset-right);
9
+
7
10
  --safeTop: env(safe-area-inset-top);
8
11
  --safeBottom: env(safe-area-inset-bottom);
12
+ --safeLeft: env(safe-area-inset-left);
13
+ --safeRight: env(safe-area-inset-right);
9
14
 
10
15
  --weight-Thin:100;
11
16
  --weight-Ultralight:200;
@@ -1,51 +1,39 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: rgb(255, 255, 255); display: block; shape-rendering: auto;" width="200px" height="200px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
2
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: none; display: block; shape-rendering: auto;" width="200px" height="200px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
3
3
  <g transform="rotate(0 50 50)">
4
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
5
- <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.9166666666666666s" repeatCount="indefinite"></animate>
4
+ <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#94908d">
5
+ <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.8888888888888888s" repeatCount="indefinite"></animate>
6
6
  </rect>
7
- </g><g transform="rotate(30 50 50)">
8
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
9
- <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.8333333333333334s" repeatCount="indefinite"></animate>
7
+ </g><g transform="rotate(40 50 50)">
8
+ <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#94908d">
9
+ <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.7777777777777778s" repeatCount="indefinite"></animate>
10
10
  </rect>
11
- </g><g transform="rotate(60 50 50)">
12
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
13
- <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.75s" repeatCount="indefinite"></animate>
14
- </rect>
15
- </g><g transform="rotate(90 50 50)">
16
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
11
+ </g><g transform="rotate(80 50 50)">
12
+ <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#94908d">
17
13
  <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.6666666666666666s" repeatCount="indefinite"></animate>
18
14
  </rect>
19
15
  </g><g transform="rotate(120 50 50)">
20
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
21
- <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5833333333333334s" repeatCount="indefinite"></animate>
22
- </rect>
23
- </g><g transform="rotate(150 50 50)">
24
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
25
- <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5s" repeatCount="indefinite"></animate>
16
+ <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#94908d">
17
+ <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5555555555555556s" repeatCount="indefinite"></animate>
26
18
  </rect>
27
- </g><g transform="rotate(180 50 50)">
28
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
29
- <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.4166666666666667s" repeatCount="indefinite"></animate>
19
+ </g><g transform="rotate(160 50 50)">
20
+ <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#94908d">
21
+ <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.4444444444444444s" repeatCount="indefinite"></animate>
30
22
  </rect>
31
- </g><g transform="rotate(210 50 50)">
32
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
23
+ </g><g transform="rotate(200 50 50)">
24
+ <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#94908d">
33
25
  <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.3333333333333333s" repeatCount="indefinite"></animate>
34
26
  </rect>
35
27
  </g><g transform="rotate(240 50 50)">
36
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
37
- <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.25s" repeatCount="indefinite"></animate>
38
- </rect>
39
- </g><g transform="rotate(270 50 50)">
40
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
41
- <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.16666666666666666s" repeatCount="indefinite"></animate>
28
+ <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#94908d">
29
+ <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.2222222222222222s" repeatCount="indefinite"></animate>
42
30
  </rect>
43
- </g><g transform="rotate(300 50 50)">
44
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
45
- <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.08333333333333333s" repeatCount="indefinite"></animate>
31
+ </g><g transform="rotate(280 50 50)">
32
+ <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#94908d">
33
+ <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.1111111111111111s" repeatCount="indefinite"></animate>
46
34
  </rect>
47
- </g><g transform="rotate(330 50 50)">
48
- <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#1d3f72">
35
+ </g><g transform="rotate(320 50 50)">
36
+ <rect x="47" y="24" rx="3" ry="6" width="6" height="12" fill="#94908d">
49
37
  <animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="0s" repeatCount="indefinite"></animate>
50
38
  </rect>
51
39
  </g>
@@ -0,0 +1,44 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import ProviderApp from '@/provider/app';
3
+ import { useNavigate } from 'react-router-dom';
4
+ import {useLoading} from '@/hooks';
5
+
6
+ export const AuthShow=(props)=>{
7
+ const {name} = props;
8
+ const app = ProviderApp.useContainer();
9
+ if(app?.user?.auth?.includes(name)){
10
+ return props.children;
11
+ }
12
+ return <></>
13
+ }
14
+
15
+ export const AuthLogin=(props)=>{
16
+ const navigate = useNavigate();
17
+ const [pass,setPass] = useState(false)
18
+ const app = ProviderApp.useContainer();
19
+ const loading = useLoading();
20
+
21
+ const check=async ()=>{
22
+ loading.setLoading(true);
23
+ console.log(`[Auth]检查用户登录态`)
24
+ const req =await app.isLogin();
25
+ loading.setLoading(false);
26
+ if(req){
27
+ console.log(`[Auth]检查用户登录态成功`)
28
+ setPass(true);
29
+ }else{
30
+ console.log(`[Auth]检查用户登录态失败`)
31
+ setPass(false);
32
+ navigate('/login');
33
+ }
34
+ }
35
+ useEffect(check,[]);
36
+
37
+ if(pass){
38
+ return props.children;
39
+ }
40
+ return <>检查登录态中...</>
41
+ }
42
+
43
+
44
+ export default {AuthShow,AuthLogin};
@@ -1,22 +1,56 @@
1
- import React from 'react';
1
+ import React, { useEffect } from 'react';
2
2
  import IconFont from '../IconFont';
3
3
  import styles from './index.less';
4
4
 
5
5
  const Header=(props)=>{
6
- const {title='标题'} = props;
7
-
8
- const onBack=()=>{
6
+ const {
7
+ visible=true,
8
+ className='',
9
+ title='标题',
10
+ subTitle='',
11
+ leftLabel='',
12
+ rightLabel='',
13
+ left=<IconFont className={styles.leftIcon} icon='arrowBack' />,
14
+ right='',
15
+ syncDocumentTitle=false
16
+ } = props;
9
17
 
18
+ // 同步更新网页标题
19
+ useEffect(()=>{
20
+ if(syncDocumentTitle){
21
+ document.title= title;
22
+ }
23
+ },[title])
24
+ const onLeft=()=>{
25
+ window.history.back();
26
+ }
27
+ const onLeftLabel=()=>{
28
+ if(props.onLeftLabel){props.onLeftLabel()}
29
+ }
30
+ const onRight=()=>{
31
+ if(props.onRight){props.onRight()}
32
+ }
33
+ const onRightLabel=()=>{
34
+ if(props.onRightLabel){props.onRightLabel()}
35
+ }
36
+ const onTitle=()=>{
37
+ if(props.onTitle){props.onTitle()}
10
38
  }
11
39
  return (
12
- <section className={styles.header}>
13
- <section className={styles.left} onClick={onBack}>
14
- <IconFont icon='arrowBack' />
15
- </section>
40
+ <section className={`${styles.header} ${className}`} data-visible={visible}>
41
+ <hgroup className={styles.group}>
42
+ {left&&(<section className={styles.left} onClick={onLeft}>{left}</section>)}
43
+ {leftLabel&&<span className={styles.leftLabel} onClick={onLeftLabel}>{leftLabel}</span>}
44
+ </hgroup>
16
45
  <section className={styles.center}>
17
- {title}
46
+ {title&&<span onClick={onTitle}>{title}</span>}
47
+ {subTitle&&<span>{subTitle}</span>}
18
48
  </section>
19
- <section className={styles.right}></section>
49
+ <hgroup className={styles.group}>
50
+ {rightLabel&&<span className={styles.rightLabel} onClick={onRightLabel}>{rightLabel}</span>}
51
+ {right&&(<section className={styles.right} onClick={onRight}>{right}</section>)}
52
+ </hgroup>
53
+
20
54
  </section>
21
55
  )
22
56
  }
@@ -2,30 +2,56 @@
2
2
 
3
3
 
4
4
  .header{
5
+ z-index: 1;
5
6
  height:var(--height-header);
7
+ background-color: white;
6
8
  width:100%;
7
9
  display: flex;
8
10
  align-items: center;
9
11
  box-shadow: 0 0 2px 0 #ccc;
10
12
  padding: 0 var(--padding-default);
11
- .left{
13
+ &[data-visible='false']{
14
+ display: none;
15
+ }
16
+ .group{
12
17
  display: flex;
13
18
  align-items: center;
14
19
  height:100%;
20
+ min-width: 1px;
21
+ }
22
+ .right,
23
+ .left{
24
+ display: flex;
25
+ align-items: center;
15
26
  font-size: 24px;
16
- width:48px;
27
+ .rightIcon,
28
+ .leftIcon{
29
+ margin-top: 6px;
30
+ }
31
+ }
32
+ .rightLabel,
33
+ .leftLabel{
34
+ &:not(:first-child){
35
+ margin-left:var(--padding-small)
36
+ }
17
37
  }
38
+
18
39
  .center{
19
40
  flex:1;
20
41
  height:100%;
21
42
  display: flex;
43
+ flex-direction: column;
22
44
  align-items: center;
23
45
  justify-content: center;
24
- color:var(--color-text)
25
- }
26
- .right{
27
- height:100%;
28
- width:48px;
46
+ color:var(--color-text);
47
+ span:nth-child(1){
48
+ font-size: 16px;
49
+ color:inherit;
50
+ }
51
+ span:nth-child(2){
52
+ font-size: 12px;
53
+ color:inherit;
54
+ }
29
55
  }
30
56
  }
31
57
 
@@ -1,15 +1,16 @@
1
1
  import React from 'react';
2
2
  import {Outlet} from 'react-router-dom';
3
3
  import Header from '@/components/Header';
4
+ import ProviderApp from '@/provider/app';
4
5
  import styles from './index.less';
5
6
 
6
7
 
7
8
  const LayoutApp=(props)=>{
9
+ const providerApp = ProviderApp.useContainer();
10
+ console.log('layoutApp.nav',providerApp.nav)
8
11
  return (
9
12
  <section className={styles.layoutAppWrap}>
10
- <section className={styles.header}>
11
- <Header />
12
- </section>
13
+ <Header {...providerApp.nav} />
13
14
  <section className={styles.content}>
14
15
  <Outlet />
15
16
  </section>
@@ -14,11 +14,7 @@
14
14
  padding-bottom: var(--safeBottom);
15
15
 
16
16
  }
17
- .header{
18
- height:var(--height-header);
19
- width:100%;
20
- background-color: white;
21
- }
17
+
22
18
  .content{
23
19
  flex:1;
24
20
  width:100%;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import {Outlet} from 'react-router-dom';
3
+ import ProviderApp from '@/provider/app';
4
+
5
+ const LayoutProvider=(props)=>{
6
+ return (
7
+ <ProviderApp.Provider>
8
+ <Outlet />
9
+ </ProviderApp.Provider>
10
+ )
11
+ }
12
+ export default LayoutProvider;
@@ -1,3 +1,4 @@
1
1
  import React from 'react';
2
2
  import LayoutApp from './App';
3
- export { LayoutApp };
3
+ import LayoutProvider from './Provider';
4
+ export { LayoutApp ,LayoutProvider};
@@ -1,7 +1,8 @@
1
1
  import React,{useEffect, useState} from 'react';
2
-
2
+ import ReactDOM from 'react-dom';
3
3
  import CSS from './index.less';
4
- import Loading from '@/components/Loading';
4
+ import Popup from '@/components/Popup';
5
+ import imgLoading from '@/assets/images/loading.svg';
5
6
 
6
7
  const PageLoading = (props) => {
7
8
  const {visible=true} = props;
@@ -11,10 +12,19 @@ const PageLoading = (props) => {
11
12
  return (
12
13
  <div className={CSS.wrap } >
13
14
  <div className={CSS.box} data-show={visible}>
14
- <Loading />
15
+ <img src={imgLoading} />
15
16
  </div>
16
17
  </div>
17
18
  );
18
19
  };
19
20
 
21
+ export const ShowPageLoading=(props={canTouch:false})=>{
22
+ let popup = Popup(()=>{},{cantouch:props.canTouch});
23
+ ReactDOM.render(
24
+ <PageLoading visible={true} />,
25
+ popup.dom
26
+ );
27
+ return popup.destory;
28
+ }
29
+
20
30
  export default React.memo(PageLoading);
@@ -12,16 +12,16 @@
12
12
 
13
13
  .box {
14
14
 
15
- width: 150px;
16
- height: 150px;
15
+ width: 80px;
16
+ height: 80px;
17
17
  background: rgba(0,0,0,.3);
18
- border-radius: 28px;
18
+ border-radius: 12px;
19
19
  display: flex;
20
20
  justify-content: center;
21
21
  align-items: center;
22
22
  img{
23
23
  display: block;
24
- width:150px;opacity: .5;
24
+ width:80%;
25
25
  }
26
26
  &[data-show=false]{
27
27
  opacity: 0;
@@ -1,6 +1,6 @@
1
1
 
2
2
  import React, { useState, useEffect,useMemo} from 'react';
3
-
3
+ import {GET_USER_TYPE} from '@/services/user';
4
4
 
5
5
  const bookCreater=options=>{
6
6
  const {
@@ -91,6 +91,9 @@ const bookCreater=options=>{
91
91
  }
92
92
  }
93
93
 
94
+ export const useUserType = bookCreater({
95
+ service:GET_USER_TYPE,
96
+ })
94
97
  export const useTaskState=bookCreater({
95
98
  defaultTypes:[
96
99
  {label:'进行中',value:'1',key:'run'},
@@ -5,13 +5,14 @@ import useDelay from './useDelay';
5
5
  import usePreload from './usePreload';
6
6
  import useSearch from './useSearch';
7
7
  import useUpdate from './useUpdate';
8
- import useLogin from './useLogin';
9
-
8
+ import useNextPage from './useNextPage';
9
+ import useLoading from './useLoading';
10
10
  export {
11
11
  useImageLoader,
12
12
  useDelay,
13
13
  usePreload,
14
14
  useSearch,
15
15
  useUpdate,
16
- useLogin
16
+ useNextPage,
17
+ useLoading
17
18
  }
@@ -0,0 +1,42 @@
1
+ import { useRef,useState, useEffect } from 'react';
2
+ import {ShowPageLoading} from '@/components/Page/PageLoading';
3
+
4
+ const useLoading=(props={})=>{
5
+ const {canTouch=false} = props;
6
+ const [name] = useState(props?.name||'loading')
7
+ const [count,setCount] = useState(props?.loading?1:0);
8
+ const refPageLoading = useRef();
9
+
10
+ const setLoading=(state)=>{
11
+ if(state){
12
+ setCount(v=>v+1);
13
+ }else{
14
+ setCount(v=>v-1);
15
+ }
16
+ }
17
+ const reset=()=>{
18
+ setCount(v=>0);
19
+ }
20
+ useEffect(()=>{
21
+ if(count > 0 ){
22
+ if(!refPageLoading.current){
23
+ refPageLoading.current = ShowPageLoading({canTouch:canTouch});
24
+ }
25
+ }else{
26
+ if(refPageLoading.current){
27
+ refPageLoading.current();//销毁
28
+ refPageLoading.current=null;
29
+ }
30
+ }
31
+ },[count])
32
+
33
+
34
+ return {
35
+ name,
36
+ reset,
37
+ setLoading,
38
+ loading:count
39
+ }
40
+ }
41
+
42
+ export default useLoading;