CRM平台公用方法

CRM平台前端内置多个公用方法,便于高速开发,这些方法一般放在crm.portal.js里。

公共方法

initCodeSelectPicker()

根据码表更新下拉框的数据 基于selectPicker。
使用方法:

  1. <select id="htlx" name="htlx" class="form-control selectpicker" kg-data-code="crm_htlx">
  2. <option value="">--请选择--</option>
  3. </select>

源码:

  1. if ($('table.kungeekui-datagrid').length < 1 && ('select.selectpicker').length > 0) {//自动执行
  2. initCodeSelectPicker();
  3. }
  4. function initCodeSelectPicker() {
  5. $('select.selectpicker').each(function () {
  6. var code = $(this).attr('kg-data-code');
  7. if (!code) {
  8. return;
  9. }
  10. if (top.codeMapperData[code]) {
  11. initSelect($('.selectpicker[kg-data-code="' + code + '"]'), top.codeMapperData[code]);
  12. return
  13. }
  14. !function (code) {
  15. $.ajax({
  16. type: 'get',
  17. url: "/portal/crm/infra/ftspcode.do?query&code=" + code,
  18. success: function (res) {
  19. if (res && res[0]) {
  20. top.codeMapperData[code] = res[0];
  21. initSelect($('.selectpicker[kg-data-code="' + code + '"]'), top.codeMapperData[code]);
  22. }
  23. }
  24. });
  25. }(code)
  26. function initSelect(el, data) {
  27. if (el.get(0).hasInitedSelect) {
  28. return
  29. } else {
  30. el.get(0).hasInitedSelect = true;
  31. }
  32. for (i in data) {
  33. var $option = $('<option value="' + i + '">' + data[i] + '</option>');
  34. el.append($option);
  35. }
  36. el.selectpicker('refresh');
  37. }
  38. })
  39. }

redirectTab(name,url)

首页一级菜单的跳转。
使用方法:

  1. redirectTab('加盟商合同审核');
  2. redirectTab('加盟商合同审核', '/portal/htContract.do?htSpPage');//url优先级大于name

源码:

  1. window.redirectTab = function (name, url) {
  2. if (!name) {
  3. return;
  4. }
  5. if (!window.top.$) {
  6. return
  7. }
  8. var $$ = window.top.$;
  9. $$('.submenu-label').each(function () {
  10. if ($(this).text() == name) {
  11. var li = $(this).parent('a').parent('li');
  12. $$('.openable').removeClass('open');
  13. $$('.openable .submenu').hide();
  14. $$('.openable .submenu').find('li').removeClass('active');
  15. if (!$$('.sidebar-menu').hasClass('sidebar-mini')) {
  16. li.parent('ul').show();
  17. }
  18. li.parent('ul').parent('li').addClass('open');
  19. li.addClass('active');
  20. if (!url) {
  21. li.trigger('click');
  22. }
  23. return
  24. }
  25. })
  26. if (url) {
  27. window.location.href = url
  28. }
  29. }

refreshPage(onlyTable)

刷新页面。

  1. refreshPage();//刷新整个页面
  2. refreshPage(true);//只刷新页面中的数据表格

tableQuery(form, table)

数据表格对应表单的查询。

  1. tableQuery('#form', '#table');//根据Id为form的表单条件查询Id为table的数据表格

源码:

  1. window.tableQuery = function (form, table) {
  2. if (!form || !table) {
  3. return false
  4. }
  5. if (!$(form).length || !$(table).length) {
  6. return false
  7. }
  8. var url = $(table).getSource() ? $(table).getSource().setParamsByUrl($(form).serializeArray().map(function (obj) {
  9. var $node = $(form).find('*[name=' + obj.name + ']');
  10. if ($node.hasClass('kg-selectTree')) {
  11. var _treeData = $node.getSelectTreeData()[0];
  12. obj.value = _treeData ? _treeData.data[$node.attr('data-tree-query')] : '';
  13. }
  14. return obj;
  15. })) : '';
  16. $(table).reloadUrl(url);
  17. }

initIndustryDrop()

