/** * 工料机汇总相关 * * @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; let projectGLJView={ currentTag:'' } $(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 + '(复件)'); }); // 单价文件另存为操作 $("#save-as-confirm").click(function () { let name = $("#save-as-name").val(); if (name === '') { $("#save-as-tips").text('请填写单价文件名称').show(); return false; } if (isChanging) { return false; } $.ajax({ url: '/glj/save-as', type: 'post', data: {name: name, project_id: scUrlUtil.GetQueryString('project')}, dataType: 'json', error: function () { isChanging = false; }, beforeSend: function () { isChanging = true; }, success: function (response) { isChanging = false; if (response.err === 1) { let msg = response.msg !== undefined && response.msg !== '' ? response.msg : '另存为失败!'; $("#save-as-tips").text(msg).show(); return false; } $("#file-save-as-dialog").modal("hide"); } }); }); // 从其他建设项目中复制 选择建设项目 $("#other-project").change(function () { let projectId = $(this).val(); if (otherFileData[projectId] === undefined) { return false; } let otherFileHtml = ''; for (let unitPrice of otherFileData[projectId]) { otherFileHtml += ''; } $("#other-file").html(otherFileHtml); }); // 单价文件选项切换 $("input[name='change-type']").change(function () { let type = $(this).val(); type = parseInt(type); $("#change-dj .option").hide(); if (type === 0) { $(".option.select").show(); } else { $(".option.copy").show(); } }); // 单价文件切换确认 $("#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(); $.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服务器 socketInit(); unitPriceFileInit(); setTimeout(spreadInit, 1); initPage=true; } else { projectObj.project.projectGLJ.loadCacheData(); } }); } /** * spreadjs相关初始化 * * @return {void} */ function spreadInit() { 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; }); // 切换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': changeIsEvaluate(id); break; } // 重新加载数据到缓存 projectObj.project.projectGLJ.loadData(function () { projectObj.project.projectGLJ.loadCacheData(); $.bootstrapLoading.end(); }); // 更新定额工料机 gljOprObj.refreshView(); } //更新是否暂估 function changeIsEvaluate (id){ let projectGLJ = projectObj.project.projectGLJ let datas = projectGLJ.datas; let gljList = datas.gljList; let glj = _.find(gljList, {'id': id}); if(glj){ let con_key = gljOprObj.getIndex(glj,gljKeyArray); let pratioM =datas.mixRatioConnectData[con_key];//找到父key let conditions = []; if(pratioM&&pratioM.length>0){ for(let p_key of pratioM ){ conditions.push(gljOprObj.getConditionByKey(p_key)); } } let gljs = projectGLJ.getProjectGLJs(conditions,false); gljs.push(glj); let nodes = projectGLJ.getImpactRationNodes(gljs);//取到因为改变工料机价格而受影响的定额 projectObj.project.calcProgram.calcRationsAndSave(nodes);//触发计算程序 } } /** * socket.io相关初始化 * * @return {void} */ function socketInit() { if (socket === null) { socket = io('http://' + host + ':3300'); socket.on('connect', function () { socket.emit('join', roomId); console.log('单价文件同步连接成功'); }); } // 接收到改变 socket.on('dataChange', function (data) { data = JSON.parse(data); if (data.newValue === undefined) { return false; } $("#message").html('市场单位已被修改,点击加载'); $("#notify").slideDown('fast'); }); } //过滤消耗量为0的项目工料机 function filterProjectGLJ(jsonData) { if (jsonData.length > 0) { // 不显示消耗量为0的数据 let tmpData = []; for (let data of jsonData) { if (data.quantity !== 0 && data.quantity !== '0') { tmpData.push(data); } } jsonData = tmpData; } return jsonData; } function sortProjectGLJ(jsonData) { if (jsonData.length > 0) { jsonData = _.sortByAll(jsonData, [function (item) { return item.unit_price.type + ""; }, 'code']); } return jsonData }