mirror of
				https://gitee.com/hhyykk/ipms-sjy-ui.git
				synced 2025-11-04 20:28:45 +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