初始化行业数据(下拉树)(用赋值window._default_hyDm 处理JSP方式的默认数据)

  1. function initIndustryDrop(url, params) {
  2. var $industry = $('input[data-type=industry]');
  3. if (!$industry.length)
  4. return;
  5. $.getJSON(url || '/skin/cache/crm_hyfl.json', params || {}, function (result) {
  6. window._industryData = [{
  7. code: '',
  8. name: '请选择',
  9. id: '',
  10. pId: '1'
  11. }].concat(result.data || []);
  12. $industry.each(function () {
  13. var $this = $(this);
  14. var _zNodes = _industryData.map(function (obj) {
  15. return {
  16. id: obj.id,
  17. pId: obj.pId,
  18. name: obj.name,
  19. open: false,
  20. data: obj
  21. };
  22. });
  23. var _defaultTopNodes = new Array(11);
  24. _zNodes.forEach(function (obj) {
  25. var _index = ['请选择', '批发业', '零售业', '租赁业', '商务服务业', '建筑安装业', '软件和信息技术服务业', '制造业', '专业技术服务业', '农、林、牧、渔业', '居民服务、修理和其他服务业'].indexOf(obj.name);
  26. _index >= 0 && _defaultTopNodes.splice(_index, 1, obj);
  27. });
  28. $this.addClass('kg-selectTree').selectTree({
  29. zNodes: _zNodes,
  30. setting: {
  31. callback: {
  32. beforeClick: function (treeId, treeNode, clickFlag) {
  33. $('.kg-selectTree-dropdown').hide();
  34. return true;
  35. }
  36. }
  37. },
  38. defaultSelectedNodes: [_zNodes[0]],
  39. showTopDrop: true,
  40. defaultTopNodes: _defaultTopNodes
  41. });
  42. if (window._default_hyDm) {
  43. $industry.selectTreeNodeByDataParam(window._default_hyDm, 'code');
  44. }
  45. });
  46. });
  47. }

reinitIframe()

重置Iframe高度

  1. window.reinitIframe = function () {
  2. var $iframe = $('iframe.crm-iframe');
  3. $iframe.each(function () {
  4. this.height = "100%";
  5. if (!this.$iframeWrap) {
  6. this.$iframeWrap = $('<div class="crm-iframe-wrap"></div>');
  7. $(this).wrap(this.$iframeWrap);
  8. }
  9. if (!$(this).is(':visible')) {
  10. return
  11. }
  12. var height = $(this).contents().height();
  13. $('.crm-iframe-wrap').height(height);
  14. })
  15. }

