Main.js 40 KB

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