/** * Created by Zhong on 2017/12/20. */ //工作内容 let jobContentOprObj = { workBook: null, container: $('#editJobCodeSpread'), situations: {ALL: 'ALL', PARTIAL: 'PARTIAL', NONE: 'NONE'},//所有ALL(包括未定义本项工作内容)、部分PARTIA,不可用NONE(无定额时) currentSituation: null,//本项适用情况 currentTreeNode: null, preTreeNode: null, radios: $("input[name = 'optionsRadios']"), tableAll: $('#tableAll'), tablePartial: $('#tablePartial'), currentOprTr: null, currentJobContent: null, currentRationItems: null, addCon: $('#addCon'),//勾选编码模态框 updateCon: $('#updateCon'),//编辑编码模态框 setAttribute: function (preNode, currentNode) { let me = jobContentOprObj; me.preTreeNode = preNode; me.currentTreeNode = currentNode; }, setting: { header:[ {headerName:"编码",headerWidth:240,dataCode:"code", dataType: "String", formatter: "@", hAlign: "left", vAlign: "center"}, {headerName:"选择",headerWidth:40,dataCode:"select", hAlign: "center", vAlign: "center"}, ], }, buildSheet: function () { let me = this; me.workBook = sheetCommonObj.buildSheet(me.container[0], me.setting, 30); me.workBook.options.showDragFillSmartTag = false; me.workBook.options.defaultDragFillType = GC.Spread.Sheets.Fill.AutoFillType.fillWithoutFormatting; me.workBook.refresh(); me.workBook.bind(GC.Spread.Sheets.Events.ButtonClicked, me.onButtonClick); let sheet = me.workBook.getSheet(0); sheet.options.isProtected = true; sheet.getRange(-1, 0, -1, 1).locked(true); sheet.getRange(-1, 1, -1, 1).locked(false); }, renderSheet: function (func) { let me = this; let sheet = me.workBook.getSheet(0); sheet.suspendPaint(); sheet.suspendEvent(); if (func) { func(); } sheet.resumePaint(); sheet.resumeEvent(); }, onButtonClick: function (sender, args) { if (args.sheet.isEditing()) { args.sheet.endEdit(); } }, showData: function (datas) { let me = this, sheet = me.workBook.getSheet(0), headers = me.setting.header; let fuc = function () { sheet.setRowCount(datas.length); //复选框 let checkBoxType = new GC.Spread.Sheets.CellTypes.CheckBox(); sheet.setCellType(-1, 1, checkBoxType); for(let col = 0, cLen = headers.length; col < cLen; col++){ if(headers[col].formatter){ sheet.setFormatter(-1, col, headers[col].formatter); } sheet.getRange(-1, col, -1, 1).hAlign(GC.Spread.Sheets.HorizontalAlign[headers[col]['hAlign']]); sheet.getRange(-1, col, -1, 1).vAlign(GC.Spread.Sheets.VerticalAlign[headers[col]['vAlign']]); for(let row = 0, rLen = datas.length; row < rLen; row++){ sheet.setValue(row, col, datas[row][headers[col]['dataCode']]); } } }; me.renderSheet(fuc); }, clickUpdate: function (txtarea) {//解决编辑完后在未失去焦点的时候直接定额章节树 let me = jobContentOprObj; if(txtarea.is(':focus')){ let jobContent = txtarea.val(); if(jobContent !== me.currentJobContent){ me.preTreeNode.data.jobContent = jobContent; me.unbindEvents(txtarea); txtarea.blur(); let updateCodes = []; for(let i = 0, len = me.currentRationItems.length; i < len; i++){ updateCodes.push(me.currentRationItems[i].code); me.currentRationItems[i].jobContent = jobContent; } me.updateJobContent(pageOprObj.rationLibId, me.getUpdateArr(updateCodes, jobContent), 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].jobContent !== 'undefined' && rationItems[i].jobContent.toString().trim().length > 0){ let isExist = false; for(let j = 0, jLen = rst.length; j < jLen; j++){ if(rst[j].jobContent === rationItems[i].jobContent){ isExist = true; rst[j].items.push(rationItems[i].code); break; } } if(!isExist){ rst.push({jobContent: rationItems[i].jobContent, 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 = jobContentOprObj; table.empty(); let $thead = $("编码工作内容/tr>"); let $tbody = $(""); let count = 1; for(let i = 0, len = group.length; i < len; i++){ let $newTr = me.getNewTr($tbody, group[i].items, group[i].jobContent); $tbody.append($newTr); count++; } let $trEnd = $(""+ count +"点击勾选编码");//勾选行 $($trEnd.children().children()[0]).bind('click', function () { me.onclickFuncAdd($(this)); me.currentOprTr = $trEnd; me.currentJobContent = $(me.currentOprTr.children()[2]).children().val(); }); $tbody.append($trEnd); table.append($thead); table.append($tbody); autoFlashHeight(); }, //新增一行tr getNewTr: function (tbody, codes, jobContent) { let me = jobContentOprObj; let count = tbody.children().length > 0 ? tbody.children().length : 1; let $textTd = $(""); let $textarea = $(""); $textarea.val(jobContent); $textTd.append($textarea); let $tr = $("" + count + "编辑编码"); $tr.children().children().bind('click', function () { me.currentOprTr = $tr; me.currentJobContent = $(me.currentOprTr.children()[2]).children().val(); me.onclickFuncEdit($(this)); }); //文本变化; $textarea.bind('change', function () { let codes = me.getUpdateCodes($($(this).parent().parent().children()[1]).children()); let jobContent = $(this).val(); me.updateJobContent(pageOprObj.rationLibId, me.getUpdateArr(codes, jobContent), function () { if(jobContent.trim().length === 0){ me.buildTablePartial(me.tablePartial, me.getGroup(me.currentRationItems)); } }); }); $tr.append($textTd); for(let i = 0, len = codes.length; i < len; i ++){ let $p = $("

