kn-cli 1.0.96 → 1.0.98
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.
- package/build/package.json +1 -0
- package/package.json +1 -1
- package/readme.md +3 -0
- package/templates/template_admin/cli.config.js +4 -1
- package/templates/template_admin/package.json +7 -1
- package/templates/template_admin/public/favicon.png +0 -0
- package/templates/template_admin/public/index.html +6 -4
- package/templates/template_admin/public/src/_antd.less +30 -3
- package/templates/template_admin/public/src/_mixin.less +41 -0
- package/templates/template_admin/public/src/_reset.less +28 -20
- package/templates/template_admin/public/src/_variable.less +11 -6
- package/templates/template_admin/public/src/assets/iconfont/iconfont.eot +0 -0
- package/templates/template_admin/public/src/assets/iconfont/iconfont.less +60 -8
- package/templates/template_admin/public/src/assets/iconfont/iconfont.svg +57 -18
- package/templates/template_admin/public/src/assets/iconfont/iconfont.ttf +0 -0
- package/templates/template_admin/public/src/assets/iconfont/iconfont.woff +0 -0
- package/templates/template_admin/public/src/assets/iconfont/iconfont.woff2 +0 -0
- package/templates/template_admin/public/src/assets/images/arrow.png +0 -0
- package/templates/template_admin/public/src/assets/images/icon-notice.png +0 -0
- package/templates/template_admin/public/src/assets/images/icon-user.png +0 -0
- package/templates/template_admin/public/src/assets/images/loadFail.png +0 -0
- package/templates/template_admin/public/src/assets/images/login/bg.png +0 -0
- package/templates/template_admin/public/src/assets/images/login/logo.png +0 -0
- package/templates/template_admin/public/src/assets/images/login/slogan.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/icon-dep-active.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/icon-dep.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/icon-log-active.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/icon-log.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/icon-loginlog-active.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/icon-loginlog.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/icon-role-active.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/icon-role.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/icon-user-active.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/icon-user.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/nav-toggle.png +0 -0
- package/templates/template_admin/public/src/assets/images/nav/slogan.png +0 -0
- package/templates/template_admin/public/src/assets/images/noData.png +0 -0
- package/templates/template_admin/public/src/assets/images/noSelect.png +0 -0
- package/templates/template_admin/public/src/components/auth/index.jsx +7 -3
- package/templates/template_admin/public/src/components/auth/index.less +7 -0
- package/templates/template_admin/public/src/components/badge/index.jsx +47 -0
- package/templates/template_admin/public/src/components/badge/index.less +44 -0
- package/templates/template_admin/public/src/components/debug/index.jsx +27 -0
- package/templates/template_admin/public/src/components/debug/index.less +9 -0
- package/templates/template_admin/public/src/components/empty/index.jsx +28 -0
- package/templates/template_admin/public/src/components/empty/index.less +20 -0
- package/templates/template_admin/public/src/components/image/index.jsx +73 -0
- package/templates/template_admin/public/src/components/image/index.less +117 -0
- package/templates/template_admin/public/src/components/image/preview.jsx +85 -0
- package/templates/template_admin/public/src/components/layout/basic/index.jsx +24 -11
- package/templates/template_admin/public/src/components/layout/basic/index.less +58 -19
- package/templates/template_admin/public/src/components/layout/index.jsx +20 -17
- package/templates/template_admin/public/src/components/layout/index.less +4 -4
- package/templates/template_admin/public/src/components/layout/provider/index.jsx +19 -6
- package/templates/template_admin/public/src/components/{menu → leftMenu}/index.jsx +20 -28
- package/templates/template_admin/public/src/components/leftMenu/index.less +42 -0
- package/templates/template_admin/public/src/components/popup/index.jsx +25 -0
- package/templates/template_admin/public/src/components/table/column.jsx +47 -0
- package/templates/template_admin/public/src/components/table/column.less +12 -0
- package/templates/template_admin/public/src/components/table/index.jsx +22 -13
- package/templates/template_admin/public/src/components/table/index.less +15 -0
- package/templates/template_admin/public/src/components/text/index.jsx +98 -0
- package/templates/template_admin/public/src/components/text/index.less +13 -0
- package/templates/template_admin/public/src/components/topMenu/index.jsx +97 -0
- package/templates/template_admin/public/src/components/topMenu/index.less +80 -0
- package/templates/template_admin/public/src/components/topMenu/topBar/index.jsx +76 -0
- package/templates/template_admin/public/src/components/topMenu/topBar/index.less +88 -0
- package/templates/template_admin/public/src/components/video/index.jsx +96 -0
- package/templates/template_admin/public/src/components/video/index.less +132 -0
- package/templates/template_admin/public/src/components/video/preview.jsx +38 -0
- package/templates/template_admin/public/src/dictionary/index.js +108 -39
- package/templates/template_admin/public/src/enum.js +41 -0
- package/templates/template_admin/public/src/hooks/index.jsx +8 -6
- package/templates/template_admin/public/src/hooks/useDebounceFn.jsx +33 -0
- package/templates/template_admin/public/src/hooks/useInToView.jsx +58 -0
- package/templates/template_admin/public/src/hooks/useRouteMenu.jsx +37 -28
- package/templates/template_admin/public/src/hooks/useTimer.jsx +42 -0
- package/templates/template_admin/public/src/index.jsx +10 -7
- package/templates/template_admin/public/src/mock/auth.js +33 -0
- package/templates/template_admin/public/src/mock/demo.js +12 -74
- package/templates/template_admin/public/src/mock/index.js +1 -0
- package/templates/template_admin/public/src/pages/auth/user/create/index.jsx +55 -0
- package/templates/template_admin/public/src/pages/auth/user/create/index.less +6 -0
- package/templates/template_admin/public/src/pages/auth/user/dialog/index.jsx +96 -0
- package/templates/template_admin/public/src/pages/auth/user/index.jsx +271 -0
- package/templates/template_admin/public/src/pages/components/layout/index.jsx +75 -0
- package/templates/template_admin/public/src/pages/components/layout/index.less +78 -0
- package/templates/template_admin/public/src/pages/components/layout/titleBar/index.jsx +28 -0
- package/templates/template_admin/public/src/pages/components/layout/titleBar/index.less +44 -0
- package/templates/template_admin/public/src/pages/components/select/account/index.jsx +114 -0
- package/templates/template_admin/public/src/pages/components/select/device/index.jsx +83 -0
- package/templates/template_admin/public/src/pages/components/select/groupUser/index.jsx +172 -0
- package/templates/template_admin/public/src/pages/components/select/user/index.jsx +119 -0
- package/templates/template_admin/public/src/pages/home.jsx +79 -0
- package/templates/template_admin/public/src/pages/home.less +6 -0
- package/templates/template_admin/public/src/pages/login/index.jsx +90 -6
- package/templates/template_admin/public/src/pages/login/index.less +133 -24
- package/templates/template_admin/public/src/provider/app.jsx +72 -66
- package/templates/template_admin/public/src/provider/loading.jsx +47 -0
- package/templates/template_admin/public/src/provider/menu.jsx +117 -83
- package/templates/template_admin/public/src/provider/menu.less +35 -0
- package/templates/template_admin/public/src/route.jsx +41 -40
- package/templates/template_admin/public/src/services/auth.js +39 -0
- package/templates/template_admin/public/src/services/demo.js +3 -37
- package/templates/template_admin/public/src/services/index.js +139 -13
- package/templates/template_admin/public/src/services/login.js +37 -0
- package/templates/template_admin/public/src/services/socket/index.jsx +100 -0
- package/templates/template_admin/public/src/type.js +36 -19
- package/templates/template_admin/public/src/utils/event.js +58 -0
- package/templates/template_admin/public/src/utils/format.js +84 -0
- package/templates/template_admin/public/src/utils/index.js +214 -2
- package/templates/template_admin/public/src/utils/rule.js +3 -0
- package/templates/template_admin/public/static/kssoLogin.html +1 -1
- package/templates/template_admin/webpack.api.js +11 -3
- package/src/.DS_Store +0 -0
- package/templates/template_admin/.gitignore +0 -6
- package/templates/template_admin/public/favicon.ico +0 -0
- package/templates/template_admin/public/src/assets/images/avatars/1.png +0 -0
- package/templates/template_admin/public/src/assets/images/avatars/2.png +0 -0
- package/templates/template_admin/public/src/assets/images/avatars/3.png +0 -0
- package/templates/template_admin/public/src/components/layout/centerBody/index.jsx +0 -25
- package/templates/template_admin/public/src/components/layout/centerBody/index.less +0 -30
- package/templates/template_admin/public/src/components/menu/index.less +0 -19
- package/templates/template_admin/public/src/components/menu/topMenu/index.jsx +0 -132
- package/templates/template_admin/public/src/components/menu/topMenu/index.less +0 -105
- package/templates/template_admin/public/src/pages/demo/detail/index.jsx +0 -27
- package/templates/template_admin/public/src/pages/demo/edit/index.jsx +0 -109
- package/templates/template_admin/public/src/pages/demo/index.less +0 -9
- package/templates/template_admin/public/src/pages/demo/page1.jsx +0 -161
- package/templates/template_admin/public/src/pages/superAdminLogin/index.jsx +0 -64
- package/templates/template_admin/public/src/pages/superAdminLogin/index.less +0 -44
- package/templates/template_app/.gitignore +0 -6
- package/templates/template_oa/.gitignore +0 -6
- package/templates/template_oa_jwt/.gitignore +0 -6
- package/templates/template_offcial/.gitignore +0 -6
|
@@ -1,8 +1,17 @@
|
|
|
1
|
+
@import '~@/_mixin.less';
|
|
2
|
+
|
|
3
|
+
@keyframes rotate {
|
|
4
|
+
from {
|
|
5
|
+
transform: rotate(0deg);
|
|
6
|
+
}
|
|
7
|
+
to {
|
|
8
|
+
transform: rotate(360deg);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
1
11
|
|
|
2
12
|
.link{
|
|
3
13
|
display: block;
|
|
4
14
|
}
|
|
5
|
-
|
|
6
15
|
.body{
|
|
7
16
|
width: 100%;
|
|
8
17
|
height:100%;
|
|
@@ -10,35 +19,135 @@
|
|
|
10
19
|
justify-content: center;
|
|
11
20
|
align-items: center;
|
|
12
21
|
flex-direction: column;
|
|
22
|
+
background-image: url('~@/assets/images/login/bg.png');
|
|
23
|
+
background-size: cover;
|
|
13
24
|
|
|
14
25
|
}
|
|
15
|
-
.
|
|
16
|
-
|
|
17
|
-
|
|
26
|
+
.bg2{
|
|
27
|
+
width: 100%;
|
|
28
|
+
height:100%;
|
|
29
|
+
display: flex;
|
|
30
|
+
justify-content: center;
|
|
31
|
+
align-items: center;
|
|
32
|
+
flex-direction: column;
|
|
33
|
+
background-image: url('~@/assets/images/login/bg.png');
|
|
34
|
+
background-size: auto 100%;
|
|
35
|
+
background-repeat: no-repeat;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
.loginWrap{
|
|
41
|
+
position: fixed;
|
|
42
|
+
right:0;
|
|
43
|
+
top:0;
|
|
44
|
+
height: 100%;
|
|
45
|
+
max-width: 560px;
|
|
46
|
+
min-width: 384px;
|
|
47
|
+
width:29%;
|
|
48
|
+
background-size: cover;
|
|
49
|
+
background-repeat: no-repeat;
|
|
50
|
+
background-position-x: right;
|
|
51
|
+
background-position-y: top;
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
align-items: center;
|
|
55
|
+
justify-content: center;
|
|
56
|
+
row-gap: 14px;
|
|
57
|
+
background-color: white;
|
|
58
|
+
padding:24px;
|
|
59
|
+
|
|
60
|
+
.centerWrap{
|
|
61
|
+
margin-top:-124px;
|
|
62
|
+
width: 336px;
|
|
63
|
+
display: flex;
|
|
64
|
+
flex-direction: column;
|
|
65
|
+
|
|
66
|
+
.phoneLogin,
|
|
67
|
+
.kssoLogin{
|
|
68
|
+
width: 100%;
|
|
69
|
+
margin-top: 24px;
|
|
70
|
+
min-height: 240px;
|
|
71
|
+
|
|
72
|
+
.codeGroup{
|
|
73
|
+
display: flex;
|
|
74
|
+
align-items: center;
|
|
75
|
+
justify-content: space-between;
|
|
76
|
+
width: 100%;
|
|
77
|
+
.sendCode{
|
|
78
|
+
font-size: 14px;
|
|
79
|
+
color:#0974F2;
|
|
80
|
+
cursor: pointer;
|
|
81
|
+
.no-select;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
.inputLabel{
|
|
85
|
+
font-weight: bold;
|
|
86
|
+
color:#000;
|
|
87
|
+
font-size: 14px;
|
|
88
|
+
.no-select;
|
|
89
|
+
.required{
|
|
90
|
+
color:#FF1111;
|
|
91
|
+
font-size: 14px;
|
|
92
|
+
margin-left:6px;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.logining{
|
|
99
|
+
font-size: 18px;
|
|
100
|
+
font-weight: bold;
|
|
101
|
+
display: flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
}
|
|
18
104
|
.title{
|
|
105
|
+
color:#1F2329;
|
|
19
106
|
font-size: 24px;
|
|
20
|
-
|
|
21
|
-
margin-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
hgroup{
|
|
25
|
-
margin-bottom: 16px;
|
|
26
|
-
display: block;
|
|
27
|
-
.inputLabel{
|
|
28
|
-
display: block;
|
|
29
|
-
font-size: 13px;
|
|
30
|
-
font-weight: var(--weight-Medium);
|
|
31
|
-
color: #86909C;
|
|
32
|
-
line-height: 22px;
|
|
33
|
-
}
|
|
107
|
+
margin-bottom:12px;
|
|
108
|
+
margin-top:32px;
|
|
109
|
+
.no-select;
|
|
34
110
|
}
|
|
35
|
-
.
|
|
36
|
-
width:
|
|
37
|
-
|
|
38
|
-
|
|
111
|
+
.logo{
|
|
112
|
+
width: 64px;
|
|
113
|
+
|
|
114
|
+
&[data-run='true']{
|
|
115
|
+
animation: rotate 2s linear infinite;
|
|
116
|
+
}
|
|
39
117
|
}
|
|
40
118
|
.btn{
|
|
41
|
-
width:
|
|
42
|
-
|
|
119
|
+
width: 208px;
|
|
120
|
+
height: 56px;
|
|
121
|
+
span{
|
|
122
|
+
font-size: 20px;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
.errorText{
|
|
126
|
+
color:#FF1111;
|
|
127
|
+
font-size: 14px;
|
|
128
|
+
}
|
|
129
|
+
.footer{
|
|
130
|
+
position: absolute;
|
|
131
|
+
bottom: 24px;
|
|
132
|
+
width: 100%;
|
|
133
|
+
display: flex;
|
|
134
|
+
flex-direction: column;
|
|
135
|
+
justify-content: center;
|
|
136
|
+
align-items: center;
|
|
137
|
+
row-gap: 4px;
|
|
138
|
+
p{
|
|
139
|
+
margin-bottom: 0;
|
|
140
|
+
color:#0974F2;
|
|
141
|
+
font-size: 14px;
|
|
142
|
+
}
|
|
43
143
|
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.sloganWrap{
|
|
147
|
+
position: fixed;
|
|
148
|
+
left:24px;
|
|
149
|
+
top:24px;
|
|
150
|
+
display: flex;
|
|
151
|
+
align-items: center;
|
|
152
|
+
.slogan{width:73px;}
|
|
44
153
|
}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
// @ts-ignore
|
|
2
|
-
import { useState,useMemo,
|
|
2
|
+
import { useState,useMemo, useRef } from 'react';
|
|
3
3
|
// @ts-ignore
|
|
4
4
|
import { useSearchParams,useNavigate } from 'react-router-dom';
|
|
5
5
|
// @ts-ignore
|
|
6
6
|
import { createContainer } from "unstated-next";
|
|
7
|
+
|
|
7
8
|
// @ts-ignore
|
|
8
|
-
import {
|
|
9
|
+
import { message } from "antd";
|
|
10
|
+
|
|
9
11
|
import {setJwt,setLogout} from '@/services';
|
|
10
|
-
|
|
12
|
+
|
|
11
13
|
import {jumpUrl} from '@/utils';
|
|
14
|
+
import { KSSO_LOGIN,Logout } from '@/services/login';
|
|
15
|
+
|
|
12
16
|
|
|
17
|
+
const MODULE_NAME='ProviderApp';
|
|
13
18
|
|
|
14
19
|
/**
|
|
15
20
|
* @typedef AppContaniner
|
|
@@ -17,13 +22,14 @@ import {jumpUrl} from '@/utils';
|
|
|
17
22
|
* @property {(open:boolean)=>void} setLoading - 设置加载状态
|
|
18
23
|
* @property {()=>Promise<boolean>} isLogin - 检查是否已登录状态
|
|
19
24
|
* @property {(username:string,password:string)=>Promise<boolean>} login - 触发登录
|
|
20
|
-
* @property {object} nav - 导航栏配置
|
|
21
|
-
* @property {(option:object)=>void} setNav - 设置导航栏配置
|
|
22
25
|
* @property {()=>Promise} logout - 注销病退回登录界面
|
|
23
26
|
* @property {(user:object)=>void} setUser - 注销病退回登录界面
|
|
27
|
+
* @property {(auths:string[])=>void} setAuths - 设置权限
|
|
24
28
|
* @property {object} user - 注销病退回登录界面
|
|
25
29
|
* @property {()=>Promise<boolean>} kssoLogin - 触发ksso登录
|
|
26
|
-
* @property {
|
|
30
|
+
* @property {string[]} auths - 用户的权限列表
|
|
31
|
+
* @property {()=>void} clearLoginInfo - 清理用户登录信息
|
|
32
|
+
*
|
|
27
33
|
*/
|
|
28
34
|
|
|
29
35
|
|
|
@@ -35,116 +41,116 @@ const useApp=() =>{
|
|
|
35
41
|
const [search] = useSearchParams();
|
|
36
42
|
const navigate= useNavigate();
|
|
37
43
|
const [loading,setLoading] = useState(true);
|
|
38
|
-
const [nav,setNavConfig] = useState({visible:true,syncDocumentTitle:false});
|
|
39
44
|
const [user,setUser] = useState(null);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
/**
|
|
46
|
+
* @type {[string[],React.Dispatch<React.SetStateAction<string[]>>]}
|
|
47
|
+
*/
|
|
48
|
+
const [auths,setAuths]= useState(null);
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @type {React.MutableRefObject<object>}
|
|
52
|
+
*/
|
|
53
|
+
const refSelf = useRef();
|
|
54
|
+
const LocalStorageName='zeus-user';
|
|
55
|
+
|
|
56
|
+
|
|
43
57
|
const isLogin=async ()=>{
|
|
44
|
-
await delay.wait(10);
|
|
45
58
|
if(!user){
|
|
46
59
|
try{
|
|
47
|
-
let userData = localStorage.getItem(
|
|
60
|
+
let userData = localStorage.getItem(LocalStorageName);
|
|
48
61
|
if(userData){
|
|
49
62
|
userData= JSON.parse(userData);
|
|
50
63
|
if(userData){
|
|
51
64
|
setUser(userData);
|
|
52
65
|
// @ts-ignore
|
|
53
66
|
setJwt(userData.token);
|
|
67
|
+
if(!auths){
|
|
68
|
+
await updateAuth();
|
|
69
|
+
}
|
|
54
70
|
return true;
|
|
55
71
|
}
|
|
72
|
+
}else{
|
|
73
|
+
navigate('/login');
|
|
56
74
|
}
|
|
57
75
|
}catch(ex){
|
|
58
|
-
|
|
76
|
+
navigate('/login');
|
|
59
77
|
}
|
|
60
78
|
}else{
|
|
79
|
+
if(!auths){
|
|
80
|
+
await updateAuth();
|
|
81
|
+
}
|
|
61
82
|
return true;
|
|
62
83
|
}
|
|
63
84
|
}
|
|
64
|
-
|
|
85
|
+
const updateAuth=async ()=>{
|
|
86
|
+
setAuths(['auth1','auth2','auth3','auth4'])
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
|
|
65
90
|
const kssoLogin=async ()=>{
|
|
66
91
|
let code = search.get('code');
|
|
67
92
|
if(code){
|
|
68
|
-
var
|
|
69
|
-
|
|
70
|
-
const req = await KssoLogin({code,redirectUri})
|
|
93
|
+
var redirect_uri = location.protocol + '//' + location.host + '/#/login';
|
|
94
|
+
const req = await KSSO_LOGIN({code,redirect_uri})
|
|
71
95
|
if(req?.code==0){
|
|
72
96
|
const userData = req?.data;
|
|
97
|
+
const {token}= userData;
|
|
73
98
|
setUser(userData);
|
|
74
|
-
setJwt(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
99
|
+
setJwt(token);
|
|
100
|
+
const authReq = await updateAuth();
|
|
101
|
+
if(authReq){
|
|
102
|
+
localStorage.setItem(LocalStorageName,JSON.stringify(userData));
|
|
103
|
+
let redirect = search.get('redirect');
|
|
104
|
+
message.success('登录成功');
|
|
105
|
+
if(redirect){
|
|
106
|
+
jumpUrl(redirect,{replace:true});
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
navigate('/');
|
|
110
|
+
}else{
|
|
111
|
+
return false;
|
|
81
112
|
}
|
|
82
|
-
navigate('/');
|
|
83
113
|
}else{
|
|
114
|
+
navigate('/login');
|
|
115
|
+
setTimeout(() => {
|
|
116
|
+
jumpUrl('',{reload:true});
|
|
117
|
+
}, 1000);
|
|
84
118
|
return false;
|
|
85
119
|
}
|
|
86
120
|
}else{
|
|
87
|
-
jumpUrl(`${location.protocol}//${location.host}
|
|
88
|
-
}
|
|
89
|
-
return true;
|
|
90
|
-
}
|
|
91
|
-
const login=async (username,password)=>{
|
|
92
|
-
const req = await Login({username,password});
|
|
93
|
-
if(req?.code==0){
|
|
94
|
-
const userData = req?.data;
|
|
95
|
-
setUser(userData);
|
|
96
|
-
setJwt(userData.token);
|
|
97
|
-
localStorage.setItem('user',JSON.stringify(userData));
|
|
98
|
-
let redirect = search.get('redirect');
|
|
99
|
-
if(redirect){
|
|
100
|
-
jumpUrl(redirect,{replace:true});
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
navigate('/');
|
|
104
|
-
}else{
|
|
105
|
-
return false;
|
|
121
|
+
jumpUrl(`${location.protocol}//${location.host}/#/login`,{replace:true})
|
|
106
122
|
}
|
|
107
123
|
return true;
|
|
108
124
|
}
|
|
109
|
-
const
|
|
110
|
-
const req= await
|
|
111
|
-
|
|
112
|
-
const userData = req.data;
|
|
113
|
-
setUser(userData);
|
|
114
|
-
localStorage.setItem('user',JSON.stringify(userData));
|
|
115
|
-
}
|
|
125
|
+
const logout=async ()=>{
|
|
126
|
+
const req = await Logout();
|
|
127
|
+
navigate('/login');
|
|
116
128
|
}
|
|
129
|
+
const clearLoginInfo=()=>{
|
|
117
130
|
|
|
118
|
-
|
|
131
|
+
localStorage.removeItem(LocalStorageName);
|
|
119
132
|
setUser(null);
|
|
133
|
+
setAuths(null);
|
|
120
134
|
setJwt('');
|
|
121
|
-
localStorage.removeItem('user');
|
|
122
|
-
navigate('/superAdminLogin');
|
|
123
135
|
}
|
|
136
|
+
|
|
124
137
|
setLogout(logout);
|
|
125
138
|
|
|
126
|
-
useEffect(()=>{
|
|
127
|
-
console.warn('[user]',user)
|
|
128
|
-
},[user])
|
|
129
139
|
|
|
130
|
-
|
|
131
|
-
setNavConfig({...nav,...config});
|
|
132
|
-
}
|
|
140
|
+
|
|
133
141
|
const action=useMemo(()=>{
|
|
134
142
|
return {
|
|
135
143
|
loading,
|
|
136
144
|
setLoading,
|
|
137
145
|
isLogin,
|
|
138
|
-
login,
|
|
139
|
-
nav,
|
|
140
|
-
setNav,
|
|
141
146
|
logout,
|
|
142
|
-
setUser,
|
|
143
147
|
user,
|
|
144
148
|
kssoLogin,
|
|
145
|
-
|
|
149
|
+
auths,
|
|
150
|
+
setAuths,
|
|
151
|
+
clearLoginInfo
|
|
146
152
|
}
|
|
147
|
-
},[loading,
|
|
153
|
+
},[clearLoginInfo,loading,user,isLogin,kssoLogin,auths]);
|
|
148
154
|
|
|
149
155
|
return action
|
|
150
156
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
|
|
2
|
+
// @ts-ignore
|
|
3
|
+
import { useState } from 'react'
|
|
4
|
+
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
import { createContainer } from "unstated-next"
|
|
7
|
+
|
|
8
|
+
const useProviderLoading=() =>{
|
|
9
|
+
|
|
10
|
+
const [count,setCount]= useState(0);
|
|
11
|
+
|
|
12
|
+
const open=()=>{
|
|
13
|
+
setCount(v=>v+1)
|
|
14
|
+
}
|
|
15
|
+
const close=()=>{
|
|
16
|
+
setCount(v=>v-1)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
loading:count>0,
|
|
21
|
+
open,
|
|
22
|
+
close,
|
|
23
|
+
count
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @typedef LoadingProviderContaniner
|
|
29
|
+
* @property {()=>void} open - 打开Loading
|
|
30
|
+
* @property {()=>void} close - 关闭Loading
|
|
31
|
+
* @property {boolean} loading - 当前loading状态
|
|
32
|
+
* @property {number} count - 当前loading计数器
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @typedef {object} LoadingProvider
|
|
38
|
+
* @property {function():LoadingProviderContaniner} useContainer
|
|
39
|
+
* @property {React.ComponentType<any>} Provider
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @type {LoadingProvider}
|
|
45
|
+
*/
|
|
46
|
+
const App = createContainer(useProviderLoading);
|
|
47
|
+
export default App;
|
|
@@ -6,116 +6,142 @@ import { useLocation } from 'react-router-dom';
|
|
|
6
6
|
import { createContainer } from "unstated-next"
|
|
7
7
|
|
|
8
8
|
import useRouteMenu from '@/hooks/useRouteMenu';
|
|
9
|
-
|
|
9
|
+
import ProviderApp from '@/provider/app';
|
|
10
10
|
|
|
11
11
|
// @ts-ignore
|
|
12
|
-
import
|
|
12
|
+
import styles from './menu.less';
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
const MenuIcon=(props)=>{
|
|
16
|
+
|
|
17
|
+
const [icon,setIcon]= useState('');
|
|
18
|
+
const [iconActive,setIconActive]= useState('');
|
|
19
|
+
|
|
20
|
+
const getIcon= async (iconName)=>{
|
|
21
|
+
const req = await new Promise(resolve=>{
|
|
22
|
+
let iconActive =import(`@/assets/images/nav/${iconName}-active.png`);
|
|
23
|
+
let icon = import(`@/assets/images/nav/${iconName}.png`);
|
|
24
|
+
Promise.all([icon,iconActive]).then(values=>{
|
|
25
|
+
setIcon(values[0].default);
|
|
26
|
+
setIconActive(values[1].default)
|
|
27
|
+
})
|
|
28
|
+
})
|
|
29
|
+
}
|
|
30
|
+
useEffect(()=>{
|
|
31
|
+
getIcon(props.name);
|
|
32
|
+
},[])
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<div className={styles.iconGroup}>
|
|
36
|
+
<img className={styles.icon} src={icon} />
|
|
37
|
+
<img className={styles.iconActive} src={iconActive} />
|
|
38
|
+
</div>
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
}
|
|
13
42
|
|
|
14
43
|
const MenuRoute=[
|
|
15
44
|
{
|
|
16
|
-
name:'
|
|
45
|
+
name:'仪表盘',
|
|
17
46
|
url:'/',
|
|
47
|
+
children:[
|
|
48
|
+
],
|
|
49
|
+
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name:'发射场',
|
|
53
|
+
url:'/jet',
|
|
54
|
+
children:[],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name:'弹药库',
|
|
58
|
+
url:'/store',
|
|
59
|
+
children:[],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name:'配件仓',
|
|
63
|
+
url:'/parts',
|
|
64
|
+
children:[],
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name:'基因库',
|
|
68
|
+
url:'/dna',
|
|
69
|
+
children:[],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name:'控制室',
|
|
73
|
+
url:'/auth',
|
|
74
|
+
msgCount:12,
|
|
75
|
+
primaryId:'auth',
|
|
18
76
|
children:[
|
|
19
77
|
{
|
|
20
|
-
name:'
|
|
21
|
-
icon:<
|
|
22
|
-
url:'/
|
|
78
|
+
name: '用户',
|
|
79
|
+
icon:<MenuIcon name='icon-user'/>,
|
|
80
|
+
url: '/auth/user',
|
|
81
|
+
auth:true,
|
|
82
|
+
primaryId:'authUser',
|
|
83
|
+
msgCount:0,
|
|
23
84
|
children:[
|
|
24
85
|
{
|
|
25
|
-
name:'
|
|
26
|
-
url:'/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
]
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
name:'内容管理2',
|
|
33
|
-
url:'/demo/page2',
|
|
34
|
-
msgCount:5,
|
|
35
|
-
children:[
|
|
36
|
-
{hideMenu:true,name:'内容管理2详情',routeTemplate:'/demo/page2/detail/:id'},
|
|
37
|
-
]
|
|
38
|
-
},
|
|
86
|
+
name:'新建用户',
|
|
87
|
+
url:'/auth/user/create',
|
|
88
|
+
hideMenu:true
|
|
89
|
+
}
|
|
39
90
|
]
|
|
40
91
|
},
|
|
41
92
|
{
|
|
42
|
-
name:'
|
|
43
|
-
icon:<
|
|
44
|
-
url:'/
|
|
45
|
-
children:[
|
|
46
|
-
{
|
|
47
|
-
name:'数据管理1',
|
|
48
|
-
url:'/demo/data/page1',
|
|
49
|
-
children:[
|
|
50
|
-
{hideMenu:true,name:'数据管理1详情',routeTemplate:'/demo/data/page1/detail/:id'},
|
|
51
|
-
]
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
name:'数据管理2',
|
|
55
|
-
url:'/demo/data/page2',
|
|
56
|
-
msgCount:5,
|
|
57
|
-
children:[
|
|
58
|
-
{hideMenu:true,name:'数据管理1详情',routeTemplate:'/demo/data/page2/detail/:id'},
|
|
59
|
-
]
|
|
60
|
-
},
|
|
61
|
-
]
|
|
93
|
+
name: '部门',
|
|
94
|
+
icon:<MenuIcon name='icon-dep'/>,
|
|
95
|
+
url: '/auth/dep',
|
|
62
96
|
},
|
|
63
|
-
|
|
64
|
-
]
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
name:'高级管理',
|
|
68
|
-
url:'/demo/admin',
|
|
69
|
-
auth:['admin'],
|
|
70
|
-
children:[
|
|
71
97
|
{
|
|
72
|
-
name:'
|
|
73
|
-
icon:<
|
|
74
|
-
url:'/
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
msgCount:5,
|
|
87
|
-
children:[
|
|
88
|
-
{hideMenu:true,name:'权限管理2-详情',routeTemplate:'/demo/admin/page2/detail/:id'},
|
|
89
|
-
]
|
|
90
|
-
},
|
|
91
|
-
]
|
|
98
|
+
name: '角色',
|
|
99
|
+
icon:<MenuIcon name='icon-role'/>,
|
|
100
|
+
url: '/auth/role',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: '操作记录',
|
|
104
|
+
icon:<MenuIcon name='icon-log'/>,
|
|
105
|
+
url: '/auth/log',
|
|
106
|
+
msgCount:12,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: '登录日志',
|
|
110
|
+
icon:<MenuIcon name='icon-loginlog'/>,
|
|
111
|
+
url: '/auth/loginLog',
|
|
92
112
|
},
|
|
93
|
-
]
|
|
113
|
+
],
|
|
94
114
|
}
|
|
95
115
|
]
|
|
96
116
|
|
|
97
117
|
|
|
118
|
+
/**
|
|
119
|
+
* @typedef MenuContaniner
|
|
120
|
+
* @property {RouteMenuItem[]} topMenu - 顶部导航栏的菜单列表
|
|
121
|
+
* @property {RouteMenuItem[]} leftMenu - 侧边导航栏的菜单列表
|
|
122
|
+
* @property {{menu:RouteMenuItem[],keys:string[]}} selectMenus - 当前被选中的菜单路径
|
|
123
|
+
* @property {(key:string)=>RouteMenuItem} findMenuData - 通过key查找菜单数据
|
|
124
|
+
* @property {(params:MenuConfig[])=>void} setMenuConfig - 设置菜单属性
|
|
125
|
+
* @property {()=>Promise<void>} reload - 重新加载渲染菜单
|
|
126
|
+
*/
|
|
127
|
+
|
|
98
128
|
const useProvider=() =>{
|
|
99
129
|
|
|
130
|
+
const app = ProviderApp.useContainer();
|
|
100
131
|
const routeMenu = useRouteMenu();
|
|
101
|
-
|
|
102
132
|
const curLocation =useLocation();
|
|
103
|
-
|
|
104
|
-
const [userAuth,setUserAuth]= useState([]);
|
|
105
133
|
const [topMenu,setTopMenu]=useState([]);
|
|
106
134
|
const [leftMenu,setLeftMenu]=useState([]);
|
|
107
|
-
|
|
108
135
|
const [selectMenus,setSelectMenus] = useState({menus:[],keys:[]});
|
|
109
136
|
|
|
110
|
-
|
|
111
137
|
const reload = async ()=>{
|
|
112
138
|
routeMenu.setSourceMap([...MenuRoute]);
|
|
113
139
|
}
|
|
114
|
-
const getTopMenu=()=>{
|
|
140
|
+
const getTopMenu=(userAuth=[])=>{
|
|
115
141
|
const list = routeMenu.getMenu(routeMenu.source,userAuth);
|
|
116
142
|
setTopMenu(list||[]);
|
|
117
143
|
}
|
|
118
|
-
const getLeftMenu=()=>{
|
|
144
|
+
const getLeftMenu=(userAuth=[])=>{
|
|
119
145
|
const list = routeMenu.getMenu(routeMenu.source,userAuth);
|
|
120
146
|
let menus= routeMenu.getOpenMenus(curLocation.pathname);
|
|
121
147
|
|
|
@@ -129,7 +155,6 @@ const useProvider=() =>{
|
|
|
129
155
|
}
|
|
130
156
|
setLeftMenu(subs);
|
|
131
157
|
}
|
|
132
|
-
|
|
133
158
|
const findMenuData=(menuKey)=>{
|
|
134
159
|
return routeMenu.findMenuData(menuKey);
|
|
135
160
|
|
|
@@ -138,7 +163,6 @@ const useProvider=() =>{
|
|
|
138
163
|
routeMenu.setMenuConfig(params);
|
|
139
164
|
}
|
|
140
165
|
|
|
141
|
-
|
|
142
166
|
useEffect(()=>{
|
|
143
167
|
let menus= routeMenu.getOpenMenus(curLocation.pathname);
|
|
144
168
|
let keys=menus.map(item=>item.key);
|
|
@@ -146,14 +170,24 @@ const useProvider=() =>{
|
|
|
146
170
|
},[curLocation,routeMenu.source]);
|
|
147
171
|
|
|
148
172
|
useEffect(()=>{
|
|
149
|
-
getTopMenu();
|
|
150
|
-
getLeftMenu();
|
|
151
|
-
},[routeMenu.source,curLocation,
|
|
173
|
+
getTopMenu(app.auths);
|
|
174
|
+
getLeftMenu(app.auths);
|
|
175
|
+
},[routeMenu.source,curLocation,app.auths])
|
|
176
|
+
|
|
177
|
+
return {leftMenu,topMenu,reload,selectMenus,findMenuData,setMenuConfig}
|
|
178
|
+
}
|
|
152
179
|
|
|
180
|
+
/**
|
|
181
|
+
* @typedef {object} MenuProvider
|
|
182
|
+
* @property {function():MenuContaniner} useContainer
|
|
183
|
+
* @property {React.ComponentType<any>} Provider
|
|
184
|
+
*/
|
|
153
185
|
|
|
154
186
|
|
|
155
|
-
|
|
156
|
-
}
|
|
187
|
+
/**
|
|
188
|
+
* @type {MenuProvider}
|
|
189
|
+
*/
|
|
190
|
+
// @ts-ignore
|
|
157
191
|
const App = createContainer(useProvider);
|
|
158
192
|
|
|
159
193
|
export default App;
|