浏览代码

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/YangHuOperation

TonyKang 4 年之前
父节点
当前提交
11b00dd11e

文件差异内容过多而无法显示
+ 23 - 1
config/config.js


+ 2 - 1
modules/all_models/compilation.js

@@ -74,6 +74,7 @@ let modelSchema = {
     categoryID: {
         type: Number,
         default: 12 // 总部id
-    }
+    },
+    defaultLocation:String//默认工程所在地
 };
 mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));

+ 9 - 1
modules/all_models/user.js

@@ -65,7 +65,15 @@ let modelSchema = {
     user_type:{
         type:String,
         default:'normal'//  normal : 普通用户,test:测试用户
-    }
+    },
+    online_times: {
+        type: Number,
+        default: 0
+    }, //最近一天的登录时长累计
+    is_cld: {
+        type: Number,
+        default: 0, // 0为普通用户,时间戳代表CLD剔除用户并按时间戳排序
+    },
 };
 mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
 

+ 6 - 0
modules/common/const/locationList.js

@@ -0,0 +1,6 @@
+const locationList = ['北京','天津','河北','山西','内蒙古','辽宁',
+'吉林','黑龙江','上海','江苏','浙江','安徽','福建','江西','山东','河南',
+'湖北','湖南','四川','贵州','云南','西藏','陕西','甘肃','青海','宁夏','新疆',
+'广东','广西','海南','重庆']
+
+export default locationList

+ 1 - 2
modules/ration_repository/models/ration_item.js

@@ -1065,8 +1065,7 @@ rationItemDAO.prototype.batchUpdateSectionIdFromExcel = async function(data) {
         }
         sectionIDs.push(sectionId);
         // 取费专业
-        let feeType = tmp[1] ? parseInt(tmp[1]) : null;
-        feeType = isNaN(feeType) || feeType <= 0 ? null : feeType;
+        let feeType = tmp[1] || '';
         let name = tmp[4];
         name = name ? name : '';
         let caption = tmp[5];

+ 25 - 0
modules/users/controllers/compilation_controller.js

@@ -26,6 +26,8 @@ import basicInfoFacade from "../../basic_info_lib/facade/basic_info_facade";
 import progressiveFacade from "../../progressive_interval_lib/facade/progressive_facade";
 import vvTaxFacade from "../../vehicleVessel_lib/facade/vvTax_facade";
 import {default as category, List as categoryList} from "../../common/const/category_const.js";
+import locationList from  "../../common/const/locationList";
+
 let config = require("../../../config/config.js");
 const fs = require('fs');
 
@@ -71,6 +73,7 @@ class CompilationController extends BaseController {
             id: id,
             compilationList: compilationList,
             categoryList: categoryList,
+            locationList:locationList,
             selectedCompilation: selectedCompilation,
             title : config[process.env.NODE_ENV].title?config[process.env.NODE_ENV].title:'养护云版',
             layout: 'users/views/layout/layout',
@@ -718,6 +721,28 @@ class CompilationController extends BaseController {
             response.json({error: 1, message: '更新数据错误', data: null});
         }
     }
+      /**
+     * 更改编办默认工程所在工
+     *
+     * @param request
+     * @param response
+     * @return {Promise.<void>}
+     */
+    async changeLocation(request, response) {
+        let valuationId = request.body.id;
+        let location = request.body.location;
+        try {
+            let compilationModel = new CompilationModel();
+            let result = await compilationModel.updateLocation(valuationId, location);
+            if (result) {
+                response.json({error: 0, message: '', data: null});
+            } else {
+                response.json({error: 1, message: '更新数据错误', data: null});
+            }
+        } catch(error) {
+            response.json({error: 1, message: '更新数据错误', data: null});
+        }
+    }
 
 }
 

+ 107 - 0
modules/users/controllers/user_controller.js

@@ -7,6 +7,7 @@
  */
 import BaseController from "../../common/base/base_controller";
 import UserModel from "../models/user_model";
