util.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. import axios from "axios";
  2. import FileSaver from "file-saver";
  3. import { getToken } from "@/utils/auth";
  4. /**
  5. * 删除对象中的空值
  6. * @param {object} obj
  7. * @returns {Object}
  8. */
  9. export function deleteEmptyObj(obj) {
  10. const newObj = obj;
  11. for (var key in newObj) {
  12. if (
  13. newObj[key] === "" ||
  14. newObj[key] === null ||
  15. newObj[key] === undefined
  16. ) {
  17. delete newObj[key];
  18. }
  19. }
  20. return newObj;
  21. }
  22. /**
  23. *
  24. * @param {*} array 要查询的数组
  25. * @param {*} attr 要查询的字段
  26. * @param {*} val 要查询的字段值
  27. * @returns
  28. */
  29. export function findElem(array, attr, val) {
  30. for (var i = 0; i < array.length; i++) {
  31. if (array[i][attr] == val) {
  32. return i; // 返回当前索引值
  33. }
  34. }
  35. return -1;
  36. }
  37. /**
  38. * 生成带参数的链接
  39. * @param {String} url
  40. * @param {Object} params
  41. * @returns
  42. */
  43. export function createParamsUrl(url, params) {
  44. if (typeof url === "undefined" || url == null || url == "") {
  45. return "";
  46. }
  47. if (
  48. typeof params === "undefined" ||
  49. params == null ||
  50. typeof params !== "object"
  51. ) {
  52. return "";
  53. }
  54. url += url.indexOf("?") != -1 ? "" : "?";
  55. for (var k in params) {
  56. url += (url.indexOf("=") != -1 ? "&" : "") + k + "=" + encodeURI(params[k]);
  57. }
  58. return url;
  59. }
  60. /**
  61. * 导出功能
  62. * @param {*} obj
  63. * @returns
  64. */
  65. export function downloadFiles(url, params = {}) {
  66. params.token = getToken();
  67. const newParams = deleteEmptyObj(params);
  68. const newUrl = createParamsUrl(url, newParams);
  69. window.open(process.env.VUE_APP_BASE_API + newUrl);
  70. }
  71. /**
  72. * 导入功能
  73. * @param {*} url
  74. * @param {*} formData
  75. */
  76. export async function handleImport(url, formData) {
  77. const Result = await new Promise((resolve, reject) => {
  78. axios
  79. .post(
  80. process.env.VUE_APP_BASE_API + url,
  81. formData,
  82. {
  83. headers: {
  84. "Content-Type": "multipart/form-data",
  85. "x-token": getToken(),
  86. },
  87. }
  88. )
  89. .then((res) => {
  90. resolve(res.data);
  91. })
  92. .catch((err) => {
  93. reject(err);
  94. });
  95. });
  96. return Result;
  97. }
  98. /**
  99. * 导入有返回二进制文件
  100. * @param {*} url
  101. * @param {*} formData
  102. */
  103. export async function handleImportTwo(url, formData) {
  104. const Result = await new Promise((resolve, reject) => {
  105. axios
  106. .post(
  107. process.env.VUE_APP_BASE_API + url,
  108. formData,
  109. {
  110. responseType: "arraybuffer",
  111. headers: {
  112. "Content-Type": "multipart/form-data",
  113. "x-token": getToken(),
  114. },
  115. }
  116. )
  117. .then((res) => {
  118. resolve(res.data);
  119. })
  120. .catch((err) => {
  121. reject(err);
  122. });
  123. });
  124. return Result;
  125. }
  126. /**
  127. * 重置时间格式
  128. * @param {*} date
  129. * @param {*} type
  130. */
  131. export function resetDateFormat(date, type) {
  132. let newDate = "";
  133. if (!date) {
  134. return "";
  135. }
  136. // type=1: yyyy-MM-dd 转 yyyy-MM-dd HH:mm:ss
  137. if (type == 1 || !type) {
  138. newDate = date + " 00:00:00";
  139. }
  140. }
  141. /**
  142. * 若文档中已有命名dateFormat,可用dFormat()调用
  143. * 年(Y) 可用1-4个占位符
  144. * 月(m)、日(d)、小时(H)、分(M)、秒(S) 可用1-2个占位符
  145. * 星期(W) 可用1-3个占位符
  146. * 季度(q为阿拉伯数字,Q为中文数字)可用1或4个占位符
  147. *
  148. * let date = new Date()
  149. * dateFormat("YYYY-mm-dd HH:MM:SS", date) 2020-02-09 14:04:23
  150. * dateFormat("YYYY-mm-dd HH:MM:SS Q", date) 2020-02-09 14:09:03 一
  151. * dateFormat("YYYY-mm-dd HH:MM:SS WWW", date) 2020-02-09 14:45:12 星期日
  152. * dateFormat("YYYY-mm-dd HH:MM:SS QQQQ", date) 2020-02-09 14:09:36 第一季度
  153. * dateFormat("YYYY-mm-dd HH:MM:SS WWW QQQQ", date) 2020-02-09 14:46:12 星期日 第一季度
  154. */
  155. export function dateFormat(format, date) {
  156. const we = date.getDay(); // 星期
  157. const qut = Math.floor((date.getMonth() + 3) / 3).toString(); // 季度
  158. const opt = {
  159. "Y+": date.getFullYear().toString(), // 年
  160. "m+": (date.getMonth() + 1).toString(), // 月(月份从0开始,要+1)
  161. "d+": date.getDate().toString(), // 日
  162. "H+": date.getHours().toString(), // 时
  163. "M+": date.getMinutes().toString(), // 分
  164. "S+": date.getSeconds().toString(), // 秒
  165. "q+": qut, // 季度
  166. };
  167. const week = {
  168. // 中文数字 (星期)
  169. 0: "日",
  170. 1: "一",
  171. 2: "二",
  172. 3: "三",
  173. 4: "四",
  174. 5: "五",
  175. 6: "六",
  176. };
  177. const quarter = {
  178. // 中文数字(季度)
  179. 1: "一",
  180. 2: "二",
  181. 3: "三",
  182. 4: "四",
  183. };
  184. if (/(W+)/.test(format)) {
  185. format = format.replace(
  186. RegExp.$1,
  187. RegExp.$1.length > 1
  188. ? RegExp.$1.length > 2
  189. ? "星期" + week[we]
  190. : "周" + week[we]
  191. : week[we]
  192. );
  193. }
  194. if (/(Q+)/.test(format)) {
  195. // 输入一个Q,只输出一个中文数字,输入4个Q,则拼接上字符串
  196. format = format.replace(
  197. RegExp.$1,
  198. RegExp.$1.length == 4 ? "第" + quarter[qut] + "季度" : quarter[qut]
  199. );
  200. }
  201. for (const k in opt) {
  202. const r = new RegExp("(" + k + ")").exec(format);
  203. if (r) {
  204. // 若输入的长度不为1,则前面补零
  205. format = format.replace(
  206. r[1],
  207. RegExp.$1.length == 1 ? opt[k] : opt[k].padStart(RegExp.$1.length, "0")
  208. );
  209. }
  210. }
  211. return format;
  212. }
  213. /**
  214. * @param url {string} pdf地址
  215. * @param fileName {string} pdf名称
  216. */
  217. export function downloadPdf(url, fileName) {
  218. axios({
  219. method: "get",
  220. url,
  221. responseType: "blob",
  222. }).then((res) => {
  223. const file = new Blob([res.data], {
  224. type: "application/pdf",
  225. });
  226. FileSaver(file, fileName);
  227. });
  228. }