index.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. export const stringify = (json) => {
  2. let count = 0;
  3. let list = [];
  4. let str = JSON.stringify(json, function (key, val) {
  5. if (typeof val === 'function') {
  6. list.push(val + '');
  7. const result = '$code{' + count + '}$code'
  8. count = count + 1;
  9. return result
  10. }
  11. return val;
  12. }, 2);
  13. let startCode = '$code{';
  14. let endCode = '}$code';
  15. list.forEach((ele, index) => {
  16. str = str.replace(startCode + index + endCode, startCode + ele + endCode)
  17. })
  18. for (let i = 0; i < count; i++) {
  19. str = str.replace('"' + startCode, '').replace(endCode + '"', '')
  20. }
  21. return str
  22. }
  23. export function getAsVal(obj, bind = '') {
  24. let result = deepClone(obj)
  25. if (validatenull(bind)) return result
  26. bind.split('.').forEach(ele => {
  27. if (!validatenull(result[ele])) {
  28. result = result[ele]
  29. } else {
  30. result = ''
  31. }
  32. });
  33. return result
  34. }
  35. export function validatenull(val) {
  36. if (val instanceof Date || typeof val === 'boolean' || typeof val === 'number') return false;
  37. if (val instanceof Array) {
  38. if (val.length === 0) return true;
  39. } else if (val instanceof Object) {
  40. for (var o in val) {
  41. return false;
  42. }
  43. return true;
  44. } else {
  45. if (
  46. val === 'null' ||
  47. val == null ||
  48. val === 'undefined' ||
  49. val === undefined ||
  50. val === ''
  51. ) {
  52. return true;
  53. }
  54. return false;
  55. }
  56. return false;
  57. }
  58. export const deepClone = data => {
  59. var type = getObjType(data);
  60. var obj;
  61. if (type === 'array') obj = [];
  62. else if (type === 'object') obj = {};
  63. else return data;
  64. if (type === 'array') {
  65. for (var i = 0, len = data.length; i < len; i++) {
  66. data[i] = (() => {
  67. if (data[i] === 0) {
  68. return data[i];
  69. }
  70. return data[i];
  71. })();
  72. if (data[i]) {
  73. delete data[i].$parent;
  74. }
  75. obj.push(deepClone(data[i]));
  76. }
  77. } else if (type === 'object') {
  78. for (var key in data) {
  79. if (data) {
  80. delete data.$parent;
  81. }
  82. obj[key] = deepClone(data[key]);
  83. }
  84. }
  85. return obj;
  86. };
  87. export const getObjType = obj => {
  88. var toString = Object.prototype.toString;
  89. var map = {
  90. '[object Boolean]': 'boolean',
  91. '[object Number]': 'number',
  92. '[object String]': 'string',
  93. '[object Function]': 'function',
  94. '[object Array]': 'array',
  95. '[object Date]': 'date',
  96. '[object RegExp]': 'regExp',
  97. '[object Undefined]': 'undefined',
  98. '[object Null]': 'null',
  99. '[object Object]': 'object'
  100. };
  101. if (obj instanceof Element) {
  102. return 'element';
  103. }
  104. return map[toString.call(obj)];
  105. };
  106. /**
  107. * 是否小于等于某个Avue版本
  108. * Avue:2.8.27 v2:2.8.27 -> true
  109. * Avue:2.9.1 v2:2.9.0 -> false
  110. */
  111. export const avueVersion = (v2) => {
  112. if (!window.AVUE) return
  113. let v1 = window.AVUE.version.split('.')
  114. v2 = v2.split('.')
  115. const len = Math.max(v1.length, v2.length)
  116. // 调整两个版本号位数相同
  117. while (v1.length < len) {
  118. v1.push('0')
  119. }
  120. while (v2.length < len) {
  121. v2.push('0')
  122. }
  123. // 循环判断每位数的大小
  124. for (let i = 0; i < len; i++) {
  125. const num1 = parseInt(v1[i])
  126. const num2 = parseInt(v2[i])
  127. if (num1 > num2) {
  128. return false
  129. } else if (num1 < num2) {
  130. return true
  131. }
  132. }
  133. return true
  134. }