From 6645cd2b758a67039ae724e7b8cd72b1fe6a620f Mon Sep 17 00:00:00 2001 From: johnathan <952508490@qq.com> Date: Fri, 20 Jun 2025 17:26:24 +0800 Subject: [PATCH] Update --- package.json | 2 +- src/components/DetailDescription.vue | 40 +--- .../{AsinsInput.vue => IdsInput.vue} | 26 ++- src/components/ProgressReport.vue | 14 +- src/components/ResultTable.vue | 96 ++++++++ src/components/ReviewPreview.vue | 2 +- src/env.ts | 2 +- src/logic/page-worker/types.d.ts | 1 - src/logic/{storage.ts => storages/amazon.ts} | 2 +- src/logic/storages/global.ts | 3 + src/logic/storages/homedepot.ts | 22 ++ src/logic/web-injectors/amazon.ts | 19 +- src/options/Options.vue | 39 +++- src/options/views/AmazonResultTable.vue | 81 +------ src/options/views/HomedepotResultTable.vue | 220 ++++++++++++++++++ src/router/index.ts | 15 +- src/sidepanel/App.vue | 4 + .../views/AmazonEntries/DetailPageEntry.vue | 16 +- .../views/AmazonEntries/ReviewPageEntry.vue | 16 +- .../views/AmazonEntries/SearchPageEntry.vue | 16 +- src/sidepanel/views/AmazonSidepanel.vue | 2 +- src/sidepanel/views/HomedepotSidepanel.vue | 92 +++++++- src/styles/main.scss | 3 + 23 files changed, 543 insertions(+), 190 deletions(-) rename src/components/{AsinsInput.vue => IdsInput.vue} (77%) create mode 100644 src/components/ResultTable.vue rename src/logic/{storage.ts => storages/amazon.ts} (98%) create mode 100644 src/logic/storages/global.ts create mode 100644 src/logic/storages/homedepot.ts create mode 100644 src/options/views/HomedepotResultTable.vue diff --git a/package.json b/package.json index ae41214..e8db2f1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "azon-seeker", "displayName": "Azon Seeker", - "version": "0.2.0", + "version": "0.3.0", "private": true, "description": "Starter modify by honestfox101", "scripts": { diff --git a/src/components/DetailDescription.vue b/src/components/DetailDescription.vue index 420c567..b8a5df6 100644 --- a/src/components/DetailDescription.vue +++ b/src/components/DetailDescription.vue @@ -1,26 +1,7 @@ diff --git a/src/components/AsinsInput.vue b/src/components/IdsInput.vue similarity index 77% rename from src/components/AsinsInput.vue rename to src/components/IdsInput.vue index 919b6a4..2e08afc 100644 --- a/src/components/AsinsInput.vue +++ b/src/components/IdsInput.vue @@ -2,12 +2,18 @@ import { useFileDialog } from '@vueuse/core'; import type { FormItemRule } from 'naive-ui'; -withDefaults( +const props = withDefaults( defineProps<{ disabled?: boolean; + matchPattern?: RegExp; + placeholder?: string; + validateMessage?: string; }>(), { disabled: false, + matchPattern: () => /^[A-Z0-9]{10}((\n|\s|,|;)[A-Z0-9]{10})*\n?$/g, + placeholder: '输入ASINs', + validateMessage: '请输入格式正确的ASIN', }, ); @@ -19,20 +25,20 @@ const formItemRef = useTemplateRef('detail-form-item'); const formItemRule: FormItemRule = { required: true, trigger: ['submit', 'blur'], - message: '请输入格式正确的ASIN', + message: props.validateMessage, validator: () => { - return modelValue.value.match(/^[A-Z0-9]{10}((\n|\s|,|;)[A-Z0-9]{10})*\n?$/g) !== null; + return props.matchPattern.exec(modelValue.value) !== null; }, }; const fileDialog = useFileDialog({ accept: '.txt', multiple: false }); fileDialog.onChange((fileList) => { const file = fileList?.item(0); - file && handleImportAsin(file); + file && handleImportIds(file); fileDialog.reset(); }); -const handleImportAsin = (file: File) => { +const handleImportIds = (file: File) => { const reader = new FileReader(); reader.onload = (e) => { const content = e.target?.result; @@ -43,10 +49,10 @@ const handleImportAsin = (file: File) => { reader.readAsText(file, 'utf-8'); }; -const handleExportAsin = () => { +const handleExportIds = () => { const blob = new Blob([modelValue.value], { type: 'text/plain' }); const url = URL.createObjectURL(blob); - const filename = `asin-${new Date().toISOString()}.txt`; + const filename = `${new Date().toISOString()}.txt`; const link = document.createElement('a'); link.href = url; link.download = filename; @@ -75,7 +81,7 @@ defineExpose({