UNPKG

create-iking-admin

Version:

金合技术中台脚手架

130 lines (117 loc) 3.9 kB
/* * @Author : wfl * @LastEditors: wfl * @description : * @updateInfo : * @Date : 2023-03-02 09:54:41 * @LastEditTime: 2023-04-18 11:45:20 */ import type { AxiosRequestConfig } from 'axios' import api from '.' const controller = new AbortController() const defaultConfig = { signal: controller.signal, } /** * @description: * @param {string} url * @param {any} data * @param {AxiosRequestConfig} config: { // 选项包括: 'arraybuffer', 'document', 'json', 'text', 'stream' responseType: 'json', // 默认值 // `xsrfCookieName` 是 xsrf token 的值,被用作 cookie 的名称 xsrfCookieName: 'XSRF-TOKEN', // 默认值 // `xsrfHeaderName` 是带有 xsrf token 值的http 请求头名称 xsrfHeaderName: 'X-XSRF-TOKEN', // 默认值 // `onUploadProgress` 允许为上传处理进度事件 onUploadProgress: function (progressEvent) { // 处理原生进度事件 }, // `onDownloadProgress` 允许为下载处理进度事件 onDownloadProgress: function (progressEvent) { // 处理原生进度事件 }, cancelToken: new CancelToken(function (cancel) { }) * } * @return {*} */ async function post(url: string, data: any = {}, config: AxiosRequestConfig = defaultConfig): Promise<ApiModel> { return await api.post(url, data, { ...config, }) } async function get(url: string, params: any = {}, config: AxiosRequestConfig = defaultConfig): Promise<ApiModel> { return await api.get(url, { params, ...config, }) } async function put(url: string, data: any = {}, config: AxiosRequestConfig = defaultConfig): Promise<ApiModel> { return await api.put(url, data, { ...config, }) } async function del(url: string, params: any = {}, config: AxiosRequestConfig = defaultConfig): Promise<ApiModel> { return await api.delete(url, { params, ...config, }) } async function delData(url: string, data: any = {}, config: AxiosRequestConfig = defaultConfig): Promise<ApiModel> { return await api.delete(url, { data, ...config, }) } async function patch(url: string, data: any = {}, config: AxiosRequestConfig = defaultConfig): Promise<ApiModel> { return await api.patch(url, { data, ...config, }) } async function netPostFile(url: string, param: object, fileNameStr: string) { const apiUrl = `${/^http(s)?:\/{2}?/.test(url) ? url : url}` try { const res = await api({ method: 'post', url: apiUrl, data: param, }) const blob = new Blob([res.data]) // application/vnd.ms-excel这里表示xls类型文件 const contentDisposition = res.headers['content-disposition'] // 从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名; const patt = /filename=([^;]+\.[^\.;]+);*/ const result = patt.exec(contentDisposition) const filename = result ? result[1] : fileNameStr const downloadElement = document.createElement('a') const href = window.URL.createObjectURL(blob) // 创建下载的链接 const reg = /^["](.*)["]$/g downloadElement.style.display = 'none' downloadElement.href = href downloadElement.download = decodeURI(filename.replace(reg, '$1')) // 下载后文件名 document.body.appendChild(downloadElement) downloadElement.click() // 点击下载 document.body.removeChild(downloadElement) // 下载完成移除元素 window.URL.revokeObjectURL(href) // 释放掉blob对象 return res } catch (err) { console.info('ERROE', err) } } export const ikHttp = { post, get, put, del, delData, patch, netPostFile, // 取消请求 cancle: () => controller.abort(), } export const textHeader = { headers: { 'Content-Type': 'text/plain' }, }