diff --git a/src/components/SubmitterWindow.vue b/src/components/SubmitterWindow.vue
index 4ecb6ad7..d333d4e9 100644
--- a/src/components/SubmitterWindow.vue
+++ b/src/components/SubmitterWindow.vue
@@ -214,7 +214,14 @@
class="block text-sm font-medium text-slate-700 dark:text-slate-300 mb-2"
>截图(最多5张)
-
+
+ 可直接 Ctrl+V 粘贴截图
+
+
{
screenshotInput.value?.click();
};
+const importScreenshots = (files: File[]) => {
+ for (const file of files) {
+ if (formData.screenshots.length >= 5) break;
+
+ const reader = new FileReader();
+ reader.onload = () => {
+ if (
+ formData.screenshots.length < 5 &&
+ typeof reader.result === "string"
+ ) {
+ formData.screenshots.push(reader.result);
+ }
+ };
+ reader.readAsDataURL(file);
+ }
+};
+
const handleScreenshotSelect = (event: Event) => {
const target = event.target as HTMLInputElement;
- const files = target.files;
- if (files) {
- for (let i = 0; i < files.length && formData.screenshots.length < 5; i++) {
- const file = files[i];
- if (
- file.name.endsWith(".png") ||
- file.name.endsWith(".jpg") ||
- file.name.endsWith(".jpeg")
- ) {
- const reader = new FileReader();
- reader.onload = (e) => {
- if (formData.screenshots.length < 5) {
- formData.screenshots.push(e.target?.result as string);
- }
- };
- reader.readAsDataURL(file);
- }
- }
- }
+ const files = Array.from(target.files ?? []).filter((file) =>
+ /\.(png|jpe?g)$/i.test(file.name),
+ );
+ importScreenshots(files);
target.value = "";
};
+const handleScreenshotPaste = (event: ClipboardEvent) => {
+ const files = Array.from(event.clipboardData?.items ?? [])
+ .filter((item) => item.type.startsWith("image/"))
+ .map((item) => item.getAsFile())
+ .filter((file): file is File => file !== null);
+
+ if (files.length > 0) {
+ event.preventDefault();
+ importScreenshots(files);
+ }
+};
+
const removeScreenshot = (index: number) => {
formData.screenshots.splice(index, 1);
};