zhuth 7 lat temu
rodzic
commit
2b6f5b7e83
2 zmienionych plików z 58 dodań i 7 usunięć
  1. 29 3
      src/components/common/login.jsx
  2. 29 4
      src/routes/router.js

+ 29 - 3
src/components/common/login.jsx

@@ -1,16 +1,28 @@
 import React from 'react'
 import Login from 'ant-design-pro/lib/Login'
 import { Alert, Checkbox } from 'antd'
-import { Link } from 'dva/router';
+import { Link, Redirect } from 'dva/router';
 import './login.less'
 
 const { Tab, UserName, Password, Mobile, Captcha, Submit } = Login;
 
+function authenticate(cb) {
+    window.localStorage.setItem("isAuthenticated", "true");
+    setTimeout(cb, 100); // fake async
+}
+
+function signout(cb) {
+    window.localStorage.setItem("isAuthenticated", "false");
+    setTimeout(cb, 100); // fake async
+}
+
 class LoginDemo extends React.Component {
     state = {
         notice: '',
         autoLogin: true,
-    }
+        redirectToReferrer: false
+    };
+
     onSubmit = (err, values) => {
         console.log('value collected ->', { ...values, autoLogin: this.state.autoLogin });
         this.setState({
@@ -30,7 +42,21 @@ class LoginDemo extends React.Component {
             autoLogin: e.target.checked,
         });
     }
+
+    login = () => {
+        authenticate(() => {
+            this.setState({ redirectToReferrer: true });
+        });
+    };
+
     render() {
+        const { from } = this.props.location.state || { from: { pathname: "/" } };
+        const { redirectToReferrer } = this.state;
+
+        if (redirectToReferrer) {
+            return <Redirect to={from} />;
+        }
+
         return (
             <div className='container'>
                 <div className='content'>
@@ -64,4 +90,4 @@ class LoginDemo extends React.Component {
     }
 }
 
-export default LoginDemo;
+export default LoginDemo;

+ 29 - 4
src/routes/router.js

@@ -1,6 +1,6 @@
 import React from 'react'
 import { LocaleProvider } from 'antd'
-import { Router, Route, Switch } from 'dva/router'
+import { Router, Route, Switch, Redirect } from 'dva/router'
 import Login from '../components/common/login'
 import Register from '../components/common/register'
 import MainLayout from './mainLayout'
@@ -8,6 +8,31 @@ import ChartDesigner from '../components/chartDesigner/layout'
 import DashboardDesigner from '../components/dashboardDesigner/layout'
 // 由于 antd 组件的默认文案是英文,所以需要修改为中文
 import zhCN from 'antd/lib/locale-provider/zh_CN'
+import Demo from '../demo';
+import Login from '../components/common/login';
+
+window.localStorage.setItem("isAuthenticated", "false");
+
+
+
+
+const PrivateRoute = ({ component: Component, ...rest }) => (
+    <Route
+        {...rest}
+        render={props =>
+            (window.localStorage.getItem("isAuthenticated") === "true"? true: false)  ? (
+                <Component {...props} />
+            ) : (
+                    <Redirect
+                        to={{
+                            pathname: "/login",
+                            state: { from: props.location }
+                        }}
+                    />
+                )
+        }
+    />
+);
 
 function RouterConfig({ history }) {
   return (
@@ -16,9 +41,9 @@ function RouterConfig({ history }) {
         <Switch>
           <Route sensitive path='/login' component={Login}/>
           <Route sensitive path='/register' component={Register}/>
-          <Route sensitive path='/chart/:code' component={ChartDesigner}/>
-          <Route sensitive path='/dashboard/:id/' component={DashboardDesigner}/>
-          <Route path='/' component={MainLayout}/>
+          <PrivateRoute sensitive path='/chart/:code' component={ChartDesigner}/>
+          <PrivateRoute sensitive path='/dashboard/:id/' component={DashboardDesigner}/>
+          <PrivateRoute path='/' component={MainLayout}/>
         </Switch>
       </Router>
     </LocaleProvider>