var filedTypes = ['check', 'database', 'key', 'page','index'];
var headerTr = "template_header_";
var bodytr = "add_column_table_template_";
var iframeId = "iframe_";
var fieldData = [];// 字段的数据
var iframeLoadNumber = 0; // 当前加载的Iframe的数量
var rownumber = 0 ;//标识当前序号
var toDelete = []; //保存表单待删除属性字段id
$(document).ready(iframeLoaded());
//$("#iframe_check").load(iframeLoaded());
//$("#iframe_database").load(iframeLoaded());
//$("#iframe_key").load(iframeLoaded());
//$("#iframe_page").load(iframeLoaded());
//add-start author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
//$("#iframe_index").load(iframeLoaded());
//add-end author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
function iframeLoaded() {
iframeLoadNumber++;
if (iframeLoadNumber == 6) {
$(".datagrid-toolbar").parent().css("width", "auto");
// setTimeout(initData, 500);
initData();
}
}
var fixHelper = function(e, ui) {
ui.children().each(function() {
$(this).width($(this).width());
});
return ui;
};
setTimeout(function(){
$("#tab_div_database tbody").sortable({
helper: fixHelper,
items: '> tr',
forcePlaceholderSize: true,
stop: function (event, ui) {
var textContent = ui.item.context.innerText?
ui.item.context.innerText.toString():
ui.item.context.textContent.toString();
var endString = textContent.indexOf("S")!=-1?textContent.indexOf("S"):textContent.length;
var startRownum = textContent.substring(0,endString).replace(/(^\s*)|(\s*$)/g,'');
var targetIndex = ui.item.context.rowIndex;
for (var i = 0; i < filedTypes.length; i++) {
if(filedTypes[i] == "database" && startRownum != (targetIndex + 1)) continue;
if(startRownum == (targetIndex + 1)){ //处理当前行和下一行交换位置
$("#tab_div_" + filedTypes[i]).find("tr").eq(startRownum).insertBefore($("#tab_div_" + filedTypes[i]).find("tr").eq(targetIndex));
}else if(startRownum > targetIndex){
$("#tab_div_" + filedTypes[i]).find("tr").eq(startRownum-1).insertBefore($("#tab_div_" + filedTypes[i]).find("tr").eq(targetIndex));
} else {
$("#tab_div_" + filedTypes[i]).find("tr").eq(startRownum-1).insertAfter($("#tab_div_" + filedTypes[i]).find("tr").eq(targetIndex));
}
}
for (var i = 0; i < filedTypes.length; i++) {
resetTrNum("#tab_div_" + filedTypes[i]);
}
}
});
// .disableSelection()研究下这个的意义好像这里没啥作用,影响了火狐
}, 2000);
function initData() {
addTableHead();
$.get("cgFormHeadController.do?getColumnList&id=" + $("#id").val(),getDataHanlder);
$.get("cgFormIndexController.do?getIndexList&id=" + $("#id").val(),getDataHanlderIndex);
//update---start--author:JueYue---------date:20140824---------for:table adapter size
$('.t_table').height($(window).height()-300);
$(window).resize(function(){
$('.t_table').height($(window).height()-300);
});
//update---start--end:JueYue---------date:20140824---------for:table adapter size
}
/**
* 添加表头
*/
function addTableHead() {
for (var i = 0; i < filedTypes.length; i++) {
var tr = $(getIframeDocument(filedTypes[i])).find("#"
+ headerTr + filedTypes[i] + " tr").clone();
$("#tab_div_" + filedTypes[i]+"_title").append(tr);
}
}
// 兼容不同浏览器获取iframe 内容
//update-begin--Author:JueYue Date:20140213 for:因为Iframe获取失败,而导致详情看不到的情况
//主要情况是ie11下的版本是火狐的标识倒是出差错
function getIframeDocument(id){
//update-begin--Author:zhoujf Date:20150522 for:解决火狐不兼容的问题
try {
if (window.frames["iframe_" + id].contentDocument) {
return window.frames["iframe_" + id].contentDocument;
}
return window.frames["iframe_" + id].document;
} catch (e) {
}
return document.getElementById("iframe_" + id).contentDocument;
//update-end--Author:zhoujf Date:20150522 for:解决火狐不兼容的问题
}
//update-begin--Author:JueYue Date:20140213 for:因为Iframe获取失败,而导致详情看不到的情况
/**
* 获取数据的回调
*
* @param {}
* data
*/
function getDataHanlder(data) {
data = eval("(" + data + ")");
// 兼容之前order最小为0的问题
var orderMin = data[0].orderNum == 0;
$.each(data, function(idx, item) {
rownumber = idx;//存储当前序号
for (var i = 0; i < filedTypes.length; i++) {
//add-start author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
if(i!=4){
initTrData(item, filedTypes[i], orderMin);
}
//add-end author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
}
});
jformTypeChange();
fixTab();
}
//获取表单的索引配置
function getDataHanlderIndex(data) {
data = eval("(" + data + ")");
//update-begin--author:scott date:20170305 for:索引排序报异常解决-----
$.each(data, function(idx, item) {
rownumber = idx;//存储当前序号
initTrDataIndex(item, 'index', false);
});
//update-end--author:scott date:20170305 for:索引排序报异常解决-----
jformTypeChange();
fixTab();
}
/**
* 添加行数据
*
* @param {}
* item 这个数据
* @param {}
* filedType 这一行的类型
*/
function initTrData(item, filedType, orderMin) {
var tr = $(getIframeDocument(filedType)).find("#" + bodytr
+ filedType + " tr").clone();
var isId = item.fieldName == "id";
$(':input, select,a', $(tr)).each(function() {
var $this = $(this), name = $this.attr('name'), val = $this.val();
if(isId){setAttrForThis($this);}
//自定义一个序号 按名字进行获取对象,并进行序号指定
if(name.indexOf("#rindex#") > 0){
$this.attr("name", name.replace('#rindex#',rownumber));
$this.html(rownumber+1);
}
if (name.indexOf("#index#") > 0) {
var fieldName = name.replace("columns[#index#].", "");
$this.attr("name", name.replace('#index#',rownumber));
if (item[fieldName] != "Y" && item[fieldName] != "N") {
//--author: zhoujf -----start----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
$this.attr('type')=='checkbox'? $this.attr("checked", false):$this.val(item[fieldName]);
//--author: zhoujf -----end----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
} else {
item[fieldName] == "Y" ? $this.attr("checked", true) : $this
.attr("checked", false);
}
} else if (name != "ck") {
$this.attr("name", name.replace('_index',rownumber));
$this.val(name.indexOf("columnsfieldName") != -1
? item.fieldName
: item.content);
}
else{
$this.val(item.id);
}
});
$("#tab_div_" + filedType).append(tr);
}
//add-start author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
function initTrDataIndex(item, filedType, orderMin) {
var tr = $(getIframeDocument(filedType)).find("#" + bodytr
+ filedType + " tr").clone();
var isId = item.fieldName == "id";
$(':input, select,a', $(tr)).each(function() {
var $this = $(this), name = $this.attr('name'), val = $this.val();
if(isId){setAttrForThis($this);}
//自定义一个序号 按名字进行获取对象,并进行序号指定
if(name.indexOf("#rindex#") > 0){
$this.attr("name", name.replace('#rindex#',rownumber));
$this.html(rownumber+1);
}
if (name.indexOf("#index#") > 0) {
var fieldName = name.replace("indexes[#index#].", "");
$this.attr("name", name.replace('#index#',rownumber));
if (item[fieldName] != "Y" && item[fieldName] != "N") {
//--author: zhoujf -----start----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
$this.attr('type')=='checkbox'? $this.attr("checked", false):$this.val(item[fieldName]);
//--author: zhoujf -----end----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
} else {
item[fieldName] == "Y" ? $this.attr("checked", true) : $this
.attr("checked", false);
}
} else if (name != "ck") {
$this.attr("name", name.replace('_index',rownumber));
$this.val(name.indexOf("columnsfieldName") != -1
? item.fieldName
: item.content);
}
else{
$this.val(item.id);
}
});
$("#tab_div_" + filedType).append(tr);
}
//add-end author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
function setAttrForThis($this){
if($this.is('select')){
$this.attr("onfocus","this.defOpt=this.selectedIndex");
$this.attr("onchange","this.selectedIndex=this.defOpt;");
}else if($this.is('input')&&$this.attr('type')=='text'){
$this.attr("readonly","readonly");
}else if($this.is('input')&&$this.attr('type')=='checkbox'){
$this.attr("onclick","return false;");
}
}
/**
* 添加行
*/
function addColumnBtnClick() {
for (var i = 0; i < filedTypes.length-1; i++) {
addTrToTable(filedTypes[i]);
}
}
function addIndexBtnClick(){
addTrToTable('index');
}
function addTrToTable(filedType) {
var tr = $(getIframeDocument(filedType)).find("#" + bodytr
+ filedType + " tr").clone();
$("#tab_div_" + filedType).append(tr);
resetTrNum('#tab_div_' + filedType);
}
function deleteUnUsedFiled(){
if(toDelete && toDelete.length>0){
for(index in toDelete){
if(toDelete[index] == "on") continue;
$.post("cgFormHeadController.do?delField&id="+ toDelete[index]);
}
}
return true;
}
/**
* 删除行
*/
function delColumnBtnClick() {
// 获取当前的check的行并进行遍历
$("#tab_div_database").find("input[name='ck']:checked").parent().parent("tr").each(function(index, ele){
//$.post("cgFormHeadController.do?delField&id="+ $("#tab_div_database").find("input[name='ck']:checked").val());
toDelete.push($(this).find("input[name='ck']:checked").val());
var selectIndex = ele.rowIndex;
for (var i = 0; i < filedTypes.length; i++) {
$("#tab_div_" + filedTypes[i]).find("tr").eq(selectIndex).remove();
}
})
for (var i = 0; i < filedTypes.length; i++) {
resetTrNum("#tab_div_" + filedTypes[i]);
}
}
function delIndexBtnClick() {
$("#tab_div_index").find("input[name='ck']:checked").parent().parent("tr").each(function(index, ele){
//toDelete.push($(this).find("input[name='ck']:checked").val());
var selectIndex = ele.rowIndex;
$("#tab_div_index").find("tr").eq(selectIndex).remove();
})
}
/**
* 重设table的order
*
* @param {}
* tableId
*/
function resetTrNum(tableId) {
$(tableId + " tbody tr").each(function(i) {
$(':input, select,a', this).each(function() {
var $this = $(this), name = $this.attr('name'), val = $this
.val();
if (name != null && name.indexOf("#index#") >= 0) {
$this.attr("name", name.replace('#index#', i));
/*if (name.indexOf('orderNum') >= 0) { Date20131212 liuht取消重置orderNumber
$this.val(getMaxNum());
}*/
} else if (name != null && name.indexOf("_index") >= 0) {
$this.attr("name", name.replace('_index', i));
} else if (name != null && name != "ck") {
$this.attr("name", name.replace(getNowIndex(name), i));
}
//代码移动位置,优化调整 Date20131212
if (name != null && name.indexOf("rownumber") >= 0) {
$this.html(i+1); // 移动tr|新加行|删除行 ---重置 rownumber值
}
if (name != null && name.indexOf("orderNum") >= 0) {
$this.val(i+1); // 移动tr|新加行|删除行 ---重置 orderNumber值
}
});
});
jformTypeChange();
}
/**
* 获取最大的 orderNum
*/
function getMaxNum() {
var maxNum = 0;
$("input[name*='orderNum']").each(function() {
maxNum = parseInt($(this).val()) > maxNum
? $(this).val()
: maxNum;
});
return parseInt(maxNum) + 1;
}
/**
* 同步fieldName
*/
$(document).on('change', '.fieldNameInput','columnsfieldName',valueChange);
/**
* 同步content
*/
$(document).on('change', '.contentInput','columnscontent',valueChange);
function valueChange(e){
var val = $(this).val();
var index = getNowIndex($(this).attr('name'));
for (var i = 0; i < filedTypes.length; i++) {
$("#tab_div_" + filedTypes[i]).find("input[name='"+e.data+ index + "']").val(val);
}
}
/**
* 获取当前的索引值
*
* @param {}
* name 这个元素的Name
* @return {}
*/
function getNowIndex(name) {
var s = name.indexOf("[");
var e = name.indexOf("]");
if(s>=0 && e>=0){
return name.substring(s + 1, e);
} else if(name.indexOf("columnsfieldName")>=0){
return name.substring(16);
}else if(name.indexOf("columnscontent")>=0){
return name.substring(14); //修改字段备注无法同步问题
}
}
/**
* 主键策略的改变,控制序列的输入
*/
function jformPkTypeChange(){
var pkType = $("#jformPkType").val();
var $idInput=null;
$("[name$='fieldName']").each(function(){
var fieldv = $(this).val();
if(fieldv && fieldv=="id"){
$idInput=$(this);
}
});
var $idInput_type=$idInput.parent().parent().find("select[name$='type']");
var $idInput_length=$idInput.parent().parent().find("input[name$='length']");
$("#jformPkSequence").val("");
if(pkType && pkType=="SEQUENCE"){
$("#jformPkTypeTd").attr("colspan","1");
$("#jformPkSequenceV").attr("style","");
$("#jformPkSequenceN").attr("style","");
$("#jformPkSequence").attr("datatype","*");
$idInput_type.val("int");
$idInput_length.val("20");
}else{
$("#jformPkSequenceV").attr("style","display: none;");
$("#jformPkSequenceN").attr("style","display: none;");
$("#jformPkTypeTd").attr("colspan","3");
$("#jformPkSequence").removeAttr("datatype");
if(pkType=="NATIVE"){
$idInput_type.val("int");
$idInput_length.val("20");
}else if(pkType=="UUID"){
$idInput_type.val("string");
$idInput_length.val("36");
}
}
}
/**
* 表类型的改变,附表才可以设置主表
*/
function jformTypeChange(){
openOrCloseSetKeyOp($("#jformType").val() == 3);
openOrCloseRelationTypeDisplay($("#jformType").val() == 3);
}
//控制:只有附表才可以选择附表关联类型
function openOrCloseRelationTypeDisplay(boo){
if(boo){
$("#relation_type_div").attr("style","display: block;");
}else{
$("#relation_type_div").attr("style","display: none;");
}
}
function openOrCloseSetKeyOp(boo){
$("#tab_div_key tbody tr").each(function(i) {
$(':input', this).each(function() {
var $this = $(this), name = $this.attr('name');
if (name != null && (name.indexOf("mainTable") >= 0
||name.indexOf("mainField") >= 0)&&
name!="columns[0].mainTable"&&name!="columns[0].mainField") {
boo?$this.removeAttr("readonly"):
$this.attr("readonly","readonly");
}
});
});
}
/**
* fix修复
*/
function fixTab(){
//update---start--author:scott---------date:20170630---------for:easyui-tabs 宽度自适应------------
$('#tabs').tabs({
width: 2000,
onSelect:function(title){
if(title=="数据库属性"){fix("database");}
else if(title=="页面属性"){fix("page");}
else if(title=="校验字典"){fix("check");}
else if(title=="外键"){fix("key");}
else if(title=="索引"){fix("index");}
}
});
//update---end--author:scott---------date:20170630---------for: easyui-tabs 宽度自适应------------
$('#t_table_database').scroll(function(){
$('#tab_div_database_title').css('margin-left',-($('#t_table_database').scrollLeft()));
});
$('#t_table_page').scroll(function(){
$('#tab_div_page_title').css('margin-left',-($('#t_table_page').scrollLeft()));
});
$('#t_table_check').scroll(function(){
$('#tab_div_check_title').css('margin-left',-($('#t_table_check').scrollLeft()));
});
$('#t_table_key').scroll(function(){
$('#tab_div_key_title').css('margin-left',-($('#t_table_key').scrollLeft()));
});
$('#t_table_index').scroll(function(){
$('#tab_div_index_title').css('margin-left',-($('#t_table_index').scrollLeft()));
});
}
//利用js让头部与内容对应列宽度一致。
function fix(type){
for(var i=0;i<=$('#tab_div_'+type+' tr:last').find('td:last').index();i++){
$('#tab_div_'+type+'_title th').eq(i).css('width',
$('#tab_div_'+type+' tr:last').find('td').eq(i).width());
}
$('#tab_div_'+type+'_title').css('width',
$('#tab_div_'+type+' tr:last').width());
}