| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545 | /** * Standard Bills Lib * Created by Mai on 2017/5/16. */var billsLibObj = {    doAfterLoadBills: null, //外部设置拉取清单数据后的回调    stdBillsTree: null,    stdBillsSpread: null,    stdBillsJobSpread: null,    stdBillsFeatureSpread: null,    refreshSettingForHint: function () {        TREE_SHEET_HELPER.initSetting($('#stdBillsSpread')[0], billsLibObj.stdBillsTreeSetting);    },    checkBillsSpread: function () {        if (!this.stdBillsSpread) {            this.stdBillsSpread = SheetDataHelper.createNewSpread($('#stdBillsSpread')[0]);            sheetCommonObj.spreadDefaultStyle(this.stdBillsSpread);            this.stdBillsSpread.getSheet(0).name('stdBillsLib_bills');            // 刷新setting中记录的spread的位置            this.refreshSettingForHint();        }    },    refreshBillsSpread: function () {        if (this.stdBillsSpread) {            this.stdBillsSpread.refresh();        }    },    checkBillsRelaSpread: function () {        if (!this.stdBillsJobSpread) {            this.stdBillsJobSpread = SheetDataHelper.createNewSpread($('#stdBillsJobs')[0]);            sheetCommonObj.spreadDefaultStyle(this.stdBillsJobSpread);        }        if (!this.stdBillsFeatureSpread) {            this.stdBillsFeatureSpread = SheetDataHelper.createNewSpread($('#stdBillsFeatures')[0]);            sheetCommonObj.spreadDefaultStyle(this.stdBillsFeatureSpread);        }    },    refreshBillsRelaSpread: function () {        if (this.stdBillsJobSpread) {            this.stdBillsJobSpread.refresh();        }        if (this.stdBillsFeatureSpread) {            this.stdBillsFeatureSpread.refresh();        }    },    clearHighLight: function (spread) {        if (spread) {            let sheet = spread.getActiveSheet();            sheet.suspendPaint();            let orgColor = optionsOprObj.getOption('COLOROPTS', 'DEFAULT').backColor;            sheet.getRange(0, -1, sheet.getRowCount(), -1, GC.Spread.Sheets.SheetArea.viewport).backColor(orgColor);            sheet.resumePaint();        }    },    setTagForHint: function (nodes) {        let sheet = this.stdBillsSpread.getActiveSheet();        sheet.suspendPaint();        sheet.suspendEvent();        for(let node of nodes){            sheet.setTag(node.serialNo(), 2, node.data.ruleText ? node.data.ruleText : '');        }        sheet.resumePaint();        sheet.resumeEvent();    },    loadStdBillsLib: function () {        let i, select = $('#stdBillsLibSelect');        select.empty();        let bills_lib = projectObj.project.projectInfo.engineeringInfo.bill_lib;        let selectedBillsLib = sessionStorage.getItem('stdBillsLib');        bills_lib.forEach(function (data) {            var option = $('<option>').val(data.id).text(data.name);            if(selectedBillsLib && data.id == selectedBillsLib){                option.attr('selected', 'selected');            }            select.append(option);        });        if (select.children.length !== 0) {            billsLibObj.loadStdBills(select.val());        }    },     sortJobsAndFeatures: function (arr) {        arr.sort(function (a, b) {            let rst = 0;            if(a.serialNo > b.serialNo) rst = 1;            else if(a.serialNo < b.serialNo) rst = -1;            return rst;        });    },     findData: function (value, field, Array) {        var i = 0;        for (i = 0; i < Array.length; i++) {            if (value[field] == Array[i][field]) {                return Array[i];            }        }        return null;    },    getBillsJobs: function (stdBillsJobData, node) {        var jobs = [], i, jobData = null;        if (stdBillsJobData && node && node.data.jobs) {            for (i = 0; i < node.data.jobs.length; i++) {                jobData = this.findData(node.data.jobs[i], 'id', stdBillsJobData);                if (jobData) {                    jobData.serialNo = node.data.jobs[i].serialNo;                    jobs.push(jobData);                }            }        }        this.sortJobsAndFeatures(jobs);        return jobs;    },    getBillsFeatures: function (stdBillsFeatureData, node) {        var features = [], i, featureData = null;        if (stdBillsFeatureData && node && node.data.items) {            for (i = 0; i < node.data.items.length; i++) {                featureData = this.findData(node.data.items[i], 'id', stdBillsFeatureData);                if (featureData) {                    featureData.serialNo = node.data.items[i].serialNo;                    features.push(featureData);                }            }        }        this.sortJobsAndFeatures(features);        return features;    },    insertBills: function (stdBillsJobData, stdBillsFeatureData, node) {        if(projectObj.project.projectInfo.property.lockBills == true && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){            return false;        }        $.bootstrapLoading.start();        //设置清单备注        if(node.parent && node.parent.data.recharge){            node.data.comments = node.parent.data.recharge;        }        //特征及内容转化        pageCCOprObj.setItemContentNode(node, this.getBillsJobs(stdBillsJobData, node), this.getBillsFeatures(stdBillsFeatureData, node), node.data.name);        if (/\//.test(node.data.unit)) {            let existB = projectObj.project.Bills.sameStdCodeBillsData(node.data.code);            if (existB) {                let std = JSON.parse(JSON.stringify(node.data));                std.unit = existB.unit;                let canAdd = ProjectController.addBills(projectObj.project, projectObj.mainController, std);                if(canAdd === false && $.bootstrapLoading.isLoading()){                    $.bootstrapLoading.end();                }            } else {                ConfirmModal.stdBillsUnit.check(node.data, function (std) {                    let canAdd = ProjectController.addBills(projectObj.project, projectObj.mainController, std);                    if(canAdd === false && $.bootstrapLoading.isLoading()){                        $.bootstrapLoading.end();                    }                }, function () {                    if($.bootstrapLoading.isLoading()){                        $.bootstrapLoading.end();                    }                });            }        } else {            let canAdd = ProjectController.addBills(projectObj.project, projectObj.mainController, node.data);            if(canAdd === false && $.bootstrapLoading.isLoading()){                $.bootstrapLoading.end();            }        }        return true;    },    showBillsRela: function (node) {        if (node && node.children.length === 0) {            billsLibObj.showJobsAndFeatures(node);        } else {            billsLibObj.showBillsRemark(node);        }    },    showJobs:function (jobs) {        SheetDataHelper.loadSheetHeader(billsLibObj.jobsSetting, billsLibObj.stdBillsJobSpread.getActiveSheet());        SheetDataHelper.loadSheetData(billsLibObj.jobsSetting, billsLibObj.stdBillsJobSpread.getActiveSheet(), jobs);    },    showFeatures: function (features) {        SheetDataHelper.loadSheetHeader(billsLibObj.featuresSetting, billsLibObj.stdBillsFeatureSpread.getActiveSheet());        SheetDataHelper.loadSheetData(billsLibObj.featuresSetting, billsLibObj.stdBillsFeatureSpread.getActiveSheet(), features);    },    showJobsAndFeatures: function (node) {        $('#stdBillsJobTab').show();        $('#stdBillsRemarkTab').hide();        billsLibObj.refreshBillsRelaSpread();        billsLibObj.checkBillsRelaSpread();        this.showJobs(billsLibObj.getBillsJobs(billsLibObj.stdBillsJobData, node));        this.showFeatures(billsLibObj.getBillsFeatures(billsLibObj.stdBillsFeatureData, node));    },    showBillsRemark: function (node) {        $('#stdBillsJobTab').hide();        $('#stdBillsRemarkTab').show();        $('#stdBillsRemark').text(node && node.data.recharge ? node.data.recharge : '');    },    loadStdBills: function (stdBillsLibID) {        var that = this;        var stdBills;        if(that.stdBillsTree){            that.stdBillsTree = null;        }        that.stdBillsTree  = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});        var stdBillsTreeController = TREE_SHEET_CONTROLLER.createNew(that.stdBillsTree, billsLibObj.stdBillsSpread.getActiveSheet(), billsLibObj.stdBillsTreeSetting);        $.bootstrapLoading.start();        CommonAjax.post('/stdBillsEditor/getJobContent', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {            that.stdBillsJobData = datas;        }, function () {            that.stdBillsJobData = [];        });        CommonAjax.post('/stdBillsEditor/getItemCharacter', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {            that.stdBillsFeatureData = datas;        }, function () {            that.stdBillsFeatureData = [];        });        CommonAjax.post('/stdBillsEditor/getBills', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {            stdBills = datas;            that.stdBillsTree.loadDatas(stdBills);            //读取展开收起状态            let currentExpState = sessionStorage.getItem('stdBillsLibExpState');            if(currentExpState){                that.stdBillsTree.setExpandedByState(that.stdBillsTree.items, currentExpState);            }            //非叶子节点默认收起            else{                that.stdBillsTree.setRootExpanded(that.stdBillsTree.roots, false);            }            stdBillsTreeController.showTreeData();            //billsLibObj.setTagForHint(that.stdBillsTree.items);            that.showBillsRela(that.stdBillsTree.firstNode());            stdBillsTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, that.showBillsRela);            that.stdBillsSpread.unbind(GC.Spread.Sheets.Events.CellDoubleClick);            that.stdBillsSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, function (sender, args) {                let selectNode = that.stdBillsTree.items[args.row];                let name = selectNode.data.name;                if (that.stdBillsTree.items[args.row].children.length === 0) {                    billsLibObj.insertBills(that.stdBillsJobData, that.stdBillsFeatureData, selectNode);                }                else{                    let me = billsLibObj;                    let node = that.stdBillsTree.items[args.row];                    if (!node || node.children.length === 0)                        return;                    node.setExpanded(!node.expanded);                    //设置展开收起状态                    sessionStorage.setItem('stdBillsLibExpState', that.stdBillsTree.getExpState(that.stdBillsTree.items));                    TREE_SHEET_HELPER.massOperationSheet(args.sheet, function () {                        let iCount = node.posterityCount(), i, child;                        for (i = 0; i < iCount; i++) {                            child = that.stdBillsTree.items[args.row + i + 1];                            args.sheet.setRowVisible(args.row + i + 1, child.visible, args.sheetArea);                        }                        args.sheet.invalidateLayout();                    });                    args.sheet.repaint();                }            });            if(that.doAfterLoadBills){                that.doAfterLoadBills();            }            $.bootstrapLoading.end();        }, function () {            that.stdBillsSpread.unbind(GC.Spread.Sheets.Events.CellDoubleClick);            $.bootstrapLoading.end();        });        $('#stdBillsSearch>div>button').click(function () {            billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);            var keyword = $('#stdBillsSearch>input').val();            if (!keyword || keyword === '') {                $('#stdBillsSearchResult').hide();                return;            }            var result = that.stdBillsTree.items.filter(function (item) {                var codeIs = item.data.code ? item.data.code.indexOf(keyword) !== -1 : false;                var nameIs = item.data.name ? item.data.name.indexOf(keyword) !== -1 : false;                return codeIs || nameIs;            });            result.sort(function (x, y) {                return x.serialNo() - y.serialNo();            });            if (result.length !== 0) {                //展开搜索出来的节点                billsLibObj.expandSearchNodes(result);                //设置记住展开                sessionStorage.setItem('stdBillsLibExpState', that.stdBillsTree.getExpState(that.stdBillsTree.items));                TREE_SHEET_HELPER.massOperationSheet(billsLibObj.stdBillsSpread.getActiveSheet(), function () {                    var sel = billsLibObj.stdBillsSpread.getActiveSheet().getSelections();                    stdBillsTreeController.setTreeSelected(result[0]);                    billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[0].serialNo(), sel[0].col, 1, 1);                    for (let node of result) {                        billsLibObj.stdBillsSpread.getActiveSheet().getRange(node.serialNo(), -1, 1, -1).backColor('lemonChiffon');                    }                });                billsLibObj.stdBillsSpread.getActiveSheet().showRow(result[0].serialNo(), GC.Spread.Sheets.VerticalPosition.bottom);                $('#nextStdBills').show();                $('#nextStdBills').unbind('click');                $('#nextStdBills').bind('click', function () {                    var cur = that.stdBillsTree.selected, resultIndex = result.indexOf(cur), sel = billsLibObj.stdBillsSpread.getActiveSheet().getSelections();                    if (resultIndex === result.length - 1) {                        stdBillsTreeController.setTreeSelected(result[0]);                        billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[0].serialNo(), sel[0].col, 1, 1);                        billsLibObj.stdBillsSpread.getActiveSheet().showRow(result[0].serialNo(), GC.Spread.Sheets.VerticalPosition.top);                    } else {                        stdBillsTreeController.setTreeSelected(result[resultIndex + 1]);                        billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[resultIndex + 1].serialNo(), sel[0].col, 1, 1);                        billsLibObj.stdBillsSpread.getActiveSheet().showRow(result[resultIndex + 1].serialNo(), GC.Spread.Sheets.VerticalPosition.bottom);                    }                });            } else {                billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);                $('#nextStdBills').hide();            }            $('#stdBillsSearchResultCount').text('搜索结果:' + result.length);            $('#stdBillsSearchResult').show();        });    },    expandSearchNodes: function(nodes){        let that = this;        TREE_SHEET_HELPER.massOperationSheet(billsLibObj.stdBillsSpread.getActiveSheet(), function () {            function expParentNode(node){                if(node.parent){                    expParentNode(node.parent);                    if(!node.parent.expanded){                        node.parent.setExpanded(true);                    }                }            }            for(let node of nodes){                expParentNode(node);            }            TREE_SHEET_HELPER.refreshTreeNodeData(that.stdBillsTreeSetting, that.stdBillsSpread.getActiveSheet(), that.stdBillsTree.roots, true);            TREE_SHEET_HELPER.refreshNodesVisible(that.stdBillsTree.roots, that.stdBillsSpread.getActiveSheet(), true);        });    },    locateAtBills: function (code) {        let nineCode = code.substring(0, 9);        let items = this.stdBillsTree.items;        let locateBills = _.find(items, function(item){            return item.data.code === nineCode;        });        if(locateBills){            this.expandSearchNodes([locateBills]);            sessionStorage.setItem('stdBillsLibExpState', this.stdBillsTree.getExpState(this.stdBillsTree.items));        }        let stdBillsSheet = this.stdBillsSpread.getActiveSheet();        let locateRow = locateBills ? locateBills.serialNo() : 0;        stdBillsSheet.setActiveCell(locateRow, 0);        this.showBillsRela(locateBills);        stdBillsSheet.showRow(locateRow, GC.Spread.Sheets.VerticalPosition.center);    },    stdBillsTreeSetting: {        "emptyRowHeader": true,        "rowHeaderWidth": 15,        "treeCol": 0,        "emptyRows":0,        "headRows":1,        "headRowHeight":[            40        ],        "defaultRowHeight": 21,        "cols":[{            "width":140,            "readOnly": true,            "head":{                "titleNames":["项目编码"],                "spanCols":[1],                "spanRows":[1],                "vAlign":[1],                "hAlign":[1],                "font":["Arial"]            },            "data":{                "field":"code",                "vAlign":1,                "hAlign":0,                "font":"Arial"            }        }, {            "width":190,            "readOnly": true,            "head":{                "titleNames":["项目名称"],                "spanCols":[1],                "spanRows":[1],                "vAlign":[1],                "hAlign":[1],                "font":["Arial"]            },            "data":{                "field":"name",                "vAlign":1,                "hAlign":0,                "font":"Arial"            }        }, {            "width":45,            "readOnly": true,            "showHint": true,            "head":{                "titleNames":["计量单位"],                "spanCols":[1],                "spanRows":[1],                "vAlign":[1],                "hAlign":[1],                "font":["Arial"],                "wordWrap": true            },            "data":{                "field":"unit",                "vAlign":1,                "hAlign":1,                "font":"Arial"            }        }/*, {            "width":100,            "readOnly": true,            "showHint": true,            "head":{                "titleNames":["工程量计算规则"],                "spanCols":[1],                "spanRows":[1],                "vAlign":[1],                "hAlign":[1],                "font":["Arial"]            },            "data":{                "field":"ruleText",                "vAlign":1,                "hAlign":0,                "font":"Arial"            }        }*/]    },    jobsSetting: {        "emptyRows":0,        "headRows":1,        "rowHeaderWidth": 15,        "headRowHeight":[25],        "defaultRowHeight": 21,        "cols":[{            "width":160,            "readOnly":true,            "head":{                "titleNames":["工作内容"],                "spanCols":[1],                "spanRows":[1],                "vAlign":[1],                "hAlign":[1],                "font":["Arial"]            },            "data":{                "field":"content",                "vAlign":0,                "hAlign":3,                "font":"Arial"            }        }]    },    featuresSetting: {        "emptyRows":0,        "headRows":1,        "rowHeaderWidth": 15,        "headRowHeight":[25],        "defaultRowHeight": 21,        "cols":[{            "width":160,            "readOnly":true,            "head":{                "titleNames":["项目特征"],                "spanCols":[1],                "spanRows":[1],                "vAlign":[1],                "hAlign":[1],                "font":["Arial"]            },            "data":{                "field":"content",                "vAlign":0,                "hAlign":3,                "font":"Arial"            }        }]    }};function addEventOnResize(fn){    let originFn = window.onresize;    window.onresize =function () {        originFn && originFn();        fn();    }}addEventOnResize(billsLibObj.refreshSettingForHint);//赋初始高度if($('#stdBillsSpread').height() === 0 || $('#qd').find('.bottom-content').height() === 0){    $('#stdBillsSpread').height($(window).height()-$(".header").height()-$(".toolsbar").height()-$(".tools-bar-height-q").height()-312);    $('#qd').find('.bottom-content').find('.p-0').height(270);}$('#stdBillsTab').bind('click', function () {    if(!projectReadOnly){        refreshSubSpread();//subSpread、jobSpread、itemSpread显示问题        var select = $('#stdBillsLibSelect');        billsLibObj.refreshBillsSpread();        billsLibObj.refreshBillsRelaSpread();        billsLibObj.checkBillsSpread();        if (select[0].options.length === 0) {            billsLibObj.loadStdBillsLib();        };    }});$('#stdBillsLibSelect').change(function () {    $('#stdBillsSearchResult').hide();    //$(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() -  $(".tools-bar-height-q").height() - 202);    billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);    var select = $(this);    if (this.children.length !== 0) {        //设置sessionStorage        let billsLibId  = select.val();        sessionStorage.setItem('stdBillsLib', billsLibId);        //清除展开收起状态sessionStorage        sessionStorage.removeItem('stdBillsLibExpState');        billsLibObj.loadStdBills(billsLibId);    }});//搜索框回车$('#stdBillsSearch>input').bind('keypress', function (event) {    if(event.keyCode === 13){        $(this).blur();        $('#stdBillsSearch>div>button').click();    }});// 关闭搜索结果$('#closeSearchStdBills').click(function () {    $('#stdBillsSearchResult').hide();    $(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() -  $(".tools-bar-height-q").height() - 202);    billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);    billsLibObj.refreshBillsSpread();    billsLibObj.refreshBillsRelaSpread();});
 |