useCopyAndPasteElement.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { storeToRefs } from 'pinia'
  2. import { useMainStore } from '@/store'
  3. import { copyText, readClipboard } from '@/utils/clipboard'
  4. import { encrypt } from '@/utils/crypto'
  5. import message from '@/utils/message'
  6. import usePasteTextClipboardData from '@/hooks/usePasteTextClipboardData'
  7. import useDeleteElement from './useDeleteElement'
  8. export default () => {
  9. const mainStore = useMainStore()
  10. const { activeElementIdList, activeElementList } = storeToRefs(mainStore)
  11. const { pasteTextClipboardData } = usePasteTextClipboardData()
  12. const { deleteElement } = useDeleteElement()
  13. // 将选中元素数据加密后复制到剪贴板
  14. const copyElement = () => {
  15. if (!activeElementIdList.value.length) return
  16. const text = encrypt(JSON.stringify({
  17. type: 'elements',
  18. data: activeElementList.value,
  19. }))
  20. copyText(text).then(() => {
  21. mainStore.setEditorareaFocus(true)
  22. })
  23. }
  24. // 将选中元素复制后删除(剪切)
  25. const cutElement = () => {
  26. copyElement()
  27. deleteElement()
  28. }
  29. // 尝试将剪贴板元素数据解密后进行粘贴
  30. const pasteElement = () => {
  31. console.log('pasteElement')
  32. readClipboard().then(text => {
  33. pasteTextClipboardData(text)
  34. }).catch(err => message.warning(err))
  35. }
  36. // 将选中元素复制后立刻粘贴
  37. const quickCopyElement = () => {
  38. copyElement()
  39. pasteElement()
  40. }
  41. return {
  42. copyElement,
  43. cutElement,
  44. pasteElement,
  45. quickCopyElement,
  46. }
  47. }