From 9aeb12c7bf48ce6cef0c339cfff7512d0b7e30a9 Mon Sep 17 00:00:00 2001 From: johnathan <952508490@qq.com> Date: Mon, 26 May 2025 15:04:01 +0800 Subject: [PATCH] Update UI & Worker --- src/background/main.ts | 12 ++ src/components/AsinsInput.vue | 112 +++++++++++++++++ src/components/DetailDescription.vue | 32 +++-- src/components/ResultTable.vue | 145 ++++++++++++---------- src/composables/useLongTask.ts | 21 ++++ src/logic/execute-script.ts | 19 +-- src/logic/page-worker/types.d.ts | 1 + src/logic/storage.ts | 10 +- src/logic/web-injectors.ts | 12 +- src/manifest.ts | 12 +- src/options/Options.vue | 3 +- src/sidepanel/App.vue | 2 +- src/sidepanel/DetailPageEntry.vue | 176 ++++++++------------------- src/sidepanel/ReviewPageEntry.vue | 107 ++++++++++++++-- src/sidepanel/SearchPageEntry.vue | 27 ++-- src/styles/index.ts | 2 +- src/styles/{main.css => main.scss} | 0 src/tests/demo.spec.ts | 7 -- 18 files changed, 456 insertions(+), 244 deletions(-) create mode 100644 src/components/AsinsInput.vue create mode 100644 src/composables/useLongTask.ts rename src/styles/{main.css => main.scss} (100%) delete mode 100644 src/tests/demo.spec.ts diff --git a/src/background/main.ts b/src/background/main.ts index 62986c5..f6c8f4a 100644 --- a/src/background/main.ts +++ b/src/background/main.ts @@ -20,4 +20,16 @@ if (USE_SIDE_PANEL) { browser.runtime.onInstalled.addListener(() => { // eslint-disable-next-line no-console console.log('Azon Seeker installed'); + + browser.contextMenus.create({ + id: 'show-result', + title: '结果页', + contexts: ['action'], + }); +}); + +browser.contextMenus.onClicked.addListener((info) => { + if (info.menuItemId === 'show-result') { + browser.runtime.openOptionsPage(); + } }); diff --git a/src/components/AsinsInput.vue b/src/components/AsinsInput.vue new file mode 100644 index 0000000..919b6a4 --- /dev/null +++ b/src/components/AsinsInput.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/src/components/DetailDescription.vue b/src/components/DetailDescription.vue index d316721..3e8bec1 100644 --- a/src/components/DetailDescription.vue +++ b/src/components/DetailDescription.vue @@ -33,18 +33,34 @@ const props = defineProps<{ model: AmazonDetailItem }>(); {{ link }} - -
-

{{ review.username }}: {{ review.title }}

-
{{ review.rating }}
-
- {{ paragraph }} + + +
+
+

{{ review.username }}: {{ review.title }}

+
{{ review.rating }}
+
+ {{ paragraph }} +
+
{{ review.dateInfo }}
+
-
{{ review.dateInfo }}
+
+
- + diff --git a/src/components/ResultTable.vue b/src/components/ResultTable.vue index 23b698a..3dccd30 100644 --- a/src/components/ResultTable.vue +++ b/src/components/ResultTable.vue @@ -1,14 +1,26 @@ diff --git a/src/sidepanel/SearchPageEntry.vue b/src/sidepanel/SearchPageEntry.vue index 252ef77..aa2c678 100644 --- a/src/sidepanel/SearchPageEntry.vue +++ b/src/sidepanel/SearchPageEntry.vue @@ -3,8 +3,11 @@ import { keywordsList } from '~/logic/storage'; import pageWorker from '~/logic/page-worker'; import { NButton } from 'naive-ui'; import { searchItems } from '~/logic/storage'; +import { useLongTask } from '~/composables/useLongTask'; const message = useMessage(); +const { isRunning, startTask } = useLongTask(); + //#region Initial Page Worker const worker = pageWorker.useAmazonPageWorker(); worker.channel.on('error', ({ message: msg }) => { @@ -16,7 +19,6 @@ worker.channel.on('error', ({ message: msg }) => { }); message.error(msg); worker.stop(); - running.value = false; }); worker.channel.on('item-links-collected', ({ objs }) => { timelines.value.push({ @@ -28,7 +30,6 @@ worker.channel.on('item-links-collected', ({ objs }) => { searchItems.value = searchItems.value.concat(objs); // Add records }); //#endregion -const running = ref(false); const timelines = ref< { @@ -39,12 +40,8 @@ const timelines = ref< }[] >([]); -const handleFetchInfoFromPage = async () => { - if (keywordsList.value.length === 0) { - return; - } +const task = async () => { const kws = unref(keywordsList); - running.value = true; timelines.value = [ { type: 'info', @@ -71,11 +68,17 @@ const handleFetchInfoFromPage = async () => { time: new Date().toLocaleString(), content: `搜索任务结束`, }); - running.value = false; +}; + +const handleStart = async () => { + if (keywordsList.value.length === 0) { + return; + } + startTask(task); }; const handleInterrupt = () => { - if (!running.value) return; + if (!isRunning.value) return; worker.stop(); message.info('已触发中断,正在等待当前任务完成。', { duration: 2000 }); }; @@ -86,7 +89,7 @@ const handleInterrupt = () => { Search Page
{ round placeholder="请输入关键词采集信息" /> - +