diff --git a/app/client.js b/app/client.js
index 7333175..97dd5ec 100644
--- a/app/client.js
+++ b/app/client.js
@@ -2,16 +2,14 @@
import React from 'react'
import ReactDOM from 'react-dom'
import { Provider } from 'react-redux'
-import { hot } from 'react-hot-loader/root'
import '@config'
import Routes from '@configs/router.config'
import configure from '@middleware/configureStore'
-const HotRoutes = hot(Routes)
const store = configure({ })
ReactDOM.render(
-
+
,
document.getElementById('root'),
)
diff --git a/app/configs/ajax.js b/app/configs/ajax.js
index 3a2e8a0..9c99f3e 100644
--- a/app/configs/ajax.js
+++ b/app/configs/ajax.js
@@ -1,6 +1,6 @@
import axios from 'axios'
-import { hashHistory } from 'react-router'
+import history from '@middleware/history'
import { timeout, baseURL } from '@config'
import { message } from 'antd'
import { parseQueryString } from './common'
@@ -12,7 +12,7 @@ let flag = true
function logOut(text) {
if (flag) {
message.warning(text || '用户登录过期或从其他浏览器登录')
- hashHistory.replace('/login')
+ history.replace('/login')
flag = false
setTimeout(() => flag = true, 0)
}
diff --git a/app/configs/common.js b/app/configs/common.js
index 5044452..45a4d42 100644
--- a/app/configs/common.js
+++ b/app/configs/common.js
@@ -1,5 +1,5 @@
-import { hashHistory } from 'react-router'
+import history from '@middleware/history'
import { message } from 'antd'
import { loginByTicket, staff, login as loginApi, getBtns } from '@apis/common'
@@ -27,7 +27,7 @@ const _fetchLoginByTicket = async ticket => new Promise((resolve) => {
if (obj.ticket || obj.mode) {
message.info('登录过期或服务不可用')
} else {
- hashHistory.replace('/login')
+ history.replace('/login')
}
})
})
@@ -56,7 +56,7 @@ const _fetchNav = pathname => new Promise((resolve) => {
const { list } = response.data
if (list.length === 0) {
message.info('该账户没有任何菜单权限,请联系管理员')
- hashHistory.replace('/login')
+ history.replace('/login')
// this.setState({ loading: false })
return
}
@@ -64,7 +64,7 @@ const _fetchNav = pathname => new Promise((resolve) => {
// TODO:添加完菜单权限后,需要增加以下代码
// if (pathname !== '/' && !isHasCurrentMenu(list, pathname)) {
// if (process.env.NODE_ENV === 'production') {
- // hashHistory.replace('/')
+ // history.replace('/')
// }
// }
resolve()
@@ -72,7 +72,9 @@ const _fetchNav = pathname => new Promise((resolve) => {
})
/* 不管是否含有ticket参数都会在顶层组件中调用 */
-export const validateTickit = async function validateTickit({ query, pathname }, callback) {
+export const validateTickit = async function validateTickit(location, callback) {
+ const { search, pathname } = location
+ const query = new URLSearchParams(search)
const { ticket } = query
if (ticket) {
const loginInfo = await _fetchLoginByTicket(ticket)
@@ -152,17 +154,15 @@ export const fetchBtns = (component, cb) => {
}
// 进入路由的判断
-export const isLogin = (nextState, replaceState) => {
- if (nextState.location.query && nextState.location.query.ticket) { // 如果url自带ticket
+export const isLogin = ({search}) => {
+ const query = new URLSearchParams(search)
+ if (query.get('ticket')) { // 如果url自带ticket
sessionStorage.setItem('token', 'ticket')
}
- if (nextState.location.query && nextState.location.query.key) { // 如果url自带key
+ if (query.get('key')) { // 如果url自带key
sessionStorage.setItem('token', 'key')
}
- const token = sessionStorage.getItem('token')
- if (!token) { // 没有token,那就返回首页
- replaceState('/login')
- }
+ return !!sessionStorage.getItem('token');
}
diff --git a/app/configs/router.config.js b/app/configs/router.config.js
index 549b44c..ef1208a 100644
--- a/app/configs/router.config.js
+++ b/app/configs/router.config.js
@@ -1,5 +1,5 @@
import React from 'react'
-import { Router, Route, IndexRoute, hashHistory/* , Redirect */ } from 'react-router'
+import { HashRouter, Route, Switch, Redirect } from 'react-router-dom'
import { isLogin } from '@configs/common'
import { set } from '@config'
@@ -7,23 +7,61 @@ import * as base from '@pages/base' // 基础
import * as sysSet from '@pages/set' // 设置中心-系统设置
import * as menu from '@pages/menu' // 菜单
+// export default () => (
+//
+//
+//
+//
+// {/* */}
+// {/** *菜单 开始 */}
+//
+//
+// {/** *菜单 结束 */}
+// {/** *系统设置 开始 */}
+//
+//
+//
+// {/** *系统设置 结束 */}
+//
+//
+//
+//
+// )
+
+const PrivateRoute = ({ component: Component, render, ...rest }) => (
+ {
+ if (isLogin(props.location || {})) {
+ return render ? render(props) :
+ }
+ return
+ }
+ }
+ />)
+
export default () => (
-
-
-
-
- {/* */}
- {/** *菜单 开始 */}
-
-
- {/** *菜单 结束 */}
- {/** *系统设置 开始 */}
-
-
-
- {/** *系统设置 结束 */}
-
-
-
-
-)
+
+
+ {/* 登录页 */}
+
+ {/* 主应用 - 包含侧边栏的所有页面 */}
+ (
+
+
+ } />
+
+
+
+
+
+
+
+
+
+ )}
+ />
+
+
+);
diff --git a/app/middleware/history.js b/app/middleware/history.js
index 1e11eeb..8730cb2 100644
--- a/app/middleware/history.js
+++ b/app/middleware/history.js
@@ -1,6 +1,4 @@
-import { useRouterHistory } from 'react-router'
-import createHashHistory from 'history/lib/createHashHistory'
+import { createHashHistory } from 'history';
-// export default useRouterHistory(createHashHistory)()
-const history = useRouterHistory(createHashHistory)({})
-export default history
+const history = createHashHistory();
+export default history;
diff --git a/app/middleware/index.js b/app/middleware/index.js
index 6243eb6..5498aa9 100644
--- a/app/middleware/index.js
+++ b/app/middleware/index.js
@@ -1,5 +1,5 @@
-import { routerMiddleware } from 'react-router-redux'
+import { routerMiddleware } from 'connected-react-router'
import logger from './logger'
import history from './history'
// import router from './router'
diff --git a/app/middleware/router.js b/app/middleware/router.js
index 1d43e5c..0b72e1c 100644
--- a/app/middleware/router.js
+++ b/app/middleware/router.js
@@ -1,4 +1,4 @@
-import { browserHistory } from 'react-router'
-import { routerMiddleware } from 'react-router-redux'
+import { routerMiddleware } from 'connected-react-router'
+import history from './history'
-export default routerMiddleware(browserHistory)
+export default routerMiddleware(history)
diff --git a/app/pages/base/app.js b/app/pages/base/app.js
index 4f2bcc0..7198782 100644
--- a/app/pages/base/app.js
+++ b/app/pages/base/app.js
@@ -2,7 +2,7 @@
import React, { Component } from 'react'
// import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
-import { hashHistory } from 'react-router'
+import history from '@middleware/history'
import { message, LocaleProvider } from 'antd'
import { validateTickit/* , parseQueryString */ } from '@configs/common'
import { loginByKey } from '@apis/common'
@@ -57,17 +57,18 @@ export default class App extends Component {
menuStyle: true,
})
}
- const { query } = this.props.location
- if (query.ticket) { // 如果是url路径带ticket的话,那么在当前页面做登录的初始化
+
+ const query = new URLSearchParams(this.props.location.search)
+ if (query.get('ticket')) { // 如果是url路径带ticket的话,那么在当前页面做登录的初始化
validateTickit(this.props.location, (res) => {
this.setState({
idRenderChild: true,
})
})
- } else if (query.key) {
+ } else if (query.get('key')) {
// const params = parseQueryString(window.location.href)
loginByKey({ }, (res) => {
- sessionStorage.setItem('key', query.key)
+ sessionStorage.setItem('key', query.get('key'))
this.setState({
idRenderChild: true,
})
@@ -86,7 +87,7 @@ export default class App extends Component {
})
}
- if (query.mode === 'iframe' || query.key) {
+ if (query.get('mode') === 'iframe' || query.get('key')) {
this.setState({
isIframe: true,
})
@@ -169,14 +170,14 @@ export default class App extends Component {
}
})
if (hasIndex) {
- hashHistory.push(item.children[0].resKey)
+ history.push(item.children[0].resKey)
} else {
- hashHistory.push('mission$/my$')
+ history.push('mission$/my$')
}
} else if (item.children[0] && item.children[0] && item.children[0].children && item.children[0].children[0]) {
- hashHistory.push(item.children[0].children[0].resKey)
+ history.push(item.children[0].children[0].resKey)
} else {
- hashHistory.push(item.children[0].resKey)
+ history.push(item.children[0].resKey)
}
}
diff --git a/app/pages/base/app/header.js b/app/pages/base/app/header.js
index 3dbff91..8663aa1 100644
--- a/app/pages/base/app/header.js
+++ b/app/pages/base/app/header.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react'
import { connect } from 'react-redux'
-import { hashHistory } from 'react-router'
+import history from '@middleware/history'
import { Menu, Button, Modal, message, Icon, Row, Col } from 'antd'
import { brandName } from '@config'
import { logout } from '@apis/common'
@@ -47,7 +47,7 @@ export default class Header extends Component {
if (result.status === 1) {
sessionStorage.clear()
config.staff = {}
- hashHistory.push('/login')
+ history.push('/login')
} else {
message.warning(result.msg)
}
@@ -84,16 +84,16 @@ export default class Header extends Component {
logoClick = () => {
// const nav = JSON.parse(sessionStorage.getItem('gMenuList'))
// if (nav[0] && nav[0].children && nav[0].children[0].children && nav[0].children[0].children[0] && nav[0].children[0].children[0].resKey) {
- // hashHistory.push(nav[0].children[0].children[0].resKey)
+ // history.push(nav[0].children[0].children[0].resKey)
// sessionStorage.setItem('topMenuReskey', nav[0].resKey)
// }
// if (nav[0] && nav[0].children && nav[0].children[0].resKey) {
- // hashHistory.push(nav[0].children[0].resKey)
+ // history.push(nav[0].children[0].resKey)
// } else {
- // hashHistory.push('/')
+ // history.push('/')
// }
// console.log(nav)
- // hashHistory.push()
+ // history.push()
}
render() {
diff --git a/app/pages/base/app/leftNav.js b/app/pages/base/app/leftNav.js
index 9b4d6c4..3c3f5c1 100644
--- a/app/pages/base/app/leftNav.js
+++ b/app/pages/base/app/leftNav.js
@@ -1,7 +1,6 @@
import React, { Component } from 'react'
import { connect } from 'react-redux'
-import { hashHistory/* , Link */ } from 'react-router'
-// import { routerActions } from 'react-router-redux'
+import history from '@middleware/history'
import { Menu, Spin } from 'antd'
// import { updateTabList } from '@actions/tabList'
import { clearGformCache2 } from '@actions/common'
@@ -89,7 +88,7 @@ export default class LeftNav extends Component {
// 菜单点击事件
_handleClick = (e) => {
this.props.dispatch(clearGformCache2({}))
- hashHistory.push(`/${e.key}`)
+ history.push(`/${e.key}`)
}
onOpenChange = (openKeys) => {
diff --git a/app/pages/base/app/tabList.js b/app/pages/base/app/tabList.js
index 664270e..6347db8 100644
--- a/app/pages/base/app/tabList.js
+++ b/app/pages/base/app/tabList.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
-import { routerActions } from 'react-router-redux'
+import { push } from 'connected-react-router'
import { is } from 'immutable'
import { Tabs } from 'antd'
import { updateTabChecked, deleteTabFromList } from '@actions/tabList'
@@ -11,7 +11,7 @@ const { TabPane } = Tabs
@connect(
(state, props) => ({ tabList: state.tabListResult }),
dispatch => ({
- actions: bindActionCreators(routerActions, dispatch),
+ actions: bindActionCreators({ push }, dispatch),
dispatch: dispatch,
}),
)
diff --git a/app/pages/base/login.js b/app/pages/base/login.js
index 4b5f376..b33bbb5 100644
--- a/app/pages/base/login.js
+++ b/app/pages/base/login.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react'
import { connect } from 'react-redux'
-import { hashHistory/* , Link */ } from 'react-router'
+import history from '@middleware/history'
import { Spin, Form, Icon, Input, Button, Row, Col, message } from 'antd'
import { regExpConfig } from '@reg'
import { brandName } from '@config'
@@ -91,7 +91,7 @@ export default class Login extends Component {
staff({ usercode: query.username }, (resp) => {
sessionStorage.setItem('userinfo', JSON.stringify(resp.data))
- hashHistory.push('/')
+ history.push('/')
}, (r) => {
message.warning(r.msg)
this.setState({
diff --git a/app/pages/base/notfound.js b/app/pages/base/notfound.js
index fc031ec..ef915fb 100644
--- a/app/pages/base/notfound.js
+++ b/app/pages/base/notfound.js
@@ -1,5 +1,6 @@
import React, { Component } from 'react'
-import { Link, hashHistory } from 'react-router'
+import { Link } from 'react-router-dom'
+import history from '@middleware/history'
import { Progress, Button } from 'antd'
// 声明组件 并对外输出
@@ -26,7 +27,7 @@ export default class notfound extends Component {
跳转至首页
跳转至登陆页
-
+
)
diff --git a/app/redux/reducers/index.js b/app/redux/reducers/index.js
index 7fd3a56..c61e890 100644
--- a/app/redux/reducers/index.js
+++ b/app/redux/reducers/index.js
@@ -1,11 +1,12 @@
-import { routerReducer as routing } from 'react-router-redux'
+import { connectRouter } from 'connected-react-router'
import { combineReducers } from 'redux'
+import history from '@middleware/history'
import * as tabList from './tabList'
import * as common from './common'
const rootReducer = combineReducers({
- routing,
+ router: connectRouter(history),
config: (state = {}) => state,
...tabList,
...common,
diff --git a/package-lock.json b/package-lock.json
index 1b75ec2..03211bc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3477,28 +3477,6 @@
"@yarnpkg/lockfile": "^1.1.0"
}
},
- "@hot-loader/react-dom": {
- "version": "16.11.0",
- "resolved": "https://registry.npmjs.org/@hot-loader/react-dom/-/react-dom-16.11.0.tgz",
- "integrity": "sha512-cIOVB8YgT4EVCNiXK+gGuYl6adW/TKlW3N7GvgY5QgpL2NTWagF/oJxVscHSdR3O7NjJsoxdseB5spqwCHNIhA==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.17.0"
- },
- "dependencies": {
- "scheduler": {
- "version": "0.17.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz",
- "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- }
- }
- },
"@mrmlnc/readdir-enhanced": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
@@ -3579,6 +3557,12 @@
"@types/node": "*"
}
},
+ "@types/history": {
+ "version": "4.7.11",
+ "resolved": "https://mirrors.tencent.com/npm/@types/history/-/history-4.7.11.tgz",
+ "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==",
+ "dev": true
+ },
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -3610,6 +3594,27 @@
"csstype": "^2.2.0"
}
},
+ "@types/react-router": {
+ "version": "5.1.20",
+ "resolved": "https://mirrors.tencent.com/npm/@types/react-router/-/react-router-5.1.20.tgz",
+ "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==",
+ "dev": true,
+ "requires": {
+ "@types/history": "^4.7.11",
+ "@types/react": "*"
+ }
+ },
+ "@types/react-router-dom": {
+ "version": "5.3.3",
+ "resolved": "https://mirrors.tencent.com/npm/@types/react-router-dom/-/react-router-dom-5.3.3.tgz",
+ "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==",
+ "dev": true,
+ "requires": {
+ "@types/history": "^4.7.11",
+ "@types/react": "*",
+ "@types/react-router": "*"
+ }
+ },
"@types/react-slick": {
"version": "0.23.4",
"resolved": "https://registry.npm.taobao.org/@types/react-slick/download/@types/react-slick-0.23.4.tgz",
@@ -6844,6 +6849,17 @@
"integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=",
"dev": true
},
+ "connected-react-router": {
+ "version": "6.9.3",
+ "resolved": "https://mirrors.tencent.com/npm/connected-react-router/-/connected-react-router-6.9.3.tgz",
+ "integrity": "sha512-4ThxysOiv/R2Dc4Cke1eJwjKwH1Y51VDwlOrOfs1LjpdYOVvCNjNkZDayo7+sx42EeGJPQUNchWkjAIJdXGIOQ==",
+ "requires": {
+ "immutable": "^3.8.1 || ^4.0.0",
+ "lodash.isequalwith": "^4.4.0",
+ "prop-types": "^15.7.2",
+ "seamless-immutable": "^7.1.3"
+ }
+ },
"console-browserify": {
"version": "1.1.0",
"resolved": "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz",
@@ -11454,24 +11470,16 @@
"dev": true
},
"history": {
- "version": "3.3.0",
- "resolved": "http://registry.npm.taobao.org/history/download/history-3.3.0.tgz",
- "integrity": "sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw=",
+ "version": "4.10.1",
+ "resolved": "https://mirrors.tencent.com/npm/history/-/history-4.10.1.tgz",
+ "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
"requires": {
- "invariant": "^2.2.1",
+ "@babel/runtime": "^7.1.2",
"loose-envify": "^1.2.0",
- "query-string": "^4.2.2",
- "warning": "^3.0.0"
- },
- "dependencies": {
- "warning": {
- "version": "3.0.0",
- "resolved": "http://registry.npm.taobao.org/warning/download/warning-3.0.0.tgz",
- "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
- "requires": {
- "loose-envify": "^1.0.0"
- }
- }
+ "resolve-pathname": "^3.0.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0",
+ "value-equal": "^1.0.1"
}
},
"hmac-drbg": {
@@ -15252,6 +15260,11 @@
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
"dev": true
},
+ "lodash.isequalwith": {
+ "version": "4.4.0",
+ "resolved": "https://mirrors.tencent.com/npm/lodash.isequalwith/-/lodash.isequalwith-4.4.0.tgz",
+ "integrity": "sha512-dcZON0IalGBpRmJBmMkaoV7d3I80R2O+FrzsZyHdNSFrANq/cgDqKQNmAHE8UEj4+QYWwwhkQOVdLHiAopzlsQ=="
+ },
"lodash.isplainobject": {
"version": "4.0.6",
"resolved": "http://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz",
@@ -16923,7 +16936,6 @@
"version": "1.7.0",
"resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-1.7.0.tgz",
"integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
- "dev": true,
"requires": {
"isarray": "0.0.1"
},
@@ -16931,8 +16943,7 @@
"isarray": {
"version": "0.0.1",
"resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
}
}
},
@@ -17985,6 +17996,7 @@
"version": "4.3.4",
"resolved": "http://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz",
"integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
"requires": {
"object-assign": "^4.1.0",
"strict-uri-encode": "^1.0.0"
@@ -18834,14 +18846,25 @@
}
},
"react-dom": {
- "version": "16.5.2",
- "resolved": "http://registry.npm.taobao.org/react-dom/download/react-dom-16.5.2.tgz",
- "integrity": "sha1-tp7keqILq1MnsrnXwf4qMPLPqdc=",
+ "version": "16.14.0",
+ "resolved": "https://mirrors.tencent.com/npm/react-dom/-/react-dom-16.14.0.tgz",
+ "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
"prop-types": "^15.6.2",
- "schedule": "^0.5.0"
+ "scheduler": "^0.19.1"
+ },
+ "dependencies": {
+ "scheduler": {
+ "version": "0.19.1",
+ "resolved": "https://mirrors.tencent.com/npm/scheduler/-/scheduler-0.19.1.tgz",
+ "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ }
}
},
"react-hot-loader": {
@@ -18896,51 +18919,84 @@
"integrity": "sha1-TxonOv38jzSIqMUWv9p4+HI1I2I="
},
"react-redux": {
- "version": "5.0.7",
- "resolved": "http://registry.npm.taobao.org/react-redux/download/react-redux-5.0.7.tgz",
- "integrity": "sha1-DcEHbZr7RnD5k/+u9EuPjBFVpMg=",
+ "version": "7.1.3",
+ "resolved": "https://mirrors.tencent.com/npm/react-redux/-/react-redux-7.1.3.tgz",
+ "integrity": "sha512-uI1wca+ECG9RoVkWQFF4jDMqmaw0/qnvaSvOoL/GA4dNxf6LoV8sUAcNDvE5NWKs4hFpn0t6wswNQnY3f7HT3w==",
"requires": {
- "hoist-non-react-statics": "^2.5.0",
- "invariant": "^2.0.0",
- "lodash": "^4.17.5",
- "lodash-es": "^4.17.5",
- "loose-envify": "^1.1.0",
- "prop-types": "^15.6.0"
+ "@babel/runtime": "^7.5.5",
+ "hoist-non-react-statics": "^3.3.0",
+ "invariant": "^2.2.4",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.9.0"
+ },
+ "dependencies": {
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://mirrors.tencent.com/npm/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://mirrors.tencent.com/npm/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ }
}
},
"react-router": {
- "version": "3.2.0",
- "resolved": "http://registry.npm.taobao.org/react-router/download/react-router-3.2.0.tgz",
- "integrity": "sha1-YrYnnVibcLNOJlET5MCpJhoC7TY=",
+ "version": "5.3.4",
+ "resolved": "https://mirrors.tencent.com/npm/react-router/-/react-router-5.3.4.tgz",
+ "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==",
"requires": {
- "create-react-class": "^15.5.1",
- "history": "^3.0.0",
- "hoist-non-react-statics": "^1.2.0",
- "invariant": "^2.2.1",
- "loose-envify": "^1.2.0",
- "prop-types": "^15.5.6",
- "warning": "^3.0.0"
+ "@babel/runtime": "^7.12.13",
+ "history": "^4.9.0",
+ "hoist-non-react-statics": "^3.1.0",
+ "loose-envify": "^1.3.1",
+ "path-to-regexp": "^1.7.0",
+ "prop-types": "^15.6.2",
+ "react-is": "^16.6.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0"
},
"dependencies": {
- "hoist-non-react-statics": {
- "version": "1.2.0",
- "resolved": "http://registry.npm.taobao.org/hoist-non-react-statics/download/hoist-non-react-statics-1.2.0.tgz",
- "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs="
+ "@babel/runtime": {
+ "version": "7.28.2",
+ "resolved": "https://mirrors.tencent.com/npm/@babel/runtime/-/runtime-7.28.2.tgz",
+ "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA=="
},
- "warning": {
- "version": "3.0.0",
- "resolved": "http://registry.npm.taobao.org/warning/download/warning-3.0.0.tgz",
- "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://mirrors.tencent.com/npm/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"requires": {
- "loose-envify": "^1.0.0"
+ "react-is": "^16.7.0"
}
}
}
},
- "react-router-redux": {
- "version": "4.0.8",
- "resolved": "http://registry.npm.taobao.org/react-router-redux/download/react-router-redux-4.0.8.tgz",
- "integrity": "sha1-InQDWWtRUeGCN32rg1tdRfD4BU4="
+ "react-router-dom": {
+ "version": "5.3.4",
+ "resolved": "https://mirrors.tencent.com/npm/react-router-dom/-/react-router-dom-5.3.4.tgz",
+ "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==",
+ "requires": {
+ "@babel/runtime": "^7.12.13",
+ "history": "^4.9.0",
+ "loose-envify": "^1.3.1",
+ "prop-types": "^15.6.2",
+ "react-router": "5.3.4",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0"
+ },
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.28.2",
+ "resolved": "https://mirrors.tencent.com/npm/@babel/runtime/-/runtime-7.28.2.tgz",
+ "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA=="
+ }
+ }
},
"react-slick": {
"version": "0.25.2",
@@ -19354,6 +19410,11 @@
"integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
"dev": true
},
+ "resolve-pathname": {
+ "version": "3.0.0",
+ "resolved": "https://mirrors.tencent.com/npm/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
+ "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
+ },
"resolve-url": {
"version": "0.2.1",
"resolved": "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz",
@@ -19560,14 +19621,6 @@
"xmlchars": "^1.3.1"
}
},
- "schedule": {
- "version": "0.5.0",
- "resolved": "http://registry.npm.taobao.org/schedule/download/schedule-0.5.0.tgz",
- "integrity": "sha1-wSj/+gtAJIiwi1WudLud9VzCnMg=",
- "requires": {
- "object-assign": "^4.1.1"
- }
- },
"scheduler": {
"version": "0.13.6",
"resolved": "http://registry.npm.taobao.org/scheduler/download/scheduler-0.13.6.tgz",
@@ -19586,6 +19639,12 @@
"ajv": "^5.0.0"
}
},
+ "seamless-immutable": {
+ "version": "7.1.4",
+ "resolved": "https://mirrors.tencent.com/npm/seamless-immutable/-/seamless-immutable-7.1.4.tgz",
+ "integrity": "sha512-XiUO1QP4ki4E2PHegiGAlu6r82o5A+6tRh7IkGGTVg/h+UoeX4nFBeCGPOhb4CYjvkqsfm/TUtvOMYC1xmV30A==",
+ "optional": true
+ },
"select": {
"version": "1.1.2",
"resolved": "http://registry.npm.taobao.org/select/download/select-1.1.2.tgz",
@@ -20417,7 +20476,8 @@
"strict-uri-encode": {
"version": "1.1.0",
"resolved": "http://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true
},
"string-argv": {
"version": "0.0.2",
@@ -21345,6 +21405,16 @@
"resolved": "http://registry.npm.taobao.org/tiny-emitter/download/tiny-emitter-2.0.2.tgz",
"integrity": "sha1-gtJ0aKylrejl/R5tIrV91D69+3w="
},
+ "tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://mirrors.tencent.com/npm/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
+ },
+ "tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://mirrors.tencent.com/npm/tiny-warning/-/tiny-warning-1.0.3.tgz",
+ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+ },
"tinycolor2": {
"version": "1.4.1",
"resolved": "http://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.1.tgz",
@@ -22123,6 +22193,11 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "value-equal": {
+ "version": "1.0.1",
+ "resolved": "https://mirrors.tencent.com/npm/value-equal/-/value-equal-1.0.1.tgz",
+ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
+ },
"vary": {
"version": "1.1.2",
"resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
diff --git a/package.json b/package.json
index 833a4ed..66e1f31 100644
--- a/package.json
+++ b/package.json
@@ -99,6 +99,7 @@
"@babel/plugin-transform-runtime": "^7.6.2",
"@babel/preset-env": "^7.7.1",
"@babel/preset-react": "^7.7.0",
+ "@types/react-router-dom": "^5.3.3",
"add-asset-html-webpack-plugin": "^3.1.3",
"autoprefixer": "^9.7.2",
"babel-eslint": "~8.2.1",
@@ -153,11 +154,11 @@
"@babel/polyfill": "^7.7.0",
"@babel/runtime": "^7.7.2",
"@babel/runtime-corejs2": "^7.7.2",
- "@hot-loader/react-dom": "^16.11.0",
"antd": "^3.25.2",
"axios": "^0.19.0",
"benz-amr-recorder": "^1.0.9",
"clipboard": "^2.0.4",
+ "connected-react-router": "^6.9.3",
"core-js": "^2.6.10",
"crypto-js": "^3.1.9-1",
"cypress": "^13.6.2",
@@ -175,11 +176,11 @@
"rc-tween-one": "~1.7.3",
"react": "^16.12.0",
"react-copy-to-clipboard": "~5.0.1",
- "react-dom": "^16.5.2",
+ "react-dom": "^16.12.0",
"react-hot-loader": "^4.12.18",
- "react-redux": "~5.0.6",
- "react-router": "3.2.0",
- "react-router-redux": "~4.0.5",
+ "react-redux": "^7.1.3",
+ "react-router": "^5.3.4",
+ "react-router-dom": "^5.3.4",
"redux": "~3.7.2",
"redux-actions": "~2.2.1",
"redux-mock-store": "^1.5.3",
diff --git a/readme.md b/readme.md
index a8b67b9..e803faf 100644
--- a/readme.md
+++ b/readme.md
@@ -7,7 +7,7 @@
## 项目技术栈
-node10.15.3 + react@16.12.0 + redux@3.7.2 + react-router@3.2.0 + webpack@4.41.2 + axios@0.19.0 + less@2.7.1 + antd@3.25.2
+node10.15.3 + react@16.12.0 + redux@3.7.2 + react-router@5.3.4 + webpack@4.41.2 + axios@0.19.0 + less@2.7.1 + antd@3.25.2
## 交流
QQ群:159697743
diff --git a/scripts/webpack.base.config.js b/scripts/webpack.base.config.js
index 4c1ca5c..72bd953 100644
--- a/scripts/webpack.base.config.js
+++ b/scripts/webpack.base.config.js
@@ -41,7 +41,6 @@ const webpackConfigBase = {
'@pages': path.join(__dirname, '../app/pages'),
'@styles': path.join(__dirname, '../app/styles'),
'@tableList': path.join(__dirname, '../app/components/tableList/tableList.js'),
- 'react-dom': devMode ? '@hot-loader/react-dom' : 'react-dom', // react-hot-loader需要
},
},
optimization: {
diff --git a/scripts/webpack.dll.config.js b/scripts/webpack.dll.config.js
index f9ae065..5195d74 100644
--- a/scripts/webpack.dll.config.js
+++ b/scripts/webpack.dll.config.js
@@ -17,7 +17,7 @@ module.exports = {
'redux',
'redux-thunk',
'react-redux',
- 'react-router-redux',
+ // 'react-router-redux',
],
},
devtool: 'source-mapcheap-module-eval-souce-map',