zhangweicheng 5 年之前
父节点
当前提交
975898158b

+ 373 - 343
web/building_saas/main/js/controllers/project_controller.js

@@ -3,371 +3,401 @@
  */
 
 ProjectController = {
-    /* sc: tree_sheet_controller */
-    syncDisplayNewNode: function (sc, newNode,callback) {
-        TREE_SHEET_HELPER.massOperationSheet(sc.sheet, function () {
-            var sels = sc.sheet.getSelections();
-            sc.sheet.addRows(newNode.serialNo(), 1);
-            TREE_SHEET_HELPER.refreshTreeNodeData(sc.setting, sc.sheet, [newNode], false);
-            sc.setTreeSelected(newNode);
-            sc.sheet.setSelection(newNode.serialNo(), sels[0].col, 1, 1);
-            //不显示到中间
-            //sc.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
-            cbTools.refreshFormulaNodes();
-            if(callback) callback();
-        });
-    },
-    syncDisplayNewNodes: function (sc, newNodes,withOutSelect=false,callback) {//withOutSelect 不需要自动选中,外面自已处理
-        TREE_SHEET_HELPER.massOperationSheet(sc.sheet, function () {
-            var sels = sc.sheet.getSelections();
-            newNodes.sort(function (a, b) {
-                let rst = 0;
-                if(a.serialNo() > b.serialNo()){
-                    rst = 1;
-                }
-                else {
-                    rst = -1;
-                }
-                return rst;
-            });
-            let lastNode = null;
-            for(let newNode of newNodes){
-                sc.sheet.addRows(newNode.serialNo(), 1);
-                TREE_SHEET_HELPER.refreshTreeNodeData(sc.setting, sc.sheet, [newNode], false);
-                lastNode = newNode
-               // sc.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
-            }
-            if(withOutSelect==false&& lastNode){
-                sc.setTreeSelected(lastNode);
-                sc.sheet.setSelection(lastNode.serialNo(), sels[0].col, 1, 1);
-            }
-
-            cbTools.refreshFormulaNodes();
-            if(callback) callback();
-        });
-    },
-    syncDisplayNewRationGljNode:function (sc,newNode) {
-        TREE_SHEET_HELPER.massOperationSheet(sc.sheet, function () {
-            sc.sheet.addRows(newNode.serialNo(), 1);
-            TREE_SHEET_HELPER.refreshTreeNodeData(sc.setting, sc.sheet, [newNode], false);
-           // sc.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
-            cbTools.refreshFormulaNodes();
-        });
-    },
-    /* addBillsByData: async function (postData, insertFunc) {
-        await ajaxPost('/bills/insertBills', { postData });
-        // 插入
-        const insertData = postData.filter(item => item.updateType === 'create');
-        const treeData = insertData.map(item => item.updateData);
-        // 插入清单节点
-        if (!insertFunc) {
-            insertFunc = projectObj.project.Bills.tree.insertByDatas;
-        }
-        projectObj.project.Bills.tree.insertByDatas(treeData);
-        projectObj.project.Bills.datas = projectObj.project.Bills.datas.concat(treeData);
-        // 插入主树节点
-        const newNodes = projectObj.project.mainTree.insertByDatas(treeData);
-        for (const node of newNodes) {
-            node.source = projectObj.project.Bills.tree.nodes[projectObj.project.Bills.tree.prefix + node.getID()];
-            node.data = node.source.data;
-            node.sourceType = projectObj.project.Bills.getSourceType();
-        }
-        ProjectController.syncDisplayNewNodes(projectObj.mainController, newNodes, true);
-        return newNodes;
-    }, */
-    addBillsByData: async function (postData, isSameDepth = false) {
-        await ajaxPost('/bills/insertBills', { postData });
-        // 插入
-        const insertData = postData.filter(item => item.updateType === 'create');
-        const treeData = insertData.map(item => item.updateData);
-        // 插入清单节点和主树节点
-        projectObj.project.Bills.datas = projectObj.project.Bills.datas.concat(treeData);
-        let newNodes;
-        if (isSameDepth) {
-            const pre = postData.find(item => item.updateType === 'update');
-            const preID = pre && pre.updateData.ID || null;
-            projectObj.project.Bills.tree.multiInsert(treeData, preID);
-            newNodes = projectObj.project.mainTree.multiInsert(treeData, preID);
+  /* sc: tree_sheet_controller */
+  syncDisplayNewNode: function (sc, newNode, callback) {
+    TREE_SHEET_HELPER.massOperationSheet(sc.sheet, function () {
+      var sels = sc.sheet.getSelections();
+      sc.sheet.addRows(newNode.serialNo(), 1);
+      TREE_SHEET_HELPER.refreshTreeNodeData(sc.setting, sc.sheet, [newNode], false);
+      sc.setTreeSelected(newNode);
+      sc.sheet.setSelection(newNode.serialNo(), sels[0].col, 1, 1);
+      //不显示到中间
+      //sc.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
+      cbTools.refreshFormulaNodes();
+      if (callback) callback();
+    });
+  },
+  syncDisplayNewNodes: function (sc, newNodes, withOutSelect = false, callback) { //withOutSelect 不需要自动选中,外面自已处理
+    TREE_SHEET_HELPER.massOperationSheet(sc.sheet, function () {
+      var sels = sc.sheet.getSelections();
+      newNodes.sort(function (a, b) {
+        let rst = 0;
+        if (a.serialNo() > b.serialNo()) {
+          rst = 1;
         } else {
-            projectObj.project.Bills.tree.insertByDatas(treeData);
-            newNodes = projectObj.project.mainTree.insertByDatas(treeData);
-        }
-        for (const node of newNodes) {
-            node.source = projectObj.project.Bills.tree.nodes[projectObj.project.Bills.tree.prefix + node.getID()];
-            node.data = node.source.data;
-            node.sourceType = projectObj.project.Bills.getSourceType();
+          rst = -1;
         }
-        ProjectController.syncDisplayNewNodes(projectObj.mainController, newNodes, true);
-        return newNodes;
-    },
-    getBillsPostData: function (number) {
-        const project = projectObj.project;
-        const target = project.getParentTarget(project.mainTree.selected, 'sourceType', project.Bills.getSourceType());
-        const baseParentID = target.depth() === 0 ? target.source.getID() : target.source.getParentID();
-        const baseNextID = target.depth() === 0 ? -1 : target.source.getNextSiblingID();
-        const updateNode = target.depth() === 0 ? target.source.children[target.source.children.length - 1] : target;
-        const insertData = [];
-        for (let i = 0; i < number; i++) {
-            const data = {
-                type: billType.BILL,
-                projectID: project.ID(),
-                ID: uuid.v1(),
-                ParentID: baseParentID,
-            };
-            const pre = insertData[i - 1];
-            if (pre) {
-                pre.NextSiblingID = data.ID;
-            }
-            if (i === number - 1) {
-                data.NextSiblingID = baseNextID;
-            }
-            insertData.push(data);
-        }
-        const postData = insertData.map(item => ({
-            updateType: 'create',
-            updateData: item
-        }));
-        if (updateNode) {
-            postData.push({ updateType: 'update', updateData: { ID: updateNode.getID(), NextSiblingID: insertData[0].ID } });
-        }
-        return postData;
-    },
-    addBills: function (project, sheetController, std) {
-        if (!project || !sheetController) { return null; }
-        let target = project.getParentTarget(project.mainTree.selected, 'sourceType', project.Bills.getSourceType());
-        let newSource = null, newNode = null, parentID, nextSiblingID, nodeParentID, nodeNextSiblingID;
-        if (target) {
-            if(target.depth() === 0){
-                parentID = target.source.getID();
-                nextSiblingID = project.Bills.tree.setting.rootId;
-                nodeParentID = target.getID();
-                nodeNextSiblingID = project.mainTree.rootID();
-            } else{
-                parentID = target.source.getParentID();
-                nextSiblingID = target.source.getNextSiblingID();
-                nodeParentID = target.getParentID();
-                nodeNextSiblingID = target.getNextSiblingID();
-            }
-            parentID = target.depth() === 0 ? target.source.getID() : target.source.getParentID();
-            nextSiblingID = target.depth() === 0 ? project.Bills.tree.setting.rootId : target.source.getNextSiblingID();
+        return rst;
+      });
+      let lastNode = null;
+      for (let newNode of newNodes) {
+        sc.sheet.addRows(newNode.serialNo(), 1);
+        TREE_SHEET_HELPER.refreshTreeNodeData(sc.setting, sc.sheet, [newNode], false);
+        lastNode = newNode
+        // sc.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
+      }
+      if (withOutSelect == false && lastNode) {
+        sc.setTreeSelected(lastNode);
+        sc.sheet.setSelection(lastNode.serialNo(), sels[0].col, 1, 1);
+      }
 
-            if (std) {
-                let fixedNode = getRootFixedNode(target);
-                if(!isFlag(fixedNode.data) || (fixedNode.data.flagsIndex.fixed.flag !== fixedFlag.SUB_ENGINERRING && fixedNode.data.flagsIndex.fixed.flag !== fixedFlag.MEASURE)){
-                    return false;
-                }
-                //焦点行属于分部分项
-                if(fixedNode.data.flagsIndex.fixed.flag === fixedFlag.SUB_ENGINERRING){
-                    std.type = billType.FX;
-                    //焦点行是分部分项
-                    let subType = getSubType(target);
-                    if(target.sourceType === project.Bills.getSourceType() && target.data.type === billType.DXFY && subType === billType.FB){
-                        return false;
-                    } else if(target.sourceType === project.Bills.getSourceType() && target.data.type === billType.FB){//焦点行是分部
-                        if(!subType || subType === billType.FX){
-                            parentID = target.source.getID();
-                            nextSiblingID = project.Bills.tree.setting.rootId;
-                            nodeParentID = target.getID();
-                            nodeNextSiblingID = project.mainTree.rootID();
-                        } else{
-                            return false;
-                        }
-                    }
-                } else {
-                    std.type = billType.BILL;
-                }
+      cbTools.refreshFormulaNodes();
+      if (callback) callback();
+    });
+  },
+  syncDisplayNewRationGljNode: function (sc, newNode) {
+    TREE_SHEET_HELPER.massOperationSheet(sc.sheet, function () {
+      sc.sheet.addRows(newNode.serialNo(), 1);
+      TREE_SHEET_HELPER.refreshTreeNodeData(sc.setting, sc.sheet, [newNode], false);
+      // sc.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
+      cbTools.refreshFormulaNodes();
+    });
+  },
+  /* addBillsByData: async function (postData, insertFunc) {
+      await ajaxPost('/bills/insertBills', { postData });
+      // 插入
+      const insertData = postData.filter(item => item.updateType === 'create');
+      const treeData = insertData.map(item => item.updateData);
+      // 插入清单节点
+      if (!insertFunc) {
+          insertFunc = projectObj.project.Bills.tree.insertByDatas;
+      }
+      projectObj.project.Bills.tree.insertByDatas(treeData);
+      projectObj.project.Bills.datas = projectObj.project.Bills.datas.concat(treeData);
+      // 插入主树节点
+      const newNodes = projectObj.project.mainTree.insertByDatas(treeData);
+      for (const node of newNodes) {
+          node.source = projectObj.project.Bills.tree.nodes[projectObj.project.Bills.tree.prefix + node.getID()];
+          node.data = node.source.data;
+          node.sourceType = projectObj.project.Bills.getSourceType();
+      }
+      ProjectController.syncDisplayNewNodes(projectObj.mainController, newNodes, true);
+      return newNodes;
+  }, */
+  addBillsByData: async function (postData, isSameDepth = false) {
+    await ajaxPost('/bills/insertBills', {
+      postData
+    });
+    // 插入
+    const insertData = postData.filter(item => item.updateType === 'create');
+    const treeData = insertData.map(item => item.updateData);
+    // 插入清单节点和主树节点
+    projectObj.project.Bills.datas = projectObj.project.Bills.datas.concat(treeData);
+    let newNodes;
+    if (isSameDepth) {
+      const pre = postData.find(item => item.updateType === 'update');
+      const preID = pre && pre.updateData.ID || null;
+      projectObj.project.Bills.tree.multiInsert(treeData, preID);
+      newNodes = projectObj.project.mainTree.multiInsert(treeData, preID);
+    } else {
+      projectObj.project.Bills.tree.insertByDatas(treeData);
+      newNodes = projectObj.project.mainTree.insertByDatas(treeData);
+    }
+    for (const node of newNodes) {
+      node.source = projectObj.project.Bills.tree.nodes[projectObj.project.Bills.tree.prefix + node.getID()];
+      node.data = node.source.data;
+      node.sourceType = projectObj.project.Bills.getSourceType();
+    }
+    ProjectController.syncDisplayNewNodes(projectObj.mainController, newNodes, true);
+    return newNodes;
+  },
+  getBillsPostData: function (number) {
+    const project = projectObj.project;
+    const target = project.getParentTarget(project.mainTree.selected, 'sourceType', project.Bills.getSourceType());
+    const baseParentID = target.depth() === 0 ? target.source.getID() : target.source.getParentID();
+    const baseNextID = target.depth() === 0 ? -1 : target.source.getNextSiblingID();
+    const updateNode = target.depth() === 0 ? target.source.children[target.source.children.length - 1] : target;
+    const insertData = [];
+    for (let i = 0; i < number; i++) {
+      const data = {
+        type: billType.BILL,
+        unitPriceAnalysis: 1,
+        projectID: project.ID(),
+        ID: uuid.v1(),
+        ParentID: baseParentID,
+      };
+      const pre = insertData[i - 1];
+      if (pre) {
+        pre.NextSiblingID = data.ID;
+      }
+      if (i === number - 1) {
+        data.NextSiblingID = baseNextID;
+      }
+      insertData.push(data);
+    }
+    const postData = insertData.map(item => ({
+      updateType: 'create',
+      updateData: item
+    }));
+    if (updateNode) {
+      postData.push({
+        updateType: 'update',
+        updateData: {
+          ID: updateNode.getID(),
+          NextSiblingID: insertData[0].ID
+        }
+      });
+    }
+    return postData;
+  },
+  addBills: function (project, sheetController, std) {
+    if (!project || !sheetController) {
+      return null;
+    }
+    let target = project.getParentTarget(project.mainTree.selected, 'sourceType', project.Bills.getSourceType());
+    let newSource = null,
+      newNode = null,
+      parentID, nextSiblingID, nodeParentID, nodeNextSiblingID;
+    if (target) {
+      if (target.depth() === 0) {
+        parentID = target.source.getID();
+        nextSiblingID = project.Bills.tree.setting.rootId;
+        nodeParentID = target.getID();
+        nodeNextSiblingID = project.mainTree.rootID();
+      } else {
+        parentID = target.source.getParentID();
+        nextSiblingID = target.source.getNextSiblingID();
+        nodeParentID = target.getParentID();
+        nodeNextSiblingID = target.getNextSiblingID();
+      }
+      parentID = target.depth() === 0 ? target.source.getID() : target.source.getParentID();
+      nextSiblingID = target.depth() === 0 ? project.Bills.tree.setting.rootId : target.source.getNextSiblingID();
 
-                let newCode = project.Bills.newFormatCode(std.code);
-                newSource = project.Bills.insertStdBills(parentID, nextSiblingID, std, newCode);
+      if (std) {
+        let fixedNode = getRootFixedNode(target);
+        if (!isFlag(fixedNode.data) || (fixedNode.data.flagsIndex.fixed.flag !== fixedFlag.SUB_ENGINERRING && fixedNode.data.flagsIndex.fixed.flag !== fixedFlag.MEASURE)) {
+          return false;
+        }
+        //焦点行属于分部分项
+        if (fixedNode.data.flagsIndex.fixed.flag === fixedFlag.SUB_ENGINERRING) {
+          std.type = billType.FX;
+          //焦点行是分部分项
+          let subType = getSubType(target);
+          if (target.sourceType === project.Bills.getSourceType() && target.data.type === billType.DXFY && subType === billType.FB) {
+            return false;
+          } else if (target.sourceType === project.Bills.getSourceType() && target.data.type === billType.FB) { //焦点行是分部
+            if (!subType || subType === billType.FX) {
+              parentID = target.source.getID();
+              nextSiblingID = project.Bills.tree.setting.rootId;
+              nodeParentID = target.getID();
+              nodeNextSiblingID = project.mainTree.rootID();
             } else {
-                newSource = project.Bills.insertBills(parentID, nextSiblingID);
+              return false;
             }
-            newNode = project.mainTree.insert(nodeParentID, nodeNextSiblingID, newSource.data.ID);
+          }
         } else {
-            alert('不可添加清单');
+          std.type = billType.BILL;
         }
 
-        if (newNode) {
-            newNode.source = newSource;
-            newNode.sourceType = project.Bills.getSourceType();
-            newNode.data = newSource.data;
+        let newCode = project.Bills.newFormatCode(std.code);
+        newSource = project.Bills.insertStdBills(parentID, nextSiblingID, std, newCode);
+      } else {
+        newSource = project.Bills.insertBills(parentID, nextSiblingID);
+      }
+      newNode = project.mainTree.insert(nodeParentID, nodeNextSiblingID, newSource.data.ID);
+    } else {
+      alert('不可添加清单');
+    }
 
-            this.syncDisplayNewNode(sheetController, newNode);
-            return newNode;
-        }
-        function getSubType(node){
-            for(let sub of node.children){
-                if(sub.sourceType === project.Bills.getSourceType() && sub.data.type === billType.FB){
-                    return billType.FB;
-                }
-                else if(sub.sourceType === project.Bills.getSourceType() && sub.data.type === billType.FX){
-                    return billType.FX;
-                }
-            }
-            return null;
-        }
-    },
-    addRootBill:function (project, sheetController) {//添加大项费用
-        if (!project || !sheetController) { return null; }
-        this.addSpecialBill(project, sheetController,null, project.mainTree.selected.nextSibling,true,billType.DXFY);
-    },
-    addFB:function(project, sheetController) {//添加分部
-        if (!project || !sheetController) { return null; }
-        let selected = project.mainTree.selected;
-        if(selected.parent==null&&isFlag(selected.data)&&selected.data.flagsIndex.fixed.flag==fixedFlag.SUB_ENGINERRING){//选中的是分部分项,则插入做为最后一个子项
-            return this.addSpecialBill(project, sheetController,selected, null,true,billType.FB);
-        }
-        if(selected.parent){
-            return this.addSpecialBill(project, sheetController,selected.parent, selected.nextSibling,true,billType.FB);
-        }
+    if (newNode) {
+      newNode.source = newSource;
+      newNode.sourceType = project.Bills.getSourceType();
+      newNode.data = newSource.data;
 
-    },
-    addFX:function(project, sheetController) {//添加分项
-        if (!project || !sheetController) { return null; }
-        let selected = project.mainTree.selected;
-        console.log(selected);
-        if(selected.data.type==billType.FB||(selected.parent==null&&isFlag(selected.data)&&selected.data.flagsIndex.fixed.flag==fixedFlag.SUB_ENGINERRING)){//选中的是分部或者是分部分项工程,则插入做为最后一个子项
-            return this.addSpecialBill(project, sheetController,selected, null,true,billType.FX);
-        }
-        if(selected.parent){
-            if(selected.data.type==billType.FX||selected.data.type==billType.BX){
-                return this.addSpecialBill(project, sheetController,selected.parent, selected.nextSibling,true,billType.FX);
-            }
-        }
-    },
-    addSpecialBill(project,sheetController,parent,nextSibling,isUserAdd,type){
-        let newNode = null;
-        let b_nexID = nextSibling==null?-1:nextSibling.source.getID();//主树和清单树,对应的树节点ID不一样
-        let m_nexID = nextSibling==null?-1:nextSibling.getID();
-        let b_parent = parent==null?-1:parent.source.getID();
-        let m_parent = parent==null?-1:parent.getID();
+      this.syncDisplayNewNode(sheetController, newNode);
+      return newNode;
+    }
 
-        let newSource = project.Bills.insertSpecialBill(b_parent, b_nexID,isUserAdd,type);
-        newNode = project.mainTree.insert(m_parent,m_nexID, newSource.data.ID);
-        if (newNode) {
-            newNode.source = newSource;
-            newNode.sourceType = project.Bills.getSourceType();
-            newNode.data = newSource.data;
-            this.syncDisplayNewNode(sheetController, newNode);
-            return newNode;
+    function getSubType(node) {
+      for (let sub of node.children) {
+        if (sub.sourceType === project.Bills.getSourceType() && sub.data.type === billType.FB) {
+          return billType.FB;
+        } else if (sub.sourceType === project.Bills.getSourceType() && sub.data.type === billType.FX) {
+          return billType.FX;
         }
-    },
+      }
+      return null;
+    }
+  },
+  addRootBill: function (project, sheetController) { //添加大项费用
+    if (!project || !sheetController) {
+      return null;
+    }
+    this.addSpecialBill(project, sheetController, null, project.mainTree.selected.nextSibling, true, billType.DXFY);
+  },
+  addFB: function (project, sheetController) { //添加分部
+    if (!project || !sheetController) {
+      return null;
+    }
+    let selected = project.mainTree.selected;
+    if (selected.parent == null && isFlag(selected.data) && selected.data.flagsIndex.fixed.flag == fixedFlag.SUB_ENGINERRING) { //选中的是分部分项,则插入做为最后一个子项
+      return this.addSpecialBill(project, sheetController, selected, null, true, billType.FB);
+    }
+    if (selected.parent) {
+      return this.addSpecialBill(project, sheetController, selected.parent, selected.nextSibling, true, billType.FB);
+    }
 
-    addRation: function (project, sheetController, rationType, std) {
-        if (!project || !sheetController) { return; }
+  },
+  addFX: function (project, sheetController) { //添加分项
+    if (!project || !sheetController) {
+      return null;
+    }
+    let selected = project.mainTree.selected;
+    console.log(selected);
+    if (selected.data.type == billType.FB || (selected.parent == null && isFlag(selected.data) && selected.data.flagsIndex.fixed.flag == fixedFlag.SUB_ENGINERRING)) { //选中的是分部或者是分部分项工程,则插入做为最后一个子项
+      return this.addSpecialBill(project, sheetController, selected, null, true, billType.FX);
+    }
+    if (selected.parent) {
+      if (selected.data.type == billType.FX || selected.data.type == billType.BX) {
+        return this.addSpecialBill(project, sheetController, selected.parent, selected.nextSibling, true, billType.FX);
+      }
+    }
+  },
+  addSpecialBill(project, sheetController, parent, nextSibling, isUserAdd, type) {
+    let newNode = null;
+    let b_nexID = nextSibling == null ? -1 : nextSibling.source.getID(); //主树和清单树,对应的树节点ID不一样
+    let m_nexID = nextSibling == null ? -1 : nextSibling.getID();
+    let b_parent = parent == null ? -1 : parent.source.getID();
+    let m_parent = parent == null ? -1 : parent.getID();
 
-        let selected = project.mainTree.selected, newSource = null, newNode = null;
-        if (selected === null) { return; }
+    let newSource = project.Bills.insertSpecialBill(b_parent, b_nexID, isUserAdd, type);
+    newNode = project.mainTree.insert(m_parent, m_nexID, newSource.data.ID);
+    if (newNode) {
+      newNode.source = newSource;
+      newNode.sourceType = project.Bills.getSourceType();
+      newNode.data = newSource.data;
+      this.syncDisplayNewNode(sheetController, newNode);
+      return newNode;
+    }
+  },
 
-        if (selected.sourceType === project.Bills.getSourceType() && selected.depth() > 0) {
-            if (selected.source.children.length > 0) {
-                alert('当前清单已有清单子项,不能套用定额。');
-            } else if (selected.data.calcBase&&selected.data.calcBase!="") {
-                alert('当前有基数计算,不能插入定额/量价/人材机。');
-            } else {
-                if(selected.data.type === billType.FB){
-                    return;
-                }
-                if (std) {
-                    newSource = project.Ration.insertStdRation(selected.source.getID(), null, std);
-                    project.ration_glj.addRationGLJ(newSource,std);
-                } else {
-                    newSource = project.Ration.insertRation(selected.source.getID(),null, rationType);
-                }
-                newNode = project.mainTree.insert(selected.getID(), selected.tree.rootID(), newSource.ID);
-            }
-        } else if (selected.sourceType === project.Ration.getSourceType()) {
-            if (std) {
-                newSource = project.Ration.insertStdRation(selected.source[project.masterField.ration], selected.source, std);
-                project.ration_glj.addRationGLJ(newSource,std);
-            } else {
-                newSource = project.Ration.insertRation(selected.source[project.masterField.ration], selected.source, rationType);
-            }
-            newNode = project.mainTree.insert(selected.getParentID(), selected.getNextSiblingID(), newSource.ID);
-        };
-        if (newNode) {
-            newNode.source = newSource;
-            newNode.sourceType = project.Ration.getSourceType();
-            newNode.data = newSource;
+  addRation: function (project, sheetController, rationType, std) {
+    if (!project || !sheetController) {
+      return;
+    }
 
-            this.syncDisplayNewNode(sheetController, newNode);
+    let selected = project.mainTree.selected,
+      newSource = null,
+      newNode = null;
+    if (selected === null) {
+      return;
+    }
 
+    if (selected.sourceType === project.Bills.getSourceType() && selected.depth() > 0) {
+      if (selected.source.children.length > 0) {
+        alert('当前清单已有清单子项,不能套用定额。');
+      } else if (selected.data.calcBase && selected.data.calcBase != "") {
+        alert('当前有基数计算,不能插入定额/量价/人材机。');
+      } else {
+        if (selected.data.type === billType.FB) {
+          return;
         }
-    },
-    replaceRation: function (project, sheetController, std) {
-        if (!project || !sheetController) { return; }
-
-        let selected = project.mainTree.selected, newSource = null, newNode = null;
-        if (selected === null) { return; }
-
-        if (  selected.sourceType === project.Ration.getSourceType()) {
-            project.Ration.replaceRation(selected.source, std);
-            project.ration_glj.addRationGLJ(selected.source, std);
-            sheetController.refreshTreeNode([selected], false);
+        if (std) {
+          newSource = project.Ration.insertStdRation(selected.source.getID(), null, std);
+          project.ration_glj.addRationGLJ(newSource, std);
         } else {
-            alert('当前焦点行不是定额,无法替换。');
+          newSource = project.Ration.insertRation(selected.source.getID(), null, rationType);
         }
-    },
-    addNewNodes:function (updateData){
-        let controller = projectObj.mainController;
-        let Bill = projectObj.project.Bills;
-        let newAddNode = [];
-        let newRationNodes = [];
-        for(let nb of updateData.bills.add){
-            let newSource = Bill.tree.insertByData(nb, nb.ParentID, -1, true);//按顺序插入的情况下,nextID为-1,树节点
-            let newNode = projectObj.project.mainTree.insert(nb.ParentID, -1, newSource.data.ID);
-            newNode.source = newSource;
-            newNode.sourceType = Bill.getSourceType();
-            newNode.data = newSource.data;
-            controller.sheet.addRows(newNode.serialNo(), 1);
-           // controller.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
-            newAddNode.push(newNode);
-            Bill.datas.push(nb);
-        }
-        for(let nr of updateData.ration.add){
-            let newNode = projectObj.project.mainTree.insert(nr.billsItemID, -1, nr.ID);
-            newNode.source = nr;
-            newNode.sourceType = projectObj.project.Ration.getSourceType();
-            newNode.data = nr;
-            controller.sheet.addRows(newNode.serialNo(), 1);
-           // controller.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
-            newAddNode.push(newNode);
-            newRationNodes.push(newNode);
-            projectObj.project.Ration.datas.push(nr);
-        }
-        TREE_SHEET_HELPER.refreshTreeNodeData(controller.setting, controller.sheet, newAddNode, false);
-        return newRationNodes;
+        newNode = project.mainTree.insert(selected.getID(), selected.tree.rootID(), newSource.ID);
+      }
+    } else if (selected.sourceType === project.Ration.getSourceType()) {
+      if (std) {
+        newSource = project.Ration.insertStdRation(selected.source[project.masterField.ration], selected.source, std);
+        project.ration_glj.addRationGLJ(newSource, std);
+      } else {
+        newSource = project.Ration.insertRation(selected.source[project.masterField.ration], selected.source, rationType);
+      }
+      newNode = project.mainTree.insert(selected.getParentID(), selected.getNextSiblingID(), newSource.ID);
+    };
+    if (newNode) {
+      newNode.source = newSource;
+      newNode.sourceType = project.Ration.getSourceType();
+      newNode.data = newSource;
+
+      this.syncDisplayNewNode(sheetController, newNode);
+
+    }
+  },
+  replaceRation: function (project, sheetController, std) {
+    if (!project || !sheetController) {
+      return;
     }
-/*    addVolumePrice: function (project, sheetController) {
-        if (!project || !sheetController) { return null; }
 
-        var selected = project.mainTree.selected;
-        var newSource = null, newNode = null;
-        if(selected === null) {
-            return;
-        }
+    let selected = project.mainTree.selected,
+      newSource = null,
+      newNode = null;
+    if (selected === null) {
+      return;
+    }
 
-        if (selected.sourceType === project.Bills.getSourceType() && selected.source.children.length === 0) {
-            newSource = project.VolumePrice.insertVolumePrice(selected.source.getID());
-            newNode = project.mainTree.insert(selected.getID(), selected.tree.rootID());
-        } else if (selected.sourceType === project.Ration.getSourceType() || selected.sourceType === project.VolumePrice.getSourceType()) {
-            newSource = project.VolumePrice.insertVolumePrice(selected.source[project.masterField.volumePrice], selected.source);
-            newNode = project.mainTree.insert(selected.getParentID(), selected.getNextSiblingID());
-        }
-        if (newNode) {
-            newNode.source = newSource;
-            newNode.sourceType = project.VolumePrice.getSourceType();
-            newNode.data = newSource;
+    if (selected.sourceType === project.Ration.getSourceType()) {
+      project.Ration.replaceRation(selected.source, std);
+      project.ration_glj.addRationGLJ(selected.source, std);
+      sheetController.refreshTreeNode([selected], false);
+    } else {
+      alert('当前焦点行不是定额,无法替换。');
+    }
+  },
+  addNewNodes: function (updateData) {
+    let controller = projectObj.mainController;
+    let Bill = projectObj.project.Bills;
+    let newAddNode = [];
+    let newRationNodes = [];
+    for (let nb of updateData.bills.add) {
+      let newSource = Bill.tree.insertByData(nb, nb.ParentID, -1, true); //按顺序插入的情况下,nextID为-1,树节点
+      let newNode = projectObj.project.mainTree.insert(nb.ParentID, -1, newSource.data.ID);
+      newNode.source = newSource;
+      newNode.sourceType = Bill.getSourceType();
+      newNode.data = newSource.data;
+      controller.sheet.addRows(newNode.serialNo(), 1);
+      // controller.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
+      newAddNode.push(newNode);
+      Bill.datas.push(nb);
+    }
+    for (let nr of updateData.ration.add) {
+      let newNode = projectObj.project.mainTree.insert(nr.billsItemID, -1, nr.ID);
+      newNode.source = nr;
+      newNode.sourceType = projectObj.project.Ration.getSourceType();
+      newNode.data = nr;
+      controller.sheet.addRows(newNode.serialNo(), 1);
+      // controller.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
+      newAddNode.push(newNode);
+      newRationNodes.push(newNode);
+      projectObj.project.Ration.datas.push(nr);
+    }
+    TREE_SHEET_HELPER.refreshTreeNodeData(controller.setting, controller.sheet, newAddNode, false);
+    return newRationNodes;
+  }
+  /*    addVolumePrice: function (project, sheetController) {
+          if (!project || !sheetController) { return null; }
 
-            this.syncDisplayNewNode(sheetController, newNode);
-        }
-    },*/
-/*    calculateAll: function (project, sheetController, CalcType) {
-        this.project.setCalcFlag(CalcType);
-        let calc = new BillsCalcHelper(project);
-        calc.calcAll();
-        sheetController.showTreeData();
-        project.Bills.updateAll();
-        calc = null;
-    }*/
-}
+          var selected = project.mainTree.selected;
+          var newSource = null, newNode = null;
+          if(selected === null) {
+              return;
+          }
+
+          if (selected.sourceType === project.Bills.getSourceType() && selected.source.children.length === 0) {
+              newSource = project.VolumePrice.insertVolumePrice(selected.source.getID());
+              newNode = project.mainTree.insert(selected.getID(), selected.tree.rootID());
+          } else if (selected.sourceType === project.Ration.getSourceType() || selected.sourceType === project.VolumePrice.getSourceType()) {
+              newSource = project.VolumePrice.insertVolumePrice(selected.source[project.masterField.volumePrice], selected.source);
+              newNode = project.mainTree.insert(selected.getParentID(), selected.getNextSiblingID());
+          }
+          if (newNode) {
+              newNode.source = newSource;
+              newNode.sourceType = project.VolumePrice.getSourceType();
+              newNode.data = newSource;
+
+              this.syncDisplayNewNode(sheetController, newNode);
+          }
+      },*/
+  /*    calculateAll: function (project, sheetController, CalcType) {
+          this.project.setCalcFlag(CalcType);
+          let calc = new BillsCalcHelper(project);
+          calc.calcAll();
+          sheetController.showTreeData();
+          project.Bills.updateAll();
+          calc = null;
+      }*/
+}

文件差异内容过多而无法显示
+ 509 - 309
web/building_saas/unit_price_file/index.js


+ 60 - 0
web/over_write/js/shandong_2016.js

@@ -283,6 +283,65 @@ if (typeof baseFigureTemplate !== 'undefined') {
   };
 }
 
+//工料机类型排序:人工、机上人工、混凝土、砂浆、配合比、普通材料、商品混凝土、商品砂浆、外购砼构件、绿化苗木、机械台班、机械组成物、设备。
+
+function o_sortRationGLJ(list, std, tm) {
+  let lo_sh = typeof _ !== 'undefined' ? _ : require('lodash');
+  const field = std ? 'gljType' : 'type';
+  const TypeMap = {
+    1: 1,
+    303: 2,
+    202: 3,
+    203: 4,
+    204: 5,
+    201: 6,
+    205: 7,
+    206: 8,
+    208: 9,
+    209: 10,
+    301: 11,
+    302: 12,
+    5: 13,
+  };
+  if (tm) TypeMap = tm;
+  list = lo_sh.sortByAll(list, [function (item) {
+    return TypeMap[item[field]];
+  }, function (item) {
+    let arr = item.code.split('-')
+    return arr[0];
+  }, 'code']);
+  return list;
+}
+
+
+if (typeof gljUtil !== 'undefined') {
+  gljUtil.sortRationGLJ = o_sortRationGLJ;
+
+  gljUtil.sortProjectGLJ = function (list) {
+    //人工、机上人工、普通材料、商品混凝土、商品砂浆、外购砼构件、绿化苗木、机械台班、机械组成物、设备、混凝土、砂浆、配合比
+    const TypeMap = {
+      1: 1,
+      303: 2,
+      201: 3,
+      205: 4,
+      206: 5,
+      208: 6,
+      209: 7,
+      301: 8,
+      302: 9,
+      5: 10,
+      202: 11,
+      203: 12,
+      204: 13,
+    };
+    return o_sortRationGLJ(list, false, TypeMap)
+  }
+}
+
+
+
+
+
 //山东工地转移费率值修改特殊处理
 if (typeof feeRateObject !== 'undefined') {
   feeRateObject.feeRateSpecialHandle = function (subRate, value) {
@@ -299,6 +358,7 @@ if (typeof module !== 'undefined' && !module.nodeType) {
   module.exports = {
     progression,
     deficiency,
+    sortRationGLJ: o_sortRationGLJ,
     getDefalutAssistProductionFeeRate: function () {
       return 5
     }