FormExplorer.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. MWF.xDesktop.requireApp("cms.ColumnManager", "Explorer", null, false);
  2. MWF.xApplication.cms.ColumnManager.FormExplorer = new Class({
  3. Extends: MWF.xApplication.cms.ColumnManager.Explorer,
  4. Implements: [Options, Events],
  5. options: {
  6. "create": MWF.CMSCM.LP.form.create,
  7. "search": MWF.CMSCM.LP.form.search,
  8. "searchText": MWF.CMSCM.LP.form.searchText,
  9. "noElement": MWF.CMSCM.LP.form.noFormNoticeText,
  10. "topEnable": true,
  11. "name": 'cms.FormExplorer'
  12. },
  13. //
  14. //_createElement: function(e){
  15. // var _self = this;
  16. // var createForm = function(e, template){
  17. // layout.desktop.getFormDesignerStyle(function(){
  18. // var options = {
  19. // "style": layout.desktop.formDesignerStyle,
  20. // "template": template,
  21. // "onQueryLoad": function(){
  22. // this.actions = _self.app.restActions;
  23. // this.column = _self.app.options.column;
  24. // this.application = _self.app.options.column;
  25. // },
  26. // "onPostSave" : function(){
  27. // _self.reload();
  28. // }
  29. // };
  30. // layout.desktop.openApplication(e, "cms.FormDesigner", options);
  31. // }.bind(this));
  32. //
  33. // }
  34. //
  35. // var createTemplateMaskNode = new Element("div", {"styles": this.css.createTemplateMaskNode}).inject(this.app.content);
  36. // var createTemplateAreaNode = new Element("div", {"styles": this.css.createFormTemplateAreaNode}).inject(this.app.content);
  37. // createTemplateAreaNode.fade("in");
  38. //
  39. // var createTemplateScrollNode = new Element("div", {"styles": this.css.createTemplateScrollNode}).inject(createTemplateAreaNode);
  40. // var createTemplateContentNode = new Element("div", {"styles": this.css.createTemplateContentNode}).inject(createTemplateScrollNode);
  41. // MWF.require("MWF.widget.ScrollBar", function(){
  42. // new MWF.widget.ScrollBar(createTemplateScrollNode, {"indent": false});
  43. // }.bind(this));
  44. //
  45. // var _self = this;
  46. // var url = "../x_component_cms_FormDesigner/Module/Form/template/templates.json";
  47. // MWF.getJSON(url, function(json){
  48. // json.each(function(template){
  49. // var templateNode = new Element("div", {"styles": this.css.templateNode}).inject(createTemplateContentNode);
  50. // var templateIconNode = new Element("div", {"styles": this.css.templateIconNode}).inject(templateNode);
  51. // var templateTitleNode = new Element("div", {"styles": this.css.templateTitleNode, "text": template.title}).inject(templateNode);
  52. // templateNode.store("template", template.name);
  53. //
  54. // var templateIconImgNode = new Element("img", {"styles": this.css.templateIconImgNode}).inject(templateIconNode);
  55. // templateIconImgNode.set("src", "../x_component_cms_FormDesigner/Module/Form/template/"+template.icon);
  56. //
  57. // templateNode.addEvents({
  58. // "mouseover": function(){this.setStyles(_self.css.templateNode_over)},
  59. // "mouseout": function(){this.setStyles(_self.css.templateNode)},
  60. // "mousedown": function(){this.setStyles(_self.css.templateNode_down)},
  61. // "mouseup": function(){this.setStyles(_self.css.templateNode_over)},
  62. // "click": function(e){
  63. // createForm(e, this.retrieve("template"));
  64. // createTemplateAreaNode.destroy();
  65. // createTemplateMaskNode.destroy();
  66. // }
  67. // });
  68. //
  69. // }.bind(this))
  70. //
  71. // }.bind(this));
  72. //
  73. // createTemplateMaskNode.addEvent("click", function(){
  74. // createTemplateAreaNode.destroy();
  75. // createTemplateMaskNode.destroy();
  76. // });
  77. //
  78. // var size = this.app.content.getSize();
  79. // var y = (size.y - 262)/2;
  80. // var x = (size.x - 828)/2;
  81. // if (y<0) y=0;
  82. // if (x<0) x=0;
  83. // createTemplateAreaNode.setStyles({
  84. // "top": ""+y+"px",
  85. // "left": ""+x+"px"
  86. // });
  87. //
  88. //},
  89. _createElement: function(e){
  90. this.formTemplateList = null;
  91. this.defalutFormTemplateList = null;
  92. var _self = this;
  93. MWF.requireApp("cms.ColumnManager", "widget.CMSFormTemplateSelector", null, false);
  94. new MWF.xApplication.cms.ColumnManager.CMSFormTemplateSelector(this.app, {
  95. onSelectDefaultForm: function (template) {
  96. layout.desktop.getFormDesignerStyle(function () {
  97. var options = {
  98. "style": layout.desktop.formDesignerStyle,
  99. "template": template,
  100. "application":{
  101. "name": _self.app.options.application.name,
  102. "id": _self.app.options.application.id
  103. },
  104. "onQueryLoad": function () {
  105. this.actions = _self.app.restActions;
  106. this.application = _self.app.options.application;
  107. },
  108. "onPostSave": function () {
  109. _self.reload();
  110. }
  111. };
  112. layout.desktop.openApplication(e, "cms.FormDesigner", options);
  113. }.bind(this));
  114. },
  115. onSelectForm: function (template) {
  116. layout.desktop.getFormDesignerStyle(function () {
  117. var options = {
  118. "style": layout.desktop.formDesignerStyle,
  119. "templateId": template,
  120. "application":{
  121. "name": _self.app.options.application.name,
  122. "id": _self.app.options.application.id
  123. },
  124. "onQueryLoad": function () {
  125. this.actions = _self.app.restActions;
  126. this.application = _self.app.options.application;
  127. },
  128. "onPostSave": function () {
  129. _self.reload();
  130. }
  131. };
  132. layout.desktop.openApplication(e, "cms.FormDesigner", options);
  133. }.bind(this));
  134. }
  135. }).load();
  136. },
  137. showDeleteAction: function(){
  138. if (!this.deleteItemsAction){
  139. this.deleteItemsAction = new Element("div", {
  140. "styles": this.css.deleteItemsAction,
  141. "text": this.app.lp.deleteItems
  142. }).inject(this.node);
  143. this.deleteItemsAction.fade("in");
  144. this.deleteItemsAction.position({
  145. relativeTo: this.elementContentListNode
  146. });
  147. this.deleteItemsAction.addEvent("click", function(){
  148. var _self = this;
  149. this.app.confirm("warn", this.deleteItemsAction, MWF.CMSCM.LP.form.deleteFormTitle, MWF.CMSCM.LP.form.deleteForm, 300, 120, function(){
  150. _self.deleteItems();
  151. this.close();
  152. }, function(){
  153. this.close();
  154. });
  155. }.bind(this));
  156. }
  157. },
  158. _loadItemDataList: function(callback){
  159. this.app.restActions.listForm(this.app.options.column.id,callback);
  160. },
  161. _getItemObject: function(item, index){
  162. return new MWF.xApplication.cms.ColumnManager.FormExplorer.Form(this, item, {index:index})
  163. },
  164. setTooltip: function(){
  165. this.options.tooltip = {
  166. "create": MWF.CMSCM.LP.form.create,
  167. "search": MWF.CMSCM.LP.form.search,
  168. "searchText": MWF.CMSCM.LP.form.searchText,
  169. "noElement": MWF.CMSCM.LP.form.noFormNoticeText
  170. };
  171. },
  172. deleteItems: function(){
  173. while (this.deleteMarkItems.length){
  174. var item = this.deleteMarkItems.shift();
  175. if (this.deleteMarkItems.length){
  176. item.deleteForm();
  177. }else{
  178. item.deleteForm(function(){
  179. // this.reloadItems();
  180. this.hideDeleteAction();
  181. this.reload();
  182. }.bind(this));
  183. }
  184. }
  185. },
  186. keyCopy: function(e){
  187. if (this.selectMarkItems.length){
  188. var items = [];
  189. var i = 0;
  190. var checkItems = function(e){
  191. if (i>=this.selectMarkItems.length){
  192. if (items.length){
  193. var str = JSON.encode(items);
  194. if (e){
  195. e.clipboardData.setData('text/plain', str);
  196. }else {
  197. window.clipboardData.setData("Text", str);
  198. }
  199. this.app.notice(this.app.lp.copyed, "success");
  200. }
  201. }
  202. }.bind(this);
  203. this.selectMarkItems.each(function(item){
  204. this.app.restActions.getForm(item.data.id, function(json){
  205. //this.app.restActions.listFormFieldWithForm(item.data.id, function(fieldJson){
  206. // var fieldList = [];
  207. // fieldJson.data.number.each(function(f){ fieldList.push({"dataType": "number", "name": f.name}) });
  208. // fieldJson.data.person.each(function(f){ fieldList.push({"dataType": "person", "name": f.name}) });
  209. // fieldJson.data.string.each(function(f){ fieldList.push({"dataType": "string", "name": f.name}) });
  210. //
  211. // json.data.fieldList = fieldList;
  212. //}.bind(this), null, false);
  213. json.data.elementType = "form";
  214. items.push(json.data);
  215. i++;
  216. checkItems(e);
  217. }.bind(this), null, false)
  218. }.bind(this));
  219. }
  220. },
  221. keyPaste: function(e){
  222. var dataStr = "";
  223. if (e){
  224. dataStr = e.clipboardData.getData('text/plain');
  225. }else{
  226. dataStr = window.clipboardData.getData("Text");
  227. }
  228. var data = JSON.decode(dataStr);
  229. this.pasteItem(data, 0);
  230. },
  231. pasteItem: function(data, i){
  232. if (i<data.length){
  233. var item = data[i];
  234. if (item.elementType==="form"){
  235. this.saveItemAs(item, function(){
  236. i++;
  237. this.pasteItem(data, i);
  238. }.bind(this), function(){
  239. i++;
  240. this.pasteItem(data, i);
  241. }.bind(this), function(){
  242. this.reload();
  243. }.bind(this));
  244. }else{
  245. i++;
  246. this.pasteItem(data, i);
  247. }
  248. }else{
  249. this.reload();
  250. }
  251. },
  252. saveItemAs: function(data, success, failure, cancel){
  253. this.app.restActions.listForm(this.app.options.application.id, function(dJson){
  254. dJson.data = dJson.data || [];
  255. var i=1;
  256. var someItems = dJson.data.filter(function(d){ return d.id===data.id });
  257. if (someItems.length){
  258. var someItem = someItems[0];
  259. var lp = this.app.lp;
  260. var _self = this;
  261. var d1 = new Date().parse(data.updateTime);
  262. var d2 = new Date().parse(someItem.updateTime);
  263. var html = "<div>"+lp.copyConfirmInfor+"</div>";
  264. html += "<div style='overflow: hidden; margin: 10px 0px; padding: 5px 10px; background-color: #ffffff; border-radius: 6px;'><div style='font-weight: bold; font-size:14px;'>"+lp.copySource+" "+someItem.name+"</div>";
  265. html += "<div style='font-size:12px; color: #666666; float: left'>"+someItem.updateTime+"</div>" +
  266. //"<div style='font-size:12px; color: #666666; float: left; margin-left: 20px;'>"+MWF.name.cn(someItem.lastUpdatePerson)+"</div>" +
  267. "<div style='color: red; float: right;'>"+((d1>=d2) ? "": lp.copynew)+"</div></div>";
  268. html += "<div style='overflow: hidden; margin: 10px 0px; padding: 5px 10px; background-color: #ffffff; border-radius: 6px;'><div style='clear: both;font-weight: bold; font-size:14px;'>"+lp.copyTarget+" "+data.name+"</div>";
  269. html += "<div style='font-size:12px; color: #666666; float: left;'>"+data.updateTime+"</div>" +
  270. //"<div style='font-size:12px; color: #666666; float: left; margin-left: 20px;'>"+MWF.name.cn(data.lastUpdatePerson)+"</div>" +
  271. "<div style='color: red; float: right;'>"+((d1<=d2) ? "": lp.copynew)+"</div></div>";
  272. // html += "<>"
  273. this.app.dlg("inofr", null, this.app.lp.copyConfirmTitle, {"html": html}, 500, 290, [
  274. {
  275. "text": lp.copyConfirm_overwrite,
  276. "action": function(){_self.saveItemAsUpdate(someItem, data, success, failure);this.close();}
  277. },
  278. {
  279. "text": lp.copyConfirm_new,
  280. "action": function(){_self.saveItemAsNew(dJson, data, success, failure);this.close();}
  281. },
  282. {
  283. "text": lp.copyConfirm_skip,
  284. "action": function(){/*nothing*/ this.close(); if (success) success();}
  285. },
  286. {
  287. "text": lp.copyConfirm_cancel,
  288. "action": function(){this.close(); if (cancel) cancel();}
  289. }
  290. ]);
  291. }else{
  292. this.saveItemAsNew(dJson, data, success, failure)
  293. }
  294. }.bind(this), function(){if (failure) failure();}.bind(this));
  295. },
  296. saveItemAsUpdate: function(someItem, form, success, failure){
  297. var item = this.app.options.application;
  298. var pcdata = JSON.decode(MWF.decodeJsonString(form.data));
  299. var mobiledata = JSON.decode(MWF.decodeJsonString(form.mobileData));
  300. pcdata.id = someItem.id;
  301. pcdata.isNewForm = false;
  302. pcdata.json.id = someItem.id;
  303. pcdata.json.application = item.id;
  304. pcdata.json.applicationName = item.name;
  305. pcdata.json.name = someItem.name;
  306. pcdata.json.alias = someItem.alias;
  307. pcdata.json.appId = item.id;
  308. pcdata.json.appName = item.name;
  309. mobiledata.json.id = someItem.id;
  310. mobiledata.json.application = item.id;
  311. mobiledata.json.applicationName = item.name;
  312. mobiledata.applicationName = item.name;
  313. mobiledata.json.name = someItem.name;
  314. mobiledata.json.alias = someItem.alias;
  315. mobiledata.json.appId = item.id;
  316. mobiledata.json.appName = item.name;
  317. this.app.restActions.saveForm(pcdata, mobiledata, form.fieldList, function(){
  318. if (success) success();
  319. }.bind(this), function(){
  320. if (failure) failure();
  321. }.bind(this));
  322. },
  323. saveItemAsNew: function(formsJson, form, success, failure){
  324. var item = this.app.options.application;
  325. var id = item.id;
  326. var name = item.name;
  327. var pcdata = JSON.decode(MWF.decodeJsonString(form.data));
  328. var mobiledata = JSON.decode(MWF.decodeJsonString(form.mobileData));
  329. var oldName = pcdata.json.name;
  330. var i=1;
  331. while (formsJson.data.some(function(d){ return d.name==pcdata.json.name })){
  332. pcdata.json.name = oldName+"_copy"+i;
  333. mobiledata.json.name = oldName+"_copy"+i;
  334. i++;
  335. }
  336. pcdata.id = "";
  337. pcdata.isNewForm = true;
  338. pcdata.json.id = "";
  339. pcdata.json.application = id;
  340. pcdata.json.applicationName = name;
  341. pcdata.json.appId = id;
  342. pcdata.json.appName = name;
  343. pcdata.json.alias = "";
  344. mobiledata.json.id = "";
  345. mobiledata.json.application = id;
  346. mobiledata.json.applicationName = name;
  347. mobiledata.applicationName = name;
  348. mobiledata.json.appId = id;
  349. mobiledata.json.appName = name;
  350. mobiledata.json.alias = "";
  351. this.app.restActions.saveForm(pcdata, mobiledata, form.fieldList, function(){
  352. if (success) success();
  353. }.bind(this), function(){
  354. if (failure) failure();
  355. }.bind(this));
  356. }
  357. });
  358. MWF.xApplication.cms.ColumnManager.FormExplorer.Form = new Class({
  359. Extends: MWF.xApplication.cms.ColumnManager.Explorer.Item,
  360. _open: function(e){
  361. layout.desktop.getFormDesignerStyle(function(){
  362. var _self = this;
  363. var options = {
  364. "style": layout.desktop.formDesignerStyle,
  365. "appId": "cms.FormDesigner"+_self.data.id,
  366. "id": _self.data.id,
  367. // "application": _self.explorer.app.options.column.id,
  368. "application":{
  369. "name": _self.explorer.app.options.column.name,
  370. "id": _self.explorer.app.options.column.id
  371. },
  372. "onQueryLoad": function(){
  373. this.actions = _self.explorer.actions;
  374. this.category = _self;
  375. this.options.id = _self.data.id;
  376. this.column = _self.explorer.app.options.column;
  377. this.application = _self.explorer.app.options.column;
  378. }
  379. };
  380. this.explorer.app.desktop.openApplication(e, "cms.FormDesigner", options);
  381. }.bind(this));
  382. },
  383. _getIcon: function(){
  384. var x = (Math.random()*33).toInt();
  385. return "process_icon_"+x+".png";
  386. },
  387. _getLnkPar: function(){
  388. return {
  389. "icon": this.explorer.path+this.explorer.options.style+"/formIcon/lnk.png",
  390. "title": this.data.name,
  391. "par": "cms.FormDesigner#{\"id\": \""+this.data.id+"\"}"
  392. };
  393. },
  394. // deleteItem: function(e){
  395. // var _self = this;
  396. // this.explorer.app.confirm("info", e, this.explorer.app.lp.form.deleteFormTitle, this.explorer.app.lp.form.deleteForm, 320, 110, function(){
  397. // _self.deleteForm();
  398. // this.close();
  399. // },function(){
  400. // this.close();
  401. // });
  402. // },
  403. deleteForm: function(callback){
  404. this.explorer.app.restActions.removeForm(this.data.id, function(){
  405. this.node.destroy();
  406. if (callback) callback();
  407. }.bind(this));
  408. },
  409. saveItemAs: function(item) {
  410. var id = item.id;
  411. var name = item.name || item.appName;
  412. this.explorer.app.restActions.getForm(this.data.id, function (json) {
  413. var pcdata = JSON.decode(MWF.decodeJsonString(json.data.data));
  414. var mobiledata = JSON.decode(MWF.decodeJsonString(json.data.mobileData));
  415. pcdata.json.alias = "";
  416. mobiledata.json.alias = "";
  417. var oldName = pcdata.json.name;
  418. this.explorer.app.restActions.listForm(id, function (formsJson) {
  419. formsJson.data = formsJson.data || [];
  420. var i = 1;
  421. while (formsJson.data.some(function (d) {
  422. return d.name == pcdata.json.name
  423. })) {
  424. pcdata.json.name = oldName + "_copy" + i;
  425. mobiledata.json.name = oldName + "_copy" + i;
  426. i++;
  427. }
  428. pcdata.id = "";
  429. pcdata.isNewForm = true;
  430. pcdata.json.id = "";
  431. pcdata.json.application = id;
  432. pcdata.json.applicationName = name;
  433. pcdata.json.appId = id;
  434. pcdata.json.appName = name;
  435. mobiledata.json.id = "";
  436. mobiledata.json.application = id;
  437. mobiledata.applicationName = name;
  438. mobiledata.json.applicationName = name;
  439. mobiledata.json.appId = id;
  440. mobiledata.json.appName = name;
  441. //this.explorer.app.restActions.listFormFieldWithForm(this.data.id, function(fieldJson){
  442. // var fieldList = [];
  443. // if (fieldJson.data.number) fieldJson.data.number.each(function(f){ fieldList.push({"dataType": "number", "name": f.name}) });
  444. // if (fieldJson.data.person) fieldJson.data.person.each(function(f){ fieldList.push({"dataType": "person", "name": f.name}) });
  445. // if (fieldJson.data.string) fieldJson.data.string.each(function(f){ fieldList.push({"dataType": "string", "name": f.name}) });
  446. var fieldList = [];
  447. this.explorer.app.restActions.saveForm(pcdata, mobiledata, fieldList, function () {
  448. if (id == this.explorer.app.options.application.id) this.explorer.reload();
  449. }.bind(this));
  450. //}.bind(this));
  451. }.bind(this));
  452. }.bind(this));
  453. }
  454. });