// 导出
const onExportPasswordAndUserCodeList = async () => {
const formVal = await form.validateFields();
const { userCode, keyword } = formVal;
setDLoadings(true);
const params = {
projectId: locationQuery.id,
urseCode: userCode || '',
keyword: keyword || '',
};
saveAs(params);
};
const saveAs = (params) => {
ExportPasswordAndUserCodeList(params).then((res) => {
let type =
'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,';
downloadFileByBase64(`${type}${res.data}`, locationQuery.name);
setDLoadings(false);
});
};
// type 是必须的,如果后端给我们了最好,如果碰到个比较坑的后端就需要自己去写,我这里下载时xlsx,其余格式自行百度
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });
}
function downloadFile(url, name = "What's the fuvk") {
var a = document.createElement('a');
a.setAttribute('href', url);
a.setAttribute('download', name);
a.setAttribute('target', '_blank');
let clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent('click', true, true);
a.dispatchEvent(clickEvent);
}
function downloadFileByBase64(base64, name) {
var myBlob = dataURLtoBlob(base64);
var myUrl = URL.createObjectURL(myBlob);
downloadFile(myUrl, name);
}
Api接口
export const ExportPasswordAndUserCodeList = (formData: object) => {
return usePost(
`${Config.Api.Base}${Config.Api.ExportPasswordAndUserCodeList}`,
formData,
// {
//responseType: 'blob', //responseType一定要删除,只有是文件流才需要
///},
);
};