FormExplorer.js 25 KB

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