igi_orion_cignacmb
Version:
Censors words out of text
533 lines (530 loc) • 27.2 kB
JavaScript
/*
* @Author: weicong.ling
* @Date: 2020-04-23 11:53:55
* @Last Modified by: weicong.ling
* @Last Modified time: 2020-05-12 10:19:59
*/
var centralModel = require('./centralModel');
var fn = function (window, document, $) {
'use strict';
var defaults = {
pluginName: 'address',
name: '',
linkage: false,//是否和其他数据联动
noVpro: false,//不需要校验省以下
noCit: false,//不需要校验市级以下
manageCom: '',//特定某个地址配置管理
cityControl: '',//部分地址配置
spcialCityHide:true,//['701', '801', '1101']为true ,其余为false
};
centralModel.testMobileOrPc($);
function Field(element, options) {
var that = this;
that.element = element;
that.$element = $(element);
that.$fns = options;
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,
manageCom: options.field.manageCom ? options.field.manageCom : defaults.manageCom,
cityControl: options.field.cityControl ? options.field.cityControl : defaults.cityControl,
};
that.settings = $.extend({}, defaults, that.$element.data(), options, that._data);
that.init();
};
Field.prototype = {
init: function () {
var that = this;
var settings = that.settings;
var html = '';
if (window.mobile) {
html = '<input placeholder="请选择地址" type="text"readonly id="' + settings.id + '_mobile">'
} else {
html = '<select id="' + settings.id + 'province"></select><select id="' + settings.id + 'city"></select><select id="' + settings.id + 'district"></select>'
}
html += '<input type="text" id="' + settings.id + 'detail"/>'
$('#' + settings.id).html(html)
that.setHtml(settings);
that.$fns.getValue(settings.field.value, false);
that.$element['0'].value = settings.field.value
that.fix();
},
setHtml: function (settings) {
var that = this;
$('#' + settings.id + 'detail').val(settings.field.value.detail);
that.provincesFilter(settings);
if (window.mobile) {
that.fixMobileVlue(settings);
that.setMobileSelect(settings);
} else {
that.setPcSelect(settings);
}
that.validator(settings);
},
getDefaultCodeArray: function () {
var provinceShowArray = ['11', '31', '44', '33', '32', '51', '37', '21', '42', '50', '12', '61', '43', '41', '36', '35'];//cityControl
var cityShowArray = ['3302', '3502', '2102'];
var manageComShowByCode = [
{ code: '8604000001', name: '湖北省', id: '42', cityId: '', cityName: '', cityIsShow: true },
{ code: '8615000001', name: '重庆市', id: '50', cityId: '', cityName: '', cityIsShow: true },
{ code: '8610000001', name: '上海市', id: '31', cityId: '', cityName: '', cityIsShow: true },
{ code: '8602000001', name: '北京市', id: '11', cityId: '', cityName: '', cityIsShow: true },
{ code: '8603000001', name: '广东省', id: '44', cityId: '', cityName: '', cityIsShow: true },
{ code: '8601000001', name: '深圳市', id: '44', cityId: '4403', cityName: '', cityIsShow: true },
{ code: '8603020001', name: '佛山市', id: '44', cityId: '4406', cityName: '', cityIsShow: true },
{ code: '8607000001', name: '陕西省', id: '61', cityId: '', cityName: '', cityIsShow: true },
{ code: '8612000001', name: '青岛市', id: '37', cityId: '3702', cityName: '', cityIsShow: true },
{ code: '8605000001', name: '江苏省', id: '32', cityId: '', cityName: '', cityIsShow: true },
{ code: '8618000001', name: '天津市', id: '12', cityId: '', cityName: '', cityIsShow: true },
{ code: '8608000001', name: '成都市', id: '51', cityId: '5101', cityName: '', cityIsShow: true },
{ code: '8605030001', name: '苏州市', id: '32', cityId: '3205', cityName: '', cityIsShow: true },
{ code: '8609000001', name: '山东省', id: '37', cityId: '', cityName: '', cityIsShow: true },
{ code: '8611000001', name: '浙江省', id: '33', cityId: '3302', cityName: '宁波市', cityIsShow: false },
{ code: '8617000001', name: '江西省', id: '36', cityId: '', cityName: '', cityIsShow: true },
{ code: '8606000001', name: '辽宁省', id: '21', cityId: '2102', cityName: '大连市', cityIsShow: false },
{ code: '8605040001', name: '南通市', id: '32', cityId: '3206', cityName: '', cityIsShow: true },
{ code: '8605010001', name: '常州市', id: '32', cityId: '3204', cityName: '', cityIsShow: true },
{ code: '8616000001', name: '河南省', id: '41', cityId: '', cityName: '', cityIsShow: true },
{ code: '8613000001', name: '长沙市', id: '43', cityId: '4301', cityName: '', cityIsShow: true },
{ code: '8611010001', name: '绍兴市', id: '33', cityId: '3306', cityName: '', cityIsShow: true },
{ code: '8603010001', name: '东莞市', id: '44', cityId: '4419', cityName: '', cityIsShow: true },
{ code: '8605020001', name: '无锡市', id: '32', cityId: '3202', cityName: '', cityIsShow: true },
{ code: '8609010001', name: '烟台市', id: '37', cityId: '3706', cityName: '', cityIsShow: true },
{ code: '8619000001', name: '福建省', id: '35', cityId: '3502', cityName: '厦门市', cityIsShow: false },
];
var resultList = {
provinceShowArray: provinceShowArray,
cityShowArray: cityShowArray,
manageComShowByCode: manageComShowByCode
};
return resultList
},
citiesFilter: function (cities,settings) {
console.log('citiesFilter_citiesFilter',cities,settings);
var manageComShowByCode = this.getDefaultCodeArray().manageComShowByCode;
var list = [];
if (settings.spcialCityHide) {
var list1 = []
for (var i = 0; i < cities.length; i++) {
var citiesItem = cities[i];
if (citiesItem.id != '2102') {
list1.push(citiesItem);
}
}
console.log('citiesItem_citiesItem',list1)
if (settings.field.value.city == '2102') {
settings.field.value.city = '';
}
cities = list1;
}
console.log('cities_cities',cities)
if (settings.manageCom) {
for (var i = 0; i < manageComShowByCode.length; i++) {
var manageComShowByCodeItem = manageComShowByCode[i];
if (settings.manageCom == manageComShowByCodeItem.code) {
for (var j = 0; j < cities.length; j++) {
var citiesItem = cities[j];
if (manageComShowByCodeItem.cityIsShow) {
if (!manageComShowByCodeItem.cityId) {
list.push(citiesItem);
} else if (manageComShowByCodeItem.cityId == citiesItem.id) {
list.push(citiesItem);
}
} else {
if (manageComShowByCodeItem.cityId != citiesItem.id) {
list.push(citiesItem);
}
}
}
}
}
cities = list;
} else if (settings.cityControl == '1') {
for (var i = 0; i < cities.length; i++) {
var citiesItem = cities[i];
if (citiesItem.id != '3502' && citiesItem.id != '3302') {
list.push(citiesItem);
}
}
if (settings.field.city == '3502' || settings.field.city == '3302') {
settings.field.city = '';
}
cities = list;
}
return list;
},
provincesFilter: function (settings) {
var that = this;
var provinceShowArray = that.getDefaultCodeArray().provinceShowArray;
var manageComShowByProvince = that.getDefaultCodeArray().manageComShowByCode;
var list = [];
var listForMobile = [];
if (settings.manageCom) {
for (var i = 0; i < manageComShowByProvince.length; i++) {
var manageComShowByProvinceItem = manageComShowByProvince[i];
if (settings.manageCom == manageComShowByProvinceItem.code) {
for (var j = 0; j < settings.field.provinces.length; j++) {
var provinceItem = settings.field.provinces[j];
if (provinceItem.id == manageComShowByProvinceItem.id) {
list.push(provinceItem);
var childs = [];
for (var k = 0; k < settings.field.address[j].childs.length; k++) {//筛选市
var listForMobileChildItem = settings.field.address[j].childs[k];
if (manageComShowByProvinceItem.cityIsShow) {
if (!manageComShowByProvinceItem.cityId) {
childs.push(listForMobileChildItem);
} else if (manageComShowByProvinceItem.cityId == listForMobileChildItem.id) {
childs.push(listForMobileChildItem);
}
} else {
if (manageComShowByProvinceItem.cityId != listForMobileChildItem.id) {
childs.push(listForMobileChildItem);
}
}
}
settings.field.address[j].childs = childs;
listForMobile.push(settings.field.address[j]);
}
}
}
}
settings.field.provinces = list;
settings.field.address = listForMobile;
} else if (settings.cityControl == '1') {
for (var i = 0; i < provinceShowArray.length; i++) {
var provinceShowArrayItem = provinceShowArray[i];
for (var j = 0; j < settings.field.provinces.length; j++) {
var provinceItem = settings.field.provinces[j];
if (provinceItem.id == provinceShowArrayItem) {
list.push(provinceItem)
if (settings.field.address[j].id == '33') {
var childs = [];
for (var k = 0; k < settings.field.address[j].childs.length; k++) {
var childsItem = settings.field.address[j].childs[k];
if (childsItem.id != '3302') {
childs.push(childsItem);
}
}
settings.field.address[j].childs = childs;
}
if (settings.field.address[j].id == '35') {
var childs = [];
for (var k = 0; k < settings.field.address[j].childs.length; k++) {
var childsItem = settings.field.address[j].childs[k];
if (childsItem.id != '3502') {
childs.push(childsItem);
}
}
settings.field.address[j].childs = childs;
}
if (settings.spcialCityHide) {
if (settings.field.address[j].id == '21') {
var childs = [];
for (var k = 0; k < settings.field.address[j].childs.length; k++) {
var childsItem = settings.field.address[j].childs[k];
if (childsItem.id != '2102') {
childs.push(childsItem);
}
}
settings.field.address[j].childs = childs;
}
}
listForMobile.push(settings.field.address[j]);
}
}
}
settings.field.provinces = list;
settings.field.address = listForMobile;
}
},
getPositionIndexArr: function (settings) {
var indexArr = []
for (var i = 0; i < settings.field.address.length; i++) {
if (settings.field.address[i].id == settings.field.value.province) {
indexArr[0] = i;
for (var j = 0; j < settings.field.address[i].childs.length; j++) {
if (settings.field.address[i].childs[j].id == settings.field.value.city) {
indexArr[1] = j;
for (var k = 0; k < settings.field.address[i].childs[j].childs.length; k++) {
if (settings.field.address[i].childs[j].childs[k].id == settings.field.value.district) {
indexArr[2] = k;
continue;
}
}
continue;
}
}
continue;
}
}
if (indexArr.length < 3) {
indexArr = [0, 0, 0];
}
return indexArr;
},
fixMobileVlue:function(settings){
var that = this;
var provice = that.getNameForId(settings, 'provinces', 'province');
try {
if(!provice){
settings.field.value.province = settings.field.address[0].id;
settings.field.value.city = settings.field.address[0].childs[0].id;
settings.field.value.district = settings.field.address[0].childs[0].childs[0].id;
}
} catch (error) {
console.error(error);
}
},
setMobileSelect: function (settings) {
var that = this;
new MobileSelect({
trigger: '#' + settings.id + '_mobile',
title: '地址选择',
wheels: [
{ data: settings.field.address }
],
keyMap: { id: 'id', value: 'value', childs: 'childs' },
position: that.getPositionIndexArr(settings),
transitionEnd: function (indexArr, data) {
},
callback: function (indexArr, data) {
settings.field.indexArr = indexArr;
settings.field.value.province = data[0].id;
$('#' + settings.id + '_mobile').val(data[0].value);
if (data[1]) {
settings.field.value.city = data[1].id;
$('#' + settings.id + '_mobile').val(data[0].value
+ '-' + data[1].value);
}
if (data[2]) {
settings.field.value.district = data[2].id;
$('#' + settings.id + '_mobile').val(data[0].value
+ '-' + data[1].value
+ '-' + data[2].value);
}
that.$fns.getValue(settings.field.value, settings.linkage);
}
});
var contact = that.getNameForId(settings, 'provinces', 'province') + '-' + that.getNameForId(settings, 'cities', 'city') + '-' + that.getNameForId(settings, 'districts', 'district');
$('#' + settings.id + '_mobile').val(contact)
},
setPcSelect: function (settings) {
var that = this;
var cities = that.getCitiesByProvince(settings);
var districts = that.getDistrictsByCity(settings);
var isExist = false;/**如果省不在候选数组则清空*/
for (var i = 0; i < settings.field.provinces.length; i++) {
var item = settings.field.provinces[i];
if (item.id == settings.field.value.province) {
isExist = true
}
}
if (!settings.field.value.province || !isExist) {
settings.field.value.province = '';
settings.field.value.city = '';
cities = [];
settings.field.value.district = '';
districts = [];
}
var cityValue = false;//处理城市选项是否在候选列表中 //如果已选值不在候选值中,重置选项为空
for (var i = 0; i < cities.length; i++) {
var item = cities[i];
if (item.id == settings.field.value.city) {
cityValue = true;
}
}
if (!cityValue) {
settings.field.value.city = '';
settings.field.value.district = '';
districts = [];
}
var districtValue = false;//处理城市选项是否在候选列表中 //如果已选值不在候选值中,重置选项为空
for (var i = 0; i < districts.length; i++) {
var item = districts[i];
if (item.id == settings.field.value.district) {
districtValue = true;
}
}
if (!districtValue) {
settings.field.value.district = '';
}
centralModel.setSelectHtmlForId($, true, settings.id + 'province', settings.field.provinces, '请选择省', '', settings.field.value.province, {
key: 'id',
value: 'name'
});
centralModel.setSelectHtmlForId($, true, settings.id + 'city', cities, '请选择市', '', settings.field.value.city, {
key: 'id',
value: 'name'
});
centralModel.setSelectHtmlForId($, true, settings.id + 'district', districts, '请选择区', '', settings.field.value.district, {
key: 'id',
value: 'name'
});
},
getNameForId: function (settings, all, value) {
for (var i = 0; i < settings.field[all].length; i++) {
if (settings.field[all][i].id == settings.field.value[value]) {
return settings.field[all][i].name;
}
}
},
getCitiesByProvince: function (settings) {
var that = this;
var list = [];
for (var i = 0; i < settings.field.cities.length; i++) {
var city = settings.field.cities[i];
if (city.id.substring(0, 2) == settings.field.value.province) {
list.push(city);
}
}
list = that.citiesFilter(list,settings);
return list;
},
getDistrictsByCity: function (settings) {
var list = [];
for (var i = 0; i < settings.field.districts.length; i++) {
var district = settings.field.districts[i];
if (district.id.substring(0, 4) == settings.field.value.city) {
list.push(district);
}
}
return list;
},
judgeInsufficient: function (settings) {
var pro = ['MAC', 'HKG', 'TWN'];
var cit = ['4420', '4419'];
if (pro.indexOf(settings.field.value.province) != -1) {
settings.noVpro = true;
settings.field.city = '';
settings.field.district = '';
$('#' + settings.id + 'city').hide();
$('#' + settings.id + 'district').hide();
} else if (cit.indexOf(settings.field.value.city) != -1) {
settings.noCit = true;
settings.field.district = '';
$('#' + settings.id + 'city').show();
$('#' + settings.id + 'district').hide();
} else {
$('#' + settings.id + 'city').show();
$('#' + settings.id + 'district').show();
}
console.log(settings)
},
fix: function () {
var that = this;
var settings = that.settings;
$("#" + settings.id + 'province').change(function () {
settings.field.value.province = $(this)[0].value;
that.judgeInsufficient(settings);
that.$fns.getValue(settings.field.value, settings.linkage);
that.setHtml(settings);
});
$("#" + settings.id + 'city').change(function () {
settings.field.value.city = $(this)[0].value;
that.judgeInsufficient(settings);
that.$fns.getValue(settings.field.value, settings.linkage);
that.setHtml(settings);
});
$("#" + settings.id + 'district').change(function () {
settings.field.value.district = $(this)[0].value;
that.$fns.getValue(settings.field.value, settings.linkage);
that.setHtml(settings);
});
$("#" + settings.id + 'detail').change(function () {
settings.field.value.detail = $(this)[0].value;
that.setHtml(settings);
})
},
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)
}
},
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;
},
validateNull: function (result) {
var error = {
isCorrect: true,
type: "tooltip",
msg: "请填写" + result.name,
code: "",
id: result.id
};
if (result.noVpro) {
var value = result.field.value.province;
if ((value == '' || value == null || value == undefined) && (value != '0')) {//不为空
error.isCorrect = false;
}
} else if (result.noCit) {
for (var x in result.field.value) {
var value = result.field.value[x]
if (x != 'district') {
if ((value == '' || value == null || value == undefined) && (value != '0')) {//不为空
error.isCorrect = false;
}
}
}
} else {
for (var x in result.field.value) {
var value = result.field.value[x]
if ((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;