소스 검색

✨ feat: 新增搜索词-分析页 表格点击搜索词跳转至相关页面

WanGxC 9 달 전
부모
커밋
025b2a6c9b

+ 1 - 1
.env.development

@@ -5,7 +5,7 @@ ENV = 'development'
 # 本地环境接口地址
 # VITE_API_URL = 'http://127.0.0.1:8000'
 # VITE_API_URL = 'http://192.168.1.225/'
- VITE_API_URL = 'http://192.168.1.19:8080/'
+ VITE_API_URL = 'http://192.168.1.23:8080/'
 # VITE_API_URL = 'http://amzads.zositechc.cn'
 
 # 是否启用按钮权限

+ 7 - 2
src/views/searchTerm/analysisPage/QuerySummary.vue

@@ -39,7 +39,7 @@ async function fetchTableData() {
     total.value = response.total;
     tableData.value = response.data;
   } catch (error) {
-    console.log('error:', error);
+    console.log('error=>', error);
   } finally {
     loading.value = false;
     await nextTick();
@@ -51,6 +51,11 @@ async function fetchTableData() {
 function changeType() {
   fetchTableData();
 }
+
+function getSearchLink(searchRoot: any) {
+  const baseUrl = window.location.origin;  // 获取当前环境的基础URL
+  return `${baseUrl}/apiLogin/?next=/#/searchTerm/targetingSearchTerm?searchRoot=${searchRoot}`;
+}
 </script>
 
 <template>
@@ -71,7 +76,7 @@ function changeType() {
           <el-table-column type="index" width="55" />
           <el-table-column prop="Search_Query" label="搜索词" min-width="200">
             <template #default="{ row }">
-              <el-link :underline="false" target="_blank" style="color: #5a6fc0">
+              <el-link :underline="false" :href="getSearchLink(row.Search_Query)" target="_blank" style="color: #5a6fc0">
                 {{ row.Search_Query }}
               </el-link>
             </template>

+ 11 - 0
src/views/searchTerm/targetingSearchTerm/api.ts

@@ -0,0 +1,11 @@
+import { request } from '/@/utils/service';
+
+const apiPrefix = '/api/searchterm/';
+
+export function getTargetingData(query: any) {
+  return request({
+    url: apiPrefix + 'sptargetingdetail/',
+    method: 'GET',
+    params: query,
+  });
+}

+ 254 - 0
src/views/searchTerm/targetingSearchTerm/index.vue

@@ -0,0 +1,254 @@
+<script setup lang="ts">
+/**
+ * @Name: index.vue
+ * @Description: Targeting-SearchTerm 跳转页面
+ * @Author: Cheney
+ */
+import { useRoute } from 'vue-router';
+import { targetingColumns, searchTermColumns } from './useColumns';
+import { reactive, ref, onBeforeMount } from 'vue';
+import { storeToRefs } from 'pinia';
+import { usePublicData } from '/@/stores/publicData';
+import * as api from './api';
+import { debounce } from 'lodash';
+
+const publicData = usePublicData();
+const { dateRange } = storeToRefs(publicData);
+const route = useRoute();
+const { searchRoot } = route.query;
+const date = ref([dateRange.value[0], dateRange.value[1]]);
+const searchType = ref('AUTO');
+
+const TargetingLoading = ref(false);
+const searchTermLoading = ref(false);
+const targetingOptions: any = reactive({
+  height: 'auto',
+  border: false,
+  round: true,
+  columnConfig: {
+    resizable: true,
+  },
+  toolbarConfig: {
+    custom: true,
+    slots: {
+      buttons: 'toolbar_buttons',
+    },
+  },
+  columns: targetingColumns,
+  data: [],
+});
+const targetingPage = reactive({
+  total: 0,
+  currentPage: 1,
+  pageSize: 15,
+});
+
+const searchTermOptions: any = reactive({
+  height: 'auto',
+  border: false,
+  round: true,
+  columnConfig: {
+    resizable: true,
+  },
+  toolbarConfig: {
+    custom: true,
+    slots: {
+      buttons: 'toolbar_buttons',
+    },
+  },
+  columns: searchTermColumns,
+  data: [],
+});
+const searchTermPage = reactive({
+  total: 0,
+  currentPage: 1,
+  pageSize: 15,
+});
+
+onBeforeMount(() => {
+  fetchTableData();
+});
+
+function targetingPageChange({ currentPage, pageSize }) {
+  targetingPage.currentPage = currentPage;
+  targetingPage.pageSize = pageSize;
+  fetchTargetingData();
+}
+
+function searchTermPageChange({ currentPage, pageSize }) {
+  searchTermPage.currentPage = currentPage;
+  searchTermPage.pageSize = pageSize;
+  fetchSearchTermData();
+}
+
+const fetchTableData = debounce(
+  () => {
+    targetingPage.currentPage = 1;
+    targetingPage.pageSize = 15;
+    searchTermPage.currentPage = 1;
+    searchTermPage.pageSize = 15;
+    fetchTargetingData();
+    fetchSearchTermData();
+  },
+  500,
+  { leading: true, trailing: false }
+); // 首次调用立即执行,500毫秒内的后续调用不生效
+
+async function fetchTargetingData() {
+  TargetingLoading.value = true;
+
+  const query = {
+    date_start: date.value[0],
+    date_end: date.value[1],
+    page: targetingPage.currentPage,
+    limit: targetingPage.pageSize,
+    search_root: searchRoot,
+    search_type: searchType.value, // BROAD, PHRASE, EXACT, AUTO
+    term_type: 'TARGETING', // TARGETING, SEARCHTERM
+  };
+  try {
+    const response = await api.getTargetingData(query);
+    targetingOptions.data = response.data;
+    targetingPage.total = response.total;
+  } catch (error) {
+    console.log('error=>', error);
+  } finally {
+    TargetingLoading.value = false;
+  }
+}
+
+async function fetchSearchTermData() {
+  searchTermLoading.value = true;
+
+  const query = {
+    date_start: date.value[0],
+    date_end: date.value[1],
+    page: targetingPage.currentPage,
+    limit: targetingPage.pageSize,
+    search_root: searchRoot,
+    search_type: searchType.value,
+    term_type: 'SEARCHTERM',
+  };
+  try {
+    const response = await api.getTargetingData(query);
+    searchTermOptions.data = response.data;
+    searchTermPage.total = response.total;
+  } catch (error) {
+    console.log('error=>', error);
+  } finally {
+    searchTermLoading.value = false;
+  }
+}
+</script>
+
+<template>
+  <div class="py-2 px-2.5">
+    <el-card shadow="hover" style="border: none" body-class="flex justify-between">
+      <div class="flex flex-wrap gap-7">
+        <div>
+          <span class="font-medium mr-0.5">搜索词类型 </span>
+          <el-select v-model="searchType" placeholder="请选择" style="width: 130px">
+            <el-option label="自动搜索" value="AUTO"></el-option>
+            <el-option label="广度搜索" value="BROAD"></el-option>
+            <el-option label="短语搜索" value="PHRASE"></el-option>
+            <el-option label="精准搜索" value="EXACT"></el-option>
+          </el-select>
+        </div>
+        <div>
+          <span class="font-medium mr-0.5">日期 </span>
+          <el-date-picker
+            v-model="date"
+            type="daterange"
+            value-format="YYYY-MM-DD"
+            range-separator="To"
+            :disabled-date="(time: Date) => time > new Date()"
+            :popper-options="{ placement: 'bottom-end' }"
+            :clearable="false" />
+        </div>
+      </div>
+      <el-button type="primary" plain @click="fetchTableData" icon="search">查询</el-button>
+    </el-card>
+    <el-card shadow="hover" class="mt-3" style="border: none" body-style="padding-top: 10px">
+      <div class="w-full overflow-hidden" style="height: 950px" v-loading="TargetingLoading">
+        <vxe-grid v-bind="targetingOptions">
+          <template #toolbar_buttons>
+            <span class="font-medium text-xl" style="color: #000000"> Targeting-关联关键词 </span>
+          </template>
+          <template v-for="col in targetingColumns" #[`${col.field}_default`]="{ row }">
+            <div v-if="col.field === 'targeting'">
+              <el-tooltip effect="dark" :content="row.targeting" placement="top" :show-after="300">
+                <div class="font-medium overflow-hidden whitespace-nowrap text-ellipsis">
+                  {{ row.targeting }}
+                </div>
+              </el-tooltip>
+            </div>
+            <div v-else-if="col.field === 'ctr_1d'">
+              <span class="font-medium">
+                {{ row.ctr_1d }}%
+              </span>
+            </div>
+            <div v-else-if="col.field === 'cr_1d'">
+              <span class="font-medium">
+                {{ row.cr_1d }}%
+              </span>
+            </div>
+            <div v-else class="font-medium">
+              {{ row[col.field] ? row[col.field] : '--' }}
+            </div>
+          </template>
+          <template #pager>
+            <vxe-pager
+              :layouts="['Sizes', 'PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'FullJump', 'Total']"
+              v-model:current-page="targetingPage.currentPage"
+              v-model:page-size="targetingPage.pageSize"
+              :total="targetingPage.total"
+              @page-change="targetingPageChange">
+            </vxe-pager>
+          </template>
+        </vxe-grid>
+      </div>
+    </el-card>
+    <el-card shadow="hover" class="mt-3" style="border: none" body-style="padding-top: 10px">
+      <div class="w-full overflow-hidden" style="height: 950px" v-loading="searchTermLoading">
+        <vxe-grid v-bind="searchTermOptions">
+          <template #toolbar_buttons>
+            <span class="font-medium text-xl" style="color: #000000"> SearchTerm-相关搜索结果 </span>
+          </template>
+          <template v-for="col in searchTermColumns" #[`${col.field}_default`]="{ row }">
+            <div v-if="col.field === 'searchTerm'">
+              <el-tooltip effect="dark" :content="row.searchTerm" placement="top" :show-after="300">
+                <div class="font-medium overflow-hidden whitespace-nowrap text-ellipsis">
+                  {{ row.searchTerm }}
+                </div>
+              </el-tooltip>
+            </div>
+            <div v-else-if="col.field === 'ctr_1d'">
+              <span class="font-medium">
+                {{ row.ctr_1d }}%
+              </span>
+            </div>
+            <div v-else-if="col.field === 'cr_1d'">
+              <span class="font-medium">
+                {{ row.cr_1d }}%
+              </span>
+            </div>
+            <div v-else class="font-medium">
+              {{ row[col.field] ? row[col.field] : '--' }}
+            </div>
+          </template>
+          <template #pager>
+            <vxe-pager
+              :layouts="['Sizes', 'PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'FullJump', 'Total']"
+              v-model:current-page="searchTermPage.currentPage"
+              v-model:page-size="searchTermPage.pageSize"
+              :total="searchTermPage.total"
+              @page-change="searchTermPageChange">
+            </vxe-pager>
+          </template>
+        </vxe-grid>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<style scoped></style>

+ 607 - 0
src/views/searchTerm/targetingSearchTerm/useColumns.ts

@@ -0,0 +1,607 @@
+export const targetingColumns = [
+  {
+    field: 'targeting',
+    title: 'targeting',
+    minWidth: 200,
+    fixed: 'left',
+    slots: { default: 'targeting_default' },
+  },
+  {
+    field: 'impressions',
+    title: '曝光量',
+    minWidth: 160,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'impressions_default' },
+  },
+  {
+    field: 'clicks',
+    title: '点击量',
+    minWidth: 160,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'clicks_default' },
+  },
+  {
+    field: 'cost',
+    title: '花费',
+    minWidth: 160,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'cost_default' },
+  },
+  {
+    field: 'purchases1d',
+    title: '1天购买量',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchases1d_default' },
+  },
+  {
+    field: 'purchases7d',
+    title: '7天购买量',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchases7d_default' },
+  },
+  {
+    field: 'purchases14d',
+    title: '14天购买量',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchases14d_default' },
+  },
+  {
+    field: 'purchases30d',
+    title: '30天购买量',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchases30d_default' },
+  },
+  {
+    field: 'purchasesSameSku1d',
+    title: '1天相同SKU购买量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchasesSameSku1d_default' },
+  },
+  {
+    field: 'purchasesSameSku7d',
+    title: '7天相同SKU购买量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchasesSameSku7d_default' },
+  },
+  {
+    field: 'purchasesSameSku14d',
+    title: '14天相同SKU购买量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchasesSameSku14d_default' },
+  },
+  {
+    field: 'purchasesSameSku30d',
+    title: '30天相同SKU购买量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchasesSameSku30d_default' },
+  },
+  {
+    field: 'unitsSoldClicks1d',
+    title: '1天点击销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldClicks1d_default' },
+  },
+  {
+    field: 'unitsSoldClicks7d',
+    title: '7天点击销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldClicks7d_default' },
+  },
+  {
+    field: 'unitsSoldClicks14d',
+    title: '14天点击销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldClicks14d_default' },
+  },
+  {
+    field: 'unitsSoldClicks30d',
+    title: '30天点击销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldClicks30d_default' },
+  },
+  {
+    field: 'sales1d',
+    title: '1天销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'sales1d_default' },
+  },
+  {
+    field: 'sales7d',
+    title: '7天销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'sales7d_default' },
+  },
+  {
+    field: 'sales14d',
+    title: '14天销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'sales14d_default' },
+  },
+  {
+    field: 'sales30d',
+    title: '30天销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'sales30d_default' },
+  },
+  {
+    field: 'attributedSalesSameSku1d',
+    title: '1天相同SKU销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'attributedSalesSameSku1d_default' },
+  },
+  {
+    field: 'attributedSalesSameSku7d',
+    title: '7天相同SKU销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'attributedSalesSameSku7d_default' },
+  },
+  {
+    field: 'attributedSalesSameSku14d',
+    title: '14天相同SKU销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'attributedSalesSameSku14d_default' },
+  },
+  {
+    field: 'attributedSalesSameSku30d',
+    title: '30天相同SKU销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'attributedSalesSameSku30d_default' },
+  },
+  {
+    field: 'unitsSoldSameSku1d',
+    title: '1天相同SKU销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldSameSku1d_default' },
+  },
+  {
+    field: 'unitsSoldSameSku7d',
+    title: '7天相同SKU销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldSameSku7d_default' },
+  },
+  {
+    field: 'unitsSoldSameSku14d',
+    title: '14天相同SKU销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldSameSku14d_default' },
+  },
+  {
+    field: 'unitsSoldSameSku30d',
+    title: '30天相同SKU销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldSameSku30d_default' },
+  },
+  {
+    field: 'kindleEditionNormalizedPagesRead14d',
+    title: '14天Kindle标准化页面阅读量',
+    minWidth: 230,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'kindleEditionNormalizedPagesRead14d_default' },
+  },
+  {
+    field: 'kindleEditionNormalizedPagesRoyalties14d',
+    title: '14天Kindle标准化页面版税',
+    minWidth: 230,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'kindleEditionNormalizedPagesRoyalties14d_default' },
+  },
+  {
+    field: 'salesOtherSku7d',
+    title: '7天其他SKU销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'salesOtherSku7d_default' },
+  },
+  {
+    field: 'unitsSoldOtherSku7d',
+    title: '7天其他SKU销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldOtherSku7d_default' },
+  },
+  {
+    field: 'ctr_1d',
+    title: '1天点击率',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'ctr_1d_default' },
+  },
+  {
+    field: 'cr_1d',
+    title: '1天转化率',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'cr_1d_default' },
+  },
+  {
+    field: 'acos_1d',
+    title: '1天ACOS',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'acos_1d_default' },
+  },
+  {
+    field: 'roas_1d',
+    title: '1天ROAS',
+    minWidth: 150,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'roas_1d_default' },
+  },
+  {
+    field: 'data_start',
+    title: '开始日期',
+    minWidth: 130,
+    sortable: true,
+    slots: { default: 'data_start_default' },
+  },
+  {
+    field: 'date_end',
+    title: '结束日期',
+    minWidth: 130,
+    sortable: true,
+    slots: { default: 'date_end_default' },
+  },
+];
+
+export const searchTermColumns = [
+  {
+    field: 'searchTerm',
+    title: 'searchTerm',
+    minWidth: 200,
+    fixed: 'left',
+    slots: { default: 'searchTerm_default' },
+  },
+  {
+    field: 'impressions',
+    title: '曝光量',
+    minWidth: 160,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'impressions_default' },
+  },
+  {
+    field: 'clicks',
+    title: '点击量',
+    minWidth: 160,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'clicks_default' },
+  },
+  {
+    field: 'cost',
+    title: '花费',
+    minWidth: 160,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'cost_default' },
+  },
+  {
+    field: 'purchases1d',
+    title: '1天购买量',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchases1d_default' },
+  },
+  {
+    field: 'purchases7d',
+    title: '7天购买量',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchases7d_default' },
+  },
+  {
+    field: 'purchases14d',
+    title: '14天购买量',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchases14d_default' },
+  },
+  {
+    field: 'purchases30d',
+    title: '30天购买量',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchases30d_default' },
+  },
+  {
+    field: 'purchasesSameSku1d',
+    title: '1天相同SKU购买量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchasesSameSku1d_default' },
+  },
+  {
+    field: 'purchasesSameSku7d',
+    title: '7天相同SKU购买量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchasesSameSku7d_default' },
+  },
+  {
+    field: 'purchasesSameSku14d',
+    title: '14天相同SKU购买量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchasesSameSku14d_default' },
+  },
+  {
+    field: 'purchasesSameSku30d',
+    title: '30天相同SKU购买量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'purchasesSameSku30d_default' },
+  },
+  {
+    field: 'unitsSoldClicks1d',
+    title: '1天点击销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldClicks1d_default' },
+  },
+  {
+    field: 'unitsSoldClicks7d',
+    title: '7天点击销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldClicks7d_default' },
+  },
+  {
+    field: 'unitsSoldClicks14d',
+    title: '14天点击销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldClicks14d_default' },
+  },
+  {
+    field: 'unitsSoldClicks30d',
+    title: '30天点击销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldClicks30d_default' },
+  },
+  {
+    field: 'sales1d',
+    title: '1天销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'sales1d_default' },
+  },
+  {
+    field: 'sales7d',
+    title: '7天销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'sales7d_default' },
+  },
+  {
+    field: 'sales14d',
+    title: '14天销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'sales14d_default' },
+  },
+  {
+    field: 'sales30d',
+    title: '30天销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'sales30d_default' },
+  },
+  {
+    field: 'attributedSalesSameSku1d',
+    title: '1天相同SKU销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'attributedSalesSameSku1d_default' },
+  },
+  {
+    field: 'attributedSalesSameSku7d',
+    title: '7天相同SKU销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'attributedSalesSameSku7d_default' },
+  },
+  {
+    field: 'attributedSalesSameSku14d',
+    title: '14天相同SKU销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'attributedSalesSameSku14d_default' },
+  },
+  {
+    field: 'attributedSalesSameSku30d',
+    title: '30天相同SKU销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'attributedSalesSameSku30d_default' },
+  },
+  {
+    field: 'unitsSoldSameSku1d',
+    title: '1天相同SKU销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldSameSku1d_default' },
+  },
+  {
+    field: 'unitsSoldSameSku7d',
+    title: '7天相同SKU销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldSameSku7d_default' },
+  },
+  {
+    field: 'unitsSoldSameSku14d',
+    title: '14天相同SKU销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldSameSku14d_default' },
+  },
+  {
+    field: 'unitsSoldSameSku30d',
+    title: '30天相同SKU销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldSameSku30d_default' },
+  },
+  {
+    field: 'kindleEditionNormalizedPagesRead14d',
+    title: '14天Kindle标准化页面阅读量',
+    minWidth: 230,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'kindleEditionNormalizedPagesRead14d_default' },
+  },
+  {
+    field: 'kindleEditionNormalizedPagesRoyalties14d',
+    title: '14天Kindle标准化页面版税',
+    minWidth: 230,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'kindleEditionNormalizedPagesRoyalties14d_default' },
+  },
+  {
+    field: 'salesOtherSku7d',
+    title: '7天其他SKU销售额',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'salesOtherSku7d_default' },
+  },
+  {
+    field: 'unitsSoldOtherSku7d',
+    title: '7天其他SKU销售量',
+    minWidth: 180,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'unitsSoldOtherSku7d_default' },
+  },
+  {
+    field: 'ctr_1d',
+    title: '1天点击率',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'ctr_1d_default' },
+  },
+  {
+    field: 'cr_1d',
+    title: '1天转化率',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'cr_1d_default' },
+  },
+  {
+    field: 'acos_1d',
+    title: '1天ACOS',
+    minWidth: 130,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'acos_1d_default' },
+  },
+  {
+    field: 'roas_1d',
+    title: '1天ROAS',
+    minWidth: 150,
+    align: 'center',
+    sortable: true,
+    slots: { default: 'roas_1d_default' },
+  },
+  {
+    field: 'data_start',
+    title: '开始日期',
+    minWidth: 130,
+    sortable: true,
+    slots: { default: 'data_start_default' },
+  },
+  {
+    field: 'date_end',
+    title: '结束日期',
+    minWidth: 130,
+    sortable: true,
+    slots: { default: 'date_end_default' },
+  },
+];