/**
* 工料机汇总相关
*
* @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 += '';
}
$("#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
}