You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

lr-datepicker.js 15 KiB

4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. /*
  2. * 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架(http://www.learun.cn)
  3. * Copyright (c) 2013-2018 上海力软信息技术有限公司
  4. * 创建人:力软-前端开发组
  5. * 日 期:2017.03.22
  6. * 描 述:lrdate 时间段选择器 @YY@-当年 @MM@-当月 @DD@-当天 @JJ@-当季度
  7. */
  8. (function ($, learun) {
  9. $.lrdate = {
  10. init: function ($self) {
  11. var dfop = $self[0]._lrdate.dfop;
  12. $self.html('');
  13. $self.addClass('lr-search-date');
  14. var $text = $('<div class="lr-search-date-text" id="lr_search_date_' + dfop.id + '" >请选择日期查询</div>');
  15. var $container = $('<div class="lr-search-date-container" id="lr_search_date_container_' + dfop.id + '"><div class="lr-search-date-arrow"><div class="lr-search-date-inside"></div></div></div>');
  16. var $btnlist = $('<div class="lr-search-date-content-btns" id="lr_search_date_content_btns_' + dfop.id + '"></div>');
  17. var $customDate = $('<div class="lr-search-date-btn-block"><a href="javascript:;" data-value="customDate">自定义</a></div>');
  18. var $clearDate = $('<div class="lr-search-date-btn-block"><a href="javascript:;" data-value="clearDate">清空</a></div>');
  19. $btnlist.append($customDate);
  20. $btnlist.append($clearDate);
  21. $container.append($btnlist);
  22. var $datepickerContent = $('<div class="lr-search-date-datepicker-content"></div>');
  23. var $datepicker1 = $('<div class="lr-search-date-datepicker-container first" id="lr_search_date_datepicker1_' + dfop.id + '" ></div>');
  24. var $datepicker2 = $('<div class="lr-search-date-datepicker-container" id="lr_search_date_datepicker2_' + dfop.id + '" ></div>');
  25. var $datepickerBtn = $('<div class="lr-search-date-datepicker-btn"><a class="btn btn-primary">确定</a></div>');
  26. $datepickerContent.append($datepicker1);
  27. $datepickerContent.append($datepicker2);
  28. $datepickerContent.append($datepickerBtn);
  29. $container.append($datepickerContent);
  30. $self.append($text);
  31. $self.append($container);
  32. // 更新为laydate
  33. laydate.render({
  34. elem: '#lr_search_date_datepicker1_' + dfop.id
  35. , position: 'static'
  36. , showBottom: false
  37. , theme: '#2F94EE'
  38. , min: dfop.minDate || '1900-1-1'
  39. , max: dfop.maxDate || '2099-12-31'
  40. , change: function (value, date) { //监听日期被切换
  41. dfop._begindate = value + " 00:00:00";
  42. }
  43. });
  44. laydate.render({
  45. elem: '#lr_search_date_datepicker2_' + dfop.id
  46. , position: 'static'
  47. , showBottom: false
  48. , theme: '#2F94EE'
  49. , min: dfop.minDate || '1900-1-1'
  50. , max: dfop.maxDate || '2099-12-31'
  51. , change: function (value, date) { //监听日期被切换
  52. dfop._enddate = value + " 23:59:59";
  53. }
  54. });
  55. //WdatePicker({ eCont: 'lr_search_date_datepicker1_' + dfop.id, onpicked: function (dp) { dfop._begindate = dp.cal.getDateStr() + " 00:00:00"; }, minDate: dfop.minDate, maxDate: dfop.maxDate });// 开始时间
  56. //WdatePicker({ eCont: 'lr_search_date_datepicker2_' + dfop.id, onpicked: function (dp) { dfop._enddate = dp.cal.getDateStr() + " 23:59:59"; }, minDate: dfop.minDate, maxDate: dfop.maxDate });// 结束时间
  57. /*事件的绑定*/
  58. $text.on('click', function (e) {
  59. var $this = $(this);
  60. var $self = $this.parents('.lr-search-date');
  61. var dfop = $self[0]._lrdate.dfop;
  62. var $container =$self.find('#lr_search_date_container_' + dfop.id);
  63. if ($container.is(':hidden')) {
  64. $container.show();
  65. }
  66. else {
  67. $container.hide();
  68. }
  69. });
  70. $(document).click(function (e) {
  71. var et = e.target || e.srcElement;
  72. var $et = $(et);
  73. if (!$et.hasClass('lr-search-date') && $et.parents('.lr-search-date').length <= 0) {
  74. $('.lr-search-date-container').hide();
  75. }
  76. });
  77. $customDate.find('a').on('click', function (e) {
  78. var $this = $(this);
  79. var $self = $this.parents('.lr-search-date');
  80. var dfop = $self[0]._lrdate.dfop;
  81. $self.find('.lr-search-date-content-btns a.active').removeClass('active');
  82. $('#lr_search_date_container_' + dfop.id).addClass('width');
  83. $this.addClass('active');
  84. $self.find('.lr-search-date-datepicker-content').show();
  85. });
  86. $clearDate.find('a').on('click', function (e) {
  87. var $this = $(this);
  88. var $self = $this.parents('.lr-search-date');
  89. var dfop = $self[0]._lrdate.dfop;
  90. var $container = $self.find('#lr_search_date_container_' + dfop.id);
  91. var $text = $self.find('#lr_search_date_' + dfop.id);
  92. $container.hide();
  93. $self.find('.lr-search-date-content-btns a.active').removeClass('active');
  94. $text.html("");
  95. if (!!dfop.selectfn) {
  96. dfop.selectfn("1753-01-01", "3000-01-01");
  97. }
  98. });
  99. // 时间确定按钮
  100. $datepickerBtn.find('a').on('click', function () {
  101. var $self = $(this).parents('.lr-search-date');
  102. var dfop = $self[0]._lrdate.dfop;
  103. var $container = $self.find('#lr_search_date_container_' + dfop.id);
  104. var $text = $self.find('#lr_search_date_' + dfop.id);
  105. $container.hide();
  106. var label = learun.formatDate(dfop._begindate, 'yyyy-MM-dd') + '~' + learun.formatDate(dfop._enddate, 'yyyy-MM-dd');
  107. $text.html(label);
  108. if (!!dfop.selectfn) {
  109. dfop.selectfn(dfop._begindate, dfop._enddate);
  110. }
  111. });
  112. },
  113. monthinit: function ($self) {// 月:上月,本月
  114. var dfop = $self[0]._lrdate.dfop;
  115. var $btnlist = $('#lr_search_date_content_btns_' + dfop.id);
  116. var $block = $('<div class="lr-search-date-btn-block"></div>');
  117. if (dfop.premShow) {
  118. $block.append('<a href="javascript:;" class="datebtn" data-value="preM">上月</a>');
  119. }
  120. if (dfop.mShow) {
  121. $block.append('<a href="javascript:;" class="datebtn" data-value="currentM">本月</a>');
  122. }
  123. $btnlist.prepend($block);
  124. dfop = null;
  125. },
  126. jinit: function ($self) {// 季度
  127. var dfop = $self[0]._lrdate.dfop;
  128. var $btnlist = $('#lr_search_date_content_btns_' + dfop.id);
  129. var $block = $('<div class="lr-search-date-btn-block"></div>');
  130. if (dfop.prejShow) {
  131. $block.append('<a href="javascript:;" class="datebtn" data-value="preJ">上季度</a>');
  132. }
  133. if (dfop.jShow) {
  134. $block.append('<a href="javascript:;" class="datebtn" data-value="currentJ">本季度</a>');
  135. }
  136. $btnlist.prepend($block);
  137. dfop = null;
  138. },
  139. yinit: function ($self) {
  140. var dfop = $self[0]._lrdate.dfop;
  141. var $btnlist = $('#lr_search_date_content_btns_' + dfop.id);
  142. var $block = $('<div class="lr-search-date-btn-block"></div>');
  143. if (dfop.ysShow) {
  144. $block.append('<a href="javascript:;" class="datebtn" data-value="yS">上半年</a>');
  145. }
  146. if (dfop.yxShow) {
  147. $block.append('<a href="javascript:;" class="datebtn" data-value="yX">下半年</a>');
  148. }
  149. if (dfop.preyShow) {
  150. $block.append('<a href="javascript:;" class="datebtn" data-value="preY">去年</a>');
  151. }
  152. if (dfop.yShow) {
  153. $block.append('<a href="javascript:;" class="datebtn" data-value="currentY">今年</a>');
  154. }
  155. $btnlist.prepend($block);
  156. dfop = null;
  157. },
  158. custmerinit: function ($self) {
  159. var dfop = $self[0]._lrdate.dfop;
  160. var $btnlist = $('#lr_search_date_content_btns_' + dfop.id);
  161. var $block = $('<div class="lr-search-date-btn-block"></div>');
  162. for (var i = 0, l = dfop.dfdata.length; i < l; i++) {
  163. var item = dfop.dfdata[i];
  164. if (item) {
  165. $block.append('<a href="javascript:;" class="datebtn" data-value="' + i + '">' + item.name + '</a>');
  166. }
  167. }
  168. $btnlist.prepend($block);
  169. dfop = null;
  170. },
  171. bindEvent: function ($self) {
  172. $self.find('.datebtn').on('click', function () {
  173. var $this = $(this);
  174. var $self = $this.parents('.lr-search-date');
  175. var value = $this.attr('data-value');
  176. $.lrdate.select($self, value);
  177. });
  178. },
  179. select: function ($self, value) {
  180. var dfop = $self[0]._lrdate.dfop;
  181. var $container = $self.find('#lr_search_date_container_' + dfop.id);
  182. var $text = $self.find('#lr_search_date_' + dfop.id);
  183. var $btnlist = $('#lr_search_date_content_btns_' + dfop.id);
  184. $btnlist.find('.active').removeClass('active');
  185. var $this = $btnlist.find('.datebtn[data-value="' + value + '"]').addClass('active');
  186. switch (value) {
  187. case 'currentWeek':
  188. dfop._begindate = learun.getTime(0);
  189. dfop._enddate = learun.getTime(-6);
  190. break;
  191. case 'nextWeek':
  192. dfop._begindate = learun.getTime(-7);
  193. dfop._enddate = learun.getTime(-13);
  194. break;
  195. case 'preM':
  196. var d = learun.getPreMonth();
  197. dfop._begindate = d.begin;
  198. dfop._enddate = d.end;
  199. break;
  200. case 'currentM':
  201. var d = learun.getMonth();
  202. dfop._begindate = d.begin;
  203. dfop._enddate = d.end;
  204. break;
  205. case 'preJ':
  206. var d = learun.getPreQuarter();
  207. dfop._begindate = d.begin;
  208. dfop._enddate = d.end;
  209. break;
  210. case 'currentJ':
  211. var d = learun.getCurrentQuarter();
  212. dfop._begindate = d.begin;
  213. dfop._enddate = d.end;
  214. break;
  215. case 'yS':
  216. var d = learun.getFirstHalfYear();
  217. dfop._begindate = d.begin;
  218. dfop._enddate = d.end;
  219. break;
  220. case 'yX':
  221. var d = learun.getSecondHalfYear();
  222. dfop._begindate = d.begin;
  223. dfop._enddate = d.end;
  224. break;
  225. case 'preY':
  226. var d = learun.getPreYear();
  227. dfop._begindate = d.begin;
  228. dfop._enddate = d.end;
  229. break;
  230. case 'currentY':
  231. var d = learun.getYear();
  232. dfop._begindate = d.begin;
  233. dfop._enddate = d.end;
  234. break;
  235. default:
  236. var rowid = parseInt(value);
  237. var data = dfop.dfdata[rowid];
  238. dfop._begindate = data.begin();
  239. dfop._enddate = data.end();
  240. break;
  241. }
  242. $container.hide();
  243. var label = learun.formatDate(dfop._begindate, 'yyyy-MM-dd') + '~' + learun.formatDate(dfop._enddate, 'yyyy-MM-dd');
  244. $text.html(label);
  245. $('#lr_search_date_container_' + dfop.id).removeClass('width');
  246. $self.find('.lr-search-date-datepicker-content').hide();
  247. if (!!dfop.selectfn) {
  248. dfop.selectfn(dfop._begindate, dfop._enddate);
  249. }
  250. }
  251. };
  252. $.fn.lrdate = function (op) {
  253. var dfop = {
  254. // 自定义数据
  255. dfdata: [],
  256. // 月
  257. mShow: true,
  258. premShow: true,
  259. // 季度
  260. jShow: true,
  261. prejShow: true,
  262. // 年
  263. ysShow: true,
  264. yxShow: true,
  265. preyShow: true,
  266. yShow: true,
  267. dfvalue: -1,//preM,currentM,preJ,currentJ,yS,yX,preY,currentY,
  268. selectfn: false,
  269. minDate: '',
  270. maxDate: '',
  271. };
  272. $.extend(dfop, op || {});
  273. var $self = $(this);
  274. dfop.id = $self.attr('id');
  275. if (!dfop.id) {
  276. return false;
  277. }
  278. $self[0]._lrdate = { "dfop": dfop };
  279. $.lrdate.init($self);
  280. $.lrdate.yinit($self);
  281. $.lrdate.jinit($self);
  282. $.lrdate.monthinit($self);
  283. $.lrdate.custmerinit($self);
  284. $.lrdate.bindEvent($self);
  285. if (dfop.dfvalue != -1) {
  286. $.lrdate.select($self, dfop.dfvalue);
  287. }
  288. return $self;
  289. };
  290. // 兼容之前的写法
  291. window.WdatePicker = function (op) {
  292. var e = window.event || arguments.callee.caller.arguments[0];
  293. if (e) {
  294. var obj = e.target || e.srcElement;
  295. var $obj = $(obj);
  296. if (!$obj.hasClass('lr-laydate-init')) {
  297. op = op || {};
  298. op.dateFmt = op.dateFmt || 'yyyy-MM-dd';
  299. var _type = 'date';
  300. if (op.dateFmt == 'yyyy-MM-dd HH:mm' || op.dateFmt == 'yyyy-MM-dd HH:mm:ss') {
  301. _type = 'datetime';
  302. }
  303. if (op.dateFmt == 'HH:mm' || op.dateFmt == 'HH:mm:ss') {
  304. _type = 'time';
  305. }
  306. laydate.render({
  307. elem: obj,
  308. trigger: 'click',
  309. theme: '#2F94EE',
  310. format: op.dateFmt,
  311. type: _type,
  312. done: function () {
  313. // 只修改了这
  314. setTimeout(function () {
  315. $obj.trigger('change');
  316. }, 100);
  317. }
  318. });
  319. $obj.addClass('lr-laydate-init');
  320. if (e.type == 'click') {
  321. setTimeout(function () {
  322. $obj.trigger('click');
  323. }, 100);
  324. return false;
  325. }
  326. }
  327. }
  328. }
  329. })(jQuery, top.learun);