var colstree; /** * 根据表获取字段构建树。 * * @param tableId */ function loadTree(tableId) { var iconFolder = __ctx + '/styles/tree/'; $.post(__ctx + '/platform/form/bpmFormTable/getAllFieldsByTableId.ht?tableId=' + tableId, function(data) { var json = eval("(" + data + ")"), treeData = []; json.icon = iconFolder + 'table.png'; json.name = "(主表)" +json.tableDesc; json.id = json.tableId; json.pId = 0; json.type = 0; json.open=true; json.collapse = false; treeData.push(json); // 主表字段 for ( var i = 0, c; c = json.fieldList[i++];) { c.icon = iconFolder + c.fieldType + '.png'; c.name = c.fieldDesc; c.id = c.fieldId; c.pId = json.tableId; c.type = 1; treeData.push(c); } // 子表 for ( var i = 0, c; c = json.subTableList[i++];) { c.icon = iconFolder + 'table.png'; c.id = c.tableId; c.pId = 0; c.name = "(子表)" + c.tableDesc; c.type = 2; c.open=true; c.collapse = false; treeData.push(c); for(var j = 0,m;m=c.fieldList[j++];){ m.pId = c.tableId; m.name = m.fieldDesc; m.icon = iconFolder + m.fieldType + '.png'; m.type = 3; m.tableName = c.tableName; treeData.push(m); } } var setting = { view : { fontCss : setFontCss }, data : { key : { name : "name" }, simpleData : { enable : true, idKey : "id", pIdKey : "pId", rootPId : 0 } }, callback : { onDblClick : function(event, treeId, treeNode) { // 增加字段 if (treeNode.type == 1){ addField(treeNode); }else if (treeNode.type == 2){ addSubTable(treeNode,true); }else if (treeNode.type == 3){ addSubField(treeNode); } }, beforeCollapse: function(treeId, treeNode){ return (treeNode.collapse !== false); } } }; colstree = $.fn.zTree.init($("#colstree"), setting, treeData); }); }; //展开收起 function treeExpandAll(type){ colstree.expandAll(type); }; // 添加分组 function addTeam(isAdd, o) { var table = $($("#cloneTemplate [zone='team']")[0]).clone(true, true); if (!isAdd) { $("[name='name']", table).val(o.teamName); var option = []; for ( var i = 0, c; c = o.teamField[i++];) { option.push(''); } $("[name='field']", table).append(option.join('')); } // 绑定删除的分组 // $("[var=del]", table).live('click',function() { // delTeam(table); // }); $("#formItem").append(table); $(table).each(function() { selectTeam(this); }); } // 设置选择的分组 function selectTeam(obj) { var formItem = $("#formItem"); $(".validError", formItem).each(function() { $(this).removeClass('validError'); }); $(obj).closest("fieldset").addClass('validError'); } /** * 增加字段 */ function addField(treeNode) { var fieldName = treeNode.fieldName, name = treeNode.name, selectTeam = $(".validError select"), flag = false; if (!selectTeam || selectTeam.length == 0) { alert($lang_form.bpmFormTableTeam.selectAddTeam); return; } $("#formItem select[name='field'] option").each(function() { if (fieldName == $(this).val()) flag = true; }); if (flag) { alert($lang_form.bpmFormTableTeam.moveAdd); return; } __SelectOption__.add(selectTeam.get(0), name, fieldName); setCss(treeNode.tId, "red"); } function delTeam(obj) { var me = $(obj); var objFieldset=me.closest('fieldset'); $.ligerDialog.confirm($lang_form.bpmFormTableTeam.delTeam, $lang.tip.msg, function(rtn) { if (rtn) { objFieldset.fadeOut(500, function() { $("select[name='field'] option", objFieldset).each( function() { removeColsTree($(this).val(), 1); }); // 查找最近的分组 $("fieldset[zone='team']", $(objFieldset).parent()) .siblings().each(function() { if ($(this).attr('zone') == 'sub') return true; if (!$(this).hasClass('validError')) { $(this).addClass("validError"); return false; } }); $(this).remove(); }); } }); } function getSubFieldset(obj){ var d = []; obj.each(function() { var me = $(this), data = {}, fieldList = []; data.tableName = $("input[name='tableName']", me).val(); data.tableDesc = $("input[name='tableDesc']", me).val(); me.find("select[name='field'] option").each(function() { var o = {}; o.fieldName = $(this).val(); o.fieldDesc = $(this).text(); fieldList.push(o); }); data.fieldList = fieldList; d.push(data); }); return d ; } // 增加子表 function addSubTable(o,isInit) { var table = $($("#cloneSubTemplate [zone='sub']")[0]).clone(true, true), tableName = o.tableName, flag = false; //设置子表的Option setSubOption(table,o); // 查找该子表是否增加 $("#formItem [zone='sub'] [name='tableName'] ").each(function() { if (tableName == $(this).val()) flag = true; }); if (flag) { alert('该子表已经添加了,请移出再添加!'); return; } // 绑定删除的分组 // $("[var=del]", table).click(function() { // delSubTable(table, o); // }); $("#formItem").append(table); // 设置样式 if(!$.isEmpty(isInit)){ setCss(o.tId, "red"); } } function setSubOption(table,o){ if(!$.isEmpty(o)){ $("[name='tableName']", table).val(o.tableName); $("[name='tableDesc']", table).val(o.tableDesc); if (!$.isEmpty(o.fieldList)) { var option = []; for ( var i = 0, c; c = o.fieldList[i++];) { option.push(''); } var seletField = $("[name='field']", table); seletField.attr("subtable",o.tableName); seletField.append(option.join('')); } } } /** * 删除子表 * @param table * @param o */ function delSubTable(obj) { var me = $(obj); var objFieldset=me.closest('fieldset'); $.ligerDialog.confirm('是否删除该子表?', $lang.tip.msg, function(rtn) { if (rtn) { var data = getSubFieldset(objFieldset); objFieldset.fadeOut(500, function() { // 处理样式 removeColsTree(data.tableName, 2); for ( var i = 0, c; c = data.fieldList[i++];) { removeColsTree(c.fieldName, 3); } // 删除节点 $(this).remove(); }); } }); } function getSubFieldset(obj){ var me = obj, data = {}, fieldList = []; data.tableName = $("input[name='tableName']", me).val(); data.tableDesc = $("input[name='tableDesc']", me).val(); me.find("select[name='field'] option").each(function() { var o = {}; o.fieldName = $(this).val(); o.fieldDesc = $(this).text(); fieldList.push(o); }); data.fieldList = fieldList; return data ; } /** * 增加子表字段 * @param treeNode */ function addSubField(treeNode){ var fieldName = treeNode.fieldName, name = treeNode.name, tableName = treeNode.tableName, selectSub = $("select[subtable='"+tableName+"']"), flag = false; if (!selectSub || selectSub.length == 0) { alert("该子表未添加,请添加子表再向该表添加该字段!"); return; } $("option",selectSub).each(function() { if (fieldName == $(this).val()){ flag = true; return false; } }); if (flag) { alert($lang_form.bpmFormTableTeam.moveAdd); return; } __SelectOption__.add(selectSub.get(0), name, fieldName); setCss(treeNode.tId, "red"); } /** * 初始化设置样式 */ function setFontCss(treeId, treeNode) { var json = $('#formJson').val(); if ($.isEmpty(json)) return; var data = $.parseJSON(json); // 解析字段 if (treeNode.type == 1) { for ( var i = 0, c; c = data.team[i++];) { for ( var j = 0, o; o = c.teamField[j++];) { if (treeNode.fieldName == o.fieldName) return { color : "red" }; } } } //子表 else if (treeNode.type == 2) { for ( var i = 0, c; c = data.sub[i++];) { if (treeNode.tableName == c.tableName) return { color : "red" }; } }else if(treeNode.type == 3){ for ( var i = 0, c; c = data.sub[i++];) { for ( var j = 0, o; o = c.fieldList[j++];) { if (treeNode.fieldName == o.fieldName) return { color : "red" }; } } } return ''; }; // 移除已选字段 function removeOpt(e,type) { var me = $(e); var optId = me.val(); if ($.isEmpty(optId)) return; e.remove(e.selectedIndex); // $("option[value='"+optId+"']",me).remove(); removeColsTree(optId, type); } function removeColsTree(optId, type) { if ($.isEmpty(optId)) return; if (colstree) { var node = colstree.getNodesByFilter(function(node) { if (type == 1 || type == 3 ) { return (node.fieldName == optId) ? true : false; }else if (type == 2) { return (node.tableName == optId) ? true : false; } }, true); if(!$.isEmpty(node)) setCss(node.tId, ""); } } // 设置样式 function setCss(o, t) { if ($.isEmpty(o)) return; $('#' + o + '_a').css("color", t); } function getJsonData() { var rtn = valid.valid(); if (!rtn) { alert('有子表名称未填写!'); return false; } var team = [], sub = [], json = {}; // 分组字段 $("#formItem [zone='team']").each(function() { var me = $(this), data = {}, field = []; data.teamName = $("input[name='name']", me).val(); me.find("select[name='field'] option").each(function() { var o = {}; o.fieldName = $(this).val(); o.fieldDesc = $(this).text(); field.push(o); }); if (!field || field.length == 0) rtn = false; data.teamField = field; team.push(data); }); if (!rtn) { alert("有分组没有字段"); return false; } // 子表字段 $("#formItem [zone='sub']").each(function() { var me = $(this), data = {}, fieldList = []; data.tableName = $("input[name='tableName']", me).val(); data.tableDesc = $("input[name='tableDesc']", me).val(); me.find("select[name='field'] option").each(function() { var o = {}; o.fieldName = $(this).val(); o.fieldDesc = $(this).text(); fieldList.push(o); }); if (!fieldList || fieldList.length == 0) rtn = false; data.fieldList = fieldList; sub.push(data); }); if (!rtn) { alert("有子表没有字段"); return false; } json.title = $("#title").val(); json.team = team; json.sub = sub; json = JSON.stringify(json); return json; } /** * 预览 */ function preview() { if (typeof (Worker) === "undefined") { alert("不支持预览的浏览器,请使用支持的浏览器。"); return; } var json = getJsonData(); if (!json) return; var frm = new com.hotent.form.Form(); frm.creatForm("mobilePreview", __ctx + '/mobile/form/bpmMobileForm/preview.ht'); frm.addFormEl("formJson", json); frm.addFormEl("formId", $('#formId').val()); frm.addFormEl("formKey", $('#formKey').val()); frm.setTarget("_blank"); frm.setMethod("post"); frm.submit(); frm.clearFormEl(); } /** * 保存数据 */ function saveData() { var json = getJsonData(); if (!json) return; $('#formJson').val(json); var options = {}; if (showResponse) { options.success = showResponse; } var frm = $('#mobileForm').form(); frm.ajaxForm(options); frm.submit(); } function showResponse(responseText) { $.ligerDialog.closeWaitting(); var obj = new com.hotent.form.ResultMessage(responseText); if (obj.isSuccess()) { $.ligerDialog.confirm(obj.getMessage() + "," + $lang.operateTip.continueOp, $lang.tip.msg, function(rtn) { if (rtn) { window.location.href = location.href.getNewUrl(); } else { window.close(); } }); } else { $.ligerDialog.err($lang.tip.msg, '', obj.getMessage()); } }