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="请输入关键词采集信息" /> - +