import axios from "axios"; import FileSaver from "file-saver"; import { getToken } from "@/utils/auth"; /** * 删除对象中的空值 * @param {object} obj * @returns {Object} */ export function deleteEmptyObj(obj) { const newObj = obj; for (var key in newObj) { if ( newObj[key] === "" || newObj[key] === null || newObj[key] === undefined ) { delete newObj[key]; } } return newObj; } /** * * @param {*} array 要查询的数组 * @param {*} attr 要查询的字段 * @param {*} val 要查询的字段值 * @returns */ export function findElem(array, attr, val) { for (var i = 0; i < array.length; i++) { if (array[i][attr] == val) { return i; // 返回当前索引值 } } return -1; } /** * 生成带参数的链接 * @param {String} url * @param {Object} params * @returns */ export function createParamsUrl(url, params) { if (typeof url === "undefined" || url == null || url == "") { return ""; } if ( typeof params === "undefined" || params == null || typeof params !== "object" ) { return ""; } url += url.indexOf("?") != -1 ? "" : "?"; for (var k in params) { url += (url.indexOf("=") != -1 ? "&" : "") + k + "=" + encodeURI(params[k]); } return url; } /** * 导出功能 * @param {*} obj * @returns */ export function downloadFiles(url, params = {}) { params.token = getToken(); const newParams = deleteEmptyObj(params); const newUrl = createParamsUrl(url, newParams); window.open(process.env.VUE_APP_BASE_API + newUrl); } /** * 导入功能 * @param {*} url * @param {*} formData */ export async function handleImport(url, formData) { const Result = await new Promise((resolve, reject) => { axios .post( process.env.VUE_APP_BASE_API + url, formData, { headers: { "Content-Type": "multipart/form-data", "x-token": getToken(), }, } ) .then((res) => { resolve(res.data); }) .catch((err) => { reject(err); }); }); return Result; } /** * 导入有返回二进制文件 * @param {*} url * @param {*} formData */ export async function handleImportTwo(url, formData) { const Result = await new Promise((resolve, reject) => { axios .post( process.env.VUE_APP_BASE_API + url, formData, { responseType: "arraybuffer", headers: { "Content-Type": "multipart/form-data", "x-token": getToken(), }, } ) .then((res) => { resolve(res.data); }) .catch((err) => { reject(err); }); }); return Result; } /** * 重置时间格式 * @param {*} date * @param {*} type */ export function resetDateFormat(date, type) { let newDate = ""; if (!date) { return ""; } // type=1: yyyy-MM-dd 转 yyyy-MM-dd HH:mm:ss if (type == 1 || !type) { newDate = date + " 00:00:00"; } } /** * 若文档中已有命名dateFormat,可用dFormat()调用 * 年(Y) 可用1-4个占位符 * 月(m)、日(d)、小时(H)、分(M)、秒(S) 可用1-2个占位符 * 星期(W) 可用1-3个占位符 * 季度(q为阿拉伯数字,Q为中文数字)可用1或4个占位符 * * let date = new Date() * dateFormat("YYYY-mm-dd HH:MM:SS", date) 2020-02-09 14:04:23 * dateFormat("YYYY-mm-dd HH:MM:SS Q", date) 2020-02-09 14:09:03 一 * dateFormat("YYYY-mm-dd HH:MM:SS WWW", date) 2020-02-09 14:45:12 星期日 * dateFormat("YYYY-mm-dd HH:MM:SS QQQQ", date) 2020-02-09 14:09:36 第一季度 * dateFormat("YYYY-mm-dd HH:MM:SS WWW QQQQ", date) 2020-02-09 14:46:12 星期日 第一季度 */ export function dateFormat(format, date) { const we = date.getDay(); // 星期 const qut = Math.floor((date.getMonth() + 3) / 3).toString(); // 季度 const opt = { "Y+": date.getFullYear().toString(), // 年 "m+": (date.getMonth() + 1).toString(), // 月(月份从0开始,要+1) "d+": date.getDate().toString(), // 日 "H+": date.getHours().toString(), // 时 "M+": date.getMinutes().toString(), // 分 "S+": date.getSeconds().toString(), // 秒 "q+": qut, // 季度 }; const week = { // 中文数字 (星期) 0: "日", 1: "一", 2: "二", 3: "三", 4: "四", 5: "五", 6: "六", }; const quarter = { // 中文数字(季度) 1: "一", 2: "二", 3: "三", 4: "四", }; if (/(W+)/.test(format)) { format = format.replace( RegExp.$1, RegExp.$1.length > 1 ? RegExp.$1.length > 2 ? "星期" + week[we] : "周" + week[we] : week[we] ); } if (/(Q+)/.test(format)) { // 输入一个Q,只输出一个中文数字,输入4个Q,则拼接上字符串 format = format.replace( RegExp.$1, RegExp.$1.length == 4 ? "第" + quarter[qut] + "季度" : quarter[qut] ); } for (const k in opt) { const r = new RegExp("(" + k + ")").exec(format); if (r) { // 若输入的长度不为1,则前面补零 format = format.replace( r[1], RegExp.$1.length == 1 ? opt[k] : opt[k].padStart(RegExp.$1.length, "0") ); } } return format; } /** * @param url {string} pdf地址 * @param fileName {string} pdf名称 */ export function downloadPdf(url, fileName) { axios({ method: "get", url, responseType: "blob", }).then((res) => { const file = new Blob([res.data], { type: "application/pdf", }); FileSaver(file, fileName); }); }