yvanui.yvdate.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /**
  2. * yvanui.yvdate.js
  3. * @author luoyifan
  4. * 2019-07-17 12:03:00
  5. */
  6. 'use strict';
  7. (function ($) {
  8. function init(target) {
  9. var $dom = $(target);
  10. var state = $.data($dom.parent()[0], 'yvdate');
  11. var option = state.options;
  12. $dom.jqxInput({
  13. height: option.height,
  14. width: option.width,
  15. });
  16. $dom.addClass('yvgrid-yvdate');
  17. $dom.on('mousemove', function (event) {
  18. var $me = $(this);
  19. var width = $me.outerWidth();
  20. if (width - event.offsetX < 23) {
  21. //查询按钮
  22. $me.removeClass('yvgrid-searchbox-hilight1');
  23. $me.addClass('yvgrid-searchbox-hilight2');
  24. } else {
  25. $me.removeClass('yvgrid-searchbox-hilight1');
  26. $me.removeClass('yvgrid-searchbox-hilight2');
  27. }
  28. });
  29. $dom.on('mouseout', function (event) {
  30. var $me = $(this);
  31. $me.removeClass('yvgrid-searchbox-hilight1');
  32. $me.removeClass('yvgrid-searchbox-hilight2');
  33. });
  34. var dateOpt = {
  35. singleDatePicker: true,
  36. autoApply: true,
  37. autoUpdateInput: false,
  38. showDropdowns: true,
  39. locale: {
  40. format: "YYYY-MM-DD",
  41. separator: " - ",
  42. daysOfWeek: ["日", "一", "二", "三", "四", "五", "六"],
  43. monthNames: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
  44. direction: "ltr",
  45. applyLabel: "确定",
  46. cancelLabel: "取消",
  47. fromLabel: "从",
  48. toLabel: "至",
  49. customRangeLabel: "Custom",
  50. firstDay: 1
  51. },
  52. showCustomRangeLabel: false,
  53. //startDate: "07/11/2019",
  54. //endDate: "07/17/2019",
  55. opens: "left"
  56. };
  57. if (option.min) {
  58. $.extend(dateOpt, {
  59. startDate: option.min,
  60. minDate: option.min
  61. });
  62. }
  63. if (option.max) {
  64. $.extend(dateOpt, {
  65. endDate: option.max,
  66. maxDate: option.max
  67. });
  68. }
  69. $dom.daterangepicker(dateOpt, function (start, end, label) {
  70. var value = start.format('YYYY-MM-DD');
  71. onChange.call($dom[0], value);
  72. });
  73. $dom.on("input propertychange", function (event) {
  74. onChange.call(this, this.value);
  75. });
  76. }//end
  77. function onChange(value) {
  78. if (value) {
  79. //如果有值,非空,需要做合法性判断
  80. if (!/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/.test(value)) {
  81. return;
  82. }
  83. var vt = moment(value);
  84. if (isNaN(vt.unix())) {
  85. return;
  86. }
  87. //格式合法,可以触发改变
  88. value = vt.format('YYYY-MM-DD');
  89. }
  90. if ($(this).parent().length <= 0) {
  91. //编辑框已经消失
  92. return;
  93. }
  94. var state = $.data($(this).parent()[0], 'yvdate');
  95. var option = state.options;
  96. this.value = value;
  97. if ($.type(option.onChange) === 'function') {
  98. option.onChange.call(this, this.value);
  99. }
  100. }
  101. $.fn.yvdate = function (options, param) {
  102. if (typeof options == 'string') {
  103. var method = $.fn.yvdate.methods[options];
  104. if (method) {
  105. var args = [this];
  106. for (var i = 1; i < arguments.length; i++) {
  107. args.push(arguments[i]);
  108. }
  109. return method.apply(this, args);
  110. } else {
  111. console.error('not found method:' + options);
  112. }
  113. }
  114. options = options || {};
  115. return this.each(function () {
  116. var state = $.data($(this).parent()[0], 'yvdate');
  117. if (state) {
  118. $.extend(state.options, options);
  119. } else {
  120. $.data($(this).parent()[0], 'yvdate', {
  121. options: $.extend({}, $.fn.yvdate.defaults, options)
  122. });
  123. }
  124. init(this);
  125. });
  126. };
  127. $.fn.yvdate.methods = {
  128. getValue: function ($dom) {
  129. return $dom.val();
  130. },
  131. setValue: function ($dom, value) {
  132. return $dom.val(value);
  133. },
  134. focus: function ($dom) {
  135. setTimeout(function () {
  136. $dom.focus();
  137. }, 10);
  138. }
  139. };
  140. $.fn.power.defaults.xtype.yvdate = function ($targetDOM, option, context) {
  141. if (option.name) {
  142. var $dom = $("<input name='" + option.name + "' xtype='yvdate' />").appendTo($targetDOM);
  143. } else {
  144. $dom = $("<input xtype='yvdate' />").appendTo($targetDOM);
  145. }
  146. return $dom.yvdate(option, context);
  147. };
  148. $.fn.yvdate.defaults = {};
  149. })(jQuery);