123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 |
- /**
- * Created by Zhong on 2017/12/20.
- */
- //工作内容
- let jobContentOprObj = {
- 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;
- },
- 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 = $("<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].jobContent);
- $tbody.append($newTr);
- count++;
- }
- let $trEnd = $("<tr><td>"+ count +"</td><td></td><td><textarea class='form-control' disabled='disabled' style='background: white'></textarea></td></tr>");//勾选行
- /* $($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);
- },
- //新增一行tr
- getNewTr: function (tbody, codes, jobContent) {
- let me = jobContentOprObj;
- let count = tbody.children().length > 0 ? tbody.children().length : 1;
- let $textTd = $("<td></td>");
- let $textarea = $("<textarea class='form-control' disabled='disabled' style='background: white;'></textarea>");
- $textarea.val(jobContent);
- $textTd.append($textarea);
- let $tr = $("<tr><td>" + count + "</td><td><a href data-toggle='modal' data-target='#editBianmaQ' class='m-0'>编辑编码</a></td></tr>");
- /*$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 = $("<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 = 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', '#editBianma');
- }
- else{
- obj.attr('data-target', '');
- alert("工作内容不能为空!");
- }
- },
- onclickFuncEdit: function (obj) {
- let me = jobContentOprObj;
- me.buildEditableCodesCon(me.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 = 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;
- },
- 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(me.currentRationItems.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 () {
- let codesObj = me.getCodesAfterS(me.updateCon.children().children().children());
- 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: '/complementaryRation/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: '/complementaryRation/api/updateSituation',
- data: {lastOpr: userAccount, repId: pageOprObj.rationLibId, nodeId: nodeId, situation: situation},
- dataType: 'json',
- success: function (result) {
- if(!result.error){
- if(callback){
- callback();
- }
- }
- }
- })
- }
- };
|