Просмотр исходного кода

Merge branch '1.0.0_online' of http://192.168.1.41:3000/SmartCost/ConstructionOperation into 1.0.0_online

zhongzewei 6 лет назад
Родитель
Сommit
61ce48158d

+ 4 - 5
config/config.js

@@ -15,7 +15,7 @@ module.exports = {
             useMongoClient: true
         }
     },
-    pp:{ server: "172.18.111.231",
+    pp:{  server: "112.74.42.187",
         port: "27017",
         options:{
             user:'smartcost',
@@ -25,10 +25,9 @@ module.exports = {
             },
             connectTimeoutMS: 50000,
             useMongoClient: true
-        }
-    },
-    ab:{  server: "112.74.42.187",
-        port: "27017",
+        }},
+    prod_s:{  server: "112.74.42.187",
+        port: "28066",
         options:{
             user:'smartcost',
             pass:'SmartCost3850888',

+ 29 - 4
modules/reports/rpt_component/jpc_flow_tab.js

@@ -1115,6 +1115,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 }
                 me.pageSumValLst.push(rowGrandTotal);
                 //grouping content
+                let grpCntIdx = 0;
                 for (let rowIdx = 0; rowIdx < contentValuesIdx.length; rowIdx++) {
                     if (contentValuesIdx[rowIdx][1] === JV.DISPLAY_VAL_TYPE_GROUP) {
                         for (let grpIdx = 0; grpIdx < rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_GROUP][JV.PROP_GROUP_LINES].length; grpIdx++) {
@@ -1130,10 +1131,11 @@ JpcFlowTabSrv.prototype.createNew = function(){
                                         }
                                     }
                                 }
-                                let lineRst = me.outputTabGrpLine(band, grp_line, page, contentValuesIdx[rowIdx], contentValuesIdx.length, rowIdx, 1, 0, unitFactor, true, controls, multiColIdx);
+                                let lineRst = me.outputTabGrpLine(band, grp_line, page, contentValuesIdx[rowIdx], contentValuesIdx.length, rowIdx, 1, 0, unitFactor, true, controls, multiColIdx, grpCntIdx, $CURRENT_RPT);
                                 rst = rst.concat(lineRst);
                             }
                         }
+                        grpCntIdx++;
                     }
                 }
             }
@@ -1295,7 +1297,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
             return rst;
         }
     };
