util.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import axios from 'axios'
  2. import { getToken } from '@/utils/auth'
  3. /**
  4. * 删除对象中的空值
  5. * @param {object} obj
  6. * @returns {Object}
  7. */
  8. export function deleteEmptyObj(obj) {
  9. let newObj = obj;
  10. for(var key in newObj) {
  11. if(newObj[key] === '' || newObj[key] === null || newObj[key] === undefined) {
  12. delete newObj[key]
  13. }
  14. }
  15. return newObj;
  16. }
  17. /**
  18. *
  19. * @param {*} array 要查询的数组
  20. * @param {*} attr 要查询的字段
  21. * @param {*} val 要查询的字段值
  22. * @returns
  23. */
  24. export function findElem(array, attr, val) {
  25. for (var i = 0; i < array.length; i++) {
  26. if (array[i][attr] == val) {
  27. return i; //返回当前索引值
  28. }
  29. }
  30. return -1;
  31. }
  32. /**
  33. * 生成带参数的链接
  34. * @param {String} url
  35. * @param {Object} params
  36. * @returns
  37. */
  38. export function createParamsUrl(url, params) {
  39. if(typeof(url) == 'undefined' || url == null || url == '') {
  40. return '';
  41. }
  42. if(typeof(params) == 'undefined' || params == null || typeof(params) != 'object') {
  43. return '';
  44. }
  45. url += (url.indexOf("?") != -1) ? "" : "?";
  46. for(var k in params) {
  47. url += ((url.indexOf("=") != -1) ? "&" : "") + k + "=" + encodeURI(params[k]);
  48. }
  49. return url;
  50. }
  51. /**
  52. * 导出功能
  53. * @param {*} obj
  54. * @returns
  55. */
  56. export function downloadFiles(url, params={}) {
  57. params.token = getToken();
  58. let newParams = deleteEmptyObj(params);
  59. let newUrl = createParamsUrl(url, newParams);
  60. window.open(process.env.VUE_APP_BASE_API + newUrl);
  61. }
  62. /**
  63. * 导入功能
  64. * @param {*} url
  65. * @param {*} formData
  66. */
  67. export async function handleImport(url, formData) {
  68. const Result = await new Promise((resolve, reject) => {
  69. axios.post(
  70. process.env.VUE_APP_BASE_API + url,
  71. formData,
  72. { headers: { 'Content-Type': 'multipart/form-data', 'x-token': getToken() } })
  73. .then(res => {
  74. resolve(res.data)
  75. }).catch(err => {
  76. reject(err)
  77. })
  78. });
  79. return Result;
  80. }
  81. /**
  82. * 重置时间格式
  83. * @param {*} date
  84. * @param {*} type
  85. */
  86. export function resetDateFormat(date, type) {
  87. let newDate = '';
  88. if (!date) {return ''}
  89. // type=1: yyyy-MM-dd 转 yyyy-MM-dd HH:mm:ss
  90. if(type == 1 || !type) {
  91. newDate = date + ' 00:00:00';
  92. }
  93. }
  94. /**
  95. * 若文档中已有命名dateFormat,可用dFormat()调用
  96. * 年(Y) 可用1-4个占位符
  97. * 月(m)、日(d)、小时(H)、分(M)、秒(S) 可用1-2个占位符
  98. * 星期(W) 可用1-3个占位符
  99. * 季度(q为阿拉伯数字,Q为中文数字)可用1或4个占位符
  100. *
  101. * let date = new Date()
  102. * dateFormat("YYYY-mm-dd HH:MM:SS", date) 2020-02-09 14:04:23
  103. * dateFormat("YYYY-mm-dd HH:MM:SS Q", date) 2020-02-09 14:09:03 一
  104. * dateFormat("YYYY-mm-dd HH:MM:SS WWW", date) 2020-02-09 14:45:12 星期日
  105. * dateFormat("YYYY-mm-dd HH:MM:SS QQQQ", date) 2020-02-09 14:09:36 第一季度
  106. * dateFormat("YYYY-mm-dd HH:MM:SS WWW QQQQ", date) 2020-02-09 14:46:12 星期日 第一季度
  107. */
  108. export function dateFormat(format,date){
  109. let we = date.getDay(); // 星期
  110. let qut = Math.floor((date.getMonth()+3)/3).toString(); // 季度
  111. const opt = {
  112. "Y+":date.getFullYear().toString(), // 年
  113. "m+":(date.getMonth()+1).toString(), // 月(月份从0开始,要+1)
  114. "d+":date.getDate().toString(), // 日
  115. "H+":date.getHours().toString(), // 时
  116. "M+":date.getMinutes().toString(), // 分
  117. "S+":date.getSeconds().toString(), // 秒
  118. "q+":qut, // 季度
  119. }
  120. const week = { // 中文数字 (星期)
  121. "0":"日",
  122. "1":"一",
  123. "2":"二",
  124. "3":"三",
  125. "4":"四",
  126. "5":"五",
  127. "6":"六"
  128. };
  129. const quarter = { // 中文数字(季度)
  130. "1" : "一",
  131. "2" : "二",
  132. "3" : "三",
  133. "4" : "四",
  134. };
  135. if(/(W+)/.test(format)){
  136. format = format.replace(RegExp.$1,(RegExp.$1.length >1 ? (RegExp.$1.length >2 ? '星期'+week[we] : '周'+week[we]) : week[we]))
  137. }
  138. if (/(Q+)/.test(format)) {
  139. // 输入一个Q,只输出一个中文数字,输入4个Q,则拼接上字符串
  140. format = format.replace(RegExp.$1,(RegExp.$1.length == 4 ? '第'+quarter[qut]+'季度' : quarter[qut]));
  141. }
  142. for(let k in opt){
  143. let r = new RegExp("("+k+")").exec(format);
  144. if(r){
  145. // 若输入的长度不为1,则前面补零
  146. format = format.replace(r[1],(RegExp.$1.length == 1 ? opt[k] : opt[k].padStart(RegExp.$1.length,'0')))
  147. }
  148. }
  149. return format
  150. }