/**
* 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 = $(" ");
let $tbody = $("编码 附注 /tr>
" + codes[i] + "
"); $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 = $(""); 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(); } } } }) } };