diff --git a/src/components/MarkdownView/index.vue b/src/components/MarkdownView/index.vue index 74764d592..86fc93917 100644 --- a/src/components/MarkdownView/index.vue +++ b/src/components/MarkdownView/index.vue @@ -17,7 +17,7 @@ const props = defineProps({ }) const message = useMessage() // 消息弹窗 -const { copy } = useClipboard() // 初始化 copy 到粘贴板 +const { copy } = useClipboard({ legacy: true }) // 初始化 copy 到粘贴板 const contentRef = ref() const md = new MarkdownIt({ diff --git a/src/layout/components/Setting/src/Setting.vue b/src/layout/components/Setting/src/Setting.vue index 2973674ba..92ecf4149 100644 --- a/src/layout/components/Setting/src/Setting.vue +++ b/src/layout/components/Setting/src/Setting.vue @@ -109,6 +109,7 @@ watch( // 拷贝 const copyConfig = async () => { const { copy, copied, isSupported } = useClipboard({ + legacy: true, source: ` // 面包屑 breadcrumb: ${appStore.getBreadcrumb}, @@ -296,7 +297,7 @@ const clear = () => { $prefix-cls: #{$namespace}-setting; .#{$prefix-cls} { + z-index: 1200; /* 修正没有z-index会被表格层覆盖,值不要超过4000 */ border-radius: 6px 0 0 6px; - z-index: 1200;/*修正没有z-index会被表格层覆盖,值不要超过4000*/ } diff --git a/src/views/ai/chat/index/components/message/MessageList.vue b/src/views/ai/chat/index/components/message/MessageList.vue index 77b41c796..da5c338a6 100644 --- a/src/views/ai/chat/index/components/message/MessageList.vue +++ b/src/views/ai/chat/index/components/message/MessageList.vue @@ -126,7 +126,7 @@ import userAvatarDefaultImg from '@/assets/imgs/avatar.gif' import roleAvatarDefaultImg from '@/assets/ai/gpt.svg' const message = useMessage() // 消息弹窗 -const { copy } = useClipboard() // 初始化 copy 到粘贴板 +const { copy } = useClipboard({ legacy: true }) // 初始化 copy 到粘贴板 const userStore = useUserStore() // 判断“消息列表”滚动的位置(用于判断是否需要滚动到消息最下方) diff --git a/src/views/ai/write/index/components/Right.vue b/src/views/ai/write/index/components/Right.vue index d0aada5df..1eb66a077 100644 --- a/src/views/ai/write/index/components/Right.vue +++ b/src/views/ai/write/index/components/Right.vue @@ -45,7 +45,7 @@ import { useClipboard } from '@vueuse/core' const message = useMessage() // 消息弹窗 -const { copied, copy } = useClipboard() // 粘贴板 +const { copied, copy } = useClipboard({ legacy: true }) // 粘贴板 const props = defineProps({ content: { diff --git a/src/views/infra/build/index.vue b/src/views/infra/build/index.vue index 260b8b7a0..191fc90fe 100644 --- a/src/views/infra/build/index.vue +++ b/src/views/infra/build/index.vue @@ -136,7 +136,7 @@ const makeTemplate = () => { /** 复制 **/ const copy = async (text: string) => { const textToCopy = JSON.stringify(text, null, 2) - const { copy, copied, isSupported } = useClipboard({ source: textToCopy }) + const { copy, copied, isSupported } = useClipboard({ legacy: true, source: textToCopy }) if (!isSupported) { message.error(t('common.copyError')) } else { diff --git a/src/views/infra/codegen/PreviewCode.vue b/src/views/infra/codegen/PreviewCode.vue index b6a307d23..819fca6c0 100644 --- a/src/views/infra/codegen/PreviewCode.vue +++ b/src/views/infra/codegen/PreviewCode.vue @@ -180,7 +180,7 @@ const handleFiles = (datas: CodegenApi.CodegenPreviewVO[]) => { /** 复制 **/ const copy = async (text: string) => { - const { copy, copied, isSupported } = useClipboard({ source: text }) + const { copy, copied, isSupported } = useClipboard({ legacy: true, source: text }) if (!isSupported) { message.error(t('common.copyError')) return diff --git a/src/views/infra/file/index.vue b/src/views/infra/file/index.vue index a0c9e258b..e431218da 100644 --- a/src/views/infra/file/index.vue +++ b/src/views/infra/file/index.vue @@ -136,6 +136,7 @@ import { fileSizeFormatter } from '@/utils' import { dateFormatter } from '@/utils/formatTime' import * as FileApi from '@/api/infra/file' import FileForm from './FileForm.vue' +import { useClipboard } from '@vueuse/core' defineOptions({ name: 'InfraFile' }) @@ -186,29 +187,15 @@ const openForm = () => { } /** 复制到剪贴板方法 */ -const copyToClipboard = (text: string) => { - if (navigator.clipboard && window.isSecureContext) { - navigator.clipboard - .writeText(text) - .then(() => { - message.success('复制成功') - }) - .catch(() => { - message.error('复制失败') - }) - } else { - // 兼容不支持 clipboard 的情况 - try { - const textarea = document.createElement('textarea') - textarea.value = text - document.body.appendChild(textarea) - textarea.select() - document.execCommand('copy') - document.body.removeChild(textarea) - message.success('复制成功') - } catch (error) { - message.error('复制失败') - } +const copyToClipboard = async (text: string) => { + const { copy, copied, isSupported } = useClipboard({ legacy: true, source: text }) + if (!isSupported) { + message.error(t('common.copyError')) + return + } + await copy() + if (unref(copied)) { + message.success(t('common.copySuccess')) } } diff --git a/src/views/iot/device/device/detail/DeviceDetailsHeader.vue b/src/views/iot/device/device/detail/DeviceDetailsHeader.vue index 6fc876bc8..c6d031fdb 100644 --- a/src/views/iot/device/device/detail/DeviceDetailsHeader.vue +++ b/src/views/iot/device/device/detail/DeviceDetailsHeader.vue @@ -39,8 +39,10 @@ import DeviceForm from '@/views/iot/device/device/DeviceForm.vue' import { ProductVO } from '@/api/iot/product/product' import { DeviceVO } from '@/api/iot/device/device' +import { useClipboard } from '@vueuse/core' const message = useMessage() +const { t } = useI18n() // 国际化 const router = useRouter() const { product, device } = defineProps<{ product: ProductVO; device: DeviceVO }>() @@ -54,11 +56,14 @@ const openForm = (type: string, id?: number) => { /** 复制到剪贴板方法 */ const copyToClipboard = async (text: string) => { - try { - await navigator.clipboard.writeText(text) - message.success('复制成功') - } catch (error) { - message.error('复制失败') + const { copy, copied, isSupported } = useClipboard({ legacy: true, source: text }) + if (!isSupported) { + message.error(t('common.copyError')) + return + } + await copy() + if (unref(copied)) { + message.success(t('common.copySuccess')) } } diff --git a/src/views/iot/device/device/detail/DeviceDetailsInfo.vue b/src/views/iot/device/device/detail/DeviceDetailsInfo.vue index 930adb678..e3beda752 100644 --- a/src/views/iot/device/device/detail/DeviceDetailsInfo.vue +++ b/src/views/iot/device/device/detail/DeviceDetailsInfo.vue @@ -140,8 +140,10 @@ import { DeviceVO } from '@/api/iot/device/device' import { DeviceApi, IotDeviceAuthInfoVO } from '@/api/iot/device/device' import Map from '@/components/Map/index.vue' import { ref, computed } from 'vue' +import { useClipboard } from '@vueuse/core' const message = useMessage() // 消息提示 +const { t } = useI18n() // 国际化 const { product, device } = defineProps<{ product: ProductVO; device: DeviceVO }>() // 定义 Props const emit = defineEmits(['refresh']) // 定义 Emits @@ -165,11 +167,14 @@ const getLocationString = () => { /** 复制到剪贴板方法 */ const copyToClipboard = async (text: string) => { - try { - await navigator.clipboard.writeText(text) - message.success('复制成功') - } catch (error) { - message.error('复制失败') + const { copy, copied, isSupported } = useClipboard({ legacy: true, source: text }) + if (!isSupported) { + message.error(t('common.copyError')) + return + } + await copy() + if (unref(copied)) { + message.success(t('common.copySuccess')) } } diff --git a/src/views/iot/product/product/detail/ProductDetailsHeader.vue b/src/views/iot/product/product/detail/ProductDetailsHeader.vue index 3eb999fa4..311900c2a 100644 --- a/src/views/iot/product/product/detail/ProductDetailsHeader.vue +++ b/src/views/iot/product/product/detail/ProductDetailsHeader.vue @@ -54,18 +54,23 @@