utils.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. /*
  2. 通用工具类扩展方法
  3. 2019.2.11 姚政伟 创建
  4. */
  5. import router from '@/router'
  6. import { Loading, MessageBox } from 'element-ui'
  7. import { getToken } from '@/utils/auth'
  8. const utils = {
  9. getUrlParam: function (name) {
  10. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  11. var r = window.location.search.substr(1).match(reg);
  12. if (r != null) return (decodeURIComponent(r[2])); return null;
  13. },
  14. getEnumName(arrayObj, value) {
  15. if (arrayObj && value) {
  16. let m = arrayObj.find(m => m.value == value);
  17. if (m) {
  18. return m.name;
  19. }
  20. }
  21. return '未知';
  22. },
  23. routerLink: function (path) {
  24. router.push(path);
  25. },
  26. getArrayListByGroup(n, list) {
  27. var R = [], F;
  28. for (F = 0; F < list.length;) {
  29. R.push(list.slice(F, F += n))
  30. }
  31. return R
  32. },
  33. formatNum(number, decimals, dec_point, thousands_sep) {
  34. /*
  35. * 参数说明:
  36. * number:要格式化的数字
  37. * decimals:保留几位小数,默认2位
  38. * dec_point:小数点符号
  39. * thousands_sep:千分位符号
  40. * */
  41. number = (number + '').replace(/[^0-9+-Ee.]/g, '');
  42. var n = !isFinite(+number) ? 0 : +number,
  43. prec = !isFinite(+decimals) ? 2 : Math.abs(decimals),
  44. sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
  45. dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
  46. s = '',
  47. toFixedFix = function (n, prec) {
  48. var k = Math.pow(10, prec);
  49. return '' + Math.ceil(n * k) / k;
  50. };
  51. s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
  52. var re = /(-?\d+)(\d{3})/;
  53. while (re.test(s[0])) {
  54. s[0] = s[0].replace(re, "$1" + sep + "$2");
  55. }
  56. if ((s[1] || '').length < prec) {
  57. s[1] = s[1] || '';
  58. s[1] += new Array(prec - s[1].length + 1).join('0');
  59. }
  60. return s.join(dec);
  61. },
  62. loading: {
  63. loadingObj: null,
  64. show() {
  65. this.loadingObj = Loading.service();
  66. },
  67. hide() {
  68. if (this.loadingObj) {
  69. this.loadingObj.close();
  70. }
  71. }
  72. },
  73. transformTree(list, options = {}) {
  74. const {
  75. keyField = 'id',
  76. childField = 'children',
  77. parentField = 'parent'
  78. } = options;
  79. const tree = [];
  80. const record = {};
  81. for (let i = 0, len = list.length; i < len; i++) {
  82. const item = list[i];
  83. const id = item[keyField];
  84. if (!id) {
  85. continue
  86. }
  87. if (record[id]) {
  88. item[childField] = record[id]
  89. } else {
  90. item[childField] = record[id] = []
  91. }
  92. if (item[parentField]) {
  93. const parentId = item[parentField];
  94. if (!record[parentId]) {
  95. record[parentId] = []
  96. }
  97. record[parentId].push(item)
  98. } else {
  99. tree.push(item)
  100. }
  101. }
  102. return tree
  103. },
  104. EncodeGetUrl(url) {
  105. let urlArr = url.split('?');
  106. let encodeUrl = urlArr[0];
  107. if (urlArr.length > 1) {
  108. encodeUrl += '?';
  109. let paramArr = urlArr[1].split('&');
  110. let encodeparamArr = [];
  111. paramArr.forEach((item, index) => {
  112. let key = item.split('=')[0];
  113. let value = item.split('=')[1];
  114. encodeparamArr.push(key + '=' + encodeURIComponent(value));
  115. });
  116. encodeUrl += encodeparamArr.join('&');
  117. }
  118. return encodeUrl;
  119. },
  120. objToString(obj) {
  121. var str = '';
  122. if (obj) {
  123. Object.keys(obj).forEach((key, index) => {
  124. if (index == 0) {
  125. str = str + `?${key}=${obj[key]}`;
  126. } else {
  127. str = str + `&${key}=${obj[key]}`;
  128. }
  129. })
  130. }
  131. return str;
  132. },
  133. exportUtil(url, data, message, type) {
  134. // debugger;
  135. if (!data) {
  136. data = {}
  137. }
  138. if (!data.token) {
  139. data.token = getToken();
  140. }
  141. let downUrl = process.env.VUE_APP_BASE_API + url + this.objToString(data);
  142. downUrl = this.EncodeGetUrl(downUrl);
  143. var a = document.createElement('a');
  144. a.href = downUrl;
  145. a.target = '_blank';
  146. a.click();
  147. /*let that = this
  148. MessageBox.confirm('确认导出' + message + '吗?', '提示', {
  149. confirmButtonText: '确定',
  150. cancelButtonText: '取消',
  151. type: 'warning',
  152. confirmButtonClass: 'confirmButtonClass',
  153. cancelButtonClass: 'confirmButtonClass',
  154. center: true
  155. }).then(() => {
  156. if (!data) {
  157. data = {}
  158. }
  159. if (!data.token) {
  160. data.token = getToken();
  161. }
  162. let downUrl = process.env.VUE_APP_BASE_API + url + this.objToString(data);
  163. downUrl = this.EncodeGetUrl(downUrl);
  164. var a = document.createElement('a');
  165. a.href = downUrl;
  166. a.target = '_blank';
  167. a.click();
  168. }).catch(() => {
  169. });*/
  170. },
  171. timestampToTime(timestamp) {
  172. // 时间戳为10位需*1000,时间戳为13位不需乘1000
  173. var date = new Date(timestamp);
  174. var Y = date.getFullYear() + "-";
  175. var M =
  176. (date.getMonth() + 1 < 10
  177. ? "0" + (date.getMonth() + 1)
  178. : date.getMonth() + 1) + "-";
  179. var D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " ";
  180. var h = date.getHours() + ":";
  181. var m = date.getMinutes() + ":";
  182. var s = date.getSeconds();
  183. return Y + M + D + h + m + s;
  184. },
  185. // 四舍五入到指定的小数位数
  186. roundToDecimalPlace(number, decimalPlaces) {
  187. const factor = Math.pow(10, decimalPlaces);
  188. return Math.round(+number+'e'+ decimalPlaces) / factor;
  189. }
  190. };
  191. export default utils