Browse Source

路由与导航菜单绑定控制

zhuth 7 years ago
parent
commit
fb5357002c

+ 14 - 6
app/components/common/navigator.jsx

@@ -1,23 +1,27 @@
 import React from 'react'
 import { Affix, Menu, Icon } from 'antd'
 import { Link } from 'react-router-dom'
+import { connect } from 'dva'
+import '../../models/main'
 
 class Navigator extends React.Component {
     constructor(props) {
         super(props)
         this.state = {
-            current: 'mypage'
         }
     };
 
     render() {
+
+        const { main } = this.props;
+
         return <Menu
             className='navigator-menu'
-            // selectedKeys={[this.state.current]}
+            selectedKeys={[main.currentPage]}
             mode="horizontal"
         >     
-            <Menu.Item key="mypage">
-                <Link to='/'><Icon type="home" />主页</Link>
+            <Menu.Item key="home">
+                <Link to='/home'><Icon type="home" />主页</Link>
             </Menu.Item>
             <Menu.Item key="dashboard">
                 <Link to='/dashboard'><Icon type="desktop" />报告与看板</Link>
@@ -29,12 +33,16 @@ class Navigator extends React.Component {
                 <Link to='/datasource'><Icon type="database" />数据源</Link>
             </Menu.Item>
             <Menu.Item key="modeling">
-                <Icon type="tool" />建模分析
+                <Icon type="modeling" />建模分析
             </Menu.Item>
         </Menu>
     }
 }
 
-export default Navigator
+function mapStateToProps({ present: { main } }) {
+    return { main };
+}
+
+export default connect(mapStateToProps)(Navigator)
 
 

+ 2 - 2
app/index.js

@@ -1,6 +1,6 @@
 import dva from 'dva'
 import undoable, { distinctState, includeAction, excludeAction } from 'redux-undo'
-import main from './models/main'
+import mainModel from './models/main'
 import chartDesigner from './models/chartDesigner'
 import dataSource from './models/dataSource'
 import dataConnect from './models/dataConnect'
@@ -23,7 +23,7 @@ const app = dva({
 // app.use({});
 
 // 3. Model
-app.model(main); // 通用action
+app.model(mainModel); // 通用action
 app.model(chartDesigner); // 图表
 app.model(dataSource); // 数据源
 app.model(dataConnect); // 数据连接

+ 22 - 18
app/models/dataConnect.js

@@ -83,25 +83,29 @@ export default {
                     url: URLS.DATACONNECT_LIST,
                     body: {}
                 });
-                let data = res.data.data.map((r, i) => {
-                    return {
-                        key: i,
-                        code: r.id,
-                        name: r.name,
-                        dbName: r.dataName,
-                        dbType: r.databaseType,
-                        address: r.addrass,
-                        port: r.port,
-                        userName: r.userName,
-                        password: r.passWord,
-                        description: r.note
-                    }
-                });
-                console.log(data);
-                yield put({ type: 'list', data });
+                if(!res.err && res.data.code > 0) {
+                    let data = res.data.data.map((r, i) => {
+                        return {
+                            key: i,
+                            code: r.id,
+                            name: r.name,
+                            dbName: r.dataName,
+                            dbType: r.databaseType,
+                            address: r.addrass,
+                            port: r.port,
+                            userName: r.userName,
+                            password: r.passWord,
+                            description: r.note
+                        }
+                    });
+                    console.log(data);
+                    yield put({ type: 'list', data });
+                }else {
+                    message.error('读取数据连接配置列表错误');
+                }
             }catch(e) {
-                message.error(e);
-                //yield takeLatest({ type: 'loadList', data: [] });
+                message.error('读取数据连接配置列表错误');
+                console.log(e);
             }
         },
         *remoteAdd(action, { select, call, put, takeEvery, takeLatest }) {

+ 21 - 19
app/models/dataSource.js

@@ -107,27 +107,29 @@ export default {
                     url: URLS.DATASOURCE_LIST,
                     body: {}
                 });
-                let data = res.data.data.map((r, i) => {
-                    let dbConfig = JSON.parse(r.dbConfig);
-                    let tags = JSON.parse(r.dataTag);
-                    return {
-                        key: r.dataId,
-                        code: r.dataId,
-                        name: r.dataName,
-                        type: r.type || 'database',
-                        dbType: dbConfig.databaseType,
-                        creator: r.createBy,
-                        createTime: new Date(r.createDate),
-                        tags: tags,
-                        description: r.note
-                    }
-                });
-                console.log(data);
-                yield put({ type: 'list', data });
+                if(!res.err && res.data.code > 0) {
+                    let data = res.data.data.map((r, i) => {
+                        let dbConfig = JSON.parse(r.dbConfig);
+                        let tags = JSON.parse(r.dataTag);
+                        return {
+                            key: r.dataId,
+                            code: r.dataId,
+                            name: r.dataName,
+                            type: r.type || 'database',
+                            dbType: dbConfig.databaseType,
+                            creator: r.createBy,
+                            createTime: new Date(r.createDate),
+                            tags: tags,
+                            description: r.note
+                        }
+                    });
+                    yield put({ type: 'list', data });
+                }else {
+                    message.error('读取数据源列表错误');
+                }
             }catch(e) {
-                message.error('失败');
+                message.error('读取数据源列表错误');
                 console.log(e);
-                yield put({ type: 'list', data: [] });
             }
             
         },

+ 10 - 5
app/models/main.js

@@ -3,23 +3,28 @@ import { routerRedux } from 'dva/router'
 export default {
     namespace: 'main',
     state: {
-        path: '/'
+        currentPage: ''
     },
     reducers: {
-        setPath(state, action) {
-            return { state, path: action.path };
+        setPage(state, action) {
+            return { state, currentPage: action.page || 'home' };
         }
     },
     effects: {
         * redirect (action, { put }) {
             const path = action.path;
             yield put(routerRedux.push(path || '/'));
-            yield put({ type: 'setPath', path });
         },
     },
     subscriptions: {
         setup({ dispatch, history }) {
-            
+            return history.listen(({ pathname, query }) => {
+                console.log(pathname);
+
+                let page = pathname.match(/\/(\w*)/)[1];
+                dispatch({ type: 'setPage', page });
+
+            })
         }
     }
 };

+ 1 - 0
app/routes/mainLayout.js

@@ -20,6 +20,7 @@ const MainLayout = (history) => {
             <Content className='main-content'>
                 <Switch>
                     <Route exact path='/' component={Welcome}/>
+                    <Route exact path='/home' component={Welcome}/>
                     <Route exact sensitive path='/datasource' component={DataSource}/>
                     <Route sensitive path='/datasource/:type/:code/:tab' component={DataSourceDetail}/>
                     <Route exact sensitive path='/dashboard' component={Dashboard} />