Main.js 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014
  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 || category.portalCategory){
  178. this.createCategoryItemNode(category.applicationCategory || category.portalCategory, 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, 320, 100, 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. "offset": {"y": this.applicationAreaNode.getScroll().y}
  484. });
  485. this.deleteElementsNode.addEvent("click", function(e){
  486. this.deleteSelectedElements(e);
  487. }.bind(this));
  488. }
  489. }else{
  490. if (this.deleteElementsNode){
  491. this.deleteElementsNode.destroy();
  492. this.deleteElementsNode = null;
  493. delete this.deleteElementsNode;
  494. }
  495. }
  496. },
  497. deleteSelectedElements: function(e){
  498. var _self = this;
  499. var applicationList = [];
  500. this.deleteElements.each(function(app){
  501. applicationList.push(app.data.name);
  502. });
  503. var confirmStr = this.lp.application.deleteElementsConfirm+" ("+applicationList.join("、")+") ";
  504. var check = "<br/><br/><input type=\"checkbox\" id=\"deleteApplicationAllCheckbox\" value=\"yes\">"+this.lp.application.deleteApplicationAllConfirm;
  505. confirmStr += check;
  506. this.confirm("infor", e, this.lp.application.deleteElementsTitle, {"html":confirmStr}, 530, 250, function(){
  507. confirmStr = _self.lp.application.deleteElementsConfirmAgain+"<br/><br/><font style='color:red; font-size:14px; font-weight: bold'>"+applicationList.join("、")+"</font>";
  508. var checkbox = this.content.getElement("#deleteApplicationAllCheckbox");
  509. var onlyRemoveNotCompleted = true;
  510. if (checkbox.checked){
  511. onlyRemoveNotCompleted = false;
  512. confirmStr = _self.lp.application.deleteElementsAllConfirmAgain+"<br/><br/><font style='color:red; font-size:14px; font-weight: bold'>"+applicationList.join("、")+"</font>";
  513. }
  514. this.close();
  515. _self.confirm("infor", e, _self.lp.application.deleteElementsTitle, {"html":confirmStr}, 500, 200, function(){
  516. var deleted = [];
  517. var doCount = 0;
  518. var readyCount = _self.deleteElements.length;
  519. var errorText = "";
  520. var complete = function(){
  521. if (doCount == readyCount){
  522. if (errorText){
  523. _self.app.notice(errorText, "error");
  524. }
  525. }
  526. };
  527. _self.deleteElements.each(function(application){
  528. application["delete"](onlyRemoveNotCompleted, function(){
  529. deleted.push(application);
  530. doCount++;
  531. if (_self.deleteElements.length==doCount){
  532. _self.deleteElements = _self.deleteElements.filter(function(item, index){
  533. return !deleted.contains(item);
  534. });
  535. _self.checkDeleteApplication();
  536. }
  537. complete();
  538. }, function(error){
  539. errorText = (errorText) ? errorText+"<br/><br/>"+error : error;
  540. doCount++;
  541. if (_self.deleteElements.length==doCount){
  542. _self.deleteElements = _self.deleteElements.filter(function(item, index){
  543. return !deleted.contains(item);
  544. });
  545. _self.checkDeleteApplication();
  546. }
  547. complete();
  548. });
  549. });
  550. this.close();
  551. }, function(){
  552. this.close();
  553. });
  554. this.close();
  555. }, function(){
  556. this.close();
  557. });
  558. }
  559. });
  560. MWF.xApplication.process.ApplicationExplorer.Application = new Class({
  561. Implements: [Options, Events],
  562. options: {
  563. "where": "bottom",
  564. "bgColor": ["#30afdc", "#e9573e", "#8dc153", "#9d4a9c", "#ab8465", "#959801", "#434343", "#ffb400", "#9e7698", "#00a489"]
  565. },
  566. initialize: function(app, data, options){
  567. this.setOptions(options);
  568. this.app = app;
  569. this.container = this.app.applicationContentNode;
  570. this.css = this.app.css;
  571. this.data = data;
  572. },
  573. load: function(){
  574. this.node = new Element("div", {
  575. "styles": this.css.applicationItemNode
  576. });
  577. this.loadTopNode();
  578. this.loadIconNode();
  579. this.loadDeleteAction();
  580. this.loadExportAction();
  581. this.loadTitleNode();
  582. this.loadNewNode();
  583. this.loadInforNode();
  584. this.loadProcessNode();
  585. this.loadFormNode();
  586. // this.loadDateNode();
  587. this.node.inject(this.container, this.options.where);
  588. },
  589. loadTopNode: function(){
  590. this.topNode = new Element("div", {
  591. "styles": this.css.applicationItemTopNode
  592. }).inject(this.node);
  593. this.topNode.setStyle("background-color", this.options.bgColor[(Math.random()*10).toInt()]);
  594. this.topNode.addEvent("click", function(e){
  595. this.openApplication(e);
  596. }.bind(this));
  597. },
  598. loadDeleteAction: function(){
  599. if (MWF.AC.isProcessPlatformCreator()){
  600. if ((this.data.creatorPerson==layout.desktop.session.user.name) || MWF.AC.isAdministrator()){
  601. this.delAdctionNode = new Element("div", {
  602. "styles": this.css.applicationItemDelActionNode
  603. }).inject(this.topNode);
  604. this.topNode.addEvents({
  605. "mouseover": function(){if (!this.readyDelete) this.delAdctionNode.fade("in"); }.bind(this),
  606. "mouseout": function(){if (!this.readyDelete) this.delAdctionNode.fade("out"); }.bind(this)
  607. });
  608. this.delAdctionNode.addEvent("click", function(e){
  609. this.checkDeleteApplication(e);
  610. e.stopPropagation();
  611. }.bind(this));
  612. }
  613. }
  614. },
  615. loadExportAction: function(){
  616. if (MWF.AC.isProcessPlatformCreator()) {
  617. if ((this.data.creatorPerson == layout.desktop.session.user.name) || MWF.AC.isAdministrator()) {
  618. this.exportAdctionNode = new Element("div", {
  619. "styles": this.css.applicationItemExportActionNode,
  620. "title": this.app.lp.application.export
  621. }).inject(this.topNode);
  622. this.topNode.addEvents({
  623. "mouseover": function () {
  624. if (!this.readyDelete) this.exportAdctionNode.fade("in");
  625. }.bind(this),
  626. "mouseout": function () {
  627. if (!this.readyDelete) this.exportAdctionNode.fade("out");
  628. }.bind(this)
  629. });
  630. this.exportAdctionNode.addEvent("click", function (e) {
  631. this.exportApplication(e);
  632. e.stopPropagation();
  633. }.bind(this));
  634. }
  635. }
  636. },
  637. exportApplication: function(){
  638. //var applicationjson = {
  639. // "application": {},
  640. // "processList": [],
  641. // "formList": [],
  642. // "dictionaryList": [],
  643. // "scriptList": []
  644. //};
  645. //this.app.restActions.getApplication(this.data.name, function(json){
  646. //
  647. //}
  648. MWF.xDesktop.requireApp("process.ApplicationExplorer", "Exporter", function(){
  649. (new MWF.xApplication.process.ApplicationExplorer.Exporter(this.app, this.data)).load();
  650. }.bind(this));
  651. },
  652. checkDeleteApplication: function(e){
  653. if (!this.readyDelete){
  654. this.delAdctionNode.setStyles(this.css.applicationItemDelActionNode_select);
  655. this.node.setStyles(this.css.applicationItemNode_select);
  656. var bgcolor = this.topNode.getStyle("background-color");
  657. this.topNode.store("bgcolor", bgcolor);
  658. this.topNode.setStyles(this.css.applicationItemTopNode_select);
  659. this.readyDelete = true;
  660. this.app.deleteElements.push(this);
  661. }else{
  662. this.delAdctionNode.setStyles(this.css.applicationItemDelActionNode);
  663. this.node.setStyles(this.css.applicationItemNode);
  664. var bgcolor = this.topNode.retrieve("bgcolor");
  665. this.topNode.setStyle("background-color", bgcolor);
  666. this.readyDelete = false;
  667. this.app.deleteElements.erase(this);
  668. }
  669. this.app.checkDeleteApplication();
  670. },
  671. "delete": function(onlyRemoveNotCompleted, success, failure){
  672. this._deleteElement(this.data.id, onlyRemoveNotCompleted, function(){
  673. this.destroy();
  674. if (success) success();
  675. }.bind(this), function(xhr, text, error){
  676. var errorText = error;
  677. if (xhr) errorText = xhr.responseText;
  678. // this.explorer.app.notice(errorText, "error", this.explorer.propertyContentNode, {x: "left", y:"top"});
  679. if (failure) failure(errorText);
  680. }.bind(this));
  681. },
  682. _deleteElement: function(id, onlyRemoveNotCompleted, success, failure){
  683. this.app.restActions.deleteApplication(id, onlyRemoveNotCompleted, success, failure);
  684. },
  685. destroy: function(){
  686. this.node.destroy();
  687. MWF.release(this);
  688. delete this;
  689. },
  690. loadNewNode: function(){
  691. if (this.data.updateTime){
  692. var createDate = Date.parse(this.data.createTime);
  693. var currentDate = new Date();
  694. if (createDate.diff(currentDate, "hour")<12) {
  695. this.newNode = new Element("div", {
  696. "styles": this.css.applicationItemNewNode
  697. }).inject(this.topNode);
  698. }
  699. }
  700. },
  701. loadIconNode: function(){
  702. this.iconNode = new Element("div", {
  703. "styles": this.css.applicationItemIconNode
  704. }).inject(this.topNode);
  705. if (this.data.icon){
  706. this.iconNode.setStyle("background-image", "url(data:image/png;base64,"+this.data.icon+")");
  707. }else{
  708. this.iconNode.setStyle("background-image", "url("+"/x_component_process_ApplicationExplorer/$Main/default/icon/application.png)")
  709. }
  710. this.iconNode.makeLnk({
  711. "par": this._getLnkPar()
  712. });
  713. },
  714. _getLnkPar: function(){
  715. var lnkIcon = "/x_component_process_ApplicationExplorer/$Main/default/lnk.png";
  716. if (this.data.icon) lnkIcon = "data:image/png;base64,"+this.data.icon;
  717. var appId = "process.ProcessManager"+this.data.id;
  718. return {
  719. "icon": lnkIcon,
  720. "title": this.data.name,
  721. "par": "process.ProcessManager#{\"application\": \""+this.data.id+"\", \"appId\": \""+appId+"\"}"
  722. };
  723. },
  724. loadTitleNode: function(){
  725. this.titleNode = new Element("div", {
  726. "styles": this.css.applicationItemTitileNode
  727. }).inject(this.topNode);
  728. this.nameNode = new Element("div", {
  729. "styles": this.css.applicationItemNameNode,
  730. "text": this.data.name,
  731. "title": this.data.name+"--"+((this.data.applicationCategory || this.data.portalCategory) || this.app.options.tooltip.unCategory)
  732. }).inject(this.titleNode);
  733. this.typeNode = new Element("div", {
  734. "styles": this.css.applicationItemTypeNode,
  735. "text": "--"+((this.data.applicationCategory || this.data.portalCategory) || this.app.options.tooltip.unCategory)
  736. }).inject(this.titleNode);
  737. },
  738. loadInforNode: function(){
  739. this.inforNode = new Element("div", {
  740. "styles": this.css.applicationItemInforNode
  741. }).inject(this.node);
  742. this.descriptionNode = new Element("div", {
  743. "styles": this.css.applicationItemDescriptionNode,
  744. "text": this.data.description || this.app.options.tooltip.unDescription
  745. }).inject(this.inforNode);
  746. },
  747. loadProcessNode: function(){
  748. this.processNode = new Element("div", {
  749. "styles": this.css.applicationItemElNode
  750. }).inject(this.inforNode);
  751. this.processTitleNode = new Element("div", {
  752. "styles": this.css.applicationItemElTitleNode,
  753. "text": "流程"
  754. }).inject(this.inforNode);
  755. this.processListNode = new Element("div", {
  756. "styles": this.css.applicationItemElListNode
  757. }).inject(this.inforNode);
  758. this.loadProcessList();
  759. },
  760. // loadProcessList: function(){
  761. // var _self = this;
  762. // this.app.restActions.listProcess(this.data.id, function(json){
  763. // var processList = json.data;
  764. //
  765. // if (processList.length) {
  766. // for (var i=0; i<(4).min(processList.length); i++){
  767. // var process = processList[i];
  768. // var processNode = new Element("div", {
  769. // "styles": this.css.listItemNode,
  770. // "text": process.name
  771. // }).inject(this.processListNode);
  772. // processNode.store("processId", process.id);
  773. // var _self = this;
  774. // processNode.addEvents({
  775. // "click": function(e){debugger;_self.openProcess(this, e)},
  776. // "mouseover": function(){this.setStyle("color", "#3c5eed");},
  777. // "mouseout": function(){this.setStyle("color", "#666");}
  778. // });
  779. // }
  780. // }else{
  781. // var node = new Element("div", {
  782. // "text": this.app.options.tooltip.noProcess,
  783. // "styles": {"cursor": "pointer", "line-height": "30px"}
  784. // }).inject(this.processListNode);
  785. // node.addEvent("click", function(e){
  786. // this.createNewProcess(e);
  787. // }.bind(this));
  788. // }
  789. // }.bind(this));
  790. // // }.bind(this));
  791. // },
  792. loadProcessList: function(){
  793. // this.app.restActions.listProcess(this.data.id, function(json){
  794. if (this.data.processList.length) {
  795. // json.data.each(function(process){
  796. for (var i=0; i<(4).min(this.data.processList.length); i++){
  797. var process = this.data.processList[i];
  798. var processNode = new Element("div", {
  799. "styles": this.css.listItemNode,
  800. "text": process.name
  801. }).inject(this.processListNode);
  802. processNode.store("processId", process.id);
  803. var _self = this;
  804. processNode.addEvents({
  805. "click": function(e){_self.openProcess(this, e)},
  806. "mouseover": function(){this.setStyle("color", "#3c5eed");},
  807. "mouseout": function(){this.setStyle("color", "#666");}
  808. });
  809. }
  810. //}.bind(this));
  811. }else{
  812. var node = new Element("div", {
  813. "text": this.app.options.tooltip.noProcess,
  814. "styles": {"cursor": "pointer", "line-height": "30px"}
  815. }).inject(this.processListNode);
  816. node.addEvent("click", function(e){
  817. this.createNewProcess(e);
  818. }.bind(this));
  819. }
  820. // }.bind(this));
  821. },
  822. createNewProcess: function(e){
  823. this.openApplication(e, 1);
  824. },
  825. openProcess: function(node, e){
  826. var id = node.retrieve("processId");
  827. if (id){
  828. var _self = this;
  829. var options = {
  830. "onQueryLoad": function(){
  831. this.actions = _self.app.actions;
  832. //this.category = _self;
  833. this.options.id = id;
  834. this.application = _self.data;
  835. }
  836. };
  837. this.app.desktop.openApplication(e, "process.ProcessDesigner", options);
  838. }
  839. },
  840. loadFormNode: function(){
  841. this.formNode = new Element("div", {
  842. "styles": this.css.applicationItemElNode
  843. }).inject(this.inforNode);
  844. this.formTitleNode = new Element("div", {
  845. "styles": this.css.applicationItemElTitleNode,
  846. "text": "表单"
  847. }).inject(this.inforNode);
  848. this.formListNode = new Element("div", {
  849. "styles": this.css.applicationItemElListNode
  850. }).inject(this.inforNode);
  851. this.loadFormList();
  852. },
  853. // loadFormList: function(){
  854. // var _self = this;
  855. // this.app.restActions.listForm(this.data.id, function(json){
  856. // var formList = json.data;
  857. // if (formList.length){
  858. // for (var i=0; i<(4).min(formList.length); i++){
  859. // var form = formList[i];
  860. // var formNode = new Element("div", {
  861. // "styles": this.css.listItemNode,
  862. // "text": form.name
  863. // }).inject(this.formListNode);
  864. // formNode.store("formId", form.id);
  865. // var _self = this;
  866. // formNode.addEvents({
  867. // "click": function(e){_self.openForm(this, e)},
  868. // "mouseover": function(){this.setStyle("color", "#3c5eed");},
  869. // "mouseout": function(){this.setStyle("color", "#666");}
  870. // });
  871. // }
  872. // }else{
  873. // var node = new Element("div", {
  874. // "text": this.app.options.tooltip.noForm,
  875. // "styles": {"cursor": "pointer"}
  876. // }).inject(this.formListNode);
  877. // node.addEvent("click", function(e){
  878. // this.createNewForm(e);
  879. // }.bind(this));
  880. // }
  881. //
  882. // }.bind(this));
  883. // },
  884. loadFormList: function(){
  885. if (this.data.formList.length){
  886. for (var i=0; i<(4).min(this.data.formList.length); i++){
  887. var form = this.data.formList[i];
  888. var formNode = new Element("div", {
  889. "styles": this.css.listItemNode,
  890. "text": form.name
  891. }).inject(this.formListNode);
  892. formNode.store("formId", form.id);
  893. var _self = this;
  894. formNode.addEvents({
  895. "click": function(e){_self.openForm(this, e)},
  896. "mouseover": function(){this.setStyle("color", "#3c5eed");},
  897. "mouseout": function(){this.setStyle("color", "#666");}
  898. });
  899. }
  900. }else{
  901. var node = new Element("div", {
  902. "text": this.app.options.tooltip.noForm,
  903. "styles": {"cursor": "pointer"}
  904. }).inject(this.formListNode);
  905. node.addEvent("click", function(e){
  906. this.createNewForm(e);
  907. }.bind(this));
  908. }
  909. },
  910. createNewForm: function(e){
  911. this.openApplication(e, 0);
  912. },
  913. openForm: function(node, e){
  914. var id = node.retrieve("formId");
  915. if (id){
  916. var _self = this;
  917. var options = {
  918. "onQueryLoad": function(){
  919. this.actions = _self.app.actions;
  920. //this.category = _self;
  921. this.options.id = id;
  922. this.application = _self.data;
  923. }
  924. };
  925. this.app.desktop.openApplication(e, "process.FormDesigner", options);
  926. }
  927. },
  928. openApplication: function(e, navi){
  929. var appId = "process.ProcessManager"+this.data.id;
  930. if (this.app.desktop.apps[appId]){
  931. this.app.desktop.apps[appId].setCurrent();
  932. }else {
  933. this.app.desktop.openApplication(e, "process.ProcessManager", {
  934. "application": this.data,
  935. "appId": appId,
  936. "onQueryLoad": function(){
  937. this.status = {"navi": navi || null};
  938. }
  939. });
  940. }
  941. },
  942. loadDateNode: function(){
  943. this.dateNode = new Element("div", {
  944. "styles": this.css.applicationItemDateNode,
  945. "text": this.data.updateTime
  946. }).inject(this.inforNode);
  947. }
  948. });