Jelajahi Sumber

用户管理

zhangweicheng 6 tahun lalu
induk
melakukan
b715bbed9b

+ 1 - 0
modules/all_models/manager.js

@@ -24,6 +24,7 @@ let modelSchema = {
         type: Number,
         default: 0
     },
+    real_name:String,
     // 创建时间
     create_time: {
         type: Number,

+ 9 - 0
modules/all_models/user.js

@@ -10,6 +10,14 @@ import mongoose from "mongoose";
 
 let Schema = mongoose.Schema;
 let collectionName = 'users';
+let upgrade = mongoose.Schema({
+    compilationID:String,//编办ID
+    upgrade_time:Number,
+    isUpgrade:Boolean,
+    remark:String//描述:广东办刘飞 2018-06-17 启用/关闭
+}, { _id: false })
+
+
 let modelSchema = {
     // 用户名
     username: String,
@@ -43,6 +51,7 @@ let modelSchema = {
         type: Number,
         default: 0
     },
+    upgrade_list:[upgrade],
     user_type:{
         type:String,
         default:'normal'//  normal : 普通用户,test:测试用户

+ 4 - 0
modules/common/base/base_model.js

@@ -129,6 +129,10 @@ class BaseModel {
         return result.ok !== undefined && result.ok === 1;
     }
 
+    isDef(value){
+        return value !==undefined && value !==null
+    }
+
 }
 
 export default BaseModel;

+ 1 - 0
modules/common/helper/mongoose_helper.js

@@ -72,6 +72,7 @@ class MongooseHelper {
         });
     }
 
+
     /**
      * 关联查找数据
      *

+ 1 - 0
modules/users/controllers/login_controller.js

@@ -58,6 +58,7 @@ class LoginController extends BaseController {
                 .digest().toString('base64');
             let managerSession = {
                 username: managerData.username,
+                real_name:managerData.real_name,
                 loginTime: currentTime,
                 sessionToken: sessionToken,
                 userID: managerData.id,

+ 60 - 4
modules/users/controllers/user_controller.js

@@ -10,6 +10,7 @@ import UserModel from "../models/user_model";
 import Config from "../../../config/config";
 import CompilationModel from "../models/compilation_model";
 let config = require("../../../config/config.js");
+let _ = require("lodash");
 
 class UserController extends BaseController {
 
@@ -26,14 +27,14 @@ class UserController extends BaseController {
         let pageData = {};
         let userList = [];
         let compilationList =[];
+        let compilationString ='';
         let filter = request.query;
         try {
             //获取编办列表
             let  compilationModel = new CompilationModel();
-            compilationList = await compilationModel.getCompilationList();
-
-
-
+            compilationList = await compilationModel.getCompilationList({_id: 1, name: 1, is_release: 1});
+            compilationString = JSON.stringify(compilationList);
+            compilationList = JSON.parse(compilationString);//去除mongoose 格式
             let condition = userModel.getFilterCondition(request);
 
             //获取注册时间
@@ -42,6 +43,12 @@ class UserController extends BaseController {
                 filter.regtimeMsg = userModel.getDayMsg(regtime);
             }
 
+            // 已升级费用定额
+            let upGrade = request.query.upGrade;
+            if(upGrade !== '' && upGrade !== undefined){
+                let com = _.find(compilationList,{'_id':upGrade});
+                if(com) filter.upgradeCompilation = com.name;
+            }
             // 获取用户总数
             total = await userModel.count(condition);
 
@@ -62,6 +69,8 @@ class UserController extends BaseController {
         // 渲染数据
         let renderData = {
             compilationList:compilationList,
+            compilationString:compilationString,
+            adminName:request.session.managerData?request.session.managerData.real_name:'',
             userList: userList,
             pages: pageData,
             total: total,
@@ -105,6 +114,53 @@ class UserController extends BaseController {
         response.json(responseData);
     }
 
+    async findByID(request, response) {
+        let params = JSON.parse(request.body.data),
+            userIds = params.ID;
+        let userModel = new UserModel();
+        let responseData = {
+            error: 0,
+            msg: '',
+            data: null
+        };
+        try{
+            if(userIds === undefined || userIds === '') {
+                throw { code: 1, err: '参数有误或为空'};
+            }
+            let user = await userModel.getByID({ _id: userIds});
+            responseData.data = user;
+        } catch (error) {
+            console.log(error);
+            responseData.error = error.code;
+            responseData.msg = error.err;
+        }
+        response.json(responseData);
+    }
+
+
+    async updateUser(request, response) {
+        let data = JSON.parse(request.body.data);
+        let userModel = new UserModel();
+        let responseData = {
+            error: 0,
+            msg: '',
+            data: null
+        };
+        try{
+            if(data.ID === undefined || data.ID === '') {
+                throw { code: 1, err: '参数有误或为空'};
+            }
+            let user = await userModel.updateById(data.ID,data.updateData);
+            responseData.data = user;
+        } catch (error) {
+            console.log(error);
+            responseData.error = error.code;
+            responseData.msg = error.err;
+        }
+        response.json(responseData);
+    }
+
+
     /**
      * 根据用户id列表获取用户信息列表 json
      *

+ 3 - 3
modules/users/models/compilation_model.js

@@ -34,10 +34,10 @@ class CompilationModel extends BaseModel {
      *
      * @return {Promise}
      */
