cgformField.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. var filedTypes = ['check', 'database', 'key', 'page','index'];
  2. var headerTr = "template_header_";
  3. var bodytr = "add_column_table_template_";
  4. var iframeId = "iframe_";
  5. var fieldData = [];// 字段的数据
  6. var iframeLoadNumber = 0; // 当前加载的Iframe的数量
  7. var rownumber = 0 ;//标识当前序号
  8. var toDelete = []; //保存表单待删除属性字段id
  9. $(document).ready(iframeLoaded());
  10. //$("#iframe_check").load(iframeLoaded());
  11. //$("#iframe_database").load(iframeLoaded());
  12. //$("#iframe_key").load(iframeLoaded());
  13. //$("#iframe_page").load(iframeLoaded());
  14. //add-start author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
  15. //$("#iframe_index").load(iframeLoaded());
  16. //add-end author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
  17. function iframeLoaded() {
  18. iframeLoadNumber++;
  19. if (iframeLoadNumber == 6) {
  20. $(".datagrid-toolbar").parent().css("width", "auto");
  21. // setTimeout(initData, 500);
  22. initData();
  23. }
  24. }
  25. var fixHelper = function(e, ui) {
  26. ui.children().each(function() {
  27. $(this).width($(this).width());
  28. });
  29. return ui;
  30. };
  31. setTimeout(function(){
  32. $("#tab_div_database tbody").sortable({
  33. helper: fixHelper,
  34. items: '> tr',
  35. forcePlaceholderSize: true,
  36. stop: function (event, ui) {
  37. var textContent = ui.item.context.innerText?
  38. ui.item.context.innerText.toString():
  39. ui.item.context.textContent.toString();
  40. var endString = textContent.indexOf("S")!=-1?textContent.indexOf("S"):textContent.length;
  41. var startRownum = textContent.substring(0,endString).replace(/(^\s*)|(\s*$)/g,'');
  42. var targetIndex = ui.item.context.rowIndex;
  43. for (var i = 0; i < filedTypes.length; i++) {
  44. if(filedTypes[i] == "database" && startRownum != (targetIndex + 1)) continue;
  45. if(startRownum == (targetIndex + 1)){ //处理当前行和下一行交换位置
  46. $("#tab_div_" + filedTypes[i]).find("tr").eq(startRownum).insertBefore($("#tab_div_" + filedTypes[i]).find("tr").eq(targetIndex));
  47. }else if(startRownum > targetIndex){
  48. $("#tab_div_" + filedTypes[i]).find("tr").eq(startRownum-1).insertBefore($("#tab_div_" + filedTypes[i]).find("tr").eq(targetIndex));
  49. } else {
  50. $("#tab_div_" + filedTypes[i]).find("tr").eq(startRownum-1).insertAfter($("#tab_div_" + filedTypes[i]).find("tr").eq(targetIndex));
  51. }
  52. }
  53. for (var i = 0; i < filedTypes.length; i++) {
  54. resetTrNum("#tab_div_" + filedTypes[i]);
  55. }
  56. }
  57. });
  58. // .disableSelection()研究下这个的意义好像这里没啥作用,影响了火狐
  59. }, 2000);
  60. function initData() {
  61. addTableHead();
  62. $.get("cgFormHeadController.do?getColumnList&id=" + $("#id").val(),getDataHanlder);
  63. $.get("cgFormIndexController.do?getIndexList&id=" + $("#id").val(),getDataHanlderIndex);
  64. //update---start--author:JueYue---------date:20140824---------for:table adapter size
  65. $('.t_table').height($(window).height()-300);
  66. $(window).resize(function(){
  67. $('.t_table').height($(window).height()-300);
  68. });
  69. //update---start--end:JueYue---------date:20140824---------for:table adapter size
  70. }
  71. /**
  72. * 添加表头
  73. */
  74. function addTableHead() {
  75. for (var i = 0; i < filedTypes.length; i++) {
  76. var tr = $(getIframeDocument(filedTypes[i])).find("#"
  77. + headerTr + filedTypes[i] + " tr").clone();
  78. $("#tab_div_" + filedTypes[i]+"_title").append(tr);
  79. }
  80. }
  81. // 兼容不同浏览器获取iframe 内容
  82. //update-begin--Author:JueYue Date:20140213 for:因为Iframe获取失败,而导致详情看不到的情况
  83. //主要情况是ie11下的版本是火狐的标识倒是出差错
  84. function getIframeDocument(id){
  85. //update-begin--Author:zhoujf Date:20150522 for:解决火狐不兼容的问题
  86. try {
  87. if (window.frames["iframe_" + id].contentDocument) {
  88. return window.frames["iframe_" + id].contentDocument;
  89. }
  90. return window.frames["iframe_" + id].document;
  91. } catch (e) {
  92. }
  93. return document.getElementById("iframe_" + id).contentDocument;
  94. //update-end--Author:zhoujf Date:20150522 for:解决火狐不兼容的问题
  95. }
  96. //update-begin--Author:JueYue Date:20140213 for:因为Iframe获取失败,而导致详情看不到的情况
  97. /**
  98. * 获取数据的回调
  99. *
  100. * @param {}
  101. * data
  102. */
  103. function getDataHanlder(data) {
  104. data = eval("(" + data + ")");
  105. // 兼容之前order最小为0的问题
  106. var orderMin = data[0].orderNum == 0;
  107. $.each(data, function(idx, item) {
  108. rownumber = idx;//存储当前序号
  109. for (var i = 0; i < filedTypes.length; i++) {
  110. //add-start author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
  111. if(i!=4){
  112. initTrData(item, filedTypes[i], orderMin);
  113. }
  114. //add-end author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
  115. }
  116. });
  117. jformTypeChange();
  118. fixTab();
  119. }
  120. //获取表单的索引配置
  121. function getDataHanlderIndex(data) {
  122. data = eval("(" + data + ")");
  123. //update-begin--author:scott date:20170305 for:索引排序报异常解决-----
  124. $.each(data, function(idx, item) {
  125. rownumber = idx;//存储当前序号
  126. initTrDataIndex(item, 'index', false);
  127. });
  128. //update-end--author:scott date:20170305 for:索引排序报异常解决-----
  129. jformTypeChange();
  130. fixTab();
  131. }
  132. /**
  133. * 添加行数据
  134. *
  135. * @param {}
  136. * item 这个数据
  137. * @param {}
  138. * filedType 这一行的类型
  139. */
  140. function initTrData(item, filedType, orderMin) {
  141. var tr = $(getIframeDocument(filedType)).find("#" + bodytr
  142. + filedType + " tr").clone();
  143. var isId = item.fieldName == "id";
  144. $(':input, select,a', $(tr)).each(function() {
  145. var $this = $(this), name = $this.attr('name'), val = $this.val();
  146. if(isId){setAttrForThis($this);}
  147. //自定义一个序号<a> 按名字进行获取对象,并进行序号指定
  148. if(name.indexOf("#rindex#") > 0){
  149. $this.attr("name", name.replace('#rindex#',rownumber));
  150. $this.html(rownumber+1);
  151. }
  152. if (name.indexOf("#index#") > 0) {
  153. var fieldName = name.replace("columns[#index#].", "");
  154. $this.attr("name", name.replace('#index#',rownumber));
  155. if (item[fieldName] != "Y" && item[fieldName] != "N") {
  156. //--author: zhoujf -----start----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
  157. $this.attr('type')=='checkbox'? $this.attr("checked", false):$this.val(item[fieldName]);
  158. //--author: zhoujf -----end----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
  159. } else {
  160. item[fieldName] == "Y" ? $this.attr("checked", true) : $this
  161. .attr("checked", false);
  162. }
  163. } else if (name != "ck") {
  164. $this.attr("name", name.replace('_index',rownumber));
  165. $this.val(name.indexOf("columnsfieldName") != -1
  166. ? item.fieldName
  167. : item.content);
  168. }
  169. else{
  170. $this.val(item.id);
  171. }
  172. });
  173. $("#tab_div_" + filedType).append(tr);
  174. }
  175. //add-start author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
  176. function initTrDataIndex(item, filedType, orderMin) {
  177. var tr = $(getIframeDocument(filedType)).find("#" + bodytr
  178. + filedType + " tr").clone();
  179. var isId = item.fieldName == "id";
  180. $(':input, select,a', $(tr)).each(function() {
  181. var $this = $(this), name = $this.attr('name'), val = $this.val();
  182. if(isId){setAttrForThis($this);}
  183. //自定义一个序号<a> 按名字进行获取对象,并进行序号指定
  184. if(name.indexOf("#rindex#") > 0){
  185. $this.attr("name", name.replace('#rindex#',rownumber));
  186. $this.html(rownumber+1);
  187. }
  188. if (name.indexOf("#index#") > 0) {
  189. var fieldName = name.replace("indexes[#index#].", "");
  190. $this.attr("name", name.replace('#index#',rownumber));
  191. if (item[fieldName] != "Y" && item[fieldName] != "N") {
  192. //--author: zhoujf -----start----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
  193. $this.attr('type')=='checkbox'? $this.attr("checked", false):$this.val(item[fieldName]);
  194. //--author: zhoujf -----end----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
  195. } else {
  196. item[fieldName] == "Y" ? $this.attr("checked", true) : $this
  197. .attr("checked", false);
  198. }
  199. } else if (name != "ck") {
  200. $this.attr("name", name.replace('_index',rownumber));
  201. $this.val(name.indexOf("columnsfieldName") != -1
  202. ? item.fieldName
  203. : item.content);
  204. }
  205. else{
  206. $this.val(item.id);
  207. }
  208. });
  209. $("#tab_div_" + filedType).append(tr);
  210. }
  211. //add-end author: wangkun date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
  212. function setAttrForThis($this){
  213. if($this.is('select')){
  214. $this.attr("onfocus","this.defOpt=this.selectedIndex");
  215. $this.attr("onchange","this.selectedIndex=this.defOpt;");
  216. }else if($this.is('input')&&$this.attr('type')=='text'){
  217. $this.attr("readonly","readonly");
  218. }else if($this.is('input')&&$this.attr('type')=='checkbox'){
  219. $this.attr("onclick","return false;");
  220. }
  221. }
  222. /**
  223. * 添加行
  224. */
  225. function addColumnBtnClick() {
  226. for (var i = 0; i < filedTypes.length-1; i++) {
  227. addTrToTable(filedTypes[i]);
  228. }
  229. }
  230. function addIndexBtnClick(){
  231. addTrToTable('index');
  232. }
  233. function addTrToTable(filedType) {
  234. var tr = $(getIframeDocument(filedType)).find("#" + bodytr
  235. + filedType + " tr").clone();
  236. $("#tab_div_" + filedType).append(tr);
  237. resetTrNum('#tab_div_' + filedType);
  238. }
  239. function deleteUnUsedFiled(){
  240. if(toDelete && toDelete.length>0){
  241. for(index in toDelete){
  242. if(toDelete[index] == "on") continue;
  243. $.post("cgFormHeadController.do?delField&id="+ toDelete[index]);
  244. }
  245. }
  246. return true;
  247. }
  248. /**
  249. * 删除行
  250. */
  251. function delColumnBtnClick() {
  252. // 获取当前的check的行并进行遍历
  253. $("#tab_div_database").find("input[name='ck']:checked").parent().parent("tr").each(function(index, ele){
  254. //$.post("cgFormHeadController.do?delField&id="+ $("#tab_div_database").find("input[name='ck']:checked").val());
  255. toDelete.push($(this).find("input[name='ck']:checked").val());
  256. var selectIndex = ele.rowIndex;
  257. for (var i = 0; i < filedTypes.length; i++) {
  258. $("#tab_div_" + filedTypes[i]).find("tr").eq(selectIndex).remove();
  259. }
  260. })
  261. for (var i = 0; i < filedTypes.length; i++) {
  262. resetTrNum("#tab_div_" + filedTypes[i]);
  263. }
  264. }
  265. function delIndexBtnClick() {
  266. $("#tab_div_index").find("input[name='ck']:checked").parent().parent("tr").each(function(index, ele){
  267. //toDelete.push($(this).find("input[name='ck']:checked").val());
  268. var selectIndex = ele.rowIndex;
  269. $("#tab_div_index").find("tr").eq(selectIndex).remove();
  270. })
  271. }
  272. /**
  273. * 重设table的order
  274. *
  275. * @param {}
  276. * tableId
  277. */
  278. function resetTrNum(tableId) {
  279. $(tableId + " tbody tr").each(function(i) {
  280. $(':input, select,a', this).each(function() {
  281. var $this = $(this), name = $this.attr('name'), val = $this
  282. .val();
  283. if (name != null && name.indexOf("#index#") >= 0) {
  284. $this.attr("name", name.replace('#index#', i));
  285. /*if (name.indexOf('orderNum') >= 0) { Date20131212 liuht取消重置orderNumber
  286. $this.val(getMaxNum());
  287. }*/
  288. } else if (name != null && name.indexOf("_index") >= 0) {
  289. $this.attr("name", name.replace('_index', i));
  290. } else if (name != null && name != "ck") {
  291. $this.attr("name", name.replace(getNowIndex(name), i));
  292. }
  293. //代码移动位置,优化调整 Date20131212
  294. if (name != null && name.indexOf("rownumber") >= 0) {
  295. $this.html(i+1); // 移动tr|新加行|删除行 ---重置 rownumber值
  296. }
  297. if (name != null && name.indexOf("orderNum") >= 0) {
  298. $this.val(i+1); // 移动tr|新加行|删除行 ---重置 orderNumber值
  299. }
  300. });
  301. });
  302. jformTypeChange();
  303. }
  304. /**
  305. * 获取最大的 orderNum
  306. */
  307. function getMaxNum() {
  308. var maxNum = 0;
  309. $("input[name*='orderNum']").each(function() {
  310. maxNum = parseInt($(this).val()) > maxNum
  311. ? $(this).val()
  312. : maxNum;
  313. });
  314. return parseInt(maxNum) + 1;
  315. }
  316. /**
  317. * 同步fieldName
  318. */
  319. $(document).on('change', '.fieldNameInput','columnsfieldName',valueChange);
  320. /**
  321. * 同步content
  322. */
  323. $(document).on('change', '.contentInput','columnscontent',valueChange);
  324. function valueChange(e){
  325. var val = $(this).val();
  326. var index = getNowIndex($(this).attr('name'));
  327. for (var i = 0; i < filedTypes.length; i++) {
  328. $("#tab_div_" + filedTypes[i]).find("input[name='"+e.data+ index + "']").val(val);
  329. }
  330. }
  331. /**
  332. * 获取当前的索引值
  333. *
  334. * @param {}
  335. * name 这个元素的Name
  336. * @return {}
  337. */
  338. function getNowIndex(name) {
  339. var s = name.indexOf("[");
  340. var e = name.indexOf("]");
  341. if(s>=0 && e>=0){
  342. return name.substring(s + 1, e);
  343. } else if(name.indexOf("columnsfieldName")>=0){
  344. return name.substring(16);
  345. }else if(name.indexOf("columnscontent")>=0){
  346. return name.substring(14); //修改字段备注无法同步问题
  347. }
  348. }
  349. /**
  350. * 主键策略的改变,控制序列的输入
  351. */
  352. function jformPkTypeChange(){
  353. var pkType = $("#jformPkType").val();
  354. var $idInput=null;
  355. $("[name$='fieldName']").each(function(){
  356. var fieldv = $(this).val();
  357. if(fieldv && fieldv=="id"){
  358. $idInput=$(this);
  359. }
  360. });
  361. var $idInput_type=$idInput.parent().parent().find("select[name$='type']");
  362. var $idInput_length=$idInput.parent().parent().find("input[name$='length']");
  363. $("#jformPkSequence").val("");
  364. if(pkType && pkType=="SEQUENCE"){
  365. $("#jformPkTypeTd").attr("colspan","1");
  366. $("#jformPkSequenceV").attr("style","");
  367. $("#jformPkSequenceN").attr("style","");
  368. $("#jformPkSequence").attr("datatype","*");
  369. $idInput_type.val("int");
  370. $idInput_length.val("20");
  371. }else{
  372. $("#jformPkSequenceV").attr("style","display: none;");
  373. $("#jformPkSequenceN").attr("style","display: none;");
  374. $("#jformPkTypeTd").attr("colspan","3");
  375. $("#jformPkSequence").removeAttr("datatype");
  376. if(pkType=="NATIVE"){
  377. $idInput_type.val("int");
  378. $idInput_length.val("20");
  379. }else if(pkType=="UUID"){
  380. $idInput_type.val("string");
  381. $idInput_length.val("36");
  382. }
  383. }
  384. }
  385. /**
  386. * 表类型的改变,附表才可以设置主表
  387. */
  388. function jformTypeChange(){
  389. openOrCloseSetKeyOp($("#jformType").val() == 3);
  390. openOrCloseRelationTypeDisplay($("#jformType").val() == 3);
  391. }
  392. //控制:只有附表才可以选择附表关联类型
  393. function openOrCloseRelationTypeDisplay(boo){
  394. if(boo){
  395. $("#relation_type_div").attr("style","display: block;");
  396. }else{
  397. $("#relation_type_div").attr("style","display: none;");
  398. }
  399. }
  400. function openOrCloseSetKeyOp(boo){
  401. $("#tab_div_key tbody tr").each(function(i) {
  402. $(':input', this).each(function() {
  403. var $this = $(this), name = $this.attr('name');
  404. if (name != null && (name.indexOf("mainTable") >= 0
  405. ||name.indexOf("mainField") >= 0)&&
  406. name!="columns[0].mainTable"&&name!="columns[0].mainField") {
  407. boo?$this.removeAttr("readonly"):
  408. $this.attr("readonly","readonly");
  409. }
  410. });
  411. });
  412. }
  413. /**
  414. * fix修复
  415. */
  416. function fixTab(){
  417. //update---start--author:scott---------date:20170630---------for:easyui-tabs 宽度自适应------------
  418. $('#tabs').tabs({
  419. width: 2000,
  420. onSelect:function(title){
  421. if(title=="数据库属性"){fix("database");}
  422. else if(title=="页面属性"){fix("page");}
  423. else if(title=="校验字典"){fix("check");}
  424. else if(title=="外键"){fix("key");}
  425. else if(title=="索引"){fix("index");}
  426. }
  427. });
  428. //update---end--author:scott---------date:20170630---------for: easyui-tabs 宽度自适应------------
  429. $('#t_table_database').scroll(function(){
  430. $('#tab_div_database_title').css('margin-left',-($('#t_table_database').scrollLeft()));
  431. });
  432. $('#t_table_page').scroll(function(){
  433. $('#tab_div_page_title').css('margin-left',-($('#t_table_page').scrollLeft()));
  434. });
  435. $('#t_table_check').scroll(function(){
  436. $('#tab_div_check_title').css('margin-left',-($('#t_table_check').scrollLeft()));
  437. });
  438. $('#t_table_key').scroll(function(){
  439. $('#tab_div_key_title').css('margin-left',-($('#t_table_key').scrollLeft()));
  440. });
  441. $('#t_table_index').scroll(function(){
  442. $('#tab_div_index_title').css('margin-left',-($('#t_table_index').scrollLeft()));
  443. });
  444. }
  445. //利用js让头部与内容对应列宽度一致。
  446. function fix(type){
  447. for(var i=0;i<=$('#tab_div_'+type+' tr:last').find('td:last').index();i++){
  448. $('#tab_div_'+type+'_title th').eq(i).css('width',
  449. $('#tab_div_'+type+' tr:last').find('td').eq(i).width());
  450. }
  451. $('#tab_div_'+type+'_title').css('width',
  452. $('#tab_div_'+type+' tr:last').width());
  453. }