|  | @@ -49,6 +49,55 @@ const posSpreadSetting = {
 | 
	
		
			
				|  |  |      readOnly: true,
 | 
	
		
			
				|  |  |      selectedBackColor: '#fffacd',
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const gclSpreadSetting = {
 | 
	
		
			
				|  |  | +    baseCols: [
 | 
	
		
			
				|  |  | +        {title: '清单编号', colSpan: '1', rowSpan: '2', field: 'b_code', hAlign: 0, width: 80, formatter: '@'},
 | 
	
		
			
				|  |  | +        {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 230, formatter: '@'},
 | 
	
		
			
				|  |  | +        {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@', cellType: 'unit'},
 | 
	
		
			
				|  |  | +        {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 60, type: 'Number'},
 | 
	
		
			
				|  |  | +        {title: '签约清单|数量', colSpan: '2|1', rowSpan: '1|1', field: 'deal_bills_qty', hAlign: 2, width: 60, type: 'Number'},
 | 
	
		
			
				|  |  | +        {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'deal_bills_tp', hAlign: 2, width: 60, type: 'Number'},
 | 
	
		
			
				|  |  | +        {title: '台账|数量', colSpan: '2|1', rowSpan: '1|1', field: 'quantity', hAlign: 2, width: 60, type: 'Number'},
 | 
	
		
			
				|  |  | +        {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 60, type: 'Number'},
 | 
	
		
			
				|  |  | +    ],
 | 
	
		
			
				|  |  | +    extraCols: [
 | 
	
		
			
				|  |  | +        {title: '%s|数量', colSpan: '2|1', rowSpan: '1|1', field: '{%s}_qty{%d}', hAlign: 2, width: 60, type: 'Number', },
 | 
	
		
			
				|  |  | +        {title: '|金额', colSpan: '|1', rowSpan: '|1', field: '{%s}_tp{%d}', hAlign: 2, width: 60, type: 'Number', },
 | 
	
		
			
				|  |  | +    ],
 | 
	
		
			
				|  |  | +    emptyRows: 0,
 | 
	
		
			
				|  |  | +    headRows: 2,
 | 
	
		
			
				|  |  | +    headRowHeight: [25, 25],
 | 
	
		
			
				|  |  | +    headColWidth: [30],
 | 
	
		
			
				|  |  | +    defaultRowHeight: 21,
 | 
	
		
			
				|  |  | +    headerFont: '12px 微软雅黑',
 | 
	
		
			
				|  |  | +    font: '12px 微软雅黑',
 | 
	
		
			
				|  |  | +    readOnly: true,
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +const leafXmjSpreadSetting = {
 | 
	
		
			
				|  |  | +    baseCols: [
 | 
	
		
			
				|  |  | +        {title: '项目节编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 100, formatter: '@'},
 | 
	
		
			
				|  |  | +        {title: '台账数量', colSpan: '1', rowSpan: '2', field: 'quantity', hAlign: 2, width: 60, type: 'Number'},
 | 
	
		
			
				|  |  | +        {title: '单位工程', colSpan: '1', rowSpan: '2', field: 'dwgc', hAlign: 0, width: 80, formatter: '@'},
 | 
	
		
			
				|  |  | +        {title: '分部工程', colSpan: '1', rowSpan: '2', field: 'fbgc', hAlign: 0, width: 80, formatter: '@'},
 | 
	
		
			
				|  |  | +        {title: '分项工程', colSpan: '1', rowSpan: '2', field: 'fxgc', hAlign: 0, width: 80, formatter: '@'},
 | 
	
		
			
				|  |  | +        {title: '细目', colSpan: '1', rowSpan: '2', field: 'jldy', hAlign: 0, width: 80, formatter: '@'},
 | 
	
		
			
				|  |  | +        {title: '计量单元', colSpan: '1', rowSpan: '2', field: 'bwmx', hAlign: 0, width: 80, formatter: '@'},
 | 
	
		
			
				|  |  | +        {title: '图册号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 80, formatter: '@'},
 | 
	
		
			
				|  |  | +    ],
 | 
	
		
			
				|  |  | +    extraCols: [
 | 
	
		
			
				|  |  | +        {title: '%s数量', colSpan: '1', rowSpan: '2', field: '{%s}_qty{%d}', hAlign: 2, width: 60},
 | 
	
		
			
				|  |  | +    ],
 | 
	
		
			
				|  |  | +    emptyRows: 0,
 | 
	
		
			
				|  |  | +    headRows: 2,
 | 
	
		
			
				|  |  | +    headRowHeight: [25, 25],
 | 
	
		
			
				|  |  | +    headColWidth: [30],
 | 
	
		
			
				|  |  | +    defaultRowHeight: 21,
 | 
	
		
			
				|  |  | +    headerFont: '12px 微软雅黑',
 | 
	
		
			
				|  |  | +    font: '12px 微软雅黑',
 | 
	
		
			
				|  |  | +    readOnly: true,
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  function initSpreadSettingWithRoles(compareRoles) {
 | 
	
		
			
				|  |  |      function setSpreadSettingCols(setting, fieldSufs, Roles) {
 | 
	
		
			
				|  |  |          function addExtraCols(fieldSuf, Role) {
 | 
	
	
		
			
				|  | @@ -80,6 +129,8 @@ function initSpreadSettingWithRoles(compareRoles) {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      setSpreadSettingCols(billsSpreadSetting, fieldSufs, roles);
 | 
	
		
			
				|  |  |      setSpreadSettingCols(posSpreadSetting, fieldSufs, roles);
 | 
	
		
			
				|  |  | +    setSpreadSettingCols(gclSpreadSetting, fieldSufs, roles);
 | 
	
		
			
				|  |  | +    setSpreadSettingCols(leafXmjSpreadSetting, fieldSufs, roles);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  function calculateStageLedgerData(datas) {
 | 
	
		
			
				|  |  |      for (const d of datas) {
 | 
	
	
		
			
				|  | @@ -106,6 +157,17 @@ $(document).ready(() => {
 | 
	
		
			
				|  |  |      if (thousandth) sjsSettingObj.setTpThousandthFormat(posSpreadSetting);
 | 
	
		
			
				|  |  |      SpreadJsObj.initSheet(posSheet, posSpreadSetting);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    let gclGatherData;
 | 
	
		
			
				|  |  | +    const gclSpread = SpreadJsObj.createNewSpread($('#gcl-spread')[0]);
 | 
	
		
			
				|  |  | +    const gclSheet = gclSpread.getActiveSheet();
 | 
	
		
			
				|  |  | +    sjsSettingObj.setFxTreeStyle(gclSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
 | 
	
		
			
				|  |  | +    if (thousandth) sjsSettingObj.setTpThousandthFormat(gclSpreadSetting);
 | 
	
		
			
				|  |  | +    SpreadJsObj.initSheet(gclSheet, gclSpreadSetting);
 | 
	
		
			
				|  |  | +    const leafXmjSpread = SpreadJsObj.createNewSpread($('#leaf-xmj-spread')[0]);
 | 
	
		
			
				|  |  | +    const leafXmjSheet = leafXmjSpread.getActiveSheet();
 | 
	
		
			
				|  |  | +    if (thousandth) sjsSettingObj.setTpThousandthFormat(leafXmjSpreadSetting);
 | 
	
		
			
				|  |  | +    SpreadJsObj.initSheet(leafXmjSheet, leafXmjSpreadSetting);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      $.subMenu({
 | 
	
		
			
				|  |  |          menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
 | 
	
		
			
				|  |  |          toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
 | 
	
	
		
			
				|  | @@ -129,11 +191,20 @@ $(document).ready(() => {
 | 
	
		
			
				|  |  |          select: '#main-resize',
 | 
	
		
			
				|  |  |          callback: function () {
 | 
	
		
			
				|  |  |              billsSpread.refresh();
 | 
	
		
			
				|  |  | -            let bcontent = $(".bcontent-wrap").length > 0 ? $(".bcontent-wrap").height() : 0;
 | 
	
		
			
				|  |  | -            $(".sp-wrap").height(bcontent-30);
 | 
	
		
			
				|  |  | +            let bcontent = $("#xmujie").length > 0 ? $("#xmujie").height() : 0;
 | 
	
		
			
				|  |  | +            $("#pos-spread").height(bcontent-30);
 | 
	
		
			
				|  |  |              posSpread.refresh();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  | +    $.divResizer({
 | 
	
		
			
				|  |  | +        select: '#gcl-resize',
 | 
	
		
			
				|  |  | +        callback: function () {
 | 
	
		
			
				|  |  | +            gclSpread.refresh();
 | 
	
		
			
				|  |  | +            let bcontent = $("#leafxmj-bottom").length > 0 ? $("#leafxmj-bottom").height() : 0;
 | 
	
		
			
				|  |  | +            $("#leaf-xmj-spread").height(bcontent-30);
 | 
	
		
			
				|  |  | +            leafXmjSpread.refresh();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      const cTree = createNewPathTree('master', {
 | 
	
		
			
				|  |  |          id: 'ledger_id',
 | 
	
	
		
			
				|  | @@ -160,6 +231,20 @@ $(document).ready(() => {
 | 
	
		
			
				|  |  |          cPos.loadDatas(result.main.pos);
 | 
	
		
			
				|  |  |          SpreadJsObj.loadSheetData(billsSheet, SpreadJsObj.DataType.Tree, cTree);
 | 
	
		
			
				|  |  |          loadPosData(0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        const checkField = function (x) {
 | 
	
		
			
				|  |  | +            if (x === 'quantity') return true;
 | 
	
		
			
				|  |  | +            if (x === 'total_price') return true;
 | 
	
		
			
				|  |  | +            if (x.indexOf('_qty') >= 0) return true;
 | 
	
		
			
				|  |  | +            if (x.indexOf('_tp') >= 0) return true;
 | 
	
		
			
				|  |  | +            return false;
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        gclGatherModel.loadGatherField(checkField, checkField);
 | 
	
		
			
				|  |  | +        gclGatherModel.loadLedgerData(result.main.ledger);
 | 
	
		
			
				|  |  | +        gclGatherModel.loadPosData(result.main.pos);
 | 
	
		
			
				|  |  | +        gclGatherData = gclGatherModel.gatherGclData();
 | 
	
		
			
				|  |  | +        SpreadJsObj.loadSheetData(gclSheet, SpreadJsObj.DataType.Data, gclGatherData);
 | 
	
		
			
				|  |  | +        loadLeafXmjData(0);
 | 
	
		
			
				|  |  |      }, null, true);
 | 
	
		
			
				|  |  |      function loadPosData(iRow) {
 | 
	
		
			
				|  |  |          const node = iRow ? billsSheet.zh_tree.nodes[iRow] : SpreadJsObj.getSelectObject(billsSheet);
 | 
	
	
		
			
				|  | @@ -167,6 +252,15 @@ $(document).ready(() => {
 | 
	
		
			
				|  |  |          SpreadJsObj.loadSheetData(posSheet, SpreadJsObj.DataType.Data, posRange);
 | 
	
		
			
				|  |  |          SpreadJsObj.resetTopAndSelect(posSheet);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    function loadLeafXmjData(iRow) {
 | 
	
		
			
				|  |  | +        const gcl = iRow ? gclSheet.zh_data[iRow] : SpreadJsObj.getSelectObject(gclSheet);
 | 
	
		
			
				|  |  | +        if (gcl) {
 | 
	
		
			
				|  |  | +            SpreadJsObj.loadSheetData(leafXmjSheet, SpreadJsObj.DataType.Data, gcl.leafXmjs);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            SpreadJsObj.loadSheetData(leafXmjSheet, SpreadJsObj.DataType.Data, []);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        SpreadJsObj.resetTopAndSelect(leafXmjSheet);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      billsSheet.bind(spreadNS.Events.SelectionChanged, function (e, info) {
 | 
	
		
			
				|  |  |          if (info.newSelections) {
 | 
	
		
			
				|  |  |              const iNewRow = info.newSelections[0].row;
 | 
	
	
		
			
				|  | @@ -197,6 +291,15 @@ $(document).ready(() => {
 | 
	
		
			
				|  |  |              SpreadJsObj.loadSheetData(billsSheet, SpreadJsObj.DataType.Tree, cTree);
 | 
	
		
			
				|  |  |              SpreadJsObj.initSheet(posSheet, posSpreadSetting);
 | 
	
		
			
				|  |  |              loadPosData();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            SpreadJsObj.reLoadSheetHeader(gclSheet);
 | 
	
		
			
				|  |  | +            SpreadJsObj.reLoadSheetHeader(leafXmjSheet);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            gclGatherModel.loadLedgerData(cTree.datas);
 | 
	
		
			
				|  |  | +            gclGatherModel.loadPosData(cPos.datas);
 | 
	
		
			
				|  |  | +            gclGatherData = gclGatherModel.gatherGclData();
 | 
	
		
			
				|  |  | +            SpreadJsObj.loadSheetData(gclSheet, SpreadJsObj.DataType.Data, gclGatherData);
 | 
	
		
			
				|  |  | +            loadLeafXmjData(0);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          let loadData = [], showData = [], trs = $('tr[stage-id]');
 | 
	
		
			
				|  |  |          for (let order = 0, iLength = trs.length; order < iLength; order++) {
 | 
	
	
		
			
				|  | @@ -273,5 +376,10 @@ $(document).ready(() => {
 | 
	
		
			
				|  |  |          SpreadJsObj.reloadColData(billsSheet, 7, compareStages.length * 2);
 | 
	
		
			
				|  |  |          SpreadJsObj.reLoadSheetHeader(posSheet);
 | 
	
		
			
				|  |  |          SpreadJsObj.reloadColData(posSheet, 2, compareStages.length);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        SpreadJsObj.reLoadSheetHeader(gclSheet);
 | 
	
		
			
				|  |  | +        SpreadJsObj.reloadColData(billsSheet, 9, compareStages.length * 2);
 | 
	
		
			
				|  |  | +        SpreadJsObj.reLoadSheetHeader(leafXmjSheet);
 | 
	
		
			
				|  |  | +        SpreadJsObj.reloadColData(posSheet, 9, compareStages.length);
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |  });
 |