Main.js 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013
  1. MWF.xApplication.process = MWF.xApplication.process || {};
  2. MWF.xApplication.process.ApplicationExplorer = MWF.xApplication.process.ApplicationExplorer || {};
  3. MWF.xDesktop.requireApp("process.ApplicationExplorer", "lp."+MWF.language, null, false);
  4. MWF.xApplication.process.ApplicationExplorer.Main = new Class({
  5. Extends: MWF.xApplication.Common.Main,
  6. Implements: [Options, Events],
  7. options: {
  8. "style": "default",
  9. "name": "process.ApplicationExplorer",
  10. "icon": "icon.png",
  11. "width": "1000",
  12. "height": "600",
  13. "title": MWF.xApplication.process.ApplicationExplorer.LP.title,
  14. "tooltip": {
  15. "cancel": MWF.xApplication.process.ApplicationExplorer.LP.application.action_cancel,
  16. "ok": MWF.xApplication.process.ApplicationExplorer.LP.application.action_ok,
  17. "create": MWF.xApplication.process.ApplicationExplorer.LP.application.create,
  18. "search": MWF.xApplication.process.ApplicationExplorer.LP.application.search,
  19. "searchText": MWF.xApplication.process.ApplicationExplorer.LP.application.searchText,
  20. "allCategory": MWF.xApplication.process.ApplicationExplorer.LP.application.allCategory,
  21. "unCategory": MWF.xApplication.process.ApplicationExplorer.LP.application.unCategory,
  22. "selectCategory": MWF.xApplication.process.ApplicationExplorer.LP.application.selectCategory,
  23. "nameLabel": MWF.xApplication.process.ApplicationExplorer.LP.application.name,
  24. "aliasLabel": MWF.xApplication.process.ApplicationExplorer.LP.application.alias,
  25. "descriptionLabel": MWF.xApplication.process.ApplicationExplorer.LP.application.description,
  26. "typeLabel": MWF.xApplication.process.ApplicationExplorer.LP.application.type,
  27. "iconLabel": MWF.xApplication.process.ApplicationExplorer.LP.application.icon,
  28. "createApplication_cancel_title": MWF.xApplication.process.ApplicationExplorer.LP.application.createApplication_cancel_title,
  29. "createApplication_cancel": MWF.xApplication.process.ApplicationExplorer.LP.application.createApplication_cancel,
  30. "inputApplicationName": MWF.xApplication.process.ApplicationExplorer.LP.application.inputApplicationName,
  31. "createApplicationSuccess": MWF.xApplication.process.ApplicationExplorer.LP.application.createApplicationSuccess,
  32. //"unCategory": MWF.xApplication.process.ApplicationExplorer.LP.application.unCategory,
  33. "unDescription": MWF.xApplication.process.ApplicationExplorer.LP.application.unDescription,
  34. "noProcess": MWF.xApplication.process.ApplicationExplorer.LP.application.noProcess,
  35. "noForm": MWF.xApplication.process.ApplicationExplorer.LP.application.noForm,
  36. "noApplication": MWF.xApplication.process.ApplicationExplorer.LP.application.noApplication,
  37. "noApplicationCreate": MWF.xApplication.process.ApplicationExplorer.LP.application.noApplicationCreate,
  38. "loadding": MWF.xApplication.process.ApplicationExplorer.LP.application.loadding
  39. }
  40. },
  41. onQueryLoad: function(){
  42. this.lp = MWF.xApplication.process.ApplicationExplorer.LP;
  43. this.currentContentNode = null;
  44. },
  45. loadApplication: function(callback){
  46. if (!this.restActions) this.restActions = MWF.Actions.get("x_processplatform_assemble_designer");
  47. //if (!this.restActions) this.restActions = new MWF.xApplication.process.ApplicationExplorer.Actions.RestActions();
  48. this.category = null;
  49. this.applications = [];
  50. this.deleteElements = [];
  51. this.createNode();
  52. this.loadApplicationContent();
  53. if (callback) callback();
  54. },
  55. loadApplicationContent: function(){
  56. // this.loadStartMenu();
  57. debugger;
  58. this.loadToolbar();
  59. this.loadCategoryArea();
  60. this.loadApplicationArea();
  61. },
  62. createNode: function(){
  63. this.content.setStyle("overflow", "hidden");
  64. this.node = new Element("div", {
  65. "styles": {"width": "100%", "height": "100%", "overflow": "hidden"}
  66. }).inject(this.content);
  67. },
  68. loadToolbar: function(){
  69. this.toolbarAreaNode = new Element("div", {
  70. "styles": this.css.toolbarAreaNode
  71. }).inject(this.node);
  72. this.createCreateAction();
  73. this.createSearchAction();
  74. },
  75. createCreateAction: function(){
  76. if (MWF.AC.isProcessPlatformCreator()){
  77. this.createApplicationNode = new Element("div", {
  78. "styles": this.css.createApplicationNode,
  79. "title": this.options.tooltip.create
  80. }).inject(this.toolbarAreaNode);
  81. this.createApplicationNode.addEvent("click", function(){
  82. this.createApplication();
  83. }.bind(this));
  84. }
  85. },
  86. createSearchAction: function(){
  87. this.searchApplicationNode = new Element("div", {
  88. "styles": this.css.searchApplicationNode,
  89. "text": this.options.title
  90. }).inject(this.toolbarAreaNode);
  91. //@todo
  92. this.searchApplicationNode.setStyles({
  93. "color": "#FFF",
  94. "font-size": "18px",
  95. "font-weight": "bold",
  96. "line-height": "50px",
  97. "text-align": "right",
  98. "margin-right": "20px"
  99. });
  100. return true;
  101. //this.searchApplicationButtonNode = new Element("div", {
  102. // "styles": this.css.searchApplicationButtonNode,
  103. // "title": this.options.tooltip.search
  104. //}).inject(this.searchApplicationNode);
  105. //
  106. //this.searchApplicationInputAreaNode = new Element("div", {
  107. // "styles": this.css.searchApplicationInputAreaNode
  108. //}).inject(this.searchApplicationNode);
  109. //
  110. //this.searchApplicationInputBoxNode = new Element("div", {
  111. // "styles": this.css.searchApplicationInputBoxNode
  112. //}).inject(this.searchApplicationInputAreaNode);
  113. //
  114. //this.searchApplicationInputNode = new Element("input", {
  115. // "type": "text",
  116. // "value": this.options.tooltip.searchText,
  117. // "styles": this.css.searchApplicationInputNode,
  118. // "x-webkit-speech": "1"
  119. //}).inject(this.searchApplicationInputBoxNode);
  120. //var _self = this;
  121. //this.searchApplicationInputNode.addEvents({
  122. // "focus": function(){
  123. // if (this.value==_self.options.tooltip.searchText) this.set("value", "");
  124. // },
  125. // "blur": function(){if (!this.value) this.set("value", _self.options.tooltip.searchText);},
  126. // "keydown": function(e){
  127. // if (e.code==13){
  128. // this.searchApplication();
  129. // e.preventDefault();
  130. // }
  131. // }.bind(this),
  132. // "selectstart": function(e){
  133. // e.preventDefault();
  134. // }
  135. //});
  136. //this.searchApplicationButtonNode.addEvent("click", function(){this.searchApplication();}.bind(this));
  137. },
  138. importApplication: function(e){
  139. MWF.xDesktop.requireApp("process.ApplicationExplorer", "Importer", function(){
  140. (new MWF.xApplication.process.ApplicationExplorer.Importer(this, e)).load();
  141. }.bind(this));
  142. },
  143. loadCategoryArea: function(){
  144. this.categoryAreaNode = new Element("div", {
  145. "styles": this.css.categoryAreaNode
  146. }).inject(this.node);
  147. //this.categoryActionNode = new Element("div", {
  148. // "styles": this.css.categoryActionNode,
  149. // "text": this.options.tooltip.selectCategory
  150. //}).inject(this.categoryAreaNode);
  151. if (MWF.AC.isProcessPlatformCreator()){
  152. this.importActionNode = new Element("div", {
  153. "styles": this.css.importActionNode,
  154. "text": this.lp.application.import
  155. }).inject(this.categoryAreaNode);
  156. this.importActionNode.addEvent("click", function(e){
  157. this.importApplication(e);
  158. }.bind(this));
  159. }
  160. this.categoryListAreaNode = new Element("div", {
  161. "styles": this.css.categoryListAreaNode
  162. }).inject(this.categoryAreaNode);
  163. this.createAllCategoryItemNode();
  164. this.createCategoryNodes();
  165. //this.createCategoryItemNode("公文类");
  166. //this.createCategoryItemNode("工单类");
  167. //this.createCategoryItemNode("财务类");
  168. //this.createCategoryItemNode("合同类");
  169. //this.createCategoryItemNode("人力资源类");
  170. //this.createCategoryItemNode("固定资产类");
  171. //this.createCategoryItemNode("业务类");
  172. },
  173. createCategoryNodes: function(){
  174. this.restActions.listApplicationCategory(function(json){
  175. var emptyCategory = null;
  176. json.data.each(function(category){
  177. if (category.applicationCategory){
  178. this.createCategoryItemNode(category.applicationCategory, category.count);
  179. }else{
  180. emptyCategory = category;
  181. }
  182. }.bind(this));
  183. // if (emptyCategory) this.createCategoryItemNode()
  184. }.bind(this));
  185. },
  186. createAllCategoryItemNode: function(){
  187. var itemNode = new Element("div", {
  188. "styles": this.css.allCategoryItemNode,
  189. "text": this.options.tooltip.allCategory
  190. }).inject(this.categoryListAreaNode);
  191. itemNode.setStyles(this.css.allCategoryItemNode_current);
  192. this.category = itemNode;
  193. var _self = this;
  194. itemNode.addEvents({
  195. "click": function(){_self.clickAllCategoryNode(this)}
  196. });
  197. },
  198. createCategoryItemNode: function(text, count){
  199. var categoryName = text || this.options.tooltip.allCategory;
  200. var itemNode = new Element("div.categoryItem", {
  201. "styles": this.css.categoryItemNode,
  202. "text": (count) ? categoryName+" ("+count+") " : categoryName
  203. }).inject(this.categoryListAreaNode);
  204. itemNode.store("categoryName", categoryName);
  205. var _self = this;
  206. itemNode.addEvents({
  207. "mouseover": function(){if (_self.category != this) this.setStyles(_self.css.categoryItemNode_over);},
  208. "mouseout": function(){if (_self.category != this) this.setStyles(_self.css.categoryItemNode);},
  209. "click": function(){_self.clickCategoryNode(this)}
  210. });
  211. },
  212. createLoadding: function(){
  213. this.loaddingNode = new Element("div", {
  214. "styles": this.css.noApplicationNode,
  215. "text": this.options.tooltip.loadding
  216. }).inject(this.applicationContentNode);
  217. },
  218. removeLoadding: function(){
  219. if (this.loaddingNode) this.loaddingNode.destroy();
  220. },
  221. loadApplicationArea: function(){
  222. this.applicationAreaNode = new Element("div", {
  223. "styles": this.css.applicationAreaNode
  224. }).inject(this.node);
  225. this.setApplicationAreaSize();
  226. this.addEvent("resize", this.setApplicationAreaSize);
  227. this.applicationContentNode = new Element("div", {
  228. "styles": this.css.applicationContentNode
  229. }).inject(this.applicationAreaNode);
  230. this.createLoadding();
  231. //MWF.require("MWF.widget.DragScroll", function(){
  232. // new MWF.widget.DragScroll(this.applicationAreaNode);
  233. //}.bind(this));
  234. //MWF.require("MWF.widget.ScrollBar", function(){
  235. // new MWF.widget.ScrollBar(this.applicationAreaNode);
  236. //}.bind(this));
  237. this.loadApplicationByCategory();
  238. this.setApplicationContentSize();
  239. },
  240. setApplicationAreaSize: function(){
  241. var nodeSize = this.node.getSize();
  242. var toolbarSize = this.toolbarAreaNode.getSize();
  243. var categorySize = this.categoryAreaNode.getSize();
  244. var y = nodeSize.y - toolbarSize.y - categorySize.y;
  245. this.applicationAreaNode.setStyle("height", ""+y+"px");
  246. if (this.applicationContentNode){
  247. var count = (nodeSize.x/282).toInt();
  248. var x = 282 * count;
  249. var m = (nodeSize.x-x)/2-10;
  250. this.applicationContentNode.setStyles({
  251. "width": ""+x+"px",
  252. "margin-left": ""+m+"px"
  253. });
  254. }
  255. },
  256. setApplicationContentSize: function(){
  257. var nodeSize = this.node.getSize();
  258. if (this.applicationContentNode){
  259. var count = (nodeSize.x/282).toInt();
  260. var x = 282 * count;
  261. var m = (nodeSize.x-x)/2-10;
  262. this.applicationContentNode.setStyles({
  263. "width": ""+x+"px",
  264. "margin-left": ""+m+"px"
  265. });
  266. }
  267. },
  268. clearDeleteReady: function(){
  269. this.deleteElements.each(function(app){
  270. app.delAdctionNode.setStyles(this.css.applicationItemDelActionNode);
  271. app.node.setStyles(this.css.applicationItemNode);
  272. var bgcolor = app.topNode.retrieve("bgcolor");
  273. app.topNode.setStyle("background-color", bgcolor);
  274. app.readyDelete = false;
  275. }.bind(this));
  276. this.deleteElements = [];
  277. this.checkDeleteApplication();
  278. },
  279. clickAllCategoryNode: function(){
  280. var node = this.categoryListAreaNode.getFirst("div");
  281. var items = this.categoryListAreaNode.getElements(".categoryItem");
  282. node.setStyles(this.css.allCategoryItemNode_current);
  283. this.category = node;
  284. items.setStyles(this.css.categoryItemNode);
  285. this.loadApplicationByCategory(node);
  286. this.clearDeleteReady();
  287. },
  288. clickCategoryNode: function(item){
  289. var node = this.categoryListAreaNode.getFirst("div");
  290. node.setStyles(this.css.allCategoryItemNode);
  291. var items = this.categoryListAreaNode.getElements(".categoryItem");
  292. items.setStyles(this.css.categoryItemNode);
  293. item.setStyles(this.css.categoryItemNode_current);
  294. this.category = item;
  295. this.loadApplicationByCategory(item);
  296. },
  297. loadApplicationByCategory: function(item){
  298. debugger;
  299. var name = "";
  300. if (item){name = item.retrieve("categoryName", "")};
  301. this.restActions.listApplicationSummary(name, function(json){
  302. //this.restActions.listApplication(name, function(json){
  303. this.applicationContentNode.empty();
  304. if (json.data.length){
  305. //for (var i=0; i<15; i++){
  306. json.data.each(function(appData){
  307. var application = new MWF.xApplication.process.ApplicationExplorer.Application(this, appData);
  308. application.load();
  309. this.applications.push(application);
  310. }.bind(this));
  311. //}
  312. }else {
  313. if (MWF.AC.isProcessPlatformCreator()){
  314. var noApplicationNode = new Element("div", {
  315. "styles": this.css.noApplicationNode,
  316. "text": this.options.tooltip.noApplicationCreate
  317. }).inject(this.applicationContentNode);
  318. noApplicationNode.addEvent("click", function(){
  319. this.createApplication();
  320. }.bind(this));
  321. }else{
  322. var noApplicationNode = new Element("div", {
  323. "styles": this.css.noApplicationNode,
  324. "text": this.options.tooltip.noApplication
  325. }).inject(this.applicationContentNode);
  326. }
  327. }
  328. }.bind(this));
  329. },
  330. createApplication: function(){
  331. this.createApplicationCreateMarkNode();
  332. this.createApplicationCreateAreaNode();
  333. this.createApplicationCreateNode();
  334. this.applicationCreateAreaNode.inject(this.applicationCreateMarkNode, "after");
  335. this.applicationCreateAreaNode.fade("in");
  336. $("createApplicationName").focus();
  337. this.setApplicationCreateNodeSize();
  338. this.setApplicationCreateNodeSizeFun = this.setApplicationCreateNodeSize.bind(this);
  339. this.addEvent("resize", this.setApplicationCreateNodeSizeFun);
  340. },
  341. createApplicationCreateMarkNode: function(){
  342. this.applicationCreateMarkNode = new Element("div", {
  343. "styles": this.css.applicationCreateMarkNode,
  344. "events": {
  345. "mouseover": function(e){e.stopPropagation();},
  346. "mouseout": function(e){e.stopPropagation();}
  347. }
  348. }).inject(this.node, "after");
  349. },
  350. createApplicationCreateAreaNode: function(){
  351. this.applicationCreateAreaNode = new Element("div", {
  352. "styles": this.css.applicationCreateAreaNode
  353. });
  354. },
  355. createApplicationCreateNode: function(){
  356. this.applicationCreateNode = new Element("div", {
  357. "styles": this.css.applicationCreateNode
  358. }).inject(this.applicationCreateAreaNode);
  359. this.applicationCreateNewNode = new Element("div", {
  360. "styles": this.css.applicationCreateNewNode
  361. }).inject(this.applicationCreateNode);
  362. this.applicationCreateFormNode = new Element("div", {
  363. "styles": this.css.applicationCreateFormNode
  364. }).inject(this.applicationCreateNode);
  365. var html = "<table width=\"100%\" height=\"80%\" border=\"0\" cellPadding=\"0\" cellSpacing=\"0\">" +
  366. "<tr><td style=\"height: 30px; line-height: 30px; text-align: left; min-width: 80px; width:25%\">" +
  367. this.options.tooltip.nameLabel+":</td>" +
  368. "<td style=\"; text-align: right;\"><input type=\"text\" id=\"createApplicationName\" " +
  369. "style=\"width: 99%; border:1px solid #999; background-color:#FFF; border-radius: 3px; box-shadow: 0px 0px 6px #CCC; " +
  370. "height: 26px;\"/></td></tr>" +
  371. "<tr><td style=\"height: 30px; line-height: 30px; text-align: left\">"+this.options.tooltip.aliasLabel+":</td>" +
  372. "<td style=\"; text-align: right;\"><input type=\"text\" id=\"createApplicationAlias\" " +
  373. "style=\"width: 99%; border:1px solid #999; background-color:#FFF; border-radius: 3px; box-shadow: 0px 0px 6px #CCC; " +
  374. "height: 26px;\"/></td></tr>" +
  375. "<tr><td style=\"height: 30px; line-height: 30px; text-align: left\">"+this.options.tooltip.descriptionLabel+":</td>" +
  376. "<td style=\"; text-align: right;\"><input type=\"text\" id=\"createApplicationDescription\" " +
  377. "style=\"width: 99%; border:1px solid #999; background-color:#FFF; border-radius: 3px; box-shadow: 0px 0px 6px #CCC; " +
  378. "height: 26px;\"/></td></tr>" +
  379. "<tr><td style=\"height: 30px; line-height: 30px; text-align: left\">"+this.options.tooltip.typeLabel+":</td>" +
  380. "<td style=\"; text-align: right;\"><input type=\"text\" id=\"createApplicationType\" " +
  381. "style=\"width: 99%; border:1px solid #999; background-color:#FFF; border-radius: 3px; box-shadow: 0px 0px 6px #CCC; " +
  382. "height: 26px;\"/></td></tr>" +
  383. //"<tr><td style=\"height: 30px; line-height: 30px; text-align: left\">"+this.options.tooltip.iconLabel+":</td>" +
  384. //"<td style=\"; text-align: right;\"><input type=\"text\" id=\"createApplicationType\" " +
  385. //"style=\"width: 99%; border:1px solid #999; background-color:#FFF; border-radius: 3px; box-shadow: 0px 0px 6px #CCC; " +
  386. //"height: 26px;\"/></td></tr>" +
  387. "</table>";
  388. this.applicationCreateFormNode.set("html", html);
  389. this.applicationCancelActionNode = new Element("div", {
  390. "styles": this.css.applicationCreateCancelActionNode,
  391. "text": this.options.tooltip.cancel
  392. }).inject(this.applicationCreateFormNode);
  393. this.applicationCreateOkActionNode = new Element("div", {
  394. "styles": this.css.applicationCreateOkActionNode,
  395. "text": this.options.tooltip.ok
  396. }).inject(this.applicationCreateFormNode);
  397. this.applicationCancelActionNode.addEvent("click", function(e){
  398. this.cancelCreateApplication(e);
  399. }.bind(this));
  400. this.applicationCreateOkActionNode.addEvent("click", function(e){
  401. this.okCreateApplication(e);
  402. }.bind(this));
  403. },
  404. setApplicationCreateNodeSize: function(){
  405. var size = this.node.getSize();
  406. var allSize = this.content.getSize();
  407. this.applicationCreateMarkNode.setStyles({
  408. "width": ""+allSize.x+"px",
  409. "height": ""+allSize.y+"px"
  410. });
  411. this.applicationCreateAreaNode.setStyles({
  412. "width": ""+size.x+"px",
  413. "height": ""+size.y+"px"
  414. });
  415. var hY = size.y*0.8;
  416. var mY = size.y*0.2/2;
  417. this.applicationCreateNode.setStyles({
  418. "height": ""+hY+"px",
  419. "margin-top": ""+mY+"px"
  420. });
  421. var iconSize = this.applicationCreateNewNode.getSize();
  422. var formHeight = hY*0.7;
  423. if (formHeight>250) formHeight = 250;
  424. var formMargin = hY*0.3/2-iconSize.y;
  425. this.applicationCreateFormNode.setStyles({
  426. "height": ""+formHeight+"px",
  427. "margin-top": ""+formMargin+"px"
  428. });
  429. },
  430. cancelCreateApplication: function(e){
  431. var _self = this;
  432. if ($("createApplicationName").get("value") || $("createApplicationAlias").get("value") || $("createApplicationDescription").get("value")){
  433. this.confirm("warn", e, this.options.tooltip.createApplication_cancel_title, this.options.tooltip.createApplication_cancel, "320px", "100px", function(){
  434. _self.applicationCreateMarkNode.destroy();
  435. _self.applicationCreateAreaNode.destroy();
  436. this.close();
  437. },function(){
  438. this.close();
  439. });
  440. }else{
  441. this.applicationCreateMarkNode.destroy();
  442. this.applicationCreateAreaNode.destroy();
  443. }
  444. },
  445. okCreateApplication: function(e){
  446. var data = {
  447. "name": $("createApplicationName").get("value"),
  448. "alias": $("createApplicationAlias").get("value"),
  449. "description": $("createApplicationDescription").get("value"),
  450. "applicationCategory": $("createApplicationType").get("value")
  451. };
  452. if (data.name){
  453. this.restActions.saveApplication(data, function(json){
  454. this.applicationCreateMarkNode.destroy();
  455. this.applicationCreateAreaNode.destroy();
  456. this.restActions.getApplication(json.data.id, function(json){
  457. json.data.processList = [];
  458. json.data.formList = [];
  459. var application = new MWF.xApplication.process.ApplicationExplorer.Application(this, json.data, {"where": "top"});
  460. application.load();
  461. this.applications.push(application);
  462. }.bind(this));
  463. this.notice(this.options.tooltip.createApplicationSuccess, "success");
  464. // this.app.processConfig();
  465. }.bind(this));
  466. }else{
  467. $("createApplicationName").setStyle("border-color", "red");
  468. $("createApplicationName").focus();
  469. this.notice(this.options.tooltip.inputApplicationName, "error");
  470. }
  471. },
  472. checkDeleteApplication: function(){
  473. if (this.deleteElements.length){
  474. if (!this.deleteElementsNode){
  475. this.deleteElementsNode = new Element("div", {
  476. "styles": this.css.deleteElementsNode,
  477. "text": this.lp.application.deleteElements
  478. }).inject(this.node);
  479. this.deleteElementsNode.position({
  480. relativeTo: this.applicationContentNode,
  481. position: "centerTop",
  482. edge: "centerbottom"
  483. });
  484. this.deleteElementsNode.addEvent("click", function(e){
  485. this.deleteSelectedElements(e);
  486. }.bind(this));
  487. }
  488. }else{
  489. if (this.deleteElementsNode){
  490. this.deleteElementsNode.destroy();
  491. this.deleteElementsNode = null;
  492. delete this.deleteElementsNode;
  493. }
  494. }
  495. },
  496. deleteSelectedElements: function(e){
  497. var _self = this;
  498. var applicationList = [];
  499. this.deleteElements.each(function(app){
  500. applicationList.push(app.data.name);
  501. });
  502. var confirmStr = this.lp.application.deleteElementsConfirm+" ("+applicationList.join("、")+") ";
  503. var check = "<br/><br/><input type=\"checkbox\" id=\"deleteApplicationAllCheckbox\" value=\"yes\">"+this.lp.application.deleteApplicationAllConfirm;
  504. confirmStr += check;
  505. this.confirm("infor", e, this.lp.application.deleteElementsTitle, {"html":confirmStr}, 530, 210, function(){
  506. confirmStr = _self.lp.application.deleteElementsConfirmAgain+"<br/><br/><font style='color:red; font-size:14px; font-weight: bold'>"+applicationList.join("、")+"</font>";
  507. var checkbox = this.content.getElement("#deleteApplicationAllCheckbox");
  508. var onlyRemoveNotCompleted = true;
  509. if (checkbox.checked){
  510. onlyRemoveNotCompleted = false;
  511. confirmStr = _self.lp.application.deleteElementsAllConfirmAgain+"<br/><br/><font style='color:red; font-size:14px; font-weight: bold'>"+applicationList.join("、")+"</font>";
  512. }
  513. this.close();
  514. _self.confirm("infor", e, _self.lp.application.deleteElementsTitle, {"html":confirmStr}, 420, 160, function(){
  515. var deleted = [];
  516. var doCount = 0;
  517. var readyCount = _self.deleteElements.length;
  518. var errorText = "";
  519. var complete = function(){
  520. if (doCount == readyCount){
  521. if (errorText){
  522. _self.app.notice(errorText, "error");
  523. }
  524. }
  525. };
  526. _self.deleteElements.each(function(application){
  527. application["delete"](onlyRemoveNotCompleted, function(){
  528. deleted.push(application);
  529. doCount++;
  530. if (_self.deleteElements.length==doCount){
  531. _self.deleteElements = _self.deleteElements.filter(function(item, index){
  532. return !deleted.contains(item);
  533. });
  534. _self.checkDeleteApplication();
  535. }
  536. complete();
  537. }, function(error){
  538. errorText = (errorText) ? errorText+"<br/><br/>"+error : error;
  539. doCount++;
  540. if (_self.deleteElements.length==doCount){
  541. _self.deleteElements = _self.deleteElements.filter(function(item, index){
  542. return !deleted.contains(item);
  543. });
  544. _self.checkDeleteApplication();
  545. }
  546. complete();
  547. });
  548. });
  549. this.close();
  550. }, function(){
  551. this.close();
  552. });
  553. this.close();
  554. }, function(){
  555. this.close();
  556. });
  557. }
  558. });
  559. MWF.xApplication.process.ApplicationExplorer.Application = new Class({
  560. Implements: [Options, Events],
  561. options: {
  562. "where": "bottom",
  563. "bgColor": ["#30afdc", "#e9573e", "#8dc153", "#9d4a9c", "#ab8465", "#959801", "#434343", "#ffb400", "#9e7698", "#00a489"]
  564. },
  565. initialize: function(app, data, options){
  566. this.setOptions(options);
  567. this.app = app;
  568. this.container = this.app.applicationContentNode;
  569. this.css = this.app.css;
  570. this.data = data;
  571. },
  572. load: function(){
  573. this.node = new Element("div", {
  574. "styles": this.css.applicationItemNode
  575. });
  576. this.loadTopNode();
  577. this.loadIconNode();
  578. this.loadDeleteAction();
  579. this.loadExportAction();
  580. this.loadTitleNode();
  581. this.loadNewNode();
  582. this.loadInforNode();
  583. this.loadProcessNode();
  584. this.loadFormNode();
  585. // this.loadDateNode();
  586. this.node.inject(this.container, this.options.where);
  587. },
  588. loadTopNode: function(){
  589. this.topNode = new Element("div", {
  590. "styles": this.css.applicationItemTopNode
  591. }).inject(this.node);
  592. this.topNode.setStyle("background-color", this.options.bgColor[(Math.random()*10).toInt()]);
  593. this.topNode.addEvent("click", function(e){
  594. this.openApplication(e);
  595. }.bind(this));
  596. },
  597. loadDeleteAction: function(){
  598. if (MWF.AC.isProcessPlatformCreator()){
  599. if ((this.data.creatorPerson==layout.desktop.session.user.name) || MWF.AC.isAdministrator()){
  600. this.delAdctionNode = new Element("div", {
  601. "styles": this.css.applicationItemDelActionNode
  602. }).inject(this.topNode);
  603. this.topNode.addEvents({
  604. "mouseover": function(){if (!this.readyDelete) this.delAdctionNode.fade("in"); }.bind(this),
  605. "mouseout": function(){if (!this.readyDelete) this.delAdctionNode.fade("out"); }.bind(this)
  606. });
  607. this.delAdctionNode.addEvent("click", function(e){
  608. this.checkDeleteApplication(e);
  609. e.stopPropagation();
  610. }.bind(this));
  611. }
  612. }
  613. },
  614. loadExportAction: function(){
  615. if (MWF.AC.isProcessPlatformCreator()) {
  616. if ((this.data.creatorPerson == layout.desktop.session.user.name) || MWF.AC.isAdministrator()) {
  617. this.exportAdctionNode = new Element("div", {
  618. "styles": this.css.applicationItemExportActionNode,
  619. "title": this.app.lp.application.export
  620. }).inject(this.topNode);
  621. this.topNode.addEvents({
  622. "mouseover": function () {
  623. if (!this.readyDelete) this.exportAdctionNode.fade("in");
  624. }.bind(this),
  625. "mouseout": function () {
  626. if (!this.readyDelete) this.exportAdctionNode.fade("out");
  627. }.bind(this)
  628. });
  629. this.exportAdctionNode.addEvent("click", function (e) {
  630. this.exportApplication(e);
  631. e.stopPropagation();
  632. }.bind(this));
  633. }
  634. }
  635. },
  636. exportApplication: function(){
  637. //var applicationjson = {
  638. // "application": {},
  639. // "processList": [],
  640. // "formList": [],
  641. // "dictionaryList": [],
  642. // "scriptList": []
  643. //};
  644. //this.app.restActions.getApplication(this.data.name, function(json){
  645. //
  646. //}
  647. MWF.xDesktop.requireApp("process.ApplicationExplorer", "Exporter", function(){
  648. (new MWF.xApplication.process.ApplicationExplorer.Exporter(this.app, this.data)).load();
  649. }.bind(this));
  650. },
  651. checkDeleteApplication: function(e){
  652. if (!this.readyDelete){
  653. this.delAdctionNode.setStyles(this.css.applicationItemDelActionNode_select);
  654. this.node.setStyles(this.css.applicationItemNode_select);
  655. var bgcolor = this.topNode.getStyle("background-color");
  656. this.topNode.store("bgcolor", bgcolor);
  657. this.topNode.setStyles(this.css.applicationItemTopNode_select);
  658. this.readyDelete = true;
  659. this.app.deleteElements.push(this);
  660. }else{
  661. this.delAdctionNode.setStyles(this.css.applicationItemDelActionNode);
  662. this.node.setStyles(this.css.applicationItemNode);
  663. var bgcolor = this.topNode.retrieve("bgcolor");
  664. this.topNode.setStyle("background-color", bgcolor);
  665. this.readyDelete = false;
  666. this.app.deleteElements.erase(this);
  667. }
  668. this.app.checkDeleteApplication();
  669. },
  670. "delete": function(onlyRemoveNotCompleted, success, failure){
  671. this._deleteElement(this.data.id, onlyRemoveNotCompleted, function(){
  672. this.destroy();
  673. if (success) success();
  674. }.bind(this), function(xhr, text, error){
  675. var errorText = error;
  676. if (xhr) errorText = xhr.responseText;
  677. // this.explorer.app.notice(errorText, "error", this.explorer.propertyContentNode, {x: "left", y:"top"});
  678. if (failure) failure(errorText);
  679. }.bind(this));
  680. },
  681. _deleteElement: function(id, success, failure){
  682. this.app.restActions.deleteApplication(id, success, failure);
  683. },
  684. destroy: function(){
  685. this.node.destroy();
  686. MWF.release(this);
  687. delete this;
  688. },
  689. loadNewNode: function(){
  690. if (this.data.updateTime){
  691. var createDate = Date.parse(this.data.createTime);
  692. var currentDate = new Date();
  693. if (createDate.diff(currentDate, "hour")<12) {
  694. this.newNode = new Element("div", {
  695. "styles": this.css.applicationItemNewNode
  696. }).inject(this.topNode);
  697. }
  698. }
  699. },
  700. loadIconNode: function(){
  701. this.iconNode = new Element("div", {
  702. "styles": this.css.applicationItemIconNode
  703. }).inject(this.topNode);
  704. if (this.data.icon){
  705. this.iconNode.setStyle("background-image", "url(data:image/png;base64,"+this.data.icon+")");
  706. }else{
  707. this.iconNode.setStyle("background-image", "url("+"/x_component_process_ApplicationExplorer/$Main/default/icon/application.png)")
  708. }
  709. this.iconNode.makeLnk({
  710. "par": this._getLnkPar()
  711. });
  712. },
  713. _getLnkPar: function(){
  714. var lnkIcon = "/x_component_process_ApplicationExplorer/$Main/default/lnk.png";
  715. if (this.data.icon) lnkIcon = "data:image/png;base64,"+this.data.icon;
  716. var appId = "process.ProcessManager"+this.data.id;
  717. return {
  718. "icon": lnkIcon,
  719. "title": this.data.name,
  720. "par": "process.ProcessManager#{\"application\": \""+this.data.id+"\", \"appId\": \""+appId+"\"}"
  721. };
  722. },
  723. loadTitleNode: function(){
  724. this.titleNode = new Element("div", {
  725. "styles": this.css.applicationItemTitileNode
  726. }).inject(this.topNode);
  727. this.nameNode = new Element("div", {
  728. "styles": this.css.applicationItemNameNode,
  729. "text": this.data.name,
  730. "title": this.data.name+"--"+(this.data.applicationCategory || this.app.options.tooltip.unCategory)
  731. }).inject(this.titleNode);
  732. this.typeNode = new Element("div", {
  733. "styles": this.css.applicationItemTypeNode,
  734. "text": "--"+(this.data.applicationCategory || this.app.options.tooltip.unCategory)
  735. }).inject(this.titleNode);
  736. },
  737. loadInforNode: function(){
  738. this.inforNode = new Element("div", {
  739. "styles": this.css.applicationItemInforNode
  740. }).inject(this.node);
  741. this.descriptionNode = new Element("div", {
  742. "styles": this.css.applicationItemDescriptionNode,
  743. "text": this.data.description || this.app.options.tooltip.unDescription
  744. }).inject(this.inforNode);
  745. },
  746. loadProcessNode: function(){
  747. this.processNode = new Element("div", {
  748. "styles": this.css.applicationItemElNode
  749. }).inject(this.inforNode);
  750. this.processTitleNode = new Element("div", {
  751. "styles": this.css.applicationItemElTitleNode,
  752. "text": "流程"
  753. }).inject(this.inforNode);
  754. this.processListNode = new Element("div", {
  755. "styles": this.css.applicationItemElListNode
  756. }).inject(this.inforNode);
  757. this.loadProcessList();
  758. },
  759. // loadProcessList: function(){
  760. // var _self = this;
  761. // this.app.restActions.listProcess(this.data.id, function(json){
  762. // var processList = json.data;
  763. //
  764. // if (processList.length) {
  765. // for (var i=0; i<(4).min(processList.length); i++){
  766. // var process = processList[i];
  767. // var processNode = new Element("div", {
  768. // "styles": this.css.listItemNode,
  769. // "text": process.name
  770. // }).inject(this.processListNode);
  771. // processNode.store("processId", process.id);
  772. // var _self = this;
  773. // processNode.addEvents({
  774. // "click": function(e){debugger;_self.openProcess(this, e)},
  775. // "mouseover": function(){this.setStyle("color", "#3c5eed");},
  776. // "mouseout": function(){this.setStyle("color", "#666");}
  777. // });
  778. // }
  779. // }else{
  780. // var node = new Element("div", {
  781. // "text": this.app.options.tooltip.noProcess,
  782. // "styles": {"cursor": "pointer", "line-height": "30px"}
  783. // }).inject(this.processListNode);
  784. // node.addEvent("click", function(e){
  785. // this.createNewProcess(e);
  786. // }.bind(this));
  787. // }
  788. // }.bind(this));
  789. // // }.bind(this));
  790. // },
  791. loadProcessList: function(){
  792. // this.app.restActions.listProcess(this.data.id, function(json){
  793. if (this.data.processList.length) {
  794. // json.data.each(function(process){
  795. for (var i=0; i<(4).min(this.data.processList.length); i++){
  796. var process = this.data.processList[i];
  797. var processNode = new Element("div", {
  798. "styles": this.css.listItemNode,
  799. "text": process.name
  800. }).inject(this.processListNode);
  801. processNode.store("processId", process.id);
  802. var _self = this;
  803. processNode.addEvents({
  804. "click": function(e){_self.openProcess(this, e)},
  805. "mouseover": function(){this.setStyle("color", "#3c5eed");},
  806. "mouseout": function(){this.setStyle("color", "#666");}
  807. });
  808. }
  809. //}.bind(this));
  810. }else{
  811. var node = new Element("div", {
  812. "text": this.app.options.tooltip.noProcess,
  813. "styles": {"cursor": "pointer", "line-height": "30px"}
  814. }).inject(this.processListNode);
  815. node.addEvent("click", function(e){
  816. this.createNewProcess(e);
  817. }.bind(this));
  818. }
  819. // }.bind(this));
  820. },
  821. createNewProcess: function(e){
  822. this.openApplication(e, 1);
  823. },
  824. openProcess: function(node, e){
  825. var id = node.retrieve("processId");
  826. if (id){
  827. var _self = this;
  828. var options = {
  829. "onQueryLoad": function(){
  830. this.actions = _self.app.actions;
  831. //this.category = _self;
  832. this.options.id = id;
  833. this.application = _self.data;
  834. }
  835. };
  836. this.app.desktop.openApplication(e, "process.ProcessDesigner", options);
  837. }
  838. },
  839. loadFormNode: function(){
  840. this.formNode = new Element("div", {
  841. "styles": this.css.applicationItemElNode
  842. }).inject(this.inforNode);
  843. this.formTitleNode = new Element("div", {
  844. "styles": this.css.applicationItemElTitleNode,
  845. "text": "表单"
  846. }).inject(this.inforNode);
  847. this.formListNode = new Element("div", {
  848. "styles": this.css.applicationItemElListNode
  849. }).inject(this.inforNode);
  850. this.loadFormList();
  851. },
  852. // loadFormList: function(){
  853. // var _self = this;
  854. // this.app.restActions.listForm(this.data.id, function(json){
  855. // var formList = json.data;
  856. // if (formList.length){
  857. // for (var i=0; i<(4).min(formList.length); i++){
  858. // var form = formList[i];
  859. // var formNode = new Element("div", {
  860. // "styles": this.css.listItemNode,
  861. // "text": form.name
  862. // }).inject(this.formListNode);
  863. // formNode.store("formId", form.id);
  864. // var _self = this;
  865. // formNode.addEvents({
  866. // "click": function(e){_self.openForm(this, e)},
  867. // "mouseover": function(){this.setStyle("color", "#3c5eed");},
  868. // "mouseout": function(){this.setStyle("color", "#666");}
  869. // });
  870. // }
  871. // }else{
  872. // var node = new Element("div", {
  873. // "text": this.app.options.tooltip.noForm,
  874. // "styles": {"cursor": "pointer"}
  875. // }).inject(this.formListNode);
  876. // node.addEvent("click", function(e){
  877. // this.createNewForm(e);
  878. // }.bind(this));
  879. // }
  880. //
  881. // }.bind(this));
  882. // },
  883. loadFormList: function(){
  884. if (this.data.formList.length){
  885. for (var i=0; i<(4).min(this.data.formList.length); i++){
  886. var form = this.data.formList[i];
  887. var formNode = new Element("div", {
  888. "styles": this.css.listItemNode,
  889. "text": form.name
  890. }).inject(this.formListNode);
  891. formNode.store("formId", form.id);
  892. var _self = this;
  893. formNode.addEvents({
  894. "click": function(e){_self.openForm(this, e)},
  895. "mouseover": function(){this.setStyle("color", "#3c5eed");},
  896. "mouseout": function(){this.setStyle("color", "#666");}
  897. });
  898. }
  899. }else{
  900. var node = new Element("div", {
  901. "text": this.app.options.tooltip.noForm,
  902. "styles": {"cursor": "pointer"}
  903. }).inject(this.formListNode);
  904. node.addEvent("click", function(e){
  905. this.createNewForm(e);
  906. }.bind(this));
  907. }
  908. },
  909. createNewForm: function(e){
  910. this.openApplication(e, 0);
  911. },
  912. openForm: function(node, e){
  913. var id = node.retrieve("formId");
  914. if (id){
  915. var _self = this;
  916. var options = {
  917. "onQueryLoad": function(){
  918. this.actions = _self.app.actions;
  919. //this.category = _self;
  920. this.options.id = id;
  921. this.application = _self.data;
  922. }
  923. };
  924. this.app.desktop.openApplication(e, "process.FormDesigner", options);
  925. }
  926. },
  927. openApplication: function(e, navi){
  928. var appId = "process.ProcessManager"+this.data.id;
  929. if (this.app.desktop.apps[appId]){
  930. this.app.desktop.apps[appId].setCurrent();
  931. }else {
  932. this.app.desktop.openApplication(e, "process.ProcessManager", {
  933. "application": this.data,
  934. "appId": appId,
  935. "onQueryLoad": function(){
  936. this.status = {"navi": navi || null};
  937. }
  938. });
  939. }
  940. },
  941. loadDateNode: function(){
  942. this.dateNode = new Element("div", {
  943. "styles": this.css.applicationItemDateNode,
  944. "text": this.data.updateTime
  945. }).inject(this.inforNode);
  946. }
  947. });