FullcalendarControl.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. /**
  2. * fullcalendar控件(详见:http://fullcalendar.io/docs/)。
  3. * 使用方法:
  4. * var obj=new FullcalendarControl();
  5. * obj.renderTo("divContainer",{queryParams{},setUpParams:{}});
  6. * divContainer: 文档容器id
  7. * queryParams:数据查询相关参数(先设置查询参数,因为设置参数中有用到查询参数)
  8. * setUpParams:控件设置参数;
  9. * @returns {fullcalendarObj}
  10. *
  11. * 例如:
  12. *
  13. *
  14. $(function() {
  15. var queryDataUrl = __ctx + "/platform/system/sysPlan/listBySubmitAndMonth.ht";
  16. var openPlanUrl = __ctx + "/platform/system/sysPlan/edit.ht";
  17. var queryParams={
  18. queryDataUrl:queryDataUrl,
  19. openPlanUrl:openPlanUrl,
  20. selectDate:"" //默认是没有的
  21. };
  22. var setUpParams={
  23. header : {
  24. left : 'title',
  25. center : 'prev, today, next',
  26. right : 'agendaWeek,agendaDay'
  27. }
  28. };
  29. //开始创建控件
  30. var calendarObj = new FullcalendarControl();
  31. calendarObj.renderTo("calendar",{queryParams:queryParams,setUpParams:setUpParams});
  32. });
  33. *
  34. */
  35. FullcalendarControl=function(){
  36. {
  37. var _self=this;
  38. var queryDataUrl = __ctx + "/platform/system/sysPlan/listBySubmitAndMonth.ht";
  39. var openPlanUrl = __ctx + "/platform/system/sysPlan/edit.ht";
  40. _self.controlId="calendar";
  41. _self.controlObj=null;
  42. _self.queryParams={
  43. queryDataUrl:queryDataUrl,
  44. openPlanUrl:openPlanUrl,
  45. selectDate:""
  46. };
  47. _self.setUpParams={
  48. //设置选项和回调
  49. editable : false,
  50. //根据实际的每月天数显示日历。
  51. fixedWeekCount:false,
  52. currentTimezone : 'Asia/Beijing',
  53. allDayDefault : false,
  54. buttonText:{
  55. prevYear:'上一年',
  56. nextYear:'下一年'
  57. },
  58. header : {
  59. left : 'title',
  60. center : 'prevYear, prev, today, next, nextYear'
  61. // right : 'month,agendaWeek,agendaDay'
  62. },
  63. eventClick : function(event) {
  64. //获取当前视图的日期
  65. var date = _self.getCurrentViewDate();
  66. _self.queryParams.currentViweDate = _self.changeDateToStr(date);
  67. //鼠标点击日程
  68. _self.openEventSysPlan(event.planId,event.title,_self.queryParams.openPlanUrl,_self.queryParams.currentViweDate);
  69. },
  70. eventMouseover : function(event) {
  71. var obj = $(this);
  72. _self.toDoEventMouseover(obj, event);
  73. },
  74. eventMouseout : function(event) {
  75. //鼠标移出日程暂时未实现
  76. },
  77. dayClick : function(date, allDay, jsEvent, view) {
  78. //点击日期事件 暂时未实现
  79. },
  80. selectable: true,
  81. selectHelper: true,
  82. editable: true,
  83. eventLimit: true, //更多
  84. views: {
  85. month:{
  86. eventLimit: 5,
  87. eventLimitClick :'day'
  88. },
  89. agendaWeek: {
  90. eventLimit: 5
  91. },
  92. agendaDay: {
  93. eventLimit:5
  94. }
  95. },
  96. events:function(start,end,timezone,callback){
  97. var startDate = _self.changeDateToStr(start._d);
  98. var endDate = _self.changeDateToStr(end._d);
  99. $.ajax({
  100. type:"post",
  101. url:_self.queryParams.queryDataUrl,
  102. dataType:"json",
  103. data:{
  104. startDate:startDate,
  105. endDate:endDate,
  106. selectDate:_self.queryParams.selectDate
  107. },
  108. success:function(data){
  109. var event = [];
  110. if(data){
  111. event = data;
  112. }
  113. callback(event);
  114. }
  115. });
  116. }
  117. }
  118. };
  119. /**
  120. * 将控件添加到div容器中。
  121. * 第一个参数:
  122. * div的容器ID
  123. * 第二个参数:
  124. * conf{
  125. * queryParams:数据查询相关参数(先设置查询参数,因为设置参数中有用到查询参数)
  126. * setUpParams:控件设置参数;
  127. * }
  128. */
  129. this.renderTo=function(divContainerId,conf){
  130. _self.controlId = divContainerId;
  131. _self.queryParams = $.extend({},_self.queryParams,conf.queryParams);
  132. _self.setUpParams = $.extend({},_self.setUpParams,conf.setUpParams);
  133. _self.controlObj = $('#'+_self.controlId).fullCalendar(_self.setUpParams);
  134. return _self.controlObj;
  135. };
  136. /**
  137. * 获取当前月份的时间;
  138. *
  139. */
  140. this.getCurrentViewDate=function(){
  141. var moment = $('#'+_self.controlId).fullCalendar('getDate'); //当前时间
  142. // alert("The current date of the calendar is " + moment.format());
  143. return moment._d;
  144. };
  145. /**
  146. * 跳到指定日期的视图;
  147. *
  148. */
  149. this.goToTheDate=function(date){
  150. $('#'+_self.controlId).fullCalendar( 'gotoDate', date );
  151. };
  152. /**
  153. * 把日期转为字符;(yyyy-mm-dd)
  154. *
  155. */
  156. this.changeDateToStr=function(date){
  157. var dateStr = ""
  158. if(date){
  159. dateStr = date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
  160. }
  161. return dateStr
  162. };
  163. /**
  164. * 打开日程
  165. *
  166. * id 主键
  167. * title 标题
  168. * url 地址
  169. *
  170. */
  171. this.openEventSysPlan=function(id,title,url,currentViweDate){
  172. //var url = __ctx + "/platform/system/sysPlan/edit.ht?id="+id
  173. if(url.indexOf("?") > 0){
  174. url += "&id=" + id + "&currentViweDate=" + currentViweDate;
  175. }else{
  176. url += "?id=" + id + "&currentViweDate=" + currentViweDate;
  177. }
  178. window.location.href = url;
  179. /*DialogUtil.open({
  180. height:800,
  181. width: 1000,
  182. title : '日程:' + title,
  183. url: url
  184. });
  185. */
  186. };
  187. this.toDoEventMouseover=function(obj,thisEvent){
  188. var sysPlan = thisEvent.sysPlan;
  189. if(sysPlan==null){
  190. return;
  191. }
  192. var html = _self.getEventMouseoverHtml(sysPlan);
  193. $(".fc-content",obj).qtip({
  194. content:{
  195. text:html,
  196. title:{
  197. text:sysPlan.taskName
  198. }
  199. },
  200. position: {
  201. at:'top left',
  202. target:'event',
  203. adjust: {
  204. x:25,
  205. y:15
  206. },
  207. viewport: $(window)
  208. },
  209. show: {
  210. effect: function() {
  211. $(this).fadeTo(300, 1);
  212. }
  213. },
  214. hide: {
  215. effect: function() {
  216. $(this).slideUp();
  217. }
  218. },
  219. style: {
  220. classes:'ui-tooltip-light ui-tooltip-shadow'
  221. }
  222. });
  223. };
  224. this.getEventMouseoverHtml=function(sysPlan){
  225. var html = '';
  226. if(sysPlan==null){
  227. return html;
  228. }
  229. html = '<table class="table-detail" cellpadding="0" cellspacing="0" border="0" style="width:250px!important;"> ';
  230. html += '<tr><th style="padding:0px 2px;width:200px;font-size:12px;text-align:center;">日志名称:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.projectName+'</td><th style="padding:0px 4px;width:200px;font-size:12px;text-align:center;">日程进度:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.rate+'%</td></tr>';
  231. html += '<tr><th style="padding:0px 4px;width:200px;font-size:12px;text-align:center;">提交人:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.submitor+'</td><th style="padding:0px 4px;width:200px;font-size:12px;text-align:center;">负责人:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.charge+'</td></tr>';
  232. html += '<tr><th style="padding:0px 4px;width:200px;font-size:12px;text-align:center;">开始时间:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.startTimeStr+'</td><th style="padding:0px 4px;width:200px;font-size:12px;text-align:center;">结束时间:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.endTimeStr+'</td></tr>';
  233. html += '</table>';
  234. return html;
  235. }
  236. };
  237. FullcalendarControl1=function(){
  238. {
  239. var _self=this;
  240. var queryDataUrl = __ctx + "/platform/system/sysPlan/listBySubmitAndMonth.ht";
  241. var openPlanUrl = __ctx + "/platform/system/sysPlan/edit.ht";
  242. _self.controlId="calendar";
  243. _self.controlObj=null;
  244. _self.queryParams={
  245. queryDataUrl:queryDataUrl,
  246. openPlanUrl:openPlanUrl,
  247. selectDate:""
  248. };
  249. _self.setUpParams={
  250. //设置选项和回调
  251. editable : false,
  252. //根据实际的每月天数显示日历。
  253. fixedWeekCount:false,
  254. currentTimezone : 'Asia/Beijing',
  255. allDayDefault : false,
  256. buttonText:{
  257. prevYear:'上一年',
  258. nextYear:'下一年'
  259. },
  260. header : {
  261. left : 'title',
  262. center : 'prevYear, prev, today, next, nextYear',
  263. right : 'month,agendaWeek,agendaDay'
  264. },
  265. eventClick : function(event) {
  266. //获取当前视图的日期
  267. var date = _self.getCurrentViewDate();
  268. _self.queryParams.currentViweDate = _self.changeDateToStr(date);
  269. //鼠标点击日程
  270. _self.openEventSysPlan(event.planId,event.title,_self.queryParams.openPlanUrl,_self.queryParams.currentViweDate);
  271. },
  272. eventMouseover : function(event) {
  273. var obj = $(this);
  274. _self.toDoEventMouseover(obj, event);
  275. },
  276. eventMouseout : function(event) {
  277. //鼠标移出日程暂时未实现
  278. },
  279. dayClick : function(date, allDay, jsEvent, view) {
  280. var userId = $("input[id='userId']").val();
  281. var url = __ctx + "/platform/system/memorabilia/list.ht?userId="+userId+"&date="+date;
  282. window.location.href = url;
  283. },
  284. selectable: true,
  285. selectHelper: true,
  286. editable: true,
  287. eventLimit: true, //更多
  288. views: {
  289. month:{
  290. eventLimit: 5,
  291. eventLimitClick :'day'
  292. },
  293. agendaWeek: {
  294. eventLimit: 5
  295. },
  296. agendaDay: {
  297. eventLimit:5
  298. }
  299. },
  300. events:function(start,end,timezone,callback){
  301. var startDate = _self.changeDateToStr(start._d);
  302. var endDate = _self.changeDateToStr(end._d);
  303. $.ajax({
  304. type:"post",
  305. url:_self.queryParams.queryDataUrl,
  306. dataType:"json",
  307. data:{
  308. startDate:startDate,
  309. endDate:endDate,
  310. selectDate:_self.queryParams.selectDate
  311. },
  312. success:function(data){
  313. var event = [];
  314. if(data){
  315. event = data;
  316. }
  317. callback(event);
  318. }
  319. });
  320. }
  321. }
  322. };
  323. /**
  324. * 将控件添加到div容器中。
  325. * 第一个参数:
  326. * div的容器ID
  327. * 第二个参数:
  328. * conf{
  329. * queryParams:数据查询相关参数(先设置查询参数,因为设置参数中有用到查询参数)
  330. * setUpParams:控件设置参数;
  331. * }
  332. */
  333. this.renderTo=function(divContainerId,conf){
  334. _self.controlId = divContainerId;
  335. _self.queryParams = $.extend({},_self.queryParams,conf.queryParams);
  336. _self.setUpParams = $.extend({},_self.setUpParams,conf.setUpParams);
  337. _self.controlObj = $('#'+_self.controlId).fullCalendar(_self.setUpParams);
  338. return _self.controlObj;
  339. };
  340. /**
  341. * 获取当前月份的时间;
  342. *
  343. */
  344. this.getCurrentViewDate=function(){
  345. var moment = $('#'+_self.controlId).fullCalendar('getDate'); //当前时间
  346. // alert("The current date of the calendar is " + moment.format());
  347. return moment._d;
  348. };
  349. /**
  350. * 跳到指定日期的视图;
  351. *
  352. */
  353. this.goToTheDate=function(date){
  354. $('#'+_self.controlId).fullCalendar( 'gotoDate', date );
  355. };
  356. /**
  357. * 把日期转为字符;(yyyy-mm-dd)
  358. *
  359. */
  360. this.changeDateToStr=function(date){
  361. var dateStr = ""
  362. if(date){
  363. dateStr = date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
  364. }
  365. return dateStr
  366. };
  367. /**
  368. * 打开日程
  369. *
  370. * id 主键
  371. * title 标题
  372. * url 地址
  373. *
  374. */
  375. this.openEventSysPlan=function(id,title,url,currentViweDate){
  376. //var url = __ctx + "/platform/system/sysPlan/edit.ht?id="+id
  377. if(url.indexOf("?") > 0){
  378. url += "&id=" + id + "&currentViweDate=" + currentViweDate;
  379. }else{
  380. url += "?id=" + id + "&currentViweDate=" + currentViweDate;
  381. }
  382. window.location.href = url;
  383. /*DialogUtil.open({
  384. height:800,
  385. width: 1000,
  386. title : '日程:' + title,
  387. url: url
  388. });
  389. */
  390. };
  391. this.toDoEventMouseover=function(obj,thisEvent){
  392. var sysPlan = thisEvent.sysPlan;
  393. if(sysPlan==null){
  394. return;
  395. }
  396. var html = _self.getEventMouseoverHtml(sysPlan);
  397. $(".fc-content",obj).qtip({
  398. content:{
  399. text:html,
  400. title:{
  401. text:sysPlan.taskName
  402. }
  403. },
  404. position: {
  405. at:'top left',
  406. target:'event',
  407. adjust: {
  408. x:25,
  409. y:15
  410. },
  411. viewport: $(window)
  412. },
  413. show: {
  414. effect: function() {
  415. $(this).fadeTo(300, 1);
  416. }
  417. },
  418. hide: {
  419. effect: function() {
  420. $(this).slideUp();
  421. }
  422. },
  423. style: {
  424. classes:'ui-tooltip-light ui-tooltip-shadow'
  425. }
  426. });
  427. };
  428. this.getEventMouseoverHtml=function(sysPlan){
  429. var html = '';
  430. if(sysPlan==null){
  431. return html;
  432. }
  433. html = '<table class="table-detail" cellpadding="0" cellspacing="0" border="0" style="width:250px!important;"> ';
  434. html += '<tr><th style="padding:0px 2px;width:200px;font-size:12px;text-align:center;">日志名称:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.projectName+'</td><th style="padding:0px 4px;width:200px;font-size:12px;text-align:center;">日程进度:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.rate+'%</td></tr>';
  435. html += '<tr><th style="padding:0px 4px;width:200px;font-size:12px;text-align:center;">提交人:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.submitor+'</td><th style="padding:0px 4px;width:200px;font-size:12px;text-align:center;">负责人:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.charge+'</td></tr>';
  436. html += '<tr><th style="padding:0px 4px;width:200px;font-size:12px;text-align:center;">开始时间:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.startTimeStr+'</td><th style="padding:0px 4px;width:200px;font-size:12px;text-align:center;">结束时间:</th><td style="font-size:12px;text-align:center;line-height:16px;">'+sysPlan.endTimeStr+'</td></tr>';
  437. html += '</table>';
  438. return html;
  439. }
  440. };