-    JpcFlowTabResult.outputTabGrpLine = function (band, grp_line, page, grpValueIdx, rows, rowIdx, cols, colIdx, unitFactor, isRow, controls, multiColIdx) {
+    JpcFlowTabResult.outputTabGrpLine = function (band, grp_line, page, grpValueIdx, rows, rowIdx, cols, colIdx, unitFactor, isRow, controls, multiColIdx, grpCntIdx, $CURRENT_RPT) {
         let me = this, rst = [];
         if (grp_line[JV.PROP_GROUP_SUM_KEYS]) {
             let segIdx = JpcCommonHelper.getSegIdxByPageIdx(page, me.page_seg_map);
@@ -1309,7 +1311,10 @@ JpcFlowTabSrv.prototype.createNew = function(){
         }
         if (grp_line[JV.PROP_TEXTS]) {
             for (let txt of grp_line[JV.PROP_TEXTS]) {
+                me.checkGrpTxtOutEvent(JV.RUN_TYPE_BEFORE_GROUP_TEXT_OUT, txt, grpCntIdx, $CURRENT_RPT);
                 rst.push(JpcTextHelper.outputText(txt, band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx));
+                // me.combinePageCells(rst, verticalCombinePos, horizonCombinePos);
+                // 可能会有一个After,但意义不大,用不着
             }
         }
         if (grp_line[JV.PROP_DISCRETE_FIELDS]) {
@@ -1321,6 +1326,24 @@ JpcFlowTabSrv.prototype.createNew = function(){
         // console.log(rst);
         return rst;
     };
+    JpcFlowTabResult.checkGrpTxtOutEvent = function ($RUN_TYPE, $TEXT, $TIMES, $CURRENT_RPT) {
+        if ($CURRENT_RPT.formulas) {
+            for (let execFmlIdx = 0; execFmlIdx < $CURRENT_RPT.formulas.length; execFmlIdx++) {
+                if ($CURRENT_RPT.formulas[execFmlIdx][JV.PROP_RUN_TYPE] === $RUN_TYPE) {
+                    let expression = $CURRENT_RPT.formulas[execFmlIdx][JV.PROP_EXPRESSION];
+                    if (expression) {
+                        let $ME = $CURRENT_RPT.formulas[execFmlIdx];
+                        try {
+                            eval(expression);
+                        } catch (ex) {
+                            console.log(ex);
+                        }
+                    }
+                }
+            }
+        }
+    };
+
     JpcFlowTabResult.commonTabRestOutput = function(dataObj, page, segIdx, bands, band, unitFactor, tab, multiColIdx){
         let me = this, rst = [];
         if (tab[JV.PROP_TEXT]) {
@@ -1365,16 +1388,18 @@ function setupControl(mergeCell, controls) {
         orgCtrl = controls[mergeCell[JV.PROP_CONTROL]];
         mergeCell[JV.PROP_CONTROL] = {
             "Shrink": "T",
+            "ShrinkFirst": orgCtrl.ShrinkFirst,
+            "CloseOutput": orgCtrl.CloseOutput,
             "ShowZero": orgCtrl.ShowZero,
             "Horizon": orgCtrl.Horizon,
             "Vertical": orgCtrl.Vertical,
-            "Wrap": "T",
+            "Wrap": (mergeCell[JV.PROP_IS_AUTO_HEIGHT])?'T':'F',
             "VerticalForExcel": "center"
         };
     } else {
         mergeCell[JV.PROP_CONTROL].Shrink = "T";
         mergeCell[JV.PROP_CONTROL].Vertical = "top";
-        mergeCell[JV.PROP_CONTROL].Wrap = "T";
+        mergeCell[JV.PROP_CONTROL].Wrap = (mergeCell[JV.PROP_IS_AUTO_HEIGHT])?'T':'F',
         mergeCell[JV.PROP_CONTROL].VerticalForExcel = "center";
         orgCtrl = mergeCell[JV.PROP_CONTROL];
     }

+ 34 - 3
modules/reports/util/rpt_pdf_util.js

@@ -136,10 +136,41 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
             }
             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;
+            let restTopH = 0, restBottomH = 0;
+            if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_CLOSE_OUTPUT]] === 'T') {
+                ah = (parseFloat(font[JV.FONT_PROPS[1]]) + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM]) * values.length;
+                let restH = height - ah;
+                if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === 'center') {
+                    restTopH = restH / 2;
+                    restBottomH = restH / 2;
+                } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === 'bottom') {
+                    restBottomH = restH;
+                } else {
+                    restTopH = restH;
+                }
+            }
+            let spaceIdxArr = [];
             for (let i = 0; i < values.length; i++) {
-                area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (height / values.length) + offsetY;
-                area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (height / values.length) + offsetY;
+                // area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (height / values.length) + offsetY;
+                // area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (height / values.length) + offsetY;
+                area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (ah / values.length) + offsetY + restTopH;
+                area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (ah / values.length) + offsetY + restBottomH;
+                if (values[i] === null || values[i] === undefined || values[i] === 'null') {
+                    values[i] = "";
+                }
+                // 因pdfkit输出空格只有一半宽度,需要额外加空格补上 -----------------------------
+                if (typeof(values[i]) === "string") {
+                    for (let j = 0; j < values[i].length; j++) {
+                        if (values[i][j] === ' ') spaceIdxArr.push(j);
+                    }
+                }
+                for (let j = spaceIdxArr.length - 1; j >= 0; j--) {
+                    values[i] = values[i].slice(0, spaceIdxArr[j]) + ' ' + values[i].slice(spaceIdxArr[j]);
+                }
+                // -----------------------------
                 private_drawText(values[i], area, font, control);
+                spaceIdxArr = [];
             }
         }
     }
@@ -243,7 +274,7 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
             while (true) {
                 //*/
                 let lines = Math.floor((area[JV.IDX_BOTTOM] - area[JV.IDX_TOP]) / (dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP] + 4));
