Jelajahi Sumber

Merge branch 'master' into dev

zhangweicheng 4 tahun lalu
induk
melakukan
55bb67ef3e

+ 2 - 2
logs/online_logs.js

@@ -33,13 +33,13 @@ async function saveOnlineTime(req) {
         let record = await logs_model.findOne(condition);
         if(record){ //如果找到,则累加
             await logs_model.update(condition,{$inc:{'online_times' : online_times }});
-            await user_model.update(userCondition,{$inc:{'online_times' : online_times }});
+            await user_model.update(userCondition,{$inc:{'online_times' : online_times, 'all_online_times' : online_times}});
         }else {//如果没找到,则新增一条记录
             condition["online_times"] = online_times;
             let today = moment(dataString).toDate();
             condition["dateTime"] = +today;
             await logs_model.create(condition);
-            await user_model.update(userCondition,{'online_times' : online_times});
+            await user_model.update(userCondition,{'online_times' : online_times,$inc:{'all_online_times' : online_times }});
         }
     }catch (e){
         console.log("统计登录时间错误,online_times值:"+online_times);

+ 6 - 2
modules/all_models/user.js

@@ -121,10 +121,14 @@ let schema = {
     },
     welcomeShowTime:String,
     token: String,
-    online_times: {
+    online_times: {//最近一天的登录时长累计
         type: Number,
         default: 0
-    }, //最近一天的登录时长累计
+    }, 
+    all_online_times: {//所有登录时长累计
+        type: Number,
+        default: 0
+    }, 
     is_cld: {
         type: Number,
         default: 0, // 0为普通用户,时间戳代表CLD剔除用户并按时间戳排序

+ 1 - 1
web/building_saas/main/html/main.html

@@ -1341,7 +1341,7 @@
         </div>
         <div class="modal-footer">
           <a href="javascript:void(0);" class="btn btn-primary" id="property_default" data-dismiss="modal"
-            style="margin-right: 485px">恢复默认系统设置</a>
+            style="margin-right: 475px">恢复默认系统设置</a>
           <a href="javascript:void(0);" class="btn btn-primary" id="property_ok" data-dismiss="modal">确定</a>
           <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
         </div>

+ 3 - 5
web/building_saas/main/js/views/project_view.js

@@ -2013,7 +2013,8 @@ var projectObj = {
         }
         //选中的都是数字, 如果不为0则悬浮显示
         if (notNumber === false && total > 0 && counter > 1) {
-            const div = $('<div id="total-tips"><p>合计: <input type="text" id="total" readonly="readonly" style="border: none;"/></p><p><a href="javascript:void(0);">复制</a></p></div>');
+            const totalString = total.toFixed(max);
+            const div = $(`<div id="total-tips"><p>合计:<label id="total">${totalString}</label> </p><p><a href="javascript:void(0);">复制</a></p></div>`);
             div.css({
                 position: "absolute",
                 border: "1px #C0C0C0 solid",
@@ -2028,7 +2029,6 @@ var projectObj = {
             div.children("p").first().css({
                 borderBottom: "1px #C0C0C0 solid"
             });
-            const totalString = total.toFixed(max);
             // input长度
             const inputWidth = totalString.length * 8;
             // 计算是否会超出显示范围
@@ -2047,7 +2047,6 @@ var projectObj = {
                 top: y,
             });
 
-            div.children().children("#total").width(inputWidth).val(totalString);
             $("body").append(div);
             // 用于判断是否要关闭窗体
             setTimeout(function() {
@@ -2338,8 +2337,7 @@ var projectObj = {
 // 点击合计框中的复制
 $("body").on("click", "#total-tips a", function() {
     const totalElement = $(this).parent().siblings("p").find("#total");
-    totalElement.select();
-    document.execCommand("Copy");
+    sheetCommonObj.copyTextToClipboard(totalElement.text());
     $(this).text("已复制");
 });
 // 合计框点击其他位置关闭

+ 37 - 0
web/building_saas/report/js/jpc_output.js

@@ -252,6 +252,26 @@ let JpcCanvasOutput = {
             }
             ctx.restore();
         }
+        function _splitValues(cell, control, orgValues, ctx2D) {
+            //根据control的 自动折行 及 缩放优先 这俩属性 来分解cell value
+            if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_WRAP]] === 'T' && control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_SHRINK_FIRST]] !== 'T') {
+                let vals = [];
+                let validAreaTxtWidth = cell[JV.PROP_AREA][JV.PROP_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - cell[JV.PROP_AREA][JV.PROP_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
+                for (let val of orgValues) {
+                    let actW = ctx2D.measureText(val).width;
+                    if (actW > validAreaTxtWidth) {
+                        vals = vals.concat(private_splitString(val, validAreaTxtWidth, ctx2D));
+                    } else {
+                        vals.push(val);
+                    }
+                }
+                if (vals.length > orgValues.length) {
+                    for (let idx = 0; idx < vals.length; idx++) {
+                        orgValues[idx] = vals[idx];
+                    }
+                }
+            }
+        }
         function private_drawCellText(cell, fonts, controls) {
             if (cell[JV.PROP_VALUE] !== null && cell[JV.PROP_VALUE] !== undefined) {
                 let values = ("" + cell[JV.PROP_VALUE]).split('|');
@@ -277,6 +297,23 @@ let JpcCanvasOutput = {
                         values = [""];
                     }
                 }
+
+                if (font) {
+                    let dftFontHeight = parseFloat(font[JV.FONT_PROPS[1]]);
+                    let dftOthers = "";
+                    let dftFontBold = font[JV.FONT_PROPS[3]];
+                    if (dftFontBold && dftFontBold === 'T') {
+                        dftOthers = "bold " + dftOthers ;
+                    }
+                    let dftFontItalic = font[JV.FONT_PROPS[4]];
+                    if (dftFontItalic && dftFontItalic === 'T') {
+                        dftOthers = dftOthers + "italic ";
+                    }
+                    dftFontHeight = me.scaleFactor * dftFontHeight;
+                    ctx.font = dftOthers + dftFontHeight + "px " + font[JV.PROP_NAME];
+                }
+                _splitValues(cell, control, values, ctx);
+
                 let height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
                 let area = [cell[JV.PROP_AREA][JV.PROP_LEFT] + me.offsetX, cell[JV.PROP_AREA][JV.PROP_TOP] + me.offsetY, cell[JV.PROP_AREA][JV.PROP_RIGHT] + me.offsetX, cell[JV.PROP_AREA][JV.PROP_BOTTOM] + me.offsetY];
                 for (let i = 0; i < values.length; i++) {

+ 27 - 0
web/building_saas/report/js/rpt_jspdf.js

@@ -126,6 +126,27 @@ let JpcJsPDFHelper = {
             }
         }
 
+        function _splitValues(cell, control, orgValues, doc) {
+            //根据control的 自动折行 及 缩放优先 这俩属性 来分解cell value
+            if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_WRAP]] === 'T' && control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_SHRINK_FIRST]] !== 'T') {
+                let vals = [];
+                let validAreaTxtWidth = cell[JV.PROP_AREA][JV.PROP_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - cell[JV.PROP_AREA][JV.PROP_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
+                for (let val of orgValues) {
+                    let actW = doc.getTextWidth(val);
+                    if (actW > validAreaTxtWidth) {
+                        vals = vals.concat(private_splitString(val, validAreaTxtWidth, doc));
+                    } else {
+                        vals.push(val);
+                    }
+                }
+                if (vals.length > orgValues.length) {
+                    for (let idx = 0; idx < vals.length; idx++) {
+                        orgValues[idx] = vals[idx];
+                    }
+                }
+            }
+        }
+
         function private_drawCellText(doc, ctx, cell, fonts, controls) {
             if (cell[JV.PROP_VALUE] !== undefined && cell[JV.PROP_VALUE] !== null) {
                 let values = ("" + cell[JV.PROP_VALUE]).split('|');
@@ -149,6 +170,12 @@ let JpcJsPDFHelper = {
                 } else {
                     control = cell[JV.PROP_CONTROL];
                 }
+
+                if (font) {
+                    doc.setFontSize(1 * font[JV.FONT_PROPS[1]]);
+                }
+                _splitValues(cell, control, values, doc);
+
                 let height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
                 let area = [cell[JV.PROP_AREA][JV.PROP_LEFT] + offsetX, cell[JV.PROP_AREA][JV.PROP_TOP] + offsetY, cell[JV.PROP_AREA][JV.PROP_RIGHT] + offsetX, cell[JV.PROP_AREA][JV.PROP_BOTTOM] + offsetY];
                 let ah = height;

+ 23 - 0
web/building_saas/report/js/rpt_print.js

@@ -191,6 +191,27 @@ function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBo
     return rst.join("");
 }
 
+function _splitValues(cell, control, orgValues, ctx2D) {
+    //根据control的 自动折行 及 缩放优先 这俩属性 来分解cell value
+    if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_WRAP]] === 'T' && control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_SHRINK_FIRST]] !== 'T') {
+        let vals = [];
+        let validAreaTxtWidth = cell[JV.PROP_AREA][JV.PROP_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - cell[JV.PROP_AREA][JV.PROP_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
+        for (let val of orgValues) {
+            let actW = ctx2D.measureText(val).width;
+            if (actW > validAreaTxtWidth) {
+                vals = vals.concat(private_splitString(val, validAreaTxtWidth, ctx2D));
+            } else {
+                vals.push(val);
+            }
+        }
+        if (vals.length > orgValues.length) {
+            for (let idx = 0; idx < vals.length; idx++) {
+                orgValues[idx] = vals[idx];
+            }
+        }
+    }
+}
+
 function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, canvas, isHtoV, HtoVStr) {
     let orgFontHeight = parseInt(font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]]);
     let fontWeight = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold":"normal";
@@ -234,6 +255,8 @@ function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, canv
     area[JV.IDX_RIGHT] = right;
     let height = bottom - top;
     let ctx = canvas.getContext("2d");
+    ctx.font = ((font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold ":"") + ((font[JV.FONT_PROPS[JV.FONT_PROP_IDX_ITALIC]] === 'T')?"italic":"") + orgFontHeight + "px " + font[JV.PROP_NAME];
+    _splitValues(cell, control, values, ctx);
     let inner_draw_text = function (textValue) {
         let dftFontHeight = orgFontHeight;
         ctx.font = ((font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold ":"") + ((font[JV.FONT_PROPS[JV.FONT_PROP_IDX_ITALIC]] === 'T')?"italic":"") + dftFontHeight + "px " + font[JV.PROP_NAME];