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',