|
@@ -1,4 +1,4 @@
|
|
|
-<script setup lang="ts">
|
|
|
+<script lang="ts" setup>
|
|
|
/**
|
|
|
* @Name: index.vue
|
|
|
* @Description: 搜索词-TopSearchTerm Rank
|
|
@@ -16,14 +16,20 @@ import ColumnChart from '/src/views/searchTerm/topSearchTermRank/column-chart.vu
|
|
|
import dayjs from 'dayjs';
|
|
|
import WeekRangePicker from '/@/components/WeekRangePicker/index.vue';
|
|
|
import MonthRangePicker from '/@/components/MonthRangePicker/index.vue';
|
|
|
+import { useTableHeight } from '/@/utils/useTableHeight';
|
|
|
+
|
|
|
+
|
|
|
+const titleContainer = ref();
|
|
|
+const queryContainer = ref();
|
|
|
+const { tableHeight } = useTableHeight(titleContainer, queryContainer);
|
|
|
|
|
|
const weekDate = ref([
|
|
|
dayjs().subtract(2, 'week').day(0).format('YYYY-MM-DD'),
|
|
|
- dayjs().subtract(1, 'week').day(6).format('YYYY-MM-DD'),
|
|
|
+ dayjs().subtract(1, 'week').day(6).format('YYYY-MM-DD')
|
|
|
]);
|
|
|
const monthDate = ref([
|
|
|
dayjs().subtract(2, 'month').startOf('month').format('YYYY-MM-DD'),
|
|
|
- dayjs().subtract(0, 'month').startOf('month').format('YYYY-MM-DD'),
|
|
|
+ dayjs().subtract(0, 'month').startOf('month').format('YYYY-MM-DD')
|
|
|
]);
|
|
|
const router = useRouter();
|
|
|
const { tableData, total, currentPage, pageSize, handlePageChange } = usePagination(fetchTableData);
|
|
@@ -38,7 +44,7 @@ onBeforeMount(() => {
|
|
|
fetchTableData();
|
|
|
});
|
|
|
|
|
|
-watch([weekDate, monthDate], () => {
|
|
|
+watch([ weekDate, monthDate ], () => {
|
|
|
fetchTableData();
|
|
|
});
|
|
|
|
|
@@ -62,7 +68,7 @@ async function fetchTableData() {
|
|
|
report_type: reportTypeSelect.value,
|
|
|
marketplace_Ids: marketplaceSelect.value,
|
|
|
date_start: reportTypeSelect.value == 'weekly' ? weekDate.value[0] : monthDate.value[0],
|
|
|
- date_end: reportTypeSelect.value == 'weekly' ? weekDate.value[1] : monthDate.value[1],
|
|
|
+ date_end: reportTypeSelect.value == 'weekly' ? weekDate.value[1] : monthDate.value[1]
|
|
|
};
|
|
|
try {
|
|
|
const response = await getTopSearchTermTable(query);
|
|
@@ -122,109 +128,109 @@ function handleJump() {
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
- <div class="mx-3">
|
|
|
+ <div ref="titleContainer" class="mx-3">
|
|
|
<el-divider>
|
|
|
<div class="font-bold text-xl">
|
|
|
<el-icon style="top: 3px">
|
|
|
- <DataLine />
|
|
|
+ <DataLine/>
|
|
|
</el-icon>
|
|
|
Top Search Term - Rank
|
|
|
</div>
|
|
|
</el-divider>
|
|
|
</div>
|
|
|
- <el-card class="mx-3 mb-2.5" v-loading="tableLoading" style="border: none">
|
|
|
+ <el-card v-loading="tableLoading" class="mx-3 mb-2.5" style="border: none">
|
|
|
<!-- table筛选栏 -->
|
|
|
- <div class="flex justify-between">
|
|
|
+ <div ref="queryContainer" class="flex justify-between">
|
|
|
<div class="flex gap-5 flex-wrap">
|
|
|
<div>
|
|
|
<span class="font-medium mr-0.5">市场 </span>
|
|
|
- <el-select v-model="marketplaceSelect" @change="handleSelectChange" style="width: 90px">
|
|
|
+ <el-select v-model="marketplaceSelect" style="width: 90px" @change="handleSelectChange">
|
|
|
<el-option
|
|
|
- v-for="item in marketplaceOptions"
|
|
|
- :disabled="item.disabled"
|
|
|
- :key="item.value"
|
|
|
- :value="item.value"
|
|
|
- :label="item.label" />
|
|
|
+ v-for="item in marketplaceOptions"
|
|
|
+ :key="item.value"
|
|
|
+ :disabled="item.disabled"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"/>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div>
|
|
|
<span class="font-medium mr-0.5">报告类型 </span>
|
|
|
- <el-select v-model="reportTypeSelect" @change="handleSelectChange" style="width: 90px">
|
|
|
- <el-option label="周度" value="weekly" />
|
|
|
- <el-option label="月度" value="monthly" />
|
|
|
+ <el-select v-model="reportTypeSelect" style="width: 90px" @change="handleSelectChange">
|
|
|
+ <el-option label="周度" value="weekly"/>
|
|
|
+ <el-option label="月度" value="monthly"/>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div>
|
|
|
<span class="font-medium mr-0.5">搜索词 </span>
|
|
|
<el-input
|
|
|
- v-model="searchTermInp"
|
|
|
- @keyup.enter="handleQueryChange"
|
|
|
- :prefix-icon="Search"
|
|
|
- placeholder="输入后回车查询"
|
|
|
- clearable
|
|
|
- @clear="handleSelectChange"
|
|
|
- style="width: 240px" />
|
|
|
+ v-model="searchTermInp"
|
|
|
+ :prefix-icon="Search"
|
|
|
+ clearable
|
|
|
+ placeholder="输入后回车查询"
|
|
|
+ style="width: 240px"
|
|
|
+ @clear="handleSelectChange"
|
|
|
+ @keyup.enter="handleQueryChange"/>
|
|
|
</div>
|
|
|
<div>
|
|
|
<span class="font-medium mr-0.5">ASIN </span>
|
|
|
<el-input
|
|
|
- v-model="asinInp"
|
|
|
- @keyup.enter="handleQueryChange"
|
|
|
- :prefix-icon="Search"
|
|
|
- placeholder="输入后回车查询"
|
|
|
- clearable
|
|
|
- @clear="handleSelectChange"
|
|
|
- style="width: 180px" />
|
|
|
+ v-model="asinInp"
|
|
|
+ :prefix-icon="Search"
|
|
|
+ clearable
|
|
|
+ placeholder="输入后回车查询"
|
|
|
+ style="width: 180px"
|
|
|
+ @clear="handleSelectChange"
|
|
|
+ @keyup.enter="handleQueryChange"/>
|
|
|
</div>
|
|
|
<div>
|
|
|
<span class="font-medium mr-0.5">报告日期 </span>
|
|
|
- <MonthRangePicker v-model="monthDate" v-if="reportTypeSelect === 'monthly'" />
|
|
|
- <WeekRangePicker v-model="weekDate" v-else />
|
|
|
+ <MonthRangePicker v-if="reportTypeSelect === 'monthly'" v-model="monthDate"/>
|
|
|
+ <WeekRangePicker v-else v-model="weekDate"/>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="flex">
|
|
|
- <el-button type="primary" plain @click="handleJump" :icon="TopRight">搜索词管理</el-button>
|
|
|
- <el-button @click="refreshTable" :icon="Refresh" circle></el-button>
|
|
|
+ <el-button :icon="TopRight" plain type="primary" @click="handleJump">搜索词管理</el-button>
|
|
|
+ <el-button :icon="Refresh" circle @click="refreshTable"></el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- table -->
|
|
|
- <el-card shadow="never" class="mt-5">
|
|
|
- <div style="height: 100%; overflow: auto">
|
|
|
- <el-table :data="tableData" height="920" stripe style="width: 100%">
|
|
|
- <el-table-column fixed prop="searchTerm" label="搜索词" width="260">
|
|
|
+ <el-card class="mt-5" shadow="never">
|
|
|
+ <div>
|
|
|
+ <el-table :data="tableData" :height="tableHeight" stripe style="width: 100%">
|
|
|
+ <el-table-column fixed label="搜索词" prop="searchTerm" width="260">
|
|
|
<template #header>
|
|
|
<el-icon style="top: 2px; margin-right: 3px">
|
|
|
- <Key />
|
|
|
+ <Key/>
|
|
|
</el-icon>
|
|
|
<span>搜索词</span>
|
|
|
</template>
|
|
|
<template #default="{ row }">
|
|
|
- <el-link :underline="false" target="_blank" style="color: #5a6fc0">
|
|
|
+ <el-link :underline="false" style="color: #5a6fc0" target="_blank">
|
|
|
{{ row.searchTerm }}
|
|
|
</el-link>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="rank" label="搜索词搜索排名" align="center">
|
|
|
+ <el-table-column align="center" label="搜索词搜索排名" prop="rank">
|
|
|
<template #header>
|
|
|
<el-icon style="top: 2px; margin-right: 4px">
|
|
|
- <PictureRounded />
|
|
|
+ <PictureRounded/>
|
|
|
</el-icon>
|
|
|
<span>Tendency</span>
|
|
|
</template>
|
|
|
<template #default="{ row }">
|
|
|
- <ColumnChart :rowData="row" />
|
|
|
+ <ColumnChart :rowData="row"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
</div>
|
|
|
<div class="mt-3.5 flex justify-end">
|
|
|
<el-pagination
|
|
|
- v-model:current-page="currentPage"
|
|
|
- v-model:page-size="pageSize"
|
|
|
- :page-sizes="[10, 20, 30, 50, 100, 200]"
|
|
|
- layout="prev, pager, next, sizes, total"
|
|
|
- :total="total"
|
|
|
- @change="handlePageChange" />
|
|
|
+ v-model:current-page="currentPage"
|
|
|
+ v-model:page-size="pageSize"
|
|
|
+ :page-sizes="[10, 20, 30, 50, 100, 200]"
|
|
|
+ :total="total"
|
|
|
+ layout="prev, pager, next, sizes, total"
|
|
|
+ @change="handlePageChange"/>
|
|
|
</div>
|
|
|
</el-card>
|
|
|
</el-card>
|