router-view.js
3.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import React, { useState, useEffect } from 'react'
import { Switch, Route, useHistory, Redirect } from 'react-router-dom'
import { Guards } from './guards'
import connect from '../store/modules/route/connect'
import { getAllRouter } from '../libs/utilts'
import { getToken } from 'xbd-cookie'
import Layout from '@/components/Layout'
import http from '@/libs/fetch'
import { getMenu } from '@/api/user'
import { Modal, Spin } from 'antd'
import Ifram from '../components/iframe'
import error401 from "@/view/error/401"
import fullScreenRoute from './modules/fullScreenRoute'
/** 路由视图 */
const RouterView = ({
basisRoute = [],
serviceRoute = [],
userRoute = [],
userSatatus,
SYSTEM_LOGIN,
openRoute = [],
SYSTEM_SAVE_OPEN_ROUTE,
baseConfig
}) => {
const history = useHistory()
const [loading, setLoading] = useState(true)
useEffect(() => {
// 二级路由转一级路由
const allRoute = getAllRouter(userRoute)
const newRoutes = allRoute.map(e => {
const index = serviceRoute.findIndex(service => e.url === service.url || e.url === service.alias)
if (index !== -1)
return { ...e, ...serviceRoute[index], component: serviceRoute[index].component }
else
return { ...e, ...serviceRoute[index], component: () => (<Ifram url={e.url} />) }
})
const parentRoute = serviceRoute.map(e => {
const index = newRoutes.findIndex(service => e?.parentName?.includes(service.url))
if (index !== -1)
return e
else
return null
}).filter(e => e)
SYSTEM_SAVE_OPEN_ROUTE([...newRoutes, ...parentRoute])
}, [userRoute, serviceRoute, SYSTEM_SAVE_OPEN_ROUTE])
// 校验权限
useEffect(() => {
const token = getToken()
const isFullScreenRoute = fullScreenRoute.find(e => e.url === history.location.pathname)
setLoading(true)
if (baseConfig.operationChannel === undefined) return
if (userSatatus)
setLoading(false)
else if (token) {
http.setHeader('Sessionid', token)
getMenu()
.then(res => {
SYSTEM_LOGIN(res)
setLoading(false)
if (isFullScreenRoute) history.replace(res.menu.length ? res.menu[0].childMenus[0].url : '/')
})
.catch(err => {
setLoading(false)
Modal.error({ title: '错误', content: err, onOk: () => history.replace('/login') })
})
}
else if (!isFullScreenRoute) {
setLoading(false)
history.replace('/login')
} else
setLoading(false)
}, [serviceRoute, openRoute, baseConfig, userSatatus, SYSTEM_LOGIN, history])
if (loading && !userSatatus && openRoute.length === 0) {
return (
<div className="loading-page">
<Spin tip="启动应用中..." size="large" />
</div>
)
}
else if (userSatatus) {
return (
<Layout>
<Switch>
{basisRoute.map(e => e && <Route path={e.url} exact={e.exact} component={Guards(e.component)} key={e.url} />)}
{openRoute.map(e => e && <Route path={e.url} exact={e.exact} component={Guards(e.component)} key={e.url} />)}
<Route component={Guards(error401)} />
</Switch>
</Layout>
)
}
else if (!userSatatus) {
return (
<Switch>
{fullScreenRoute.map(e => <Route path={e.url} exact={e.exact} component={Guards(e.component)} key={e.url} />)}
<Redirect path="/" to="/login" />
</Switch>
)
}
else return null
}
export default connect(RouterView)