diff --git a/frontend/src/CreateAskTasksPage.jsx b/frontend/src/CreateAskTasksPage.jsx
index 599d8a9..878b95f 100644
--- a/frontend/src/CreateAskTasksPage.jsx
+++ b/frontend/src/CreateAskTasksPage.jsx
@@ -79,6 +79,7 @@ export default function CreateAskTasksPage({ api, librarySelection = [], onLibra
const [addDialog, setAddDialog] = useState(null);
const [publishOpen, setPublishOpen] = useState(false);
const [linkCopied, setLinkCopied] = useState(false);
+ const productQrPasteRef = useRef(null);
const processingLibrarySelection = useRef(false);
const consumedLibrarySelectionKey = useRef("");
useEffect(() => {
@@ -160,6 +161,35 @@ export default function CreateAskTasksPage({ api, librarySelection = [], onLibra
if (productQrInputRef.current) productQrInputRef.current.value = "";
}
+ useEffect(() => {
+ if (!publishOpen) return undefined;
+ const pasteProductQr = (event) => {
+ const imageItem = Array.from(event.clipboardData?.items || []).find((item) =>
+ item.kind === "file" && item.type.startsWith("image/"),
+ );
+ if (!imageItem) return;
+ const blob = imageItem.getAsFile?.();
+ if (!blob) {
+ setError("读取剪贴板图片失败,请重新复制后再试");
+ return;
+ }
+ const extension = blob.type === "image/jpeg" ? "jpg" : blob.type.split("/")[1] || "png";
+ const pastedFile = new File(
+ [blob],
+ `product-qr-${Date.now()}.${extension}`,
+ { type: blob.type, lastModified: Date.now() },
+ );
+ event.preventDefault();
+ selectProductQr(pastedFile);
+ };
+ window.addEventListener("paste", pasteProductQr);
+ const focusTimer = window.setTimeout(() => productQrPasteRef.current?.focus(), 0);
+ return () => {
+ window.clearTimeout(focusTimer);
+ window.removeEventListener("paste", pasteProductQr);
+ };
+ }, [publishOpen]);
+
function clearAll() {
if (busy) return;
clearPageCache("create-ask-task");
@@ -814,12 +844,21 @@ export default function CreateAskTasksPage({ api, librarySelection = [], onLibra
{form.product_qr_image ? (

-
{form.product_qr_image_name || "商品二维码"}已上传商品二维码
+
{form.product_qr_image_name || "商品二维码"}已上传商品二维码,可粘贴图片替换
) : (
-
+
)}
- 淘口令和二维码至少填写一种,也可以两者都填写
+ 淘口令和二维码至少填写一种,也可以两者都填写;复制二维码图片后可直接按 Ctrl+V 粘贴