mirror of
https://github.com/pipipi-pikachu/PPTist.git
synced 2025-04-15 02:20:00 +08:00
72 lines
1.9 KiB
TypeScript
72 lines
1.9 KiB
TypeScript
import Clipboard from 'clipboard'
|
||
import { decrypt } from '@/utils/crypto'
|
||
|
||
/**
|
||
* 复制文本到剪贴板
|
||
* @param text 文本内容
|
||
*/
|
||
export const copyText = (text: string) => {
|
||
return new Promise((resolve, reject) => {
|
||
const fakeElement = document.createElement('button')
|
||
const clipboard = new Clipboard(fakeElement, {
|
||
text: () => text,
|
||
action: () => 'copy',
|
||
container: document.body,
|
||
})
|
||
clipboard.on('success', e => {
|
||
clipboard.destroy()
|
||
resolve(e)
|
||
})
|
||
clipboard.on('error', e => {
|
||
clipboard.destroy()
|
||
reject(e)
|
||
})
|
||
document.body.appendChild(fakeElement)
|
||
fakeElement.click()
|
||
document.body.removeChild(fakeElement)
|
||
})
|
||
}
|
||
|
||
// 读取剪贴板
|
||
export const readClipboard = (): Promise<string> => {
|
||
return new Promise((resolve, reject) => {
|
||
if (navigator.clipboard?.readText) {
|
||
navigator.clipboard.readText().then(text => {
|
||
if (!text) reject('剪贴板为空或者不包含文本')
|
||
return resolve(text)
|
||
})
|
||
}
|
||
else reject('浏览器不支持或禁止访问剪贴板,请使用快捷键 Ctrl + V')
|
||
})
|
||
}
|
||
|
||
// 解析加密后的剪贴板内容
|
||
export const pasteCustomClipboardString = (text: string) => {
|
||
let clipboardData
|
||
try {
|
||
clipboardData = JSON.parse(decrypt(text))
|
||
}
|
||
catch {
|
||
clipboardData = text
|
||
}
|
||
|
||
return clipboardData
|
||
}
|
||
|
||
// 尝试解析剪贴板内容是否为Excel表格(或类似的)数据格式
|
||
export const pasteExcelClipboardString = (text: string): string[][] | null => {
|
||
const lines: string[] = text.split('\r\n')
|
||
|
||
if (lines[lines.length - 1] === '') lines.pop()
|
||
|
||
let colCount = -1
|
||
const data: string[][] = []
|
||
for (const index in lines) {
|
||
data[index] = lines[index].split('\t')
|
||
|
||
if (data[index].length === 1) return null
|
||
if (colCount === -1) colCount = data[index].length
|
||
else if (colCount !== data[index].length) return null
|
||
}
|
||
return data
|
||
} |