CalendarContent.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. MWF.xApplication.Homepage.CalendarContent = new Class({
  2. Extends: MWF.xApplication.Homepage.TaskContent,
  3. Implements: [Options, Events],
  4. options: {
  5. "view": "calendarContent.html"
  6. },
  7. load: function(){
  8. this.tabs = {};
  9. this.dayFlags = [];
  10. this.container.loadHtml(this.viewPath, {"bind": {"lp": this.app.lp}, "module": this}, function(){
  11. this.initSize();
  12. this.loadCalender(function(){
  13. this.fireEvent("load");
  14. }.bind(this));
  15. // this.loadMyCalender(function(){
  16. // this.fireEvent("load");
  17. // }.bind(this));
  18. // //是否需要定时自动刷新 @todo
  19. // this.startProcessAction.addEvent("click", this.startProcess.bind(this));
  20. //this.moreInforAction.addEvent("click", this.moreInfor.bind(this));
  21. }.bind(this));
  22. },
  23. openCalender: function(e){
  24. layout.openApplication(e, "Calendar");
  25. },
  26. setContentSize: function(){
  27. var total = this.container.getSize().y;
  28. var calenderHeight = this.calenderArea.getSize().y+this.calenderArea.getEdgeHeight();
  29. var titleHeight = this.calenderTitleNode.getSize().y+this.calenderTitleNode.getEdgeHeight();
  30. var bottomHeight = this.pageAreaNode.getSize().y+this.pageAreaNode.getEdgeHeight();
  31. var inforHeight = this.calenderInforArea.getSize().y+this.calenderInforArea.getEdgeHeight();
  32. var thisHeight = this.itemContentNode.getEdgeHeight();
  33. var contentHeight = total-titleHeight-bottomHeight-thisHeight-inforHeight-calenderHeight;
  34. this.itemContentNode.setStyle("height", ""+contentHeight+"px");
  35. this.contentHeight = contentHeight;
  36. //this.pageSize = (this.options.itemHeight/this.contentHeight).toInt();
  37. if (this.noItemNode){
  38. var m = (this.contentHeight- this.noItemNode.getSize().y)/2;
  39. this.noItemNode.setStyle("margin-top", ""+m+"px");
  40. }
  41. if (this.dayFlags && this.dayFlags.length){
  42. this.dayFlags.each(function(flag){
  43. var td = flag.retrieve("td");
  44. if (td) flag.position({
  45. "relativeTo": td,
  46. "position": 'topRight',
  47. "edge": 'topRight'
  48. });
  49. });
  50. }
  51. },
  52. loadCalender: function(callback){
  53. o2.require("o2.widget.CalendarPage", function(){
  54. this.calender = new o2.widget.CalendarPage(this.calenderArea, {
  55. "style": "homepage",
  56. "onQueryComplate": function (d) {
  57. this.loadMyCalender(d, callback);
  58. //if (callback) callback();
  59. }.bind(this),
  60. "onChangeViewToDay": function(){
  61. this.loadMonthCalender();
  62. }.bind(this),
  63. "onChangeViewToMonth": function(){
  64. this.calenderFlagArea.empty();
  65. this.dayFlags = [];
  66. }.bind(this),
  67. "onChangeViewToYear": function(){
  68. this.calenderFlagArea.empty();
  69. this.dayFlags = [];
  70. }.bind(this)
  71. });
  72. this.calender.show();
  73. this.calender._selectDate((new Date()).toString());
  74. var m = this.calender.currentNode.getStyle("margin-right").toInt();
  75. m = m +40;
  76. this.calender.currentNode.setStyle("margin-right", ""+m+"px");
  77. this.calender.todayNode = new Element("div.mainColor_color", {"styles": this.calender.css.todayNode, "text": this.app.lp.today}).inject(this.calender.currentNode, "before");
  78. this.calender.todayNode.addEvent("click", function(){
  79. this.calender.changeViewToDay();
  80. // this.calender.showDay();
  81. this.calender._selectDate((new Date()).toString());
  82. // this.loadMonthCalender();
  83. }.bind(this));
  84. }.bind(this));
  85. },
  86. loadMonthCalender: function(){
  87. this.calenderFlagArea.empty();
  88. this.dayFlags = [];
  89. var tds = this.calender.contentTable.getElements("td");
  90. var start = new Date(tds[0].retrieve("dateValue")).clearTime();
  91. var end = new Date(tds[tds.length-1].retrieve("dateValue")).clearTime();
  92. end.increment("day", 1);
  93. var d = {
  94. "startTime": start.format("db"),
  95. "endTime": end.format("db"),
  96. "createPerson": layout.user.distinguishedName
  97. };
  98. o2.Actions.load("x_calendar_assemble_control").Calendar_EventAction.listWithFilter(d, function(json){
  99. debugger;
  100. if (json.data){
  101. if (json.data.wholeDayEvents && json.data.wholeDayEvents.length){
  102. json.data.wholeDayEvents.each(function(e){
  103. var ds = (new Date()).parse(e.startTime);
  104. var i = start.diff(ds);
  105. var de = (new Date()).parse(e.endTime);
  106. while( i < de ){
  107. }
  108. this.setCalenderFlag(tds[i]);
  109. }.bind(this));
  110. }
  111. if (json.data.inOneDayEvents && json.data.inOneDayEvents.length){
  112. json.data.inOneDayEvents.each(function(e){
  113. if (e.inOneDayEvents && e.inOneDayEvents.length){
  114. var d = (new Date()).parse(e.eventDate);
  115. var i = start.diff(d);
  116. this.setCalenderFlag(tds[i]);
  117. }
  118. }.bind(this));
  119. }
  120. }
  121. }.bind(this));
  122. },
  123. setCalenderFlag: function(td){
  124. // var t = td.get("text");
  125. // // td.empty();
  126. // // td.set("text", t);
  127. //td.set("background-color","#fdd9d9");
  128. var flag = new Element("div.o2_homepage_calender_item_flag").inject(this.calenderFlagArea);
  129. flag.position({
  130. "relativeTo": td,
  131. "position": 'topRight',
  132. "edge": 'topRight'
  133. });
  134. flag.store("td", td);
  135. this.dayFlags.push(flag);
  136. },
  137. loadMyCalender: function(d, callback){
  138. //this.loadFile(null, callback);
  139. if (!this.isLoading){
  140. if (!this.calenderContentTab){
  141. this.calenderContentTab = new MWF.xApplication.Homepage.CalendarContent.Calendar(this, this.calenderTab, d, {
  142. "onLoad": function(){ if (callback) callback(); }
  143. });
  144. }else{
  145. this.calenderContentTab.reload(d);
  146. }
  147. this.currentTab = this.calenderContentTab;
  148. }
  149. },
  150. // loadFile: function(e, callback){
  151. // if (!this.isLoading) {
  152. // if (!this.fileContentTab){
  153. // this.fileContentTab = new MWF.xApplication.Homepage.FileContent.File(this, this.meetingTab, {
  154. // "onLoad": function(){ if (callback) callback(); }
  155. // });
  156. // }else{
  157. // this.fileContentTab.load();
  158. // }
  159. // this.currentTab = this.fileContentTab;
  160. // }
  161. // }
  162. });
  163. MWF.xApplication.Homepage.CalendarContent.Calendar = new Class({
  164. Extends: MWF.xApplication.Homepage.TaskContent.Task,
  165. Implements: [Options, Events],
  166. options: {
  167. "itemHeight": 80,
  168. "type": "meetingInvited",
  169. "month": 1
  170. },
  171. initialize: function(content, tab, date, options){
  172. this.setOptions(options);
  173. this.content = content;
  174. this.app = this.content.app;
  175. this.container = this.content.itemContentNode;
  176. this.tab = tab;
  177. this.date = (new Date()).parse(date).clearTime();
  178. this.load();
  179. },
  180. reload: function(date){
  181. if (!this.content.isLoading) {
  182. this.date = (new Date()).parse(date).clearTime();
  183. this.beginLoadContent();
  184. this.showTab();
  185. this.initItemCount(this.page);
  186. this.loadItemsRes();
  187. }
  188. },
  189. loadItemsRes: function(){
  190. var endDate = this.date.clone().increment("day", 1);
  191. var d = {
  192. "startTime": this.date.format("db"),
  193. "endTime": endDate.format("db"),
  194. "createPerson": layout.user.distinguishedName
  195. };
  196. o2.Actions.load("x_calendar_assemble_control").Calendar_EventAction.listWithFilterSample(d, function(json){
  197. if (json.data && json.data.length){
  198. this.loadItems(json.data);
  199. this.loadCalenderInfor(json.data.length);
  200. }else{
  201. this.emptyLoadContent();
  202. this.loadCalenderInfor(0);
  203. }
  204. this.fireEvent("load");
  205. }.bind(this));
  206. },
  207. loadCalenderInfor: function(count){
  208. var text = (count) ? this.app.lp.calenderInfor : this.app.lp.noCalenderInfor;
  209. text = text.replace("{name}", layout.user.name);
  210. var today = new Date();
  211. var dateStr = (this.date.diff(today)===0) ? this.app.lp.today : this.date.format(this.app.lp.dateFormat);
  212. text = text.replace("{date}", dateStr);
  213. text = text.replace("{count}", count);
  214. this.content.calenderInforArea.empty();
  215. this.content.calenderInforArea.set("html", text);
  216. },
  217. emptyLoadContent: function(){
  218. this.container.empty();
  219. this.container.removeClass("o2_homepage_area_content_loading").removeClass("icon_loading");
  220. this.content.pageAreaNode.empty();
  221. //this.itemContentNode.addClass("o2_homepage_task_area_content_empty").addClass("icon_notask");
  222. this.content.noItemNode = new Element("div.o2_homepage_calendar_area_content_empty_node", {"text": this.app.lp.noCalendar}).inject(this.container);
  223. var m = (this.content.contentHeight- this.content.noItemNode.getSize().y)/2;
  224. this.content.noItemNode.setStyle("margin-top", ""+m+"px");
  225. this.content.isLoading = false;
  226. },
  227. loadItems: function(data){
  228. data.each(function(d, i){
  229. this.loadItem(d, i);
  230. }.bind(this));
  231. this.endLoadContent();
  232. },
  233. loadItem: function(d, i){
  234. var row = this.loadItemRow(d, i);
  235. var _self = this;
  236. row.store("data", d);
  237. // row.addEvents({
  238. // "mouseover": function(){
  239. // this.addClass("mainColor_color").addClass("o2_homepage_task_item_row_over");
  240. // },
  241. // "mouseout": function(){
  242. // this.removeClass("mainColor_color").removeClass("o2_homepage_task_item_row_over");
  243. // }
  244. // });
  245. row.addEvent("click", function(e){
  246. layout.openApplication(e, "Calendar");
  247. });
  248. },
  249. getLightColor : function( deepColor ){
  250. var deep = ["#428ffc","#5bcc61","#f9bf24","#f75f59","#f180f7","#9072f1","#909090","#1462be"];
  251. var light = ["#cae2ff","#d0f1b0","#fef4bb","#fdd9d9","#f4c5f7","#d6ccf9","#e7e7e7","#cae2ff"];
  252. var index = deep.indexOf(deepColor);
  253. return index > -1 ? light[index] : light[0];
  254. },
  255. loadItemRow: function(d){
  256. var row = new Element("div.o2_homepage_calender_item_node").inject(this.container);
  257. row.setStyle("background-color", this.getLightColor(d.color));
  258. var locationNode = new Element("div.o2_homepage_calender_item_location", {"text": (d.locationName || ""), "title": (d.locationName || "")}).inject(row);
  259. var inforArea = new Element("div.o2_homepage_calender_item_infor").inject(row);
  260. var titleNode = new Element("div.o2_homepage_calender_item_title").inject(inforArea);
  261. var titleIconNode = new Element("div.o2_homepage_calender_item_title_icon").inject(titleNode);
  262. var titleTextNode = new Element("div.o2_homepage_calender_item_title_text", {"text": d.title, "title": d.title}).inject(titleNode);
  263. var timeNode = new Element("div.o2_homepage_calender_item_time").inject(inforArea);
  264. var timeStr = "";
  265. if (d.isAllDayEvent) {
  266. timeStr = this.app.lp.allDay;
  267. }else{
  268. var start = (new Date()).parse(d.startTime);
  269. var end = (new Date()).parse(d.endTime);
  270. if (start.diff(end)===0){
  271. timeStr = start.format("%Y-%m-%d %H:%M")+" - "+end.format("%H:%M");
  272. }else{
  273. timeStr = start.format("%Y-%m-%d %H:%M")+" - "+end.format("%Y-%m-%d %H:%M");
  274. }
  275. }
  276. timeNode.set("html", timeStr);
  277. return row;
  278. },
  279. });