+const CLDModel = require("../models/cld_model");
 import Config from "../../../config/config";
 import CompilationModel from "../models/compilation_model";
 let config = require("../../../config/config.js");
@@ -175,6 +176,91 @@ class UserController extends BaseController {
         response.render('users/views/user/test_user', renderData);
     }
 
+    /**
+     * cld剔除用户列表
+     *
+     * @param {object} request
+     * @param {object} response
+     * @return {void}
+     */
+    async cldUsers(request, response) {
+        let userModel = new UserModel();
+        let total = 0;
+        let pageData = {};
+        let userList = [];
+        let compilationList =[];
+        let compilationString ='';
+        let compilationMap = {};
+        let filter = request.query;
+        try {
+            //获取编办列表
+            let  compilationModel = new CompilationModel();
+            compilationList = await compilationModel.getCompilationList({_id: 1, name: 1, is_release: 1});
+            compilationString = JSON.stringify(compilationList);
+            compilationMap = _.keyBy(compilationList,'_id');//4.17后的版本没有indexBy方法,改成了keyBy
+            let condition = userModel.getFilterCondition(request);
+            //设置搜索普通用户:
+            condition.user_type = 'normal';
+            condition.is_cld = {$exists:true, $ne: 0};
+
+            //获取注册时间
+            let regtime = request.query.regtime;
+            if(regtime !== '' && regtime !== undefined){
+                filter.regtimeMsg = userModel.getDayMsg(regtime);
+            }
+
+            //获取注册时间
+            let loginTime = request.query.loginTime;
+            if(loginTime !== '' && loginTime !== undefined){
+                filter.loginMsg = userModel.getDayMsg(loginTime);
+            }
+
+            // 获取用户总数
+            total = await userModel.count(condition);
+
+            // 分页数据
+            let page = request.query.page === undefined ? 1 : request.query.page;
+            pageData = {
+                current: page,
+                total: Math.ceil(total / Config.pageSize),
+                queryData: response.locals.urlQuery
+            };
+            // console.log("取用户信息=========================");
+            // console.log(condition);
+            // 获取用户列表
+            userList = await userModel.getList(condition, page, Config.pageSize, {is_cld:-1});
+            // await online_facade.setOnlineTimes(userList,condition);
+            // console.log(userList)
+        } catch (error) {
+            console.log(error);
+        }
+
+        // 用户管理二级菜单独立出来
+        let secondMenu = response.locals.secondMenu;
+        let userMenu = [];
+        for (let second in secondMenu) {
+            userMenu.push(secondMenu[second]);
+        }
+
+        // 渲染数据
+        let renderData = {
+            compilationList:compilationList,
+            compilationString:compilationString,
+            compilationMap:compilationMap,
+            adminName:request.session.managerData?request.session.managerData.real_name:'',
+            userList: userList,
+            pages: pageData,
+            total: total,
+            filter: filter,
+            model: userModel,
+            userMenu: userMenu,
+            title : config[process.env.NODE_ENV].title?config[process.env.NODE_ENV].title:'养护云版',
+            layout: 'users/views/layout/layout',
+            LicenseKey:config.getLicenseKey(process.env.NODE_ENV)
+        };
+        response.render('users/views/user/cld', renderData);
+    }
+
 
     /**
      * 获取搜索用户json
@@ -294,6 +380,27 @@ class UserController extends BaseController {
         response.json(responseData);
     }
 
+    async updateCldUser(request, response) {
+        let userModel = new UserModel();
+        let responseData = {
+            error: 0,
+            msg: '',
+            data: null
+        };
+        try{
+            let cldModel = new CLDModel();
+            let cldUserList = await cldModel.getAllStaff();
+            cldUserList = JSON.parse(cldUserList);
+            await userModel.updateAllStaff(cldUserList);
+            responseData.data = true;
+        } catch (error) {
+            console.log(error);
+            responseData.error = error.code;
+            responseData.msg = error.err;
+        }
+        response.json(responseData);
+    }
+
     /**
      * 根据用户id列表获取用户信息列表 json
      *

+ 45 - 0
modules/users/models/cld_model.js

@@ -0,0 +1,45 @@
+'use strict';
+
+/**
+ * cld接口模型
+ *
+ * @author EllisRan.
+ * @date 2020/12/4
+ * @version
+ */
+const Request = require("request");
+
+class CLDModel {
+
+    CLDUrl = 'http://cld.smartcost.com.cn';
+
+    /**
+     * 获取cld所有员工信息
+     *
+     * @return {Promise}
+     */
+    async getAllStaff() {
+        let postData = {
+            url: this.CLDUrl + '/api/building/staff/list',
+            encoding: 'utf8'
+        };
+        return new Promise(function (resolve, reject) {
+            try {
+                // 请求接口
+                Request.post(postData, function (err, postResponse, body) {
+                    if (err) {
+                        throw '请求错误';
+                    }
+                    if (postResponse.statusCode !== 200) {
+                        throw 'CLD通讯失败!';
+                    }
+                    resolve(body);
+                });
+            } catch (error) {
+                reject([]);
+            }
+        });
+    }
+}
+
+module.exports = CLDModel;

