| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 | /** * Created by Zhong on 2017/12/20. *///附注let annotationOprObj = {    situations: {ALL: 'ALL', PARTIAL: 'PARTIAL', NONE: 'NONE'},    currentSituation: null,//本项适用情况    radios: $("input[name = 'fzRadios']"),    fzTableAll: $('#fzTableAll'),    fzTablePartial: $('#fzTablePartial'),    currentOprTr: null,    currentAnnotation: null,    addCon: $('#fzAddCon'),//勾选编码模态框    updateCon: $('#fzUpdateCon'),//编辑编码模态框    clickUpdate: function (txtarea) {//解决编辑完后在未失去焦点的时候直接定额章节树        let me = annotationOprObj;        if(txtarea.is(':focus')){            let annotation = txtarea.val();            if(annotation !== me.currentAnnotation){                jobContentOprObj.preTreeNode.data.annotation = annotation;                me.unbindEvents(txtarea);                txtarea.blur();                let updateCodes = [];                for(let i = 0, len = jobContentOprObj.currentRationItems.length; i < len; i++){                    updateCodes.push(jobContentOprObj.currentRationItems[i].code);                    jobContentOprObj.currentRationItems[i].annotation = annotation;                }                me.updateAnnotation(pageOprObj.rationLibId, me.getUpdateArr(updateCodes, annotation), function () {                    me.bindAllEvents(txtarea);                });            }            else {                txtarea.blur();            }        }    },    getGroup: function (rationItems) {        let rst = [];//rst = [{jobContent: String, items: Array}]        for(let i = 0, len = rationItems.length; i < len; i++){            if(typeof rationItems[i].annotation !== 'undefined' && rationItems[i].annotation.toString().trim().length > 0){                let isExist = false;                for(let j = 0, jLen = rst.length; j < jLen; j++){                    if(rst[j].annotation === rationItems[i].annotation){                        isExist = true;                        rst[j].items.push(rationItems[i].code);                        break;                    }                }                if(!isExist){                    rst.push({annotation: rationItems[i].annotation, items: [rationItems[i].code]});                }            }        }        return rst;    },    hideTable: function (tableAll, tablePartial) {        if(tableAll){            tableAll.hide();        }        if(tablePartial){            tablePartial.hide();        }    },    //建table    buildTablePartial: function (table, group) {        let me = annotationOprObj;        table.empty();        let $thead = $("<thead><tr><th></th><th>编码</th><th>附注</th>/tr></thead>");        let $tbody = $("<tbody></tbody>");        let count = 1;        for(let i = 0, len = group.length; i < len; i++){            let $newTr = me.getNewTr($tbody, group[i].items, group[i].annotation);            $tbody.append($newTr);            count++;        }        let $trEnd = $("<tr><td>"+ count +"</td><td><a href data-toggle='modal' data-target='#fzEditBianma' class='m-0'>点击勾选编码</a></td><td><textarea class='form-control'></textarea></td></tr>");//勾选行        $($trEnd.children().children()[0]).bind('click', function () {            me.onclickFuncAdd($(this));            me.currentOprTr = $trEnd;            me.currentAnnotation = $(me.currentOprTr.children()[2]).children().val();        });        $tbody.append($trEnd);        table.append($thead);        table.append($tbody);    },    //新增一行tr    getNewTr: function (tbody, codes, jobContent) {        let me = annotationOprObj;        let count = tbody.children().length > 0 ? tbody.children().length : 1;        let $textTd = $("<td></td>");        let $textarea = $("<textarea class='form-control'></textarea>");        $textarea.val(jobContent);        $textTd.append($textarea);        let $tr = $("<tr><td>" + count + "</td><td><a href data-toggle='modal' data-target='#fzEditBianmaQ' class='m-0'>编辑编码</a></td></tr>");        $tr.children().children().bind('click', function () {            me.currentOprTr = $tr;            me.currentAnnotation = $(me.currentOprTr.children()[2]).children().val();            me.onclickFuncEdit($(this));        });        //文本变化;        $textarea.bind('change', function () {            let codes = me.getUpdateCodes($($(this).parent().parent().children()[1]).children());            let annotation = $(this).val();            me.updateAnnotation(pageOprObj.rationLibId, me.getUpdateArr(codes, annotation), function () {                if(annotation.trim().length === 0){                    me.buildTablePartial(me.fzTablePartial, me.getGroup(jobContentOprObj.currentRationItems));                }            });        });        $tr.append($textTd);        for(let i = 0, len = codes.length; i < len; i ++){            let $p = $("<p class='m-0'>" + codes[i] + "</p>");            $tr.children()[1].append($p[0]);        }        me.setTextareaHeight($textarea, codes.length + 1);        return $tr[0];    },    onclickFuncAdd: function (obj) {        let me = annotationOprObj;        let txtarea = $(obj.parent().parent().children().children()[1]);        let annotation = txtarea.val();        if(annotation.trim().length > 0){            let codesObj = me.getAddCodes(jobContentOprObj.currentRationItems);            me.buildCheckCodesCon(me.addCon, codesObj.checkedCodes, codesObj.disabledCodes)            obj.attr('data-target', '#fzEditBianma');        }        else{            obj.attr('data-target', '');            alert("附注不能为空!");        }    },    onclickFuncEdit: function (obj) {        let me = annotationOprObj;        me.buildEditableCodesCon(jobContentOprObj.currentRationItems, me.updateCon, me.getUpdateCodes(obj));    },    //获取编码td中的编码    getUpdateCodes: function (jq) {        let rst = [];        let nodes = jq.parent().children();        for(let i = 1, len = nodes.length; i < len; i++){            rst.push(nodes[i].textContent);        }        return rst;    },    //建一个编码checkbox Div    buildCodeOption: function (code, attr) {        let $div = $("<div class='col'><label class='form-check-label'><input class='form-check-input' type='checkbox' value= "+ code +"> "+ code +"</label></div>");        let $checkBox = $div.children().children();        if(attr){            $checkBox.attr(attr, true);        }        return $div;    },    //建修改编码弹窗    buildEditableCodesCon: function (rationItems, container, codes) {        let me = annotationOprObj;        let codeDivs = [];        container.empty();        for(let i = 0, len = codes.length; i < len; i++){            codeDivs.push({code: codes[i], attr: 'checked'});        }        for(let i = 0, len = rationItems.length; i < len; i++){            if(codes.indexOf(rationItems[i].code) === -1){                if(typeof rationItems[i].annotation !== 'undefined' && rationItems[i].annotation.toString().trim().length > 0){                    codeDivs.push({code: rationItems[i].code, attr: 'disabled'});                }                else{                    codeDivs.push({code: rationItems[i].code, attr: ''});                }            }        }        //排序        codeDivs.sort(function (a, b) {            let rst = 0;            if(a.code > b.code) rst = 1;            else if(a.code < b.code) rst = -1;            return rst;        });        for(let i = 0, len = codeDivs.length; i < len; i++){            container.append(me.buildCodeOption(codeDivs[i].code, codeDivs[i].attr));        }    },    //建勾选编码弹窗    buildCheckCodesCon: function (container, checkedCodes, disabledCodes) {        let me = annotationOprObj;        container.empty();        for(let i = 0, len = checkedCodes.length; i < len; i++){            let $codeDiv = me.buildCodeOption(checkedCodes[i], 'checked');            container.append($codeDiv);        }        for(let i = 0, len = disabledCodes.length; i < len; i++){            let $codeDiv = me.buildCodeOption(disabledCodes[i], 'disabled');            container.append($codeDiv);        }    },    getAddCodes: function (rationItems) {        let me = annotationOprObj;        let rst = {checkedCodes: [], disabledCodes: []};        for(let i = 0, len = rationItems.length; i < len; i++){            if(typeof rationItems[i].annotation !== 'undefined' && rationItems[i].annotation.toString().trim().length > 0){                rst.disabledCodes.push(rationItems[i].code);            }            else{                rst.checkedCodes.push(rationItems[i].code);            }        }        return rst;    },    //获取选择后的编码窗口的编码及状态    getCodesAfterS: function (checkNodes) {        let rst = {checked: [], unchecked: []};        for(let i = 0, len = checkNodes.length; i < len; i++){            if(checkNodes[i].checked){                rst.checked.push(checkNodes[i].value);            }            else if(!checkNodes[i].checked && !checkNodes[i].disabled){                rst.unchecked.push(checkNodes[i].value);            }        }        return rst;    },    setRadiosChecked: function (situation, radios) {        let me = annotationOprObj;        if(situation === me.situations.ALL){            radios[0].checked = true;            radios[1].checked = false;            $('#fzTxtareaAll').val(jobContentOprObj.currentRationItems.length > 0 ? jobContentOprObj.currentRationItems[0].annotation : '');            me.currentAnnotation = jobContentOprObj.currentRationItems.length > 0 ? jobContentOprObj.currentRationItems[0].annotation : '';            me.fzTableAll.show();            me.fzTablePartial.hide();        }        else if(situation === me.situations.PARTIAL){            radios[0].checked = false;            radios[1].checked = true;            me.fzTableAll.hide();            me.fzTablePartial.show();        }        else if(situation === me.situations.NONE){            radios[0].checked = false;            radios[1].checked = false;            me.fzTableAll.hide();            me.fzTablePartial.hide();        }    },    //radios是否可用,只有在定额章节树的底层节点才可用    setRadiosDisabled: function (val, radios) {        let me =annotationOprObj;        if(val){            radios[0].checked = false;            radios[1].checked = false;            me.currentSituation = me.situations.NONE;        }        radios.attr('disabled', val);    },    radiosChange: function (radios, tableAll, tablePartial) {        let me = annotationOprObj;        radios.change(function () {            let val = $("input[name = 'fzRadios']:checked").val();            let selectedNode = sectionTreeObj.tree.selected;            me.updateAnnoSituation(pageOprObj.rationLibId, selectedNode.getID(), val, function () {                selectedNode.data.annotationSituation = val;                me.currentSituation = val;                if(val === me.situations.ALL){                    let updateCodes = [];                    for(let i = 0, len = jobContentOprObj.currentRationItems.length; i < len; i++){                        updateCodes.push(jobContentOprObj.currentRationItems[i].code);                    }                    me.updateAnnotation(pageOprObj.rationLibId, me.getUpdateArr(updateCodes, ''), function () {                        me.currentAnnotation = '';                        $('#fzTxtareaAll').val('');                        tableAll.show();                        tablePartial.hide();                    });                }                else{                    me.buildTablePartial(me.fzTablePartial, me.getGroup(jobContentOprObj.currentRationItems));                    tableAll.hide();                    tablePartial.show();                }            });        });    },    setTextareaHeight: function (textarea, nodesCount) {        const perHeight = 21.6;        textarea.height(nodesCount * 21.6);    },    bindEvents: function (txtarea) {        let me = annotationOprObj;        txtarea.bind('change', function () {            let annotation = txtarea.val();            let jqNodes = txtarea.parent().parent().children()[1].children;            let updateCodes = me.getUpdateCodes(jqNodes);            txtarea.attr('disabled', true);            me.updateAnnotation(pageOprObj.rationLibId, me.getUpdateArr(updateCodes, annotation), function () {                txtarea.attr('disabled', false);            });        });    },    bindAllEvents: function (txtarea) {        let me = annotationOprObj;        txtarea.bind('change', function () {            let met = this;            let annotation = $(met).val();            $(met).attr('disabled', true);            let updateCodes = [];            for(let i = 0, len = jobContentOprObj.currentRationItems.length; i < len; i++){                updateCodes.push(jobContentOprObj.currentRationItems[i].code);                jobContentOprObj.currentRationItems[i].annotation = annotation;            }            me.currentAnnotation = annotation;            me.updateAnnotation(pageOprObj.rationLibId, me.getUpdateArr(updateCodes, annotation), function () {                $(met).attr('disabled', false);            });        });    },    unbindEvents: function (txtarea) {        txtarea.unbind();    },    //定额工作内容相关操作    rationAnnotationOpr: function (rationItems) {        let me = annotationOprObj;        me.setRadiosDisabled(rationItems.length > 0 ? false : true, me.radios);        me.setRadiosChecked(me.currentSituation, me.radios);        me.buildTablePartial(me.fzTablePartial, me.getGroup(rationItems));    },    getUpdateArr: function (updateCodes, annotation) {        let rst = [];        for(let i = 0, len = updateCodes.length; i < len; i++){            rst.push({code: updateCodes[i], annotation: annotation});        }        return rst;    },    bindAddConBtn: function () {        let me = annotationOprObj;        return function () {            let codesObj = me.getCodesAfterS(me.addCon.children().children().children());            let $tbody = $('#fzTablePartial tbody');            let lastEle = $tbody[0].lastElementChild;            let txtare = lastEle.lastElementChild.children[0];            if(me.currentAnnotation.trim().length > 0){//工作内容不为空才可添加编码                let updateArr = me.getUpdateArr(codesObj.checked, me.currentAnnotation);                me.updateAnnotation(pageOprObj.rationLibId, updateArr, function () {                    me.buildTablePartial(me.fzTablePartial, me.getGroup(jobContentOprObj.currentRationItems));                    $(txtare).val('');                });            }            else{                alert("附注不能为空!");            }        }    },    bindUpdateConBtn: function () {        let me = annotationOprObj;        return function () {            let codesObj = me.getCodesAfterS(me.updateCon.children().children().children());            let updateC = me.getUpdateArr(codesObj.checked, me.currentAnnotation),                updateUnC = me.getUpdateArr(codesObj.unchecked, ''),                updateArr = updateC.concat(updateUnC);            me.updateAnnotation(pageOprObj.rationLibId, updateArr, function () {                me.buildTablePartial(me.fzTablePartial, me.getGroup(jobContentOprObj.currentRationItems));            });        }    },    //更新缓存的定额    updateRationItem: function (rationItems, updateArr) {        for(let i = 0, len = rationItems.length; i < len; i++){            for(let j = 0, jLen = updateArr.length; j < jLen; j++){                if(rationItems[i].code === updateArr[j].code){                    rationItems[i].annotation = updateArr[j].annotation;                    break;                }            }        }    },    updateAnnotation: function (repId, updateArr, callback){        let me = annotationOprObj;        $.ajax({            type: 'post',            url: 'api/updateAnnotation',            data: {lastOpr: userAccount, repId: repId, updateArr: JSON.stringify(updateArr)},            dataType: 'json',            success: function (result) {                if(!result.error){                    me.updateRationItem(jobContentOprObj.currentRationItems, updateArr);                    callback();                }            }        });    },    updateAnnoSituation: function (repId, nodeId, situation, callback) {        let me = annotationOprObj;        $.ajax({            type: 'post',            url: 'api/updateAnnoSituation',            data: {lastOpr: userAccount, repId: repId, nodeId: nodeId, situation: situation},            dataType: 'json',            success: function (result) {                if(!result.error){                    if(callback){                        callback();                    }                }            }        })    }};
 |