| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766 | 
							- '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();
 
-         }
 
-     });
 
- });
 
 
  |