kn-cli 1.0.97 → 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/package.json +1 -1
- 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/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
|
@@ -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;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
.iconGroup{
|
|
5
|
+
width: 17px;
|
|
6
|
+
height: 100%;
|
|
7
|
+
margin-right: 12px;
|
|
8
|
+
display: inline-flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
|
|
11
|
+
img{width: 100%;}
|
|
12
|
+
.icon{
|
|
13
|
+
display: inline-block;
|
|
14
|
+
}
|
|
15
|
+
.iconActive{
|
|
16
|
+
display: none;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
:global(.ant-menu-title-content){
|
|
21
|
+
font-size: 14px;
|
|
22
|
+
}
|
|
23
|
+
:global(.ant-menu-item-selected),
|
|
24
|
+
:global(.ant-menu-item-active){
|
|
25
|
+
.iconGroup .iconActive{
|
|
26
|
+
display: inline-block;
|
|
27
|
+
}
|
|
28
|
+
.iconGroup .icon{
|
|
29
|
+
display: none;
|
|
30
|
+
}
|
|
31
|
+
:global(.ant-menu-title-content){
|
|
32
|
+
font-weight: bold;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
}
|
|
@@ -1,43 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
// @ts-ignore
|
|
3
1
|
import React,{Suspense} from 'react';
|
|
4
2
|
// @ts-ignore
|
|
5
3
|
import { Routes, Route, Navigate } from 'react-router-dom';
|
|
6
|
-
|
|
7
|
-
import { LayoutBasic,
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
import { LayoutBasic, AbsoluteLayout } from '@/components/layout';
|
|
8
6
|
import PageLoading from '@/components/page/pageLoading';
|
|
7
|
+
import { AuthLogin } from '@/components/auth';
|
|
9
8
|
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import LeftMenu from '@/components/menu';
|
|
13
|
-
import TopMenu from '@/components/menu/topMenu';
|
|
14
|
-
|
|
9
|
+
import LeftMenu from '@/components/leftMenu';
|
|
10
|
+
import TopMenu from '@/components/topMenu';
|
|
15
11
|
import ProviderMenu from '@/provider/menu';
|
|
16
12
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
loader.then(req=>{
|
|
20
|
-
setTimeout(()=>{
|
|
21
|
-
resolve(req);
|
|
22
|
-
},5000)
|
|
23
|
-
})
|
|
24
|
-
})
|
|
25
|
-
}
|
|
13
|
+
import Login from '@/pages/login';
|
|
14
|
+
import Home from '@/pages/home';
|
|
26
15
|
|
|
16
|
+
const AuthUser = React.lazy(() => import('@/pages/auth/user'));
|
|
17
|
+
const AuthUserCreate = React.lazy(() => import('@/pages/auth/user/create'));
|
|
27
18
|
|
|
28
|
-
const Page1 = React.lazy(()=>import('@/pages/demo/page1'));
|
|
29
|
-
const Page1Detail = React.lazy(()=>import('@/pages/demo/detail'));
|
|
30
19
|
|
|
31
|
-
|
|
20
|
+
|
|
21
|
+
import Test from '@/pages/test';
|
|
32
22
|
|
|
33
23
|
|
|
34
24
|
|
|
35
25
|
|
|
36
26
|
export const RouteList = (
|
|
37
27
|
<Routes>
|
|
38
|
-
<Route path='/' element={
|
|
28
|
+
<Route path='/' element={
|
|
29
|
+
<Suspense fallback={<PageLoading />}>
|
|
30
|
+
<AbsoluteLayout />
|
|
31
|
+
</Suspense>}
|
|
32
|
+
>
|
|
39
33
|
<Route path='login' element={<Login />} />
|
|
40
|
-
<Route path='
|
|
34
|
+
<Route path='test' element={
|
|
35
|
+
<Test />
|
|
36
|
+
} />
|
|
41
37
|
|
|
42
38
|
<Route
|
|
43
39
|
path='/'
|
|
@@ -47,23 +43,28 @@ export const RouteList = (
|
|
|
47
43
|
</ProviderMenu.Provider>
|
|
48
44
|
}
|
|
49
45
|
>
|
|
50
|
-
<Route path='/' element={<Navigate to="/
|
|
51
|
-
<Route path='/
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
<Route path='/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<Route path='/
|
|
59
|
-
|
|
60
|
-
<Route path='/
|
|
61
|
-
|
|
62
|
-
<Route path='/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
<Route path='/
|
|
66
|
-
<Route path='/
|
|
46
|
+
<Route path='/' element={<Navigate to="/auth/user" />} />
|
|
47
|
+
<Route path='/auth' element={<Navigate to="/auth/user" />} />
|
|
48
|
+
|
|
49
|
+
{/* 控制室-用户 */}
|
|
50
|
+
<Route path='/auth/user' element={<AuthUser />} />
|
|
51
|
+
{/* 控制室-用户-新建用户 */}
|
|
52
|
+
<Route path='/auth/user/create' element={<AuthUserCreate />} />
|
|
53
|
+
{/* 控制室-角色 */}
|
|
54
|
+
<Route path='/auth/role' element={<Home />} />
|
|
55
|
+
{/* 控制室-操作记录 */}
|
|
56
|
+
<Route path='/auth/log' element={<Home />} />
|
|
57
|
+
{/* 控制室-登录日志 */}
|
|
58
|
+
<Route path='/auth/loginLog' element={<Home />} />
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
<Route path='/jet' element={<Home />} />
|
|
62
|
+
<Route path='/store' element={<Home />} />
|
|
63
|
+
<Route path='/parts' element={<Home />} />
|
|
64
|
+
<Route path='/dna' element={<Home />} />
|
|
65
|
+
<Route path='/auth/dep' element={<Home />} />
|
|
66
|
+
|
|
67
|
+
|
|
67
68
|
|
|
68
69
|
|
|
69
70
|
</Route>
|