JinZHouXiYiJi_DaPin2/examples/utils/utils.ts

109 lines
3.0 KiB
TypeScript
Raw Permalink Normal View History

2023-12-05 13:23:01 +08:00
export const uuid = (hasHyphen?: string) => {
return (
hasHyphen ? 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' : 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'
).replace(/[xy]/g, function (c) {
const r = (Math.random() * 16) | 0
const v = c == 'x' ? r : (r & 0x3) | 0x8
return v.toString(16)
})
}
// 复制文本到剪贴板
export const copyText = (text: string): void => {
const copy = (event: ClipboardEvent) => {
event.clipboardData?.setData('text', text)
event.preventDefault()
}
document.addEventListener('copy', copy)
document.execCommand('copy')
document.removeEventListener('copy', copy)
}
/**
*
* @returns
*/
export const pasteText = (): string => {
let textData
const paste = (event: ClipboardEvent) => {
textData = event.clipboardData?.getData('text')
event.preventDefault()
}
document.addEventListener('paste', paste)
document.execCommand('paste')
document.removeEventListener('paste', paste)
return textData
}
export const loadScript = async (src: string) => {
return new Promise(function (resolve, reject) {
let shouldAppend = false
let el: any = document.querySelector('script[src="' + src + '"]')
if (!el) {
el = document.createElement('script')
el.type = 'text/javascript'
el.async = true
el.src = src
shouldAppend = true
} else if (el.hasAttribute('data-loaded')) {
resolve(el)
return
}
el.addEventListener('error', reject)
el.addEventListener('abort', reject)
el.addEventListener('load', function loadScriptHandler() {
el.setAttribute('data-loaded', true)
resolve(el)
})
if (shouldAppend) document.head.appendChild(el)
})
}
// 获取操作系统
export function getOS() {
/**
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData/platform#browser_compatibility
*/
// @ts-expect-error 仅 chromium 核心 >=93 版本支持 navigator.userAgentData.platform 属性,兼容性查看上方链接
const platform = window.navigator?.userAgentData?.platform || window.navigator.platform
const userAgent = window.navigator.userAgent
const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K', 'macOS']
const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']
const iosPlatforms = ['iPhone', 'iPad', 'iPod']
let os: 'unknown' | 'MacOS' | 'IOS' | 'Windows' | 'Android' | 'Linux' = 'unknown'
if (macosPlatforms.indexOf(platform) !== -1) {
os = 'MacOS'
} else if (iosPlatforms.indexOf(platform) !== -1) {
os = 'IOS'
} else if (windowsPlatforms.indexOf(platform) !== -1) {
os = 'Windows'
} else if (/Android/.test(userAgent)) {
os = 'Android'
} else if (/Linux/.test(platform)) {
os = 'Linux'
}
return os
}
/**
* 线
* @param key
* @returns
*/
export function camel2snake(key) {
return key
.replace(/[A-Z]/g, function (s) {
return ' ' + s.toLowerCase()
})
.trim()
.replaceAll(' ', '-')
}
export const Logger = console