/** * 工料机汇总相关 * * @author CaiAoLin * @date 2017/6/15 * @version */ let projectGLJSpread = null; let projectGLJSheet = null; // websocket所需 let host = ''; let socket = null; let roomId = 0; // 判定常量 let materialIdList = []; let canNotChangeTypeId = []; let GLJTypeConst = []; // spreadjs载入数据所需 let jsonData = []; let mixRatioConnectData = []; let mixRatioMap = {}; // 单价文件相关 let usedUnitPriceInfo = {}; let usedTenderList = []; let otherFileData = {}; let currentTag = ''; let isChanging = false; let initPage = false; $(document).ready(function () { $('#tab_gongliaoji').on('show.bs.tab', function (e) { $(e.relatedTarget.hash).removeClass('active'); init(); }); slideResize($("#glj-main"), function () { projectGLJSpread.sheetObj.spread.refresh(); }); // 单价文件切换弹框 $('#change-dj').on('shown.bs.modal', function () { // 获取当前建设项数据 let projectName = projectInfoObj.projectInfo.fullFolder !== undefined && projectInfoObj.projectInfo.fullFolder.length > 0 ? projectInfoObj.projectInfo.fullFolder[0] : ''; $("#current-project-name").text(projectName); // 获取切换单价文件相关数据 $.ajax({ url: '/glj/get-project-info', type: 'post', data: {project_id: scUrlUtil.GetQueryString('project')}, dataType: 'json', success: function (response) { if (response.err === 1) { alert('数据传输错误!'); return false; } let data = response.data; // 本项目中的单价文件 if (data.self.length > 0) { let selfFileHtml = ''; for (let tmp of data.self) { let select = usedUnitPriceInfo === tmp.id ? ' selected="selected"' : ''; selfFileHtml += '' + tmp.name + ''; } $("#self-file").html(selfFileHtml); } // 其他建设项目数据 if (data.other.length > 0) { let otherProjectHtml = ''; let otherFileHtml = ''; for (let tmp of data.other) { otherProjectHtml += ''; otherFileData[tmp.ID] = tmp.unitPriceList; if (otherFileHtml !== '') { continue; } for (let unitPrice of tmp.unitPriceList) { otherFileHtml += ''; } } $("#other-project").html(otherProjectHtml); $("#other-file").html(otherFileHtml); } } }); }); /* // 单价文件另存为弹框 $("#file-save-as-dialog").on('shown.bs.modal', function () { // 获取当前建设项数据 $("#save-as-name").val(usedUnitPriceInfo.name + '(复件)'); });*/ // 单价文件切换确认 /*$("#change-file-confirm").click(function () { if (isChanging) { return false; } let type = $("input[name='change-type']:checked").val(); type = parseInt(type); let changeUnitPriceId = 0; if (type === 0) { // 从本项目中选择 changeUnitPriceId = $("#self-file").val(); } else { // 从其他项目中复制 changeUnitPriceId = $("#other-file").val(); } $('#change-dj').modal("hide"); $.bootstrapLoading.start(); $.ajax({ url: '/glj/change-file', type: 'post', data: {project_id: scUrlUtil.GetQueryString('project'), change_id: changeUnitPriceId, type: type}, error: function () { isChanging = false; $.bootstrapLoading.end(); }, beforeSend: function () { isChanging = true; }, success: function (response) { isChanging = false; if (response.err === 1) { let msg = response.msg !== undefined ? response.msg : '未知错误'; alert(msg); $.bootstrapLoading.end(); return false; } projectObj.project.projectGLJ.loadData(function () { let projectGLJ = projectObj.project.projectGLJ; projectGLJ.loadCacheData(); unitPriceFileInit(); gljOprObj.refreshView(); projectObj.project.calcProgram.calcAllNodesAndSave(); if(socketObject.roomInfo){ let data ={ projectID:projectObj.project.ID(), oldRoom:socketObject.roomInfo.unitFile, newRoom:socketObject.getUnitFileRoomID(), name:'unitFile' } socket.emit('changeNewRoom',data); socketObject.roomInfo.unitFile = socketObject.getUnitFileRoomID(); } $.bootstrapLoading.end(); }); } }); });*/ /* // 是否主动更改数据 $("#message").on('click', '#load-data', function () { $("#message").html('正在加载...'); // 重新加载数据到缓存 projectObj.project.projectGLJ.loadData(function () { projectObj.project.projectGLJ.loadCacheData(); $("#notify").slideUp('fast'); }); });*/ /*$('#pop-dj').popover({ placement: "bottom", html: true, trigger: "hover | focus", content: getUsedTenderInfo } );*/ }); /** * 初始化数据 * * @return {void|boolean} */ function init() { projectObj.project.projectGLJ.loadData(function (data) { if (initPage==false||jsonData.length <= 0) { // 赋值 jsonData = data.gljList !== undefined && data.gljList.length > 0 ? data.gljList : []; jsonData = filterProjectGLJ(jsonData); jsonData = sortProjectGLJ(jsonData); mixRatioConnectData = data.mixRatioConnectData !== undefined ? data.mixRatioConnectData : mixRatioConnectData; mixRatioMap = data.mixRatioMap !== undefined ? data.mixRatioMap : mixRatioMap; // host = data.constData.hostname !== undefined ? data.constData.hostname : ''; materialIdList = data.constData.materialIdList !== undefined ? data.constData.materialIdList : materialIdList; //roomId = data.constData.roomId !== undefined ? data.constData.roomId : roomId; canNotChangeTypeId = data.constData.ownCompositionTypes !== undefined ? data.constData.ownCompositionTypes : canNotChangeTypeId; GLJTypeConst = data.constData.GLJTypeConst !== undefined ? JSON.parse(data.constData.GLJTypeConst) : GLJTypeConst; // 连接socket服务器 这里改成和费率的socket统一管理了,需要在主页面打开后就连接 // socketInit(); unitPriceFileInit(); setTimeout(spreadInit, 1); initPage=true; } else { projectObj.project.projectGLJ.loadCacheData(); } }); } /** * spreadjs相关初始化 * * @return {void} */ function spreadInit() { if(projectGLJSheet&&projectGLJSpread){ projectGLJSheet.spread.destroy(); } projectGLJSpread = new ProjectGLJSpread(); projectGLJSpread.successCallback = successTrigger; projectGLJSheet = projectGLJSpread.init(); // 绑定单击事件 let lastRow = 0; projectGLJSheet.bind(GC.Spread.Sheets.Events.CellClick, function (element, info) { let currentRow = info.row; if (currentRow === undefined || currentRow === lastRow) { return; } if (currentTag !== 'mix-ratio' && currentTag !== 'machine') { return; } let spread = currentTag === 'mix-ratio' ? mixRatioSpread : machineSpread; if (spread === null) { return; } let projectGLJId = projectGLJSheet.getActiveDataByField('id'); spread.getRatioData(projectGLJId); lastRow = currentRow; }); if(currentTag){ if (currentTag === 'ration') { projectGLJSheet.filterData('unit_price.type', []); } if(currentTag === "mix-ratio"){ projectGLJSheet.filterData('unit_price.type', [GLJTypeConst.CONCRETE, GLJTypeConst.MORTAR, GLJTypeConst.MIX_RATIO,GLJTypeConst.MAIN_MATERIAL]); } if(currentTag === "machine"){ projectGLJSheet.filterData('unit_price.type', [GLJTypeConst.GENERAL_MACHINE]); } } /* // 切换tab触发refresh $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { if($(e.target).data('name')==undefined){ return; } currentTag = $(e.target).data('name'); if (currentTag === 'ration') { projectGLJSheet.filterData('unit_price.type', []); } });*/ loadSize("glj-main", function () { projectGLJSpread.sheetObj.spread.refresh(); }); } /** * 单价文件相关初始化 * * @param {String} name * @param {Array} data * @return {void} */ function unitPriceFileInit() { let projectGLJ = projectObj.project.projectGLJ; let data = projectGLJ.datas; usedTenderList = data.usedTenderList !== undefined ? data.usedTenderList : []; usedUnitPriceInfo = data.constData.usedUnitPriceInfo !== undefined ? data.constData.usedUnitPriceInfo : {}; $("#used-name").text(usedUnitPriceInfo.name); let usedCount = usedTenderList.length <= 0 ? 1 : usedTenderList.length; $("#used-count").text(usedCount); } function getUsedTenderInfo() { return usedTenderList.join("
"); } /** * 成功事件 * * @param {string} field * @param {object} info * @return {void} */ function successTrigger(field, info,id) { let updateData = {}; switch (field) { case 'unit_price.market_price': // 计算价格 updateData = projectGLJSpread.priceCalculate(info); // 触发websocket通知 socket.emit('dataNotify', JSON.stringify(info)); break; case 'supply': // 供货方式更改成功后 projectGLJSpread.changeSupplyType(info); break; case 'is_evaluate': projectObj.project.projectGLJ.changeIsEvaluate(id); break; } // 重新加载数据到缓存 projectObj.project.projectGLJ.loadData(function () { projectObj.project.projectGLJ.loadCacheData(); $.bootstrapLoading.end(); }); // 更新定额工料机 gljOprObj.refreshView(); } //过滤消耗量为0的项目工料机 function filterProjectGLJ(jsonData) { if (jsonData.length > 0) { // 不显示消耗量为0的数据 jsonData= _.filter(jsonData,function (item) { return item.quantity !== 0 && item.quantity !== '0' }) } return jsonData; } function sortProjectGLJ(jsonData) { if (jsonData.length > 0) { jsonData = _.sortByAll(jsonData, [function (item) { return item.unit_price.type + ""; }, 'code']); } return jsonData }