Main.js 40 KB

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