From 843ab4433ab17308fdd16e6adb75aa06b60c01d9 Mon Sep 17 00:00:00 2001 From: skycurtain Date: Tue, 13 Oct 2026 12:42:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E5=A4=8D=E5=88=B6=E4=BB=A4?= =?UTF-8?q?=E7=89=8C=E5=85=BC=E5=AE=B9=20HTTP=20=E9=9D=9E=20Secure=20Conte?= =?UTF-8?q?xt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/src/components/admin/member-token-modal.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/web/src/components/admin/member-token-modal.vue b/apps/web/src/components/admin/member-token-modal.vue index 2641215..a42bab0 100644 --- a/apps/web/src/components/admin/member-token-modal.vue +++ b/apps/web/src/components/admin/member-token-modal.vue @@ -5,6 +5,7 @@ import { ref, watch } from "vue"; import { message } from "antdv-next"; import { CopyOutlined, WarningOutlined } from "@antdv-next/icons"; +import { useClipboard } from "@vueuse/core"; const props = defineProps<{ open: boolean; @@ -27,9 +28,12 @@ watch( }, ); +/** legacy: true —— HTTP 等非 Secure Context 无 Clipboard API 时退回 execCommand */ +const { copy } = useClipboard({ legacy: true }); + async function onCopy() { try { - await navigator.clipboard.writeText(props.token); + await copy(props.token); message.success("已复制"); } catch { message.error("复制失败,请手动选中复制");