Browse Source

预览增加area冲突highlight提醒 + code sync

TonyKang 7 years ago
parent
commit
ace5d15040

+ 9 - 1
modules/reports/facade/rpt_tpl_data_facade.js

@@ -14,6 +14,7 @@ module.exports = {
 
 function prepareProjectData(userId, prjId, filter, callback) {
     let rawDataObj = null;
+    let basicInformation = prjMdl.project.getBasicInfo(prjId);
     prjMdl.project.getUserProject(userId, prjId, function(err, msg, rst){
         if (!err) {
             rawDataObj = {};
@@ -21,7 +22,14 @@ function prepareProjectData(userId, prjId, filter, callback) {
             projectDataMdl.getFilterData(prjId, filter, function (results) {
                 if (results) {
                     rawDataObj.prjData = results;
-                    callback(false, 'Succeeded!', rawDataObj);
+                    basicInformation.then(function(basicRst) {
+                        if (basicRst !== null && basicRst !== undefined) {
+                            let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj;
+                            doc.property.basicInformation = basicRst;
+                        }
+                        callback(false, 'Succeeded!', rawDataObj);
+                    });
+                    // callback(false, 'Succeeded!', rawDataObj);
                 } else {
                     callback(true, 'No data were found!', null);
                 }

+ 44 - 1
web/maintain/report/js/jpc_output.js

@@ -268,6 +268,33 @@ let JpcCanvasOutput = {
             }
         }
     },
+    highlightConflictArea: function (pageObj, pageIdx) {
+        if (pageObj && pageObj.items.length > 0 && pageObj.items.length >= pageIdx) {
+            let private_create_conflict_line = function () {
+                return {"LineWeight": "1", "DashStyle": "SOLID", "Color": "RED"};
+            };
+            let page = pageObj.items[pageIdx - 1],
+                styleConflict = {"Left": private_create_conflict_line(), "Right": private_create_conflict_line(), "Top": private_create_conflict_line(), "Bottom": private_create_conflict_line()}
+            ;
+            pageObj[JV.NODE_STYLE_COLLECTION]["ConflictCell"] = styleConflict;
+            let conflictIds = [];
+            for (let j = 0; j < page.cells.length; j++) {
+                if (conflictIds.indexOf(j) < 0) {
+                    let cell1 = page.cells[j];
+                    for (let k = j + 1; k < page.cells.length; k++) {
+                        let cell2 = page.cells[k];
+                        //判断area是否有交叉
+                        if (areaConflict(cell1[JV.PROP_AREA], cell2[JV.PROP_AREA])) {
+                            conflictIds.push(j);
+                            conflictIds.push(k);
+                            cell1[JV.PROP_STYLE] = "ConflictCell";
+                            cell2[JV.PROP_STYLE] = "ConflictCell";
+                        }
+                    }
+                }
+            }
+        }
+    },
     drawPageBorder: function(rptTpl, canvas, resolution) {
         let me = this;
         let size = me.getReportSizeInPixel(rptTpl, resolution);
@@ -295,4 +322,20 @@ let JpcCanvasOutput = {
         rst[1] = Math.round(resolution[0] * rst[1]);
         return rst;
     }
-};
+};
+
+function areaConflict(area1,area2) {
+    let maxX,maxY,minX,minY,
+        w1 = area1[JV.PROP_RIGHT] - area1[JV.PROP_LEFT],
+        w2 = area2[JV.PROP_RIGHT] - area2[JV.PROP_LEFT],
+        h1 = area1[JV.PROP_BOTTOM] - area1[JV.PROP_TOP],
+        h2 = area2[JV.PROP_BOTTOM] - area2[JV.PROP_TOP]
+    ;
+    //1. 求2个矩形的最小外包矩形
+    minX = (area1[JV.PROP_LEFT] <= area2[JV.PROP_LEFT]) ? area1[JV.PROP_LEFT] : area2[JV.PROP_LEFT];
+    minY = (area1[JV.PROP_TOP] <= area2[JV.PROP_TOP]) ? area1[JV.PROP_TOP] : area2[JV.PROP_TOP];
+    maxX = (area1[JV.PROP_RIGHT] >= area2[JV.PROP_RIGHT]) ? area1[JV.PROP_RIGHT] : area2[JV.PROP_RIGHT];
+    maxY = (area1[JV.PROP_BOTTOM] >= area2[JV.PROP_BOTTOM]) ? area1[JV.PROP_BOTTOM] : area2[JV.PROP_BOTTOM];
+    //2. 判断外包矩形与高与宽是否小于俩矩形的高与宽之和(这里的边界条件是小于,等于的话不算;而且是高与宽都得符合条件!)
+    return (maxX - minX < w1 + w2 && maxY - minY < h1 + h2);
+}

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

@@ -192,6 +192,7 @@ let preview_util = {
                         }
                         JpcCanvasOutput.cleanCanvas(canvas);
                         JpcCanvasOutput.drawPageBorder(result, canvas, [96,96]);
+                        JpcCanvasOutput.highlightConflictArea(result, 1);
                         JpcCanvasOutput.drawToCanvas(result, canvas, 1);
                     } else {
                         alert('preview error!');