igi_orion_cignacmb
Version:
Censors words out of text
302 lines (300 loc) • 13.7 kB
JavaScript
/*
* @Author: weicong.ling
* @Date: 2020-04-23 11:53:55
* @Last Modified by: weicong.ling
* @Last Modified time: 2020-05-12 10:20:11
*/
var centralModel = require('./centralModel');
var fn = function (window, document, $) {
'use strict';
centralModel.testMobileOrPc($);
var defaults = {
pluginName: 'career',
value: '',
name: '',
validators: [],
optionals: [{ key: "-1", value: '请选择配置对应所选项' }],
itemKey: 'key',
itemValue: 'value',
linkage:false,//是否和其他数据联动
};
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,
};
that.settings = $.extend({}, defaults, that.$element.data(), options, that._data);
that.init();
that.fix();
};
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 + '_carrer">'
} else {
html = '<select id="' + settings.id + 'industry"></select><select id="' + settings.id + 'industryCategory"></select><select id="' + settings.id + 'occupationCode"></select>'
}
$('#' + settings.id).html(html)
that.setHtml(settings);
that.$fns.getValue(settings.field.value,false);
that.$element['0'].value = settings.field.value
that.validator(settings);
},
setHtml: function (settings) {
var that = this;
if (window.mobile) {
that.setMobileSelect(settings);
} else {
that.setPcSelect(settings);
}
that.validator(settings);
},
getPositionIndexArr: function (settings) {
var indexArr = []
for (var i = 0; i < settings.field.careersForNew.length; i++) {
if (settings.field.careersForNew[i].id == settings.field.value.industry) {
indexArr[0] = i;
for (var j = 0; j < settings.field.careersForNew[i].childs.length; j++) {
if (settings.field.careersForNew[i].childs[j].id == settings.field.value.industryCategory) {
indexArr[1] = j;
for (var k = 0; k < settings.field.careersForNew[i].childs[j].childs.length; k++) {
if (settings.field.careersForNew[i].childs[j].childs[k].id == settings.field.value.occupationCode) {
indexArr[2] = k;
continue;
}
}
continue;
}
}
continue;
}
}
if(indexArr.length < 3){
indexArr = [0,0,0];
}
return indexArr;
},
setMobileSelect: function (settings) {
var that = this;
new MobileSelect({
trigger: '#' + settings.id + '_carrer',
title: '职业选择',
wheels: [
{ data: settings.field.careersForNew }
],
keyMap: { id: 'id', value: 'value', childs: 'childs' },
position: that.getPositionIndexArr(settings),
transitionEnd: function (indexArr, data) {
},
callback: function (indexArr, data) {
console.log('indexArr, data', indexArr, data)
settings.field.indexArr = indexArr;
settings.field.value.industry = data[0].key;
$('#' + settings.id + '_carrer').val(data[0].value);
if (data[1]) {
settings.field.value.industryCategory = data[1].key;
$('#' + settings.id + '_carrer').val(data[0].value
+ '-' + data[1].value);
}
if (data[2]) {
settings.field.value.occupationCode = data[2].key;
$('#' + settings.id + '_carrer').val(data[0].value
+ '-' + data[1].value
+ '-' + data[2].value);
}
settings.field.value.industryContent = that.setValueForKey(settings, 'industrys', 'industry');
settings.field.value.industryCategoryContent = that.setValueForKey(settings, 'industryCategorys', 'industryCategory');
settings.field.value.occupationContent = that.setValueForKey(settings, 'occupationCodes', 'occupationCode');
that.$fns.getValue(settings.field.value,settings.linkage);
}
});
var contact = settings.field.value.industryContent + '-' + settings.field.value.industryCategoryContent + '-' + settings.field.value.occupationContent;
$('#' + settings.id + '_carrer').val(contact)
},
setPcSelect: function (settings) {
var that = this;
var industryCategorys = that.getIndustryTypeByIndustryName(settings);
var occupationCodes = that.getCareerNameByIndustryType(settings);
var isExist = false;
for (var i = 0; i < settings.field.industrys.length; i++) {
var item = settings.field.industrys[i];
if (item.key == settings.field.value.industry) {
isExist = true
}
}
if (!settings.field.value.industry || !isExist) {
settings.field.value.industry = '';
settings.field.value.industryCategory = '';
industryCategorys = [];
settings.field.value.occupationCode = '';
occupationCodes = [];
}
var cityValue = false;
for (var i = 0; i < industryCategorys.length; i++) {
var item = industryCategorys[i];
if (item.key == settings.field.value.industryCategory) {
cityValue = true;
}
}
if (!cityValue) {
settings.field.value.industryCategory = '';
settings.field.value.occupationCode = '';
occupationCodes = [];
}
var districtValue = false;
for (var i = 0; i < occupationCodes.length; i++) {
var item = occupationCodes[i];
if (item.key == settings.field.value.occupationCode) {
districtValue = true;
}
}
if (!districtValue) {
settings.field.value.occupationCode = '';
}
centralModel.setSelectHtmlForId($, true, settings.id + 'industry', settings.field.industrys, '请选择行业名称', '', settings.field.value.industry, {
key: 'key',
value: 'value'
});
centralModel.setSelectHtmlForId($, true, settings.id + 'industryCategory', industryCategorys, '请选择行业小类', '', settings.field.value.industryCategory, {
key: 'key',
value: 'value'
});
centralModel.setSelectHtmlForId($, true, settings.id + 'occupationCode', occupationCodes, '请选择职业名称', '', settings.field.value.occupationCode, {
key: 'key',
value: 'value'
});
settings.field.value.industryContent = that.setValueForKey(settings, 'industrys', 'industry');
settings.field.value.industryCategoryContent = that.setValueForKey(settings, 'industryCategorys', 'industryCategory');
settings.field.value.occupationContent = that.setValueForKey(settings, 'occupationCodes', 'occupationCode');
that.$fns.getValue(settings.field.value,settings.linkage);
},
setValueForKey: function (settings, all, value) {
var result = ''
for (var i = 0; i < settings.field[all].length; i++) {
if (settings.field[all][i].key == settings.field.value[value]) {
result = settings.field[all][i].value;
}
}
return result;
},
getIndustryTypeByIndustryName: function (settings) {
var list = [];
for (var i = 0; i < settings.field.industryCategorys.length; i++) {
var industryCategory = settings.field.industryCategorys[i];
if (industryCategory.key.substring(0, 2) == settings.field.value.industry) {
list.push(industryCategory);
}
}
return list;
},
getCareerNameByIndustryType: function (settings) {
var list = [];
for (var i = 0; i < settings.field.occupationCodes.length; i++) {
var careerName = settings.field.occupationCodes[i];
if (careerName.parentKey == settings.field.value.industryCategory) {
list.push(careerName);
}
}
return list;
},
fix: function () {
var that = this;
var settings = that.settings;
$("#" + settings.id + 'industry').change(function () {
settings.field.value.industry = $(this)[0].value;
that.setHtml(settings);
});
$("#" + settings.id + 'industryCategory').change(function () {
settings.field.value.industryCategory = $(this)[0].value;
that.setHtml(settings);
});
$("#" + settings.id + 'occupationCode').change(function () {
settings.field.value.occupationCode = $(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
};
var value = result.field.value;
for (var x in result.field.value) {
var value = result.field.value[x]
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;