CRM平台公用方法
CRM平台前端内置多个公用方法,便于高速开发,这些方法一般放在crm.portal.js里。
公共方法
initCodeSelectPicker()
根据码表更新下拉框的数据 基于selectPicker。
使用方法:
<select id="htlx" name="htlx" class="form-control selectpicker" kg-data-code="crm_htlx">
<option value="">--请选择--</option>
</select>
源码:
if ($('table.kungeekui-datagrid').length < 1 && ('select.selectpicker').length > 0) {//自动执行
initCodeSelectPicker();
}
function initCodeSelectPicker() {
$('select.selectpicker').each(function () {
var code = $(this).attr('kg-data-code');
if (!code) {
return;
}
if (top.codeMapperData[code]) {
initSelect($('.selectpicker[kg-data-code="' + code + '"]'), top.codeMapperData[code]);
return
}
!function (code) {
$.ajax({
type: 'get',
url: "/portal/crm/infra/ftspcode.do?query&code=" + code,
success: function (res) {
if (res && res[0]) {
top.codeMapperData[code] = res[0];
initSelect($('.selectpicker[kg-data-code="' + code + '"]'), top.codeMapperData[code]);
}
}
});
}(code)
function initSelect(el, data) {
if (el.get(0).hasInitedSelect) {
return
} else {
el.get(0).hasInitedSelect = true;
}
for (i in data) {
var $option = $('<option value="' + i + '">' + data[i] + '</option>');
el.append($option);
}
el.selectpicker('refresh');
}
})
}
redirectTab(name,url)
首页一级菜单的跳转。
使用方法:
redirectTab('加盟商合同审核');
redirectTab('加盟商合同审核', '/portal/htContract.do?htSpPage');//url优先级大于name
源码:
window.redirectTab = function (name, url) {
if (!name) {
return;
}
if (!window.top.$) {
return
}
var $$ = window.top.$;
$$('.submenu-label').each(function () {
if ($(this).text() == name) {
var li = $(this).parent('a').parent('li');
$$('.openable').removeClass('open');
$$('.openable .submenu').hide();
$$('.openable .submenu').find('li').removeClass('active');
if (!$$('.sidebar-menu').hasClass('sidebar-mini')) {
li.parent('ul').show();
}
li.parent('ul').parent('li').addClass('open');
li.addClass('active');
if (!url) {
li.trigger('click');
}
return
}
})
if (url) {
window.location.href = url
}
}
refreshPage(onlyTable)
刷新页面。
refreshPage();//刷新整个页面
refreshPage(true);//只刷新页面中的数据表格
tableQuery(form, table)
数据表格对应表单的查询。
tableQuery('#form', '#table');//根据Id为form的表单条件查询Id为table的数据表格
源码:
window.tableQuery = function (form, table) {
if (!form || !table) {
return false
}
if (!$(form).length || !$(table).length) {
return false
}
var url = $(table).getSource() ? $(table).getSource().setParamsByUrl($(form).serializeArray().map(function (obj) {
var $node = $(form).find('*[name=' + obj.name + ']');
if ($node.hasClass('kg-selectTree')) {
var _treeData = $node.getSelectTreeData()[0];
obj.value = _treeData ? _treeData.data[$node.attr('data-tree-query')] : '';
}
return obj;
})) : '';
$(table).reloadUrl(url);
}
initIndustryDrop()
初始化行业数据(下拉树)(用赋值window._default_hyDm 处理JSP方式的默认数据)
function initIndustryDrop(url, params) {
var $industry = $('input[data-type=industry]');
if (!$industry.length)
return;
$.getJSON(url || '/skin/cache/crm_hyfl.json', params || {}, function (result) {
window._industryData = [{
code: '',
name: '请选择',
id: '',
pId: '1'
}].concat(result.data || []);
$industry.each(function () {
var $this = $(this);
var _zNodes = _industryData.map(function (obj) {
return {
id: obj.id,
pId: obj.pId,
name: obj.name,
open: false,
data: obj
};
});
var _defaultTopNodes = new Array(11);
_zNodes.forEach(function (obj) {
var _index = ['请选择', '批发业', '零售业', '租赁业', '商务服务业', '建筑安装业', '软件和信息技术服务业', '制造业', '专业技术服务业', '农、林、牧、渔业', '居民服务、修理和其他服务业'].indexOf(obj.name);
_index >= 0 && _defaultTopNodes.splice(_index, 1, obj);
});
$this.addClass('kg-selectTree').selectTree({
zNodes: _zNodes,
setting: {
callback: {
beforeClick: function (treeId, treeNode, clickFlag) {
$('.kg-selectTree-dropdown').hide();
return true;
}
}
},
defaultSelectedNodes: [_zNodes[0]],
showTopDrop: true,
defaultTopNodes: _defaultTopNodes
});
if (window._default_hyDm) {
$industry.selectTreeNodeByDataParam(window._default_hyDm, 'code');
}
});
});
}
reinitIframe()
重置Iframe高度
window.reinitIframe = function () {
var $iframe = $('iframe.crm-iframe');
$iframe.each(function () {
this.height = "100%";
if (!this.$iframeWrap) {
this.$iframeWrap = $('<div class="crm-iframe-wrap"></div>');
$(this).wrap(this.$iframeWrap);
}
if (!$(this).is(':visible')) {
return
}
var height = $(this).contents().height();
$('.crm-iframe-wrap').height(height);
})
}
原生扩展
// 字符串扩展,属性字符串转对象 规则 : 'width':'200px' -> {width:'200px'}
String.prototype.toObject = function () {
return JSON.parse('{' + this.replace(/\s*['"]*([^'":;\s]*)['"]*\s*:+\s*['"]*([^'":;\s]*)['"]*\s*;*/g, '"$1":"$2",').replace(/,{1}$/g, '') + '}');
};
// 字符串 toBool 说明:"false" to false
String.prototype.toBool = function () {
return (/^true$/i).test(this);
};
//判断是否email
String.prototype.isEmail = function () {
return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(this);
};
//检查电话号码
String.prototype.isPhoneCall = function () {
return /(^1[3|4|5|7|8]\d{9}$)|(^0\d{2,3}-?\d{7,8}$)/.test(this);
};
//HTML字符串转义
String.prototype.toHtmlCode = function () {
var _temp = document.createElement('div');
_temp.innerHTML = this.replace(/((?:&))\s+((?:#))/g, '$1$2');
return _temp.innerText;
};
//转换百分比
String.prototype.toLevel = function () {
var temp = /[0-9]+(\.[0-9]+){0,1}/.exec(this);
if (!temp)
return '';
var _str = Number(temp[0]).toString();
var _index = _str.indexOf('.');
var _chart = [];
for (var i = 0; i < _str.length; i++) {
if (_str[i] == '.')
continue;
_chart.push(_str[i]);
}
_index += 2;
if (_index < 2 || (_index - _chart.length > 1))
return _chart.concat(['0', '0']).join('').replace(/^[0]+/g, '');
if (_chart.length < _index)
return _chart.concat(['0']).join('').replace(/^[0]+/g, '');
if (_chart.length > _index)
_chart.splice(_index, 0, '.');
return _chart.join('').replace(/^[0]+/g, '');
};
//获取链接字符串中参数
String.prototype.getParamByUrl = function (name) {
var _name = new RegExp(name + '=([^&]{0,})').exec(decodeURI(this));
return (_name && _name.length) ? _name[1] : null;
};
//生成链接参数对象
String.prototype.setParamByUrl = function (name, value) {
var _paramStr = /[^]*\?([^?]+)$/.exec(decodeURI(this));
var _this = this;
if (!_paramStr && _this.indexOf('?') < 0) {
_this += '?';
}
var _param = name + '=' + value;
if (this.getParamByUrl(name) == null) {
return _this.concat(((_paramStr && _paramStr.length) ? '&' : '') + _param);
}
return _this.replace(new RegExp(name + '=([^&]{0,})'), _param);
};
String.prototype.setParamsByUrl = function (array) {
if (!array || !array.push)
return this;
var _this = this;
array.forEach(function (obj) {
_this = _this.setParamByUrl(obj.name, obj.value);
});
return _this;
};
//将数字格式的字符串转换为时间格式的字符串
String.prototype.toDateFormat = function (format) {
return /^\d{4,8}$/.test(this) ? this.replace(/\B(?=\d{2}$)/, format || '-').replace(/(^\d{4})\B(?=\d)/, '$1'.concat(format || '-')) : this.toString();
};
//转换数字字符串位数,默认2位,小于则补0,大于则截取
String.prototype.toFixDigit = function (number, last) {
number = typeof number === 'number' && number > 0 ? number : 2;
var _this = this.toString();
if (!/^[\d]+$/.test(_this) || new RegExp('^[\\d][' + number + ']$').test(_this))
return _this.toString();
if (_this.length > number)
return !last ? _this.substring(_this.length - number, _this.length) : _this.substring(0, number);
while (number - _this.length > 0) {
_this = !last ? '0'.concat(_this) : _this.concat('0');
}
return _this;
};
//金额字符串处理
String.prototype.toMoney = function () {
var _regx = /[-]{0,1}[0-9]+(\.[0-9]+){0,1}/.exec(this);
if (!_regx)
return '0.00';
var _temp = _regx[0].split('.');
_temp[0] = _temp[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
_temp[1] = _temp[1] || '00';
_temp[1].length < 2 && (_temp[1] += '0');
return _temp.join('.');
};
Number.prototype.toMoney = function () {
return this.toString().toMoney()
}
jQuery 扩展
crm_clearForm
清空表单数据
$('#form').crm_clearForm();
setLoader
显示/隐藏原生加载遮罩
$('#div').setLoader(true);//显示加载遮罩
$('#div').setLoader(false);//隐藏加载遮罩
源码:
$.extend(true, $.fn, {
setLoader: function (status) {//显示加载蒙层
return this.each(function () {
try {
if ($(this).css('position') != 'absolute' || $(this).css('position') != 'relative' || $(this).css('position') != 'fixed') {
$(this).css('position', 'relative');
}
} catch (e) {
}
if (!this.$loader) {
this.$loader = $('<div class="kg-loader"><div class="kg-loader-icon"><i class="fa fa-spinner fa-spin fa-3x fa-fw" style="color:#0dbbe5"></i></div></div>');
if ($(this).is('body')) {
this.$loader.css('position', 'fixed');
}
$(this).append(this.$loader);
}
if (status) {
this.$loader.fadeIn();
} else {
this.$loader.fadeOut();
}
})
},
crm_clearForm: function () {//清空元素内表单元素值
return this.each(function () {
$(this).clearValidHints();
$(this).find('input').not('input[disabled],input[readonly]').val('');
$(this).find('input[type="checkbox"]').not('input[disabled],input[readonly]').prop('checked', false);
$(this).find('input[type="radio"]').not('input[disabled],input[readonly]').prop('checked', false);
$(this).find('input.kg-dateSelect').val('');
$(this).find('textarea').not('textarea[disabled],textarea[readonly]').val('');
$(this).find('select').not('select[disabled],select[readonly]').val('');
$(this).find('select.selectpicker').selectpicker('refresh');
})
}
})