zhangweicheng 5 vuotta sitten
vanhempi
commit
ff3b4f0013

+ 2 - 1
modules/main/models/project.js

@@ -18,7 +18,7 @@ var calc_program_facade = require('../facade/calc_program_facade');
 import GLJController from "../../glj/controllers/glj_controller";
 let installation_facade = require('../facade/installation_facade');
 let pmController = require('../../pm/controllers/pm_controller');
-
+let divide_facade = require('../facade/divide_facade');
 
 const ProjectModel = require('../../pm/models/project_model').project;
 import GLJListModel from "../../glj/models/glj_list_model";
@@ -45,6 +45,7 @@ moduleMap[projectConsts.PROJECTGLJ] = new GLJController();
 moduleMap[projectConsts.INSTALLATION_FEE] = installation_facade;
 moduleMap[projectConsts.RATION_TEMPLATE] = ration_template;
 moduleMap[projectConsts.PROJECT_INFO] = pmController;
+moduleMap[projectConsts.DIVIDE_SETTING] = divide_facade;
 
 var Project = function (){};
 

+ 2 - 1
modules/main/models/project_consts.js

@@ -21,7 +21,8 @@ let projectConst = {
     LABOUR_COE:'labour_coe',
     CALC_PROGRAM:'calc_program',
     INSTALLATION_FEE:'installation_fee',
-    PROJECT_INFO: 'project_info'
+    PROJECT_INFO: 'project_info',
+    DIVIDE_SETTING:'divide_setting'
 };
 
 let projectConstList = [

+ 76 - 78
public/web/sheet/sheet_common.js

@@ -229,6 +229,77 @@ var sheetCommonObj = {
             sheet.setStyle(row, -1, setting.getStyle(data[row]));
         }
     },
