BpmMobileForm.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. var colstree;
  2. /**
  3. * 根据表获取字段构建树。
  4. *
  5. * @param tableId
  6. */
  7. function loadTree(tableId) {
  8. var iconFolder = __ctx + '/styles/tree/';
  9. $.post(__ctx
  10. + '/platform/form/bpmFormTable/getAllFieldsByTableId.ht?tableId='
  11. + tableId, function(data) {
  12. var json = eval("(" + data + ")"), treeData = [];
  13. json.icon = iconFolder + 'table.png';
  14. json.name = "(主表)" +json.tableDesc;
  15. json.id = json.tableId;
  16. json.pId = 0;
  17. json.type = 0;
  18. json.open=true;
  19. json.collapse = false;
  20. treeData.push(json);
  21. // 主表字段
  22. for ( var i = 0, c; c = json.fieldList[i++];) {
  23. c.icon = iconFolder + c.fieldType + '.png';
  24. c.name = c.fieldDesc;
  25. c.id = c.fieldId;
  26. c.pId = json.tableId;
  27. c.type = 1;
  28. treeData.push(c);
  29. }
  30. // 子表
  31. for ( var i = 0, c; c = json.subTableList[i++];) {
  32. c.icon = iconFolder + 'table.png';
  33. c.id = c.tableId;
  34. c.pId = 0;
  35. c.name = "(子表)" + c.tableDesc;
  36. c.type = 2;
  37. c.open=true;
  38. c.collapse = false;
  39. treeData.push(c);
  40. for(var j = 0,m;m=c.fieldList[j++];){
  41. m.pId = c.tableId;
  42. m.name = m.fieldDesc;
  43. m.icon = iconFolder + m.fieldType + '.png';
  44. m.type = 3;
  45. m.tableName = c.tableName;
  46. treeData.push(m);
  47. }
  48. }
  49. var setting = {
  50. view : {
  51. fontCss : setFontCss
  52. },
  53. data : {
  54. key : {
  55. name : "name"
  56. },
  57. simpleData : {
  58. enable : true,
  59. idKey : "id",
  60. pIdKey : "pId",
  61. rootPId : 0
  62. }
  63. },
  64. callback : {
  65. onDblClick : function(event, treeId, treeNode) {
  66. // 增加字段
  67. if (treeNode.type == 1){
  68. addField(treeNode);
  69. }else if (treeNode.type == 2){
  70. addSubTable(treeNode,true);
  71. }else if (treeNode.type == 3){
  72. addSubField(treeNode);
  73. }
  74. },
  75. beforeCollapse: function(treeId, treeNode){
  76. return (treeNode.collapse !== false);
  77. }
  78. }
  79. };
  80. colstree = $.fn.zTree.init($("#colstree"), setting, treeData);
  81. });
  82. };
  83. //展开收起
  84. function treeExpandAll(type){
  85. colstree.expandAll(type);
  86. };
  87. // 添加分组
  88. function addTeam(isAdd, o) {
  89. var table = $($("#cloneTemplate [zone='team']")[0]).clone(true, true);
  90. if (!isAdd) {
  91. $("[name='name']", table).val(o.teamName);
  92. var option = [];
  93. for ( var i = 0, c; c = o.teamField[i++];) {
  94. option.push('<option value="' + c.fieldName + '">' + c.fieldDesc
  95. + '</option>');
  96. }
  97. $("[name='field']", table).append(option.join(''));
  98. }
  99. // 绑定删除的分组
  100. // $("[var=del]", table).live('click',function() {
  101. // delTeam(table);
  102. // });
  103. $("#formItem").append(table);
  104. $(table).each(function() {
  105. selectTeam(this);
  106. });
  107. }
  108. // 设置选择的分组
  109. function selectTeam(obj) {
  110. var formItem = $("#formItem");
  111. $(".validError", formItem).each(function() {
  112. $(this).removeClass('validError');
  113. });
  114. $(obj).closest("fieldset").addClass('validError');
  115. }
  116. /**
  117. * 增加字段
  118. */
  119. function addField(treeNode) {
  120. var fieldName = treeNode.fieldName, name = treeNode.name, selectTeam = $(".validError select"), flag = false;
  121. if (!selectTeam || selectTeam.length == 0) {
  122. alert($lang_form.bpmFormTableTeam.selectAddTeam);
  123. return;
  124. }
  125. $("#formItem select[name='field'] option").each(function() {
  126. if (fieldName == $(this).val())
  127. flag = true;
  128. });
  129. if (flag) {
  130. alert($lang_form.bpmFormTableTeam.moveAdd);
  131. return;
  132. }
  133. __SelectOption__.add(selectTeam.get(0), name, fieldName);
  134. setCss(treeNode.tId, "red");
  135. }
  136. function delTeam(obj) {
  137. var me = $(obj);
  138. var objFieldset=me.closest('fieldset');
  139. $.ligerDialog.confirm($lang_form.bpmFormTableTeam.delTeam, $lang.tip.msg,
  140. function(rtn) {
  141. if (rtn) {
  142. objFieldset.fadeOut(500, function() {
  143. $("select[name='field'] option", objFieldset).each(
  144. function() {
  145. removeColsTree($(this).val(), 1);
  146. });
  147. // 查找最近的分组
  148. $("fieldset[zone='team']", $(objFieldset).parent())
  149. .siblings().each(function() {
  150. if ($(this).attr('zone') == 'sub')
  151. return true;
  152. if (!$(this).hasClass('validError')) {
  153. $(this).addClass("validError");
  154. return false;
  155. }
  156. });
  157. $(this).remove();
  158. });
  159. }
  160. });
  161. }
  162. function getSubFieldset(obj){
  163. var d = [];
  164. obj.each(function() {
  165. var me = $(this), data = {}, fieldList = [];
  166. data.tableName = $("input[name='tableName']", me).val();
  167. data.tableDesc = $("input[name='tableDesc']", me).val();
  168. me.find("select[name='field'] option").each(function() {
  169. var o = {};
  170. o.fieldName = $(this).val();
  171. o.fieldDesc = $(this).text();
  172. fieldList.push(o);
  173. });
  174. data.fieldList = fieldList;
  175. d.push(data);
  176. });
  177. return d ;
  178. }
  179. // 增加子表
  180. function addSubTable(o,isInit) {
  181. var table = $($("#cloneSubTemplate [zone='sub']")[0]).clone(true, true), tableName = o.tableName, flag = false;
  182. //设置子表的Option
  183. setSubOption(table,o);
  184. // 查找该子表是否增加
  185. $("#formItem [zone='sub'] [name='tableName'] ").each(function() {
  186. if (tableName == $(this).val())
  187. flag = true;
  188. });
  189. if (flag) {
  190. alert('该子表已经添加了,请移出再添加!');
  191. return;
  192. }
  193. // 绑定删除的分组
  194. // $("[var=del]", table).click(function() {
  195. // delSubTable(table, o);
  196. // });
  197. $("#formItem").append(table);
  198. // 设置样式
  199. if(!$.isEmpty(isInit)){
  200. setCss(o.tId, "red");
  201. }
  202. }
  203. function setSubOption(table,o){
  204. if(!$.isEmpty(o)){
  205. $("[name='tableName']", table).val(o.tableName);
  206. $("[name='tableDesc']", table).val(o.tableDesc);
  207. if (!$.isEmpty(o.fieldList)) {
  208. var option = [];
  209. for ( var i = 0, c; c = o.fieldList[i++];) {
  210. option.push('<option value="' + c.fieldName + '">' + c.fieldDesc
  211. + '</option>');
  212. }
  213. var seletField = $("[name='field']", table);
  214. seletField.attr("subtable",o.tableName);
  215. seletField.append(option.join(''));
  216. }
  217. }
  218. }
  219. /**
  220. * 删除子表
  221. * @param table
  222. * @param o
  223. */
  224. function delSubTable(obj) {
  225. var me = $(obj);
  226. var objFieldset=me.closest('fieldset');
  227. $.ligerDialog.confirm('是否删除该子表?', $lang.tip.msg, function(rtn) {
  228. if (rtn) {
  229. var data = getSubFieldset(objFieldset);
  230. objFieldset.fadeOut(500, function() {
  231. // 处理样式
  232. removeColsTree(data.tableName, 2);
  233. for ( var i = 0, c; c = data.fieldList[i++];) {
  234. removeColsTree(c.fieldName, 3);
  235. }
  236. // 删除节点
  237. $(this).remove();
  238. });
  239. }
  240. });
  241. }
  242. function getSubFieldset(obj){
  243. var me = obj, data = {}, fieldList = [];
  244. data.tableName = $("input[name='tableName']", me).val();
  245. data.tableDesc = $("input[name='tableDesc']", me).val();
  246. me.find("select[name='field'] option").each(function() {
  247. var o = {};
  248. o.fieldName = $(this).val();
  249. o.fieldDesc = $(this).text();
  250. fieldList.push(o);
  251. });
  252. data.fieldList = fieldList;
  253. return data ;
  254. }
  255. /**
  256. * 增加子表字段
  257. * @param treeNode
  258. */
  259. function addSubField(treeNode){
  260. var fieldName = treeNode.fieldName,
  261. name = treeNode.name,
  262. tableName = treeNode.tableName,
  263. selectSub = $("select[subtable='"+tableName+"']"),
  264. flag = false;
  265. if (!selectSub || selectSub.length == 0) {
  266. alert("该子表未添加,请添加子表再向该表添加该字段!");
  267. return;
  268. }
  269. $("option",selectSub).each(function() {
  270. if (fieldName == $(this).val()){
  271. flag = true;
  272. return false;
  273. }
  274. });
  275. if (flag) {
  276. alert($lang_form.bpmFormTableTeam.moveAdd);
  277. return;
  278. }
  279. __SelectOption__.add(selectSub.get(0), name, fieldName);
  280. setCss(treeNode.tId, "red");
  281. }
  282. /**
  283. * 初始化设置样式
  284. */
  285. function setFontCss(treeId, treeNode) {
  286. var json = $('#formJson').val();
  287. if ($.isEmpty(json))
  288. return;
  289. var data = $.parseJSON(json);
  290. // 解析字段
  291. if (treeNode.type == 1) {
  292. for ( var i = 0, c; c = data.team[i++];) {
  293. for ( var j = 0, o; o = c.teamField[j++];) {
  294. if (treeNode.fieldName == o.fieldName)
  295. return {
  296. color : "red"
  297. };
  298. }
  299. }
  300. }
  301. //子表
  302. else if (treeNode.type == 2) {
  303. for ( var i = 0, c; c = data.sub[i++];) {
  304. if (treeNode.tableName == c.tableName)
  305. return {
  306. color : "red"
  307. };
  308. }
  309. }else if(treeNode.type == 3){
  310. for ( var i = 0, c; c = data.sub[i++];) {
  311. for ( var j = 0, o; o = c.fieldList[j++];) {
  312. if (treeNode.fieldName == o.fieldName)
  313. return {
  314. color : "red"
  315. };
  316. }
  317. }
  318. }
  319. return '';
  320. };
  321. // 移除已选字段
  322. function removeOpt(e,type) {
  323. var me = $(e);
  324. var optId = me.val();
  325. if ($.isEmpty(optId))
  326. return;
  327. e.remove(e.selectedIndex);
  328. // $("option[value='"+optId+"']",me).remove();
  329. removeColsTree(optId, type);
  330. }
  331. function removeColsTree(optId, type) {
  332. if ($.isEmpty(optId))
  333. return;
  334. if (colstree) {
  335. var node = colstree.getNodesByFilter(function(node) {
  336. if (type == 1 || type == 3 ) {
  337. return (node.fieldName == optId) ? true : false;
  338. }else if (type == 2) {
  339. return (node.tableName == optId) ? true : false;
  340. }
  341. }, true);
  342. if(!$.isEmpty(node))
  343. setCss(node.tId, "");
  344. }
  345. }
  346. // 设置样式
  347. function setCss(o, t) {
  348. if ($.isEmpty(o))
  349. return;
  350. $('#' + o + '_a').css("color", t);
  351. }
  352. function getJsonData() {
  353. var rtn = valid.valid();
  354. if (!rtn) {
  355. alert('有子表名称未填写!');
  356. return false;
  357. }
  358. var team = [], sub = [], json = {};
  359. // 分组字段
  360. $("#formItem [zone='team']").each(function() {
  361. var me = $(this), data = {}, field = [];
  362. data.teamName = $("input[name='name']", me).val();
  363. me.find("select[name='field'] option").each(function() {
  364. var o = {};
  365. o.fieldName = $(this).val();
  366. o.fieldDesc = $(this).text();
  367. field.push(o);
  368. });
  369. if (!field || field.length == 0)
  370. rtn = false;
  371. data.teamField = field;
  372. team.push(data);
  373. });
  374. if (!rtn) {
  375. alert("有分组没有字段");
  376. return false;
  377. }
  378. // 子表字段
  379. $("#formItem [zone='sub']").each(function() {
  380. var me = $(this), data = {}, fieldList = [];
  381. data.tableName = $("input[name='tableName']", me).val();
  382. data.tableDesc = $("input[name='tableDesc']", me).val();
  383. me.find("select[name='field'] option").each(function() {
  384. var o = {};
  385. o.fieldName = $(this).val();
  386. o.fieldDesc = $(this).text();
  387. fieldList.push(o);
  388. });
  389. if (!fieldList || fieldList.length == 0)
  390. rtn = false;
  391. data.fieldList = fieldList;
  392. sub.push(data);
  393. });
  394. if (!rtn) {
  395. alert("有子表没有字段");
  396. return false;
  397. }
  398. json.title = $("#title").val();
  399. json.team = team;
  400. json.sub = sub;
  401. json = JSON.stringify(json);
  402. return json;
  403. }
  404. /**
  405. * 预览
  406. */
  407. function preview() {
  408. if (typeof (Worker) === "undefined") {
  409. alert("不支持预览的浏览器,请使用支持的浏览器。");
  410. return;
  411. }
  412. var json = getJsonData();
  413. if (!json)
  414. return;
  415. var frm = new com.hotent.form.Form();
  416. frm.creatForm("mobilePreview", __ctx
  417. + '/mobile/form/bpmMobileForm/preview.ht');
  418. frm.addFormEl("formJson", json);
  419. frm.addFormEl("formId", $('#formId').val());
  420. frm.addFormEl("formKey", $('#formKey').val());
  421. frm.setTarget("_blank");
  422. frm.setMethod("post");
  423. frm.submit();
  424. frm.clearFormEl();
  425. }
  426. /**
  427. * 保存数据
  428. */
  429. function saveData() {
  430. var json = getJsonData();
  431. if (!json)
  432. return;
  433. $('#formJson').val(json);
  434. var options = {};
  435. if (showResponse) {
  436. options.success = showResponse;
  437. }
  438. var frm = $('#mobileForm').form();
  439. frm.ajaxForm(options);
  440. frm.submit();
  441. }
  442. function showResponse(responseText) {
  443. $.ligerDialog.closeWaitting();
  444. var obj = new com.hotent.form.ResultMessage(responseText);
  445. if (obj.isSuccess()) {
  446. $.ligerDialog.confirm(obj.getMessage() + ","
  447. + $lang.operateTip.continueOp, $lang.tip.msg, function(rtn) {
  448. if (rtn) {
  449. window.location.href = location.href.getNewUrl();
  450. } else {
  451. window.close();
  452. }
  453. });
  454. } else {
  455. $.ligerDialog.err($lang.tip.msg, '', obj.getMessage());
  456. }
  457. }