From fd533dd26134ab533b7826efd9be917b2fef38cc Mon Sep 17 00:00:00 2001 From: HouYunFei <1844025705@qq.com> Date: Wed, 20 May 2026 13:29:12 +0800 Subject: [PATCH] fix: use clipboard copy helper library --- docs/pending-test.md | 2 ++ web/bun.lock | 3 +++ web/package.json | 1 + web/src/app/(admin)/admin/assets/page.tsx | 3 ++- web/src/app/(admin)/admin/prompts/page.tsx | 3 ++- web/src/app/(user)/asset-library/page.tsx | 3 ++- web/src/app/(user)/assets/page.tsx | 3 ++- web/src/app/(user)/prompts/page.tsx | 3 ++- 8 files changed, 16 insertions(+), 5 deletions(-) diff --git a/docs/pending-test.md b/docs/pending-test.md index bcab4b0..34439d4 100644 --- a/docs/pending-test.md +++ b/docs/pending-test.md @@ -1 +1,3 @@ # 待测试 + +- 通过局域网 IP 访问前台提示词、素材库、我的素材和后台相关页面时,复制文本应能正常写入剪贴板。 diff --git a/web/bun.lock b/web/bun.lock index ba0ae87..ee6b716 100644 --- a/web/bun.lock +++ b/web/bun.lock @@ -12,6 +12,7 @@ "axios": "^1.16.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "copy-to-clipboard": "^4.0.2", "localforage": "^1.10.0", "lucide-react": "^1.16.0", "motion": "^12.38.0", @@ -646,6 +647,8 @@ "cookie-signature": ["cookie-signature@1.2.2", "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.2.2.tgz", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], + "copy-to-clipboard": ["copy-to-clipboard@4.0.2", "", {}, "sha512-gklSft7IuhriZKHKpuoA1fpJSLPNgvUMWMo5BlnzAJm0zNKnznoSv23IjtNqclx8eKi6ZcdvFFzYEER/+U1LoQ=="], + "cors": ["cors@2.8.6", "https://registry.npmmirror.com/cors/-/cors-2.8.6.tgz", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], "cosmiconfig": ["cosmiconfig@9.0.1", "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-9.0.1.tgz", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ=="], diff --git a/web/package.json b/web/package.json index aa98916..9af3882 100644 --- a/web/package.json +++ b/web/package.json @@ -16,6 +16,7 @@ "axios": "^1.16.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "copy-to-clipboard": "^4.0.2", "localforage": "^1.10.0", "lucide-react": "^1.16.0", "motion": "^12.38.0", diff --git a/web/src/app/(admin)/admin/assets/page.tsx b/web/src/app/(admin)/admin/assets/page.tsx index eb1f7a5..eb02b10 100644 --- a/web/src/app/(admin)/admin/assets/page.tsx +++ b/web/src/app/(admin)/admin/assets/page.tsx @@ -4,6 +4,7 @@ import { CopyOutlined, DeleteOutlined, EditOutlined, EyeOutlined, PlusOutlined, import { ProTable, type ProColumns } from "@ant-design/pro-components"; import { App, Button, Card, Col, Flex, Form, Image, Input, Modal, Row, Select, Space, Tag, Tooltip, Typography } from "antd"; import { useEffect, useState } from "react"; +import copy from "copy-to-clipboard"; import type { AdminAsset } from "@/services/api/admin"; import { useAdminAssets } from "../hooks/use-admin-assets"; @@ -33,7 +34,7 @@ export default function AdminAssetsPage() { }, [editingAsset, form]); const copyValue = async (value: string) => { - await navigator.clipboard.writeText(value); + copy(value); message.success("已复制"); }; diff --git a/web/src/app/(admin)/admin/prompts/page.tsx b/web/src/app/(admin)/admin/prompts/page.tsx index 0d84058..bf0f7d9 100644 --- a/web/src/app/(admin)/admin/prompts/page.tsx +++ b/web/src/app/(admin)/admin/prompts/page.tsx @@ -4,6 +4,7 @@ import { CopyOutlined, DeleteOutlined, EditOutlined, ExportOutlined, EyeOutlined import { ProTable, type ProColumns } from "@ant-design/pro-components"; import { App, Button, Card, Col, Flex, Form, Image, Input, Modal, Row, Select, Space, Table, Tag, Tooltip, Typography } from "antd"; import { useEffect, useState } from "react"; +import copy from "copy-to-clipboard"; import type { Prompt } from "@/services/api/prompts"; import { useAdminPrompts } from "../hooks/use-admin-prompts"; @@ -26,7 +27,7 @@ export default function AdminPromptsPage() { }, [editingPrompt, form]); const copyPrompt = async (value: string) => { - await navigator.clipboard.writeText(value); + copy(value); message.success("已复制"); }; diff --git a/web/src/app/(user)/asset-library/page.tsx b/web/src/app/(user)/asset-library/page.tsx index e0026b8..1f5df78 100644 --- a/web/src/app/(user)/asset-library/page.tsx +++ b/web/src/app/(user)/asset-library/page.tsx @@ -5,6 +5,7 @@ import { useEffect, useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { App, Button, Card, Drawer, Empty, Image, Input, Pagination, Spin, Tag, Typography } from "antd"; import axios from "axios"; +import copy from "copy-to-clipboard"; import { cn } from "@/lib/utils"; import { useAssetStore } from "@/stores/use-asset-store"; @@ -77,7 +78,7 @@ export default function AssetLibraryPage() { }; const copyText = async (value: string) => { - await navigator.clipboard.writeText(value); + copy(value); message.success("已复制"); }; diff --git a/web/src/app/(user)/assets/page.tsx b/web/src/app/(user)/assets/page.tsx index 0ea1bbd..4d634a2 100644 --- a/web/src/app/(user)/assets/page.tsx +++ b/web/src/app/(user)/assets/page.tsx @@ -3,6 +3,7 @@ import { Copy, Download, PencilLine, Search, Trash2, Upload } from "lucide-react"; import { useEffect, useMemo, useRef, useState } from "react"; import { App, Button, Card, Drawer, Empty, Form, Image, Input, Modal, Pagination, Select, Space, Tag, Typography } from "antd"; +import copy from "copy-to-clipboard"; import { formatBytes, readFileAsDataUrl } from "@/lib/image-utils"; import { uploadImage } from "@/services/image-storage"; @@ -139,7 +140,7 @@ export default function AssetsPage() { const copyText = async (asset: Asset) => { if (asset.kind !== "text") return; - await navigator.clipboard.writeText(asset.data.content); + copy(asset.data.content); message.success("文本已复制"); }; diff --git a/web/src/app/(user)/prompts/page.tsx b/web/src/app/(user)/prompts/page.tsx index 97ca58b..d94c06d 100644 --- a/web/src/app/(user)/prompts/page.tsx +++ b/web/src/app/(user)/prompts/page.tsx @@ -3,6 +3,7 @@ import { FolderPlus, Search } from "lucide-react"; import { type UIEvent, useEffect, useState } from "react"; import { App, Button, Empty, Input, Spin, Tag } from "antd"; +import copy from "copy-to-clipboard"; import { PromptCard } from "@/components/prompts/prompt-card"; import { PromptDetailDialog } from "@/components/prompts/prompt-detail-dialog"; @@ -32,7 +33,7 @@ export default function PromptsPage() { }; const copyPrompt = async (prompt: string) => { - await navigator.clipboard.writeText(prompt); + copy(prompt); message.success("提示词已复制"); };