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

Merge branch '1.0.0_online' of http://smartcost.f3322.net:3000/SmartCost/ConstructionOperation into 1.0.0_online

zhongzewei 7 лет назад
Родитель
Сommit
63a9ad6975

BIN
lib/ztree/css/img/diy/10.png


+ 11 - 10
modules/all_models/tpl_tree_node.js

@@ -28,14 +28,15 @@ let TplNodeSchema = new Schema({
 });
 
 let RptTplTreeSchema = new Schema({
-    compilationId: String,  //编办的ObjectId
-    // engineerId: Number,     //工程专业Id(参考 /modules/common/const/engineering.js)
-    userId: String,        //用户名的object_id串
-    properties: [],         //这是一个预留的属性,假定未来还会有不同的划分细节(如:招标/投标/清单 ... etc)
-    name: String,           //显示名称
-    released: Boolean,      //是否已发布
-    isDeleted: Boolean,     //删除标记
-    items: []               //TplNodeSchema entity
+    compilationId: String,      //编办的ObjectId
+    // engineerId: Number,         //工程专业Id(参考 /modules/common/const/engineering.js)
+    userId: String,             //用户名的object_id串
+    properties: [],             //这是一个预留的属性,假定未来还会有不同的划分细节(如:招标/投标/清单 ... etc)
+    name: String,               //显示名称
+    released: Boolean,          //是否已发布
+    isDeleted: Boolean,         //删除标记
+    flags: Schema.Types.Mixed,  //额外标记集合(这些标记可能会影响到前端显示,如‘计税方式’等)
+    items: []                   //TplNodeSchema entity
 });
 RptTplTreeSchema.statics.findAndModify = function (query, sort, doc, options, callback) {
     return this.collection.findAndModify(query, sort, doc, options, callback);
@@ -43,8 +44,8 @@ RptTplTreeSchema.statics.findAndModify = function (query, sort, doc, options, ca
 
 mongoose.model("rpt_tpl_tree", RptTplTreeSchema, "rpt_tpl_tree");
 /*
-let TreeNodeModel = mongoose.model("rpt_tpl_tree", TreeNodeSchema, "rpt_tpl_tree");
-/*/
+ let TreeNodeModel = mongoose.model("rpt_tpl_tree", TreeNodeSchema, "rpt_tpl_tree");
+ /*/
 // let TreeNodeModel = mongoose.model("rpt_tpl_tree", RptTplTreeSchema, "rpt_tpl_tree");
 //*/
 

+ 1 - 1
modules/reports/util/rpt_construct_data_util.js

@@ -1281,7 +1281,7 @@ function ext_getPropety(propKey) {
                     if (pi === propKey.length - 1) rst.push('');
                 }
             } else {
-                if (doc.hasOwnProperty("property")) {
+                if (doc.hasOwnProperty("property") && doc["property"].hasOwnProperty(propKey)) {
                     rst.push(doc["property"][propKey]);
                 } else if (doc.hasOwnProperty(propKey)) {
                     rst.push(doc[propKey]);

+ 4 - 0
public/web/id_tree.js

@@ -781,6 +781,10 @@ var idTree = {
         Tree.prototype.getDownLevelDatas = function (nodes) {
             let dataMap = {},updateDatas=[],nextID,last;//注释同m_downLevel 方法
             let newParent = nodes[0].preSibling;//{"type":"update","data":{"ID":3,"ParentID":-1,"NextSiblingID":5}}
+            let newPre = newParent.children && newParent.children.length > 0 ? newParent.children[newParent.children.length -1]:null;
+            if(newPre){ //如果新的父节点有子节点,则把新的父节点的最后一个子节点的下一节点的值改成第一个选中节点的ID
+                dataMap[newPre.getID()] = {"ID":newPre.getID(),"NextSiblingID":nodes[0].getID()}
+            }
             for(let n of nodes){
                 nextID = n.getNextSiblingID();
                 last = n;

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
web/maintain/main_col_lib/js/main_col_edit.js


+ 10 - 0
web/maintain/main_col_lib/js/main_tree_col.js

@@ -41,6 +41,16 @@ let MainTreeCol = {
 
     },
     readOnly: {
+        subType:function (node) {
+        },
+        calcProgramName:function (node) {
+        },
+        non_editSubType:function (node) {
+        },
+        commonUnitFee:function (node) {
+        },
+        commonTotalFee:function (node) {
+        },
         bills: function (node) {
             return node.sourceType === projectObj.project.Bills.getSourceType();
         },

+ 6 - 0
web/maintain/report/html/rpt_tpl_dtl_info.html

@@ -45,6 +45,12 @@
                     <input class="form-control input-sm" id="element_content_width" type="number" value="4.0" step="0.1" min="0" max="50" onchange="zTreeOprObj.changeProperty(`流水式表_信息.流水式表_数据.CommonWidth`, this)" disabled>
                 </div>
             </div>
+            <div class="row" id="element_adhoc_flags">
+                <div class="input-group col-2">
+                    <div class="input-group-addon">计税方式</div>
+                    <select class="form-control input-sm" id="element_flags_select" onchange="zTreeOprObj.onChangeFlag('taxType', this)"><option value ="NA">N/A</option><option value ="1">一般计税</option><option value ="2">简易计税</option></select>
+                </div>
+            </div>
         </div>
     </div>
 </div>

+ 48 - 4
web/maintain/report/js/rpt_tpl_main.js

@@ -143,6 +143,9 @@ let zTreeOprObj = {
                 items: me.private_build_items(subNode.items, null),
                 name: subNode.name
             };
+            if (subNode.hasOwnProperty('flags')) {
+                rst.flags = subNode.flags;
+            }
         }
         return rst;
     },
@@ -163,6 +166,9 @@ let zTreeOprObj = {
                     ir.name = item.name;
                     ir.ID = item.ID;
                     ir.released = isReleased;
+                    if (item.hasOwnProperty('flags')) {
+                        ir.flags = item.flags;
+                    }
                     ir.items = me.private_build_items(item.items);
                     itemRst.push(ir);
                 }
@@ -353,7 +359,7 @@ let zTreeOprObj = {
         let canContinue = false;
         if (isCopy) {
             me.getNewNodeID(1, function (newNodeID) {
-                let orgID = treeNodes[0].ID;
+                let orgID = treeNodes[0].refId; //refId才是正确的模板ID(因可能copy一个有引用的节点),
                 treeNodes[0].ID = newNodeID;
                 if (confirm("是否引用相同的报表模板?")) {
                     newTopNode = me.buildRootNodeDoc(targetTopNode);
@@ -363,6 +369,9 @@ let zTreeOprObj = {
                             treeNodes[0].rptTpl.ID = newNodeID;
                         }
                         me.currentNode = treeNodes[0];
+                        me.chkAndSetDupRefTplIds(me.treeObj.getNodes(), null);
+                        me.treeObj.refresh();
+                        me.chkAndRreshRefTpl();
                     }, function(badRst){
                         displayMessage("更新模板节点失败!", "red", 2000);
                         // console.log(badRst.toString());
@@ -381,6 +390,9 @@ let zTreeOprObj = {
                                 treeNodes[0].rptTpl.ID = newNodeID;
                             }
                             me.currentNode = treeNodes[0];
+                            me.chkAndSetDupRefTplIds(me.treeObj.getNodes(), null);
+                            me.treeObj.refresh();
+                            me.chkAndRreshRefTpl();
                         }, function(badRst){
                             displayMessage("更新模板节点失败!", "red", 2000);
                             // console.log(badRst.toString());
@@ -393,9 +405,9 @@ let zTreeOprObj = {
                     });
                 }
             });
-            if (canContinue) {
-                me.chkAndRreshRefTpl();
-            }
+            // if (canContinue) {
+            //     me.chkAndRreshRefTpl();
+            // }
         } else {
             newTopNode = me.buildRootNodeDoc(targetTopNode);
             me.updateTreeRootNode(newTopNode, false, function(rst){
@@ -530,6 +542,10 @@ let zTreeOprObj = {
                     tplNode.icon = "/lib/ztree/css/img/diy/3.png";
                 }
                 // tplNode.style = "background:url(/lib/ztree/css/img/diy/3.png) 0 0 no-repeat;"
+            } else {
+                //设置白板
+                // if (!tplNode.isParent) tplNode.icon = "/lib/ztree/css/img/diy/10.png";
+                if (!tplNode.isParent) tplNode.className = "button ico_docu";
             }
             if (tplNode.items && tplNode.items.length > 0) {
                 for (let subTplNode of tplNode.items) {
@@ -727,6 +743,23 @@ let zTreeOprObj = {
             }
         }
     },
+    onChangeFlag: function(flagProp, flagDom){
+        let me = zTreeOprObj;
+        if (me.currentNode && me.currentNode.nodeType === RT.NodeType.TEMPLATE) {
+            if (!me.currentNode.hasOwnProperty("flags")) {
+                me.currentNode.flags = {};
+            }
+            me.currentNode.flags[flagProp] = flagDom.selectedOptions[0].value;
+            let subTopNode = me.getParentNodeByNodeLevel(me.currentNode, NODE_LEVEL_COMPILATION_NEW + 1);
+            let topPNode = subTopNode.getParentNode();
+            let rawNode = me.buildSubRootNodeDoc(subTopNode);
+            me.updateSubNode(topPNode, rawNode, true, function(rst){
+                if (!(rst)) {
+                    alert('修改标记:[' + flagProp + '] 失败!');
+                }
+            });
+        }
+    },
 
     createNewTpl: function () {
         let me = zTreeOprObj, params = {};
@@ -816,6 +849,17 @@ let zTreeOprObj = {
                             me.currentNode.rptTpl["GROUP_KEY"] = grp_keys.join("_");
                         }
                         tplHelper.refreshTplView(me.currentNode.rptTpl);
+                        if (me.currentNode.hasOwnProperty('flags')) {
+                            if (me.currentNode.flags.hasOwnProperty('taxType')) {
+                                let val = parseInt(me.currentNode.flags['taxType']);
+                                $("#element_flags_select")[0].selectedIndex = val;
+                            } else {
+                                $("#element_flags_select")[0].selectedIndex = 0;
+                            }
+                        } else {
+                            $("#element_flags_select")[0].selectedIndex = 0;
+                        }
+
                         if ($("#rpt_tpl_visual_tab")[0].className === "nav-link p-1 active") {
                             setTimeout(function(){visualJumbo.iniSpreadJs(); visualJumbo.setupTpl()}, 50)
                         }