-                import  projectModel from '../models/project.js'
+                import projectModel from '../models/project.js'
 import yapi from '../yapi.js'
 import baseController from './base.js'
 import interfaceModel from '../models/interface.js'
+import userModel from '../models/user.js'
+import groupModel from '../models/group'
 
 class projectController extends baseController {
 
     constructor(ctx){
         super(ctx)
         this.Model = yapi.getInst(projectModel);
+        this.groupModel = yapi.getInst(groupModel);
     }
 
     /**
@@ -100,13 +103,13 @@ class projectController extends baseController {
         
     }
      /**
-     * 添加项目
+     * 添加项目成员
      * @interface /project/add_member
      * @method POST
      * @category project
      * @foldnumber 10
      * @param {Number} id 项目id,不能为空
-     * @param {member_uid} uid 项目成员uid,不能为空
+     * @param {String} member_uid 项目成员uid,不能为空
      * @returns {Object} 
      * @example ./api/project/add_member.json
      */
@@ -132,7 +135,7 @@ class projectController extends baseController {
 
     }
      /**
-     * 添加项目
+     * 删除项目成员
      * @interface /project/del_member
      * @method POST
      * @category project
@@ -163,6 +166,47 @@ class projectController extends baseController {
             ctx.body = yapi.commons.resReturn(null, 402, e.message)
         }
     }
+
+    /**
+     * 获取项目成员列表
+     * @interface /project/get_member_list
+     * @method GET
+     * @category project
+     * @foldnumber 10
+     * @param {Number} id 项目id,不能为空
+     * @return {Object}
+     * @example ./api/project/get_member_list.json
+     */
+
+    async getMemberList(ctx) {
+        let params = ctx.request.query;
+        if(!params.id) {
+            return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');
+        }
+
+        try {
+            let project = await this.Model.get(params.id);
+            let userInst = yapi.getInst(userModel);
+            let result = [];
+
+            for(let i of project.members) {
+                let user = await userInst.findById(i);
+                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);
+        } catch(e) {
+            ctx.body = yapi.commons.resReturn(null, 402, e.message);
+        }
+    }
+
+
      /**
      * 添加项目
      * @interface /project/get
@@ -194,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)
         }
@@ -304,6 +362,35 @@ class projectController extends baseController {
              ctx.body = yapi.commons.resReturn(null, 402, e.message)
         }
     }
+
+    /**
+     * 模糊搜索项目名称或者组名称
+     * @interface /project/search
+     * @method GET
+     * @category project
+     * @foldnumber 10
+     * @param {String} q
+     * @return {Object}
+     * @example ./api/project/search.json
+    */
+    async search(ctx) {
+        const { q } = ctx.request.query;
+
+        if (!q) {
+            return ctx.body = yapi.commons.resReturn(void 0, 400, 'No keyword.')
+        }
+
+        if (!yapi.commons.validateSearchKeyword(q)) {
+            return ctx.body = yapi.commons.resReturn(void 0, 400, 'Bad query.')
+        }
+
+        let queryList = {
+            project: await this.Model.search(q),
+            group: await this.groupModel.search(q)
+        }
+        
+        return ctx.body = yapi.commons.resReturn(queryList, 200, 'ok')
+    }
 }
 
 module.exports = projectController;
diff --git a/doc/build/static/server/controllers/user.js.html b/doc/build/static/server/controllers/user.js.html
index 9d19e2a8..3ae3ccf7 100644
--- a/doc/build/static/server/controllers/user.js.html
+++ b/doc/build/static/server/controllers/user.js.html
@@ -29,12 +29,14 @@
 import yapi from '../yapi.js'
 import baseController from './base.js'
 import mongoose from 'mongoose'
