Browse Source

处理报表模板发布

TonyKang 7 years ago
parent
commit
b657ef3f4c

+ 14 - 14
modules/all_models/tpl_tree_node.js

@@ -4,22 +4,22 @@
  */
 import mongoose from "mongoose";
 let Schema = mongoose.Schema;
-let TreeNodeSchema = new Schema({
-    ID:Number,
-    ParentID:Number,
-    NextSiblingID:Number,
-    grpType: Number,  //建筑(const : 1)/公路(const 2)/其他 etc...
-    nodeType: Number, //节点类型:树节点(枝) 或 模板节点(叶)
-    tplType: Number,  //概算、预算、招投标 etc...
-    userId: String,   //用户自定义模板用
-    refId: Number,    //引用报表模板id (引用 collection: rpt_templates)
-    released: Boolean,//是否已发布, refId > -1 时才有意义
-    name: String,
-    isDeleted: Boolean
-});
+// let TreeNodeSchema = new Schema({
+//     ID:Number,
+//     ParentID:Number,
+//     NextSiblingID:Number,
+//     grpType: Number,  //建筑(const : 1)/公路(const 2)/其他 etc...
+//     nodeType: Number, //节点类型:树节点(枝) 或 模板节点(叶)
+//     tplType: Number,  //概算、预算、招投标 etc...
+//     userId: String,   //用户自定义模板用
+//     refId: Number,    //引用报表模板id (引用 collection: rpt_templates)
+//     released: Boolean,//是否已发布, refId > -1 时才有意义
+//     name: String,
+//     isDeleted: Boolean
+// });
 
 let TplNodeSchema = new Schema({
-    nodeType: Number,   //节点类型:树节点(枝) 或 模板节点(叶)
+    nodeType: Number,   //节点类型:树节点(枝) 或 模板节点(叶), 统一结构
     ID: Number,         //template节点ID,只有在nodeType是模板节点有效
     refId: Number,      //引用报表模板id (引用 collection: rpt_templates)
     name: String,       //显示名称

+ 17 - 0
modules/reports/util/rpt_construct_data_util.js

@@ -221,6 +221,9 @@ class Rpt_Data_Extractor {
         rptDataObj[JV.DATA_DETAIL_DATA] = [];
         rptDataObj[JV.DATA_MASTER_DATA_EX] = [];
         rptDataObj[JV.DATA_DETAIL_DATA_EX] = [];
+        rptDataObj.DecimalObj = {};
+        rptDataObj.DecimalObj.prjDecimal = $PROJECT.MAIN["myOwnRawDataObj"].decimal; //为函数 P_REF() 准备数据
+        rptDataObj.DecimalObj.unitDecimal = getUnitDecimal($PROJECT.MAIN["myOwnRawDataObj"].billsQuantityDecimal); //为函数 U_REF() 准备数据
         assembleFields(tpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS], rptDataObj[JV.DATA_DISCRETE_DATA], $PROJECT);
         // console.log(JV.DATA_DISCRETE_DATA);
         // console.log(rptDataObj[JV.DATA_DISCRETE_DATA]);
@@ -241,6 +244,20 @@ class Rpt_Data_Extractor {
 
 }
 
+function getUnitDecimal(unitDecimalArr) {
+    let rst = {"default_decimal": 2};
+    if (unitDecimalArr) {
+        for (let item of unitDecimalArr) {
+            if (item.unit === "其他未列单位") {
+                rst["default_decimal"] = item.decimal;
+            } else {
+                rst['unit_decimal_' + item.unit] = item.decimal;
+            }
+        }
+    }
+    return rst;
+}
+
 function getModuleDataByKey(prjData, key) {
     let rst = null;
     for (let item of prjData) {

+ 4 - 0
web/maintain/report/js/cfg_const.js

@@ -52,6 +52,9 @@ let setting = {
         removeTitle: "删除节点",
         renameTitle: "更改名称"
     },
+    check: {
+        enable: true
+    },
     data: {
         keep: {
             parent:true,
@@ -71,6 +74,7 @@ let setting = {
         beforeRemove: zTreeOprObj.onBeforeRemove,
         onRemove: zTreeOprObj.onRemove,
         onRename: zTreeOprObj.onRename,
+        onCheck: zTreeOprObj.oncheck,
         beforeDrag: function() {return false;}
     }
 };

+ 46 - 9
web/maintain/report/js/rpt_tpl_main.js

@@ -100,7 +100,7 @@ let zTreeOprObj = {
                 engineerId: topNode.engineerId,
                 userId: topNode.userId,
                 properties: topNode.properties,
-                released: topNode.released,
+                released: true,
                 isDeleted: topNode.isDeleted,
                 items: me.private_build_items(topNode.items, excludeNode),
                 name: topNode.name
@@ -113,9 +113,10 @@ let zTreeOprObj = {
         if (subNode) {
             let isReleased = false;
             if (subNode.nodeType == RT.NodeType.TEMPLATE) {
-                if (subNode.hasOwnProperty("released")) {
-                    isReleased = subNode.released;
-                }
+                isReleased = subNode.checked;
+                // if (subNode.hasOwnProperty("released")) {
+                //     isReleased = subNode.released;
+                // }
             }
             rst = {
                 nodeType: subNode.nodeType,
@@ -137,9 +138,10 @@ let zTreeOprObj = {
                 if (item !== excludeNode) {
                     let isReleased = false;
                     if (item.nodeType == RT.NodeType.TEMPLATE) {
-                        if (item.hasOwnProperty("released")) {
-                            isReleased = item.released;
-                        }
+                        isReleased = item.checked;
+                        // if (item.hasOwnProperty("released")) {
+                        //     isReleased = item.released;
+                        // }
                     }
                     let ir = {};
                     ir.nodeType = item.nodeType;
@@ -210,7 +212,8 @@ let zTreeOprObj = {
                 me.treeObj.moveNode(preNode, me.currentNode, "prev", true);
                 //then update the db
                 let topPNode = me.getTopNodeByCurrentNode(preNode);
-                me.updateTreeRootNode(topPNode, true, function(rst){
+                let newTopNode = me.buildRootNodeDoc(topPNode);
+                me.updateTreeRootNode(newTopNode, true, function(rst){
                     if (!(rst)) {
                         alert("移动请求失败!");
                     }
@@ -226,7 +229,8 @@ let zTreeOprObj = {
                 me.treeObj.moveNode(nextNode, me.currentNode, "next", true);
                 //then update the db
                 let topPNode = me.getTopNodeByCurrentNode(nextNode);
-                me.updateTreeRootNode(topPNode, true, function(rst){
+                let newTopNode = me.buildRootNodeDoc(topPNode);
+                me.updateTreeRootNode(newTopNode, true, function(rst){
                     if (!(rst)) {
                         alert("移动请求失败!");
                     }
@@ -234,6 +238,16 @@ let zTreeOprObj = {
             }
         }
     },
+    oncheck: function (event, treeId, treeNode) {
+        let me = zTreeOprObj;
+        let topPNode = me.getTopNodeByCurrentNode(treeNode);
+        let newTopNode = me.buildRootNodeDoc(topPNode);
+        me.updateTreeRootNode(newTopNode, true, function(rst){
+            if (!(rst)) {
+                alert("修改发布状态失败!");
+            }
+        });
+    },
     getReportTemplateTree: function(compilationSelect) {
         let me = zTreeOprObj, params = {};
         params.compilationId = compilationSelect.value;
@@ -257,6 +271,29 @@ let zTreeOprObj = {
             });
             zTreeHelper.createTreeDirectly(result, setting, "rptTplTree", me);
             me.refreshNodes();
+            let private_setup_checked = function (itemNode) {
+                if (itemNode.nodeType === RT.NodeType.NODE) {
+                    me.treeObj.setChkDisabled(itemNode, true);
+                } else if (itemNode.nodeType === RT.NodeType.TEMPLATE) {
+                    // me.treeObj.setChkDisabled(itemNode, !(itemNode.released));
+                    me.treeObj.checkNode(itemNode, (itemNode.released)?true:false);
+                }
+                if (itemNode.items && itemNode.items.length > 0) {
+                    for (let subItem of itemNode.items) {
+                        private_setup_checked(subItem);
+                    }
+                }
+            };
+            let topNodes = me.treeObj.getNodes();
+            me.treeObj.expandAll(true);
+            for (let node of topNodes) {
+                me.treeObj.setChkDisabled(node, true);
+                if (node.items && node.items.length > 0) {
+                    for (let item of node.items) {
+                        private_setup_checked(item);
+                    }
+                }
+            }
         }, null, null);
     },
     addTplNode: function (){