utils.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /*
  2. * @Description: 工具函数
  3. */
  4. /*
  5. * @description 获取地址栏hash参数
  6. */
  7. export const getUrlHash = (paramName) => {
  8. const urlParams = {};
  9. const url = window.location.href;
  10. const idx = url.indexOf("#");
  11. if (idx === -1) {
  12. return false;
  13. }
  14. let params = url.substring(url.indexOf("#") + 1);
  15. params = params.split("&");
  16. params.forEach((item) => {
  17. const param = item.split("=");
  18. urlParams[param[0]] = decodeURIComponent(param[1]);
  19. });
  20. if (paramName) {
  21. return urlParams[paramName];
  22. }
  23. return urlParams;
  24. };
  25. /**
  26. * 倒计时
  27. * @param {String} target 目标时间
  28. */
  29. export const countDown = (target) => {
  30. const oDate = new Date(); // 获取日期对象
  31. const oldTime = oDate.getTime(); // 现在距离1970年的毫秒数
  32. const newDate = new Date(
  33. isIE() && String(target).match("-") ? target.replace("-", "/") : target
  34. );
  35. const newTime = newDate.getTime(); // 2019年距离1970年的毫秒数
  36. if (newTime >= oldTime) {
  37. let second = Math.floor((newTime - oldTime) / 1000); // 未来时间距离现在的秒数
  38. const day = Math.floor(second / 86400); // 整数部分代表的是天;一天有24*60*60=86400秒 ;
  39. second %= 86400; // 余数代表剩下的秒数;
  40. const hour = Math.floor(second / 3600); // 整数部分代表小时;
  41. second %= 3600; // 余数代表 剩下的秒数;
  42. const minute = Math.floor(second / 60);
  43. second %= 60;
  44. return {
  45. day,
  46. hour,
  47. minute,
  48. second,
  49. };
  50. }
  51. return false;
  52. };
  53. /**
  54. * 文件流导出
  55. */
  56. export const downloadBlob = (res, filename) => {
  57. const blob = new Blob([res], {
  58. type: "application/vnd.ms-excel",
  59. });
  60. if (window.navigator && window.navigator.msSaveOrOpenBlob) {
  61. window.navigator.msSaveOrOpenBlob(blob, filename);
  62. } else {
  63. const oA = document.createElement("a");
  64. oA.href = URL.createObjectURL(blob);
  65. oA.download = filename;
  66. oA.click();
  67. }
  68. };
  69. // 计算数组对象的总数量和总价格,传列表,num,price可传可不传
  70. export const countNumPrice = (list, num, price) => {
  71. if (!num) {
  72. num = 'ordCnt'
  73. }
  74. if (!price) {
  75. price = 'purcAmt'
  76. }
  77. var amount = { num: 0, price: 0 }
  78. list.forEach((item) => {
  79. if (item[num]) {
  80. amount.num += parseFloat(item[num]);
  81. }
  82. if (item[price]) {
  83. amount.price += parseFloat(item[price]);
  84. }
  85. });
  86. amount.price = amount.price.toFixed(2);
  87. return amount;
  88. }
  89. // 计算采购金额=数量*单价,传数量和单价
  90. export const getTotalAmount = (num, price) => {
  91. if (num && price) {
  92. let prices = 0
  93. prices += parseFloat(num) * parseFloat(price)
  94. prices = prices.toFixed(2)
  95. return prices
  96. } else {
  97. return ''
  98. }
  99. }
  100. // 获取截止日期前三个月的日期
  101. export const getThreeMonthAgoDate = (deadline) => {
  102. const year = deadline.getFullYear();
  103. const month = deadline.getMonth() + 1;
  104. const day = deadline.getDate();
  105. const days =
  106. parseInt(month) < 3
  107. ? new Date(year - 1, month + 12 - 3, 0)
  108. : new Date(year, month - 3, 0);
  109. const maxDays = days.getDate(); //对应的三个月前的month,这个月的最大天数
  110. const yearAgo = parseInt(month) < 3 ? year - 1 : year;
  111. const monthAgo = parseInt(month) < 3 ? month + 9 : month - 3;
  112. const dayAgo = parseInt(maxDays) < parseInt(day) ? maxDays : day;
  113. const threeMonthsAgoDate = yearAgo + "-" + monthAgo + "-" + dayAgo;
  114. return threeMonthsAgoDate;
  115. }
  116. //表单验证错误直接滚动到错误位置
  117. export const moveToError = () => {
  118. let isError = document.getElementsByClassName('is-error');
  119. if(isError.length){
  120. isError[0].scrollIntoView({
  121. block: 'center',
  122. behavior: 'smooth'
  123. })
  124. }
  125. };