+ 12 - 1
modules/users/models/compilation_model.js

@@ -36,7 +36,7 @@ class CompilationModel extends BaseModel {
      */
     async getCompilationList(fields = null) {
         // 筛选字段
-        let field = fields == null ?{_id: 1, name: 1, is_release: 1,release_time:1, categoryID: 1, description: 1,overWriteUrl: 1,example: 1, "ration_valuation.id": 1, "ration_valuation.name": 1, "ration_valuation.enable": 1,
+        let field = fields == null ?{_id: 1, name: 1, is_release: 1,release_time:1, defaultLocation:1,categoryID: 1, description: 1,overWriteUrl: 1,example: 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);
 
@@ -375,6 +375,17 @@ class CompilationModel extends BaseModel {
         return await this.updateById(compilationId, {categoryID: category});
     }
 
+     /*
+     * 设置工程默认所在地
+     *
+     * @param {String} compilationId
+     * @param {int} location
+     * @return {Promise}
+     * */
+    async updateLocation(compilationId, location) {
+        return await this.updateById(compilationId, {defaultLocation: location});
+    }
+
 }
 
 export default CompilationModel;

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

@@ -100,10 +100,10 @@ class UserModel extends BaseModel {
      * @param {Number} pageSize
      * @return {promise}
      */
-    async getList(condition = null, page = 1, pageSize = 30) {
+    async getList(condition = null, page = 1, pageSize = 30, sort = {_id:-1}) {
         page = parseInt(page);
         page = page <= 1 ? 1 : page;
-        let option = {pageSize: pageSize, offset: parseInt((page - 1) * pageSize), sort: {_id:-1}};
+        let option = {pageSize: pageSize, offset: parseInt((page - 1) * pageSize), sort: sort};
 
         let userList = await this.db.find(condition, null, option);
         userList = userList.length > 0 ? userList : [];
@@ -226,6 +226,16 @@ class UserModel extends BaseModel {
         await this.db.model.deleteOne({_id:mongoose.Types.ObjectId(userID)});
         return "success";
     }
+
+    async updateAllStaff(userList) {
+        for (const user of userList) {
+            const users = await this.findDataByCondition({ mobile: user.telephone });
+            if(users && users.is_cld === 0) {
+                await this.db.model.updateMany({"_id":users._id},{"is_cld":Date.parse(new Date())/1000});
+            }
+        }
+        return "success";
+    }
 }
 
-export default UserModel;
+export default UserModel;

+ 1 - 1
modules/users/routes/compilation_route.js

@@ -34,6 +34,6 @@ module.exports = function (app) {
     router.post('/copyRationLibs', compilationController.auth, compilationController.init, compilationController.copyRationLibs);
 
     router.post('/changeCategory', compilationController.auth, compilationController.init, compilationController.changeCategory);
-
+    router.post('/changeLocation', compilationController.auth, compilationController.init, compilationController.changeLocation);
     app.use("/compilation", router);
 };

+ 3 - 1
modules/users/routes/user_route.js

@@ -15,11 +15,13 @@ module.exports =function (app) {
     // action定义区域
     router.get('/', userController.auth, userController.init, userController.normalUsers);
     router.get('/testUser', userController.auth, userController.init, userController.testUsers);
+    router.get('/cldUser', userController.auth, userController.init, userController.cldUsers);
     router.get('/search', userController.auth, userController.init, userController.search);
     router.post('/findByID', userController.auth, userController.init, userController.findByID);
     router.post('/getOnlineInfo', userController.auth, userController.init, userController.getOnlineInfo);
     router.post('/getUserList', userController.auth, userController.init, userController.getUserList);
     router.post('/updateUser', userController.auth, userController.init, userController.updateUser);
+    router.post('/updateCldUser', userController.auth, userController.init, userController.updateCldUser);
     router.post('/deleteUser', userController.auth, userController.init, userController.deleteUser);
     app.use("/user", router);
-};
+};

+ 1 - 15
web/maintain/ration_repository/js/ration.js

@@ -76,7 +76,7 @@ let rationOprObj = {
             {headerName:"机械费",headerWidth:80,dataCode:"machinePrice", dataType: "Number", formatter: "0.00", hAlign: "right"},*/
             {headerName:"基价",headerWidth:80,dataCode:"basePrice", dataType: "Number", hAlign: "right"},
             {headerName:"显示名称(以%s表示参数)",headerWidth:240,dataCode:"caption", dataType: "String"},
-            {headerName:"取费专业",headerWidth:70,dataCode:"feeType", dataType: "String", hAlign: "center"}
+            {headerName:"取费专业",headerWidth:70,dataCode:"feeType", dataType: "String", hAlign: "center", formatter: "@"}
         ],
         view:{
             comboBox:[
@@ -459,16 +459,6 @@ let rationOprObj = {
 
                         }
                     }
-                    else if(dataCode === 'feeType'){//取费专业控制为整数 20200928 这个改为文本
-                      updateArr.push(rObj);
-                        // if(me.isInt(rObj[dataCode])){
-                        //     updateArr.push(rObj);
-                        // }
-                        // else {
-                        //     rObj[dataCode] = '';
-                        //     args.sheet.setValue(args.row, args.col, typeof me.currentEditingRation[dataCode] !== 'undefined' && me.currentEditingRation[dataCode] ? me.currentEditingRation[dataCode] : '');
-                        // }
-                    }
                     else{
                         updateArr.push(rObj);
                     }
@@ -559,10 +549,6 @@ let rationOprObj = {
                             items[i][me.setting.header[col].dataCode] = cacheSection[rowIdx][me.setting.header[col].dataCode];
                         }
                     }
-                    if(items[i].feeType && !me.isInt(items[i].feeType)){
-                        items[i].feeType = '';
-                        me.workBook.getSheet(0).setValue(rowIdx, 8, '');
-                    }
                     if(info.cellRange.col === 0){
                         if(me.rationsCodes.indexOf(items[i].code.toString()) === -1){
                             items[i].ID = cacheSection[rowIdx].ID;

+ 14 - 0
web/users/js/compilation.js

@@ -523,6 +523,20 @@ $(document).ready(function() {
         });
     })
 
+    // 选择默认所在地
+    $('#location-select').change(function () {
+        $.ajax({
+            url: '/compilation/changeLocation',
+            type: 'post',
+            data: {id: id, location: $(this).val()},
+            dataType: "json",
+            success: function(response) {
+                if (response.error !== 0) {
+                    alert('更改失败');
+                }
+            }
+        });
+    })
 });
 
 /**

+ 53 - 4
web/users/js/user.js

@@ -40,6 +40,26 @@ $(document).ready(function() {
             }
         }
     });
+    $('#remove-cldUser').click(async function () {
+        const id = $(this).attr('data-uid');
+        if(id !== '') {
+            try {
+                await ajaxPost("/user/updateUser",{ID:id,updateData:{is_cld:0}});
+                window.location.reload();
+            }catch (err){
+                console.log(err);
+            }
+        }
+    });
+
+    $('#add-allCldUser').click(async function () {
+        try {
+            await ajaxPost("/user/updateCldUser", {});
+            window.location.reload();
+        }catch (err){
+            console.log(err);
+        }
+    })
 });
 let cacheUser = null;
 
@@ -61,13 +81,12 @@ async function getOnlineInfo(filter) {
 
 async function getUserInfo(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>
+    let infoString = `<tr><th>注册时间</th><td>${user.create_time}</td><th>最近登录</th><td>${moment(user.latest_login).format('YYYY-MM-DD HH:mm:ss')}</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>`;
+                      <tr><th>企业名称</th><td colspan="3">${user.company}</td></tr>`;
     $('#userInfoTable').html(infoString);
+    $('#remove-cldUser').attr('data-uid', ID);
 }
 
 function deleteUser(userID) {
@@ -75,6 +94,36 @@ function deleteUser(userID) {
     $("#userID").val(userID);
 }
 
+function searchUser() {
+    const keyword = $.trim($('#search_keyword').val());
+    if (keyword === '') {
+        alert("请输出查询用户信息!");
+    }
+    CommonAjax.get(`/user/search?keyword=` + keyword, function (result) {
+        if (result.error === 0) {
+            let html = '';
+            for (const user of result.data) {
+                html += `<tr><td>${user.real_name}</td><td>${user.email}</td><td>${user.mobile}</td><td>` + (user.is_cld === 0 ? `<a href="javascript:void(0);" onclick="addCldUser(this, '${user._id}')">添加</a>` : '已添加') + `</td></tr>`;
+            }
+            $('#search_user_list').html(html);
+        } else {
+            alert(result.msg);
+        }
+    });
+    return false;
+}
+
+async function addCldUser($this, id) {
+    try {
+        await ajaxPost("/user/updateUser",{ID:id,updateData:{is_cld:Date.parse(new Date())/1000}});
+        const _self = $($this).parents('td');
+        $this.remove();
+        _self.text('已添加');
+    }catch (err){
+        console.log(err);
+    }
+}
+
 async function getUserUpgradeInfo(ID){
     try {
         cacheUser  = await ajaxPost("/user/findByID",{ID:ID});

+ 8 - 0
web/users/views/compilation/index.html

@@ -109,6 +109,14 @@
                         <% }) %>
                     </select>
                 </td></tr>
+                <tr><td><p>默认工程所在地</p>
+                    <select class="form-control" style="width:200px" id="location-select">
+                        <option value=""></option>
+                        <% locationList.forEach(function(location) { %>
+                            <option value="<%= location %>" <% if (selectedCompilation.defaultLocation !== undefined && location === selectedCompilation.defaultLocation) { %>selected="selected"<% } %> ><%= location %></option>
+                            <% }) %>
+                    </select>
+                </td></tr>
             </table>
         </div>
         <input type="hidden" name="id" value="<%= selectedCompilation._id %>" id="compilation-id">

+ 122 - 0
web/users/views/user/cld.html

@@ -0,0 +1,122 @@
+<div class="panel-content">
+    <div class="panel-title fluid">
+        <div class="title-main">
+            <% for (let menu of userMenu) { %>
+            <% if (menu.title === secondMenu[action].title) { %>
+            <%= menu.title %>
+            <% } else { %>
+            <a href="<%= menu.url %>" class="btn btn-primary btn-link" style="margin-left: 0;margin-right: 12px"><%= menu.title %></a>
+            <% } %>
+            <% } %>
+            <a href="#news-add" data-toggle="modal" data-target="#news-add" class="btn btn-primary btn-sm pull-right">添加用户</a></h2>
+            <a href="javascript:void(0)" id="add-allCldUser" class="btn btn-warning btn-sm pull-right">一键增加所有CLD员工用户</a></h2>
+        </div>
+    </div>
+    <div class="content-wrap">
+        <div class="c-header">
+            <form class="form-inline" method="get" action="" id="searchUser">
+                <!--结果-->
+                <div class="btn-group">
+                    &nbsp;共 <%= total %> 条结果
+                </div>
+                <!--搜索-->
+                <div class="btn-group">
+                    <div class="input-group">
+                        <input type="text" name="keyword" class="form-control input-sm" value="<%= filter.keyword === undefined ? '' : filter.keyword %>" placeholder="手机/邮箱/姓名/公司">
+                        <span class="input-group-btn">
+                        <button class="btn btn-default btn-sm" type="submit">
+                            <i class="glyphicon glyphicon-search"></i>
+                        </button>
+                    </span>
+                    </div>
+                </div>
+            </form>
+        </div>
+        <div class="c-body">
+            <table class="table">
+                <thead>
+                <tr>
+                    <th width="350">注册手机/QQ</th>
+                    <th>姓名</th>
+                    <th>企业名称</th>
+                    <th>最近使用 </th>
+                    <th width="180">最近登录</th>
+                    <th>详细</th>
+                </tr>
+                </thead>
+                <tbody>
+                <% userList.forEach(function (user){ %>
+                <tr>
+                    <td><%= user.mobile %><br><%= user.qq %></td>
+                    <td><%= user.real_name %></td>
+                    <td><%= user.company %></td>
+                    <td><%= compilationMap[user.latest_used]?compilationMap[user.latest_used].name:""%></td>
+                    <td><%= user.latest_login?moment(user.latest_login).tz("Asia/Shanghai").format('YYYY-MM-DD HH:mm:ss'):"" %></td>
+                    <td><a role="button" data-toggle="modal" data-target="#view" onclick='getUserInfo("<%= user._id.toString()%>")'>详细</a></td>
+                </tr>
+                <% }) %>
+                </tbody>
+            </table>
+            <nav aria-label="Page navigation">
+                <%include ../layout/page.html %>
+            </nav>
+        </div>
+    </div>
+</div>
+
+
+<!-- 弹窗查看用户详情-->
+<div class="modal fade" id="view" 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="userInfoTable">
+                    </tbody>
+                </table>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-danger" id="remove-cldUser" data-uid="">移除该账号</button>
+                <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!-- 弹窗添加-->
+<div class="modal fade" id="news-add" 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">
+                <form class="input-group" method="get" action="/user/search" onsubmit="searchUser(); return false;" style="margin-bottom:10px">
+                    <input class="form-control input-sm" placeholder="手机/邮箱/姓名" type="text" name="keyword" id="search_keyword">
+                    <span class="input-group-btn">
+			        <button class="btn btn-default btn-sm" type="submit"><i class="glyphicon glyphicon-search"></i></button>
+			      </span>
+                </form>
+                <table class="table table-sm table-bordered">
+                    <tr><th>姓名</th><th>邮箱</th><th>手机</th><th>添加</th></tr>
+                    <tbody id="search_user_list">
+                    </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>

+ 0 - 1
web/users/views/user/index.html

@@ -8,7 +8,6 @@
             <a href="<%= menu.url %>" class="btn btn-primary btn-link" style="margin-left: 0;margin-right: 12px"><%= menu.title %></a>
             <% } %>
             <% } %>
-            <!--<h2><%= secondMenu[action].title %><a href="/user/testUser" class="btn btn-primary btn-link">测试用户</a></h2>-->
         </div>
     </div>
     <div class="content-wrap">