+import request from 'request'
 
 const jwt = require('jsonwebtoken');
 
 class userController extends baseController{
     constructor(ctx){
         super(ctx)
+        this.Model = yapi.getInst(userModel);
     }
     /**
      * 用户登录接口
@@ -65,17 +67,10 @@ class userController extends baseController{
         if(!result){
             return ctx.body = yapi.commons.resReturn(null,404,'该用户不存在');  
         }else if(yapi.commons.generatePassword(password, result.passsalt) === result.password){ 
-            let token = jwt.sign({uid: result._id},result.passsalt,{expiresIn: '7 days'});            
-            ctx.cookies.set('_yapi_token', token, {
-                expires: yapi.commons.expireDate(7),
-                httpOnly: true
-            })
-            ctx.cookies.set('_yapi_uid', result._id, {
-                expires: yapi.commons.expireDate(7),
-                httpOnly: true
-            })
+            this.setLoginCookie(result._id, result.passsalt)
             
             return ctx.body = yapi.commons.resReturn({
+                username: result.username,
                 uid: result._id,
                 email: result.email,
                 add_time: result.add_time,
@@ -104,6 +99,146 @@ class userController extends baseController{
     }
 
 
+    /**
+     *  第三方登录需要提供一个request方法和 token字段,暂时只支持qunar第三方
+     * @return {email: String, username: String}
+     */
+    thirdQunarLogin(){
+        return {
+            request: (token) => {
+                return new Promise((resolve, reject) =>{
+                    request('http://qsso.corp.qunar.com/api/verifytoken.php?token=' + token ,function (error, response, body) {
+                        if (!error && response.statusCode == 200) {
+                            let result = JSON.parse(body);
+                            if(result && result.ret === true){
+                                let ret = {
+                                    email: result.userId + '@qunar.com',
+                                    username: result.data.userInfo.name
+                                }
+                                resolve(ret)  
+                            }else{
+                                reject(result)
+                            }                        
+                        }
+                        reject(error)
+                    })
+                })
+            },
+            tokenField: 'token',
+        }
+    }
+
+
+
+    async loginByToken(ctx){
+        let config = this.thirdQunarLogin();
+
+        let token = ctx.request.body[config.tokenField] || ctx.request.query[config.tokenField];
+        
+        try{
+            let ret = await config.request(token);
+            let login = await this.handleThirdLogin(ret.email, ret.username);
+            if(login === true){
+                yapi.commons.log('login success');
+                ctx.redirect('/')
+            }
+        }catch(e){
+            yapi.commons.log(e.message, 'error')
+            ctx.redirect('/')
+        }
+    }
+
+    async handleThirdLogin(email, username){
+        let user, data, passsalt;       
+        var userInst = yapi.getInst(userModel); 
+        try{
+            user = await userInst.findByEmail(email);
+            if(!user ||  !user._id){
+                passsalt = yapi.commons.randStr();
+                data = {
+                    username: username,
+                    password: yapi.commons.generatePassword(passsalt, passsalt),
+                    email: email,
+                    passsalt: passsalt,
+                    role: 'member',
+                    add_time: yapi.commons.time(),
+                    up_time: yapi.commons.time()
+                }
+                user = await userInst.save(data);
+            }
+            
+            this.setLoginCookie(user._id, user.passsalt)
+            return true;
+        }catch(e){            
+            console.error(e.message)
+            return false;
+        }
+    }
+
+    /**
+     * 修改用户密码
+     * @interface /user/change_password
+     * @method POST
+     * @category user
+     * @param {Number} uid 用户ID
+     * @param {Number} [old_password] 旧密码, 非admin用户必须传
+     * @param {Number} password 新密码
+     * @return {Object}
+     * @example ./api/user/change_password
+     */
+    async changePassword(ctx){
+        let params = ctx.request.body;
+        let userInst = yapi.getInst(userModel);
+        if(this.getRole() !== 'admin' && params.uid != this.getUid()){
+            console.log(this.getRole(), this.getUid());
+            return ctx.body = yapi.commons.resReturn(null, 402, '没有权限');
+        }
+        if(this.getRole() !== 'admin') {
+            if(!params.old_password) {
+                return ctx.body = yapi.commons.resReturn(null, 400, '旧密码不能为空');
+            }
+
+            let user = await userInst.findById(params.uid);
+            if(yapi.commons.generatePassword(params.old_password, user.passsalt) !== user.password) {
+                return ctx.body = yapi.commons.resReturn(null, 402, '旧密码错误');
+            }
+        }
+
+        let passsalt = yapi.commons.randStr();
+        let data = {
+            up_time: yapi.commons.time(),
+            password: yapi.commons.generatePassword(params.password, passsalt),
+            passsalt: passsalt
+        };
+        try{
+            let result = await userInst.update(params.uid, data);
+            ctx.body = yapi.commons.resReturn(result);
+        }catch(e){
+            ctx.body = yapi.commons.resReturn(null, 401, e.message);
+        }
+    }
+
+    async forgetPassword(ctx){
+        
+    }
+
+    async resetPassword(ctx){
+
+    }
+
+    setLoginCookie(uid, passsalt){
+        let token = jwt.sign({uid: uid},passsalt,{expiresIn: '7 days'});            
+        this.ctx.cookies.set('_yapi_token', token, {
+            expires: yapi.commons.expireDate(7),
+            httpOnly: true
+        })
+        this.ctx.cookies.set('_yapi_uid', uid, {
+            expires: yapi.commons.expireDate(7),
+            httpOnly: true
+        })
+    }
+
+
     /**
      * 用户注册接口
      * @interface /user/reg
@@ -141,15 +276,20 @@ class userController extends baseController{
             add_time: yapi.commons.time(),
             up_time: yapi.commons.time()
         }
+        if(!data.username){
+            data.username = data.email.substr(0, data.email.indexOf('@'));
+        }
         try{
             let user = await userInst.save(data);
+            this.setLoginCookie(user._id, user.passsalt)
             
             ctx.body = yapi.commons.resReturn({
                 uid: user._id,
                 email: user.email,
+                username: user.username,
                 add_time: user.add_time,
                 up_time: user.up_time,
-                role: 'member',
+                role: 'member'
             });
             yapi.commons.sendMail({
                 to: params.email,
@@ -167,26 +307,41 @@ 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, 'Without permission.');
-            }
+            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);
         }
     }
 
     /**
-     * 获取用户列表
-     * @interface /user/list
+     * 获取用户个人信息
+     * @interface /user/find
      * @method GET
      * @param id 用户uid
      * @category user
@@ -196,12 +351,9 @@ class userController extends baseController{
      */
 
     async findById(ctx){    //根据id获取用户信息
-         try{             
+         try{
             var userInst = yapi.getInst(userModel);
             let id = ctx.request.body.id;
-            if(this.getUid() != id){
-                return ctx.body = yapi.commons.resReturn(null, 402, 'Without permission.');
-            }
             let result = await userInst.findById(id);
             return ctx.body = yapi.commons.resReturn(result);
         }catch(e){
@@ -210,7 +362,7 @@ class userController extends baseController{
     }
 
     /**
-     * 获取用户列表,只有admin用户才有此权限
+     * 删除用户,只有admin用户才有此权限
      * @interface /user/del
      * @method POST
      * @param id 用户uid
@@ -233,20 +385,66 @@ class userController extends baseController{
         }
     }
 
-    
+    /**
+     * 更新用户个人信息
+     * @interface /user/update
+     * @method POST
+     * @param username String
+     * @param email String
+     * @category user
+     * @foldnumber 10
+     * @returns {Object} 
+     * @example 
+     */
     async update(ctx){    //更新用户信息
         try{
             var userInst = yapi.getInst(userModel);
             let id = this.getUid();
-            let data ={};
+            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)
-            let result = await userInst.update(id,data);
+
+            if(data.email){
+                var checkRepeat = await userInst.checkRepeat(data.email);//然后检查是否已经存在该用户
+                if(checkRepeat>0){
+                    return ctx.body = yapi.commons.resReturn(null,401,'该email已经注册');
+                }
+            }
+
+
+            let result = await userInst.update(id, data);
             ctx.body = yapi.commons.resReturn(result);
         }catch(e){
             ctx.body = yapi.commons.resReturn(null,402,e.message);
         }
     }
+
+    /**
+     * 模糊搜索用户名或者email
+     * @interface /user/search
+     * @method GET
+     * @category user
+     * @foldnumber 10
+     * @param {String} q
+     * @return {Object}
+     * @example ./api/user/search.json
+    */
+    async search(ctx) {
+        const { q } = ctx.request.query;
+
+        if (!q) {
+            return ctx.body = yapi.commons.resReturn(void 0, 400, 'No keyword.')
+        }
+
+        if (!yapi.commons.validateSearchKeyword(q)) {
+            return ctx.body = yapi.commons.resReturn(void 0, 400, 'Bad query.')
+        }
+        
+        let queryList = await this.Model.search(q);
+        return ctx.body = yapi.commons.resReturn(queryList, 200, 'ok')
+    }
 }
 
 module.exports = userController
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/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 ec46e45c..477edad0 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 b4e86a46..21eae125 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