| 
					
				 | 
			
			
				@@ -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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 |