+    showTreeData:function (sheet,setting,data) {
+      let ch = GC.Spread.Sheets.SheetArea.viewport;
+      let parentMap=_.groupBy(data, 'ParentID');
+      let visibleMap = {};
+      let styleRow=[];
+      let treeCol =  setting.treeCol?setting.treeCol:0;
+      sheet.suspendPaint();
+      sheet.suspendEvent();
+      for (let col = 0; col < setting.header.length; col++) {
+          let hAlign = "left", vAlign = "center";
+          if (setting.header[col].hAlign) {
+              hAlign = setting.header[col].hAlign;
+          } else if (setting.header[col].dataType !== "String"){
+              hAlign = "right";
+          }
+          vAlign = setting.header[col].vAlign?setting.header[col].vAlign:vAlign;
+          sheetCommonObj.setAreaAlign(sheet.getRange(-1, col, -1, 1), hAlign, vAlign);
+          if (setting.header[col].formatter) {
+              sheet.setFormatter(-1, col, setting.header[col].formatter, GC.Spread.Sheets.SheetArea.viewport);
+          }
+          if(setting.header[col].cellType === "comboBox"){
+              this.setComboBox(-1,col,sheet,setting.header[col].options,setting.header[col].editorValueType,setting.header[col].editable,setting.header[col].maxDropDownItems);
+          }
+          for (let row = 0; row < data.length; row++) {
+              if(data[row].cellType === 'comboBox'){
+                  let options = data[row].options ? data[row].options.split("@") : [];
+                  this.setComboBox(row,col,sheet,options);
+              }else if(data[row].cellType === 'String'){//默认设置字符输入,避免出现输入10:01变成日期的情况
+                  sheet.setFormatter(row, col,"@", GC.Spread.Sheets.SheetArea.viewport);
+              }
+              let val = data[row][setting.header[col].dataCode];
+              if(val&&setting.header[col].dataType === "Number"){
+                  if(setting.header[col].hasOwnProperty('decimalField')){
+                      let decimal = getDecimal(setting.header[col].decimalField);
+                      val =scMathUtil.roundToString(val,decimal);
+                      sheet.setFormatter(-1, col,getFormatter(decimal), GC.Spread.Sheets.SheetArea.viewport);
+                  }else {
+                      val =scMathUtil.roundToString(val,2);
+                  }
+              }
+              if(val!=null && setting.header[col].cellType == "checkBox"){
+                  this.setCheckBoxCell(row,col,sheet,val);
+              }
+              sheet.setValue(row, col, val, ch);
+              if(col==treeCol){
+                  let treeType = sheetCommonObj.getTreeNodeCellType(data,row,parentMap,treeCol);
+                  sheet.getCell(row, col).cellType(treeType);
+                  visibleMap[data[row].ID] = treeType.collapsed;
+                  this.setRowVisible(data,row,visibleMap,sheet);
+              }
+              if(data[row].bgColour) styleRow.push(row)
+          }
+      }
+      for(let r of styleRow){
+          this.setRowStyle(r,sheet,data[r].bgColour);
+      }
+      this.lockCells(sheet,setting);
+      sheet.resumeEvent();
+      sheet.resumePaint();
+    },
+    setRowVisible:function (data,row,visibleMap,sheet) {
+      sheet.getRange(row , -1, 1, -1).visible(getVisible(data[row].ParentID));//显示或隐藏
+      function getVisible(ParentID) {
+          if(visibleMap[ParentID]) return false //如果父节点是缩起的,那就隐藏本身。
+          if(visibleMap[ParentID] == false){//如果父节点不是缩起的,要再往父节点找看
+              let pnode = _.find(data,{'ID':ParentID});
+              if(pnode) return getVisible(pnode.ParentID);//如果有父节点,递归调用
+              return true;//没有,返回显示
+          }
+      }
+    },
     checkData: function (col, setting, value) {
         let result = true;
         let validator = setting.header[col].validator !== undefined ? setting.header[col].validator : null;
@@ -398,81 +469,7 @@ var sheetCommonObj = {
         sheet.showRow(showRow, GC.Spread.Sheets.VerticalPosition.top);
 
     },
-    setSelectButton(row, col, sheet, header) {
-        /*  let getSelectButton = function (cellWidth=100) {
-              function moreButton() {
-  
-              }
-              moreButton.prototype = new GC.Spread.Sheets.CellTypes.Button();
-              moreButton.prototype.paint = function (ctx, value, x, y, w, h, style, options){
-                  GC.Spread.Sheets.CellTypes.Button.prototype.paint.call(this, ctx, value, x, y, w, h, style, options);
-                  let buttonW = cellWidth/5;
-                  let endX = x+w-2;
-                  if(value){
-                      let textWidth = ctx.measureText(value).width;
-                      let spaceWidth = cellWidth - buttonW;
-                      let textEndX = x+2+textWidth;
-                      if(spaceWidth<textWidth){
-                          for(let i = value.length-1;i>1;i--){
-                              let newValue = value.substr(0,i);
-                              let newTestWidth =  ctx.measureText(newValue).width;
-                              if(spaceWidth>newTestWidth){
-                                  value = newValue;
-                                  textEndX = x+2+newTestWidth;
-                                  break;
-                              }
-                          }
-                      }
-                      ctx.fillText(value,textEndX,y+h-5);
-                  }
-  
-                  //画三个点
-                  ctx.save();
-                  ctx.beginPath();
-                  ctx.arc(endX-buttonW/2,y+h/2,1,0,360,false);
-                  ctx.arc(endX-buttonW/2-4,y+h/2,1,0,360,false);
-                  ctx.arc(endX-buttonW/2+4,y+h/2,1,0,360,false);
-                  ctx.fillStyle="black";//填充颜色,默认是黑色
-                  ctx.fill();//画实心圆
-                  ctx.closePath();
-                  ctx.restore();
-              };
-  
-              moreButton.prototype.processMouseLeave= function (hitinfo) {
-                  let newCell = new selectButton();
-                  hitinfo.sheet.setCellType(hitinfo.row, hitinfo.col, newCell, GC.Spread.Sheets.SheetArea.viewport);
-                  hitinfo.sheet.getCell(hitinfo.row, hitinfo.col).locked(false);
-              };
-  
-              function selectButton() {
-              }
-  
-              selectButton.prototype = new GC.Spread.Sheets.CellTypes.Text();
-  
-              selectButton.prototype.paint = function (ctx, value, x, y, w, h, style, options){
-                  GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this,arguments);
-              };
-              selectButton.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
-                  return {
-                      x: x,
-                      y: y,
-                      row: context.row,
-                      col: context.col,
-                      cellStyle: cellStyle,
-                      cellRect: cellRect,
-                      sheetArea: context.sheetArea
-                  };
-              };
-              selectButton.prototype.processMouseDown = function (hitinfo){
-                  if(hitinfo.sheet.getCell(hitinfo.row,hitinfo.col).locked()!=true){
-                      let b1 = new moreButton();
-                      b1.marginLeft(cellWidth*4/5);
-                      hitinfo.sheet.setCellType(hitinfo.row, hitinfo.col, b1, GC.Spread.Sheets.SheetArea.viewport);
-                      hitinfo.sheet.getCell(hitinfo.row, hitinfo.col).locked(true);
-                  }
-              };
-              return new selectButton();
-          };*/
+    setSelectButton(row, col, sheet, header) { 
         sheet.setCellType(row, col, this.getSelectButton(header.headerWidth), GC.Spread.Sheets.SheetArea.viewport);
     },
     getSelectButton(cellWidth = 100) {
@@ -773,7 +770,7 @@ var sheetCommonObj = {
         }
         return new getTipsCombo();
     },
-    getTreeNodeCellType: function (datas, row, parentMap) {// 2018-09-26  不用spreadjs默认的树结构,自定义控件
+    getTreeNodeCellType: function (datas, row, parentMap,treeCol) {// 2018-09-26  不用spreadjs默认的树结构,自定义控件
         var ns = GC.Spread.Sheets;
         let rectW = 10;
         let rectH = 10;
@@ -867,7 +864,8 @@ var sheetCommonObj = {
                     let parent = getParent(item.ParentID, datas);
                     if (!parent) return true;
                     let p_row = datas.indexOf(parent);
-                    let visible = !sheet.getCellType(p_row, 0).collapsed;
+                    treeCol = treeCol?treeCol:0;
+                    let visible = !sheet.getCellType(p_row, treeCol).collapsed;
                     if (visible == true) { //如果是显示的,则要再往父节点的父节点检查,只要有一个节点是隐藏的,则都是隐藏
                         return getVisible(parent);
                     } else {
@@ -883,7 +881,7 @@ var sheetCommonObj = {
         return new TreeNodeCellType()
 
         function getTreeLevel(item, data) {
-            if (item.ParentID) {
+            if (item.ParentID && item.ParentID!=-1) {
                 let pitem = _.find(data, { 'ID': item.ParentID });
                 return getTreeLevel(pitem, data) + 1;
             } else {

+ 3 - 11
web/building_saas/glj/html/project_glj.html

@@ -16,7 +16,6 @@
         </div>
         <a class="btn btn-sm ml-1" id="editUnitFile" href="/unitPrice/index/123" target="_"> 编辑单价文件</a>
     </div>
-
 </div>
 
 <div class="container-fluid">
@@ -26,18 +25,11 @@
                 <div class=" gl-side  filterType" id='filterType'>
                     <ul class="nav flex-column nav-side mt-2 mb-2"  style="margin-top: 0px!important;">
                         <li class="nav-item"><a class="nav-link active" href="#" id="ALL">所有工料机</a></li>
-
-                        <!--  <li class="nav-item"><a class="nav-link" href="javascript:void(0)" id="FBFX">分部分项人材机</a></li>
-                          <li class="nav-item"><a class="nav-link" href="javascript:void(0)" id="TECH">措施项目人材机</a></li>
-                          <li class="nav-item"><a class="nav-link" href="javascript:void(0)" id="JGCL">甲供材料</a></li>
-                          <li class="nav-item"><a class="nav-link" href="javascript:void(0)" id="ZGCL">暂估材料</a></li>
-                          <li class="nav-item"><a class="nav-link" href="javascript:void(0)" id="SCHZ">三材汇总</a></li>
-                          <li class="nav-item"><a class="nav-link" href="javascript:void(0)" id="ZYCL">主要材料</a></li>-->
                     </ul>
                 </div>
-                <div class="main-data-top left" id="project_glj_sheet"></div>
-            </div>
-            <div class="resize-y" id="projectGljResize"></div>
+            <div class="main-data-top left" id="project_glj_sheet"></div>
+         </div>
+         <div class="resize-y" id="projectGljResize"></div>
             <div class="bottom-content" id="projectGljBottom">
                 <ul class="nav nav-tabs d-flex" role="tablist">
                     <li class="nav-item">

+ 8 - 3
web/building_saas/main/html/main.html

@@ -71,6 +71,7 @@
                 <li class="nav-item"><a class="active" data-toggle="tab" href="#zaojiashu" id="tab_zaojiashu" role="tab">造价书</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#project_glj" id="tab_project_glj" data-name="tab_project_glj" role="tab">工料机汇总</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#fee_rates" id="tab_fee_rate" role="tab" >费率</a></li>
+                <li class="nav-item"><a data-toggle="tab" href="#divide" id="tab_divide" role="tab" >分摊</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#calc_program_manage" id="tab_calc_program_manage" role="tab" style="display:none">总计算程序</a></li>
                <!-- <li class="nav-item"><a data-toggle="tab" href="#tender_price" id="tab_tender_price" role="tab">调价</a></li>-->
                 <li class="nav-item"><a data-toggle="tab" href="#reports" role="tab" id="tab_report" onclick="rptTplObj.iniPage();">报表</a></li>
@@ -669,9 +670,12 @@
             <div class="tab-pane" id="fee_rates" role="tabpanel">
                 <%include ../../fee_rates/fee_rate.html %>
             </div>
-              <div class="tab-pane" id="tender_price" role="tabpanel">
-                  <%include tender_price.html %>
-              </div>
+            <div class="tab-pane" id="divide" role="tabpanel">
+              <%include divide.html %>
+            </div>
+            <div class="tab-pane" id="tender_price" role="tabpanel">
+                <%include tender_price.html %>
+            </div>
             <div class="tab-pane" id="calc_program_manage" role="tabpanel">
                 <%include calc_program_manage.html %>
             </div>
@@ -2054,6 +2058,7 @@
     <script type="text/javascript" src="/web/building_saas/complementary_ration_lib/js/main.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/material_calc_view.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/electrovalence_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/divide_view.js"></script>
     <script type="text/javascript" src="/public/web/storageUtil.js"></script>
     <script type="text/javascript" src="/web/building_saas/report/js/rpt_jspdf.js"></script>
 

+ 2 - 1
web/building_saas/main/js/models/main_consts.js

@@ -17,7 +17,8 @@ const ModuleNames = {
     labour_coe: 'labour_coe',
     calc_program: 'calc_program',
     installation_fee:'installation_fee',
-    projectInfo: 'project_info'
+    projectInfo: 'project_info',
+    divide_setting:'divide_setting'
 };
 
 let gljType = gljUtil.gljType;

+ 1 - 0
web/building_saas/main/js/models/project.js

@@ -99,6 +99,7 @@ var PROJECT = {
             this.labourCoe = new LabourCoe(this);
             this.calcProgram = new CalcProgram(this);
             this.calcBase = calcBase;
+            this.divide_setting = new DivideSetting(this);
 
             // this.masterField = {ration: 'billsItemID', volumePrice: 'billsItemID'};
             this.masterField = {ration: 'billsItemID'};

+ 12 - 1
web/building_saas/main/js/models/project_glj.js

@@ -1758,4 +1758,15 @@ ProjectGLJ.prototype.loadNewProjectGLJToCache = function (data,tIDMap) {//把新
     this.datas.gljList.push(data);
     IDMap[data.id] = data;
     return data;
-};
+};
+
+class DivideSetting {
+  constructor (project) {
+      this.project = project;
+      this.datas = [];
+      project.registerModule(ModuleNames.divide_setting, this);
+  };
+  loadData (datas) {
+      this.datas = datas;
+  };
+}

+ 5 - 0
web/building_saas/main/js/views/side_tools.js

@@ -9,6 +9,7 @@ $(window).resize(function() {
     billsGuidance.setColumnWidthByRate(billsGuidance.elfItem.workBook, $('#zy').width(), billsGuidance.elfItem.headers);
     billsGuidance.refreshWorkBook();
     rationLibObj.refreshSpread();
+    loadDivideHeight();
     //BillsElf.setColumnWidthByRate();
     loadSideToolsHeight();
     //刷新主界面与各库中间的拖动条宽度:始终保持为一个宽度(在小窗口打开一个库,再放大窗口后,该拖动条宽度会变大)
@@ -189,6 +190,10 @@ function loadSideToolsHeight() {
         SlideResize.loadMultiVerticalHeight(blockLibMulti.module, blockLibMulti.eles, blockLibMulti.totalHeight, function () {
             blockLibObj.refreshSpread();
         });
+    }else if($('#divide_de').is(':visible')){
+      SlideResize.loadVerticalHeight(dividRationLibResizeEles.eleObj.module, dividRationLibResizeEles.eleObj, dividRationLibResizeEles.limit, function () {
+         //rationLibObj.refreshSpread();
+      });
     }
 }