原生扩展

  1. // 字符串扩展,属性字符串转对象 规则 : 'width':'200px' -> {width:'200px'}
  2. String.prototype.toObject = function () {
  3. return JSON.parse('{' + this.replace(/\s*['"]*([^'":;\s]*)['"]*\s*:+\s*['"]*([^'":;\s]*)['"]*\s*;*/g, '"$1":"$2",').replace(/,{1}$/g, '') + '}');
  4. };
  5. // 字符串 toBool 说明:"false" to false
  6. String.prototype.toBool = function () {
  7. return (/^true$/i).test(this);
  8. };
  9. //判断是否email
  10. String.prototype.isEmail = function () {
  11. return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(this);
  12. };
  13. //检查电话号码
  14. String.prototype.isPhoneCall = function () {
  15. return /(^1[3|4|5|7|8]\d{9}$)|(^0\d{2,3}-?\d{7,8}$)/.test(this);
  16. };
  17. //HTML字符串转义
  18. String.prototype.toHtmlCode = function () {
  19. var _temp = document.createElement('div');
  20. _temp.innerHTML = this.replace(/((?:&))\s+((?:#))/g, '$1$2');
  21. return _temp.innerText;
  22. };
  23. //转换百分比
  24. String.prototype.toLevel = function () {
  25. var temp = /[0-9]+(\.[0-9]+){0,1}/.exec(this);
  26. if (!temp)
  27. return '';
  28. var _str = Number(temp[0]).toString();
  29. var _index = _str.indexOf('.');
  30. var _chart = [];
  31. for (var i = 0; i < _str.length; i++) {
  32. if (_str[i] == '.')
  33. continue;
  34. _chart.push(_str[i]);
  35. }
  36. _index += 2;
  37. if (_index < 2 || (_index - _chart.length > 1))
  38. return _chart.concat(['0', '0']).join('').replace(/^[0]+/g, '');
  39. if (_chart.length < _index)
  40. return _chart.concat(['0']).join('').replace(/^[0]+/g, '');
  41. if (_chart.length > _index)
  42. _chart.splice(_index, 0, '.');
  43. return _chart.join('').replace(/^[0]+/g, '');
  44. };
  45. //获取链接字符串中参数
  46. String.prototype.getParamByUrl = function (name) {
  47. var _name = new RegExp(name + '=([^&]{0,})').exec(decodeURI(this));
  48. return (_name && _name.length) ? _name[1] : null;
  49. };
  50. //生成链接参数对象
  51. String.prototype.setParamByUrl = function (name, value) {
  52. var _paramStr = /[^]*\?([^?]+)$/.exec(decodeURI(this));
  53. var _this = this;
  54. if (!_paramStr && _this.indexOf('?') < 0) {
  55. _this += '?';
  56. }
  57. var _param = name + '=' + value;
  58. if (this.getParamByUrl(name) == null) {
  59. return _this.concat(((_paramStr && _paramStr.length) ? '&' : '') + _param);
  60. }
  61. return _this.replace(new RegExp(name + '=([^&]{0,})'), _param);
  62. };
  63. String.prototype.setParamsByUrl = function (array) {
  64. if (!array || !array.push)
  65. return this;
  66. var _this = this;
  67. array.forEach(function (obj) {
  68. _this = _this.setParamByUrl(obj.name, obj.value);
  69. });
  70. return _this;
  71. };
  72. //将数字格式的字符串转换为时间格式的字符串
  73. String.prototype.toDateFormat = function (format) {
  74. return /^\d{4,8}$/.test(this) ? this.replace(/\B(?=\d{2}$)/, format || '-').replace(/(^\d{4})\B(?=\d)/, '$1'.concat(format || '-')) : this.toString();
  75. };
  76. //转换数字字符串位数,默认2位,小于则补0,大于则截取
  77. String.prototype.toFixDigit = function (number, last) {
  78. number = typeof number === 'number' && number > 0 ? number : 2;
  79. var _this = this.toString();
  80. if (!/^[\d]+$/.test(_this) || new RegExp('^[\\d][' + number + ']$').test(_this))
  81. return _this.toString();
  82. if (_this.length > number)
  83. return !last ? _this.substring(_this.length - number, _this.length) : _this.substring(0, number);
  84. while (number - _this.length > 0) {
  85. _this = !last ? '0'.concat(_this) : _this.concat('0');
  86. }
  87. return _this;
  88. };
  89. //金额字符串处理
  90. String.prototype.toMoney = function () {
  91. var _regx = /[-]{0,1}[0-9]+(\.[0-9]+){0,1}/.exec(this);
  92. if (!_regx)
  93. return '0.00';
  94. var _temp = _regx[0].split('.');
  95. _temp[0] = _temp[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  96. _temp[1] = _temp[1] || '00';
  97. _temp[1].length < 2 && (_temp[1] += '0');
  98. return _temp.join('.');
  99. };
  100. Number.prototype.toMoney = function () {
  101. return this.toString().toMoney()
  102. }

jQuery 扩展

crm_clearForm

清空表单数据

  1. $('#form').crm_clearForm();

setLoader

显示/隐藏原生加载遮罩

  1. $('#div').setLoader(true);//显示加载遮罩
  2. $('#div').setLoader(false);//隐藏加载遮罩

源码:

  1. $.extend(true, $.fn, {
  2. setLoader: function (status) {//显示加载蒙层
  3. return this.each(function () {
  4. try {
  5. if ($(this).css('position') != 'absolute' || $(this).css('position') != 'relative' || $(this).css('position') != 'fixed') {
  6. $(this).css('position', 'relative');
  7. }
  8. } catch (e) {
  9. }
  10. if (!this.$loader) {
  11. 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>');
  12. if ($(this).is('body')) {
  13. this.$loader.css('position', 'fixed');
  14. }
  15. $(this).append(this.$loader);
  16. }
  17. if (status) {
  18. this.$loader.fadeIn();
  19. } else {
  20. this.$loader.fadeOut();
  21. }
  22. })
  23. },
  24. crm_clearForm: function () {//清空元素内表单元素值
  25. return this.each(function () {
  26. $(this).clearValidHints();
  27. $(this).find('input').not('input[disabled],input[readonly]').val('');
  28. $(this).find('input[type="checkbox"]').not('input[disabled],input[readonly]').prop('checked', false);
  29. $(this).find('input[type="radio"]').not('input[disabled],input[readonly]').prop('checked', false);
  30. $(this).find('input.kg-dateSelect').val('');
  31. $(this).find('textarea').not('textarea[disabled],textarea[readonly]').val('');
  32. $(this).find('select').not('select[disabled],select[readonly]').val('');
  33. $(this).find('select.selectpicker').selectpicker('refresh');
  34. })
  35. }
  36. })