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

merge 养护报表的一些增强功能属性

TonyKang 6 лет назад
Родитель
Сommit
5c09ebf286

+ 3 - 2
modules/reports/util/rpt_excel_util.js

@@ -208,7 +208,7 @@ function writeStyles(stylesObj){
         let textRotation = 0;
         let textRotation = 0;
         let newHorizontal = excelStyle[JV.CONTROL_PROPS[2]];
         let newHorizontal = excelStyle[JV.CONTROL_PROPS[2]];
         let newVertical = excelStyle[JV.CONTROL_PROPS[3]];
         let newVertical = excelStyle[JV.CONTROL_PROPS[3]];
-        if (excelStyle[JV.CONTROL_PROPS[5]]) {
+        if (excelStyle[JV.CONTROL_PROPS[5]] && !strUtil.convertStrToBoolean(excelStyle[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_CLOSE_OUTPUT]])) {
             newVertical = excelStyle[JV.CONTROL_PROPS[5]];
             newVertical = excelStyle[JV.CONTROL_PROPS[5]];
         }
         }
         if (parseInt(excelStyle.fontAngle) !== 0) {
         if (parseInt(excelStyle.fontAngle) !== 0) {
@@ -255,7 +255,7 @@ function writeStyles(stylesObj){
         if (strUtil.convertStrToBoolean(excelStyle[JV.CONTROL_PROPS[0]])) {
         if (strUtil.convertStrToBoolean(excelStyle[JV.CONTROL_PROPS[0]])) {
             alignStr += ' shrinkToFit="1"';
             alignStr += ' shrinkToFit="1"';
         }
         }
-        if (strUtil.convertStrToBoolean(excelStyle[JV.CONTROL_PROPS[4]])) {
+        if (strUtil.convertStrToBoolean(excelStyle[JV.CONTROL_PROPS[4]]) && !strUtil.convertStrToBoolean(excelStyle[JV.CONTROL_PROPS[6]])) {
             alignStr += ' wrapText="1"';
             alignStr += ' wrapText="1"';
         }
         }
         if (textRotation !== 0) {
         if (textRotation !== 0) {
@@ -749,6 +749,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
                     let valIdx = private_getSharedStrIdx(theShtData.cells[cIdx][JV.PROP_VALUE]);
                     let valIdx = private_getSharedStrIdx(theShtData.cells[cIdx][JV.PROP_VALUE]);
                     cellObj.v = valIdx;
                     cellObj.v = valIdx;
                 }
                 }
+
                 rowIdx2 = theYPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_BOTTOM]);
                 rowIdx2 = theYPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_BOTTOM]);
                 colIdx2 = xPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_RIGHT]);
                 colIdx2 = xPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_RIGHT]);
                 if ((rowIdx2 - rowIdx1 > 1) || (colIdx2 - colIdx1 > 1)) {
                 if ((rowIdx2 - rowIdx1 > 1) || (colIdx2 - colIdx1 > 1)) {

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

@@ -136,9 +136,28 @@ 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 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 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;
+                }
+            }
             for (let i = 0; i < values.length; i++) {
             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 + restTopH;
+                if (values[i] === null || values[i] === undefined || values[i] === 'null') {
+                    values[i] = "";
+                }
                 private_drawText(values[i], area, font, control);
                 private_drawText(values[i], area, font, control);
             }
             }
         }
         }
