|  | @@ -25,6 +25,7 @@ var projectObj = {
 | 
	
		
			
				|  |  |          let project = projectObj.project;
 | 
	
		
			
				|  |  |          let mainSheet = projectObj.mainController.sheet;
 | 
	
		
			
				|  |  |          let init = true;
 | 
	
		
			
				|  |  | +        locateToCache(node);
 | 
	
		
			
				|  |  |          //设置选中行底色和恢复前选中行底色
 | 
	
		
			
				|  |  |          let refreshNodes = [node];
 | 
	
		
			
				|  |  |          if(!project.mainTree.preSelected){
 | 
	
	
		
			
				|  | @@ -3586,5 +3587,59 @@ $('#menu_index_info').click(function () {
 | 
	
		
			
				|  |  |      $('#tab_index').click();
 | 
	
		
			
				|  |  |  });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// 快速定位
 | 
	
		
			
				|  |  | +const FastLocateType = {
 | 
	
		
			
				|  |  | +    SUB_ENGINERRING: 'subEnginerring',
 | 
	
		
			
				|  |  | +    MEASURE: 'measure',
 | 
	
		
			
				|  |  | +    OTHER: 'other',
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +const locateCache = {
 | 
	
		
			
				|  |  | +    [FastLocateType.SUB_ENGINERRING]: null,
 | 
	
		
			
				|  |  | +    [FastLocateType.MEASURE]: null,
 | 
	
		
			
				|  |  | +    [FastLocateType.OTHER]: null,
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// 变更焦点行时,将焦点节点存至对应部分的locateCache中,用于快速定位功能
 | 
	
		
			
				|  |  | +function locateToCache(node) {
 | 
	
		
			
				|  |  | +    if (!node) {
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (node.isBelongToFlags([fixedFlag.SUB_ENGINERRING])) {
 | 
	
		
			
				|  |  | +        locateCache[FastLocateType.SUB_ENGINERRING] = node;
 | 
	
		
			
				|  |  | +    } else if (node.isBelongToFlags([fixedFlag.MEASURE])) {
 | 
	
		
			
				|  |  | +        locateCache[FastLocateType.MEASURE] = node;
 | 
	
		
			
				|  |  | +    } else if (node.isBelongToFlags([fixedFlag.OTHER])) {
 | 
	
		
			
				|  |  | +        locateCache[FastLocateType.OTHER] = node;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// “分项”、“措施”、“其他”,用于快速定位至对应部分上次的焦点行
 | 
	
		
			
				|  |  | +function fastLocate(type) {
 | 
	
		
			
				|  |  | +    let locatedNode;
 | 
	
		
			
				|  |  | +    if (type === FastLocateType.SUB_ENGINERRING) {
 | 
	
		
			
				|  |  | +        locatedNode = locateCache[type] || projectObj.project.mainTree.roots.find(node => node.getFlag() === fixedFlag.SUB_ENGINERRING);
 | 
	
		
			
				|  |  | +    } else if (type === FastLocateType.MEASURE) {
 | 
	
		
			
				|  |  | +        locatedNode = locateCache[type] || projectObj.project.mainTree.roots.find(node => node.getFlag() === fixedFlag.MEASURE);
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +        locatedNode = locateCache[type] || projectObj.project.mainTree.roots.find(node => node.getFlag() === fixedFlag.OTHER);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (locatedNode && locatedNode !== projectObj.project.mainTree.selected) {
 | 
	
		
			
				|  |  | +        const locateRow = locatedNode.serialNo();
 | 
	
		
			
				|  |  | +        const sheet = projectObj.mainController.sheet;
 | 
	
		
			
				|  |  | +        projectObj.loadFocusLocation(locateRow, sheet.getActiveColumnIndex());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +$('#locate-sub').click(() => {
 | 
	
		
			
				|  |  | +    fastLocate(FastLocateType.SUB_ENGINERRING);
 | 
	
		
			
				|  |  | +});
 | 
	
		
			
				|  |  | +$('#locate-measure').click(() => {
 | 
	
		
			
				|  |  | +    fastLocate(FastLocateType.MEASURE);
 | 
	
		
			
				|  |  | +});
 | 
	
		
			
				|  |  | +$('#locate-other').click(() => {
 | 
	
		
			
				|  |  | +    fastLocate(FastLocateType.OTHER);
 | 
	
		
			
				|  |  | +});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  //导出接口
 | 
	
		
			
				|  |  |  ExportView.exportListener();
 |