陈帅 7 лет назад
Родитель
Сommit
77d714f2f0

+ 1 - 0
src/components/Exception/index.d.ts

@@ -9,6 +9,7 @@ export interface IExceptionProps {
   style?: React.CSSProperties;
   className?: string;
   backText?: React.ReactNode;
+  redirect?: string;
 }
 
 export default class Exception extends React.Component<IExceptionProps, any> {}

+ 2 - 1
src/components/Exception/index.en-US.md

@@ -16,4 +16,5 @@ title | title | ReactNode | -
 desc | supplementary description | ReactNode | -
 img | the url of background image | string | -
 actions | suggested operations, a default 'Home' link will show if not set | ReactNode | -
-linkElement | to specify the element of link | string\|ReactElement | 'a'
+linkElement | to specify the element of link | string\|ReactElement | 'a'
+redirect | redirect path | string | '/'

+ 4 - 2
src/components/Exception/index.js

@@ -7,6 +7,7 @@ import styles from './index.less';
 class Exception extends React.PureComponent {
   static defaultProps = {
     backText: 'back to home',
+    redirect: '/',
   };
 
   constructor(props) {
@@ -24,6 +25,7 @@ class Exception extends React.PureComponent {
       desc,
       img,
       actions,
+      redirect,
       ...rest
     } = this.props;
     const pageType = type in config ? type : '404';
@@ -44,8 +46,8 @@ class Exception extends React.PureComponent {
               createElement(
                 linkElement,
                 {
-                  to: '/',
-                  href: '/',
+                  to: redirect,
+                  href: redirect,
                 },
                 <Button type="primary">{backText}</Button>
               )}

+ 1 - 0
src/components/Exception/index.zh-CN.md

@@ -18,3 +18,4 @@ order: 5
 | img | 背景图片地址 | string| -|
 | actions | 建议操作,配置此属性时默认的『返回首页』按钮不生效| ReactNode| -|
 | linkElement | 定义链接的元素 | string\|ReactElement | 'a' |
+| redirect | 返回按钮的跳转地址 | string | '/'

+ 3 - 2
src/pages/Authorized.js

@@ -15,12 +15,13 @@ export default ({ children }) => {
       type="403"
       desc={formatMessage({ id: 'app.exception.description.403' })}
       linkElement={Link}
-      backText={formatMessage({ id: 'app.exception.back' })}
+      redirect="/user/login"
+      backText="back to login"
     />
   );
   // if Authority === ['guest'] redirect to /user/login
   // You can implement the logic here.
-  if (Authority.join('') === 'guest') {
+  if (Authority === 'guest' || Authority.join('') === 'guest') {
     noMatch = <Redirect to="/user/login" />;
   }
   return (

+ 11 - 3
src/utils/authority.js

@@ -1,16 +1,24 @@
+import { isJsonString } from '@/utils/utils';
+
 // use localStorage to store the authority info, which might be sent from server in actual project.
 export function getAuthority() {
   // return localStorage.getItem('antd-pro-authority') || ['admin', 'user'];
   const authorityString = localStorage.getItem('antd-pro-authority');
   let authority;
-  try {
+  if (isJsonString(authorityString)) {
     authority = JSON.parse(authorityString);
-  } catch (e) {
+  } else {
     authority = [authorityString];
   }
   return authority || ['admin'];
 }
 
 export function setAuthority(authority) {
-  return localStorage.setItem('antd-pro-authority', JSON.stringify(authority));
+  let authorityString;
+  if (isJsonString(authority)) {
+    authorityString = JSON.stringify(authority);
+  } else {
+    authorityString = [authority];
+  }
+  return localStorage.setItem('antd-pro-authority', authorityString);
 }

+ 11 - 0
src/utils/utils.js

@@ -181,3 +181,14 @@ export function formatWan(val) {
 export function isAntdPro() {
   return window.location.hostname === 'preview.pro.ant.design';
 }
+
+export function isJsonString(str) {
+  try {
+    if (typeof JSON.parse(str) === 'object') {
+      return true;
+    }
+  } catch (e) {
+    return false;
+  }
+  return false;
+}