igi_orion_cignacmb
Version:
Censors words out of text
399 lines (395 loc) • 19 kB
JavaScript
/*
* @Author: weicong.ling
* @Date: 2020-04-23 11:53:55
* @Last Modified by: weicong.ling
* @Last Modified time: 2020-05-11 19:05:13
*/
/**
*
* @param {*} window
* @param {*} document
* @param {*} $
*/
var fn = function (window, document, $) {
'use strict';
var defaults = {
pluginName: 'date',
value: '',
name: '',
linkage: false,//是否和其他数据联动
oneDay: 86400000, //一天毫秒数
startDate: '1900-01-01',
endDate: '2090-01-01'
};
/**
*
* @param {元素节点} element
* @param {初始入参} options
*/
function Field(element, options) {
var that = this;
that.element = element;
that.$element = $(element);
that.$fns = options;
that.oneDay = defaults.oneDay;
that._data = {
id: options.field.id ? options.field.id : (that.$element.data().id ? that.$element.data().id : defaults.pluginName + parseInt(Math.random() * 1000000)),
name: options.field.name ? options.field.name : (that.$element.data().name ? that.$element.data().name : defaults.name + parseInt(Math.random() * 1000000)),
linkage: options.field.linkage ? options.field.linkage : defaults.linkage,
};
options.field.startDate = options.field.startDate ? options.field.startDate : defaults.startDate;
options.field.endDate = options.field.endDate ? options.field.endDate : defaults.endDate;
that.settings = $.extend({}, defaults, that.$element.data(), options, that._data);
that.setDate(that.settings);
that.init();
};
Field.prototype = {
init: function () {
var that = this;
if (!that.thisShow(that.settings)) {
return;
}
that.$element['0'].value = that.settings.field.value;
if (window.mobile) {
$('.' + that.settings.id).each(function () {
if (!$(this).attr("id")) {
$(this).attr('id', parseInt(Math.random() * 1000000));
}
var id = $(this).attr('id');
// var startDate = $(this).attr("startDate") ? $(this).attr("startDate") : '1900-01-01';
var startDate = that.settings.field.startDate ? that.settings.field.startDate : ($(this).attr("startDate") ? $(this).attr("startDate") : '1900-01-01');
var endDate = that.settings.field.endDate ? that.settings.field.endDate : ($(this).attr("endDate") ? $(this).attr("endDate") : '1900-01-01');
var startDateYear = startDate.split("-")[0];
var startDateMonth = startDate.split("-")[1];
var startDateDay = startDate.split("-")[2];
var endDateYear = endDate.split("-")[0];
var endDateMonth = endDate.split("-")[1];
var endDateDay = endDate.split("-")[2];
new Mdate(id, {
beginYear: startDateYear,
defaultDate: that.settings.field.value.toString(),
beginMonth: parseInt(startDateMonth),
beginDay: parseInt(startDateDay),
endYear: endDateYear,
endMonth: parseInt(endDateMonth),
endDay: parseInt(endDateDay),
format: "-",
onSelected: function (data) {
that.settings.field.value = data;
try {
that.$fns.getValue(that.settings.field.value, that.settings.linkage);
} catch (error) {
console.error('***' + that.settings.pluginName + '未定义 $fns ! 或未给定回调数据***', error)
}
that.validator(that.settings);
}
})
});
} else {
$('.' + that.settings.id).each(function () {
if (!$(this).attr('id')) {
$(this).attr('id', parseInt(Math.random() * 1000000));
}
var start = that.settings.field.startDate ? that.settings.field.startDate : ($(this).attr("startDate") ? $(this).attr("startDate") : '1900-01-01');
var end = that.settings.field.endDate ? that.settings.field.endDate : ($(this).attr("startDate") ? $(this).attr("startDate") : '1900-01-01');
console.log('start', start, end)
var $this = $(this);
var id = $this.attr('id');
var c1 = new MyCalendar({
skin: 'calendar-ui', //皮肤
autoClose: true, //自动关闭
el: document.getElementById(id), //触发的元素
readOnly: true, //el只读
// parent: $this,
// autoSetPosition: true, //自动设置位置,一般与parent一起用
// left: $this.offset().left, //距离el left的位置,位置px
// top: $this.offset().top + 36, //距离el top的位置,位置px
showAllDate: false, //显示所有日期,包括上个月、下个月
defaultValue: that.settings.field.value.toString(), //默认值
maxDate: end, //日期范围控制-最大日期
minDate: start, //日期范围控制-最小日期
callback: function (data) {
that.settings.field.value = data;
try {
that.$fns.getValue(that.settings.field.value, that.settings.linkage);
} catch (error) {
console.error('***' + that.settings.pluginName + '未定义 $fns ! 或未给定回调数据***', error)
}
that.validator(that.settings);
}
});
})
}
that.$fns.getValue(that.settings.field.value, false);
that.fix(that.settings.id);
that.validator(that.settings);
},
setDate: function (settings) {
var that = this;
if (settings.fieldName == 'birthday') {
settings.field.relationshipConfig = that.setRelationshipConfig(settings);
var result = that.fixStarEndDateByRelationship(settings);
if (result) {
that.settings.field.startDate = result.start;
that.settings.field.endDate = result.end;
}
} else if (settings.fieldName == 'idExpDate') {
var result = that.fixIdTypeExpDate(settings);
settings.field.value = result.value;
settings.field.startDate = result.startDate;
} else if (settings.fieldName == 'creditCardExpDate') {
that.settings.field.startDate = that.generateTimeReqestNumber();
}
},
addDate: function (date, days) {
var that = this;
if (days == undefined || days == '') {
days = 1;
}
var date = new Date(date);
date.setDate(date.getDate() + days);
var month = date.getMonth() + 1;
var day = date.getDate();
return date.getFullYear() + '-' + that.getFormatDate(month) + '-' + that.getFormatDate(day);
},
fixIdTypeExpDate: function (settings) {
var that = this;
var today = that.addDate(new Date(), 1);
var todayInMill = new Date(today.replace(/-/g, '\/')).getTime();
var effectiveDateInMill = new Date(settings.item.birthday.effectiveDate.replace(/-/g, '\/')).getTime()
var startDate = settings.field.startDate;
var endDate = settings.field.endDate;
var value = settings.field.value;
if (todayInMill > effectiveDateInMill) {
startDate = that.addDate(new Date(), 1);
} else {
startDate = settings.item.birthday.effectiveDate;
}
if (settings.field.value) {
var startDateMill = new Date(startDate.replace(/-/g, "\/")).getTime();
var endDateMill = new Date(endDate.replace(/-/g, "\/")).getTime();
var valueDateMill = new Date(value.replace(/-/g, "\/")).getTime();
if (valueDateMill >= startDateMill && valueDateMill <= endDateMill) {
} else { //值不在可选范围内
var resetValue = new Date(startDateMill);
value = resetValue.getFullYear() + "-" + that.pad2(resetValue.getMonth() + 1) + "-" + that.pad2(resetValue.getDate());
}
}
return {
value: value,
startDate: startDate,
}
},
pad2: function (n) {
return n < 10 ? '0' + n : n;
},
generateTimeReqestNumber: function () {
var that = this;
var date = new Date();
date = date.getTime() + that.oneDay;
date = new Date(date);
return date.getFullYear().toString() + '-' + that.pad2(date.getMonth() + 1) + '-' + that.pad2(date.getDate())
},
setRelationshipConfig: function (result) {
var relationshipAgeRangeArrays = result.field.ageRangeConfigs;
var resultJson = {};
if (relationshipAgeRangeArrays) {
for (var i = 0; i < relationshipAgeRangeArrays.length; i++) {
var relationshipItem = relationshipAgeRangeArrays[i];
resultJson[relationshipItem.relationship] = {
start: { type: relationshipItem.endFlag, value: relationshipItem.endAge },
end: { type: relationshipItem.startFlag, value: relationshipItem.startAge },
};
}
}
return resultJson
},
fixStarEndDateByRelationship: function (settings) {
var that = this;
var effectiveDate = settings.field.effectiveDate,
relationship = settings.item.relationToApplicant.value;
if (relationship != '-1' && relationship) {
var configForUser = settings.field.relationshipConfig[relationship];
if (!effectiveDate) {
effectiveDate = that.generateTimeReqestNumber()
}
var result = that.calDate(effectiveDate, configForUser)
return result;
} else {
return false;
}
},
getFormatDate: function (arg) {// 日期月份/天的显示,如果是1位数,则在前面加上'0'
if (arg == undefined || arg == '') {
return '';
}
var re = arg + '';
if (re.length < 2) {
re = '0' + re;
}
return re;
},
calDate: function (effectiveDate, config) {
var that = this;
var result = {
start: "",
end: ""
};
var oneDay = that.settings.oneDay; //一天的毫秒数
var effectiveDateMS = new Date(effectiveDate).getTime();
//计算end
if (config.end.type == 'D') {
var time = effectiveDateMS - (oneDay * parseInt(config.end.value));
var yearToCompare = parseInt(new Date(time).getFullYear())
var monthToCompare = parseInt(new Date(time).getMonth() + 1)
var dateToCompare = parseInt(new Date(time).getDate())
result.end = yearToCompare + "-" + that.getFormatDate(monthToCompare) + '-' + that.getFormatDate(dateToCompare + 0);
} else if (config.end.type == 'Y') {
var yearToCompare = parseInt(new Date(effectiveDate).getFullYear())
var monthToCompare = parseInt(new Date(effectiveDate).getMonth() + 1)
var dateToCompare = parseInt(new Date(effectiveDate).getDate())
result.end = yearToCompare - parseInt(config.end.value) + "-" + that.getFormatDate(monthToCompare) + '-' + that.getFormatDate(dateToCompare + 0);
}
//计算start
if (config.start.type == 'D') {
var time = effectiveDateMS - (oneDay * parseInt(config.start.value));
var yearToCompare = parseInt(new Date(time).getFullYear())
var monthToCompare = parseInt(new Date(time).getMonth() + 1)
var dateToCompare = parseInt(new Date(time).getDate())
result.start = yearToCompare + "-" + that.getFormatDate(monthToCompare) + '-' + that.getFormatDate(dateToCompare + 0);
} else if (config.start.type == 'Y') {
var coreectDate = new Date(effectiveDateMS + oneDay) // + 1天
var yearToCompare = parseInt(coreectDate.getFullYear())
var monthToCompare = parseInt(coreectDate.getMonth() + 1)
var dateToCompare = parseInt(coreectDate.getDate())
result.start = yearToCompare - (parseInt(config.start.value) + 1) + "-" + that.getFormatDate(monthToCompare) + '-' + that.getFormatDate(dateToCompare);
}
var end_time = new Date(result.end).getTime()
var now_time = new Date()
if (end_time > now_time.getTime()) {
result.end = now_time.getFullYear() + '-' + that.getFormatDate(now_time.getMonth() + 1) + '-' + that.getFormatDate(now_time.getDate())
}
return result
},
thisShow: function (settings) {
var bool = true;
if (settings.fieldName == 'creditCardExpDate') {
if (settings.item.bankCardType.value == '3') {
settings.item.creditCardExpDate.visible = false;
this.$element[0].hidden = false;
bool = true;
} else {
settings.item.creditCardExpDate.visible = true;
settings.item.creditCardExpDate.value = '';
settings.item.creditCardExpDate.error = null;
this.$element[0].hidden = true;
bool = false;
}
}
return bool;
},
/**
*
* @param {id元素} id
*/
fix: function (id) {
var that = this;
$("#" + id).focus(function () {
}).blur(function () {
});
that.$element.bind("input blur", function () {//失去焦点触发
// console.log('blur-失去焦点触发', that.$element['0'].value);
});
that.$element.bind("input change", function () {//数据改变及数据改变之后失去焦点触发
// console.log('change-数据改变及数据改变之后失去焦点触发', that.$element['0'].value);
});
that.$element.bind("input propertychange", function () {//数据改变触发
// console.log('propertychange-数据改变触发', that.$element['0'].value);
});
},
/**
*
* @param {验证数据} result
*/
validator: function (result) {
var that = this;
var errors = that.validate(result);
that.$element['0'].errors = errors;
try {
that.$fns.errors(errors);
} catch (error) {
console.error('***' + that.settings.pluginName + '未定义 $fns ! 或未给定回调数据***', error)
}
},
/**
*
* @param {验证数据} result
*/
validate: function (result) { //用于验证,如有错误,返回数组,便于前端提示
var that = this;
var errors = [];
if(!result.field.visible){
return null;
}
var validateName = ['validateNull', 'otherValidate'];
for (var i = 0; i < validateName.length; i++) {
var key = validateName[i];
if (typeof (that[key]) == "function" && key != "validate") {
var runningFunc = that[key](result);
if (!runningFunc.isCorrect) {
errors.push(runningFunc);
break;
}
}
}
return errors.length > 0 ? errors : null;
},
/**
*
* @param {空值数据} result
*/
validateNull: function (result) { //用于验证,如有错误,返回数组,便于前端提示
var error = {
isCorrect: true,
type: "tooltip",
msg: "请选择" + result.name,
code: "",
id: result.id
};
var value = result.field.value;
if ((value == '-1' || value == '' || value == null || value == undefined) && (value != '0')) {//不为空
error.isCorrect = false;
}
return error;
},
otherValidate: function (result) {
var error = {
isCorrect: true,
type: "tooltip",
msg: "请选择" + result.name,
code: "",
id: result.id
};
if (!result.field.type) {
return error;
}
for (var i = 0; i < result.field.type.length; i++) {
var other = result.field.type[i] ? require('./fieldValidator/' + result.field.type[i]) : false;
if (other) {
return other(result);
}
}
return error;
}
};
$.fn[defaults.pluginName] = function (options) {
var args = arguments;
var that = this;
return that.each(function () {
if (!$.data(that, defaults.pluginName)) {
$.data(that, defaults.pluginName, new Field(that, options));
}
});
};
};
module.exports = fn;