ViewExplorer.js 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787
  1. MWF.xApplication.cms = MWF.xApplication.cms || {};
  2. MWF.xApplication.cms.Module = MWF.xApplication.cms.Module || {};
  3. MWF.require("MWF.xAction.org.express.RestActions", null,false);
  4. MWF.xDesktop.requireApp("cms.Module", "lp."+MWF.language, null, false);
  5. MWF.xDesktop.requireApp("cms.Module", "package", null, false);
  6. MWF.xDesktop.requireApp("process.Application", "Viewer", null, false);
  7. MWF.xDesktop.requireApp("query.Query", "Viewer", null, false);
  8. MWF.xApplication.cms.Module.ViewExplorer = new Class({
  9. Extends: MWF.widget.Common,
  10. Implements: [Options, Events],
  11. options: {
  12. "style": "default",
  13. "isAdmin": false,
  14. "searchKey" : ""
  15. },
  16. initialize: function( node, app, columnData, categoryData, revealData, options, searchNode ){
  17. this.setOptions(options);
  18. this.node = node;
  19. this.app = app;
  20. this.columnData = columnData;
  21. this.categoryData = categoryData;
  22. this.revealData = revealData;
  23. this.searchNode = searchNode;
  24. this.path = "/x_component_cms_Module/$ViewExplorer/";
  25. this.cssPath = "/x_component_cms_Module/$ViewExplorer/"+this.options.style+"/css.wcss";
  26. this._loadCss();
  27. },
  28. load : function(){
  29. this.loadContentNode();
  30. if( this.revealData.viewType ){
  31. this.loadQuryView(); //QeuryView
  32. }else{
  33. this.loadView(); //CMSView
  34. }
  35. },
  36. loadContentNode: function(){
  37. this.elementContentNode = new Element("div", {
  38. "styles": this.css.elementContentNode
  39. }).inject(this.node);
  40. this.searchContainer = new Element("div",{
  41. "styles" : this.css.searchContainer
  42. }).inject( this.searchNode );
  43. this.app.addEvent("resize", function(){this.setContentSize();}.bind(this));
  44. },
  45. loadQuryView : function(){
  46. var viewJson = {
  47. "application": this.revealData.appName,
  48. "viewName": this.revealData.name,
  49. "isTitle": "yes",
  50. "select": "none",
  51. "titleStyles": this.css.normalThNode,
  52. "itemStyles": {},
  53. "isExpand": "no",
  54. "filter": []
  55. };
  56. this.view = new MWF.xApplication.cms.Module.QueryViewer(this.elementContentNode, viewJson, {
  57. "hasAction" : this.options.isAdmin,
  58. "resizeNode": true,
  59. "onSelect": function(){
  60. this.fireEvent("select");
  61. }.bind(this)
  62. }, this.app, this.searchContainer);
  63. this.setContentSize();
  64. },
  65. loadView : function(){
  66. var viewJson = {
  67. "application": this.columnData.id,
  68. "viewName": this.revealData.name,
  69. "isTitle": "yes",
  70. "select": "none", //none , single, multi
  71. "titleStyles": this.css.normalThNode,
  72. "isExpand": "no",
  73. "itemStyles": {}
  74. };
  75. this.view = new MWF.xApplication.cms.Module.Viewer(this.elementContentNode, viewJson, {
  76. "type" : "cms",
  77. "hasAction" : this.options.isAdmin,
  78. "actions": {
  79. "lookup": {"uri": "/jaxrs/queryview/flag/{view}/application/flag/{application}/execute", "method":"PUT"},
  80. "getView": {"uri": "/jaxrs/queryview/flag/{view}/application/flag/{application}"},
  81. "deleteDocument" : {"uri":"/jaxrs/document/{id}","method": "DELETE"}
  82. },
  83. "actionRoot": "x_cms_assemble_control",
  84. "resizeNode": true,
  85. "onSelect": function(){
  86. this.fireEvent("select");
  87. }.bind(this)
  88. }, this.app, this.searchContainer);
  89. this.setContentSize();
  90. },
  91. setContentSize: function(){
  92. var toolbarSize = this.toolbarNode ? this.toolbarNode.getSize() : {"x":0,"y":0};
  93. var titlebarSize = {"x":0,"y":0}; //this.app.titleBar ? this.app.titleBar.getSize() : {"x":0,"y":0};
  94. var nodeSize = this.app.node.getSize();
  95. var pt = 0; //this.elementContentNode.getStyle("padding-top").toFloat();
  96. var pb = 0; // this.elementContentNode.getStyle("padding-bottom").toFloat();
  97. var filterConditionSize = this.filterConditionNode ? this.filterConditionNode.getSize() : {"x":0,"y":0};
  98. var height = nodeSize.y-toolbarSize.y-pt-pb-filterConditionSize.y-titlebarSize.y;
  99. this.elementContentNode.setStyle("height", ""+height+"px");
  100. if( this.view )this.view.setContentHeight();
  101. }
  102. });
  103. MWF.xApplication.cms.Module.Viewer = new Class({
  104. Implements: [Options, Events],
  105. Extends: MWF.xApplication.process.Application.Viewer,
  106. options: {
  107. "style": "default",
  108. "hasAction" : false, //cxy add
  109. "resizeNode": true,
  110. "actions": {
  111. "lookup": {"uri": "/jaxrs/queryview/flag/{view}/application/flag/{application}/execute", "method":"PUT"},
  112. "getView": {"uri": "/jaxrs/queryview/flag/{view}/application/flag/{application}"},
  113. "listWorkByJob": {"uri": "/jaxrs/job/{job}/find/work/workcompleted"},
  114. "listTaskByWork": {"uri": "/jaxrs/work/{id}/assignment/manage"}
  115. },
  116. "actionRoot": "x_processplatform_assemble_surface"
  117. },
  118. initialize: function(container, json, options, app, searchContainer){
  119. this.setOptions(options);
  120. this.app = app;
  121. this.searchContainer = searchContainer;
  122. this.path = "/x_component_cms_Module/$ViewExplorer/";
  123. this.cssPath = "/x_component_cms_Module/$ViewExplorer/"+this.options.style+"/viewer.wcss";
  124. this._loadCss();
  125. this.lp = MWF.xApplication.process.Application.LP;
  126. this.container = $(container);
  127. this.json = json;
  128. this.viewJson = null;
  129. this.filterItems = [];
  130. this.searchStatus = "none"; //none, custom, default
  131. this.items = [];
  132. this.selectedItems = [];
  133. this.hideColumns = [];
  134. this.openColumns = [];
  135. this.gridJson = null;
  136. this.init(function(){
  137. this.load();
  138. }.bind(this));
  139. },
  140. createViewNode: function(data){
  141. this.viewAreaNode.empty();
  142. this.contentAreaNode = new Element("div", {"styles": this.css.contentAreaNode}).inject(this.viewAreaNode);
  143. this.viewTable = new Element("table", {
  144. "styles": this.css.viewTitleTableNode,
  145. "border": "0px",
  146. "cellPadding": "0",
  147. "cellSpacing": "0"
  148. }).inject(this.contentAreaNode);
  149. this.createLoadding();
  150. if (this.json.isTitle!=="no"){
  151. this.viewTitleLine = new Element("tr", {"styles": this.css.viewTitleLineNode}).inject(this.viewTable);
  152. //if (this.json.select==="single" || this.json.select==="multi") {
  153. this.selectTitleCell = new Element("td", {
  154. "styles": this.css.viewTitleCellNode
  155. }).inject(this.viewTitleLine);
  156. this.selectTitleCell.setStyle("width", "10px");
  157. if (this.json.titleStyles) this.selectTitleCell.setStyles(this.json.titleStyles);
  158. //}
  159. this.entries = {};
  160. this.viewJson.selectEntryList.each(function(column){
  161. this.entries[column.column] = column;
  162. if (!column.hideColumn){
  163. var viewCell = new Element("td", {
  164. "styles": this.css.viewTitleCellNode,
  165. "text": column.displayName
  166. }).inject(this.viewTitleLine);
  167. if (this.json.titleStyles) viewCell.setStyles(this.json.titleStyles);
  168. }else{
  169. this.hideColumns.push(column.column);
  170. }
  171. if (column.allowOpen) this.openColumns.push(column.column);
  172. }.bind(this));
  173. if( this.options.hasAction ){
  174. var viewCell = new Element("td", {
  175. "styles": this.css.viewTitleCellNode,
  176. "text": "操作"
  177. }).inject(this.viewTitleLine);
  178. viewCell.setStyle("width","40px");
  179. if (this.json.titleStyles) viewCell.setStyles(this.json.titleStyles);
  180. }
  181. this.lookup(data);
  182. }else{
  183. this.viewJson.selectEntryList.each(function(column){
  184. if (column.hideColumn) this.hideColumns.push(column.column);
  185. if (!column.allowOpen) this.openColumns.push(column.column);
  186. }.bind(this));
  187. this.lookup(data);
  188. }
  189. },
  190. loadLayout: function(){
  191. this.node = new Element("div", {"styles": this.css.node}).inject(this.container);
  192. this.searchAreaNode = new Element("div", {"styles": this.css.searchAreaNode}).inject(this.searchContainer || this.node );
  193. this.viewAreaNode = new Element("div", {"styles": this.css.viewAreaNode}).inject(this.node);
  194. },
  195. loadData: function(){
  196. if (this.gridJson.length){
  197. this.gridJson.each(function(line, i){
  198. this.items.push(new MWF.xApplication.cms.Module.Viewer.Item(this, line, null, i));
  199. }.bind(this));
  200. }
  201. },
  202. loadGroupData: function(){
  203. if (this.selectTitleCell){
  204. this.selectTitleCell.set("html", "<span style='font-family: Webdings'>"+"<img src='/x_component_process_Application/$Viewer/"+this.options.style+"/icon/expand.png'/>"+"</span>");
  205. this.selectTitleCell.setStyle("cursor", "pointer");
  206. this.selectTitleCell.addEvent("click", this.expandOrCollapseAll.bind(this));
  207. }
  208. if (this.gridJson.length){
  209. this.gridJson.each(function(data){
  210. this.items.push(new MWF.xApplication.cms.Module.Viewer.ItemCategory(this, data));
  211. }.bind(this));
  212. if (this.json.isExpand=="yes")this.expandOrCollapseAll();
  213. }
  214. },
  215. setContentHeight: function(){
  216. if( this.node && this.searchAreaNode && this.viewAreaNode ){
  217. var size = this.node.getSize();
  218. var searchSize = this.searchAreaNode.getSize();
  219. var h = size.y-searchSize.y;
  220. this.viewAreaNode.setStyle("height", ""+h+"px");
  221. }
  222. }
  223. });
  224. MWF.xApplication.cms.Module.Viewer.Item = new Class({
  225. Extends : MWF.xApplication.process.Application.Viewer.Item,
  226. load: function(){
  227. var _self = this;
  228. this.node = new Element("tr", {"styles": this.css.viewContentTrNode});
  229. if (this.prev){
  230. this.node.inject(this.prev.node, "after");
  231. }else{
  232. this.node.inject(this.view.viewTable);
  233. }
  234. this.node.addEvents({
  235. mouseover : function(){ this.setStyles(_self.css.viewContentTrNode_over) },
  236. mouseout : function(){ this.setStyles(_self.css.viewContentTrNode) }
  237. });
  238. //if (this.view.json.select==="single" || this.view.json.select==="multi"){
  239. this.selectTd = new Element("td", {"styles": this.css.viewContentTdNode}).inject(this.node);
  240. this.selectTd.setStyles({"cursor": "pointer"});
  241. if (this.view.json.itemStyles) this.selectTd.setStyles(this.view.json.itemStyles);
  242. //}
  243. Object.each(this.data.data, function(cell, k){
  244. if (this.view.hideColumns.indexOf(k)===-1){
  245. var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(this.node);
  246. if (k!== this.view.viewJson.groupEntry.column){
  247. var v = (this.view.entries[k].code) ? MWF.Macro.exec(this.view.entries[k].code, {"value": cell, "gridData": this.view.gridJson, "data": this.view.viewData, "entry": this.data}) : cell;
  248. td.set("text", v);
  249. }
  250. if (this.view.openColumns.indexOf(k)!==-1){
  251. this.setOpenWork(td)
  252. }
  253. if (this.view.json.itemStyles) td.setStyles(this.view.json.itemStyles);
  254. }
  255. }.bind(this));
  256. if( this.view.options.hasAction ){
  257. var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(this.node);
  258. this.loadActions( td );
  259. if (this.view.json.itemStyles) td.setStyles(this.view.json.itemStyles);
  260. }
  261. this.setEvent();
  262. },
  263. loadActions : function( container ){
  264. this.deleteNode = new Element("div", {"styles": this.css.actionDeleteNode, "title": "删除"}).inject(container);
  265. this.deleteNode.addEvents({
  266. "mouseover": function(){this.deleteNode.setStyles(this.css.actionDeleteNode_over);}.bind(this),
  267. "mouseout": function(){this.deleteNode.setStyles(this.css.actionDeleteNode);}.bind(this),
  268. "mousedown": function(){this.deleteNode.setStyles(this.css.actionDeleteNode_down);}.bind(this),
  269. "mouseup": function(){this.deleteNode.setStyles(this.css.actionDeleteNode_over);}.bind(this),
  270. "click": function(e){
  271. this.remove(e);
  272. e.stopPropagation();
  273. }.bind(this)
  274. });
  275. this.editNode = new Element("div", {"styles": this.css.actionEditNode, "title": "编辑"}).inject(container);
  276. this.editNode.addEvents({
  277. "mouseover": function(){this.editNode.setStyles(this.css.actionEditNode_over);}.bind(this),
  278. "mouseout": function(){this.editNode.setStyles(this.css.actionEditNode);}.bind(this),
  279. "mousedown": function(){this.editNode.setStyles(this.css.actionEditNode_down);}.bind(this),
  280. "mouseup": function(){this.editNode.setStyles(this.css.actionEditNode_over);}.bind(this),
  281. "click": function(e){
  282. this.editCMSDocument();
  283. e.stopPropagation();
  284. }.bind(this)
  285. });
  286. },
  287. setOpenWork: function(td){
  288. td.setStyle("cursor", "pointer");
  289. td.addEvent("click", function(){
  290. this.openCMSDocument()
  291. }.bind(this));
  292. },
  293. openCMSDocument : function( isEdited ){
  294. var appId = "cms.Document"+this.data.job;
  295. if (layout.desktop.apps[appId]){
  296. layout.desktop.apps[appId].setCurrent();
  297. }else {
  298. var options = {
  299. "documentId": this.data.job,
  300. "readonly" : !isEdited
  301. };
  302. layout.desktop.openApplication(null, "cms.Document", options);
  303. }
  304. },
  305. editCMSDocument : function(){
  306. this.openCMSDocument( true );
  307. },
  308. remove: function(e){
  309. var text = "删除后不能恢复,你确定要删除该文档?";
  310. var _self = this;
  311. this.node.setStyles(this.css.viewContentTrNode_delete);
  312. this.readyRemove = true;
  313. this.view.app.confirm("warn", e, "删除确认", text, 350, 120, function(){
  314. _self.removeCMSDocument(_self, false);
  315. this.close();
  316. }, function(){
  317. _self.node.setStyles(_self.css.viewContentTrNode );
  318. _self.readyRemove = false;
  319. this.close();
  320. });
  321. },
  322. removeCMSDocument: function(){
  323. var id = this.data.job;
  324. MWF.Actions.get("x_cms_assemble_control").removeDocument(id, function(json){
  325. //this.viewJson = JSON.decode(json.data.data);
  326. //this.json = Object.merge(this.json, json.data);
  327. this.readyRemove = false;
  328. this.node.destroy();
  329. this.view.app.notice("删除成功", "success");
  330. MWF.release(this);
  331. }.bind(this));
  332. }
  333. });
  334. MWF.xApplication.cms.Module.Viewer.ItemCategory = new Class({
  335. Extends : MWF.xApplication.process.Application.Viewer.ItemCategory,
  336. load: function(){
  337. this.node = new Element("tr", {"styles": this.css.viewContentTrNode}).inject(this.view.viewTable);
  338. //if (this.view.json.select==="single" || this.view.json.select==="multi"){
  339. this.selectTd = new Element("td", {"styles": this.css.viewContentCategoryTdNode}).inject(this.node);
  340. if (this.view.json.itemStyles) this.selectTd.setStyles(this.view.json.itemStyles);
  341. //}
  342. var colsapn = this.view.viewJson.selectEntryList.length;
  343. if( this.view.options.hasAction ){
  344. colsapn ++
  345. }
  346. this.categoryTd = new Element("td", {
  347. "styles": this.css.viewContentCategoryTdNode,
  348. "colspan": colsapn
  349. }).inject(this.node);
  350. this.groupColumn = null;
  351. for (var c = 0; c<this.view.viewJson.selectEntryList.length; c++){
  352. if (this.view.viewJson.selectEntryList[c].column === this.view.viewJson.groupEntry.column){
  353. this.groupColumn = this.view.viewJson.selectEntryList[c];
  354. break;
  355. }
  356. }
  357. if (this.groupColumn){
  358. var text = (this.groupColumn.code) ? MWF.Macro.exec(this.groupColumn.code, {"value": this.data.group, "gridData": this.view.gridJson, "data": this.view.viewData, "entry": this.data}) : this.data.group;
  359. }else{
  360. var text = this.data.group;
  361. }
  362. this.categoryTd.set("html", "<span style='font-family: Webdings'><img src='/x_component_process_Application/$Viewer/"+this.view.options.style+"/icon/expand.png'/></span> "+text);
  363. if (this.view.json.itemStyles) this.categoryTd.setStyles(this.view.json.itemStyles);
  364. this.setEvent();
  365. },
  366. expand: function(){
  367. this.items.each(function(item){
  368. item.node.setStyle("display", "table-row");
  369. }.bind(this));
  370. this.node.getElement("span").set("html", "<img src='/x_component_process_Application/$Viewer/"+this.view.options.style+"/icon/down.png'/>");
  371. if (!this.loadChild){
  372. //window.setTimeout(function(){
  373. this.data.list.each(function(line){
  374. this.items.push(new MWF.xApplication.cms.Module.Viewer.Item(this.view, line, this));
  375. }.bind(this));
  376. this.loadChild = true;
  377. //}.bind(this), 10);
  378. }
  379. }
  380. });
  381. MWF.xApplication.cms.Module.QueryViewer = new Class({
  382. Implements: [Options, Events],
  383. Extends: MWF.QViewer,
  384. options: {
  385. "style": "default",
  386. "hasAction" : false, //cxy add
  387. "resizeNode": true,
  388. "paging" : "scroll",
  389. "perPageCount" : 50
  390. },
  391. initialize: function(container, json, options, app, searchContainer){
  392. this.setOptions(options);
  393. this.app = app;
  394. this.searchContainer = searchContainer;
  395. this.path = "/x_component_cms_Module/$ViewExplorer/";
  396. this.cssPath = "/x_component_cms_Module/$ViewExplorer/"+this.options.style+"/viewer.wcss";
  397. this._loadCss();
  398. this.lp = MWF.xApplication.query.Query.LP;
  399. this.container = $(container);
  400. this.json = json;
  401. this.viewJson = null;
  402. this.filterItems = [];
  403. this.searchStatus = "none"; //none, custom, default
  404. this.items = [];
  405. this.selectedItems = [];
  406. this.hideColumns = [];
  407. this.openColumns = [];
  408. this.gridJson = null;
  409. this.init(function(){
  410. this.load();
  411. }.bind(this));
  412. },
  413. createViewNode: function(data){
  414. this.viewAreaNode.empty();
  415. this.contentAreaNode = new Element("div.contentAreaNode", {"styles": this.css.contentAreaNode}).inject(this.viewAreaNode);
  416. this.viewTable = new Element("table.viewTable", {
  417. "styles": this.css.viewTitleTableNode,
  418. "border": "0px",
  419. "cellPadding": "0",
  420. "cellSpacing": "0"
  421. }).inject(this.contentAreaNode);
  422. this.createLoadding();
  423. if (this.json.isTitle!=="no"){
  424. this.viewTitleLine = new Element("tr", {"styles": this.css.viewTitleLineNode}).inject(this.viewTable);
  425. //if (this.json.select==="single" || this.json.select==="multi") {
  426. this.selectTitleCell = new Element("td", {
  427. "styles": this.css.viewTitleCellNode
  428. }).inject(this.viewTitleLine);
  429. this.selectTitleCell.setStyle("width", "10px");
  430. if (this.json.titleStyles) this.selectTitleCell.setStyles(this.json.titleStyles);
  431. //}
  432. this.entries = {};
  433. this.viewJson.selectList.each(function(column){
  434. this.entries[column.column] = column;
  435. if (!column.hideColumn){
  436. var viewCell = new Element("td", {
  437. "styles": this.css.viewTitleCellNode,
  438. "text": column.displayName
  439. }).inject(this.viewTitleLine);
  440. var size = MWF.getTextSize(column.displayName, this.css.viewTitleCellNode);
  441. viewCell.setStyle("min-width", ""+size.x+"px");
  442. if (this.json.titleStyles) viewCell.setStyles(this.json.titleStyles);
  443. }else{
  444. this.hideColumns.push(column.column);
  445. }
  446. if (column.allowOpen) this.openColumns.push(column.column);
  447. }.bind(this));
  448. if( this.options.hasAction ){
  449. var viewCell = new Element("td", {
  450. "styles": this.css.viewTitleCellNode,
  451. "text": "操作"
  452. }).inject(this.viewTitleLine);
  453. viewCell.setStyle("width","40px");
  454. if (this.json.titleStyles) viewCell.setStyles(this.json.titleStyles);
  455. }
  456. this.lookup(data);
  457. }else{
  458. this.viewJson.selectList.each(function(column){
  459. if (column.hideColumn) this.hideColumns.push(column.column);
  460. if (!column.allowOpen) this.openColumns.push(column.column);
  461. }.bind(this));
  462. this.lookup(data);
  463. }
  464. },
  465. loadLayout: function(){
  466. this.node = new Element("div", {"styles": this.css.node}).inject(this.container);
  467. this.searchAreaNode = new Element("div", {"styles": this.css.searchAreaNode}).inject(this.searchContainer || this.node );
  468. this.viewAreaNode = new Element("div.viewAreaNode", {"styles": this.css.viewAreaNode}).inject(this.node);
  469. },
  470. //loadData: function(){
  471. // if (this.gridJson.length){
  472. // this.gridJson.each(function(line, i){
  473. // this.items.push(new MWF.xApplication.cms.Module.QueryViewer.Item(this, line, null, i));
  474. // }.bind(this));
  475. // }
  476. //},
  477. loadData: function(){
  478. if (this.gridJson.length){
  479. if( !this.options.paging ){
  480. this.gridJson.each(function(line, i){
  481. this.items.push(new MWF.xApplication.cms.Module.QueryViewer.Item(this, line, null, i));
  482. }.bind(this));
  483. }else{
  484. this.loadPaging();
  485. }
  486. }
  487. },
  488. loadPaging : function(){
  489. this.isItemsLoading = false;
  490. this.pageNumber = 0;
  491. this.isItemsLoaded = false;
  492. this.isSetedScroll = false;
  493. this.setScroll();
  494. this.loadDataByPaging()
  495. },
  496. setScroll : function(){
  497. if( this.options.paging && !this.isSetedScroll ){
  498. this.contentAreaNode.setStyle("overflow","auto");
  499. this.scrollContainerFun = function(){
  500. var scrollSize = this.contentAreaNode.getScrollSize();
  501. var clientSize = this.contentAreaNode.getSize();
  502. var scrollHeight = scrollSize.y - clientSize.y;
  503. //alert( "clientSize.y=" + clientSize.y + " scrollSize.y="+scrollSize.y + " this.contentAreaNode.scrollTop="+this.contentAreaNode.scrollTop);
  504. if (this.contentAreaNode.scrollTop + 150 > scrollHeight ) {
  505. if (!this.isItemsLoaded) this.loadDataByPaging();
  506. }
  507. }.bind(this);
  508. this.isSetedScroll = true;
  509. this.contentAreaNode.addEvent("scroll", this.scrollContainerFun )
  510. }
  511. },
  512. loadDataByPaging : function(){
  513. if( this.isItemsLoading )return;
  514. if( !this.isItemsLoaded ){
  515. var from = Math.min( this.pageNumber * this.options.perPageCount , this.gridJson.length);
  516. var to = Math.min( ( this.pageNumber + 1 ) * this.options.perPageCount + 1 , this.gridJson.length);
  517. this.isItemsLoading = true;
  518. for( var i = from; i<to; i++ ){
  519. this.items.push(new MWF.xApplication.cms.Module.QueryViewer.Item(this, this.gridJson[i], null, i));
  520. }
  521. this.isItemsLoading = false;
  522. this.pageNumber ++;
  523. if( to == this.gridJson.length )this.isItemsLoaded = true;
  524. }
  525. },
  526. loadGroupData: function(){
  527. if (this.selectTitleCell){
  528. this.selectTitleCell.set("html", "<span style='font-family: Webdings'>"+"<img src='/x_component_process_Application/$Viewer/"+this.options.style+"/icon/expand.png'/>"+"</span>");
  529. this.selectTitleCell.setStyle("cursor", "pointer");
  530. this.selectTitleCell.addEvent("click", this.expandOrCollapseAll.bind(this));
  531. }
  532. if (this.gridJson.length){
  533. this.gridJson.each(function(data){
  534. this.items.push(new MWF.xApplication.cms.Module.QueryViewer.ItemCategory(this, data));
  535. }.bind(this));
  536. if (this.json.isExpand=="yes")this.expandOrCollapseAll();
  537. }
  538. },
  539. setContentHeight: function(){
  540. if( this.node && this.searchAreaNode && this.viewAreaNode ){
  541. var size = this.node.getSize();
  542. var searchSize = this.searchAreaNode.getSize();
  543. var h = size.y-searchSize.y;
  544. this.viewAreaNode.setStyle("height", ""+h+"px");
  545. }
  546. }
  547. });
  548. MWF.xApplication.cms.Module.QueryViewer.Item = new Class({
  549. Extends : MWF.xApplication.query.Query.Viewer.Item,
  550. load: function(){
  551. var _self = this;
  552. this.node = new Element("tr", {"styles": this.css.viewContentTrNode});
  553. if (this.prev){
  554. this.node.inject(this.prev.node, "after");
  555. }else{
  556. this.node.inject(this.view.viewTable);
  557. }
  558. this.node.addEvents({
  559. mouseover : function(){ this.setStyles(_self.css.viewContentTrNode_over) },
  560. mouseout : function(){ this.setStyles(_self.css.viewContentTrNode) }
  561. });
  562. //if (this.view.json.select==="single" || this.view.json.select==="multi"){
  563. this.selectTd = new Element("td", {"styles": this.css.viewContentTdNode}).inject(this.node);
  564. this.selectTd.setStyles({"cursor": "pointer"});
  565. if (this.view.json.itemStyles) this.selectTd.setStyles(this.view.json.itemStyles);
  566. //}
  567. Object.each(this.data.data, function(cell, k){
  568. if (this.view.hideColumns.indexOf(k)===-1){
  569. var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(this.node);
  570. if (k!== this.view.viewJson.group.column){
  571. var v = (this.view.entries[k].code) ? MWF.Macro.exec(this.view.entries[k].code, {"value": cell, "gridData": this.view.gridJson, "data": this.view.viewData, "entry": this.data}) : cell;
  572. td.set("text", v);
  573. }
  574. if (this.view.openColumns.indexOf(k)!==-1){
  575. this.setOpenWork(td)
  576. }
  577. if (this.view.json.itemStyles) td.setStyles(this.view.json.itemStyles);
  578. }
  579. }.bind(this));
  580. if( this.view.options.hasAction ){
  581. var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(this.node);
  582. this.loadActions( td );
  583. if (this.view.json.itemStyles) td.setStyles(this.view.json.itemStyles);
  584. }
  585. this.setEvent();
  586. },
  587. loadActions : function( container ){
  588. this.deleteNode = new Element("div", {"styles": this.css.actionDeleteNode, "title": "删除"}).inject(container);
  589. this.deleteNode.addEvents({
  590. "mouseover": function(){this.deleteNode.setStyles(this.css.actionDeleteNode_over);}.bind(this),
  591. "mouseout": function(){this.deleteNode.setStyles(this.css.actionDeleteNode);}.bind(this),
  592. "mousedown": function(){this.deleteNode.setStyles(this.css.actionDeleteNode_down);}.bind(this),
  593. "mouseup": function(){this.deleteNode.setStyles(this.css.actionDeleteNode_over);}.bind(this),
  594. "click": function(e){
  595. this.remove(e);
  596. e.stopPropagation();
  597. }.bind(this)
  598. });
  599. this.editNode = new Element("div", {"styles": this.css.actionEditNode, "title": "编辑"}).inject(container);
  600. this.editNode.addEvents({
  601. "mouseover": function(){this.editNode.setStyles(this.css.actionEditNode_over);}.bind(this),
  602. "mouseout": function(){this.editNode.setStyles(this.css.actionEditNode);}.bind(this),
  603. "mousedown": function(){this.editNode.setStyles(this.css.actionEditNode_down);}.bind(this),
  604. "mouseup": function(){this.editNode.setStyles(this.css.actionEditNode_over);}.bind(this),
  605. "click": function(e){
  606. this.editCMSDocument();
  607. e.stopPropagation();
  608. }.bind(this)
  609. });
  610. },
  611. setOpenWork: function(td){
  612. td.setStyle("cursor", "pointer");
  613. td.addEvent("click", function(){
  614. this.openCMSDocument()
  615. }.bind(this));
  616. },
  617. openCMSDocument : function( isEdited ){
  618. var appId = "cms.Document"+this.data.bundle;
  619. if (layout.desktop.apps[appId]){
  620. layout.desktop.apps[appId].setCurrent();
  621. }else {
  622. var options = {
  623. "documentId": this.data.bundle,
  624. "readonly" : !isEdited
  625. };
  626. layout.desktop.openApplication(null, "cms.Document", options);
  627. }
  628. },
  629. editCMSDocument : function(){
  630. this.openCMSDocument( true );
  631. },
  632. remove: function(e){
  633. var text = "删除后不能恢复,你确定要删除该文档?";
  634. var _self = this;
  635. this.node.setStyles(this.css.viewContentTrNode_delete);
  636. this.readyRemove = true;
  637. this.view.app.confirm("warn", e, "删除确认", text, 350, 120, function(){
  638. _self.removeCMSDocument(_self, false);
  639. this.close();
  640. }, function(){
  641. _self.node.setStyles(_self.css.viewContentTrNode );
  642. _self.readyRemove = false;
  643. this.close();
  644. });
  645. },
  646. removeCMSDocument: function(){
  647. var id = this.data.bundle;
  648. //this.view.lookupAction.invoke({"name": "deleteDocument","async": true, "parameter": {"id": id },"success": function(json){
  649. // this.readyRemove = false;
  650. // this.node.destroy();
  651. // this.view.app.notice("删除成功", "success");
  652. // MWF.release(this);
  653. //}.bind(this)});
  654. MWF.Actions.get("x_cms_assemble_control").removeDocument(id, function(json){
  655. this.readyRemove = false;
  656. this.node.destroy();
  657. this.view.app.notice("删除成功", "success");
  658. MWF.release(this);
  659. }.bind(this));
  660. }
  661. });
  662. MWF.xApplication.cms.Module.QueryViewer.ItemCategory = new Class({
  663. Extends : MWF.xApplication.query.Query.Viewer.ItemCategory,
  664. load: function(){
  665. this.node = new Element("tr", {"styles": this.css.viewContentTrNode}).inject(this.view.viewTable);
  666. //if (this.view.json.select==="single" || this.view.json.select==="multi"){
  667. this.selectTd = new Element("td", {"styles": this.css.viewContentCategoryTdNode}).inject(this.node);
  668. if (this.view.json.itemStyles) this.selectTd.setStyles(this.view.json.itemStyles);
  669. //}
  670. var colsapn = this.view.viewJson.selectList.length;
  671. if( this.view.options.hasAction ){
  672. colsapn ++
  673. }
  674. this.categoryTd = new Element("td", {
  675. "styles": this.css.viewContentCategoryTdNode,
  676. "colspan": colsapn
  677. }).inject(this.node);
  678. this.groupColumn = null;
  679. for (var c = 0; c<this.view.viewJson.selectList.length; c++){
  680. if (this.view.viewJson.selectList[c].column === this.view.viewJson.group.column){
  681. this.groupColumn = this.view.viewJson.selectList[c];
  682. break;
  683. }
  684. }
  685. if (this.groupColumn){
  686. var text = (this.groupColumn.code) ? MWF.Macro.exec(this.groupColumn.code, {"value": this.data.group, "gridData": this.view.gridJson, "data": this.view.viewData, "entry": this.data}) : this.data.group;
  687. }else{
  688. var text = this.data.group;
  689. }
  690. this.categoryTd.set("html", "<span style='font-family: Webdings'><img src='/x_component_query_Query/$Viewer/"+this.view.options.style+"/icon/expand.png'/></span> "+text);
  691. if (this.view.json.itemStyles) this.categoryTd.setStyles(this.view.json.itemStyles);
  692. this.setEvent();
  693. },
  694. expand: function(){
  695. this.items.each(function(item){
  696. item.node.setStyle("display", "table-row");
  697. }.bind(this));
  698. this.node.getElement("span").set("html", "<img src='/x_component_process_Application/$Viewer/"+this.view.options.style+"/icon/down.png'/>");
  699. if (!this.loadChild){
  700. //window.setTimeout(function(){
  701. this.data.list.each(function(line){
  702. this.items.push(new MWF.xApplication.cms.Module.QueryViewer.Item(this.view, line, this));
  703. }.bind(this));
  704. this.loadChild = true;
  705. //}.bind(this), 10);
  706. }
  707. }
  708. });