diff --git a/src/layouts/UserLayout.js b/src/layouts/UserLayout.js index 93ca4dc57ce07d84d6ca80c1df5417685e7be556..bcc45a9a885a5c46bb0ea87b45b4a7a09ffd04a4 100644 --- a/src/layouts/UserLayout.js +++ b/src/layouts/UserLayout.js @@ -5,7 +5,7 @@ import { Icon } from 'antd'; import GlobalFooter from '../components/GlobalFooter'; import styles from './UserLayout.less'; import logo from '../assets/logo.svg'; -import { getRoutes, getPageQuery } from '../utils/utils'; +import { getRoutes, getPageQuery, getQueryPath } from '../utils/utils'; const links = [ { @@ -32,13 +32,11 @@ const copyright = ( ); function getLoginPathWithRedirectPath() { - const routePath = '/user/login'; const params = getPageQuery(); const { redirect } = params; - if (redirect) { - return `${routePath}?redirect=${encodeURIComponent(redirect)}`; - } - return routePath; + return getQueryPath('/user/login', { + redirect, + }); } class UserLayout extends React.PureComponent { diff --git a/src/models/login.js b/src/models/login.js index 14bdd76cd256816de0fad8208b4ad0f4d04ac215..9c68dddf69f0d83ca5764456f43e5a5504b413b9 100644 --- a/src/models/login.js +++ b/src/models/login.js @@ -2,7 +2,7 @@ import { routerRedux } from 'dva/router'; import { fakeAccountLogin } from '../services/api'; import { setAuthority } from '../utils/authority'; import { reloadAuthorized } from '../utils/Authorized'; -import { getPageQuery } from '../utils/utils'; +import { getPageQuery, getQueryPath } from '../utils/utils'; export default { namespace: 'login', @@ -49,7 +49,11 @@ export default { }); reloadAuthorized(); yield put( - routerRedux.push(`/user/login?redirect=${encodeURIComponent(window.location.href)}`) + routerRedux.push( + getQueryPath('/user/login', { + redirect: window.location.href, + }) + ) ); }, }, diff --git a/src/router.js b/src/router.js index 144c8267811f65b7e205b460b6211f810dfa5adb..15e2634ad76f8d090f55ff8fda34021d8007866b 100644 --- a/src/router.js +++ b/src/router.js @@ -5,6 +5,7 @@ import zhCN from 'antd/lib/locale-provider/zh_CN'; import dynamic from 'dva/dynamic'; import { getRouterData } from './common/router'; import Authorized from './utils/Authorized'; +import { getQueryPath } from './utils/utils'; import styles from './index.less'; const { ConnectedRouter } = routerRedux; @@ -26,7 +27,9 @@ function RouterConfig({ history, app }) { path="/" render={props => } authority={['admin', 'user']} - redirectPath={`/user/login?redirect=${encodeURIComponent(window.location.href)}`} + redirectPath={getQueryPath('/user/login', { + redirect: window.location.href, + })} /> diff --git a/src/utils/utils.js b/src/utils/utils.js index ab4acb179e3f2497786c9200ac829f86017ae1a8..84608aa2a984e15a0ca6449e9c61f0f974afb2af 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -1,5 +1,5 @@ import moment from 'moment'; -import { parse } from 'qs'; +import { parse, stringify } from 'qs'; export function fixedZero(val) { return val * 1 < 10 ? `0${val}` : val; @@ -166,6 +166,14 @@ export function getPageQuery() { return parse(window.location.href.split('?')[1]); } +export function getQueryPath(path = '', query = {}) { + const search = stringify(query); + if (search.length) { + return `${path}?${search}`; + } + return path; +} + /* eslint no-useless-escape:0 */ const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;