Main.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. MWF.xDesktop.requireApp("process.ApplicationExplorer", "", null, false);
  2. MWF.xApplication.query.QueryExplorer.Main = new Class({
  3. Extends: MWF.xApplication.process.ApplicationExplorer.Main,
  4. Implements: [Options, Events],
  5. options: {
  6. "style": "default",
  7. "name": "query.QueryExplorer",
  8. "icon": "icon.png",
  9. "width": "1000",
  10. "height": "600",
  11. "title": MWF.QueryLP.title,
  12. "tooltip": {
  13. "cancel": MWF.QueryLP.application.action_cancel,
  14. "ok": MWF.QueryLP.application.action_ok,
  15. "create": MWF.QueryLP.application.create,
  16. "search": MWF.QueryLP.application.search,
  17. "searchText": MWF.QueryLP.application.searchText,
  18. "allCategory": MWF.QueryLP.application.allCategory,
  19. "unCategory": MWF.QueryLP.application.unCategory,
  20. "selectCategory": MWF.QueryLP.application.selectCategory,
  21. "nameLabel": MWF.QueryLP.application.name,
  22. "aliasLabel": MWF.QueryLP.application.alias,
  23. "descriptionLabel": MWF.QueryLP.application.description,
  24. "typeLabel": MWF.QueryLP.application.type,
  25. "iconLabel": MWF.QueryLP.application.icon,
  26. "createApplication_cancel_title": MWF.QueryLP.application.createApplication_cancel_title,
  27. "createApplication_cancel": MWF.QueryLP.application.createApplication_cancel,
  28. "inputApplicationName": MWF.QueryLP.application.inputApplicationName,
  29. "createApplicationSuccess": MWF.QueryLP.application.createApplicationSuccess,
  30. "unDescription": MWF.QueryLP.application.unDescription,
  31. "noPage": MWF.QueryLP.application.noPage,
  32. "noView": MWF.QueryLP.application.noView,
  33. "noStat": MWF.QueryLP.application.noStat,
  34. "noApplication": MWF.QueryLP.application.noApplication,
  35. "noApplicationCreate": MWF.QueryLP.application.noApplicationCreate,
  36. "loadding": MWF.QueryLP.application.loadding
  37. }
  38. },
  39. onQueryLoad: function(){
  40. this.lp = MWF.QueryLP;
  41. this.currentContentNode = null;
  42. },
  43. loadApplication: function(callback){
  44. if (!this.restActions) this.restActions = MWF.Actions.get("x_query_assemble_designer");
  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. loadApplicationByCategory: function(item){
  54. var name = "";
  55. if (item){name = item.retrieve("categoryName", "")}
  56. this.restActions.listApplicationSummary(name, function(json){
  57. this.applicationContentNode.empty();
  58. if (json.data.length){
  59. //for (var i=0; i<15; i++){
  60. json.data.each(function(appData){
  61. var application = new MWF.xApplication.query.QueryExplorer.Query(this, appData);
  62. application.load();
  63. this.applications.push(application);
  64. }.bind(this));
  65. //}
  66. }else {
  67. if (MWF.AC.isProcessPlatformCreator()){
  68. var noApplicationNode = new Element("div", {
  69. "styles": this.css.noApplicationNode,
  70. "text": this.options.tooltip.noApplicationCreate
  71. }).inject(this.applicationContentNode);
  72. noApplicationNode.addEvent("click", function(){
  73. this.createApplication();
  74. }.bind(this));
  75. }else{
  76. var noApplicationNode = new Element("div", {
  77. "styles": this.css.noApplicationNode,
  78. "text": this.options.tooltip.noApplication
  79. }).inject(this.applicationContentNode);
  80. }
  81. }
  82. }.bind(this));
  83. },
  84. importApplication: function(e){
  85. MWF.xDesktop.requireApp("query.QueryExplorer", "Importer", function(){
  86. (new MWF.xApplication.query.QueryExplorer.Importer(this, e)).load();
  87. }.bind(this));
  88. },
  89. okCreateApplication: function(e){
  90. var data = {
  91. "name": $("createApplicationName").get("value"),
  92. "alias": $("createApplicationAlias").get("value"),
  93. "description": $("createApplicationDescription").get("value"),
  94. "portalCategory": $("createApplicationType").get("value")
  95. };
  96. if (data.name){
  97. this.restActions.saveApplication(data, function(json){
  98. this.applicationCreateMarkNode.destroy();
  99. this.applicationCreateAreaNode.destroy();
  100. this.restActions.getApplication(json.data.id, function(json){
  101. json.data.processList = [];
  102. json.data.formList = [];
  103. var application = new MWF.xApplication.query.QueryExplorer.Query(this, json.data, {"where": "top"});
  104. application.load();
  105. this.applications.push(application);
  106. }.bind(this));
  107. this.notice(this.options.tooltip.createApplicationSuccess, "success");
  108. // this.app.processConfig();
  109. }.bind(this));
  110. }else{
  111. $("createApplicationName").setStyle("border-color", "red");
  112. $("createApplicationName").focus();
  113. this.notice(this.options.tooltip.inputApplicationName, "error");
  114. }
  115. },
  116. createCategoryNodes: function(){
  117. this.restActions.listApplicationCategory(function(json){
  118. var emptyCategory = null;
  119. json.data.each(function(category){
  120. if (category.name){
  121. this.createCategoryItemNode(category.name, category.count);
  122. }else{
  123. emptyCategory = category;
  124. }
  125. }.bind(this));
  126. // if (emptyCategory) this.createCategoryItemNode()
  127. }.bind(this));
  128. },
  129. deleteSelectedElements: function(e){
  130. var _self = this;
  131. var applicationList = [];
  132. this.deleteElements.each(function(app){
  133. applicationList.push(app.data.name);
  134. });
  135. var confirmStr = this.lp.application.deleteElementsConfirm+" ("+applicationList.join("、")+") ";
  136. //confirmStr += check;
  137. this.confirm("infor", e, this.lp.application.deleteElementsTitle, {"html":confirmStr}, 530, 210, function(){
  138. confirmStr = _self.lp.application.deleteElementsConfirmAgain+"<br/><br/><font style='color:red; font-size:14px; font-weight: bold'>"+applicationList.join("、")+"</font>";
  139. // var checkbox = this.content.getElement("#deleteApplicationAllCheckbox");
  140. //
  141. // var onlyRemoveNotCompleted = true;
  142. // if (checkbox.checked){
  143. // onlyRemoveNotCompleted = false;
  144. // confirmStr = _self.lp.application.deleteElementsAllConfirmAgain+"<br/><br/><font style='color:red; font-size:14px; font-weight: bold'>"+applicationList.join("、")+"</font>";
  145. // }
  146. this.close();
  147. _self.confirm("infor", e, _self.lp.application.deleteElementsTitle, {"html":confirmStr}, 500, 200, function(){
  148. var deleted = [];
  149. var doCount = 0;
  150. var readyCount = _self.deleteElements.length;
  151. var errorText = "";
  152. var complete = function(){
  153. if (doCount == readyCount){
  154. if (errorText){
  155. _self.app.notice(errorText, "error");
  156. }
  157. }
  158. };
  159. _self.deleteElements.each(function(application){
  160. application["delete"]("", function(){
  161. deleted.push(application);
  162. doCount++;
  163. if (_self.deleteElements.length==doCount){
  164. _self.deleteElements = _self.deleteElements.filter(function(item, index){
  165. return !deleted.contains(item);
  166. });
  167. _self.checkDeleteApplication();
  168. }
  169. complete();
  170. }, function(error){
  171. errorText = (errorText) ? errorText+"<br/><br/>"+error : error;
  172. doCount++;
  173. if (_self.deleteElements.length==doCount){
  174. _self.deleteElements = _self.deleteElements.filter(function(item, index){
  175. return !deleted.contains(item);
  176. });
  177. _self.checkDeleteApplication();
  178. }
  179. complete();
  180. });
  181. });
  182. this.close();
  183. }, function(){
  184. this.close();
  185. });
  186. this.close();
  187. }, function(){
  188. this.close();
  189. });
  190. }
  191. });
  192. MWF.xApplication.query.QueryExplorer.Query = new Class({
  193. Extends: MWF.xApplication.process.ApplicationExplorer.Application,
  194. Implements: [Options, Events],
  195. options: {
  196. "where": "bottom",
  197. "bgColor": ["#30afdc", "#e9573e", "#8dc153", "#9d4a9c", "#ab8465", "#959801", "#434343", "#ffb400", "#9e7698", "#00a489"]
  198. },
  199. load: function(){
  200. this.node = new Element("div", {
  201. "styles": this.css.applicationItemNode
  202. });
  203. this.loadTopNode();
  204. this.loadIconNode();
  205. this.loadDeleteAction();
  206. this.loadExportAction();
  207. this.loadTitleNode();
  208. this.loadNewNode();
  209. this.loadInforNode();
  210. this.loadViewNode();
  211. this.loadStatNode();
  212. //this.loadFormNode();
  213. this.node.inject(this.container, this.options.where);
  214. },
  215. loadIconNode: function(){
  216. this.iconNode = new Element("div", {
  217. "styles": this.css.applicationItemIconNode
  218. }).inject(this.topNode);
  219. if (this.data.icon){
  220. this.iconNode.setStyle("background-image", "url(data:image/png;base64,"+this.data.icon+")");
  221. }else{
  222. this.iconNode.setStyle("background-image", "url("+"/x_component_query_QueryExplorer/$Main/default/icon/application.png)")
  223. }
  224. this.iconNode.makeLnk({
  225. "par": this._getLnkPar()
  226. });
  227. },
  228. exportApplication: function(){
  229. MWF.xDesktop.requireApp("query.QueryExplorer", "Exporter", function(){
  230. (new MWF.xApplication.query.QueryExplorer.Exporter(this.app, this.data)).load();
  231. }.bind(this));
  232. },
  233. _deleteElement: function(id, onlyRemoveNotCompleted, success, failure){
  234. this.app.restActions.deleteApplication(id, success, failure);
  235. },
  236. _getLnkPar: function(){
  237. var lnkIcon = "/x_component_query_QueryExplorer/$Main/default/lnk.png";
  238. if (this.data.icon) lnkIcon = "data:image/png;base64,"+this.data.icon;
  239. var appId = "query.QueryManager"+this.data.id;
  240. return {
  241. "icon": lnkIcon,
  242. "title": this.data.name,
  243. "par": "query.QueryManager#{\"application\": \""+this.data.id+"\", \"appId\": \""+appId+"\"}"
  244. };
  245. },
  246. loadViewNode: function(){
  247. this.viewNode = new Element("div", {
  248. "styles": this.css.applicationItemElNode
  249. }).inject(this.inforNode);
  250. this.viewTitleNode = new Element("div", {
  251. "styles": this.css.applicationItemElTitleNode,
  252. "text": this.app.lp.view
  253. }).inject(this.inforNode);
  254. this.viewListNode = new Element("div", {
  255. "styles": this.css.applicationItemElListNode
  256. }).inject(this.inforNode);
  257. this.loadViewList();
  258. },
  259. loadViewList: function(){
  260. if (this.data.viewList && this.data.viewList.length) {
  261. for (var i=0; i<(4).min(this.data.viewList.length); i++){
  262. var view = this.data.viewList[i];
  263. var viewNode = new Element("div", {
  264. "styles": this.css.listItemNode,
  265. "text": view.name
  266. }).inject(this.viewListNode);
  267. viewNode.store("viewId", view.id);
  268. var _self = this;
  269. viewNode.addEvents({
  270. "click": function(e){_self.openView(this, e)},
  271. "mouseover": function(){this.setStyle("color", "#3c5eed");},
  272. "mouseout": function(){this.setStyle("color", "#666");}
  273. });
  274. }
  275. }else{
  276. var node = new Element("div", {
  277. "text": this.app.options.tooltip.noView,
  278. "styles": {"cursor": "pointer", "line-height": "30px"}
  279. }).inject(this.viewListNode);
  280. node.addEvent("click", function(e){
  281. this.createNewView(e);
  282. }.bind(this));
  283. }
  284. // }.bind(this));
  285. },
  286. openView: function(node, e){
  287. var id = node.retrieve("viewId");
  288. if (id){
  289. var _self = this;
  290. var options = {
  291. "onQueryLoad": function(){
  292. this.actions = _self.app.actions;
  293. //this.category = _self;
  294. this.options.id = id;
  295. this.application = _self.data;
  296. }
  297. };
  298. this.app.desktop.openApplication(e, "query.ViewDesigner", options);
  299. }
  300. },
  301. loadStatNode: function(){
  302. this.statNode = new Element("div", {
  303. "styles": this.css.applicationItemElNode
  304. }).inject(this.inforNode);
  305. this.statTitleNode = new Element("div", {
  306. "styles": this.css.applicationItemElTitleNode,
  307. "text": this.app.lp.stat
  308. }).inject(this.inforNode);
  309. this.statListNode = new Element("div", {
  310. "styles": this.css.applicationItemElListNode
  311. }).inject(this.inforNode);
  312. this.loadStatList();
  313. },
  314. loadStatList: function(){
  315. if (this.data.statList && this.data.statList.length) {
  316. for (var i=0; i<(4).min(this.data.statList.length); i++){
  317. var stat = this.data.statList[i];
  318. var statNode = new Element("div", {
  319. "styles": this.css.listItemNode,
  320. "text": stat.name
  321. }).inject(this.statListNode);
  322. statNode.store("statId", stat.id);
  323. var _self = this;
  324. statNode.addEvents({
  325. "click": function(e){_self.openStat(this, e)},
  326. "mouseover": function(){this.setStyle("color", "#3c5eed");},
  327. "mouseout": function(){this.setStyle("color", "#666");}
  328. });
  329. }
  330. }else{
  331. var node = new Element("div", {
  332. "text": this.app.options.tooltip.noStat,
  333. "styles": {"cursor": "pointer", "line-height": "30px"}
  334. }).inject(this.statListNode);
  335. node.addEvent("click", function(e){
  336. this.createNewStat(e);
  337. }.bind(this));
  338. }
  339. // }.bind(this));
  340. },
  341. openStat: function(node, e){
  342. var id = node.retrieve("statId");
  343. if (id){
  344. var _self = this;
  345. var options = {
  346. "onQueryLoad": function(){
  347. this.actions = _self.app.actions;
  348. //this.category = _self;
  349. this.options.id = id;
  350. this.application = _self.data;
  351. }
  352. };
  353. this.app.desktop.openApplication(e, "query.StatDesigner", options);
  354. }
  355. },
  356. createNewView: function(e){
  357. this.openApplication(e, 0);
  358. },
  359. createNewStat: function(e){
  360. this.openApplication(e, 1);
  361. },
  362. openApplication: function(e, navi){
  363. var appId = "query.QueryManager"+this.data.id;
  364. if (this.app.desktop.apps[appId]){
  365. this.app.desktop.apps[appId].setCurrent();
  366. }else {
  367. this.app.desktop.openApplication(e, "query.QueryManager", {
  368. "application": this.data,
  369. "appId": appId,
  370. "onQueryLoad": function(){
  371. this.status = {"navi": navi || null};
  372. }
  373. });
  374. }
  375. },
  376. openApplication: function(e, navi){
  377. var appId = "portal.PortalManager"+this.data.id;
  378. if (this.app.desktop.apps[appId]){
  379. this.app.desktop.apps[appId].setCurrent();
  380. }else {
  381. this.app.desktop.openApplication(e, "query.QueryManager", {
  382. "application": this.data,
  383. "appId": appId,
  384. "onQueryLoad": function(){
  385. this.status = {"navi": navi || null};
  386. }
  387. });
  388. }
  389. },
  390. loadDateNode: function(){
  391. this.dateNode = new Element("div", {
  392. "styles": this.css.applicationItemDateNode,
  393. "text": this.data.updateTime
  394. }).inject(this.inforNode);
  395. }
  396. });