/** * Created by CSL on 2017-07-04. */ //modified by zhong on 2017-08-30 // Tab panes 下有多个Spread时,相互之间不能正确显示。改成一个Spread下多个Sheet。 //特征及内容spread,解决不能正确显示spread //zhang 5-31 删除附注条件、辅助定额tab,增加子目换算tab let subSpread = null; let subObj = { TZJNRrePercent:null, initSubSpread:function () { //清单精灵 BillsElf.buildSheet(); contentOprObj.buildSheet($("#jobSpread")[0]); //sheetCommonObj.bindEscKey(contentOprObj.workBook, [{sheet: contentOprObj.workBook.getSheet(0), editStarting: contentOprObj.onEditStart, editEnded: contentOprObj.onEditEnded}]); sheetCommonObj.spreadDefaultStyle(contentOprObj.workBook); characterOprObj.buildSheet($("#itemSpread")[0]); //sheetCommonObj.bindEscKey(characterOprObj.workBook, [{sheet: characterOprObj.workBook.getSheet(0), editStarting: characterOprObj.onEditStart, editEnded: characterOprObj.onEditEnded}]); sheetCommonObj.spreadDefaultStyle(characterOprObj.workBook); $("#tzjnrCon").hide(); $("#subSpread").show(); subSpread = sheetCommonObj.createSpread($("#subSpread")[0], 4); sheetCommonObj.spreadDefaultStyle(subSpread); subSpread.options.allowUserDragDrop = false; subSpread.options.allowUserDragFill = false; subSpread.getSheet(2).name('JSCX'); pageCCOprObj.active = false; // 工料机 gljOprObj.initSheet(subSpread.getSheet(0)); //sheetCommonObj.shieldAllCells(subSpread.getSheet(0), gljOprObj.setting); SheetDataHelper.protectdSheet(subSpread.getSheet(0)); // assistOprObj.initSheet(subSpread.getSheet(1)); // sheetCommonObj.shieldAllCells(subSpread.getSheet(1), assistOprObj.setting); if(!projectReadOnly){ gljContextMenu.loadGLJSpreadContextMenu(); } //工程量明细 gljOprObj.initDetailSheet(subSpread.getSheet(1)); SheetDataHelper.protectdSheet(subSpread.getSheet(1)); //安装增加费 installationFeeObj.initRationInstallSheet(subSpread.getSheet(3)); SheetDataHelper.protectdSheet(subSpread.getSheet(3)); //绑定esc let subEscSheets = []; subEscSheets.push({sheet: subSpread.getSheet(0), editStarting: gljOprObj.editChecking, editEnded: gljOprObj.onEditEnded});//定额工料机 subEscSheets.push({sheet: subSpread.getSheet(1), editStarting: gljOprObj.editChecking, editEnded: gljOprObj.onEditEnded});//工程量明细 subEscSheets.push({sheet: subSpread.getSheet(3), editStarting: installationFeeObj.rationInstSheeteditChecking, editEnded: null});//定额安装增加费 sheetCommonObj.bindEscKey(subSpread, subEscSheets); if(projectReadOnly){ disableSpread(subSpread); disableSpread(contentOprObj.workBook); disableSpread(characterOprObj.workBook); } }, initNavItem:function (node) { /* 1、造价书选中行类别是“大项费用”、“分部”、“分项”、“清单”时,显示按钮“工程量明细”、“计算程序”、“特征及内容”,默认打开“计算程序”。 2、选中行类别是“定额”、“量价”、“人材机”时,显示按钮“人材机”、“子目换算”、“工程量明细”、“计算程序”、“安装增加费”、"模板子目",默认打开“人材机”。 */ if (!node) { return; } $('.sub-item').removeClass('active'); if(node.sourceType == ModuleNames.ration){ //GLJ_div //ZMHS_div $("#GLJ_div").show(); $("#ZMHS_div").show(); $("#MBZM_div").show(); installationFeeObj.engineeringTypeChecking();//检查是否安装工程 $("#TZJNR_div").hide(); $('#QDJL_div').hide(); $("#linkGLJ").addClass(); $(gljOprObj.rationTab).click(); }else { $("#GLJ_div").hide(); $("#ZMHS_div").hide(); $("#MBZM_div").hide(); $("#AZZJF_div").hide(); $("#TZJNR_div").show(); $('#QDJL_div').show(); $(gljOprObj.billsTab).click(); } projectObj.mainSpread.focus(); } }; $("#linkGLJ").click(function(){ $("#subItems").children().hide();//控制显示subSpread,隐藏特征及内容spread //show MaterialController.showReplaceDiv(); $("#subSpread").show(); pageCCOprObj.active = false; subSpread.options.allowUserDragFill = false; refreshSubSpread(); subSpread.setActiveSheetIndex(0); gljOprObj.activeTab='#linkGLJ'; gljOprObj.setNodeShowTab(); }); $("#linkAZZJF").click(function(){ $("#subItems").children().hide(); MaterialController.hideReplaceDiv(); $("#subSpread").show(); pageCCOprObj.active = false; refreshSubSpread(); subSpread.setActiveSheetIndex(3); gljOprObj.activeTab='#linkAZZJF'; gljOprObj.setNodeShowTab(); }); $("#linkGCLMX").click(function(){ $("#subItems").children().hide(); MaterialController.hideReplaceDiv(); $("#subSpread").show(); subSpread.options.allowUserDragFill = true; pageCCOprObj.active = false; refreshSubSpread(); subSpread.setActiveSheetIndex(1); gljOprObj.activeTab='#linkGCLMX'; gljOprObj.setNodeShowTab(); }); $("#linkJSCX").click(function(){ // 计算程序 $("#subItems").children().hide(); MaterialController.hideReplaceDiv(); $("#subSpread").show(); pageCCOprObj.active = false; refreshSubSpread(); subSpread.setActiveSheetIndex(2); calcProgramObj.initSheet(subSpread.getSheet(2)); if (!projectObj.mainController.tree.selected) projectObj.mainController.tree.selected = projectObj.mainController.tree.firstNode(); let sel = projectObj.mainController.tree.selected; calcProgramObj.refreshCalcProgram(sel, 3); gljOprObj.activeTab='#linkJSCX'; gljOprObj.setNodeShowTab(); }); $("#linkZMHS").click(function(){ // 子目换算 $("#subItems").children().hide(); $("#tabZMHS").show(); pageCCOprObj.active = false; refreshSubSpread(); gljOprObj.activeTab='#linkZMHS'; gljOprObj.setNodeShowTab(); }); $("#linkMBZM").click(function(){ // 模板子目 $("#subItems").children().hide(); $("#tabMBZM").show(); pageCCOprObj.active = false; refreshSubSpread(); gljOprObj.activeTab='#linkMBZM'; gljOprObj.setNodeShowTab(); }); //特征及内容各模块宽度自适应 function adaptiveTzjnrWidth() { if(gljOprObj.activeTab !== '#linkTZJNR'){ return; } let job_proportion = 0.25; let item_proportion = 0.75; if(subObj.TZJNRrePercent){ job_proportion = parseFloat(subObj.TZJNRrePercent.nearPercent)/100; item_proportion = 1- job_proportion; } //排版规则工具条宽度 const typeSettingWidth = 30; let tzjnrWidth = $('#tabCon').width(); console.log("set jobDiv"); console.log(subObj.TZJNRrePercent); //let tzjnrWidth = $(window).width() - $('.main-nav').width() - $('.main-side').width(); //2018-11-23 zhang 需求两个表格默认占比为25%:75% 还要可拖动 let extWidth = $('#add-rule').is(':visible')? tzjnrWidth / 3:typeSettingWidth; let totalWidth = tzjnrWidth - extWidth - $('#TZJNRResize').width(); $('#jobDiv').css('width', totalWidth*job_proportion); $('#itemDiv').css('width', totalWidth*item_proportion); $('#add-rule').is(':visible')?$('#add-rule').css('width', extWidth): $('#openTypeSetting').css('width', extWidth); /* if($('#add-rule').is(':visible')){ let totalWidth = tzjnrWidth - tzjnrWidth / 3; $('#jobDiv').css('width', totalWidth*0.25); $('#itemDiv').css('width', totalWidth*0.75); $('#add-rule').css('width', tzjnrWidth / 3); } else{ $('#jobDiv').css('width', tzjnrWidth / 2); $('#itemDiv').css('width', tzjnrWidth / 2 - typeSettingWidth); $('#openTypeSetting').css('width', typeSettingWidth); }*/ pageCCOprObj.resizeWidth(); refreshSubSpread(); } //清单精灵 $('#linkQDJL').click(function () { gljOprObj.activeTab='#linkQDJL'; $("#subItems").children().hide(); $('#qdjl').show(); let selectedNode = projectObj.mainController.tree.selected; BillsElf.billsSelElf(selectedNode.data.code); refreshSubSpread(); gljOprObj.setNodeShowTab(); BillsElf.refreshWorkBook(); }); //特征及内容 $("#linkTZJNR").click(function () { gljOprObj.activeTab='#linkTZJNR'; $("#subItems").children().hide(); $("#tzjnrCon").show(); adaptiveTzjnrWidth(); pageCCOprObj.resizeWidth(); $("#add-rule p").not(":first").css('margin-bottom', 4); pageCCOprObj.active = true; refreshSubSpread(); contentOprObj.workBook.getActiveSheet().showColumn(0, GC.Spread.Sheets.HorizontalPosition.left); characterOprObj.workBook.getActiveSheet().showColumn(0, GC.Spread.Sheets.HorizontalPosition.left); let selectedNode = projectObj.mainController.tree.selected; if (projectObj.project.property.addRule !== undefined) { setRule(projectObj.project.property.addRule); } pageCCOprObj.mainActiveCell = projectObj.mainSpread.getActiveSheet().getSelections()[0]; pageCCOprObj.setCacheAndShow(selectedNode); gljOprObj.setNodeShowTab(); }); //打开排版规则 $('#openTypeSetting').click(function () { $('#add-rule').show(); $(this).hide(); adaptiveTzjnrWidth(); }); //关闭排版规则 $('#closeTypeSetting').click(function () { $('#add-rule').hide(); $('#openTypeSetting').show(); adaptiveTzjnrWidth(); }); //应用到选中清单、应用到所有,添加位置列如果隐藏了,则重新显示 function colSettingAddPosition(addPosition){ let settingMapping = {1: 'itemCharacterText', 2: 'name', 3: 'jobContentText', 4: 'both'}; let settingInfo = settingMapping[addPosition]; if(!settingInfo){ return; } let fields = []; if(settingInfo === 'both'){ fields = [settingMapping['1'], settingMapping['3']]; } else{ fields = [settingInfo]; } let needToUpdate = false; let showItemCharacter = false; for(let field of fields){ let colVisible = colSettingObj.getVisible(field); if(field === settingMapping['1'] && !colVisible){ showItemCharacter = true; } if(!colVisible){ colSettingObj.setVisible(field, true); needToUpdate = true; } } if(showItemCharacter){ switchTznrHtml(false); } if(needToUpdate){ colSettingObj.updateColSetting(true); } } //如果,添加内容为定额子目时进行定额的增删改,更新相关其清单 function updateBillsOprRation() { const setting = getAddRuleSetting(); if(setting && setting.addContent && setting.addContent === '5'){ $('#use-to-current').click(); } } // 应用到选中清单 let isSaving = false; $("#use-to-current").click(function() { if($(this).hasClass('disabled')){ return false; } if(projectReadOnly){ return false; } if (isSaving) { return false; } const setting = getAddRuleSetting(); colSettingAddPosition(setting.position); isSaving = true; const self = $(this); self.attr('disabled', 'disabled'); let selectedNode = projectObj.mainController.tree.selected; function findBill(node){ while(node && node.sourceType !== projectObj.project.Bills.getSourceType()){ node = node.parent; } return node; } let billsNode = findBill(selectedNode); // 操作内容 pageCCOprObj.setCharacterBySetting(billsNode, setting); // 防止连续点击1秒后才能再次发起请求 setTimeout(function() { isSaving = false; self.removeAttr('disabled'); }, 1000); }); //todo: 优化成批量 function addRuleUseToBills(setting, nodes) { pageCCOprObj.bulkSetCharacterBySetting(nodes, setting); } // 应用到所有的清单 $("#use-to-all").click(function() { if($(this).hasClass('disabled')){ return false; } if(projectReadOnly){ return false; } let treeNode = projectObj.mainController.tree; const setting = getAddRuleSetting(); colSettingAddPosition(setting.position); if (treeNode.items === undefined || treeNode.items.length <= 0) { return false; } // 处理 addRuleUseToBills(setting, treeNode.items); }); function saveAddRule(){ let setting = getAddRuleSetting(); let toUpdate = false; if(!projectObj.project.property.addRule){ toUpdate = true; } else { for(let attr in setting){ if(setting[attr] !== projectObj.project.property.addRule[attr]){ toUpdate = true; break; } } } if(toUpdate){ projectObj.project.property.addRule = setting; projectObj.project.saveProperty('addRule', setting); } } // 添加位置选择 function changeAddPosition(save = false) { const selected = $('#add-position').children(":selected").val(); const addContentEle = $("#add-content"); const displayFormatEle = $("#display-format"); const characterFormatEle = $("#character-format"); const serialTypeEle = $("#serial-type"); switch (selected) { case '4': // 分别添加到对应列 // 当“添加位置”是“分别添加到对应列”,则“添加内容”恢复默认“无”,且灰显;“显示格式”恢复默认“换行分隔”,且灰显。 addContentEle.val(''); addContentEle.attr('disabled', 'disabled'); displayFormatEle.val(1); characterFormatEle.val(2); serialTypeEle.val(1); break; default: addContentEle.removeAttr('disabled'); displayFormatEle.removeAttr('disabled'); characterFormatEle.removeAttr('disabled'); addContentEle.val(1); break; } if (save) { saveAddRule(); } } $("#add-position").change(function() { changeAddPosition(true); }); // 添加内容选择 function changeAddContent(save = false) { const selected = $('#add-content').children(":selected").val(); const characterFormatEle = $("#character-format"); const childDisplayFormatEle = $("#child-display-format"); const serialTypeEle = $("#serial-type"); switch (selected) { case '5': // 当“添加内容”是“定额子目”或“工作内容”,则“特征生成方式”灰显,不需选择;否则有效可选。 characterFormatEle.attr('disabled', 'disabled'); characterFormatEle.val(2); // 当“添加内容”是“定额子目”,则“子目生成方式”有效可选;否则灰显,不需选择。 childDisplayFormatEle.removeAttr('disabled'); serialTypeEle.val(''); serialTypeEle.attr('disabled', 'disabled'); break; case '': characterFormatEle.attr('disabled', 'disabled'); break; case '1': case '2': case '3': characterFormatEle.removeAttr('disabled'); if (serialTypeEle.val() === '') { serialTypeEle.val(1); } serialTypeEle.removeAttr('disabled'); childDisplayFormatEle.attr('disabled', 'disabled'); break; case '4': // 当“添加内容”是“定额子目”或“工作内容”,则“特征生成方式”灰显,不需选择;否则有效可选。 characterFormatEle.attr('disabled', 'disabled'); characterFormatEle.val(2); default: serialTypeEle.removeAttr('disabled'); if (serialTypeEle.val() === '') { serialTypeEle.val(1); } childDisplayFormatEle.attr('disabled', 'disabled'); break; } if (save) { saveAddRule(); } } $("#add-content").change(function() { changeAddContent(true); }); //显示格式 $('#display-format').change(function () { saveAddRule(); }); //特征生成方式 $('#character-format').change(function () { saveAddRule(); }); // 子目生成方式选择事件 function changeChildDisplay(save = false) { const selected = $('#child-display-format').children(":selected").val(); const serialTypeEle = $("#serial-type"); const addContent = $('#add-content').val(); // 如果添加内容是定额子目且子目生成方式是编号+定额名称则序号格式不能选择 if (addContent === '5' && selected === '1') { // 默认选中数字显示模式 serialTypeEle.val(""); serialTypeEle.attr('disabled', 'disabled'); } else { serialTypeEle.val(1); serialTypeEle.removeAttr('disabled'); } if (save) { saveAddRule(); } } $("#child-display-format").change(function() { changeChildDisplay(true); }); //序号格式 $('#serial-type').change(function () { saveAddRule(); }); /** * 获取添加规则的设置 * * @return {Object} - 返回设置内容 */ function getAddRuleSetting() { // 添加位置 const position = $("#add-position").val(); // 添加内容 const addContent = $("#add-content").val(); // 显示格式 const displayFormat = $("#display-format").val(); // 特征生成方式 const characterFormat = $("#character-format").val(); // 子目生成方式 const childDisplayFormat = $("#child-display-format").val(); // 序号格式 const serialType = $("#serial-type").val(); const setting = { serialType, characterFormat, addContent, position, displayFormat, childDisplayFormat, }; return setting; } /** * 根据配置设置规则 * * @param {Object} setting - 数据库中读取的数据 * @return {void} */ function setRule(setting) { if (Object.keys(setting).length <= 0) { return; } $("#add-position").val(setting.position); changeAddPosition(false); $("#add-content").val(setting.addContent); changeAddContent(false); $("#display-format").val(setting.displayFormat); $("#character-format").val(setting.characterFormat); $("#child-display-format").val(setting.childDisplayFormat); changeChildDisplay(false); $("#serial-type").val(setting.serialType); if(projectReadOnly){ disableTools(); } } function activeSubSheetIs(idx){ let rst = subSpread.getActiveSheetIndex() == idx; return rst; } function activeSubSheetIsCalcProgram(){ return subSpread.getActiveSheetIndex() == subSheetIndex.ssiCalcProgram; } //弹出清单规则或定额库后导致subSpread和特征及内容spread显示出问题 function refreshSubSpread(){ if(pageCCOprObj.active){ contentOprObj.workBook.refresh(); characterOprObj.workBook.refresh(); } else{ if(subSpread) subSpread.refresh(); if(MaterialController.spread) MaterialController.spread.refresh(); } BillsElf.refreshWorkBook(); if($('#linkZMHS').hasClass('active')) zmhs_obj.refresh(); if($('#linkMBZM').hasClass('active')) mbzm_obj.refresh(); } let subViewObj = { linkTabClick: function () { $("#subItems").children().hide(); $($(this).attr('href')).show(); }, loadComments: function (node) { let comments = []; let commentText = ''; if (node) { if (node.sourceType === projectObj.project.Bills.getSourceType() && (node.data.type === billType.FX || node.data.type === billType.BX || node.data.type === billType.BILL)) { if(node.data.ruleText && node.data.ruleText !== ''){ comments.push('工程量计算规则:'); comments.push(node.data.ruleText); } if(node.data.comments && node.data.comments !== ''){ comments.push('清单注释:'); comments.push(node.data.comments); } } else if (node.sourceType === projectObj.project.Ration.getSourceType()) { if(node.data.content && node.data.content !== ''){ comments.push('工作内容:'); comments.push(node.data.content); } if(node.data.annotation && node.data.annotation !== ''){ comments.push('附注:'); comments.push(node.data.annotation); } } commentText = comments.join('\n'); } $('#comments>textarea').val(commentText); }, saveComments: function (node) { let text = $('#comments>textarea').val(); if (node && node.sourceType === projectObj.project.Bills.getSourceType()) { if (node.data.comments !== text) { projectObj.project.Bills.updateField(node.source, "comments", text); } } else if (node && node.sourceType === projectObj.project.Ration.getSourceType()) { if (node.data.comments !== text) { projectObj.project.Ration.updateField(node.source, "comments", text); } } } } $("#linkComments").click(subViewObj.linkTabClick); $('#linkGLJ').on('shown.bs.tab', function () { gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected, '111111'); }); $('#linkZMHS').on('shown.bs.tab', function (e) { if(zmhs_obj.coeSpread == null || zmhs_obj.assSpread == null){ zmhs_obj.initSpread(); } zmhs_obj.refresh(); zmhs_obj.showZMHSData(); }); $('#linkMBZM').on('shown.bs.tab', function (e) { mbzm_obj.refresh(); mbzm_obj.showMBZMData(); }); $('#linkComments').on('shown.bs.tab', function () { subViewObj.loadComments(projectObj.project.mainTree.selected); }); $('#linkGCLMX').on('shown.bs.tab', function () { gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected, '111111'); }); $('#linkAZZJF').on('shown.bs.tab', function () { gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected, '111111'); }); let TZJNR_sideResizeEles = {}; TZJNR_sideResizeEles.id = 'linkTZJNR'; TZJNR_sideResizeEles.resize = $('#TZJNRResize'); TZJNR_sideResizeEles.nearElement = $('#jobDiv'); TZJNR_sideResizeEles.nearSpread = $('#jobSpread'); TZJNR_sideResizeEles.farElement = $('#itemDiv'); TZJNR_sideResizeEles.farSpread = $('#itemSpread'); TZJNR_sideResizeEles.nav = null; slideResize(TZJNR_sideResizeEles, {min: 100, max: $('#tabCon').width() - 30,no_proportion:true}, 'width', function(rePercent){ if(rePercent) subObj.TZJNRrePercent = rePercent; adaptiveTzjnrWidth(); refreshSubSpread(); });