29、判断当前的浏览器是否满足版本需求
getBrowserInfo(vchrome, vff, vie) {
const agent = navigator.userAgent.toLowerCase()
const regStr_ie = /msie [\d.]+/gi
const regStr_ff = /firefox\/[\d.]+/gi
const regStr_chrome = /chrome\/[\d.]+/gi
let stutus = false
let str = ''
if (agent.indexOf('msie') > 0 && vie) {
str = (agent.match(regStr_ie) + '').replace(/[^0-9.]/ig, '')
stutus = str.split('.')[0] - vie >= 0 ? true : false
}
if ((!!window.ActiveXObject || "ActiveXObject" in window) && agent.indexOf('msie') < 0) {
stutus = true
}
if (agent.indexOf('chrome') > 0 && vchrome) {
str = (agent.match(regStr_chrome) + '').replace(/[^0-9.]/ig, '')
stutus = str.split('.')[0] - vchrome >= 0 ? true : false
}
if (agent.indexOf('firefox') > 0 && vff) {
str = (agent.match(regStr_ff) + '').replace(/[^0-9.]/ig, '')
stutus = str.split('.')[0] - vff >= 0 ? true : false
}
return stutus
},
30、深度克隆对象,不支持对象内方法的克隆
deepClone(source) {
return JSON.parse(JSON.stringify(source))
},
31、HTMLDecode 反转义特殊字符
HTMLDecode(text, type) {
if(type === 'match') {
let SPECIAL_CHARS = ["%", "_", "<", ">", "(", ")",'"',"&", " "]
let ESCAPE_SPECIAL_CHARS = ["\\\\%", "\\\\_", "<", ">", "(", ")",""","&"," "]
ESCAPE_SPECIAL_CHARS.forEach((item, i) => {
text = text.replace(new RegExp( item , "g" ), SPECIAL_CHARS[i])
})
return text
}
let temp = new DOMParser()
let output = (temp.parseFromString(text, 'text/html')).body.textContent || ''
temp = null
return output
},
31、decodeObj() 转化html中的转义字符
decodeObj(obj, type) {
if (typeof obj === 'string') {
return this.HTMLDecode(obj, type)
} else if (typeof obj === 'object' && !(obj instanceof Array) && obj !== null) {
let temp = {}
for (let [key, value] of Object.entries(obj)) {
temp[key] = this.decodeObj(value, type)
}
return temp
} else if (typeof obj === 'object' && obj instanceof Array) {
return obj.map(item => {
return this.decodeObj(item, type)
})
}
return obj
},
32、subStr 多出部分加...
subStr(str, n) {
if (str) {
let r = /[^\x00-\xff]/g;
if (str.replace(r, "mm").length <= n) { return str }
let m = Math.floor(n / 2);
for (let i = m; i < str.length; i++) {
if (str.substr(0, i).replace(r, "mm").length >= n) {
return str.substr(0, i) + "...";
}
}
}
return str;
},
33、多出部分加...
/**
* @method formatData 多出部分加...
* @param text 需要转化的字符串
* @param len 需要显示的字符长度
*/
formatData(text, len = 10) {
let str = text
if (str && str.length > len) {
str = str.substring(0, len) + '...'
}
return str
},
34、每隔n个字符加入操作符
nReplace(text, len, op = '\n') {
let str = text
let re = new RegExp(`(.{${len}})`, 'g')
if (str && str.length > len) {
str = str.replace(re, `$1${op}`)
}
return str
},
35、简单数据转化成ztree数据
/**
* @method simpleToArray 简单数据转化成ztree数据
* @param params simple设置
***/
simpleToArray(sNodes, params = {}) {
var i, l,
key = params.idKey || 'id',
val = 'value',
kk = 'key',
title = 'title',
name = params.nameKey || 'name',
parentKey = params.parentKey || 'pId',
childKey = 'children'
if (!key || !sNodes) return []
if (Object.prototype.toString.apply(sNodes) === "[object Array]") {
var r = []
var tmpMap = {}
for (i = 0, l = sNodes.length
tmpMap[sNodes[i][key]] = sNodes[i]
sNodes[i][kk] = sNodes[i][val] = sNodes[i][key]
sNodes[i][title] = sNodes[i][name]
}
for (i = 0, l = sNodes.length
if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] !== sNodes[i][parentKey]) {
if (!tmpMap[sNodes[i][parentKey]][childKey])
tmpMap[sNodes[i][parentKey]][childKey] = []
tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i])
} else {
r.push(sNodes[i])
}
}
return r
}
return [sNodes]
},
36、组织树数据格式化
// 组织树数据格式化
transformData(tree) {
let arr = []
if (!!tree && tree.length !== 0) {
tree.forEach(item => {
let obj = {}
obj.title = item.name
obj.key = item.id
obj.value = item.id
obj.checked = item.checked
obj.children = this.transformData(item.children)
arr.push(obj)
})
}
return arr
},
37、导出
saveFile(data, fileName, type = 'excel') {
const ZIP = 'application/zip;charset=utf-8'
const EXCEL = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
let terminalType = ''
if (type === 'excel') {
terminalType = EXCEL
} else if (type === 'zip') {
terminalType = ZIP
}
var blob = ''
if (typeof (data) === 'string') {
let code = atob(data.replace(/\r\n/g, ''))
var abuffer = new window.ArrayBuffer(code.length)
var uBuffer = new window.Uint8Array(abuffer)
for (var i = 0; i < code.length; i++) {
uBuffer[i] = code.charCodeAt(i) & 0xff
}
blob = new Blob([uBuffer], {
type: terminalType
})
} else {
blob = new Blob([data], {
type: terminalType
})
}
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, fileName)
} else {
var href = window.URL.createObjectURL(blob)
var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a')
save_link.href = href
save_link.download = fileName
document.body.appendChild(save_link)
var event = document.createEvent('MouseEvents')
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
save_link.dispatchEvent(event)
document.body.removeChild(save_link)
window.URL.revokeObjectURL(href)
}
},