@@ -243,7 +262,7 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
             while (true) {
             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));
                 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);
                 let actLines = private_splitString(val, validAreaTxtWidth, doc);
                 if (actLines.length > lines && dftFontHeight >= 6) {
                 if (actLines.length > lines && dftFontHeight >= 6) {
                     dftFontHeight--;
                     dftFontHeight--;

+ 18 - 1
public/web/rpt_value_define.js

@@ -10,6 +10,7 @@ const JV = {
     NODE_CROSS_COL_SUM: "交叉列合计",
     NODE_CROSS_COL_SUM: "交叉列合计",
     NODE_CROSS_ROW_EXT: "交叉行拓展",
     NODE_CROSS_ROW_EXT: "交叉行拓展",
     NODE_CROSS_ROW_SUM_EXT: "交叉行拓展合计",
     NODE_CROSS_ROW_SUM_EXT: "交叉行拓展合计",
+    NODE_CROSS_ROW_AD_HOC: "交叉行AD_HOC",
     NODE_FIELD_MAP: "指标_数据_映射",
     NODE_FIELD_MAP: "指标_数据_映射",
     NODE_DISCRETE_FIELDS: "离散指标_集合",
     NODE_DISCRETE_FIELDS: "离散指标_集合",
     NODE_NO_MAPPING_FIELDS: "无映射离散指标_集合",
     NODE_NO_MAPPING_FIELDS: "无映射离散指标_集合",
@@ -20,6 +21,7 @@ const JV = {
     NODE_DETAIL_FIELDS_EX: "从数据指标_拓展集合",
     NODE_DETAIL_FIELDS_EX: "从数据指标_拓展集合",
     NODE_BAND_COLLECTION: "布局框_集合",
     NODE_BAND_COLLECTION: "布局框_集合",
     NODE_FORMULAS: "计算式_集合",
     NODE_FORMULAS: "计算式_集合",
+    NODE_EVENTS: "事件_集合",
     NODE_DISCRETE_INFO: "离散信息",
     NODE_DISCRETE_INFO: "离散信息",
     NODE_BILL_INFO: "账单式表_信息",
     NODE_BILL_INFO: "账单式表_信息",
     NODE_BILL_CONTENT : "账单式表_数据",
     NODE_BILL_CONTENT : "账单式表_数据",
@@ -67,6 +69,7 @@ const JV = {
     PROP_HANDLE_TYPE_ADD_DUMMY: "增加Dummy数据",
     PROP_HANDLE_TYPE_ADD_DUMMY: "增加Dummy数据",
     PROP_HANDLE_TYPE_ADJUST: "数据调整",
     PROP_HANDLE_TYPE_ADJUST: "数据调整",
     PROP_HANDLE_TYPE_BILLS_DATA_MOVE: "量材数据转移",
     PROP_HANDLE_TYPE_BILLS_DATA_MOVE: "量材数据转移",
+    PROP_HANDLE_TYPE_COMPONENT_MOVE: "组成物数据转移",
     PROP_HANDLE_TYPE_COMPONENT_REPLACEMENT: "组成物替换",
     PROP_HANDLE_TYPE_COMPONENT_REPLACEMENT: "组成物替换",
     PROP_HANDLE_TYPE_PRECISION: "合计精度",
     PROP_HANDLE_TYPE_PRECISION: "合计精度",
 
 
@@ -120,6 +123,7 @@ const JV = {
     PROP_POSITION: "Position",
     PROP_POSITION: "Position",
     PROP_HIDDEN: "Hidden",
     PROP_HIDDEN: "Hidden",
     PROP_IS_SERIAL: "isSerial",
     PROP_IS_SERIAL: "isSerial",
+    PROP_IS_MERGE: "isMerge",
     PROP_COMBINE_TYPE: "combineType",
     PROP_COMBINE_TYPE: "combineType",
     PROP_IS_AUTO_HEIGHT: "isAutoHeight",
     PROP_IS_AUTO_HEIGHT: "isAutoHeight",
     PROP_FONT: "font",
     PROP_FONT: "font",
@@ -132,6 +136,7 @@ const JV = {
     PROP_FLOW_FIELDS: "flow_field_s",
     PROP_FLOW_FIELDS: "flow_field_s",
     PROP_BILL_FIELDS: "bill_field_s",
     PROP_BILL_FIELDS: "bill_field_s",
     PROP_CROSS_FIELDS: "cross_field_s",
     PROP_CROSS_FIELDS: "cross_field_s",
+    PROP_CROSS_DISPLAY_ORDER: "cross_display_order",
     PROP_GROUP_FIELDS: "group_field_s", //用来分组的指标(如按清单、定额etc...)
     PROP_GROUP_FIELDS: "group_field_s", //用来分组的指标(如按清单、定额etc...)
     PROP_GROUP_LINES: "group_lines",    //显示分组行,因分组的特殊性,分组的数据当成流水数据一样(行高相同),group_lines里的每一条数据占用流水的一整行,里面再细分(指标/text)
     PROP_GROUP_LINES: "group_lines",    //显示分组行,因分组的特殊性,分组的数据当成流水数据一样(行高相同),group_lines里的每一条数据占用流水的一整行,里面再细分(指标/text)
     PROP_GROUP_SUM_KEYS: "SumKey_S",
     PROP_GROUP_SUM_KEYS: "SumKey_S",
@@ -205,13 +210,15 @@ const JV = {
 
 
     PAGE_STATUS: ["EveryPage","FirstPage", "LastPage", "SegmentStart", "SegmentEnd", "Group", "CrossRowEnd", "CrossColEnd"],
     PAGE_STATUS: ["EveryPage","FirstPage", "LastPage", "SegmentStart", "SegmentEnd", "Group", "CrossRowEnd", "CrossColEnd"],
 
 
-    CONTROL_PROPS: ["Shrink", "ShowZero", "Horizon", "Vertical", "Wrap", "VerticalForExcel"],
+    CONTROL_PROPS: ["Shrink", "ShowZero", "Horizon", "Vertical", "Wrap", "VerticalForExcel", "ShrinkFirst", "CloseOutput"],
     CONTROL_PROP_IDX_SHRINK: 0,
     CONTROL_PROP_IDX_SHRINK: 0,
     CONTROL_PROP_IDX_SHOW_ZERO: 1,
     CONTROL_PROP_IDX_SHOW_ZERO: 1,
     CONTROL_PROP_IDX_HORIZON: 2,
     CONTROL_PROP_IDX_HORIZON: 2,
     CONTROL_PROP_IDX_VERTICAL: 3,
     CONTROL_PROP_IDX_VERTICAL: 3,
     CONTROL_PROP_IDX_WRAP: 4,
     CONTROL_PROP_IDX_WRAP: 4,
     CONTROL_PROP_IDX_VERTICAL_EXCEL: 5,
     CONTROL_PROP_IDX_VERTICAL_EXCEL: 5,
+    CONTROL_PROP_IDX_SHRINK_FIRST: 6,
+    CONTROL_PROP_IDX_CLOSE_OUTPUT: 7,
     BORDER_STYLE_PROPS: ["LineWeight", "DashStyle", "Color"],
     BORDER_STYLE_PROPS: ["LineWeight", "DashStyle", "Color"],
     PROP_LINE_WEIGHT: "LineWeight",
     PROP_LINE_WEIGHT: "LineWeight",
     PROP_DASH_STYLE: "DashStyle",
     PROP_DASH_STYLE: "DashStyle",
@@ -246,11 +253,21 @@ const JV = {
         H: ["left", "center", "right"],
         H: ["left", "center", "right"],
         V: ["top", "center", "bottom"]
         V: ["top", "center", "bottom"]
     },
     },
+    H_ALIGN_IDX_LEFT : 0,
+    H_ALIGN_IDX_CENTER : 1,
+    H_ALIGN_IDX_RIGHT : 2,
+    V_ALIGN_IDX_TOP : 0,
+    V_ALIGN_IDX_CENTER : 1,
+    V_ALIGN_IDX_BOTTOM : 2,
 
 
     CAL_TYPE:["percentage","abstract"],
     CAL_TYPE:["percentage","abstract"],
     CAL_TYPE_PERCENTAGE: 0,
     CAL_TYPE_PERCENTAGE: 0,
     CAL_TYPE_ABSTRACT: 1,
     CAL_TYPE_ABSTRACT: 1,
 
 
+    EVENT_TYPE: ["GRP_ON_CREATE", "FLOW_CONTENT_ON_CREATE"],
+    EVENT_IDX_GRP_ON_CREATE: 0,
+    EVENT_IDX_FLOW_CONTENT_ON_CREATE: 1,
+
     PAGE_ORIENTATION_V_FIRST: 0,
     PAGE_ORIENTATION_V_FIRST: 0,
     PAGE_ORIENTATION_H_FIRST: 1,
     PAGE_ORIENTATION_H_FIRST: 1,
 
 

+ 8 - 7
test/unit/reports/test_rpt_test_template.js

@@ -46,7 +46,8 @@ let demoPrjId = - 1;
 // let demoRptId = 2260; //测试基本信息
 // let demoRptId = 2260; //测试基本信息
 // let demoRptId = 613; //09-4 2018
 // let demoRptId = 613; //09-4 2018
 // let demoRptId = 726; //定制:清单子目表
 // let demoRptId = 726; //定制:清单子目表
-let demoRptId = 756; //江西 封1
+// let demoRptId = 756; //江西 封1
+let demoRptId = 710; //qa 01
 // let demoRptId = 475; //计日工
 // let demoRptId = 475; //计日工
 // let demoRptId = 551; //表05
 // let demoRptId = 551; //表05
 let pagesize = "A4";
 let pagesize = "A4";
@@ -63,10 +64,10 @@ let userId_me = "5b6a60b1c4ba33000dd417c0"; //我的
 // demoPrjId = 2260; //QA:
 // demoPrjId = 2260; //QA:
 // demoPrjId = 5029; //
 // demoPrjId = 5029; //
 // demoPrjId = 5029; //项目名称过长
 // demoPrjId = 5029; //项目名称过长
-demoPrjId = 5113; //
+demoPrjId = 6776; //
 // demoPrjId = 4107; //UAT:
 // demoPrjId = 4107; //UAT:
 //*/
 //*/
-let userId_Dft = userId_me;
+let userId_Dft = userId_Leng;
 // let userId_Dft = "5a025c4c15074d134c2b9689";
 // let userId_Dft = "5a025c4c15074d134c2b9689";
 /*/
 /*/
  let userId_Dft = "595328da1934dc327cad08eb";
  let userId_Dft = "595328da1934dc327cad08eb";
@@ -110,13 +111,13 @@ test('测试 - 测试模板啦: ', function (t) {
                     let customizeCfg = {"fillZero": true};
                     let customizeCfg = {"fillZero": true};
                     let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties, customizeCfg);
                     let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties, customizeCfg);
                     if (pageRst) {
                     if (pageRst) {
-                        // fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult_测试模板.jsp");
+                        fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult_测试模板.jsp");
                         // rpt_xl_util.exportExcel(pageRst, pagesize, "local_test_rpt_excel", true, null, null, function(uuidName){
                         // rpt_xl_util.exportExcel(pageRst, pagesize, "local_test_rpt_excel", true, null, null, function(uuidName){
                         //     console.log("excel uuid: " + uuidName);
                         //     console.log("excel uuid: " + uuidName);
                         // });
                         // });
-                        rpt_pdf_util.export_pdf_file(pageRst, pagesize, 'local_test_rpt_pdf', function(uuidName){
-                            console.log("pdf uuid: " + uuidName);
-                        });
+                        // rpt_pdf_util.export_pdf_file(pageRst, pagesize, 'local_test_rpt_pdf', function(uuidName){
+                        //     console.log("pdf uuid: " + uuidName);
+                        // });
                     } else {
                     } else {
                         console.log("oh! no pages were created!");
                         console.log("oh! no pages were created!");
                     }
                     }

+ 11 - 11
test/unit/reports/test_summary.js

@@ -37,7 +37,7 @@ let demoPrjId = - 1;
 // let demoRptId = 232; //09
 // let demoRptId = 232; //09
 // let demoRptId = 280; //11-1 暂列金
 // let demoRptId = 280; //11-1 暂列金
 // let demoRptId = 551; //表05
 // let demoRptId = 551; //表05
-let demoRptId = 910; //表01
+let demoRptId = 710; //表01
 // let demoRptId = 2260; //测试基本信息
 // let demoRptId = 2260; //测试基本信息
 let pagesize = "A4";
 let pagesize = "A4";
 //288: 11-2表(新)
 //288: 11-2表(新)
@@ -49,7 +49,7 @@ let userId_Leng = "5acac1e885bf55000bd055ba"; //小冷User Id2
 //demoPrjId = 1626; //QA:
 //demoPrjId = 1626; //QA:
 // demoPrjId = 2260; //QA:
 // demoPrjId = 2260; //QA:
 // demoPrjId = 4552; //QA:
 // demoPrjId = 4552; //QA:
-demoPrjId = 6601; //prod:
+demoPrjId = 6776; //prod:
 //*/
 //*/
 let userId_Dft = userId_Leng;
 let userId_Dft = userId_Leng;
 // let userId_Dft = "5a025c4c15074d134c2b9689";
 // let userId_Dft = "5a025c4c15074d134c2b9689";
@@ -71,16 +71,16 @@ fs.readFile(__dirname.slice(0, __dirname.length - 18) + '/public/web/date_util.j
 });
 });
 
 
 test('测试 - 汇总数据: ', function (t) {
 test('测试 - 汇总数据: ', function (t) {
-    let s1 = pm_facade.getSummaryInfoByTender(demoPrjId, pm_facade.projectType.engineering);
-    // let s2 = pm_facade.getSummaryInfoByTender(demoPrjId, pm_facade.projectType.project);
-    s1.then(function (rst1) {
-        console.log(rst1);
-    });
-    // s2.then(function (rst2) {
-    //     console.log(rst2);
-    //     t.pass('pass ok!');
-    //     t.end();
+    // let s1 = pm_facade.getSummaryInfoByTender(demoPrjId, pm_facade.projectType.engineering);
+    let s2 = pm_facade.getSummaryInfoByTender(demoPrjId, pm_facade.projectType.project);
+    // s1.then(function (rst1) {
+    //     console.log(rst1);
     // });
     // });
+    s2.then(function (rst2) {
+        console.log(rst2);
+        t.pass('pass ok!');
+        t.end();
+    });
 });
 });
 
 
 test('close the connection', function (t) {
 test('close the connection', function (t) {