/** * v-copyText 复制文本内容 * Copyright (c) 2022 ruoyi */ export default { beforeMount(el, { value, arg }) { if (arg === "callback") { el.$copyCallback = value } else { el.$copyValue = value const handler = () => { copyTextToClipboard(el.$copyValue) if (el.$copyCallback) { el.$copyCallback(el.$copyValue) } } el.addEventListener("click", handler) el.$destroyCopy = () => el.removeEventListener("click", handler) } } } function copyTextToClipboard(input, { target = document.body } = {}) { const element = document.createElement('textarea') const previouslyFocusedElement = document.activeElement element.value = input // Prevent keyboard from showing on mobile element.setAttribute('readonly', '') element.style.contain = 'strict' element.style.position = 'absolute' element.style.left = '-9999px' element.style.fontSize = '12pt' // Prevent zooming on iOS const selection = document.getSelection() const originalRange = selection.rangeCount > 0 && selection.getRangeAt(0) target.append(element) element.select() // Explicit selection workaround for iOS element.selectionStart = 0 element.selectionEnd = input.length let isSuccess = false try { isSuccess = document.execCommand('copy') } catch { } element.remove() if (originalRange) { selection.removeAllRanges() selection.addRange(originalRange) } // Get the focus back on the previously focused element, if any if (previouslyFocusedElement) { previouslyFocusedElement.focus() } return isSuccess }