'use strict'; /** * 材料调差 - 调差清单 * * @author EllisRan * @date 2019/10/25 * @version */ function findNotJoinLeafXmj(x, type = '') { if (type === 'index') { return notJoinList.findIndex(function (item) { return item.gcl_id === x.gcl_id && item.xmj_id === x.id && (x.mx_id === undefined || (x.mx_id !== undefined && x.mx_id === item.mx_id)); }); } return notJoinList.find(function (item) { return item.gcl_id === x.gcl_id && item.xmj_id === x.id && (x.mx_id === undefined || (x.mx_id !== undefined && x.mx_id === item.mx_id)); }); } function getMpSpreadByMBData(id) { const info = materialBillsData.find(function (item) { return item.id === parseInt(id); }); return info.m_spread; } function getMaterialListByLeafXmj(gcl_id, xmj_id, mx_id = null) { const list = []; for (const ml of materialListData) { if (gcl_id === ml.gcl_id && xmj_id === ml.xmj_id && (mx_id === null || mx_id === ml.mx_id)) { list.push(ml); } } return list; } function calcOneBQJC(xmj) { let jiacha = 0; const notx = findNotJoinLeafXmj(xmj); if (notx === undefined) { const list = xmj.mx_id !== undefined ? getMaterialListByLeafXmj(xmj.gcl_id, xmj.id, xmj.mx_id) : getMaterialListByLeafXmj(xmj.gcl_id, xmj.id); for (const l of list) { jiacha = ZhCalc.add(jiacha, ZhCalc.mul(ZhCalc.mul(xmj.gather_qty, l.quantity), getMpSpreadByMBData(l.mb_id))); } } return ZhCalc.round(jiacha, 2); } function getPasteHint (str, row = '') { let returnObj = str; if (row) { returnObj.msg = '清单第' + (row+1) + '行' + str.msg; } return returnObj; } // 重新计算列表的价差 function calculateJiaCha(data, index) { // 计算单条的 if (index) { const gcld = data[index] let total_jiacha = 0; for (const [index, xmj] of gcld.leafXmjs.entries()) { const jiacha = calcOneBQJC(xmj); gcld.leafXmjs[index].jiacha = jiacha !== 0 ? jiacha : null; total_jiacha += jiacha; } gcld.total_jiacha = ZhCalc.round(total_jiacha, 2) } else { for(const gcld of data) { let total_jiacha = 0; for (const [index, xmj] of gcld.leafXmjs.entries()) { const jiacha = calcOneBQJC(xmj); gcld.leafXmjs[index].jiacha = jiacha !== 0 ? jiacha : null; total_jiacha += jiacha; } gcld.total_jiacha = ZhCalc.round(total_jiacha, 2) } } } const is_numeric = (value) => { if (typeof(value) === 'object') { return false; } else { return !Number.isNaN(Number(value)) && value.toString().trim() !== ''; } }; $(document).ready(() => { function TipCellType() { } TipCellType.prototype = new GC.Spread.Sheets.CellTypes.ColumnHeader(); TipCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) { return { x: x, y: y, row: context.row, col: context.col, cellRect: cellRect, sheetArea: context.sheetArea, sheet: context.sheet }; }; TipCellType.prototype.processMouseEnter = function (hitInfo){ if (!this._toolTipElement) { var div = document.createElement("div"); $(div).css("position", "absolute") .css("border", "1px #C0C0C0 solid") .css("box-shadow", "1px 2px 5px rgba(0,0,0,0.4)") .css("font", "9pt Arial") .css("background", "#fff") // .css("color", "#fff") .css("z-index", "1000") .css("padding", 5); this._toolTipElement = div; } $(this._toolTipElement).text("单位数量:每一单位清单下所需工料消耗量。") .css("top", hitInfo.y + 15) .css("left", hitInfo.x - 15); $(this._toolTipElement).hide(); // document.body.insertBefore(this._toolTipElement, null); $('#material-spread-div').append(this._toolTipElement, null); $(this._toolTipElement).show("fast"); }; TipCellType.prototype.processMouseLeave = function (hitInfo) { if (this._toolTipElement) { // document.body.removeChild(this._toolTipElement); // $('#material-spread-div').removeChild(this._toolTipElement); this._toolTipElement.remove(); this._toolTipElement = null; } }; autoFlashHeight(); // 清单table const ledgerSpread = SpreadJsObj.createNewSpread($('#ledger-spread')[0]); const ledgerSpreadSetting = { cols: [ {title: '清单编号', colSpan: '1', rowSpan: '2', field: 'b_code', hAlign: 0, width: 90, formatter: '@'}, {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 220, formatter: '@'}, {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 80, formatter: '@'}, {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 110, type: 'Number'}, {title: '本期计量数量|合同', colSpan: '3|1', rowSpan: '1|1', field: 'contract_qty', hAlign: 2, width: 110, type: 'Number'}, {title: '|数量变更', colSpan: '|1', rowSpan: '|1', field: 'qc_qty', hAlign: 2, width: 110, type: 'Number'}, {title: '|小计', colSpan: '|1', rowSpan: '|1', field: 'gather_qty', hAlign: 2, width: 110, type: 'Number'}, {title: '本期完成金额', colSpan: '1', rowSpan: '2', field: 'gather_tp', hAlign: 2, width: 110, type: 'Number'}, {title: '本期价差', colSpan: '1', rowSpan: '2', field: 'total_jiacha', hAlign:3, width: 110, type: 'Number'} ], emptyRows: 0, headRows: 2, headRowHeight: [25, 25], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', readOnly: true, }; // 解析清单汇总数据 gclGatherModel.loadLedgerData(ledger, curLedgerData); gclGatherModel.loadPosData(pos, curPosData); let gclGatherData = gclGatherModel.gatherGclData().filter(item => { return item.qc_qty || item.contract_qty }); calculateJiaCha(gclGatherData); // let gclGatherData = gclGatherModel.gatherGclData() // 获取项目节数据 function loadLeafXmjData(iGclRow) { const gcl = gclGatherData[iGclRow]; if (gcl) { for (const [index, xmj] of gcl.leafXmjs.entries()) { const jiacha = calcOneBQJC(xmj); gcl.leafXmjs[index].jiacha = jiacha !== 0 ? ZhCalc.round(jiacha, 2) : null; } SpreadJsObj.loadSheetData(leafXmjSpread.getActiveSheet(), SpreadJsObj.DataType.Data, gcl.leafXmjs); // 对清单调差工料table的单位数量进行改变 materialSpreadSetting.cols[materialSpreadSetting.cols.length - 1].title = '|' + gcl.unit + '数量 �'; // SpreadJsObj.initSheet(materialSpread.getActiveSheet(), materialSpreadSetting); } else { SpreadJsObj.loadSheetData(leafXmjSpread.getActiveSheet(), SpreadJsObj.DataType.Data, []); } SpreadJsObj.initSheet(materialSpread.getActiveSheet(), materialSpreadSetting); } SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), ledgerSpreadSetting); // 项目明细table const leafXmjSpread = SpreadJsObj.createNewSpread($('#leaf-xmj-spread')[0]); const leafXmjSpreadSetting = { cols: [ {title: '项目节|编号', colSpan: '2|1', rowSpan: '1|1', field: 'code', hAlign: 0, width: 80, formatter: '@'}, {title: '|项目节名称', colSpan: '|1', rowSpan: '|1', field: 'jldy', hAlign: 0, width: 100, formatter: '@'}, {title: '计量单元|计量单元', colSpan: '2|1', rowSpan: '1|1', field: 'bwmx', hAlign: 0, width: 100, formatter: '@'}, {title: '|复核数量', colSpan: '|1', rowSpan: '|1', field: 'quantity', hAlign: 0, width: 80, type: 'Number'}, {title: '部位信息|单位工程', colSpan: '3|1', rowSpan: '1|1', field: 'dwgc', hAlign: 0, width: 100, formatter: '@'}, {title: '|分部工程', colSpan: '|1', rowSpan: '|1', field: 'fbgc', hAlign: 0, width: 100, formatter: '@'}, {title: '|分项工程', colSpan: '|1', rowSpan: '|1', field: 'fxgc', hAlign: 0, width: 180, formatter: '@'}, {title: '本期计量数量|合同', colSpan: '3|1', rowSpan: '1|1', field: 'contract_qty', hAlign: 2, width: 60, type: 'Number'}, {title: '|数量变更', colSpan: '|1', rowSpan: '|1', field: 'qc_qty', hAlign: 2, width: 80, type: 'Number'}, {title: '|小计', colSpan: '|1', rowSpan: '|1', field: 'gather_qty', hAlign: 2, width: 60, type: 'Number'}, {title: '本期价差', colSpan: '1', rowSpan: '2', field: 'jiacha', hAlign: 2, width: 80, type: 'Number'}, ], emptyRows: 0, headRows: 2, headRowHeight: [25, 25], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', readOnly: true, }; // const leafXmjCol = { // getValue: { // jiacha: function (data) { // let sum = 0; // const sheet = leafXmjSpread.getActiveSheet(); // const select = SpreadJsObj.getSelectObject(sheet); // const notx = findNotJoinLeafXmj(select); // if (notx === undefined) { // for(const ml of materialList) { // sum = ZhCalc.round(ZhCalc.add(sum, ZhCalc.mul(ZhCalc.mul(data.gather_qty, ml.quantity), getMpSpreadByMBData(ml.mb_id))), 2); // } // } // return sum !== 0 ? sum : null; // } // } // }; // SpreadJsObj.initSpreadSettingEvents(leafXmjSpreadSetting, leafXmjCol); SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), leafXmjSpreadSetting); // 加载清单数据 SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Data, gclGatherData); // 调差清单工料table const materialSpread = SpreadJsObj.createNewSpread($('#material-spread')[0]); const materialSpreadSetting = { cols: [ {title: '清单调差工料|编号', colSpan: '4|1', rowSpan: '1|1', field: 'code', hAlign: 0, width: 80, formatter: '@', readOnly: true}, {title: '|名称', colSpan: '|1', rowSpan: '|1', field: 'name', hAlign: 0, width: 100, formatter: '@', readOnly: true}, {title: '|单位', colSpan: '|1', rowSpan: '|1', field: 'unit', hAlign: 1, width: 60, formatter: '@', readOnly: true}, {title: '|数量 �', colSpan: '1', rowSpan: '|1', field: 'quantity', hAlign: 2, width: 80, type: 'Number', readOnly: 'readOnly.isEdit'}, ], emptyRows: 0, headRows: 2, headRowHeight: [25, 25], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', }; const materialBase = { isEdit: function (data) { // 是否本期添加的工料 return data.order === stage_order; } }; const materialCol = { readOnly: { isEdit: function (data) { const sheet = leafXmjSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); const notx = findNotJoinLeafXmj(select); return !(!readOnly && notx === undefined && materialBase.isEdit(data)); }, }, }; SpreadJsObj.initSpreadSettingEvents(materialSpreadSetting, materialCol); // 获取项目节数据 let materialList = []; function loadMaterialData(iGclRow, iLXmjRow) { const gcl = gclGatherData[iGclRow]; if (gcl && gcl.leafXmjs[iLXmjRow]) { const xmj = gcl.leafXmjs[iLXmjRow]; materialList = []; for (const m of materialListData) { if (m.gcl_id === xmj.gcl_id && m.xmj_id === xmj.id && ((xmj.mx_id !==undefined && m.mx_id === xmj.mx_id) || xmj.mx_id === undefined)) { materialList.push(m); } } SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, materialList); } else { SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, []); } SpreadJsObj.reLoadSheetData(leafXmjSpread.getActiveSheet()); } // SpreadJsObj.locateTreeNode(ledgerSpread.getActiveSheet(), ) loadLeafXmjData(0); loadMaterialData(0, 0); const sheet = materialSpread.getActiveSheet(); sheet.suspendPaint(); sheet.setCellType(1, 3, new TipCellType(), spreadNS.SheetArea.colHeader); sheet.resumePaint(); // 不参与调差数据值变灰 function checkNotJoinMaterialData() { const sheet = ledgerSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); const index = gclGatherData.indexOf(select); if (index !== -1) { const xmj = gclGatherData[index].leafXmjs; const leafXmjSheet = leafXmjSpread.getActiveSheet(); for (const [iRow,x] of xmj.entries()) { const notx = findNotJoinLeafXmj(x); const color = notx === undefined ? '' : '#d6d8db'; leafXmjSheet.getRange(iRow, -1, 1, -1).backColor(color); } } } checkNotJoinMaterialData(); // 对添加工料表格赋值 function changeMaterialTable() { $('#materialBills tr').removeClass('table-secondary'); $('#materialBills').find('input').removeAttr('disabled'); $('#materialBills').find('input').prop('checked', false); for (const [index, ml] of materialList.entries()) { const mbIndex = materialBillsData.findIndex(function (item) { return item.id === ml.mb_id; }); if (mbIndex !== -1) { $('#materialBills tr').eq(mbIndex).addClass('table-secondary'); $('#materialBills').find('input').eq(mbIndex).attr('disabled', true); $('#materialBills').find('input').eq(mbIndex).prop('checked', true); } } } // 添加调差工料 $('#add_material_bill').click(function () { // 获取已选工料 $('#materialBills').find('input:disabled').prop('checked', false); const selectList = $('#materialBills').find('input:checked'); if (selectList.length === 0) { toastr.warning('请选择调差工料'); $('#materialBills').find('input:disabled').prop('checked', true); return false; } const mb_id = []; for (let s = 0; s < selectList.length; s++) { mb_id.push($('#materialBills').find('input:checked').eq(s).val()); } // 获取当前项目节或部位明细id const sheet = ledgerSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); const index = gclGatherData.indexOf(select); const leafXmjSheet = leafXmjSpread.getActiveSheet(); const leafXmjSelect = SpreadJsObj.getSelectObject(leafXmjSheet); const gcl = gclGatherData[index].leafXmjs; const leafXmjIndex = gcl.indexOf(leafXmjSelect); const xmj = gcl[leafXmjIndex]; const data = { xmj_id: xmj.id, gcl_id: xmj.gcl_id, mx_id: xmj.mx_id !== undefined ? xmj.mx_id : '', mb_id: mb_id, gather_qty: xmj.gather_qty, }; // 上传到数据库 postData(window.location.pathname + '/save', {type: 'add', postData: data}, function (result) { // 添加到materialList里 materialListData = result; loadMaterialData(index, leafXmjIndex); $('#addgl').modal('hide'); }); $('#materialBills').find('input:disabled').prop('checked', true); }); if (!readOnly) { const leafXmjSpreadObj = { getSelect : function () { const sheet = ledgerSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); const index = gclGatherData.indexOf(select); const leafXmjSheet = leafXmjSpread.getActiveSheet(); const leafXmjSelect = SpreadJsObj.getSelectObject(leafXmjSheet); const iRow = gclGatherData[index].leafXmjs.indexOf(leafXmjSelect); return [index, iRow, leafXmjSheet, leafXmjSelect]; }, checkJoinMaterial: function (type) { const [iGclRow, iRow, sheet, select] = leafXmjSpreadObj.getSelect(); const color = type === 'join' ? '' : '#d6d8db'; const data = { type: type, select: type === 'join' ? findNotJoinLeafXmj(select) : select, } // 添加到 postData(window.location.pathname + '/save', data, function (result) { if (type === 'join') { const index = findNotJoinLeafXmj(select, 'index'); notJoinList.splice(index, 1); } else { notJoinList.push(result); } gclGatherData[iGclRow].leafXmjs[iRow].jiacha = calcOneBQJC(select); calculateJiaCha(gclGatherData, iGclRow) SpreadJsObj.reLoadRowData(sheet, iRow); sheet.getRange(iRow, -1, 1, -1).backColor(color); loadMaterialData(iGclRow, iRow); SpreadJsObj.reLoadRowData(ledgerSpread.getActiveSheet(), iGclRow); }); }, } // leafXmj右键功能 $.contextMenu({ selector: '#leaf-xmj-spread', build: function ($trigger, e) { const target = SpreadJsObj.safeRightClickSelection($trigger, e, leafXmjSpread); return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader; }, items: { 'stop': { name: '不参与调差', icon: 'fa-remove', callback: function (key, opt) { leafXmjSpreadObj.checkJoinMaterial('notjoin'); }, visible: function (key, opt) { const sheet = leafXmjSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); const sel = sheet.getSelections()[0]; const notx = findNotJoinLeafXmj(select); if (!select || sel.rowCount !== 1) { return false; } if (!readOnly && select && notx === undefined) { return true; } else { return false; } } }, 'start': { name: '参与调差', icon: 'fa-sign-in', callback: function (key, opt) { leafXmjSpreadObj.checkJoinMaterial('join'); }, visible: function (key, opt) { const sheet = leafXmjSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); const sel = sheet.getSelections()[0]; const notx = findNotJoinLeafXmj(select); if (!select || sel.rowCount !== 1) { return false; } if (!readOnly && select && notx === undefined) { return false; } else { return true; } }, } } }); // material-spread右键功能 const materialSpreadObj = { del: function () { const sheet = materialSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); postData(window.location.pathname + '/save', {type: 'del', id: select.id, mb_id: select.mb_id}, function (result) { const index = materialList.indexOf(select); materialList.splice(index, 1); sheet.deleteRows(index, 1); SpreadJsObj.reLoadSheetData(materialSpread.getActiveSheet()); const sel = sheet.getSelections(); sheet.setSelection(index > 0 ? index - 1 : 0, sel.length > 0 ? sel[0].col : 0, 1, 1); const materialListIndex = materialListData.indexOf(select); materialListData.splice(materialListIndex, 1); const [iGclRow, iRow, lsheet, lselect] = leafXmjSpreadObj.getSelect(); gclGatherData[iGclRow].leafXmjs[iRow].jiacha = calcOneBQJC(lselect); calculateJiaCha(gclGatherData, iGclRow) SpreadJsObj.reLoadRowData(lsheet, iRow); SpreadJsObj.reLoadRowData(ledgerSpread.getActiveSheet(), iGclRow); }); }, deletePress: function (sheet) { return; }, editEnded: function (e, info) { if (info.sheet.zh_setting) { const select = SpreadJsObj.getSelectObject(info.sheet); const col = info.sheet.zh_setting.cols[info.col]; // 未改变值则不提交 // const validText = info.editingText ? (typeof(info.editingText) === 'String' ? info.editingText.replace('\n', '') : info.editingText) : null; const validText = is_numeric(info.editingText) ? parseFloat(info.editingText) : (info.editingText ? trimInvalidChar(info.editingText) : null); const orgValue = select[col.field]; if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === '' || validText === null))) { SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } if (col.field === 'quantity') { if (isNaN(validText)) { toastr.error('不能输入其它非数字类型字符'); SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } const num = parseFloat(validText); if (num < 0 || !/^\d+(\.\d{1,6})?$/.test(num)) { toastr.error('请输入大于0并且小于6位小数的浮点数'); SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } } // 更新至服务器 postData(window.location.pathname + '/save', { type:'update', updateData: { id:select.id, quantity: validText, mb_id: select.mb_id } }, function (result) { const materialListIndex = materialListData.indexOf(select); const index = materialList.indexOf(select); select[col.field] = validText; materialListData.splice(materialListIndex, 1, select); materialList.indexOf(index, 1, select); SpreadJsObj.reLoadRowData(info.sheet, info.row); const [iGclRow, iRow, sheet, lselect] = leafXmjSpreadObj.getSelect(); gclGatherData[iGclRow].leafXmjs[iRow].jiacha = calcOneBQJC(lselect); calculateJiaCha(gclGatherData, iGclRow) SpreadJsObj.reLoadRowData(sheet, iRow); SpreadJsObj.reLoadRowData(ledgerSpread.getActiveSheet(), iGclRow); }, function () { SpreadJsObj.reLoadRowData(info.sheet, info.row); }); } }, clipboardPasted(e, info) { const hint = { cellError: {type: 'error', msg: '粘贴内容超出了表格范围'}, numberExpr: {type: 'error', msg: '不能粘贴其它非数字类型字符'}, numberCan: {type: 'error', msg: '请粘贴大于0并且小于6位小数的浮点数'}, }; const range = info.cellRange; const sortData = info.sheet.zh_data || []; if (range.row + range.rowCount > sortData.length) { toastMessageUniq(hint.cellError); SpreadJsObj.reLoadSheetHeader(materialSpread.getActiveSheet()); SpreadJsObj.reLoadSheetData(materialSpread.getActiveSheet()); return; } if (sortData.length > 0 && range.col + range.colCount > 4) { toastMessageUniq(hint.cellError); SpreadJsObj.reLoadSheetHeader(materialSpread.getActiveSheet()); SpreadJsObj.reLoadSheetData(materialSpread.getActiveSheet()); return; } const data = []; for (let iRow = 0; iRow < range.rowCount; iRow++) { let bPaste = true; const curRow = range.row + iRow; const materialData = { id: sortData[curRow].id, mb_id: sortData[curRow].mb_id }; const hintRow = range.rowCount > 1 ? curRow : ''; let sameCol = 0; for (let iCol = 0; iCol < range.colCount; iCol++) { const curCol = range.col + iCol; const colSetting = info.sheet.zh_setting.cols[curCol]; if (!colSetting) continue; let validText = info.sheet.getText(curRow, curCol); validText = is_numeric(validText) ? parseFloat(validText) : (validText ? trimInvalidChar(validText) : null); const orgValue = sortData[curRow][colSetting.field]; if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === ''))) { sameCol++; if (range.colCount === sameCol) { bPaste = false; } continue; } if (colSetting.field === 'quantity') { if (isNaN(validText)) { toastMessageUniq(getPasteHint(hint.numberExpr, hintRow)); bPaste = false; continue; } const num = parseFloat(validText); if (num < 0 || !/^\d+(\.\d{1,6})?$/.test(num)) { toastMessageUniq(getPasteHint(hint.numberCan, hintRow)); bPaste = false; continue; } } materialData[colSetting.field] = validText; } if (bPaste) { data.push(materialData); // rowData.push(curRow); } else { SpreadJsObj.reLoadRowData(info.sheet, curRow); } } if (data.length === 0) { SpreadJsObj.reLoadRowData(info.sheet, info.cellRange.row, info.cellRange.rowCount); return; } // 更新至服务器 postData(window.location.pathname + '/save', { type:'paste', updateData: data }, function (result) { materialListData = result; const [iGclRow, iRow, sheet, lselect] = leafXmjSpreadObj.getSelect(); gclGatherData[iGclRow].leafXmjs[iRow].jiacha = calcOneBQJC(lselect); calculateJiaCha(gclGatherData, iGclRow) SpreadJsObj.reLoadRowData(sheet, iRow); SpreadJsObj.reLoadRowData(ledgerSpread.getActiveSheet(), iGclRow); }, function () { SpreadJsObj.reLoadRowData(info.sheet, info.cellRange.row, info.cellRange.rowCount); }); }, }; materialSpread.bind(spreadNS.Events.EditEnded, materialSpreadObj.editEnded); materialSpread.bind(spreadNS.Events.ClipboardPasted, materialSpreadObj.clipboardPasted); SpreadJsObj.addDeleteBind(materialSpread, materialSpreadObj.deletePress); // 应用调差工料至其他清单明细 $('#user_all_material').click(function () { const ledgerSheet = ledgerSpread.getActiveSheet(); const ledgerSelect = SpreadJsObj.getSelectObject(ledgerSheet); if (ledgerSelect.leafXmjs.length < 2) { toastr.warning('没有需要应用调差工料的其它清单明细'); return false; } const xmjSheet = leafXmjSpread.getActiveSheet(); const xmjSelect = SpreadJsObj.getSelectObject(xmjSheet); // 判断需要应用调差工料的清单明细 const needAddList = []; for (const xmj of ledgerSelect.leafXmjs) { const notx = findNotJoinLeafXmj(xmj); if (notx === undefined && xmjSelect !== xmj) { needAddList.push(xmj); } } if (needAddList.length === 0) { toastr.warning('没有需要应用调差工料的其它清单明细'); return false; } // 更新至服务器 postData(window.location.pathname + '/save', { type:'useOther', postData: { addXmj: needAddList, materialBills: materialList } }, function (result) { materialListData = result; toastr.success('已成功应用'); calculateJiaCha(gclGatherData); const index = gclGatherData.indexOf(ledgerSelect); loadLeafXmjData(index); const xmjSheet = leafXmjSpread.getActiveSheet(); const xmjSelect = SpreadJsObj.getSelectObject(xmjSheet); const xmjIndex = gclGatherData[index].leafXmjs.indexOf(xmjSelect); loadMaterialData(index, xmjIndex); SpreadJsObj.reLoadRowData(ledgerSpread.getActiveSheet(), index); }); }); $.contextMenu({ selector: '#material-spread', build: function ($trigger, e) { const target = SpreadJsObj.safeRightClickSelection($trigger, e, materialSpread); return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader; }, items: { 'create': { name: '添加工料', icon: 'fa-sign-in', callback: function (key, opt) { // 获取已选清单 changeMaterialTable(); $('#addgl').modal('show'); }, disabled: function (key, opt) { const sheet = leafXmjSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); const notx = findNotJoinLeafXmj(select); if (!select) { return true; } if (!readOnly && notx === undefined) { return false; } else { return true; } } }, 'delete': { name: '删除工料', icon: 'fa-remove', callback: function (key, opt) { materialSpreadObj.del(materialSpread.getActiveSheet()); }, disabled: function (key, opt) { const sheet = materialSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); if (!select) { return true; } if (!readOnly && select && materialBase.isEdit(select)) { return false; } else { return true; } } }, } }); } // 切换清单行,读取所属项目节数据 ledgerSpread.getActiveSheet().bind(spreadNS.Events.SelectionChanged, function (e, info) { if (info.oldSelections !== undefined) { const iOldRow = info.oldSelections[0].row, iNewRow = info.newSelections[0].row; if (iNewRow !== iOldRow) { loadLeafXmjData(iNewRow); SpreadJsObj.resetTopAndSelect(leafXmjSpread.getActiveSheet()); loadMaterialData(iNewRow, 0); checkNotJoinMaterialData(); } } }); // 切换项目节数据清单明细行,读取已调用的清单工料数据 leafXmjSpread.getActiveSheet().bind(spreadNS.Events.SelectionChanged, function (e, info) { if (info.oldSelections !== undefined) { const iOldRow = info.oldSelections[0].row, iNewRow = info.newSelections[0].row; if (iNewRow !== iOldRow) { const sheet = ledgerSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); const index = gclGatherData.indexOf(select); loadMaterialData(index, iNewRow); SpreadJsObj.resetTopAndSelect(materialSpread.getActiveSheet()); } } }); // 显示有调差工料清单 $('#show_material_gcl').click(function () { if ($(this).is(':checked')) { const hadMaterialGclGatherData = []; const hadGclIdList = []; for (const ml of materialListData) { if (hadGclIdList.indexOf(ml.gcl_id) === -1) { hadGclIdList.push(ml.gcl_id); } } for (const gcl of gclGatherData) { for (const index in gcl.leafXmjs) { const gcl_id = gcl.leafXmjs[index].gcl_id; if (hadGclIdList.indexOf(gcl_id) !== -1) { hadMaterialGclGatherData.push(gcl); break; } } } gclGatherData = hadMaterialGclGatherData; } else { gclGatherModel.loadLedgerData(ledger, curLedgerData); gclGatherModel.loadPosData(pos, curPosData); gclGatherData = gclGatherModel.gatherGclData().filter(item => { return item.qc_qty || item.contract_qty }); } calculateJiaCha(gclGatherData); SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Data, gclGatherData); loadLeafXmjData(0); loadMaterialData(0, 0); SpreadJsObj.resetTopAndSelect(ledgerSpread.getActiveSheet()); SpreadJsObj.resetTopAndSelect(leafXmjSpread.getActiveSheet()); SpreadJsObj.resetTopAndSelect(materialSpread.getActiveSheet()); checkNotJoinMaterialData(); }); $.subMenu({ menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list', toMenu: '#to-menu', toMiniMenu: '#to-mini-menu', key: 'menu.1.0.0', miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1', callback: function (info) { if (info.mini) { $('.panel-title').addClass('fluid'); $('#sub-menu').removeClass('panel-sidebar'); } else { $('.panel-title').removeClass('fluid'); $('#sub-menu').addClass('panel-sidebar'); } autoFlashHeight(); ledgerSpread.refresh(); leafXmjSpread.refresh(); materialSpread.refresh(); } }); });