-                lines = (lines === 0)?1:lines;
+                lines = (lines === 0 || (control.Shrink === 'T' && control.ShrinkFirst === 'T'))?1:lines;
                 let actLines = private_splitString(val, validAreaTxtWidth, doc);
                 if (actLines.length > lines && dftFontHeight >= 6) {
                     dftFontHeight--;

+ 2 - 0
public/web/rpt_value_define.js

@@ -210,6 +210,8 @@ const JV = {
     RUN_TYPE_BEFORE_COMBINE: "before_combine",
     RUN_TYPE_AFTER_COMBINE: "after_combine",
 
+    RUN_TYPE_BEFORE_GROUP_TEXT_OUT: "before_group_text_output",
+
     PAGE_STATUS: ["EveryPage","FirstPage", "LastPage", "SegmentStart", "SegmentEnd", "Group", "CrossRowEnd", "CrossColEnd"],
 
     CONTROL_PROPS: ["Shrink", "ShowZero", "Horizon", "Vertical", "Wrap", "VerticalForExcel", "ShrinkFirst", "CloseOutput"],

+ 1 - 0
web/maintain/report/js/rpt_tpl_calculation.js

@@ -33,6 +33,7 @@ let calculationTreeOprObj = {
         et.append("<option value='" + JV.RUN_TYPE_BEFORE_ANALYZING + "'>数据分析前运行</option>");
         et.append("<option value='" + JV.RUN_TYPE_BEFORE_COMBINE + "'>合并单元格前事件</option>");
         et.append("<option value='" + JV.RUN_TYPE_AFTER_COMBINE + "'>合并单元格后事件</option>");
+        et.append("<option value='" + JV.RUN_TYPE_BEFORE_GROUP_TEXT_OUT + "'>分组text输出前事件</option>");
     },
     buildTreeData: function (rptTpl) {
         let me = this, rst = {"Name": "计算式", items: []};

+ 18 - 4
web/maintain/report/js/rpt_tpl_cfg_helper.js

@@ -328,10 +328,24 @@ let rpt_tpl_cfg_helper = {
             let border = me.reportCfg.styles[idx];
             dataInfoMapTreeOprObj.currentNode[JV.PROP_STYLE] = borderAttr;
 
-            $("#eleBorderLeft").get(0).value = border[JV.PROP_BORDER_STYLE][JV.IDX_LEFT][JV.PROP_LINE_WEIGHT];
-            $("#eleBorderRight").get(0).value = border[JV.PROP_BORDER_STYLE][JV.IDX_RIGHT][JV.PROP_LINE_WEIGHT];
-            $("#eleBorderTop").get(0).value = border[JV.PROP_BORDER_STYLE][JV.IDX_TOP][JV.PROP_LINE_WEIGHT];
-            $("#eleBorderBottom").get(0).value = border[JV.PROP_BORDER_STYLE][JV.IDX_BOTTOM][JV.PROP_LINE_WEIGHT];
+            for (let borderLine of border[JV.PROP_BORDER_STYLE]) {
+                switch (borderLine[JV.PROP_POSITION]) {
+                    case JV.PROP_LEFT:
+                        $("#eleBorderLeft").get(0).value = borderLine[JV.PROP_LINE_WEIGHT];
+                        break;
+                    case JV.PROP_RIGHT:
+                        $("#eleBorderRight").get(0).value = borderLine[JV.PROP_LINE_WEIGHT];
+                        break;
+                    case JV.PROP_TOP:
+                        $("#eleBorderTop").get(0).value = borderLine[JV.PROP_LINE_WEIGHT];
+                        break;
+                    case JV.PROP_BOTTOM:
+                        $("#eleBorderBottom").get(0).value = borderLine[JV.PROP_LINE_WEIGHT];
+                        break;
+                    default:
+                        break;
+                }
+            }
         }
     },
     controlChange: function(dom) {

+ 14 - 4
web/maintain/report/js/rpt_tpl_vis_jumbo.js

@@ -811,6 +811,7 @@ let visualJumbo = {
     applyBack_Flow: function (rptTpl, sheet, xPos, yPos) {
         let me = this;
         let startRow = -1, handledBands = [];
+        let discreteNodesArr = [];
         //先清除所有相关text/field节点,然后再重新生成
         me.private_clear_flow_txt_fld_nodes();
         let textFldArr = [], colWidthArr = [], rowHeightArr = [];
@@ -820,9 +821,19 @@ let visualJumbo = {
         me.private_setup_bandHeight(columnBand[JV.PROP_NAME], columnBand, sheet);
         startRow = me.collectSheetTxtFldByArea(sheet, me.bandMappingObj[columnBand[JV.PROP_NAME]][JV.PROP_COLOR] , textFldArr, colWidthArr, rowHeightArr);
         let columnNodes = [];
-        for (let text of textFldArr) {
-            let node = me.createTxtNode(text, sheet, startRow, colWidthArr, rowHeightArr);
-            columnNodes.push(node);
+        let columnDisFieldArr = null;
+        for (let txtFld of textFldArr) {
+            if (txtFld.isField) {
+                if (columnDisFieldArr === null) {
+                    columnDisFieldArr = {Name: "子项", BandName: columnBand[JV.PROP_NAME], items: [[],[]], isParent: true};
+                    discreteNodesArr.push(columnDisFieldArr);
+                }
+                let fldNode = me.private_create_field_param_node(sheet, txtFld, startRow, colWidthArr, rowHeightArr, rptTpl);
+                columnDisFieldArr.items[0].push(fldNode);
+            } else {
+                let node = me.createTxtNode(txtFld, sheet, startRow, colWidthArr, rowHeightArr);
+                columnNodes.push(node);
+            }
         }
 
         let cotentBand = visualCommonOprObj.getBandEx(rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_BAND_NAME], rptTpl);
@@ -857,7 +868,6 @@ let visualJumbo = {
             me.private_build_txt_fld_nodes(segTotalBand, sheet, rptTpl, segSummaryNodes);
         }
         //3. 其他就归类到离散去了
-        let discreteNodesArr = [];
         if (me.bandMappingObj && me.bandMappingObj.items && me.bandMappingObj.items.length > 0) {
             for (let sBandMap of me.bandMappingObj.items) {
                 if (handledBands.indexOf(sBandMap[JV.PROP_BAND_NAME]) < 0 && sBandMap[JV.PROP_COLOR] !== 'White') {

+ 28 - 4
web/users/views/user/index.html

@@ -97,7 +97,7 @@
                     <th>姓名</th>
                     <th>企业名称</th>
                     <th>企业地区</th>
-                    <th>最近使用版本 </th>
+                    <th>最近使用费用定额 </th>
                     <th>在线时长(<%= filter.loginMsg === undefined ? '所有' : filter.loginMsg %>)</th>
                     <th width="180">注册时间 / 最近登录</th>
                     <% if (manager.superAdmin == 1) { %>
@@ -116,11 +116,13 @@
                     <td><%= compilationMap[user.latest_used]?compilationMap[user.latest_used].name:""%></td>
                     <td><a onclick="getOnlineInfo('<%= user._doc.filter%>')" href="#time-detail" data-toggle="modal" data-target="#time-detail"><%= user._doc.online_times %></a></td>
                     <td><%= moment(user.create_time).format('YYYY-MM-DD HH:mm:ss') %><br><%= user.latest_login?moment(user.latest_login).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>-->
                     <% if (manager.superAdmin == 1) { %>
-                    <td><a onclick='deleteUser("<%= user._id.toString()%>")' data-toggle="modal" data-target="#delUser" class="btn btn-link btn-sm" style="padding: 0px">删除</a></td>
+                    <td>
+                        <a onclick='deleteUser("<%= user._id.toString()%>")' data-toggle="modal" data-target="#delUser" class="btn text-danger" style="padding: 0px">删除</a>
+                        <a href="#update" data-toggle="modal" data-target="#update" class="btn" onclick='getUserUpgradeInfo("<%= user._id.toString()%>")'>升级</a>
+                    </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>
@@ -175,6 +177,28 @@
     </div>
 </div>
 
+<!-- 弹窗显示已升级专业版-->
+<div class="modal fade" id="pdu" 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">
+                    <tr><th>定额</th><th>升级时间</th></tr>
+                    <tr><td>重庆定额(2018)</td><td>2019-09-11</td></tr>
+                    <tr><td>甘肃定额(2013)</td><td>2019-09-09</td></tr>
+                </table>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
+            </div>
+        </div>
+    </div>
+</div>
+
 <!--弹出删除-->
 <div class="modal fade" id="delUser" data-backdrop="static" style="display: none;" aria-hidden="true">
     <div class="modal-dialog" role="document">