bin-ui
Version:
基于 vue2.6 / vue-cli3 的 UI 组件库
77 lines (69 loc) • 2.09 kB
JavaScript
function has(browser) {
const ua = navigator.userAgent
if (browser === 'ie') {
const isIE = ua.indexOf('compatible') > -1 && ua.indexOf('MSIE') > -1
if (isIE) {
const reIE = new RegExp('MSIE (\\d+\\.\\d+);')
reIE.test(ua)
return parseFloat(RegExp['$1'])
} else {
return false
}
} else {
return ua.indexOf(browser) > -1
}
}
const csv = {
_isIE11() {
let iev = 0
const ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
const trident = !!navigator.userAgent.match(/Trident\/7.0/)
const rv = navigator.userAgent.indexOf('rv:11.0')
if (ieold) {
iev = Number(RegExp.$1)
}
if (navigator.appVersion.indexOf('MSIE 10') !== -1) {
iev = 10
}
if (trident && rv !== -1) {
iev = 11
}
return iev === 11
},
_isEdge() {
return /Edge/.test(navigator.userAgent)
},
_getDownloadUrl(text) {
const BOM = '\uFEFF'
// Add BOM to text for open in excel correctly
if (window.Blob && window.URL && window.URL.createObjectURL) {
const csvData = new Blob([BOM + text], { type: 'text/csv' })
return URL.createObjectURL(csvData)
} else {
return 'data:attachment/csv;charset=utf-8,' + BOM + encodeURIComponent(text)
}
},
download(filename, text) {
if (has('ie') && has('ie') < 10) {
// has module unable identify ie11 and Edge
const oWin = window.top.open('about:blank', '_blank')
oWin.document.charset = 'utf-8'
oWin.document.write(text)
oWin.document.close()
oWin.document.execCommand('SaveAs', filename)
oWin.close()
} else if (has('ie') === 10 || this._isIE11() || this._isEdge()) {
const BOM = '\uFEFF'
const csvData = new Blob([BOM + text], { type: 'text/csv' })
navigator.msSaveBlob(csvData, filename)
} else {
const link = document.createElement('a')
link.download = filename
link.href = this._getDownloadUrl(text)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
}
}
export default csv