| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037 | /** * Created by chen on 2017/8/1. */var feeRateObject={    mainFeeRateSpread:null,    mainFeeRateSheet:null,    mainFeeRateData:null,    mainFeeRateSetting:{        header: [            {headerName: "专业名称", headerWidth: 250, dataCode: "name", dataType: "String"},            {headerName: "值%", headerWidth: 80, dataCode: "rate", dataType: "Number",hAlign: "right",decimalField:"feeRate"},            {headerName: "备注", headerWidth: 150, dataCode: "memo", dataType: "String"}        ],        view: {            lockColumns: [0]        }    },    mainViews:null,    datas:null,    datasBackup:null,    canEdit:false,    activateFeeRate:null,    needCascadeSet:false,    selectionLoad:false,    changeInfo:null,    feeRateSpreads:null,    editingCell:null,    feeRateSelection:null,    sheetSetting: {        header: [            {headerName: "专业名称", headerWidth: 200, dataCode: "name", dataType: "String"},            {headerName: "值%", headerWidth: 120, dataCode: "rate", dataType: "Number",hAlign: "right",decimalField:"feeRate"},            {headerName: "备注", dataCode: "memo", dataType: "String"}        ],        view: {            comboBox: [],            lockColumns: [0, 1, 2]        }    },    columns: [        {            id: 'name',            caption: '专业名称',            dataField: 'name',            width: 450,            allowEditing: false        },        {            id: 'rate',            caption: '值%',            dataField: 'rate',            width: 120,            minWidth: 50,            allowEditing: true        },        {            id: 'memo',            caption: '备注',            dataField: 'memo',            minWidth: 120,            allowEditing: true        },        {            id: 'ID',            caption: 'ID',            dataField: 'ID',            width: 80,            visible: false,            allowEditing: false        },        {            id: 'subFeeRate',            caption: '子费率',            dataField: 'subFeeRate',            width: 80,            visible: false,            allowEditing: false        },        {            id: '_id',            caption: '自动ID',            dataField: '_id',            width: 80,            visible: false,            allowEditing: false        },        {            id: 'ParentID',            caption: '父结点ID',            dataField: 'ParentID',            width: 80,            visible: false,            allowEditing: false        }    ],    options :{        allowSorting: false,        showRowHeader: true,        colMinWidth: 80,        rowHeight: 30,        allowEditing: true,        editMode: 'inline',        editUnit: 'cell',        selectionUnit:  "row",        hierarchy: {            keyField: 'ID',            parentField: 'ParentID',            collapsed: false,            column: 'name'        }    },    dataSource : {        loadRange: function(params) {            params.success(feeRateObject.datas);        },        update: function(params) {            if(!params.hasOwnProperty('sourceIndex')){               var selected = feeRateObject.mainViews.getSelections()[0];                params.sourceIndex = selected.sourceRow;            }            params.success();            if(!$('#cascadeSet').prop('checked')||params.hasOwnProperty('viewIndex')){                projectObj.project.FeeRate.updateFeeRateByEdit(params,feeRateObject.activateFeeRate);            }        }    },    createSheet:function(){        var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();        feeRateObject.feeRateSpreads=sheetCommonObj.buildSheet($('#fee_rate_sheet')[0], feeRateObject.sheetSetting,feeRateFile.rates.length);        feeRateObject.feeRateSheet = feeRateObject.feeRateSpreads.getSheet(0);        feeRateObject.feeRateSheet.selectionUnit(1)//0 cell,1 row,2 col;        feeRateObject.feeRateSheet.options.isProtected = true;        feeRateObject.feeRateSheet.name('fee_rate');        feeRateObject.feeRateSheet.bind(GC.Spread.Sheets.Events.CellClick,feeRateObject.onCellClick);        feeRateObject.feeRateSheet.bind(GC.Spread.Sheets.Events.CellDoubleClick,feeRateObject.onCellDoubleClick);    },    showSelectTree:function (sheet,setting,data) {        var ch = GC.Spread.Sheets.SheetArea.viewport;        var groups=[];        sheet.suspendPaint();        sheet.suspendEvent();        sheet.rowOutlines.direction(GC.Spread.Sheets.Outlines.OutlineDirection.backward);        sheet.getRange(-1, 0, -1, 1).cellType(feeRateObject.getTreeNodeCellType());        for (var col = 0; col < setting.header.length; col++) {            var hAlign = "left", vAlign = "center";            if (setting.header[col].hAlign) {                hAlign = setting.header[col].hAlign;            } else if (setting.header[col].dataType !== "String"){                hAlign = "right";            }            vAlign = setting.header[col].vAlign?setting.header[col].vAlign:vAlign;            sheetCommonObj.setAreaAlign(sheet.getRange(-1, col, -1, 1), hAlign, vAlign);            if (setting.header[col].formatter) {                sheet.setFormatter(-1, col, setting.header[col].formatter, GC.Spread.Sheets.SheetArea.viewport);            }            for (var row = 0; row < data.length; row++) {                var val = data[row][setting.header[col].dataCode];                if(val&&setting.header[col].dataType === "Number"){                    if(setting.header[col].hasOwnProperty('decimalField')){                        var decimal = getDecimal(setting.header[col].decimalField);                        val =scMathUtil.roundToString(val,decimal);                        sheet.setFormatter(-1, col,getFormatter(decimal), GC.Spread.Sheets.SheetArea.viewport);                    }else {                        val =scMathUtil.roundToString(val,2);                    }                }                sheet.setValue(row, col, val, ch);                if(col==0){                    feeRateObject.setSheetGroup(data[row],data,groups,row+1);                }            }        }        //this.lockCells(sheet,setting);        _.forEach(groups,function (g) {            for(var k in g){                sheet.rowOutlines.group(parseInt(k), g[k]);            }        })     /*   sheet.rowOutlines.group(1, 6);        sheet.rowOutlines.group(8, 6);        sheet.rowOutlines.group(15, 6);        sheet.rowOutlines.group(22, 6);*/       // sheet.getRange(-1, 0, -1, 1).width(300);        sheet.showRowOutline(false);        sheet.resumeEvent();        sheet.resumePaint(false);    },    getTreeNodeCellType:function () {        var ns = GC.Spread.Sheets;        function TreeNodeCellType() {        }        TreeNodeCellType.prototype = new ns.CellTypes.Text();        TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {            var level = options.sheet.rowOutlines.getLevel(options.row);            var nlevel = -1;            if (options.row < options.sheet.getRowCount() - 1) {                nlevel = options.sheet.rowOutlines.getLevel(options.row + 1);            }            var hoffset = (level + 2) * 12;            x += hoffset;            w -= hoffset;            GC.Spread.Sheets.CellTypes.Base.prototype.paint.apply(this, arguments);            if (options.row == options.sheet.getRowCount() - 1) return; //last row            if (nlevel > level) {                var collapsed = options.sheet.rowOutlines.isCollapsed(options.row + 1);                x--;                y += h / 2 - 3;                ctx.save();                ctx.fillStyle = "black";                ctx.beginPath();                if (collapsed) {                    ctx.moveTo(x - 5, y);                    ctx.lineTo(x, y + 3);                    ctx.lineTo(x - 5, y + 6);                } else {                    ctx.moveTo(x, y);                    ctx.lineTo(x, y + 5);                    ctx.lineTo(x - 5, y + 5);                }                ctx.fill();                ctx.restore();            }            else {               // x--;                //y += h / 2 - 3;                ctx.save();                ctx.restore();            }        };        // override getHitInfo to allow cell type get mouse messages        TreeNodeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {            return {                x: x,                y: y,                row: context.row,                col: context.col,                cellStyle: cellStyle,                cellRect: cellRect,                sheetArea: context.sheetArea            };        }        TreeNodeCellType.prototype.processMouseDown = function (hitinfo) {            var level = hitinfo.sheet.rowOutlines.getLevel(hitinfo.row);            var hoffset = (level + 2) * 12 + hitinfo.cellRect.x;            if (level==-1&&hitinfo.x < hoffset && hitinfo.x > hoffset - 10) {                var collapsed = hitinfo.sheet.rowOutlines.isCollapsed(hitinfo.row + 1);                hitinfo.sheet.rowOutlines.setCollapsed(hitinfo.row, !collapsed);                hitinfo.sheet.invalidateLayout();                hitinfo.sheet.repaint();            }        };        return new TreeNodeCellType()    },    getFeeRateEditCellType:function () {        var ns = GC.Spread.Sheets;        function FeeRateEditCellType() {            var init=false;        }        FeeRateEditCellType.prototype = new ns.CellTypes.Text();        FeeRateEditCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {           // if(value!=null){               // ctx.fillText(value,x+3+ctx.measureText(value).width,y+h-3);             GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);           // }            if(feeRateObject.editingCell){                if(feeRateObject.editingCell.row==options.row&&feeRateObject.editingCell.col==options.col){                    var image = document.getElementById('f_btn'),imageMagin = 3;                    var imageHeight = h-2*imageMagin;                    var imageWidth = w*2/7;                    var imageX = x + w - imageWidth- imageMagin, imageY = y + h / 2 - imageHeight / 2;                    ctx.save();                    ctx.drawImage(image, imageX, imageY,imageWidth,imageHeight);                    ctx.beginPath();                    ctx.arc(imageX+imageWidth/2,imageY+imageHeight/2,1,0,360,false);                    ctx.arc(imageX+imageWidth/2-4,imageY+imageHeight/2,1,0,360,false);                    ctx.arc(imageX+imageWidth/2+4,imageY+imageHeight/2,1,0,360,false);                    ctx.fillStyle="black";//填充颜色,默认是黑色                    ctx.fill();//画实心圆                    ctx.closePath();                    ctx.restore();                }            }        };        FeeRateEditCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {            return {                x: x,                y: y,                row: context.row,                col: context.col,                cellStyle: cellStyle,                cellRect: cellRect,                sheetArea: context.sheetArea            };        };        FeeRateEditCellType.prototype.processMouseDown = function (hitinfo) {            var me=feeRateObject;            me.pmLeave = false;            if(me.editingCell==null){                var showSelectBtn = true;                if(hitinfo.sheet.name()!='calc_detail'){                    showSelectBtn=me.ifFeeRateEdit();                }                if(showSelectBtn){                    me.editingCell={                        row:hitinfo.row,                        col:hitinfo.col                    }                    hitinfo.sheet.invalidateLayout();                    hitinfo.sheet.repaint();                }            }else if(hitinfo.row==me.editingCell.row){                var offset=hitinfo.cellRect.x+hitinfo.cellRect.width-6;                var imageMagin=3;                var imageHeight = hitinfo.cellRect.height-2*imageMagin;                var imageWidth = hitinfo.cellRect.width*2/7;                if(hitinfo.x<offset&&hitinfo.x>offset-imageWidth){                    me.showSelectModal(hitinfo);                }            }        };        FeeRateEditCellType.prototype.processMouseLeave = function (hitinfo) {            if(!feeRateObject.pmLeave){                feeRateObject.editingCell=null;                hitinfo.sheet.invalidateLayout();                hitinfo.sheet.repaint();                feeRateObject.pmLeave = true;            }        }        return new FeeRateEditCellType();    },    showSelectModal:function (hitinfo) {        //锁定的清单不显示        let project = projectObj.project;        if(project.isBillsLocked() && project.withinBillsLocked(project.mainTree.selected)){            return;        }        $("#fee_rate_tree").modal({show:true});        $('#edit_from').val(hitinfo.sheet.name());    },    setSheetGroup:function (rate,data,groups,row) {        var me=this;        var group={};        var count=me.getChildrenCount(rate.ID,data);        if(count>0){            group[row]=count;            groups.push(group);        }        return groups;    },    getChildrenCount:function (id,data) {        var me=this;        var sum=0;        var children=_.filter(data,{'ParentID':id});        if(children&&children.length==0){            return 0;        }        for(var i=0;i<children.length;i++){            sum+=me.getChildrenCount(children[i].ID,data);        }        return children.length+sum;    },    ifFeeRateEdit:function () {        var selected = projectObj.project.mainTree.selected;        return MainTreeCol.readOnly.forFeeRate(selected)?false:true;    },    createSpreadView:function () {        if (this.mainViews) {            this.mainViews.destroy();            this.mainViews = null;        }        if(subRateObject.views){            subRateObject.views.destroy();            subRateObject.views = null;        }        this.activateFeeRate = projectObj.project.FeeRate.getActivateFeeRate();        this.datas = this.activateFeeRate.rates;        var rateColSetting = _.find(this.columns,{"id":"rate"});        rateColSetting?rateColSetting.format=getFormatter(getDecimal("feeRate")):"";        this.mainViews = new GC.Spread.Views.DataView($('#divFee')[0],            this.dataSource, this.columns, new GC.Spread.Views.Plugins.GridLayout(this.options));        this.mainViews["rowClick"].addHandler(subRateObject.reFreshRateViews);        this.mainViews.invalidate();        document.querySelector('#divFee').focus();    },    initFeeRateSpread:function (rowCount) {        //初始化费用项表格        this.mainFeeRateSpread = sheetCommonObj.buildSheet($('#divFee')[0], this.mainFeeRateSetting,rowCount);        this.mainFeeRateSpread.options.scrollbarMaxAlign = true;        this.mainFeeRateSheet = this.mainFeeRateSpread.getSheet(0);        sheetCommonObj.lockCells(this.mainFeeRateSheet , this.mainFeeRateSetting);        this.mainFeeRateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onMainFeeRateSheetValueChange);        this.mainFeeRateSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, this.onMainFeeRateSelectChanged);        this.mainFeeRateSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onMainFeeRateRangeChanged);        this.mainFeeRateSheet.bind(GC.Spread.Sheets.Events.EditStarting, function (e,args) {            let me =feeRateObject;            if(!me.mainFeeRateEditChecking(args.row,args.col)){                args.cancel = true;            }        });        this.mainFeeRateSheet.name('mainFeeRateSheet');        disableRightMenu("divFee",this.mainFeeRateSpread,this.rightClickCallback);    },    rightClickCallback:function (row) {        let me = feeRateObject;        me.onMainFeeRateSelect(row);    },    showMainFeeRateData:function () {        let me = this;        let selected = me.mainFeeRateSheet.getSelections()[0];        me.activateFeeRate = projectObj.project.FeeRate.getActivateFeeRate();        me.mainFeeRateData = projectObj.project.FeeRate.getActivateFeeRate().rates;        me.mainFeeRateSheet.setRowCount(0);        me.mainFeeRateSheet.setRowCount(me.mainFeeRateData.length);        me.showSelectTree(me.mainFeeRateSheet,me.mainFeeRateSetting,me.mainFeeRateData);        me.mainFeeRateSheet.setSelection(selected.row,selected.col,selected.rowCount,selected.colCount);    },    reFreshRateViews:function() {        //feeRateObject.createSpreadView();        feeRateObject.loadPageContent();        this.showMainFeeRateData();        if(subRateObject.subRateSpread){//如果子费率没有初始化过的话,不需要显示。            subRateObject.initSubRateSpread(this.mainFeeRateData[0]);        }    },    mainFeeRateEditChecking:function (row,col) {//false 不能编辑,true 可以编辑        let me =feeRateObject;        let recode = me.mainFeeRateData[row];        let dataCode = me.mainFeeRateSetting.header[col].dataCode;        if(dataCode=="rate"&&me.getChildrenCount(recode.ID,me.mainFeeRateData)>0){//有子节点时不能编辑费率列            return false;        }        return true;    },    onMainFeeRateSheetValueChange:function (e,info) {  /*      let me = feeRateObject,updateData = {},feeRate = projectObj.project.FeeRate;        let recode = me.mainFeeRateData[info.row];        let fieldID = me.mainFeeRateSetting.header[info.col].dataCode;        let value = info.newValue;        if(fieldID == 'rate'&&value != null){            let checkResult = scMathUtil.isNumOrFormula(value);            if(checkResult!=null){                value = scMathUtil.roundForObj(checkResult,getDecimal("feeRate"));            }else {                alert('当前输入的数据类型不正确,请重新输入。');                me.mainFeeRateSheet.setValue(info.row, info.col, info.oldValue);                return;            }        }        if(recode[fieldID] == value){//没有改变            return;        }        updateData[fieldID] = value;        $.bootstrapLoading.start();         feeRate.updateFeeRateByID(recode.ID,updateData,function () {             me.mainFeeRateSheet.setValue(info.row, info.col, value);             if(fieldID == 'rate'){                feeRate.onFeeRateChange(recode.ID,value);            }            $.bootstrapLoading.end();        })*/        feeRateObject.updateFeerateWhenCellsChange([info]);    },    onMainFeeRateRangeChanged:function (e,info) {        let me = feeRateObject;        let changeCells = [];        for(let c of info.changedCells){            let tem = {                row:c.row,                col:c.col,                newValue:info.sheet.getCell(c.row,c.col).value()            };            changeCells.push(tem);        }        me.updateFeerateWhenCellsChange(changeCells);    },    updateFeerateWhenCellsChange:function (cells) {// col,row,newValue        let me = feeRateObject,updateDatas = [],feeRate = projectObj.project.FeeRate;//[{rateID:rateID,doc:doc}]        let refreshA = [];//记录刷新条数的数组        for(let c of cells){            let temData = {};            let recode  = me.mainFeeRateData[c.row];            let fieldID = me.mainFeeRateSetting.header[c.col].dataCode;            let value = c.newValue;            let oldValue = recode[fieldID];            if(!me.mainFeeRateEditChecking(c.row, c.col)){                me.mainFeeRateSheet.setValue(c.row, c.col, oldValue);                continue;            }else if(fieldID == 'rate'&&value != null){                let checkResult = scMathUtil.isNumOrFormula(value);                if(checkResult!=null && !isNaN(checkResult)){                    value = scMathUtil.roundForObj(checkResult,getDecimal("feeRate"));                }else {                    setTimeout(function () {                        alert('当前输入的数据类型不正确,请重新输入。');                    },100);                    me.mainFeeRateSheet.setValue(c.row, c.col, oldValue);                    continue;                }            }            if(recode[fieldID] == value){//没有改变                continue;            }            temData[fieldID] = value ;            updateDatas.push({rateID:recode.ID,doc:temData});            refreshA.push({col:c.col,row:c.row,fieldID:fieldID,value:value,rateID:recode.ID});        }        if(updateDatas.length > 0){            $.bootstrapLoading.start();            feeRate.updateFeeRatesByIDs(updateDatas,function () {                let feerateInfo = [];                for(let r of refreshA){                    me.mainFeeRateSheet.setValue(r.row, r.col, r.value);                    if(r.fieldID == 'rate'){                        feerateInfo.push({rateID:r.rateID,value:r.value});                    }                }                feerateInfo.length > 0 ?feeRate.onFeeRatesChange(feerateInfo):'';                $.bootstrapLoading.end();            })        }    },    onMainFeeRateSelectChanged:function (e, info) {        let me = feeRateObject;        let row = info.newSelections[0].row;        me.onMainFeeRateSelect(row);    },    onMainFeeRateSelect:function (row) {        let me = this;        if(row!=-1){            subRateObject.initSubRateSpread(me.mainFeeRateData[row]);        }    },    updateBySelect:function (rate,selectMap,mapID) {        let selected = this.mainFeeRateSheet.getSelections()[0];        projectObj.project.FeeRate.backupDatas();        let item = this.mainFeeRateData[selected.row];        item.rate = rate;        for(let key in selectMap){            let recode =  item.subFeeRate.recodes[key];            let optionList = recode.optionList;            for(let o of optionList){                if(o.value==selectMap[key]){                    o.selected=true;                }else {                    o.selected = false;                }            }        }        if($('#cascadeSet').prop('checked')){            this.cascadeSetRates(item,selected.row,mapID,selectMap);        }else {            projectObj.project.FeeRate.batchUpdateFeeRate([{rateIndex:selected.row,rate:item}],feeRateObject.activateFeeRate);        }    },    cascadeSetRates:function(selectedItem,sourceRow,mapID,selectMap){        let items=[];        items.push({rateIndex:sourceRow,rate:selectedItem});        _.forEach(this.mainFeeRateData,function (recode,Index) {            if(Index!=sourceRow&&recode.subFeeRate){                let valueMaps = recode.subFeeRate.valueMaps;                let valueMap = _.find(valueMaps,{ID:mapID});                if(valueMap){//选项完全一样的情况                    if(valueMap.value==recode.rate){                        return;                    }else {                        recode.rate = valueMap.value;                        _.forEach(selectMap,function (value,key) {                            let tempRecode =  recode.subFeeRate.recodes[key];                            let optionList = tempRecode.optionList;                            _.forEach(optionList,function (o) {                                if(o.value==value){                                    o.selected = true;                                }else {                                    o.selected = false;                                }                            })                        });                        items.push({rateIndex:Index,rate:recode});                    }                }else {//某条选项一样的情况                    let needUpdate = false;                    let selectList = mapID.split('-');                    let newList=[];                    _.forEach(recode.subFeeRate.recodes,function (r) {                        let oList = r.optionList;                        let oldSelectIndex=0;                        let hasChange=false;                        _.forEach(oList,function (o,key) {                            if(o.selected){                                oldSelectIndex = key;                            }                            if(_.includes(selectList,o.value)){                                needUpdate=true;                                o.selected=true;                                hasChange=true;                                newList.push(o.value);                            }else {                                o.selected=false;                            }                        });                        if(!hasChange){                            oList[oldSelectIndex].selected=true;                            newList.push(oList[oldSelectIndex].value)                        }                    });                    if(needUpdate){                      let newValue =   _.find(valueMaps,{ID:newList.join("-")})//取出费率值并更新                        if(newValue){                          if(recode.rate != newValue.value){                              recode.rate = newValue.value                              items.push({rateIndex:Index,rate:recode});                          }                        }                    }                }            }        });        projectObj.project.FeeRate.batchUpdateFeeRate(items,feeRateObject.activateFeeRate);    },    loadPageContent:function(){        var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();        var usageProjects = feeRateFile.usageProjects;        $('#feeRateFileName').text(feeRateFile.name);        $('#feeRateLibName').text(feeRateFile.libName);        $('#projectCount').text(usageProjects.length);    },    loadFeeRateSelection:function() {        if(!this.selectionLoad){            var selectedID=0;            _.forEach(projectObj.project.FeeRate.datas,function (data) {                var option =  $("<option>").val(data.ID).text(data.libName);                $('#inlineFormCustomSelect').append(option);                if(data.status=='activate'){                    selectedID=data.ID;                }            })            $('#inlineFormCustomSelect').val(selectedID);        }    },    getFeeRateStandards:function (callback) {        CommonAjax.post('/feeRates/getFeeRateStandards', {"projectID": projectObj.project.ID()}, function (data) {            if (data) {                callback(data);            }        });    },    changeFeeRateStandard:function(newVal){        $.bootstrapLoading.start();        var callback=function () {            feeRateObject.reFreshRateViews();            projectObj.project.FeeRate.onFeeRateFileChange();            $.bootstrapLoading.end();        };        projectObj.project.FeeRate.changeFeeRateStandard(newVal,callback);    },    checkFeeRateName:function (newVal) {        if(!newVal||newVal==""){            $('#saveAsConfirm').attr("disabled","disabled");            $('#nameError').text("请输入文件名称。").show();            return;        }        var callback=function (data) {            if(data){                $('#saveAsConfirm').attr("disabled","disabled");                $('#nameError').text("已存在同名费率文件。").show();                $('#valid_name').val('');            }else {                $('#valid_name').val(newVal);                $('#saveAsConfirm').removeAttr("disabled");                $('#nameError').hide();            }        };        projectObj.project.FeeRate.checkFeeRateName(newVal,callback);    },    feeRateFileSaveAs:function (newName) {        if(!newName||newName==""){            $('#saveAsConfirm').attr("disabled","disabled");            $('#nameError').text("请输入文件名称。").show();            return;        }        var valideName = $('#valid_name').val();        if(valideName==''||valideName!==newName){            var callback=function (data) {                if(data){                    $('#saveAsConfirm').attr("disabled","disabled");                    $('#nameError').text("已存在同名费率文件。").show();                    $('#valid_name').val('');                }else {                    feeRateObject.submitSaveAs(newName);                }            }            projectObj.project.FeeRate.checkFeeRateName(newName,callback);        }else {            feeRateObject.submitSaveAs(newName);        }    },    submitSaveAs:function (newName) {        var me = this;          projectObj.project.FeeRate.feeRateFileSaveAs(newName,function (result) {              me.activateFeeRate = result;              me.loadPageContent();              $('#copy-lv').modal('hide');              socket.emit('feeRateChangeNotify', projectObj.project.FeeRate.getActivateFeeRateFileID());              $.bootstrapLoading.end();        });    },    getChangeInfo:function () {        var me = this;        var callback=function (data) {            me.changeInfo=data;            me.loadChangePageContent(data);            console.log(data);        };        projectObj.project.FeeRate.getChangeInfo(callback);    },    loadChangePageContent:function (data) {        $('#currentProject').text(data.currentProject.name);        $('#currentOptions').empty();        _.forEach(data.currentProject.currentOptions,function (s) {            var option =  $("<option>").val(s.ID).text(s.name);            $('#currentOptions').append(option);        })        $('#currentOptions').val(projectObj.project.FeeRate.getActivateFeeRateFileID());        $('#otherProject').empty();        _.forEach(data.others,function (p) {            var option =  $("<option>").val(p.ID).text(p.name);            $('#otherProject').append(option);        });        $('#otherFeeRateOption').empty();        if(data.others.length>0){            _.forEach(data.others[0].optionList,function (f) {                var option =  $("<option>").val(f.ID).text(f.name);                $('#otherFeeRateOption').append(option);            });        }    },    changeFeeRateFileFromCurrent:function(){        $.bootstrapLoading.start();        var newVal = $("#currentOptions").val();        if($("#currentOptions").val()==this.activateFeeRate.ID){            return;        }        var name =$("#currentOptions").find("option:selected").text();        var newFeeRateFile = {            id:newVal,            name:name        }        var callback=function () {            //feeRateObject.createSpreadView();            feeRateObject.reFreshRateViews();            projectObj.project.FeeRate.onFeeRateFileChange();            $.bootstrapLoading.end();        }        projectObj.project.FeeRate.changeFeeRateFileFromCurrent(newFeeRateFile,callback);    },    changeFeeRateFileFromOthers:function () {        var feeRateFileID = $("#otherFeeRateOption").val();        var name =$("#otherFeeRateOption").find("option:selected").text();        if(null===feeRateFileID){            alert("请选择一个费率文件!");            return;        }        var currentOption = _.find(this.changeInfo.currentProject.currentOptions,{name:name})        if(currentOption){            $("#rename-lv").modal({show:true});            $("#newFeeRateID").val(feeRateFileID);            $("#newFeeRateName").val(name);        }else {            this.changeFeeRateFileConfirm(feeRateFileID,name);        }    },    changeFeeRateFileConfirm:function(feeRateFileID,name){        $.bootstrapLoading.start();        var callback=function () {            feeRateObject.reFreshRateViews();            projectObj.project.FeeRate.onFeeRateFileChange();            $.bootstrapLoading.end();        }        projectObj.project.FeeRate.changeFeeRateFileFromOthers(feeRateFileID,name,callback);    },    setFeeRateCellCol:function (sheet,col) {        sheet.getRange(-1, col, -1, 1).cellType(this.getFeeRateEditCellType());    },    onCellClick:function (sender,args) {       var data =projectObj.project.FeeRate.getActivateFeeRate().rates;       feeRateObject.feeRateSelection=data[args.row];    },    onCellDoubleClick:function (sender,args) {        var data =projectObj.project.FeeRate.getActivateFeeRate().rates;        feeRateObject.feeRateSelection=data[args.row];        feeRateObject.submitFeeRateBySelect();    },    checkSelectedFeeRate:function () {        var validate = false;        var data =projectObj.project.FeeRate.getActivateFeeRate().rates;        if(feeRateObject.feeRateSelection!=null){            var children=_.filter(data,{'ParentID':feeRateObject.feeRateSelection.ID});            validate=children&&children.length==0;        }        return validate;    },    submitFeeRateFromBill:function () {       var rate = feeRateObject.feeRateSelection;       var selected = projectObj.project.mainTree.selected;        $.bootstrapLoading.start();        projectObj.project.FeeRate.submitFeeRateFromBill(rate,selected.data,function (data) {            selected.data.feeRateID=rate.ID.toString();            selected.data.feeRate=scMathUtil.roundToString(rate.rate,getDecimal("feeRate"));            selected.changed = true;            projectObj.project.calcProgram.calcAndSave(selected);            //projectObj.mainController.refreshTreeNode([selected]);            $("#fee_rate_tree").modal('hide');            $.bootstrapLoading.end();        });    },    submitFeeRateFromCalc:function () {        var rate = feeRateObject.feeRateSelection;        var calInfo = calcProgramManage.getSelectionInfo();        calInfo.calcItem.feeRateID=rate.ID;        calInfo.calcItem.feeRate=null;        var data={'projectID': projectObj.project.ID(),'templatesID': calInfo.template.ID,'calcItem': calInfo.calcItem};        $.bootstrapLoading.start();        calcProgramManage.saveCalcItem(data,function (result) {            calInfo.calcItem.feeRate=rate.rate;            projectObj.project.calcProgram.compileAllTemps();            projectObj.project.calcProgram.calcAllNodesAndSave();            calcProgramManage.refreshDetailSheet();            $("#fee_rate_tree").modal('hide');            $.bootstrapLoading.end();        });        console.log(calInfo);    },    submitFeeRateBySelect:function () {        var validate = this.checkSelectedFeeRate();        if(validate){            if($('#edit_from').val()=='calc_detail'){                this.submitFeeRateFromCalc();            }else {                this.submitFeeRateFromBill();            }        }else {            //$("#fee_rate_tree").modal('hide');        }    }}function getPopoverContent() {    var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();    var usageProjects = feeRateFile.usageProjects;    var popover_content = "";    _.forEach(usageProjects,function (p,index) {        if(index>0){            popover_content+='<br>';        }        popover_content+=p.name;    })    return popover_content;}$(function(){    $('#pop-lv').popover({            placement:"bottom",            html:true,            trigger:"hover | focus",            content:getPopoverContent        }    );    $('#tab_fee_rate').on('shown.bs.tab', function (e) {        sessionStorage.setItem('mainTab', '#tab_fee_rate');        let me = feeRateObject;        $(e.relatedTarget.hash).removeClass('active');        if(me.mainFeeRateSpread == null){            me.initFeeRateSpread(0);        }        me.showMainFeeRateData();        me.loadPageContent();    });    $('#setNewFeeRate').bind('click', function () {        var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();        var usageProjects = feeRateFile.usageProjects;        var listString ='';        _.forEach(usageProjects,function (u) {            listString+="<li>"+u.name+"</li>"        })        $("#usageProjectList").html(listString);        $("#set-lv-feeRateName").text(feeRateFile.name);        $("#set-use-feeRateName").text(feeRateFile.name);        feeRateObject.getFeeRateStandards(function (data) {            $('#standardSelect').empty();            _.forEach(data,function (s) {                var option =  $("<option>").val(s.ID).text(s.libName);                $('#standardSelect').append(option);            })            $('#standardSelect').val(feeRateFile.libID);        });    });    $('#changeConfirm').bind('click', function (){        var newVal=$('#standardSelect').val();        var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();        if(newVal&&newVal!=feeRateFile.libID){            feeRateObject.changeFeeRateStandard(newVal);        }    });    $('#saveAs').bind('click', function (){        var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();        $('#copyFeeRateName').val(feeRateFile.name+'副本');        $('#valid_name').val(feeRateFile.name+'副本');        $('#nameError').hide();    });    $('#saveAsConfirm').bind('click',function () {        feeRateObject.feeRateFileSaveAs($('#copyFeeRateName').val());    })    $('#copyFeeRateName').change(function () {        feeRateObject.checkFeeRateName(this.value);    });    $('#newFeeRateName').change(function () {        var newName = $(this).val();        if(!newName||newName==""){            $('#renameConfirm').attr("disabled","disabled");            $('#renameError').text("请输入文件名称。").show();            return;        }        var callback=function (data) {            if(data){                $('#renameConfirm').attr("disabled","disabled");                $('#renameError').text("本建设项目中已存在同名费率文件。").show();            }else {                $('#renameConfirm').removeAttr("disabled");                $('#renameError').hide();            }        };        projectObj.project.FeeRate.checkFeeRateName(newName,callback);    });    $('#changeFeeRateConfirm').bind('click',function (){        var radioV= $("input[name='chaneg-lv-Radio']:checked").val();        if(radioV==='0'){            feeRateObject.changeFeeRateFileFromCurrent();        }else {            feeRateObject.changeFeeRateFileFromOthers();        }    })    $('#changFeeRateFile').bind('click',function (){        $("input[name='chaneg-lv-Radio']")[0].checked=true;        $("#fromProject").show();        $("#fromOther").hide();        feeRateObject.getChangeInfo();    })    $('#otherProject').change(function(){        var newVal = $(this).val();        var projects = feeRateObject.changeInfo.others;        var selected = _.find(projects,{ID:parseInt(newVal)});        $('#otherFeeRateOption').empty();        _.forEach(selected.optionList,function (f) {            var option =  $("<option>").val(f.ID).text(f.name);            $('#otherFeeRateOption').append(option);        });    })    $('#renameConfirm').bind('click',function (){        var feeRateFileID= $("#newFeeRateID").val();        var name = $("#newFeeRateName").val();        feeRateObject.changeFeeRateFileConfirm(feeRateFileID,name);    })    $('#inlineFormCustomSelect').change(function(){        var updateTask = [];        var selectID = $(this).val();        var oldValue=0;        _.forEach(projectObj.project.FeeRate.datas,function (feeRate) {            if(feeRate.status=='activate'){                oldValue=feeRate.ID;            }            if(feeRate.ID ==selectID){                feeRate.status='activate';            }else {                feeRate.status='disable';            }            updateTask.push({query:{ID:feeRate.feeRateID},doc:{status:feeRate.status}});        })        projectObj.project.FeeRate.updateStatusBySelected(updateTask);        feeRateObject.createSpreadView();        subRateObject.destorySpreadView();        socket.emit('changeActivateFeeRate',{oldRoom:oldValue,newRoom:selectID});    })    $('#fee_rate_tree').on('shown.bs.modal', function (e) {        if(feeRateObject.feeRateSpreads==null){            feeRateObject.createSheet();        }        feeRateObject.feeRateSelection=null;        feeRateObject.showSelectTree(feeRateObject.feeRateSheet,feeRateObject.sheetSetting,projectObj.project.FeeRate.getActivateFeeRate().rates);    });    $('#fee_rate_tree').on('hidden.bs.modal', function (e) {        if(feeRateObject.feeRateSpreads){            feeRateObject.feeRateSpreads.destroy();            feeRateObject.feeRateSpreads=null;            $('#edit_from').val('');            $('#edit_row').val('');        }    });    $('#fee_selected_conf').bind('click',function (){        feeRateObject.submitFeeRateBySelect();    })})function changeFRadioClick() {    var radioV= $("input[name='chaneg-lv-Radio']:checked").val();    if(radioV==='0'){        $("#fromProject").show();        $("#fromOther").hide();    }else {        $("#fromProject").hide();        $("#fromOther").show();    }}
 |