ソースを参照

Merge branch 'master' of http://smartcost.in.8866.org:26903/SmartCost/YangHuCost

vian 5 年 前
コミット
007283a72e

+ 12 - 3
modules/users/controllers/cld_controller.js

@@ -63,10 +63,12 @@ class CLDController {
             if (userData === null || userData === '') {
                 throw '不存在该建筑用户';
             }
+            let userList = [userData];
+            await online_facade.setOnlineTimes(userList, {});
             userData = JSON.parse(JSON.stringify(userData));
 
-            userData.company_scale = userData.company_scale === null || userData.company_scale === undefined ? '' : userModel.companyScale[userData.company_scale] + '人';
-            userData.company_type = userData.company_type === null || userData.company_type === undefined ? '' : userModel.companyType[userData.company_type];
+            userData.company_scale = userData.company_scale === null || userData.company_scale === undefined || userData.company_scale === -1 ? '' : userModel.companyScale[userData.company_scale] + '人';
+            userData.company_type = userData.company_type === null || userData.company_type === undefined || userData.company_type === -1 ? '' : userModel.companyType[userData.company_type];
             userData.province = userModel.province[userData.province];
 
             let date = new Date(userData.create_time);
@@ -249,6 +251,13 @@ class CLDController {
                 filter.loginMsg = userModel.getDayMsg(loginTime);
             }
 
+            // 排序方式
+            let sortType = request.query.sortType !== '' && request.query.sortType !== undefined ? request.query.sortType : -1;
+
+            // 排序条件
+            let sortField = request.query.sortField;
+            let sort = sortField !== '' && sortField !== undefined && sortField === 'latest_login' ? {latest_login: sortType}: {_id: sortType};
+
             // 获取用户总数
             total = await userModel.count(condition);
 
@@ -263,7 +272,7 @@ class CLDController {
             // console.log("取用户信息=========================");
             // console.log(condition);
             // 获取用户列表
-            userList = await userModel.getList(condition, page, pageSize);
+            userList = await userModel.getList(condition, page, pageSize, sort);
             await online_facade.setOnlineTimes(userList,condition);
             response.json({error: 0, msg: 'success', data: {
                 userInfo: userList,

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

@@ -283,6 +283,7 @@ class UserModel extends BaseModel {
             username: userData.username,
             email: userData.email,
             mobile: userData.mobile,
+            qq: userData.qq,
             create_time: new Date().getTime(),
             latest_login: new Date().getTime(),
             isUserActive: userData.isUserActive,
@@ -400,10 +401,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 : [];

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

@@ -28,7 +28,7 @@ module.exports = function (app) {
 
     router.get('/getUserList', cldController.getUserList);
 
-    router.get('/getUserOnlineInfo', cldController.getUserOnlineInfo);
+    router.post('/getUserOnlineInfo', cldController.getUserOnlineInfo);
 
     app.use('/cld',router)
 };

+ 109 - 0
public/web/div_resizer.js

@@ -0,0 +1,109 @@
+'use strict';
+
+/**
+ *
+ * div可拖动调整分栏
+ *
+ * 示例结构:
+ * <div id="top-div"></div>
+ * <div r-Type="height|width" div1="#top-div" div2="#bottom-div" store-id="XXX" store-version="1.0.0" min="100">
+ * <div id="bottom-div"></div>
+ *
+ * 其中:
+ * r-Type: height表示上下拖动调整, width表示左右拖动调整
+ * div1: 上(左)部结构的id
+ * div2: 下(右)部结构的id
+ * store-id:可选,存在则以该值生成key,将调整结果写入localStorage
+ * min: 可选,无则默认两部分结构相加的10%
+ *
+ * setting: {select, callback}
+ * 其中:
+ * select:选定分栏
+ * callback:回调(除了上述两个div外需要调整的,自定义放在此处)
+ *
+ * @author Mai
+ * @date 2019/3/15
+ * @version
+ */
+
+(function($){
+    $.divResizer = function(setting) {
+        const obj = $(setting.select);
+        let drag, mouseMoveCount, startPos, orgSize1, orgSize2, newSize1, newSize2, objSize;
+        // if (obj.attr('r-type') === 'height') {
+        //     obj.css('width', '100%').css('height', '1%').css('resize', 'vertical').css('cursor', 's-resize').css('float', 'top');
+        // } else {
+        //     obj.css('width', '1%').css('height', '100%').css('resize', 'horizontal').css('cursor', 'w-resize').css('float', 'left');
+        // }
+        // 根据localStorage初始化
+        if (obj.attr('store-id')) {
+            const rType = obj.attr('r-type'), version = obj.attr('store-version') ? ('-'+obj.attr('store-version')) : '' ;
+            const objSize1 = getLocalCache('v-resize-1-' + obj.attr('store-id') + version);
+            if (objSize1) {
+                $(obj.attr('div1')).css(rType, objSize1);
+            }
+            const objSize2 = getLocalCache('v-resize-2-' + obj.attr('store-id') + version);
+            if (objSize2) {
+                $(obj.attr('div2')).css(rType, objSize2);
+            }
+            if (setting.callback) { setting.callback(); }
+        }
+
+        obj.mousedown(function (e) {
+            const rType = obj.attr('r-type');
+            mouseMoveCount = 0;
+            drag = true;
+            startPos = rType === 'height' ? e.clientY : e.clientX;
+            // 获取左(上)部分的宽度(高度)
+            orgSize1 = $($(this).attr('div1'))[rType]();
+            // 获取右(下)部分的宽度(高度)
+            orgSize2 = $($(this).attr('div2'))[rType]();
+            // nav宽(高度)部分
+            objSize = $(this)[rType]();
+            //resizeElement.tooltip('hide');
+
+        });
+        $('body').mousemove(function (e) {
+            if (drag) {
+                const rType = obj.attr('r-type'), aType = obj.attr('a-type');
+                const moveSize = rType === 'height' ? e.clientY - startPos : e.clientX - startPos;
+                //实时刷新页面
+                mouseMoveCount += moveSize;
+                //当累计移动超过5个像素时,才刷新,减少刷新次数
+                if(Math.abs(mouseMoveCount) >= 5){
+                    if (aType === 'percent') {
+                        const min = obj.attr('min') ? obj.attr('min') : 10;
+                        const max = 100 - min;
+
+                        const percent1 = Math.min(Math.max((orgSize1 + moveSize) / (orgSize1 + orgSize2) * 100, min), max);
+                        $(obj.attr('div1')).css(rType, percent1 + '%');
+                        const percent2 = Math.min(Math.max((orgSize2 - moveSize) / (orgSize1 + orgSize2) * 100, min), max);
+                        $(obj.attr('div2')).css(rType, percent2 + '%');
+                    } else {
+                        const min = obj.attr('min') ? obj.attr('min') : parseInt(((orgSize1 + orgSize2) / 10).toFixed(0));
+                        const max = orgSize1 + orgSize2 - min;
+
+                        // 判断拖动范围不能超出
+                        newSize1 = Math.min(Math.max(orgSize1 + moveSize, min), max);
+                        newSize2 = Math.min(Math.max(orgSize2 - moveSize, min), max);
+
+                        $(obj.attr('div1'))[rType](newSize1);
+                        $(obj.attr('div2'))[rType](newSize2);
+                    }
+
+                    if(setting.callback) { setting.callback(); }
+                    mouseMoveCount = 0;
+                }
+            }
+        });
+        $('body').mouseup(function () {
+            if (drag) {
+                drag = false;
+                const rType = obj.attr('r-type');
+                const localId = obj.attr('store-id'), div1 = $(obj.attr('div1')), div2 = $(obj.attr('div2'));
+                setLocalCache('v-resize-1-' + localId, div1[rType]());
+                setLocalCache('v-resize-2-' + localId, div2[rType]());
+            }
+        });
+    }
+})(jQuery);

+ 1 - 1
web/building_saas/main/js/models/project_glj.js

@@ -1720,7 +1720,7 @@ ProjectGLJ.prototype.loadNewProjectGLJToCache = function (data,tIDMap) {//把新
     let unitPriceMap = this.datas.unitPriceMap;
     let mixRatioMap = this.datas.mixRatioMap;
     let mixRatioConnectData = this.datas.mixRatioConnectData;
-    let IDMap = tIDMap?tIDMap:_.indexBy(project_gljs,'id');
+    let IDMap = !_.isEmpty(tIDMap)?tIDMap:_.indexBy(project_gljs,'id');
     let tem =  IDMap[data.id];
     if(tem) return tem; //判断该工料机是否已经存在,是的话不用再次添加
     //查看是否有组成物,有组成物的话先添加组成物信息

+ 11 - 3
web/building_saas/report/html/rpt_main.html

@@ -1,7 +1,7 @@
-
+<script type="text/javascript" src="/public/web/div_resizer.js"></script>
 <div class="container-fluid">
     <div class="row">
-        <div class="col-lg-3 p-0">
+        <div class="col-auto pr-0" id="tree-view" style="width: 20%">
             <div class="print-list">
                 <!--
                 <div class="list-tools d-flex justify-content-center">
@@ -17,7 +17,8 @@
                 </div>
             </div>
         </div>
-        <div class="col-lg-9 p-0">
+        <div class="col-auto" id="main-view" style="width: 80%">
+            <div class="resize-x" id="right-spr" r-Type="width" div1="#tree-view" div2="#main-view" title="调整大小" a-type="percent"><!--调整左右高度条--></div>
             <div class="toolsbar-f d-flex justify-content-between">
                 <div class="print-toolsbar">
                     <div class="panel">
@@ -101,6 +102,7 @@
                 </div>
             </div>
         </div>
+
     </div>
 </div>
 <!--报表的弹窗-->
@@ -130,4 +132,10 @@
         }
         return SCREEN_DPI;
     }
+    $.divResizer({
+        select: '#right-spr',
+        callback: function () {
+            autoFlashHeight();
+        }
+    });
 </script>