/**
* yvanui.yvdate.js
* @author luoyifan
* 2019-07-17 12:03:00
*/
'use strict';
(function ($) {
function init(target) {
var $dom = $(target);
var state = $.data($dom.parent()[0], 'yvdate');
var option = state.options;
$dom.jqxInput({
height: option.height,
width: option.width,
});
$dom.addClass('yvgrid-yvdate');
$dom.on('mousemove', function (event) {
var $me = $(this);
var width = $me.outerWidth();
if (width - event.offsetX < 23) {
//查询按钮
$me.removeClass('yvgrid-searchbox-hilight1');
$me.addClass('yvgrid-searchbox-hilight2');
} else {
$me.removeClass('yvgrid-searchbox-hilight1');
$me.removeClass('yvgrid-searchbox-hilight2');
}
});
$dom.on('mouseout', function (event) {
var $me = $(this);
$me.removeClass('yvgrid-searchbox-hilight1');
$me.removeClass('yvgrid-searchbox-hilight2');
});
var dateOpt = {
singleDatePicker: true,
autoApply: true,
autoUpdateInput: false,
showDropdowns: true,
locale: {
format: "YYYY-MM-DD",
separator: " - ",
daysOfWeek: ["日", "一", "二", "三", "四", "五", "六"],
monthNames: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
direction: "ltr",
applyLabel: "确定",
cancelLabel: "取消",
fromLabel: "从",
toLabel: "至",
customRangeLabel: "Custom",
firstDay: 1
},
showCustomRangeLabel: false,
//startDate: "07/11/2019",
//endDate: "07/17/2019",
opens: "left"
};
if (option.min) {
$.extend(dateOpt, {
startDate: option.min,
minDate: option.min
});
}
if (option.max) {
$.extend(dateOpt, {
endDate: option.max,
maxDate: option.max
});
}
$dom.daterangepicker(dateOpt, function (start, end, label) {
var value = start.format('YYYY-MM-DD');
onChange.call($dom[0], value);
});
$dom.on("input propertychange", function (event) {
onChange.call(this, this.value);
});
}//end
function onChange(value) {
if (value) {
//如果有值,非空,需要做合法性判断
if (!/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/.test(value)) {
return;
}
var vt = moment(value);
if (isNaN(vt.unix())) {
return;
}
//格式合法,可以触发改变
value = vt.format('YYYY-MM-DD');
}
if ($(this).parent().length <= 0) {
//编辑框已经消失
return;
}
var state = $.data($(this).parent()[0], 'yvdate');
var option = state.options;
this.value = value;
if ($.type(option.onChange) === 'function') {
option.onChange.call(this, this.value);
}
}
$.fn.yvdate = function (options, param) {
if (typeof options == 'string') {
var method = $.fn.yvdate.methods[options];
if (method) {
var args = [this];
for (var i = 1; i < arguments.length; i++) {
args.push(arguments[i]);
}
return method.apply(this, args);
} else {
console.error('not found method:' + options);
}
}
options = options || {};
return this.each(function () {
var state = $.data($(this).parent()[0], 'yvdate');
if (state) {
$.extend(state.options, options);
} else {
$.data($(this).parent()[0], 'yvdate', {
options: $.extend({}, $.fn.yvdate.defaults, options)
});
}
init(this);
});
};
$.fn.yvdate.methods = {
getValue: function ($dom) {
return $dom.val();
},
setValue: function ($dom, value) {
return $dom.val(value);
},
focus: function ($dom) {
setTimeout(function () {
$dom.focus();
}, 10);
}
};
$.fn.power.defaults.xtype.yvdate = function ($targetDOM, option, context) {
if (option.name) {
var $dom = $("").appendTo($targetDOM);
} else {
$dom = $("").appendTo($targetDOM);
}
return $dom.yvdate(option, context);
};
$.fn.yvdate.defaults = {};
})(jQuery);