UNPKG

igi_orion_cignacmb

Version:

Censors words out of text

533 lines (530 loc) 27.2 kB
/* * @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;