mirror of
https://gitee.com/hhyykk/ipms-sjy-ui.git
synced 2025-07-18 12:55:08 +08:00
初始化项目,自 v1.7.1 版本开始
This commit is contained in:
157
src/utils/filt.ts
Normal file
157
src/utils/filt.ts
Normal file
@ -0,0 +1,157 @@
|
||||
export const openWindow = (
|
||||
url: string,
|
||||
opt?: {
|
||||
target?: '_self' | '_blank' | string
|
||||
noopener?: boolean
|
||||
noreferrer?: boolean
|
||||
}
|
||||
) => {
|
||||
const { target = '__blank', noopener = true, noreferrer = true } = opt || {}
|
||||
const feature: string[] = []
|
||||
|
||||
noopener && feature.push('noopener=yes')
|
||||
noreferrer && feature.push('noreferrer=yes')
|
||||
|
||||
window.open(url, target, feature.join(','))
|
||||
}
|
||||
|
||||
/**
|
||||
* @description: base64 to blob
|
||||
*/
|
||||
export const dataURLtoBlob = (base64Buf: string): Blob => {
|
||||
const arr = base64Buf.split(',')
|
||||
const typeItem = arr[0]
|
||||
const mime = typeItem.match(/:(.*?);/)![1]
|
||||
const bstr = window.atob(arr[1])
|
||||
let n = bstr.length
|
||||
const u8arr = new Uint8Array(n)
|
||||
while (n--) {
|
||||
u8arr[n] = bstr.charCodeAt(n)
|
||||
}
|
||||
return new Blob([u8arr], { type: mime })
|
||||
}
|
||||
|
||||
/**
|
||||
* img url to base64
|
||||
* @param url
|
||||
*/
|
||||
export const urlToBase64 = (url: string, mineType?: string): Promise<string> => {
|
||||
return new Promise((resolve, reject) => {
|
||||
let canvas = document.createElement('CANVAS') as Nullable<HTMLCanvasElement>
|
||||
const ctx = canvas!.getContext('2d')
|
||||
|
||||
const img = new Image()
|
||||
img.crossOrigin = ''
|
||||
img.onload = function () {
|
||||
if (!canvas || !ctx) {
|
||||
return reject()
|
||||
}
|
||||
canvas.height = img.height
|
||||
canvas.width = img.width
|
||||
ctx.drawImage(img, 0, 0)
|
||||
const dataURL = canvas.toDataURL(mineType || 'image/png')
|
||||
canvas = null
|
||||
resolve(dataURL)
|
||||
}
|
||||
img.src = url
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Download online pictures
|
||||
* @param url
|
||||
* @param filename
|
||||
* @param mime
|
||||
* @param bom
|
||||
*/
|
||||
export const downloadByOnlineUrl = (
|
||||
url: string,
|
||||
filename: string,
|
||||
mime?: string,
|
||||
bom?: BlobPart
|
||||
) => {
|
||||
urlToBase64(url).then((base64) => {
|
||||
downloadByBase64(base64, filename, mime, bom)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Download pictures based on base64
|
||||
* @param buf
|
||||
* @param filename
|
||||
* @param mime
|
||||
* @param bom
|
||||
*/
|
||||
export const downloadByBase64 = (buf: string, filename: string, mime?: string, bom?: BlobPart) => {
|
||||
const base64Buf = dataURLtoBlob(buf)
|
||||
downloadByData(base64Buf, filename, mime, bom)
|
||||
}
|
||||
|
||||
/**
|
||||
* Download according to the background interface file stream
|
||||
* @param {*} data
|
||||
* @param {*} filename
|
||||
* @param {*} mime
|
||||
* @param {*} bom
|
||||
*/
|
||||
export const downloadByData = (data: BlobPart, filename: string, mime?: string, bom?: BlobPart) => {
|
||||
const blobData = typeof bom !== 'undefined' ? [bom, data] : [data]
|
||||
const blob = new Blob(blobData, { type: mime || 'application/octet-stream' })
|
||||
|
||||
const blobURL = window.URL.createObjectURL(blob)
|
||||
const tempLink = document.createElement('a')
|
||||
tempLink.style.display = 'none'
|
||||
tempLink.href = blobURL
|
||||
tempLink.setAttribute('download', filename)
|
||||
if (typeof tempLink.download === 'undefined') {
|
||||
tempLink.setAttribute('target', '_blank')
|
||||
}
|
||||
document.body.appendChild(tempLink)
|
||||
tempLink.click()
|
||||
document.body.removeChild(tempLink)
|
||||
window.URL.revokeObjectURL(blobURL)
|
||||
}
|
||||
|
||||
/**
|
||||
* Download file according to file address
|
||||
* @param {*} sUrl
|
||||
*/
|
||||
export const downloadByUrl = ({
|
||||
url,
|
||||
target = '_blank',
|
||||
fileName
|
||||
}: {
|
||||
url: string
|
||||
target?: '_self' | '_blank'
|
||||
fileName?: string
|
||||
}): boolean => {
|
||||
const isChrome = window.navigator.userAgent.toLowerCase().indexOf('chrome') > -1
|
||||
const isSafari = window.navigator.userAgent.toLowerCase().indexOf('safari') > -1
|
||||
|
||||
if (/(iP)/g.test(window.navigator.userAgent)) {
|
||||
console.error('Your browser does not support download!')
|
||||
return false
|
||||
}
|
||||
if (isChrome || isSafari) {
|
||||
const link = document.createElement('a')
|
||||
link.href = url
|
||||
link.target = target
|
||||
|
||||
if (link.download !== undefined) {
|
||||
link.download = fileName || url.substring(url.lastIndexOf('/') + 1, url.length)
|
||||
}
|
||||
|
||||
if (document.createEvent) {
|
||||
const e = document.createEvent('MouseEvents')
|
||||
e.initEvent('click', true, true)
|
||||
link.dispatchEvent(e)
|
||||
return true
|
||||
}
|
||||
}
|
||||
if (url.indexOf('?') === -1) {
|
||||
url += '?download'
|
||||
}
|
||||
|
||||
openWindow(url, { target })
|
||||
return true
|
||||
}
|
Reference in New Issue
Block a user