/**
 * Created by Zhong on 2017/12/18.
 */
const locked = lockUtil.getLocked();
const moduleName = 'stdRation';
//上下拖动div节点的高度
const verticalResize = 10;
let pageOprObj = {
    rationLibName : null,
    rationLibId : null,
    gljLibId: null,
    initPage : function(libInfo) {
        this.rationLibId = libInfo.ID;
        this.gljLibId = libInfo.gljLib;
        this.rationLibName = libInfo.dispName;
        $('#rationname').html(`<a href="main">定额库</a><i class="fa fa-angle-right fa-fw"></i>${this.rationLibName}`);
        if (!this.gljLibId || this.gljLibId === -1) {
            alert('没有引用人材机库');
            setTimeout(() => window.location.href = '/rationRepository/main', 2000);
        }
        //job
        jobContentOprObj.radiosChange(jobContentOprObj.radios, jobContentOprObj.tableAll, jobContentOprObj.tablePartial);
        $('#addConBtn').click(jobContentOprObj.bindAddConBtn());
        $('#updateConBtn').click(jobContentOprObj.bindUpdateConBtn());
        jobContentOprObj.bindAllEvents($('#txtareaAll'));
        //fz
        annotationOprObj.radiosChange(annotationOprObj.radios, annotationOprObj.fzTableAll, annotationOprObj.fzTablePartial);
        $('#fzAddConBtn').click(annotationOprObj.bindAddConBtn());
        $('#fzUpdateConBtn').click(annotationOprObj.bindUpdateConBtn());
        annotationOprObj.bindAllEvents($('#fzTxtareaAll'));
    },
};

