Main.js 43 KB

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