" + codes[i] + "

"); $tr.children()[1].append($p[0]); } me.setTextareaHeight($textarea, codes.length + 1); return $tr[0]; }, onclickFuncAdd: function (obj) { let me = jobContentOprObj; let txtarea = $(obj.parent().parent().children().children()[1]); let jobContent = txtarea.val(); if(jobContent.trim().length > 0){//工作内容不为空才可添加编码 /* let codesObj = me.getAddCodes(me.currentRationItems); me.buildCheckCodesCon(me.addCon, codesObj.checkedCodes, codesObj.disabledCodes)*/ obj.attr('data-target', '#editBianmaQ'); if (!me.workBook) { setTimeout(function () { me.buildSheet(); me.showData(me.getShowDatas(me.currentRationItems, [])); me.workBook.getSheet(0).setActiveCell(0, 0); }, 200); } else { me.showData(me.getShowDatas(me.currentRationItems, [])); me.workBook.getSheet(0).setActiveCell(0, 0); } } else{ obj.attr('data-target', ''); alert("工作内容不能为空!"); } }, onclickFuncEdit: function (obj) { let me = jobContentOprObj; //me.buildEditableCodesCon(me.currentRationItems, me.updateCon, me.getUpdateCodes(obj)); if (!me.workBook) { setTimeout(function () { me.buildSheet(); me.showData(me.getShowDatas(me.currentRationItems, me.getUpdateCodes(obj))); me.workBook.getSheet(0).setActiveCell(0, 0); }, 200); } else { me.showData(me.getShowDatas(me.currentRationItems, me.getUpdateCodes(obj))); me.workBook.getSheet(0).setActiveCell(0, 0); } }, //获取弹出选择编码的数据 getShowDatas: function (rationItems, codes) { let rst = []; for(let i = 0, len = codes.length; i < len; i++){ rst.push({code: codes[i], select: true}); } for(let i = 0, len = rationItems.length; i < len; i++){ if(!codes.includes(rationItems[i].code)){ if (typeof rationItems[i].jobContent === 'undefined' || rationItems[i].jobContent.toString().trim().length <= 0) { rst.push({code: rationItems[i].code, select: false}); } } } return rst; }, //获取编码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 = jobContentOprObj; 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].jobContent !== 'undefined' && rationItems[i].jobContent.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 = jobContentOprObj; 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 = jobContentOprObj; let rst = {checkedCodes: [], disabledCodes: []}; for(let i = 0, len = rationItems.length; i < len; i++){ if(typeof rationItems[i].jobContent !== 'undefined' && rationItems[i].jobContent.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; },*/ getCodesAfterS: function () { let rst = {checked: [], unchecked: []}; let sheet = this.workBook.getSheet(0); for(let i = 0; i < sheet.getRowCount(); i++){ let code = sheet.getValue(i, 0), checked = sheet.getValue(i, 1); if (checked) { rst.checked.push(code); } else { rst.unchecked.push(code); } } return rst; }, setRadiosChecked: function (situation, radios) { let me = jobContentOprObj; if(situation === me.situations.ALL){ radios[0].checked = true; radios[1].checked = false; $('#txtareaAll').val(me.currentRationItems.length > 0 ? me.currentRationItems[0].jobContent : ''); me.currentJobContent = me.currentRationItems.length > 0 ? me.currentRationItems[0].jobContent : ''; me.tableAll.show(); me.tablePartial.hide(); } else if(situation === me.situations.PARTIAL){ radios[0].checked = false; radios[1].checked = true; me.tableAll.hide(); me.tablePartial.show(); } else if(situation === me.situations.NONE){ radios[0].checked = false; radios[1].checked = false; me.tableAll.hide(); me.tablePartial.hide(); } }, //radios是否可用,只有在定额章节树的底层节点才可用 setRadiosDisabled: function (val, radios) { let me =jobContentOprObj; 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 = jobContentOprObj; radios.change(function () { let val = $("input[name = 'optionsRadios']:checked").val(); let selectedNode = sectionTreeObj.tree.selected; me.updateSituation(pageOprObj.rationLibId, selectedNode.getID(), val, function () { selectedNode.data.jobContentSituation = val; me.currentSituation = val; if(val === me.situations.ALL){ let updateCodes = []; for(let i = 0, len = me.currentRationItems.length; i < len; i++){ updateCodes.push(me.currentRationItems[i].code); } me.updateJobContent(pageOprObj.rationLibId, me.getUpdateArr(updateCodes, ''), function () { me.currentJobContent = ''; $('#txtareaAll').val(''); tableAll.show(); tablePartial.hide(); }); } else{ me.buildTablePartial(me.tablePartial, me.getGroup(me.currentRationItems)); tableAll.hide(); tablePartial.show(); } }); }); }, setTextareaHeight: function (textarea, nodesCount) { const perHeight = 21.6; textarea.height(nodesCount * 21.6); }, bindEvents: function (txtarea) { let me = jobContentOprObj; txtarea.bind('change', function () { let jobContent = txtarea.val(); let jqNodes = txtarea.parent().parent().children()[1].children; let updateCodes = me.getUpdateCodes(jqNodes); txtarea.attr('disabled', true); me.updateJobContent(pageOprObj.rationLibId, me.getUpdateArr(updateCodes, jobContent), function () { txtarea.attr('disabled', false); }); }); }, bindAllEvents: function (txtarea) { let me = jobContentOprObj; txtarea.bind('change', function () { let met = this; let jobContent = $(met).val(); $(met).attr('disabled', true); let updateCodes = []; for(let i = 0, len = me.currentRationItems.length; i < len; i++){ updateCodes.push(me.currentRationItems[i].code); me.currentRationItems[i].jobContent = jobContent; } me.currentJobContent = jobContent; me.updateJobContent(pageOprObj.rationLibId, me.getUpdateArr(updateCodes, jobContent), function () { $(met).attr('disabled', false); }); }); }, unbindEvents: function (txtarea) { txtarea.unbind(); }, //定额工作内容相关操作 rationJobContentOpr: function (rationItems) { let me = jobContentOprObj; me.setRadiosDisabled(sectionTreeObj.tree.selected.children.length === 0 ? false : true, me.radios); me.setRadiosChecked(me.currentSituation, me.radios); me.buildTablePartial(me.tablePartial, me.getGroup(rationItems)); }, getUpdateArr: function (updateCodes, jobContent) { let rst = []; for(let i = 0, len = updateCodes.length; i < len; i++){ rst.push({code: updateCodes[i], jobContent: jobContent}); } return rst; }, bindAddConBtn: function () { let me = jobContentOprObj; return function () { let codesObj = me.getCodesAfterS(me.addCon.children().children().children()); let $tbody = $('#tablePartial tbody'); let lastEle = $tbody[0].lastElementChild; let txtare = lastEle.lastElementChild.children[0]; if(me.currentJobContent.trim().length > 0){//工作内容不为空才可添加编码 let updateArr = me.getUpdateArr(codesObj.checked, me.currentJobContent); me.updateJobContent(pageOprObj.rationLibId, updateArr, function () { me.buildTablePartial(me.tablePartial, me.getGroup(me.currentRationItems)); $(txtare).val(''); }); } else{ alert("工作内容不能为空!"); } } }, bindUpdateConBtn: function () { let me = jobContentOprObj; return function () { console.log('enter'); let codesObj = me.getCodesAfterS(); let updateC = me.getUpdateArr(codesObj.checked, me.currentJobContent), updateUnC = me.getUpdateArr(codesObj.unchecked, ''), updateArr = updateC.concat(updateUnC); me.updateJobContent(pageOprObj.rationLibId, updateArr, function () { me.buildTablePartial(me.tablePartial, me.getGroup(me.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].jobContent = updateArr[j].jobContent; break; } } } }, updateJobContent: function (repId, updateArr, callback){ let me = jobContentOprObj; $.ajax({ type: 'post', url: 'api/updateJobContent', data: {lastOpr: userAccount, repId: pageOprObj.rationLibId, updateArr: JSON.stringify(updateArr)}, dataType: 'json', success: function (result) { if(!result.error){ me.updateRationItem(jobContentOprObj.currentRationItems, updateArr); callback(); } } }); }, updateSituation: function (repId, nodeId, situation, callback) { let me = jobContentOprObj; $.ajax({ type: 'post', url: 'api/updateSituation', data: {lastOpr: userAccount, repId: pageOprObj.rationLibId, nodeId: nodeId, situation: situation}, dataType: 'json', success: function (result) { if(!result.error){ if(callback){ callback(); } } } }) } }; $(document).ready(function () { $('#gznr').on('shown.bs.tab', function () { autoFlashHeight(); }); });