let sectionTreeObj = {
    cache: null,//ref to tree.items
    tree: null,
    controller: null,
    workBook: null,
    sheet: null,
    updateType: {new: 'new', update: 'update'},
    insertBtn: $('#tree_Insert'),
    removeBtn: $('#tree_remove'),
    upLevelBtn: $('#tree_upLevel'),
    downLevelBtn: $('#tree_downLevel'),
    downMoveBtn: $('#tree_downMove'),
    upMoveBtn: $('#tree_upMove'),
    setting: {
        sheet: {
            cols:[
                {
                    head: {
                        titleNames: ['ID'],
                        spanCols: [1],
                        spanRows: [2],
                        vAlign: [1, 1],
                        hAlign: [1, 1],
                        font: 'Arial'
                    },
                    data: {
                        field: 'ID',
                        vAlign: 1,
                        hAlign: 0,
                        font: 'Arial'
                    },
                    width: 40
                },
                {
                    head: {
                        titleNames: ['名称'],
                        spanCols: [1],
                        spanRows: [2],
                        vAlign: [1, 1],
                        hAlign: [1, 1],
                        font: 'Arial'
                    },
                    data: {
                        field: 'name',
                        vAlign: 1,
                        hAlign: 0,
                        font: 'Arial'
                    },
                    width: 370
                }
            ],
            headRows: 1,
            headRowHeight: [25],
            emptyRows: 0,
            treeCol: 1
        },
        tree: {
            id: 'ID',
            pid: 'ParentID',
            nid: 'NextSiblingID',
            rootId: -1
        },
        options: {
            tabStripVisible:  false,
            allowContextMenu: false,
            allowCopyPasteExcelStyle : false,
            allowExtendPasteRange: false,
            allowUserDragDrop : false,
            allowUserDragFill: false,
            scrollbarMaxAlign : true
        }
    },

    isDef: function (v) {
        return v !== undefined && v !== null;
    },
    isFunc: function (v) {
        return this.isDef(v) && typeof v === 'function';
    },
    //sheet things
    setOptions: function (workbook, opts) {
        for(let opt in opts){
            workbook.options[opt] = opts[opt];
        }
    },

    renderFunc: function (sheet, func) {
        sheet.suspendPaint();
        sheet.suspendEvent();
        if(this.isFunc(func)){
            func();
        }
        sheet.resumePaint();
        sheet.resumeEvent();
    },

    buildSheet: function () {
        if(!this.isDef(this.workBook)){
            this.workBook = new GC.Spread.Sheets.Workbook($('#sectionSpread')[0], {sheetCount: 1});
            sheetCommonObj.bindEscKey(this.workBook, [{sheet: this.workBook.getSheet(0), editStarting: this.onEditStarting, editEnded: this.onEditEnded}]);
            this.sheet = this.workBook.getActiveSheet();
            this.setOptions(this.workBook, this.setting.options);
            this.sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values;
            this.bindEvents(this.sheet);
        }
    },

    bindEvents: function (sheet) {
        let me = sectionTreeObj;
        const Events = GC.Spread.Sheets.Events;
        sheet.bind(Events.SelectionChanged, me.onSelectionChanged);
        sheet.bind(Events.EditStarting, me.onEditStarting);
        sheet.bind(Events.EditEnded, me.onEditEnded);
        sheet.bind(Events.ClipboardPasting, me.onClipboardPasting);
        sheet.bind(Events.ClipboardPasted, me.onClipboardPasted);
    },

    onSelectionChanged: function (sender, info) {
        let me = sectionTreeObj;
        let row = info.newSelections[0].row;
        let section = me.cache[row];
        me.initSelection(section);
    },

    onEditStarting: function (sender, args) {
        let me = sectionTreeObj;
        let dataCode = me.setting.sheet.cols[args.col]['data']['field'];
        if(dataCode === 'ID'){
            args.cancel = true;
        }
    },

    onEditEnded: function (sender, args) {
        let me = sectionTreeObj;
        let postData = [];
        let v = me.isDef(args.editingText) ? args.editingText.toString().trim() : '';
        let node = me.cache[args.row];
        if(me.isDef(node) && node.data.name !== v){
            let updateObj = me.getUpdateObj(me.updateType.update, node.getID(), null, null, v, null);
            postData.push(updateObj);
            //ajax
            //update
            me.sectionTreeAjax(postData, function (rstData) {
                node.data.name = v;
            }, function () {
                args.sheet.setValue(args.row, args.col, node.data.name ? node.data.name : '');
            });
        }
    },

    onClipboardPasting: function (sender, info) {
        let me = sectionTreeObj;
        if(info.cellRange.col === 0){
            info.cancel = true;
        }
    },

    onClipboardPasted: function (sender, info) {
        let me = sectionTreeObj;
        let items = sheetCommonObj.analyzePasteData({header: [{dataCode: 'ID'}, {dataCode: 'name'}]}, info);
        let postData = [];
        let frontData = [];
        for(let i = 0, len = items.length; i < len; i++){
            let row = info.cellRange.row + i;
            let node = me.cache[row];
            if(me.isDef(node) && me.isDef(items[i].name) && node.data.name !== items[i].name){
                let updateObj = me.getUpdateObj(me.updateType.update, node.getID(), null, null, items[i].name, null);
                postData.push(updateObj);
                frontData.push({row: row, name: items[i].name});
                node.data.name = items[i].name;
            }
        }
        if(postData.length > 0){
            //ajax
            me.sectionTreeAjax(postData, function (rstData) {
                for(let i = 0, len = frontData.length; i < len; i++){
                    let node = me.cache[frontData[i]['row']];
                    if(me.isDef(node)){
                        node.data.name = frontData[i]['name'];
                    }
                }
            }, function () {
                for(let i = 0, len = frontData.length; i < len; i++){
                    let node = me.cache[frontData[i]['row']];
                    me.sheet.setValue(frontData[i]['row'], 1, me.isDef(node) ? node.data.name : '');
                }
            });
        }
    },
    loadRateWidth: function () {
        if (this.workBook) {
            //ID列固定40宽度
            let spreadWidth = $('#sectionSpread').width() - 65; //65: 列头宽度和垂直滚动条宽度和
            let IDRate = 40 / spreadWidth,
                nameRate = 1 - IDRate;
            sheetCommonObj.setColumnWidthByRate($('#sectionSpread').width() - 65, this.workBook, [{rateWidth: IDRate}, {rateWidth: nameRate}]);
        }
    },
    initSectionTree: function (sectionTree) {
        //init
        this.buildSheet();
        this.initTree(sectionTree);
        this.cache = this.tree.items;
        this.bindBtn();
        this.initController(this.tree, this.sheet, this.setting.sheet);
        this.controller.showTreeData();
        this.sheet.setFormatter(-1, 0, '@');
        this.initSelection(this.tree.selected);
        explanatoryOprObj.bindEvents(explanatoryOprObj.exEditor, explanatoryOprObj.calcEditor);
        this.loadRateWidth();
        this.autoLocate();
    },
    //自动定位
    autoLocate: function () {
        const hash = window.location.hash;
        if (hash) {
            const rationCode = hash.replace('#', '');
            this.locateToSection(rationCode);
        }
    },
    initTree: function (datas) {
        this.tree = idTree.createNew(this.setting.tree);
        this.tree.loadDatas(datas);
        this.tree.selected = this.tree.items.length > 0 ? this.tree.items[0] : null;
    },

    initController: function (tree, sheet, setting) {
        this.controller = TREE_SHEET_CONTROLLER.createNew(tree, sheet, setting);
    },
    
    refreshBtn: function (selected) {
        if (locked) {
            return;
        }
        let me = this;
        me.insertBtn.removeClass('disabled');
        me.removeBtn.removeClass('disabled');
        me.upLevelBtn.removeClass('disabled');
        me.downLevelBtn.removeClass('disabled');
        me.downMoveBtn.removeClass('disabled');
        me.upMoveBtn.removeClass('disabled');
        if(!me.isDef(selected)){
            me.removeBtn.addClass('disabled');
            me.upLevelBtn.addClass('disabled');
            me.downLevelBtn.addClass('disabled');
            me.downMoveBtn.addClass('disabled');
            me.upMoveBtn.addClass('disabled');
        }
        else {
            if(!me.isDef(selected.preSibling)){
                me.downLevelBtn.addClass('disabled');
                me.upMoveBtn.addClass('disabled');
            }
            if(!me.isDef(selected.nextSibling)){
                me.downMoveBtn.addClass('disabled');
            }
            if(!me.isDef(selected.parent)){
                me.upLevelBtn.addClass('disabled');
            }
        }
    },
    
    bindBtn: function () {
        let me = this;
        me.insertBtn.click(function () {
            me.insert();
        });
        $('#delConfirm').click(function () {
            if(me.canRemoveSection){
                me.remove(me.tree.selected);
            }
            else {
                $('#delAlert').modal('hide');
            }
        });
        me.removeBtn.click(function () {
            //不可删除有子节点或有定额数据的节点
            let section = me.cache[me.workBook.getActiveSheet().getActiveRowIndex()];
            if(!section){
                return;
            }
            let sectionName = me.isDef(section.data.name) ? section.data.name : '';
            let sectionRations = rationOprObj.currentRations[`_SEC_ID_${section.data.ID}`];
            if(section.children.length > 0 || (sectionRations && sectionRations.length > 0)){
                me.canRemoveSection = false;
                $('#delAlert').find('.modal-body h5').text('当前节点下有数据，不可删除。');
            }
            else {
                me.canRemoveSection = true;
                $('#delAlert').find('.modal-body h5').text(`确认要删除章节 “${sectionName}”吗？`);
            }
            $('#delAlert').modal('show');
        });
        me.upLevelBtn.click(function () {
            me.upLevel(me.tree.selected);
        });
        me.downLevelBtn.click(function () {
            me.downLevel(me.tree.selected);
        });
        me.downMoveBtn.click(function () {
            me.downMove(me.tree.selected);
        });
        me.upMoveBtn.click(function () {
            me.upMove(me.tree.selected);
        });
    },

    insert: function () {
        let me = sectionTreeObj;
        me.insertBtn.addClass('disabled');
        let postData = [];
        CommonAjax.post('api/getNewRationTreeID', {}, function (newID) {
            if(!me.isDef(newID)){
                return;
            }
            me.tree.maxNodeID(newID - 1);
            let selected = me.tree.selected;
            let insertObj = me.getUpdateObj(me.updateType.new, newID, -1, -1, '', null);
            if(me.isDef(selected)) {
                let updateObj = me.getUpdateObj(me.updateType.update, selected.getID(), newID, null, null, null);
                postData.push(updateObj);
                insertObj.updateData.ParentID = selected.getParentID();
                if(me.isDef(selected.nextSibling)){
                    insertObj.updateData.NextSiblingID = selected.getNextSiblingID();
                }
            }
            postData.push(insertObj);
            if(postData.length > 0){
                //ajax
                me.sectionTreeAjax(postData, function (rstData) {
                    me.controller.insert();
                    me.refreshBtn(me.tree.selected);
                    //fresh tools
                    me.initTools(me.tree.selected);
                    me.workBook.focus();
                    me.initSelection(me.tree.selected);
                });
            }
        });
    },
    remove: function (selected) {
        let me = this;
        me.removeBtn.addClass('disabled');
        let postData = [], IDs = [];
        if(!selected){
            return;
        }
        getDelIds(selected);
        function getDelIds(node){
            if(me.isDef(node)){
                IDs.push(node.getID());
                if(node.children.length > 0){
                    for(let i = 0, len = node.children.length; i < len; i++){
                        getDelIds(node.children[i]);
                    }
                }
            }
        }
        if(me.isDef(selected.preSibling)){
            let updateObj = me.getUpdateObj(me.updateType.update, selected.preSibling.getID(), selected.getNextSiblingID(), null, null, null);
            postData.push(updateObj);
        }
        if(IDs.length > 0){
            for(let i = 0, len = IDs.length; i < len; i++){
                let delObj = me.getUpdateObj(me.updateType.update, IDs[i], null, null, null, true);
                postData.push(delObj);
            }
        }
        if(postData.length > 0){
            //ajax
            me.sectionTreeAjax(postData, function (rstData) {
                $('#delAlert').modal('hide');
                me.removeRationsCodes(rationOprObj.currentRations["_SEC_ID_" + selected.data.ID]);
                me.controller.delete();
                me.refreshBtn(me.tree.selected);
                me.initTools(me.tree.selected);
                me.initSelection(me.tree.selected);
                me.workBook.focus();
            });
        }
    },
    removeRationsCodes: function (rations) {
        for(let ration of rations){
            rationOprObj.rationsCodes.splice(rationOprObj.rationsCodes.indexOf(ration.code), 1);
        }
    },
    getSameDepthNodes: function(){
        let rst = [];
        let sel = this.sheet.getSelections()[0];
        let selectedDepth = this.tree.selected.depth();
        for(let i = 0; i < sel.rowCount; i++){
            let row = sel.row + i;
            if(this.cache[row].depth() === selectedDepth){
                rst.push(this.cache[row]);
            }
        }
        return rst;
    },
    upLevel: function (selected) {
        let me = this;
        me.upLevelBtn.addClass('disabled');
        let postData = [];
        let selNodes = me.getSameDepthNodes();
        if(selNodes.length <= 0){
            return ;
        }
        let firstParent = selNodes[0].parent;
        if(!me.isDef(firstParent)){
            return;
        }
        //更新父节点
        postData.push(me.getUpdateObj(me.updateType.update, firstParent.getID(), selNodes[0].getID(), null, null, null));
        //更新前节点
        if(me.isDef(selNodes[0].preSibling)){
            postData.push(me.getUpdateObj(me.updateType.update, selNodes[0].preSibling.getID(), -1, null, null, null));
        }
        //更新选中节点的后兄弟节点
        let lastSelNode = selNodes[selNodes.length - 1];
        let nextIDs = [];
        getNext(lastSelNode);
        function getNext(node){
            if(me.isDef(node.nextSibling)){
                nextIDs.push(node.getNextSiblingID());
                getNext(node.nextSibling);
            }
        }
        for(let nextID of nextIDs){
            postData.push(me.getUpdateObj(me.updateType.update, nextID, null, lastSelNode.getID(), null, null));
        }
        //更新选中节点
        for(let i = 0; i < selNodes.length; i++){
            let selNode = selNodes[i];
            let nid = i === selNodes.length - 1 ? firstParent.getNextSiblingID() : selNode.getNextSiblingID();
            postData.push(me.getUpdateObj(me.updateType.update, selNode.getID(), nid, firstParent.getParentID(), null, null));
        }
        if(postData.length > 0){
            //ajax
            me.sectionTreeAjax(postData, function (rstData) {
                for(let selNode of selNodes){
                    me.controller.setTreeSelected(selNode);
                    me.controller.upLevel();
                }
                me.refreshBtn(me.tree.selected);
                me.workBook.focus();
            });
        }
    },
    downLevel: function (selected) {
        let me = this;
        me.downLevelBtn.addClass('disabled');
        let postData = [];
        let selNodes = me.getSameDepthNodes();
        if(selNodes.length <= 0 ){
            return;
        }
        let firstPreSibling = selNodes[0].preSibling;
        if(!me.isDef(firstPreSibling)){
            return;
        }
        //更新前节点
        postData.push(me.getUpdateObj(me.updateType.update, firstPreSibling.getID(), selNodes[selNodes.length - 1].getNextSiblingID(), null, null, null));
        //更新前节点最末子节点
        if(firstPreSibling.children.length > 0){
            postData.push(me.getUpdateObj(me.updateType.update, firstPreSibling.children[firstPreSibling.children.length - 1].getID(), selNodes[0].getID(), null, null, null));
        }
        //更新选中节点
        for(let i = 0; i < selNodes.length; i++){
            let selNode = selNodes[i];
            postData.push(me.getUpdateObj(me.updateType.update, selNode.getID(), i === selNodes.length - 1 ? -1 : selNode.getNextSiblingID(), firstPreSibling.getID(), null, null));
        }
        if(postData.length > 0){
            //ajax
            me.sectionTreeAjax(postData, function (rstData) {
                for(let selNode of selNodes){
                    me.controller.setTreeSelected(selNode);
                    me.controller.downLevel();
                }
                me.refreshBtn(me.tree.selected);
                me.workBook.focus();
            });
        }
    },
    upMove: function (selected) {
        let me = this;
        me.upMoveBtn.addClass('disabled');
        let postData = [];
        if(!me.isDef(selected)){
            return;
        }
        if(!me.isDef(selected.preSibling)){
            return;
        }
        let updateObj = me.getUpdateObj(me.updateType.update, selected.getID(), selected.preSibling.getID(), null, null, null);
        postData.push(updateObj);
        let updatePre = me.getUpdateObj(me.updateType.update, selected.preSibling.getID(), selected.getNextSiblingID(), null, null, null);
        postData.push(updatePre);
        if(me.isDef(selected.preSibling.preSibling)){
            let updatePrepre = me.getUpdateObj(me.updateType.update, selected.preSibling.preSibling.getID(), selected.getID(), null, null, null);
            postData.push(updatePrepre);
        }
        if(postData.length > 0){
            //ajax
            me.sectionTreeAjax(postData, function (rstData) {
                me.controller.upMove();
                me.refreshBtn(me.tree.selected);
                me.workBook.focus();
            });
        }
    },
    downMove: function (selected) {
        let me = this;
        me.downMoveBtn.addClass('disabled');
        let postData = [];
        if(!me.isDef(selected)){
            return;
        }
        if(!me.isDef(selected.nextSibling)){
            return;
        }
        if(me.isDef(selected.preSibling)){
            let updatePre = me.getUpdateObj(me.updateType.update, selected.preSibling.getID(), selected.getNextSiblingID(), null, null, null);
            postData.push(updatePre);
        }
        let updateObj = me.getUpdateObj(me.updateType.update, selected.getID(), selected.nextSibling.getNextSiblingID(), null, null, null);
        postData.push(updateObj);
        let updateNext = me.getUpdateObj(me.updateType.update, selected.getNextSiblingID(), selected.getID(), null, null, null);
        postData.push(updateNext);
        if(postData.length > 0){
            //ajax
            me.sectionTreeAjax(postData, function (rstData) {
                me.controller.downMove();
                me.refreshBtn(me.tree.selected);
                me.workBook.focus();
            });
        }
    },
    getUpdateObj: function (updateType, id, nid, pid, name, deleted) {
        let updateObj = Object.create(null);
        updateObj.updateType = '';
        updateObj.updateData = Object.create(null);
        updateObj.updateData.rationRepId = pageOprObj.rationLibId;
        if(this.isDef(updateType)){
            updateObj.updateType = updateType;
        }
        if(this.isDef(id)){
            updateObj.updateData.ID = id;
        }
        if(this.isDef(nid)){
            updateObj.updateData.NextSiblingID = nid;
        }
        if(this.isDef(pid)){
            updateObj.updateData.ParentID = pid;
        }
        if(this.isDef(name)){
            updateObj.updateData.name = name;
        }
        if(this.isDef(deleted)){
            updateObj.updateData.isDeleted = true;
        }
        return updateObj;
    },
    sectionTreeAjax: function (postData, scFunc, errFunc) {
        CommonAjax.post('api/updateNodes', {updateData: postData, lastOpr: userAccount}, scFunc, errFunc);
    },
    initTools: function (node) {
        if(this.isDef(node)){
            explanatoryOprObj.setAttribute(explanatoryOprObj.currentTreeNode ? explanatoryOprObj.currentTreeNode : node, node, node.data.explanation, node.data.ruleText);
            explanatoryOprObj.showText(explanatoryOprObj.exEditor, explanatoryOprObj.calcEditor, node.data.explanation, node.data.ruleText);
            //job
            jobContentOprObj.currentSituation = typeof node.data.jobContentSituation !== 'undefined'? node.data.jobContentSituation : jobContentOprObj.situations.ALL;
            jobContentOprObj.setAttribute(jobContentOprObj.currentTreeNode ? jobContentOprObj.currentTreeNode : node, node);
            jobContentOprObj.clickUpdate($('#txtareaAll'));
            //fz
            annotationOprObj.currentSituation = typeof node.data.annotationSituation !== 'undefined'? node.data.annotationSituation : annotationOprObj.situations.ALL;
            annotationOprObj.clickUpdate($('#fzTxtareaAll'));
        }
    },
    //模仿默认点击
    initSelection: function (node, doAfterGetRation = null) {
        if (node && node.tree){
            node.tree.selected = node ? node : null;
        }
        let me = this;
        if(!me.isDef(node)){
            sheetCommonObj.cleanSheet(rationOprObj.workBook.getActiveSheet(), rationOprObj.setting, -1);
            sheetCommonObj.cleanSheet(rationGLJOprObj.sheet, rationGLJOprObj.setting, -1);
            sheetCommonObj.cleanSheet(rationAssistOprObj.sheet, rationAssistOprObj.setting, -1);
            sheetCommonObj.cleanSheet(rationCoeOprObj.sheet, rationCoeOprObj.setting, -1);
            sheetCommonObj.cleanSheet(rationInstObj.sheet, rationInstObj.setting, -1);
            return;
        }
        //me.workBook.getActiveSheet().setActiveCell(node.serialNo(), me.workBook.getActiveSheet().getActiveColumnIndex());
        me.initTools(node);
        me.refreshBtn(node);
        if(!me.isDef(node.children) || node.children.length === 0){
            //需要根据章节树下是否含有定额数据判断是否可以删除，在异步获取定额数据前将删除按钮无效化
            me.removeBtn.addClass('disabled');
            rationOprObj.canRations = true;
            rationOprObj.workBook.getSheet(0).clearSelection();
            //获取定额后的回调操作:1.正常变更章节树节点，则默认获取定额后定位至首行定额 2.搜索定额后，获取定额后定位至匹配到的定额
            if (doAfterGetRation && typeof doAfterGetRation === 'function') {
                rationOprObj.doAfterGetRation = doAfterGetRation;
            } else {
                rationOprObj.doAfterGetRation = function (rations) {
                    rationOprObj.workBook.getActiveSheet().setActiveCell(0, 0);
                    rationOprObj.rationSelInit(0, true);
                    rationOprObj.workBook.getActiveSheet().showRow(0, GC.Spread.Sheets.VerticalPosition.top);
                };
            }
            rationOprObj.getRationItems(node.data.ID, rationOprObj.doAfterGetRation);
            rationOprObj.setCombo(rationOprObj.workBook.getSheet(0), 'dynamic');
        }
        else {
            rationOprObj.canRations = false;
            rationOprObj.currentSectionId = node.data.ID;
            rationOprObj.workBook.getSheet(0).setRowCount(30);
            rationOprObj.setCombo(rationOprObj.workBook.getSheet(0), null);
            jobContentOprObj.setRadiosDisabled(true, jobContentOprObj.radios);
            jobContentOprObj.hideTable($('#tableAll'), $('#tablePartial'));
            annotationOprObj.setRadiosDisabled(true, annotationOprObj.radios);
            annotationOprObj.hideTable($('#fzTableAll'), $('#fzTablePartial'));
            sheetCommonObj.cleanSheet(rationOprObj.workBook.getSheet(0), rationOprObj.setting, -1);
            rationGLJOprObj.sheet.getParent().focus(false);
            sheetCommonObj.cleanSheet(rationGLJOprObj.sheet, rationGLJOprObj.setting, -1);
            sheetCommonObj.cleanSheet(rationAssistOprObj.sheet, rationAssistOprObj.setting, -1);
            sheetCommonObj.cleanSheet(rationCoeOprObj.sheet, rationCoeOprObj.setting, -1);
            sheetCommonObj.cleanSheet(rationInstObj.sheet, rationInstObj.setting, -1);
        }
        me.workBook.focus(true);
    },
    //根据定额定位至章节树
    locateToSection: function (rationCode) {
        const me = this;
        const $seach = $('#rationSearch');
        $seach.val(rationCode);
        //去后台搜索该定额
        CommonAjax.post('/rationRepository/api/getRationItem', {rationLibId: pageOprObj.rationLibId, code: rationCode}, function (rstData) {
            if (!rstData) {
                alert(`不存在定额${rationCode}`);
                return;
            }
            //定位至相关章节
            const sectionId = rstData.sectionId;
            if (!sectionId) {
                return;
            }
            const sectionNode = me.tree.nodes[`id_${sectionId}`];
            if (!sectionNode) {
                return;
            }
            const sectionRow = sectionNode.serialNo();
            me.sheet.setActiveCell(sectionRow, 1);
            me.sheet.showRow(sectionRow, GC.Spread.Sheets.VerticalPosition.top);
            const doAfterGetRation = function (rations) {
                const findRation = _.find(rations, {code: rationCode});
                const rIdx = rations.indexOf(findRation);
                const rationSheet = rationOprObj.workBook.getActiveSheet();
                rationSheet.setActiveCell(rIdx, 0);
                rationOprObj.rationSelInit(rIdx, true);
                rationOprObj.workBook.getActiveSheet().showRow(rIdx, GC.Spread.Sheets.VerticalPosition.top);
            };
            me.initSelection(sectionNode, doAfterGetRation);
        }, function () {
        });
    }
};
$(document).ready(function () {
    $('#rationSearch').keydown(function (event) {
        if(event.keyCode === 13){
            $(this).blur();
            let rationCode = $(this).val().toUpperCase();
            if (rationCode) {
                sectionTreeObj.locateToSection(rationCode);
            }
        }
    });
});