diff --git a/client/ReduxContainer.js b/client/ReduxContainer.js
index 727ef065..89aab51d 100644
--- a/client/ReduxContainer.js
+++ b/client/ReduxContainer.js
@@ -1,6 +1,7 @@
 import LoginRedux from './reducer/Login/Login_redux.js'
 import login from './reducer/Login/login.js'
 import group from './reducer/group/group.js'
+import project from './reducer/group/project.js'
 import Interface from './reducer/Interface/InterfaceReducer.js'
 import news from './reducer/news/news.js'
 import user from './reducer/user/user.js'
@@ -10,6 +11,7 @@ export default {
   login,
   LoginRedux,
   Interface,
-  news,
-  user
+  user,
+  project,
+  news
 }
diff --git a/client/actions/group.js b/client/actions/group.js
index 22f33f32..53d8e723 100644
--- a/client/actions/group.js
+++ b/client/actions/group.js
@@ -17,18 +17,3 @@ export function setCurrGroup(group) {
     payload: group
   }
 }
-
-export function addGroup(groupName) {
-  return function(dispatch, getState) {
-    const group = getState().group;
-    const groupList = group.groupList || [];
-    const newGroupList = groupList.concat([{ group_name: groupName + groupList.length }]);
-    dispatch({
-      type: FETCH_GROUP_LIST,
-      payload: { data: {
-        data: newGroupList,
-        errcode: 0
-      }}
-    });
-  }
-}
diff --git a/client/actions/login.js b/client/actions/login.js
index be866b50..b708e38d 100644
--- a/client/actions/login.js
+++ b/client/actions/login.js
@@ -8,14 +8,18 @@ const cookies = new Cookies();
 
 const loginActions = (data) => {
   return (dispatch) => {
-    axios.get('/user/login', data).then((res) => {
-      cookies.set(data.email, data.password);
-      dispatch({
-        type: LOGIN,
-        payload: {
-          data: res
-        }
-      });
+    axios.post('/user/login', data).then((res) => {
+      if (res.data.errcode === 0) {
+        cookies.set(data.email, data.password);
+        dispatch({
+          type: LOGIN,
+          payload: {
+            data: res
+          }
+        });
+      } else {
+        console.log('登录失败,errcode不为0');
+      }
     }).catch((err) => {
       console.log(err);
     });
@@ -30,7 +34,7 @@ const regActions = (data) => {
     username: data.userName
   }
   return () => {
-    axios.get('/user/login', param).then((res) => {
+    axios.post('/user/login', param).then((res) => {
       console.log(res);
     }).catch((err) => {
       console.log(err);
diff --git a/client/actions/news.js b/client/actions/news.js
index 31b34382..96ec37ab 100644
--- a/client/actions/news.js
+++ b/client/actions/news.js
@@ -1,5 +1,6 @@
 import {
-  FETCH_NEWS_DATA
+  FETCH_NEWS_DATA,
+  FETCH_MORE_NEWS
 } from '../constants/action-types.js';
 
 export function fetchNewsData () {
@@ -64,3 +65,27 @@ export function fetchNotVieweNews () {
     payload: data
   }
 }
+
+export function fetchMoreNews () {
+  return (dispatch)=>{
+    const data = [{
+      name: 'John Brown2212',
+      date: '2015-11-11 13:00:15',
+      desc: '创建服务现场'
+    }, {
+      name: 'John Brown1132',
+      date: '2015-11-11 13:00:15',
+      desc: '技术测试异常'
+    }, {
+      name: 'John Brown23212',
+      date: '2015-11-11 13:00:15',
+      desc: '网络异常正在修复'
+    }]
+
+    dispatch({
+      type: FETCH_MORE_NEWS,
+      payload: data
+    })
+  }
+  
+}
diff --git a/client/actions/project.js b/client/actions/project.js
index 4bbd8e0e..738dcc69 100644
--- a/client/actions/project.js
+++ b/client/actions/project.js
@@ -15,7 +15,7 @@ const addProject = (data) => {
   return {
     type: PROJECT_ADD,
     // payload 可以返回 Promise,异步请求使用 axios 即可
-    payload: axios.get('/project/add', param)
+    payload: axios.post('/project/add', param)
   }
 }
 
diff --git a/client/components/Header/Header.js b/client/components/Header/Header.js
index 65115741..969d9268 100644
--- a/client/components/Header/Header.js
+++ b/client/components/Header/Header.js
@@ -3,13 +3,14 @@ import React, { Component } from 'react'
 import PropTypes from 'prop-types'
 import { connect } from 'react-redux'
 import { Link } from 'react-router-dom'
-import { Icon } from 'antd'
+import { Icon, Layout, Menu} from 'antd'
 import loginTypeAction from '../../actions/login';
 
+const { Header } = Layout;
 const ToolUser = (props)=> (
   <ul>
+    <li><Icon type="question-circle-o" />帮助</li>
     <li><Icon type="user" />{ props.user }</li>
-    <li>消息{ props.msg.length }</li>
     <li>退出</li>
   </ul>
 );
@@ -29,7 +30,7 @@ ToolGuest.propTypes={
   onReg:PropTypes.func
 }
 
-class Header extends Component {
+class HeaderCom extends Component {
   constructor(props) {
     super(props);
   }
@@ -45,31 +46,41 @@ class Header extends Component {
     const { login, user, msg } = this.props;
     return (
       <acticle className="header-box">
-        <div className="content">
-          <h1>
-            <Link to={`/`}>YAPI</Link>
-          </h1>
-          <ul className="nav-toolbar">
-            <li>
-              <Link to={`/ProjectGroups`}>分组</Link>
-            </li>
-            <li>
-              <a>我的项目</a>
-            </li>
-            <li>
-              <a>文档</a>
-            </li>
-          </ul>
-          <ul className="user-toolbar">
-            {login?<ToolUser user={user} msg={msg}/>:''}
-          </ul>
-        </div>
+        <Layout className="'layout">
+          <Header>
+            <div className="content">
+              <div className="logo">
+                YAPI
+              </div>
+              <Menu
+                mode="horizontal"
+                className="nav-toolbar"
+                theme="dark"
+                style={{ lineHeight : '.64rem'}}
+                defaultSelectedKeys={['1']}
+              >
+                <Menu.Item key="1">
+                  <Link to={`/`}>首页</Link>
+                </Menu.Item>
+                <Menu.Item key="2">
+                  <Link to={`/ProjectGroups`}>分组</Link>
+                </Menu.Item>
+                <Menu.Item key="3">
+                  文档
+                </Menu.Item>
+              </Menu>
+              <div className="user-toolbar">
+                {login?<ToolUser user={user} msg={msg}/>:''}
+              </div>
+            </div>
+          </Header>
+        </Layout>
       </acticle>
     )
   }
 }
 
-Header.propTypes={
+HeaderCom.propTypes={
   user: PropTypes.string,
   msg: PropTypes.string,
   login:PropTypes.bool,
@@ -85,5 +96,5 @@ export default connect(
     }
   },
   {loginTypeAction}
-)(Header)
+)(HeaderCom)
 
diff --git a/client/components/Header/Header.scss b/client/components/Header/Header.scss
index 15516504..3762a3bc 100644
--- a/client/components/Header/Header.scss
+++ b/client/components/Header/Header.scss
@@ -1,29 +1,35 @@
 @import '../../styles/common.scss';
 $color-white : #fff;
-$color-blue : #30a1f2;
+$color-blue : #108ee9;
+$color-blue-deeper: #34495E;
 $color-grey-deep : #929aac;
+$color-black-light : #404040;
 /* .header-box.css */
 .header-box {
   display: block;
-  line-height: .64rem;
-  background: #000c15;
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  //line-height: .64rem;
   font-size: 0.14rem;
   color: $color-white;
+  z-index: 9999;
 
   // 内容宽度
   .content {
-    max-width: 11rem;
+    max-width: 10.3rem;
     margin: 0 auto;
     zoom: 1;
     overflow: hidden;
   }
 
-  h1 {
-    font-size: .25rem;
+  .logo {
+    font-size: .3rem;
     float: left;
     margin: 0 .2rem 0 0;
     color: $color-white;
-    cursor: pointer;
+    //cursor: pointer;
     a{
       color: $color-white;
       &:hover {
@@ -36,37 +42,30 @@ $color-grey-deep : #929aac;
   }
 
   .nav-toolbar {
+    font-size: .15rem;
+    box-sizing: border-box;
     float: left;
-    li {
-      float: left;
-      margin: 0 .2rem;
-      a{
-        color: $color-white;
-        &:hover {
-          color: $color-blue;
-        }
-      }
-    }
   }
 
   .user-toolbar{
     float: right;
-    line-height: .12rem;
+    line-height: .14rem;
     li{
       float: left;
-      height: .12rem;
       margin: .26rem 0;
-      padding: 0 .1rem;
-      font-size: .12rem;
+      padding: 0 0 0 .12rem;
+      font-size: .14rem;
       cursor: pointer;
-      a{
-        color: $color-white;
-        &:hover{
-          color: $color-blue;
-        }
-      }
+      color: $color-white;
       &:not(:last-child){
         border-right: .01rem solid $color-white;
+        padding: 0 .12rem;
+      }
+      &:hover{
+        color: $color-blue;
+      }
+      i{
+        margin-right: .09rem;
       }
     }
   }
diff --git a/client/components/Intro/Intro.js b/client/components/Intro/Intro.js
new file mode 100644
index 00000000..f18a285e
--- /dev/null
+++ b/client/components/Intro/Intro.js
@@ -0,0 +1,72 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Row, Col, Icon } from 'antd'
+import "./Intro.scss"
+
+const IntroPart = (props) =>(
+  <Col span={12} className="switch-content">
+    <div className="icon-switch">
+      <Icon type="smile-o" />
+    </div>
+    <div>
+      <p><b>{props.title}</b></p>
+      <p>{props.des}</p>
+    </div>
+  </Col>
+)
+
+IntroPart.propTypes = {
+  title : PropTypes.string,
+  des : PropTypes.string
+}
+
+class Intro extends React.Component{
+  constructor(props){
+    super(props);
+  }
+  static propTypes={
+    intro : PropTypes.shape({
+      title:PropTypes.string,
+      des:PropTypes.string,
+      img:PropTypes.string,
+      detail:PropTypes.arrayOf(PropTypes.shape({
+        title:PropTypes.string,
+        des:PropTypes.string
+      }))
+    })
+  }
+  render(){
+    const { intro } = this.props;
+    return(
+      <div className="intro-container">
+        <Row>
+          <Col span={12}>
+            <div>
+              <div className="img-container">
+                <img src={intro.img}/>
+              </div>
+            </div>
+          </Col>
+          <Col span={12} className="des-container">
+            <div>
+              <div className="des-title">
+                {intro.title}
+              </div>
+              <div className="des-detail">
+                {intro.des}
+              </div>
+            </div>
+            <div className="des-switch">
+              {intro.detail.map(function(item,i){
+                return(<IntroPart key={i} title={item.title} des={item.des}/>)
+              })}
+            </div>
+          </Col>
+        </Row>
+      </div>
+    )
+  }
+}
+
+export default Intro;
+
diff --git a/client/components/Intro/Intro.scss b/client/components/Intro/Intro.scss
new file mode 100644
index 00000000..f435f3a5
--- /dev/null
+++ b/client/components/Intro/Intro.scss
@@ -0,0 +1,49 @@
+$imgUrl : "../../../static/image/";
+$color-grey : #E5E5E5;
+$color-blue : #108ee9;
+$color-white: #fff;
+
+.intro-container{
+  .des-container{
+    padding-left: .15rem;
+    .des-title{
+      font-size: .24rem;
+      margin-bottom: .1rem;
+    }
+    .des-detail{
+      font-size: .15rem;
+      margin-bottom: .2rem;
+    }
+    .des-switch{
+      .switch-content{
+        font-size: .14rem;
+        margin-bottom: .15rem;
+        div{
+          float: left;
+        }
+        .icon-switch{
+          height: .3rem;
+          width: .3rem;
+          border-radius: .02rem;
+          background-color: $color-blue;
+          margin-right: .1rem;
+          color: $color-white;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+        }
+      }
+    }
+  }
+  .img-container{
+    padding-right: .15rem;
+    //background-image: url("#{$imgUrl}demo-img.png");
+    img{
+      height: 100%;
+      width: 100%;
+      border: .01rem solid $color-grey;
+      box-shadow : 0 0 3px 1px $color-grey;
+      border-radius: .04rem;
+    }
+  }
+}
diff --git a/client/constants/action-types.js b/client/constants/action-types.js
index 011c76c7..21a1596e 100644
--- a/client/constants/action-types.js
+++ b/client/constants/action-types.js
@@ -18,7 +18,8 @@ export const REGISTER = 'REGISTER';
 export const LOGIN_TYPE = 'LOGIN_TYPE';
 
 //  News
-export const FETCH_NEWS_DATA = 'FETCH_NEWS_DATA'
+export const FETCH_NEWS_DATA = 'FETCH_NEWS_DATA';
+export const FETCH_MORE_NEWS = 'FETCH_MORE_NEWS';
 
 // User
 export const CHANGE_CUR_UID = 'CHANGE_CUR_UID'
diff --git a/client/containers/Home/Home.js b/client/containers/Home/Home.js
index 15593afc..ed9079ab 100644
--- a/client/containers/Home/Home.js
+++ b/client/containers/Home/Home.js
@@ -1,26 +1,77 @@
 import './Home.scss'
 import React, { Component } from 'react'
+import { Row, Col } from 'antd'
+import PropTypes from "prop-types"
 import Login from '../Login/login-wrap'
+import Intro from '../../components/Intro/Intro'
 
 
 class Home extends Component {
   constructor(props) {
     super(props)
   }
-
+  static propTypes = {
+    introList:PropTypes.array
+  }
   render () {
     return (
       <div className="home-main">
         <div className="main-one">
-          <div className="home-des">
-            <p className="title">YAPI</p>
-            <div className="detail">一个高效,易用,功能强大的api管理系统</div>
+          <div className="container">
+            <Row>
+              <Col span={24}>
+                <div className="home-des">
+                  <p className="title">YAPI</p>
+                  <div className="detail">一个高效,易用,功能强大的api管理系统</div>
+                </div>
+              </Col>
+            </Row>
+            <Row>
+              <Col span={8} className="main-one-left">
+                <Login/>
+              </Col>
+              <Col span={16} className="main-one-right">
+                <div className="img-container">
+                  <img src="./static/image/demo-img.png"/>
+                </div>
+              </Col>
+            </Row>
           </div>
-          <Login/>
         </div>
+        { this.props.introList.map(function(intro,i){
+          return (
+            <div className="main-part" key={i}>
+              <div className="container">
+                <Intro intro={intro}/>
+              </div>
+            </div>
+          )
+        })}
       </div>
     )
   }
 }
 
+Home.defaultProps={
+  introList:[{
+    title:"接口管理",
+    des:"yapi将满足你的所有接口管理需求。不再需要 为每个项目搭建独立的接口管理平台和编写离线的接口文档",
+    detail:[
+      {title:"接口管理",des:"强大的接口文档"},
+      {title:"接口管理",des:"强大的接口文档"},
+      {title:"接口管理",des:"强大的接口文档"}
+    ],
+    img:"./static/image/demo-img.png"
+  },{
+    title:"接口管理",
+    des:"yapi将满足你的所有接口管理需求。不再需要 为每个项目搭建独立的接口管理平台和编写离线的接口文档",
+    detail:[
+      {title:"接口管理",des:"强大的接口文档"},
+      {title:"接口管理",des:"强大的接口文档"}
+    ],
+    img:"./static/image/demo-img.png"
+  }
+  ]
+};
+
 export default Home
diff --git a/client/containers/Home/Home.scss b/client/containers/Home/Home.scss
index 09f71974..b7b55c69 100644
--- a/client/containers/Home/Home.scss
+++ b/client/containers/Home/Home.scss
@@ -1,27 +1,61 @@
 @import '../../styles/common.scss';
-/* .home-main.css */
+
+$color-white : #fff;
+$color-blue-lighter : #f1f5ff;
+$color-grey-lighter : #F7F7F7;
+$color-blue-light: #5dade2;
+$color-black-lighter: #404040;
+
+
 .home-main {
   display: -webkit-box;
-  max-width: 11rem;
-  margin: 0 auto;
+  margin-top: .64rem;
   -webkit-box-orient: vertical;
+  background: $color-grey-lighter;
   .main-one{
     height:calc(100% - .64rem);
-    padding: .5rem 0;
+    padding: .5rem .5rem 0 .5rem;
+    //background: radial-gradient(ellipse at center,#45484d 0%,#000 100%);
     .home-des{
-      padding: .3rem 0;
+      padding: 0 .3rem .3rem 0;
       .title{
         font-size: .6rem;
       }
       .detail{
-        font-size: .23rem;
+        font-size: .2rem;
       }
     }
     .login-form{
-
+    }
+    .img-container{
+      margin-bottom: -.2rem;
+      img{
+        width: 100%;
+        height: 100%;
+        box-shadow : 0 0 3px 0 $color-black-lighter;
+        border-radius: .03rem;
+      }
+    }
+    .main-one-left{
+      padding-right: .15rem;
+    }
+    .main-one-right{
+      padding-left: .15rem;
     }
   }
-
+  .main-part{
+    padding: .9rem .5rem;
+    &:nth-child(odd){
+      background-color: $color-blue-lighter;
+    }
+    &:nth-child(even){
+      background-color: $color-white;
+    }
+  }
+  .container{
+    max-width: 10.3rem;
+    margin: 0 auto;
+  }
 }
 
 
diff --git a/client/containers/Login/login.scss b/client/containers/Login/login.scss
index d41d1bdc..8768f1e5 100644
--- a/client/containers/Login/login.scss
+++ b/client/containers/Login/login.scss
@@ -1,6 +1,4 @@
 @import '../../styles/common.scss';
 
 /* .login-main.css */
-.login-form {
-  width: 4rem;
-}
+
diff --git a/client/containers/News/News.js b/client/containers/News/News.js
index b3808597..722dfb2c 100644
--- a/client/containers/News/News.js
+++ b/client/containers/News/News.js
@@ -30,11 +30,11 @@ class News extends Component {
     this.props.fetchNewsData()
   }
   render () {
-    const data = this.props.newsData;
+    const data = this.props.newsData
     return (
       <section className="news-box">
         <NewsList />
-        <NewsTimeline data = {data} />
+        <NewsTimeline newsData = {data} />
       </section>
     )
   }
diff --git a/client/containers/News/News.scss b/client/containers/News/News.scss
index e5f8224e..22096708 100644
--- a/client/containers/News/News.scss
+++ b/client/containers/News/News.scss
@@ -25,7 +25,57 @@
   }
 
 }
+
 .news-timeline{
   margin-left: 30px;
   margin-top: 30px;
-}
\ No newline at end of file
+}
+
+.ant-timeline-item-content{
+  background-color: #ececec;
+  margin-left: 30px;
+  border-radius: 4px;
+  border-left:4px solid #ececec;
+  min-width: 350px;
+  max-width: 450px;
+  padding: 10px;
+
+  .timelineDate{
+    display: block;
+    float: left;
+   }
+
+   .timelineName{
+    float: right;
+   }
+
+   p{
+     display: block;
+     width: 100%;
+   }
+
+   div{
+     overflow: hidden
+   }
+
+}
+
+.ant-timeline-item-content:before{
+  content:'';
+  display: block;
+  margin-left: -40px;
+  width: 0px;
+  height: 0px;
+  float: left;
+  border-width: 10px 13px;
+  border-style: solid;
+  border-color: transparent #ececec transparent transparent;
+}
+
+.ant-timeline-item-tail{
+  top: 16px;
+}
+
+.ant-timeline-item-head{
+  margin-top: 10px;
+}
diff --git a/client/containers/News/NewsTimeline/NewsTimeline.js b/client/containers/News/NewsTimeline/NewsTimeline.js
index 23dc9bfc..49dd79b2 100644
--- a/client/containers/News/NewsTimeline/NewsTimeline.js
+++ b/client/containers/News/NewsTimeline/NewsTimeline.js
@@ -1,25 +1,41 @@
 import React, { Component } from 'react'
 import { Timeline } from 'antd'
 import PropTypes from 'prop-types'
-
+import { connect } from 'react-redux'
+import { fetchMoreNews } from '../../../actions/news.js'
+@connect(
+  state=>{
+    return state;
+  },
+  {
+    fetchMoreNews: fetchMoreNews
+  }
+)
 class NewsTimeline extends Component {
   static propTypes = {
-    data: PropTypes.array
+    newsData: PropTypes.array,
+    fetchMoreNews: PropTypes.func
   }
 
   constructor(props) {
-    super(props)
+    super(props);
   }
 
   render () {
-    const data = this.props.data;
+    const data = this.props.newsData;
     return (
       <section className="news-timeline">
-        <Timeline pending={<a href="#">See more</a>}>
+        <Timeline pending={<a onClick = {this.props.fetchMoreNews}>See more</a>}>
           { 
             data.map(function(item,i){
               return (
-                <Timeline.Item color = 'green' key = {i} >{ item.date + item.desc + item.name }</Timeline.Item>
+                <Timeline.Item color = 'green' key = {i} >
+                  <div>
+                    <span className='timelineDate'>{item.date}</span>
+                    <span className='timelineName'>{item.name}</span>
+                  </div>
+                  <p>{item.desc}</p>
+                </Timeline.Item>
               )
             })
            }
diff --git a/client/containers/ProjectGroups/GroupList/GroupList.js b/client/containers/ProjectGroups/GroupList/GroupList.js
index eb990a25..b9f3b4fc 100644
--- a/client/containers/ProjectGroups/GroupList/GroupList.js
+++ b/client/containers/ProjectGroups/GroupList/GroupList.js
@@ -1,8 +1,9 @@
 import React, { Component } from 'react'
 import PropTypes from 'prop-types'
 import { connect } from 'react-redux'
-import { Card, Button } from 'antd'
+import { Card, Button, Icon, Modal, Input, message } from 'antd'
 import { autobind } from 'core-decorators';
+import axios from 'axios';
 
 import {
   fetchGroupList,
@@ -28,25 +29,61 @@ export default class GroupList extends Component {
   static propTypes = {
     groupList: PropTypes.array,
     currGroup: PropTypes.object,
-    addGroup: PropTypes.func,
     fetchGroupList: PropTypes.func,
     setCurrGroup: PropTypes.func
   }
 
+  state = {
+    addGroupModalVisible: false,
+    newGroupName: '',
+    newGroupDesc: ''
+  }
+
   constructor(props) {
     super(props)
   }
 
   componentWillMount() {
     this.props.fetchGroupList().then(() => {
-      const currGroup = this.props.groupList[0];
+      const currGroup = this.props.groupList[0] || { group_name: '', group_desc: '' };
       this.props.setCurrGroup(currGroup)
     });
   }
 
+  @autobind
+  showModal() {
+    this.setState({
+      addGroupModalVisible: true
+    });
+  }
   @autobind
   addGroup() {
-    this.props.addGroup('group');
+    const { newGroupName: group_name, newGroupDesc: group_desc } = this.state;
+    axios.post('/group/add', { group_name, group_desc }).then(res => {
+      if (res.data.errcode) {
+        message.error(res.data.errmsg);
+      } else {
+        this.setState({
+          addGroupModalVisible: false
+        });
+        this.props.fetchGroupList()
+      }
+    });
+  }
+  @autobind
+  handleCancel(e) {
+    console.log(e);
+    this.setState({
+      addGroupModalVisible: false
+    });
+  }
+  @autobind
+  inputNewGroupName(e) {
+    this.setState({newGroupName: e.target.value});
+  }
+  @autobind
+  inputNewGroupDesc(e) {
+    this.setState({newGroupDesc: e.target.value});
   }
 
   render () {
@@ -54,13 +91,25 @@ export default class GroupList extends Component {
 
     return (
       <Card title="Groups">
-        <Button type="primary" onClick={this.addGroup}>添加分组</Button>
-        <div>{currGroup.group_name}</div>
+        <Button type="primary" onClick={this.showModal}>添加分组</Button>
+        <div className="curr-group">{currGroup.group_name}</div>
         {
           groupList.map((group, index) => (
-            <div key={index}>{group.group_name}</div>
+            <div key={index}>
+              <div className="group-name">{group.group_name}</div>
+              <Icon type="edit" />
+            </div>
           ))
         }
+        <Modal
+          title="添加分组"
+          visible={this.state.addGroupModalVisible}
+          onOk={this.addGroup}
+          onCancel={this.handleCancel}
+        >
+          <Input placeholder="请输入分组名称" onChange={this.inputNewGroupName}></Input>
+          <Input placeholder="请输入分组描述" onChange={this.inputNewGroupDesc}></Input>
+        </Modal>
       </Card>
     )
   }
diff --git a/client/containers/ProjectGroups/GroupList/GroupList.scss b/client/containers/ProjectGroups/GroupList/GroupList.scss
index e69de29b..6a079250 100644
--- a/client/containers/ProjectGroups/GroupList/GroupList.scss
+++ b/client/containers/ProjectGroups/GroupList/GroupList.scss
@@ -0,0 +1,8 @@
+.group-name {
+  display: inline-block;
+}
+.curr-group {
+  background: #34495E;
+  box-shadow: 0 2px 4px 0 rgba(0,0,0,0.20);
+  border-radius: 4px 4px 0 0;
+}
diff --git a/client/containers/ProjectGroups/ProjectList/ProjectList.scss b/client/containers/ProjectGroups/ProjectList/ProjectList.scss
new file mode 100644
index 00000000..68aa3fbe
--- /dev/null
+++ b/client/containers/ProjectGroups/ProjectList/ProjectList.scss
@@ -0,0 +1,3 @@
+.ant-input-group-wrapper {
+  width: 100%;
+}
diff --git a/client/containers/ProjectGroups/ProjectList/index.js b/client/containers/ProjectGroups/ProjectList/index.js
index 1166190a..dc081e9f 100644
--- a/client/containers/ProjectGroups/ProjectList/index.js
+++ b/client/containers/ProjectGroups/ProjectList/index.js
@@ -1,10 +1,13 @@
 import React, { Component } from 'react';
 import PropTypes from 'prop-types';
 import { connect } from 'react-redux';
-import { Table, Button, Modal, Form, Input, Icon, Tooltip } from 'antd';
+import { Table, Button, Modal, Form, Input, Icon, Tooltip, Select } from 'antd';
 import { addProject } from  '../../../actions/project';
 const { TextArea } = Input;
 const FormItem = Form.Item;
+const Option = Select.Option;
+
+import './ProjectList.scss'
 
 const columns = [{
   title: 'Name',
@@ -59,12 +62,12 @@ const formItemLayout = {
     addProject
   }
 )
-
 class ProjectList extends Component {
   constructor(props) {
     super(props);
     this.state = {
-      visible: false
+      visible: false,
+      protocol: 'http:\/\/'
     }
   }
   static propTypes = {
@@ -80,6 +83,7 @@ class ProjectList extends Component {
     e.preventDefault();
     this.props.form.validateFields((err, values) => {
       if (!err) {
+        values.prd_host = this.state.protocol + values.prd_host;
         console.log('Received values of form: ', values);
         this.setState({
           visible: false
@@ -94,9 +98,14 @@ class ProjectList extends Component {
       visible: false
     });
   }
-  handleSubmit = (e) => {
-    console.log(e);
+
+  // 修改线上域名的协议类型 (http/https)
+  protocolChange = (value) => {
+    this.setState({
+      protocol: value
+    })
   }
+
   render() {
     const { getFieldDecorator } = this.props.form;
     return (
@@ -107,7 +116,7 @@ class ProjectList extends Component {
           onOk={this.handleOk}
           onCancel={this.handleCancel}
         >
-          <Form onSubmit={this.handleSubmit}>
+          <Form>
 
             <FormItem
               {...formItemLayout}
@@ -138,7 +147,11 @@ class ProjectList extends Component {
                   required: true, message: '请输入项目线上域名!'
                 }]
               })(
-                <Input />
+                <Input addonBefore={(
+                  <Select defaultValue="http://" onChange={this.protocolChange}>
+                    <Option value="http://">{'http:\/\/'}</Option>
+                    <Option value="https://">{'https:\/\/'}</Option>
+                  </Select>)} />
               )}
             </FormItem>
 
diff --git a/client/reducer/Login/login.js b/client/reducer/Login/login.js
index c258b49f..a65a0c5b 100644
--- a/client/reducer/Login/login.js
+++ b/client/reducer/Login/login.js
@@ -13,6 +13,7 @@ const initialState = {
 export default (state = initialState, action) => {
   switch (action.type) {
     case LOGIN: {
+      console.log(action);
       return {
         ...state,
         isLogin: true,
diff --git a/client/reducer/group/group.js b/client/reducer/group/group.js
index d51793f4..846fa509 100644
--- a/client/reducer/group/group.js
+++ b/client/reducer/group/group.js
@@ -5,7 +5,7 @@ import {
 
 const initialState = {
   groupList: [],
-  currGroup: 'MFE'
+  currGroup: { group_name: '' }
 };
 
 export default (state = initialState, action) => {
diff --git a/client/reducer/group/project.js b/client/reducer/group/project.js
new file mode 100644
index 00000000..0ed8ec16
--- /dev/null
+++ b/client/reducer/group/project.js
@@ -0,0 +1,19 @@
+import {
+  PROJECT_ADD
+} from '../../constants/action-types';
+
+const initialState = {
+  groupList: [],
+  currGroup: 'MFE'
+};
+
+export default (state = initialState, action) => {
+  switch (action.type) {
+    case PROJECT_ADD: {
+      console.log(action.payload);
+      return state;
+    }
+    default:
+      return state;
+  }
+};
diff --git a/client/reducer/news/news.js b/client/reducer/news/news.js
index 374e5410..4a27c566 100644
--- a/client/reducer/news/news.js
+++ b/client/reducer/news/news.js
@@ -1,5 +1,6 @@
 import {
-  FETCH_NEWS_DATA
+  FETCH_NEWS_DATA,
+  FETCH_MORE_NEWS
 } from '../../constants/action-types.js'
 
 const initialState = {
@@ -9,12 +10,20 @@ const initialState = {
 export default (state = initialState, action) => {
   switch (action.type) {
     case FETCH_NEWS_DATA: {
+
       return {
         ...state,
         newsData: action.payload
       };
     }
+    case FETCH_MORE_NEWS: {
+      state.newsData.push(...action.payload);
+      return {
+        ...state
+      }
+    }
     default:
       return state;
   }
 }
+
diff --git a/client/routes.js b/client/routes.js
index 67069a00..964467df 100644
--- a/client/routes.js
+++ b/client/routes.js
@@ -14,11 +14,10 @@ export default () => {
         <Route path="/" component={ Home } exact />
         <Route path="/ProjectGroups" component={ ProjectGroups } />
         <Route path="/Interface" component={ Interface } />
-        <Route path="/user" component={User} />  
+        <Route path="/user" component={User} />
         <Route path="/News" component={ News } />
       </div>
 
     </HashRouter>
   )
 }
-   
\ No newline at end of file
diff --git a/doc/build/api.html b/doc/build/api.html
index bd800c74..5182243d 100644
--- a/doc/build/api.html
+++ b/doc/build/api.html
@@ -155,7 +155,7 @@
                                     </li>
                                      
                                     <li >
-                                        <a href="#-project-get_member_list-json">/project/get_member_list.json</a>
+                                        <a href="#-project-get_member_list">/project/get_member_list</a>
                                     </li>
                                      
                                     <li >
@@ -872,6 +872,50 @@
     </p>
     
     
+    <p>
+        <small class="text-muted">参数:</small>
+    </p>
+    <div class="docs-table">
+        <table class="yo-table yo-table-border">
+            <colgroup>
+                <col class="c1">
+                <col class="c2">
+                <col class="c3">
+                <col class="c4">
+            </colgroup>
+            <thead>
+                <tr class="active">
+                    <th>参数名</th>
+                    <th>类型</th>
+                    <th>描述</th>
+                    <th>必选</th>
+                    <th>支持版本</th>
+                </tr>
+            </thead>
+            
+            <tr>
+                <td>pageNo</td>
+                <td>Number</td>
+                <td>分页页码</td>
+                <td>
+                    
+                </td>
+                <td></td>
+            </tr>
+            
+            <tr>
+                <td>pageSize</td>
+                <td>Number</td>
+                <td>分页大小</td>
+                <td>
+                    
+                </td>
+                <td></td>
+            </tr>
+            
+        </table>
+    </div>
+    
     
     
 </div>
@@ -894,7 +938,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/user.js.html#299" target="_blank">./server/controllers/user.js:299</a>
+        <a href="./static/server/controllers/user.js.html#314" target="_blank">./server/controllers/user.js:314</a>
     </p>
     
     
@@ -956,7 +1000,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/user.js.html#328" target="_blank">./server/controllers/user.js:328</a>
+        <a href="./static/server/controllers/user.js.html#343" target="_blank">./server/controllers/user.js:343</a>
     </p>
     
     
@@ -1018,7 +1062,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/user.js.html#352" target="_blank">./server/controllers/user.js:352</a>
+        <a href="./static/server/controllers/user.js.html#367" target="_blank">./server/controllers/user.js:367</a>
     </p>
     
     
@@ -1043,14 +1087,34 @@
                 </tr>
             </thead>
             
+            <tr>
+                <td>uid</td>
+                <td></td>
+                <td>用户uid</td>
+                <td>
+                    
+                    <i class="yo-ico glyphicon glyphicon-ok text-success"></i>
+                    
+                </td>
+                <td></td>
+            </tr>
+            
+            <tr>
+                <td>role</td>
+                <td></td>
+                <td>用户角色,只有管理员有权限修改</td>
+                <td>
+                    
+                </td>
+                <td></td>
+            </tr>
+            
             <tr>
                 <td>username</td>
                 <td></td>
                 <td>String</td>
                 <td>
                     
-                    <i class="yo-ico glyphicon glyphicon-ok text-success"></i>
-                    
                 </td>
                 <td></td>
             </tr>
@@ -1061,8 +1125,6 @@
                 <td>String</td>
                 <td>
                     
-                    <i class="yo-ico glyphicon glyphicon-ok text-success"></i>
-                    
                 </td>
                 <td></td>
             </tr>
@@ -1092,7 +1154,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/user.js.html#388" target="_blank">./server/controllers/user.js:388</a>
+        <a href="./static/server/controllers/user.js.html#412" target="_blank">./server/controllers/user.js:412</a>
     </p>
     
     
@@ -1456,13 +1518,13 @@
 
 <div class="con-list-item">
     <blockquote class="api">
-        <h3 id="-project-get_member_list-json" class="page-header subject">
-            /project/get_member_list.json
+        <h3 id="-project-get_member_list" class="page-header subject">
+            /project/get_member_list
             
             <span class="ui-badge">GET</span>
             
             
-            <a class="hashlink" href="#-project-get_member_list-json">#</a>
+            <a class="hashlink" href="#-project-get_member_list">#</a>
         </h3>
     </blockquote>
     <p>
@@ -1521,12 +1583,9 @@
         <span class="token punctuation">{</span>
             <span class="token string">"_id"</span><span class="token punctuation">:</span> <span class="token number">101</span><span class="token punctuation">,</span>
             <span class="token string">"email"</span><span class="token punctuation">:</span> <span class="token string">"admin@admin.com"</span><span class="token punctuation">,</span>
-            <span class="token string">"password"</span><span class="token punctuation">:</span> <span class="token string">"e00084747ecba89837affe8a048e83c751e44209"</span><span class="token punctuation">,</span>
-            <span class="token string">"passsalt"</span><span class="token punctuation">:</span> <span class="token string">"fmf3kytyysc4swwuqc15rk9"</span><span class="token punctuation">,</span>
             <span class="token string">"role"</span><span class="token punctuation">:</span> <span class="token string">"admin"</span><span class="token punctuation">,</span>
             <span class="token string">"add_time"</span><span class="token punctuation">:</span> <span class="token number">1499932673</span><span class="token punctuation">,</span>
-            <span class="token string">"up_time"</span><span class="token punctuation">:</span> <span class="token number">1499932673</span><span class="token punctuation">,</span>
-            <span class="token string">"__v"</span><span class="token punctuation">:</span> <span class="token number">0</span>
+            <span class="token string">"up_time"</span><span class="token punctuation">:</span> <span class="token number">1499932673</span>
         <span class="token punctuation">}</span>
     <span class="token punctuation">]</span>
 <span class="token punctuation">}</span>
@@ -1553,7 +1612,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#176" target="_blank">./server/controllers/project.js:176</a>
+        <a href="./static/server/controllers/project.js.html#182" target="_blank">./server/controllers/project.js:182</a>
     </p>
     
     
@@ -1636,7 +1695,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#200" target="_blank">./server/controllers/project.js:200</a>
+        <a href="./static/server/controllers/project.js.html#206" target="_blank">./server/controllers/project.js:206</a>
     </p>
     
     
@@ -1673,6 +1732,26 @@
                 <td></td>
             </tr>
             
+            <tr>
+                <td>pageNo</td>
+                <td>Number</td>
+                <td>分页页码</td>
+                <td>
+                    
+                </td>
+                <td></td>
+            </tr>
+            
+            <tr>
+                <td>pageSize</td>
+                <td>Number</td>
+                <td>分页大小</td>
+                <td>
+                    
+                </td>
+                <td></td>
+            </tr>
+            
         </table>
     </div>
     
@@ -1681,38 +1760,37 @@
     <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
-    <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>
-        <span class="token punctuation">{</span>
-            <span class="token string">"_id"</span><span class="token punctuation">:</span> <span class="token number">7</span><span class="token punctuation">,</span>
-            <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"project_a1"</span><span class="token punctuation">,</span>
-            <span class="token string">"desc"</span><span class="token punctuation">:</span> <span class="token string">"tttttt"</span><span class="token punctuation">,</span>
-            <span class="token string">"prd_host"</span><span class="token punctuation">:</span> <span class="token string">"project.a1.cc"</span><span class="token punctuation">,</span>
-            <span class="token string">"basepath"</span><span class="token punctuation">:</span> <span class="token string">"/a1"</span><span class="token punctuation">,</span>
-            <span class="token string">"uid"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
-            <span class="token string">"group_id"</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span>
-            <span class="token string">"add_time"</span><span class="token punctuation">:</span> <span class="token number">1499331378</span><span class="token punctuation">,</span>
-            <span class="token string">"up_time"</span><span class="token punctuation">:</span> <span class="token number">1499331378</span><span class="token punctuation">,</span>
-            <span class="token string">"__v"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
-            <span class="token string">"members"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>
-                <span class="token number">0</span>
-            <span class="token punctuation">]</span>
-        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-        <span class="token punctuation">{</span>
-            <span class="token string">"_id"</span><span class="token punctuation">:</span> <span class="token number">8</span><span class="token punctuation">,</span>
-            <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"project_a2"</span><span class="token punctuation">,</span>
-            <span class="token string">"desc"</span><span class="token punctuation">:</span> <span class="token string">"tttttt"</span><span class="token punctuation">,</span>
-            <span class="token string">"prd_host"</span><span class="token punctuation">:</span> <span class="token string">"project.a2.cc"</span><span class="token punctuation">,</span>
-            <span class="token string">"basepath"</span><span class="token punctuation">:</span> <span class="token string">"/a1"</span><span class="token punctuation">,</span>
-            <span class="token string">"uid"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
-            <span class="token string">"group_id"</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span>
-            <span class="token string">"add_time"</span><span class="token punctuation">:</span> <span class="token number">1499331387</span><span class="token punctuation">,</span>
-            <span class="token string">"up_time"</span><span class="token punctuation">:</span> <span class="token number">1499331387</span><span class="token punctuation">,</span>
-            <span class="token string">"__v"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
-            <span class="token string">"members"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>
-                <span class="token number">0</span>
-            <span class="token punctuation">]</span>
-        <span class="token punctuation">}</span>
-    <span class="token punctuation">]</span>
+    <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
+        <span class="token string">"total"</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">,</span>
+        <span class="token string">"list"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>
+            <span class="token punctuation">{</span>
+                <span class="token string">"_id"</span><span class="token punctuation">:</span> <span class="token number">133</span><span class="token punctuation">,</span>
+                <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"project_a1"</span><span class="token punctuation">,</span>
+                <span class="token string">"prd_host"</span><span class="token punctuation">:</span> <span class="token string">"project.a2.cc"</span><span class="token punctuation">,</span>
+                <span class="token string">"basepath"</span><span class="token punctuation">:</span> <span class="token string">"/a1/"</span><span class="token punctuation">,</span>
+                <span class="token string">"uid"</span><span class="token punctuation">:</span> <span class="token number">101</span><span class="token punctuation">,</span>
+                <span class="token string">"group_id"</span><span class="token punctuation">:</span> <span class="token number">101</span><span class="token punctuation">,</span>
+                <span class="token string">"add_time"</span><span class="token punctuation">:</span> <span class="token number">1500004234</span><span class="token punctuation">,</span>
+                <span class="token string">"up_time"</span><span class="token punctuation">:</span> <span class="token number">1500004234</span><span class="token punctuation">,</span>
+                <span class="token string">"__v"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
+                <span class="token string">"env"</span><span class="token punctuation">:</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
+                <span class="token string">"members"</span><span class="token punctuation">:</span><span class="token punctuation">[</span><span class="token string">"101"</span><span class="token punctuation">]</span>
+            <span class="token punctuation">}</span><span class="token punctuation">,</span>
+            <span class="token punctuation">{</span>
+                <span class="token string">"_id"</span><span class="token punctuation">:</span> <span class="token number">163</span><span class="token punctuation">,</span>
+                <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"project_a2"</span><span class="token punctuation">,</span>
+                <span class="token string">"prd_host"</span><span class="token punctuation">:</span> <span class="token string">"project.a2.cc"</span><span class="token punctuation">,</span>
+                <span class="token string">"basepath"</span><span class="token punctuation">:</span> <span class="token string">"/a2/"</span><span class="token punctuation">,</span>
+                <span class="token string">"uid"</span><span class="token punctuation">:</span> <span class="token number">101</span><span class="token punctuation">,</span>
+                <span class="token string">"group_id"</span><span class="token punctuation">:</span> <span class="token number">101</span><span class="token punctuation">,</span>
+                <span class="token string">"add_time"</span><span class="token punctuation">:</span> <span class="token number">1500006397</span><span class="token punctuation">,</span>
+                <span class="token string">"up_time"</span><span class="token punctuation">:</span> <span class="token number">1500006397</span><span class="token punctuation">,</span>
+                <span class="token string">"__v"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
+                <span class="token string">"env"</span><span class="token punctuation">:</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
+                <span class="token string">"members"</span><span class="token punctuation">:</span><span class="token punctuation">[</span><span class="token string">"101"</span><span class="token punctuation">]</span>
+            <span class="token punctuation">}</span>
+        <span class="token punctuation">]</span>
+    <span class="token punctuation">}</span>
 <span class="token punctuation">}</span></code></pre>
     
     
@@ -1736,7 +1814,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#224" target="_blank">./server/controllers/project.js:224</a>
+        <a href="./static/server/controllers/project.js.html#244" target="_blank">./server/controllers/project.js:244</a>
     </p>
     
     
@@ -1808,7 +1886,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#257" target="_blank">./server/controllers/project.js:257</a>
+        <a href="./static/server/controllers/project.js.html#277" target="_blank">./server/controllers/project.js:277</a>
     </p>
     
     
@@ -1968,7 +2046,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#318" target="_blank">./server/controllers/project.js:318</a>
+        <a href="./static/server/controllers/project.js.html#338" target="_blank">./server/controllers/project.js:338</a>
     </p>
     
     
diff --git a/doc/build/static/server/controllers/project.js.html b/doc/build/static/server/controllers/project.js.html
index d4248a23..4972a39f 100644
--- a/doc/build/static/server/controllers/project.js.html
+++ b/doc/build/static/server/controllers/project.js.html
@@ -169,7 +169,7 @@ class projectController extends baseController {
 
     /**
      * 获取项目成员列表
-     * @interface /project/get_member_list.json
+     * @interface /project/get_member_list
      * @method GET
      * @category project
      * @foldnumber 10
@@ -191,7 +191,13 @@ class projectController extends baseController {
 
             for(let i of project.members) {
                 let user = await userInst.findById(i);
-                result.push(user);
+                result.push({
+                    _id: user._id,
+                    email: user.email,
+                    role: user.role,
+                    add_time: user.add_time,
+                    up_time: user.up_time
+                });
             }
 
             ctx.body = yapi.commons.resReturn(result);
@@ -232,18 +238,32 @@ class projectController extends baseController {
      * @category project
      * @foldnumber 10
      * @param {Number} group_id 项目group_id,不能为空
+     * @param {Number} [pageNo] 分页页码
+     * @param {Number} [pageSize] 分页大小
      * @returns {Object} 
      * @example ./api/project/list.json
      */
 
     async list(ctx) {
-        let group_id = ctx.request.query.group_id;
+        let group_id = ctx.request.query.group_id,
+            pageNo = ctx.request.query.pageNo || 1,
+            pageSize = ctx.request.query.pageSize || 10;
+
         if(!group_id){
             return ctx.body = yapi.commons.resReturn(null, 400, '项目分组id不能为空');
         }
+
         try{
             let result = await this.Model.list(group_id);
-            ctx.body = yapi.commons.resReturn(result)
+            let resResult = [];
+            for(let i = (pageNo - 1) * pageSize; i < pageNo * pageSize; i++) {
+                if(!result[i]) break;
+                resResult.push(result[i]);
+            }
+            ctx.body = yapi.commons.resReturn({
+                total: result.length,
+                list: resResult
+            })
         }catch(err){
              ctx.body = yapi.commons.resReturn(null, 402, e.message)
         }
diff --git a/doc/build/static/server/controllers/user.js.html b/doc/build/static/server/controllers/user.js.html
index a46756ad..1a2a6a88 100644
--- a/doc/build/static/server/controllers/user.js.html
+++ b/doc/build/static/server/controllers/user.js.html
@@ -307,18 +307,33 @@ class userController extends baseController{
      * @method GET
      * @category user
      * @foldnumber 10
+     * @param {Number} [pageNo] 分页页码
+     * @param {Number} [pageSize] 分页大小
      * @returns {Object} 
      * @example 
      */
 
     async list(ctx){
+        let pageNo = ctx.request.query.pageNo || 1,
+            pageSize = ctx.request.query.pageSize || 10;
+
         if(this.getRole() !== 'admin'){
             return ctx.body = yapi.commons.resReturn(null, 402, '没有权限');
         }
         var userInst = yapi.getInst(userModel);
         try{
             let user = await  userInst.list();
-            return ctx.body = yapi.commons.resReturn(user);
+            let result = [];
+
+            for(let i = (pageNo - 1) * pageSize; i < pageNo * pageSize; i++) {
+                if(!user[i]) break;
+                result.push(user[i]);
+            }
+
+            return ctx.body = yapi.commons.resReturn({
+                total: user.length,
+                list: result
+            });
         }catch(e){
             return ctx.body = yapi.commons.resReturn(null,402,e.message);
         }
@@ -381,8 +396,10 @@ class userController extends baseController{
      * 更新用户个人信息
      * @interface /user/update
      * @method POST
-     * @param username String
-     * @param email String
+     * @param uid  用户uid
+     * @param [role] 用户角色,只有管理员有权限修改
+     * @param [username] String
+     * @param [email] String
      * @category user
      * @foldnumber 10
      * @returns {Object} 
@@ -390,13 +407,20 @@ class userController extends baseController{
      */
     async update(ctx){    //更新用户信息
         try{
+            let params = ctx.request.body;
+            if(this.getRole() !== 'admin' && params.uid != this.getUid()){
+                return ctx.body = yapi.commons.resReturn(null,401,'没有权限');
+            }
             var userInst = yapi.getInst(userModel);
-            let id = this.getUid();
+            let id = params.uid;
             let data ={
                 up_time: yapi.commons.time()
             };
-            ctx.request.body.username && (data.username = ctx.request.body.username)
-            ctx.request.body.email && (data.email = ctx.request.body.email)
+            if(this.getRole() === 'admin'){
+                params.role && (data.role = params.role)
+            }
+            params.username && (data.username = params.username)
+            params.email && (data.email = params.email)
 
             if(data.email){
                 var checkRepeat = await userInst.checkRepeat(data.email);//然后检查是否已经存在该用户
diff --git a/exampleCode/api/project/get_member_list.json b/exampleCode/api/project/get_member_list.json
index 553b0f3e..4b34545a 100644
--- a/exampleCode/api/project/get_member_list.json
+++ b/exampleCode/api/project/get_member_list.json
@@ -5,12 +5,9 @@
         {
             "_id": 101,
             "email": "admin@admin.com",
-            "password": "e00084747ecba89837affe8a048e83c751e44209",
-            "passsalt": "fmf3kytyysc4swwuqc15rk9",
             "role": "admin",
             "add_time": 1499932673,
-            "up_time": 1499932673,
-            "__v": 0
+            "up_time": 1499932673
         }
     ]
 }
diff --git a/exampleCode/api/project/list.json b/exampleCode/api/project/list.json
index f11ca470..ffec080a 100644
--- a/exampleCode/api/project/list.json
+++ b/exampleCode/api/project/list.json
@@ -1,36 +1,35 @@
 {
     "errcode": 0,
     "errmsg": "success",
-    "data": [
-        {
-            "_id": 7,
-            "name": "project_a1",
-            "desc": "tttttt",
-            "prd_host": "project.a1.cc",
-            "basepath": "/a1",
-            "uid": 0,
-            "group_id": 1,
-            "add_time": 1499331378,
-            "up_time": 1499331378,
-            "__v": 0,
-            "members": [
-                0
-            ]
-        },
-        {
-            "_id": 8,
-            "name": "project_a2",
-            "desc": "tttttt",
-            "prd_host": "project.a2.cc",
-            "basepath": "/a1",
-            "uid": 0,
-            "group_id": 1,
-            "add_time": 1499331387,
-            "up_time": 1499331387,
-            "__v": 0,
-            "members": [
-                0
-            ]
-        }
-    ]
+    "data": {
+        "total": 2,
+        "list": [
+            {
+                "_id": 133,
+                "name": "project_a1",
+                "prd_host": "project.a2.cc",
+                "basepath": "/a1/",
+                "uid": 101,
+                "group_id": 101,
+                "add_time": 1500004234,
+                "up_time": 1500004234,
+                "__v": 0,
+                "env":[],
+                "members":["101"]
+            },
+            {
+                "_id": 163,
+                "name": "project_a2",
+                "prd_host": "project.a2.cc",
+                "basepath": "/a2/",
+                "uid": 101,
+                "group_id": 101,
+                "add_time": 1500006397,
+                "up_time": 1500006397,
+                "__v": 0,
+                "env":[],
+                "members":["101"]
+            }
+        ]
+    }
 }
\ No newline at end of file
diff --git a/exampleCode/api/user/list.json b/exampleCode/api/user/list.json
new file mode 100644
index 00000000..6ad1d74c
--- /dev/null
+++ b/exampleCode/api/user/list.json
@@ -0,0 +1,24 @@
+{
+    "errcode": 0,
+    "errmsg": "success",
+    "data":{
+        "total": 2,
+        "list":[
+            {
+                "_id": 101,
+                "email": "admin@admin.com",
+                "role": "admin",
+                "add_time": 1499932673,
+                "up_time": 1499932673
+            },
+            {
+                "_id": 263,
+                "username": "2515418556",
+                "email": "2515418556@qq.com",
+                "role": "member",
+                "add_time": 1500023432,
+                "up_time": 1500024967
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/server/controllers/project.js b/server/controllers/project.js
index 3a20a7c6..6fbd7e8d 100644
--- a/server/controllers/project.js
+++ b/server/controllers/project.js
@@ -142,7 +142,7 @@ class projectController extends baseController {
 
     /**
      * 获取项目成员列表
-     * @interface /project/get_member_list.json
+     * @interface /project/get_member_list
      * @method GET
      * @category project
      * @foldnumber 10
@@ -164,7 +164,13 @@ class projectController extends baseController {
 
             for(let i of project.members) {
                 let user = await userInst.findById(i);
-                result.push(user);
+                result.push({
+                    _id: user._id,
+                    email: user.email,
+                    role: user.role,
+                    add_time: user.add_time,
+                    up_time: user.up_time
+                });
             }
 
             ctx.body = yapi.commons.resReturn(result);
@@ -205,18 +211,32 @@ class projectController extends baseController {
      * @category project
      * @foldnumber 10
      * @param {Number} group_id 项目group_id,不能为空
+     * @param {Number} [pageNo] 分页页码
+     * @param {Number} [pageSize] 分页大小
      * @returns {Object} 
      * @example ./api/project/list.json
      */
 
     async list(ctx) {
-        let group_id = ctx.request.query.group_id;
+        let group_id = ctx.request.query.group_id,
+            pageNo = ctx.request.query.pageNo || 1,
+            pageSize = ctx.request.query.pageSize || 10;
+
         if(!group_id){
             return ctx.body = yapi.commons.resReturn(null, 400, '项目分组id不能为空');
         }
+
         try{
             let result = await this.Model.list(group_id);
-            ctx.body = yapi.commons.resReturn(result)
+            let resResult = [];
+            for(let i = (pageNo - 1) * pageSize; i < pageNo * pageSize; i++) {
+                if(!result[i]) break;
+                resResult.push(result[i]);
+            }
+            ctx.body = yapi.commons.resReturn({
+                total: result.length,
+                list: resResult
+            })
         }catch(err){
              ctx.body = yapi.commons.resReturn(null, 402, e.message)
         }
diff --git a/server/controllers/user.js b/server/controllers/user.js
index e82b8d56..b599e66b 100644
--- a/server/controllers/user.js
+++ b/server/controllers/user.js
@@ -280,18 +280,33 @@ class userController extends baseController{
      * @method GET
      * @category user
      * @foldnumber 10
+     * @param {Number} [pageNo] 分页页码
+     * @param {Number} [pageSize] 分页大小
      * @returns {Object} 
      * @example 
      */
 
     async list(ctx){
+        let pageNo = ctx.request.query.pageNo || 1,
+            pageSize = ctx.request.query.pageSize || 10;
+
         if(this.getRole() !== 'admin'){
             return ctx.body = yapi.commons.resReturn(null, 402, '没有权限');
         }
         var userInst = yapi.getInst(userModel);
         try{
             let user = await  userInst.list();
-            return ctx.body = yapi.commons.resReturn(user);
+            let result = [];
+
+            for(let i = (pageNo - 1) * pageSize; i < pageNo * pageSize; i++) {
+                if(!user[i]) break;
+                result.push(user[i]);
+            }
+
+            return ctx.body = yapi.commons.resReturn({
+                total: user.length,
+                list: result
+            });
         }catch(e){
             return ctx.body = yapi.commons.resReturn(null,402,e.message);
         }
diff --git a/server/router.js b/server/router.js
index 377b6f45..e1459adc 100644
--- a/server/router.js
+++ b/server/router.js
@@ -56,7 +56,7 @@ createAction('project', 'up', 'post', 'up')
 createAction('project', 'del', 'post', 'del')
 createAction('project', 'add_member', 'post', 'addMember')
 createAction('project', 'del_member', 'post', 'delMember')
-createAction('project', 'get_member_list.json', 'get', 'getMemberList')
+createAction('project', 'get_member_list', 'get', 'getMemberList')
 createAction('project', 'search', 'get', 'search')
 
 //interface
diff --git a/server_dist/controllers/project.js b/server_dist/controllers/project.js
index f1956733..6af4888f 100644
--- a/server_dist/controllers/project.js
+++ b/server_dist/controllers/project.js
@@ -371,7 +371,7 @@ var projectController = function (_baseController) {
 
         /**
          * 获取项目成员列表
-         * @interface /project/get_member_list.json
+         * @interface /project/get_member_list
          * @method GET
          * @category project
          * @foldnumber 10
@@ -427,7 +427,13 @@ var projectController = function (_baseController) {
                             case 18:
                                 user = _context4.sent;
 
-                                result.push(user);
+                                result.push({
+                                    _id: user._id,
+                                    email: user.email,
+                                    role: user.role,
+                                    add_time: user.add_time,
+                                    up_time: user.up_time
+                                });
 
                             case 20:
                                 _iteratorNormalCompletion = true;
@@ -564,6 +570,8 @@ var projectController = function (_baseController) {
          * @category project
          * @foldnumber 10
          * @param {Number} group_id 项目group_id,不能为空
+         * @param {Number} [pageNo] 分页页码
+         * @param {Number} [pageSize] 分页大小
          * @returns {Object} 
          * @example ./api/project/list.json
          */
@@ -572,12 +580,12 @@ var projectController = function (_baseController) {
         key: 'list',
         value: function () {
             var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(ctx) {
-                var group_id, result;
+                var group_id, pageNo, pageSize, result, resResult, i;
                 return _regenerator2.default.wrap(function _callee6$(_context6) {
                     while (1) {
                         switch (_context6.prev = _context6.next) {
                             case 0:
-                                group_id = ctx.request.query.group_id;
+                                group_id = ctx.request.query.group_id, pageNo = ctx.request.query.pageNo || 1, pageSize = ctx.request.query.pageSize || 10;
 
                                 if (group_id) {
                                     _context6.next = 3;
@@ -593,23 +601,50 @@ var projectController = function (_baseController) {
 
                             case 6:
                                 result = _context6.sent;
+                                resResult = [];
+                                i = (pageNo - 1) * pageSize;
 
-                                ctx.body = _yapi2.default.commons.resReturn(result);
-                                _context6.next = 13;
+                            case 9:
+                                if (!(i < pageNo * pageSize)) {
+                                    _context6.next = 16;
+                                    break;
+                                }
+
+                                if (result[i]) {
+                                    _context6.next = 12;
+                                    break;
+                                }
+
+                                return _context6.abrupt('break', 16);
+
+                            case 12:
+                                resResult.push(result[i]);
+
+                            case 13:
+                                i++;
+                                _context6.next = 9;
                                 break;
 
-                            case 10:
-                                _context6.prev = 10;
+                            case 16:
+                                ctx.body = _yapi2.default.commons.resReturn({
+                                    total: result.length,
+                                    list: resResult
+                                });
+                                _context6.next = 22;
+                                break;
+
+                            case 19:
+                                _context6.prev = 19;
                                 _context6.t0 = _context6['catch'](3);
 
                                 ctx.body = _yapi2.default.commons.resReturn(null, 402, e.message);
 
-                            case 13:
+                            case 22:
                             case 'end':
                                 return _context6.stop();
                         }
                     }
-                }, _callee6, this, [[3, 10]]);
+                }, _callee6, this, [[3, 19]]);
             }));
 
             function list(_x6) {
diff --git a/server_dist/controllers/user.js b/server_dist/controllers/user.js
index 43a7e6b1..b7dff615 100644
--- a/server_dist/controllers/user.js
+++ b/server_dist/controllers/user.js
@@ -618,6 +618,8 @@ var userController = function (_baseController) {
          * @method GET
          * @category user
          * @foldnumber 10
+         * @param {Number} [pageNo] 分页页码
+         * @param {Number} [pageSize] 分页大小
          * @returns {Object} 
          * @example 
          */
@@ -626,39 +628,69 @@ var userController = function (_baseController) {
         key: 'list',
         value: function () {
             var _ref9 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9(ctx) {
-                var userInst, user;
+                var pageNo, pageSize, userInst, user, result, i;
                 return _regenerator2.default.wrap(function _callee9$(_context9) {
                     while (1) {
                         switch (_context9.prev = _context9.next) {
                             case 0:
+                                pageNo = ctx.request.query.pageNo || 1, pageSize = ctx.request.query.pageSize || 10;
+
                                 if (!(this.getRole() !== 'admin')) {
-                                    _context9.next = 2;
+                                    _context9.next = 3;
                                     break;
                                 }
 
                                 return _context9.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 402, '没有权限'));
 
-                            case 2:
+                            case 3:
                                 userInst = _yapi2.default.getInst(_user2.default);
-                                _context9.prev = 3;
-                                _context9.next = 6;
+                                _context9.prev = 4;
+                                _context9.next = 7;
                                 return userInst.list();
 
-                            case 6:
+                            case 7:
                                 user = _context9.sent;
-                                return _context9.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(user));
+                                result = [];
+                                i = (pageNo - 1) * pageSize;
 
                             case 10:
-                                _context9.prev = 10;
-                                _context9.t0 = _context9['catch'](3);
-                                return _context9.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 402, _context9.t0.message));
+                                if (!(i < pageNo * pageSize)) {
+                                    _context9.next = 17;
+                                    break;
+                                }
+
+                                if (user[i]) {
+                                    _context9.next = 13;
+                                    break;
+                                }
+
+                                return _context9.abrupt('break', 17);
 
                             case 13:
+                                result.push(user[i]);
+
+                            case 14:
+                                i++;
+                                _context9.next = 10;
+                                break;
+
+                            case 17:
+                                return _context9.abrupt('return', ctx.body = _yapi2.default.commons.resReturn({
+                                    total: user.length,
+                                    list: result
+                                }));
+
+                            case 20:
+                                _context9.prev = 20;
+                                _context9.t0 = _context9['catch'](4);
+                                return _context9.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 402, _context9.t0.message));
+
+                            case 23:
                             case 'end':
                                 return _context9.stop();
                         }
                     }
-                }, _callee9, this, [[3, 10]]);
+                }, _callee9, this, [[4, 20]]);
             }));
 
             function list(_x10) {
diff --git a/server_dist/router.js b/server_dist/router.js
index a4bdd41e..7a308d3b 100644
--- a/server_dist/router.js
+++ b/server_dist/router.js
@@ -82,7 +82,7 @@ createAction('project', 'up', 'post', 'up');
 createAction('project', 'del', 'post', 'del');
 createAction('project', 'add_member', 'post', 'addMember');
 createAction('project', 'del_member', 'post', 'delMember');
-createAction('project', 'get_member_list.json', 'get', 'getMemberList');
+createAction('project', 'get_member_list', 'get', 'getMemberList');
 createAction('project', 'search', 'get', 'search');
 
 //interface
diff --git a/static/image/demo-img.png b/static/image/demo-img.png
new file mode 100644
index 00000000..6a688b19
Binary files /dev/null and b/static/image/demo-img.png differ