let gatherFeesView = { datas: [], mainSpread: null, detailSpread: null, mainSheet: null, detailSheet: null, mainSetting: { header:[ // {headerName:"ID",headerWidth:80,dataCode:"ID", hAlign: "center"}, {headerName:"费用类别",headerWidth:120,dataCode:"name", dataType: "String"}, {headerName:"金额",headerWidth:80,dataCode:"totalFee", dataType: "String",hAlign: "right"} ], view:{ comboBox:[], lockColumns:[0,1], colHeaderHeight: CP_Col_Width.colHeader, rowHeaderWidth: CP_Col_Width.rowHeader } }, detailSetting: { header:[ // {headerName:"ID",headerWidth:80,dataCode:"ID", hAlign: "center"}, {headerName:"费用代号",headerWidth:CP_Col_Width.code, dataCode:"code", dataType: "String"}, {headerName:"费用名称",headerWidth:CP_Col_Width.name, dataCode:"name", dataType: "String"}, {headerName:"计算基数",headerWidth:CP_Col_Width.dispExprUser, dataCode:"dispExprUser", dataType: "String"}, {headerName:"费率",headerWidth:CP_Col_Width.feeRate, dataCode:"feeRate", dataType: "Number",hAlign: "right",decimalField:"feeRate"}, {headerName: "金额", headerWidth: CP_Col_Width.totalFee, dataCode: "totalFee", dataType: "Number"}, {headerName:"费用类别",headerWidth:CP_Col_Width.displayFieldName, dataCode:"displayFieldName", dataType: "String", hAlign: "center"}, {headerName:"基数说明",headerWidth:CP_Col_Width.statement, dataCode:"statement", dataType: "String"}, {headerName:"备注",headerWidth:CP_Col_Width.memo, dataCode:"memo", dataType: "String"} ], view:{ comboBox:[], lockColumns:[0,1,2,3,4,5,6,7], colHeaderHeight: CP_Col_Width.colHeader, rowHeaderWidth: CP_Col_Width.rowHeader }, //callback 和disable都是和 cusButton配套使用的 callback:{ calcBase:function (hitinfo) { calcBaseView.onCalcBaseButtonClick(hitinfo,'ration'); } }, disable:{ calcBase:function (row,col) { return projectReadOnly || !calcBaseView.ifEdit('ration', row) } } }, buildSheet: function (){ let me = this; if (me.mainSpread) { me.mainSpread.destroy(); me.mainSpread = null; }; if (me.detailSpread) { me.detailSpread.destroy(); me.detailSpread = null; }; // me.mainSpread = sheetCommonObj.buildSheet($('#gfMainSpread')[0], me.mainSetting, me.datas.length); me.mainSpread = sheetCommonObj.buildSheet($('#gfMainSpread')[0], me.mainSetting, 1); me.mainSheet = me.mainSpread.getSheet(0); sheetCommonObj.spreadDefaultStyle(me.mainSpread); // me.detailSpread = sheetCommonObj.buildSheet($('#gfDetailSpread')[0], me.detailSetting, me.datas[0].calcItems.length); me.detailSpread = sheetCommonObj.buildSheet($('#gfDetailSpread')[0], me.detailSetting, 1); me.detailSheet = me.detailSpread.getSheet(0); sheetCommonObj.spreadDefaultStyle(me.detailSpread); me.mainSheet.bind(GC.Spread.Sheets.Events.EnterCell, me.onMainEnterCell); me.detailSheet.bind(GC.Spread.Sheets.Events.ValueChanged, me.onDetailValueChanged); me.detailSheet.bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged); me.detailSheet.bind(GC.Spread.Sheets.Events.EnterCell, me.onDetailEnterCell); me.detailSheet.name('gatherfee_detail'); if(!projectReadOnly){ // me.loadMainContextMenu(); // me.loadDetailContextMenu(); } else { if(me.mainSetting.view.lockColumns){ me.mainSetting.view.lockColumns = null; } if(me.detailSetting.view.lockColumns){ me.detailSetting.view.lockColumns = null; } sheetCommonObj.disableSpread(me.mainSpread); sheetCommonObj.disableSpread(me.detailSpread); }; }, showData: async function () { $.bootstrapLoading.start(); let me = this; let obj = await projectObj.project.calcProgram.getGatherFeeData(); me.datas = obj.calcPrograms; $('#lblGatherFee').text(`费用汇总 ${obj.totalFee}`); sheetCommonObj.showData(me.mainSheet, me.mainSetting, me.datas); me.mainSheet.setRowCount(me.datas.length); sheetCommonObj.showData(me.detailSheet, me.detailSetting, me.datas[0].calcItems); me.getfeeRateColor(me.datas[0].calcItems); customRowHeader(me.detailSheet, me.datas[0].calcItems.length); let count = gatherFeesView.datas[gatherFeesView.mainSheet.getActiveRowIndex()].calcItems.length; gatherFeesView.detailSheet.setRowCount(count, GC.Spread.Sheets.SheetArea.viewport); $.bootstrapLoading.end(); }, onMainEnterCell: function(sender, args) { var me = gatherFeesView; var row = args.sheet.getActiveRowIndex(); me.detailSpread.suspendPaint(); var dData = me.datas[row].calcItems; me.detailSheet.setRowCount(dData.length, GC.Spread.Sheets.SheetArea.viewport); sheetCommonObj.showData(me.detailSheet, me.detailSetting, dData); me.getfeeRateColor(dData); customRowHeader(me.detailSheet, dData.length); me.detailSpread.resumePaint(); }, onRangeChanged:function (sender,args) { let me = gatherFeesView; let editInfo= me.getSelectionInfo(); let dataCode = me.detailSetting.header[args.col].dataCode; // if (args.action == GC.Spread.Sheets.RangeChangedAction.clear&&args.changedCells.length == 1) {//清除操作 if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {//清除操作 if (dataCode == 'feeRate') { $.bootstrapLoading.start(); projectObj.project.FeeRate.updateFeeRateFromCalc(null, editInfo); } else if (dataCode == 'displayFieldName'){ $.bootstrapLoading.start(); for (let cell of args.changedCells){ let curCalcItem = editInfo.template.calcItems[cell.row]; curCalcItem.fieldName = ''; curCalcItem.displayFieldName = ''; }; let data = { 'projectID': projectObj.project.ID(), 'ID': editInfo.template.ID, 'calcItems': editInfo.template.calcItems }; gatherFeesView.updateTemplate(data, function (rst) { if (rst){ gatherFeesView.refreshDetailSheet(); $.bootstrapLoading.end(); } }); } } }, onDetailValueChanged: function(sender, args) { $.bootstrapLoading.start(); let me = gatherFeesView; let editInfo= me.getSelectionInfo(); let curCalcItem = editInfo.calcItem; let dataCode = me.detailSetting.header[args.col].dataCode; if (dataCode == 'feeRate') { projectObj.project.FeeRate.updateFeeRateFromCalc(args.newValue, editInfo); $.bootstrapLoading.end(); return; } let template = me.getSelectionInfo().template; if (dataCode == 'displayFieldName') { if (curCalcItem.displayFieldName == args.newValue) { $.bootstrapLoading.end(); return; } if (analyzer.fieldNameIsUsed(template, args.newValue)){ let sheet = me.detailSpread.getActiveSheet(); sheet.suspendEvent(); sheet.setValue(args.row, args.col, args.oldValue); sheet.resumeEvent(); $.bootstrapLoading.end(); let s = hintBox.font(template.fieldNameTempUsed + 1); hintBox.infoBox('系统提示', `“${args.newValue}” 已被第 ${s} 行使用,不允许重复选择!`, 1); delete template.fieldNameTempUsed; return; } curCalcItem.fieldName = projectObj.project.calcProgram.compiledFeeTypeMaps[args.newValue]; } else if (dataCode == 'dispExprUser'){ // 除非直接改单元格,弹窗不会走这里 hintBox.infoBox('系统提示', '用户直接在sheet中修改了dispExprUser值,触发onDetailEditEnded事件。', 1); }; curCalcItem[dataCode] = args.newValue; if (dataCode == 'name'){ analyzer.refreshUsedCalcItemsStatement(template, curCalcItem); let data = { 'projectID': projectObj.project.ID(), 'ID': template.ID, 'calcItems': template.calcItems }; gatherFeesView.updateTemplate(data, function (rst) { if (rst){ gatherFeesView.refreshDetailSheet(); $.bootstrapLoading.end(); } }); if (activeSubSheetIsCalcProgram()) calcProgramObj.refreshCalcProgram(projectObj.project.mainTree.selected, 1); } else{ let data = { 'projectID': projectObj.project.ID(), 'templatesID': template.ID, 'calcItem': curCalcItem }; me.saveCalcItem(data, function (rst) { if (rst){ let relationNodes = calcTools.getNodesByProgramID(template.ID); projectObj.project.calcProgram.calcNodesAndSave(relationNodes); $.bootstrapLoading.end(); } }); } }, onDetailEnterCell: function (sender, args) { // if (args.col == 2) // 加这句,切换单元格后,原单元格的三点图片不会消失。 gatherFeesView.detailSheet.repaint(); // 这句是为了触发sheetCommonObj → getCusButtonCellType → CusButtonCellType → paint方法。 // for test. // let t = gatherFeesView.getSelectionInfo().template; // let c = gatherFeesView.getSelectionInfo().calcItem; // let lc = analyzer.calcItemLabourCoe(c); // c.dispExpr = analyzer.getDispExpr(c.expression, t); // c.dispExprUser = analyzer.getDispExprUser(c.dispExpr, lc); // c.compiledExpr = analyzer.getCompiledExpr(c.expression, lc); // let e = `ID:${c.ID} ${c.expression} ${c.dispExpr} ${c.dispExprUser} ${c.compiledExpr} ${c.custom}`; // projectObj.testDisplay('', e); }, getSelectionInfo:function () { var templateIndex = this.mainSpread.getActiveSheet().getActiveRowIndex(); var dIndex = this.detailSpread.getActiveSheet().getActiveRowIndex(); var info = { template:this.datas[templateIndex], calcItem:this.datas[templateIndex].calcItems[dIndex] } return info; }, refreshDetailSheet:function () { var me = this; if(me.mainSpread && me.detailSpread){ let mainRowIdx = me.mainSpread.getActiveSheet().getActiveRowIndex(); let calcItems = me.datas[mainRowIdx].calcItems; let detailSheet = me.detailSpread.getActiveSheet(); detailSheet.setRowCount(calcItems.length); sheetCommonObj.showData(detailSheet, me.detailSetting, calcItems); me.getfeeRateColor(calcItems); customRowHeader(detailSheet, calcItems.length); } }, getfeeRateColor: function (calcItems) { // 有费率ID关联的变个色 var me = this; for (let i = 0; i < calcItems.length; i++) { if (calcItems[i].feeRateID != undefined && calcItems[i].feeRateID != null) me.detailSheet.getCell(i, 3).foreColor("#0aa8ea") else me.detailSheet.getCell(i, 3).foreColor("black"); } } }; $(document).ready(function(){ $('#tab_gather_fees').on('shown.bs.tab', function (e) { sessionStorage.setItem('mainTab', '#tab_gather_fees'); $(e.relatedTarget.hash).removeClass('active'); // 每次进来都要重新计算一次 if (!gatherFeesView.mainSpread) { gatherFeesView.buildSheet(); } gatherFeesView.mainSpread.refresh(); gatherFeesView.showData(); }); // $("#lblGatherFee").bind('click',function () { // gatherFeesView.buildSheet(); // gatherFeesView.refreshDetailSheet(); // }); });