-    async getCompilationList() {
+    async getCompilationList(fields = null) {
         // 筛选字段
-        let field = {_id: 1, name: 1, is_release: 1, description: 1,overWriteUrl: 1, "ration_valuation.id": 1, "ration_valuation.name": 1, "ration_valuation.enable": 1,
-            "bill_valuation.id": 1, "bill_valuation.name": 1, "bill_valuation.enable": 1};
+        let field = fields == null ?{_id: 1, name: 1, is_release: 1, description: 1,overWriteUrl: 1, "ration_valuation.id": 1, "ration_valuation.name": 1, "ration_valuation.enable": 1,
+            "bill_valuation.id": 1, "bill_valuation.name": 1, "bill_valuation.enable": 1}:fields;
         let compilationData = await this.findDataByCondition({name: {$ne: ''}}, field, false);
 
         return compilationData === null ? [] : compilationData;

+ 33 - 3
modules/users/models/user_model.js

@@ -6,6 +6,7 @@
  * @version
  */
 import mongoose from "mongoose";
+import Moment from "moment";
 import BaseModel from "../../common/base/base_model";
 
 class UserModel extends BaseModel {
@@ -15,21 +16,24 @@ class UserModel extends BaseModel {
      *
      * @var {object}
      */
-    province = ['广东省', '北京市'];
+    province = ['北京', '天津', '河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '上海', '江苏', '浙江', '安徽',
+        '福建', '江西', '山东', '河南', '湖北', '湖南', '广东', '广西', '海南', '重庆', '四川', '贵州', '云南', '西藏',
+        '陕西', '甘肃', '青海', '宁夏', '新疆', '台湾', '香港', '澳门',];
 
     /**
      * 企业类型
      *
      * @var
      */
-    companyType = ['设计', '施工'];
+    companyType = ['建设单位', '设计单位',  '施工单位', '监理单位', '审核单位', '咨询公司', '招标代理', '住建部', '财政', '审计',
+        '造价管理站', '学校', '个人', '其他'];
 
     /**
      * 企业规模
      *
      * @var
      */
-    companyScale = ['1-20', '20-50', '50-100', '100+'];
+    companyScale = ['1-50', '50-100', '100-500', '500+'];
 
     /**
      * 最近天数
@@ -50,6 +54,27 @@ class UserModel extends BaseModel {
     }
 
     /**
+     * 获取用户信息
+     *
+     * @param {object} condition
+     * @param {number} page
+     * @param {Number} pageSize
+     * @return {promise}
+     */
+    async getByID(condition) {
+        let user = await this.db.findOne(condition);
+        //企业所在省份、类型、规模等转换
+        if(this.isDef(user.province)) user._doc.province = this.province[user.province];
+        if(this.isDef(user.company_type)) user._doc.company_type = this.companyType[user.company_type];
+        if(this.isDef(user.company_scale)) user._doc.company_scale = this.companyScale[user.company_scale];
+        if(this.isDef(user.create_time)) user._doc.create_time = Moment(user.create_time).format('YYYY-MM-DD HH:mm:ss');
+        if(this.isDef(user.last_login)) user._doc.last_login = Moment(user.last_login).format('YYYY-MM-DD HH:mm:ss');
+        return user;
+    }
+
+
+
+    /**
      * 获取列表
      *
      * @param {object} condition
@@ -85,6 +110,11 @@ class UserModel extends BaseModel {
         if(version !== '' && version !== undefined) {
             condition.version = version;
         }
+        // 已升级费用定额
+        let upGrade = request.query.upGrade;
+        if(upGrade !== '' && upGrade !== undefined){
+            condition.upgrade_list = {"$elemMatch":{"compilationID":upGrade,"isUpgrade":true}};
+        }
 
         let keyword = request.query.keyword;
         if (keyword !== '' && keyword !== undefined) {

+ 2 - 0
modules/users/routes/user_route.js

@@ -15,6 +15,8 @@ module.exports =function (app) {
     // action定义区域
     router.get('/', userController.auth, userController.init, userController.normalUsers);
     router.get('/search', userController.auth, userController.init, userController.search);
+    router.post('/findByID', userController.auth, userController.init, userController.findByID);
     router.post('/getUserList', userController.auth, userController.init, userController.getUserList);
+    router.post('/updateUser', userController.auth, userController.init, userController.updateUser);
     app.use("/user", router);
 };

+ 9 - 0
public/web/common_ajax.js

@@ -143,4 +143,13 @@ async function ajaxPost(url, data) {
         });
 
     });
+}
+
+
+function ajaxErrorInfo(jqXHR, textStatus, errorThrown) {
+    if(textStatus == 'timeout'){
+        alert('网络连接超时,请刷新您的网页。');
+    }else {
+        alert('url: ' + url +' error ' + textStatus + " " + errorThrown);
+    }
 }

+ 74 - 0
web/users/js/user.js

@@ -15,3 +15,77 @@ $(document).ready(function() {
         selector.prev("button").html(string + ' <span class="caret"></span>');
     });
 });
+let cacheUser = null;
+
+async function getUserInfo(ID) {
+    console.log(ID);
+    let user = await ajaxPost("/user/findByID",{ID:ID});
+    let infoString = `<tr><th>注册时间</th><td>${user.create_time}</td><th>最近登录</th><td>${user.last_login}</td></tr>
+                      <tr><th>手机</th><td >${user.mobile}</td><th>邮箱</th><td>${user.email}</td></tr>
+                      <tr><th>姓名</th><td colspan="3" id>${user.real_name}</td></tr>
+                      <tr><th>企业名称</th><td colspan="3">${user.company}</td></tr>
+                      <tr><th>企业地区</th><td>${user.province}</td><th>企业类型</th><td>${user.company_type}</td></tr>
+                      <tr><th>企业规模</th><td colspan="3">${user.company_scale}</td></tr>`;
+    $('#userInfoTable').html(infoString);
+}
+
+async function getUserUpgradeInfo(ID){
+    cacheUser  = await ajaxPost("/user/findByID",{ID:ID});
+    refreshUpgradeTabel(cacheUser);
+}
+
+function refreshUpgradeTabel(user) {
+    let compilationTable = ' <tr><th colspan="2">专业版升级</th></tr>';
+    let test = true;
+    for(let c of compilationList){
+        compilationTable += `<tr><th>${c.name}</th>
+                                <td>${getButtonHtml(c._id)}
+                                 </td> 
+                             </tr>`;
+    }
+    $('#upgrade_table').html(compilationTable);
+
+    function getButtonHtml(ID) {
+        let updateString = `<div class="btn-group"><button class="btn btn-success  disabled" disabled="disabled">已启用</button><button class="btn btn-default" title="关闭" onclick="updateUser('${ID}','close')">关闭</button></div>`;
+        let closeString = `<div class="btn-group"> <button class="btn btn-default" title="启用" onclick="updateUser('${ID}','upgrade')">启用</button> <button class="btn btn-danger disabled" disabled="disabled">已关闭</button> </div>`;
+        let upgradeInfo = _.find(user.upgrade_list,{'compilationID':ID});
+        if(upgradeInfo){
+            if(upgradeInfo.isUpgrade == true){
+                return updateString + upgradeInfo.remark;
+            }else {
+                return closeString + upgradeInfo.remark;
+            }
+        }else {
+            return closeString;
+        }
+    }
+}
+
+
+async function updateUser(compilationID,type) {
+    if(cacheUser){
+        let upgrade_list = cacheUser.upgrade_list?cacheUser.upgrade_list:[];
+        let upgradeInfo = _.find(upgrade_list,{'compilationID':compilationID});
+        if(!upgradeInfo){
+            upgradeInfo = {
+                compilationID:compilationID,//编办ID
+                upgrade_time:new Date().getTime(),
+                isUpgrade:true,
+            };
+            upgrade_list.push(upgradeInfo);
+        }
+        if(type == 'upgrade'){
+            upgradeInfo.isUpgrade = true;
+            upgradeInfo.remark = adminName + " "+ moment().format("YYYY-MM-DD") +" 启用";
+        }else {
+            upgradeInfo.isUpgrade = false;
+            upgradeInfo.remark = adminName + " "+ moment().format("YYYY-MM-DD") +" 关闭";
+        }
+
+
+        await ajaxPost("/user/updateUser",{ID:cacheUser._id,updateData:{upgrade_list:upgrade_list}});
+        cacheUser.upgrade_list = upgrade_list;
+        refreshUpgradeTabel(cacheUser);
+    }
+
+}

+ 2 - 0
web/users/views/layout/layout.html

@@ -19,6 +19,8 @@
     <script src="/web/users/js/lib/messages_zh.js"></script>
     <script src="/web/users/js/lib/bootstrap-paginator.js"></script>
     <script src="/lib/lodash/lodash.js"></script>
+    <script type="text/javascript" src="/public/web/common_ajax.js"></script>
+    <script type="text/javascript" src="/node_modules/moment/min/moment.min.js"></script>
     <!-- spreadJs -->
     <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.11.1.2.min.js"></script>
     <script>GC.Spread.Sheets.LicenseKey =  '<%- LicenseKey %>';</script>

+ 30 - 11
web/users/views/user/index.html

@@ -25,9 +25,10 @@
                 <div class="btn-group">
                     <button type="button" class="btn btn-default dropdown-toggle btn-sm" data-toggle="dropdown"
                             aria-haspopup="true" aria-expanded="false">
-                        已升级费用定额: <span class="caret"></span>
+                        已升级费用定额:<%= filter.upgradeCompilation === undefined ? '所有' : filter.upgradeCompilation %>  <span class="caret"></span>
                     </button>
                     <ul class="dropdown-menu selector">
+                        <li><a  data-value="">所有</a></li>
                         <% for(let compilation of compilationList){ %>
                         <li><a  data-value="<%= compilation._id.toString()%>"><%= compilation.name %></a></li>
                         <% } %>
@@ -53,7 +54,7 @@
                 <div class="btn-group">
                     <button type="button" class="btn btn-default dropdown-toggle btn-sm" data-toggle="dropdown"
                             aria-haspopup="true" aria-expanded="false">
-                        最新注册:<%= filter.regtimeMsg === undefined ? '所有' : filter.regtimeMsg %><span class="caret"></span>
+                        最近登录:<%= filter.regtimeMsg === undefined ? '所有' : filter.regtimeMsg %><span class="caret"></span>
                     </button>
                     <ul class="dropdown-menu selector">
                         <li><a  data-value="0">所有</a></li>
@@ -108,8 +109,8 @@
                     <td>重庆01版</td>
                     <td>登录时间</td>
                     <td><%= moment(user.create_time).format('YYYY-MM-DD HH:mm:ss') %></td>
-                    <td><a>详细</a></td>
-                    <td>升级</td>
+                    <td><a role="button" data-toggle="modal" data-target="#view" onclick='getUserInfo("<%= user._id.toString()%>")'>详细</a></td>
+                    <td><a href="#update" data-toggle="modal" data-target="#update" onclick='getUserUpgradeInfo("<%= user._id.toString()%>")'>升级</a></td>
                 </tr>
                 <% }) %>
                 </tbody>
@@ -132,13 +133,7 @@
             </div>
             <div class="modal-body">
                 <table class="table table-bordered">
-                    <tbody>
-                    <tr><th>注册时间</th><td>2017-03-03 14:29:03</td><th>最近登录</th><td>2017-03-04 14:29:03</td></tr>
-                    <tr><th>手机</th><td>12345678909</td><th>邮箱</th><td></td></tr>
-                    <tr><th>姓名</th><td colspan="3">张三</td></tr>
-                    <tr><th>企业名称</th><td colspan="3">珠海纵横创新软件有限公司</td></tr>
-                    <tr><th>企业地区</th><td>珠海</td><th>企业类型</th><td>设计</td></tr>
-                    <tr><th>企业规模</th><td colspan="3">20-50</td></tr>
+                    <tbody id="userInfoTable">
                     </tbody>
                 </table>
             </div>
@@ -149,5 +144,29 @@
     </div>
 </div>
 
+<!-- 用户升级弹窗-->
+<div class="modal fade" id="update" tabindex="-1" role="dialog">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+                <h4 class="modal-title" >产品升级</h4>
+            </div>
+            <div class="modal-body">
+                <table class="table table-bordered">
+                    <tbody id="upgrade_table">
+                    </tbody>
+                </table>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
+            </div>
+        </div>
+    </div>
+</div>
 
+<script type="text/javascript">
+    let compilationList = JSON.parse('<%- compilationString %>');
+    let adminName = '<%- adminName %>';
+</script>
 <script type="text/javascript" src="/web/users/js/user.js"></script>