瀏覽代碼

新增品牌推广SB-detail-预算,广告位

WanGxC 1 年之前
父節點
當前提交
57a1313be9
共有 19 個文件被更改,包括 107 次插入95 次删除
  1. 2 2
      src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/autoTarget/api.ts
  2. 2 2
      src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/keyword/api.ts
  3. 2 2
      src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/manualTarget/api.ts
  4. 2 2
      src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/negKeyword/api.ts
  5. 2 2
      src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/negProduct/api.ts
  6. 2 2
      src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/negTarget/api.ts
  7. 2 2
      src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/searchTerm/api.ts
  8. 1 1
      src/views/adManage/sb/campaigns/campaignDetail/adGroups/index.vue
  9. 1 1
      src/views/adManage/sb/campaigns/campaignDetail/budget/api.ts
  10. 3 4
      src/views/adManage/sb/campaigns/campaignDetail/budget/crud.tsx
  11. 10 8
      src/views/adManage/sb/campaigns/campaignDetail/budget/index.vue
  12. 3 0
      src/views/adManage/sb/campaigns/campaignDetail/index.vue
  13. 2 2
      src/views/adManage/sb/campaigns/campaignDetail/placement/api.ts
  14. 27 11
      src/views/adManage/sb/campaigns/campaignDetail/placement/crud.tsx
  15. 19 29
      src/views/adManage/sb/campaigns/campaignDetail/placement/index.vue
  16. 3 6
      src/views/adManage/sb/campaigns/chartComponents/adStruct.vue
  17. 9 10
      src/views/adManage/sp/campaigns/campaignDetail/adGroups/index.vue
  18. 8 7
      src/views/adManage/sp/campaigns/campaignDetail/index.vue
  19. 7 2
      src/views/adManage/utils/enum.ts

+ 2 - 2
src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/autoTarget/api.ts

@@ -1,11 +1,11 @@
 import { request } from '/@/utils/service';
 import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
 
-export const apiPrefix = '/api/ad_manage/spgroupdetail/targets/';
+export const apiPrefix = '/api/ad_manage/sbgroupdetail/targets/';
 export function GetList(query: UserPageQuery) {
     return request({
         url: apiPrefix + 'list/',
         method: 'get',
         params: query,
     })
-}
+}

+ 2 - 2
src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/keyword/api.ts

@@ -1,11 +1,11 @@
 import { request } from '/@/utils/service';
 import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
 
-export const apiPrefix = '/api/ad_manage/spgroupdetail/targets/';
+export const apiPrefix = '/api/ad_manage/sbgroupdetail/targets/';
 export function GetList(query: UserPageQuery) {
     return request({
         url: apiPrefix + 'list/',
         method: 'get',
         params: query,
     })
-}
+}

+ 2 - 2
src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/manualTarget/api.ts

@@ -1,11 +1,11 @@
 import { request } from '/@/utils/service';
 import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
 
-export const apiPrefix = '/api/ad_manage/spgroupdetail/targets/';
+export const apiPrefix = '/api/ad_manage/sbgroupdetail/targets/';
 export function GetList(query: UserPageQuery) {
     return request({
         url: apiPrefix + 'list/',
         method: 'get',
         params: query,
     })
-}
+}

+ 2 - 2
src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/negKeyword/api.ts

@@ -1,11 +1,11 @@
 import { request } from '/@/utils/service';
 import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
 
-export const apiPrefix = '/api/ad_manage/spgroupdetail/negativekeyword/';
+export const apiPrefix = '/api/ad_manage/sbgroupdetail/negativekeyword/';
 export function GetList(query: UserPageQuery) {
     return request({
         url: apiPrefix + 'list/',
         method: 'get',
         params: query,
     })
-}
+}

+ 2 - 2
src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/negProduct/api.ts

@@ -1,11 +1,11 @@
 import { request } from '/@/utils/service';
 import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
 
-export const apiPrefix = '/api/ad_manage/spgroupdetail/negativetarget/';
+export const apiPrefix = '/api/ad_manage/sbgroupdetail/negativetarget/';
 export function GetList(query: UserPageQuery) {
     return request({
         url: apiPrefix + 'list/',
         method: 'get',
         params: query,
     })
-}
+}

+ 2 - 2
src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/negTarget/api.ts

@@ -1,11 +1,11 @@
 import { request } from '/@/utils/service';
 import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
 
-export const apiPrefix = '/api/ad_manage/spgroupdetail/negativetarget/';
+export const apiPrefix = '/api/ad_manage/sbgroupdetail/negativetarget/';
 export function GetList(query: UserPageQuery) {
     return request({
         url: apiPrefix + 'list/',
         method: 'get',
         params: query,
     })
-}
+}

+ 2 - 2
src/views/adManage/sb/campaigns/campaignDetail/adGroups/adGroupDetail/searchTerm/api.ts

@@ -1,11 +1,11 @@
 import { request } from '/@/utils/service';
 import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
 
-export const apiPrefix = '/api/ad_manage/spgroupdetail/searchterm/';
+export const apiPrefix = '/api/ad_manage/sbgroupdetail/searchterm/';
 export function GetList(query: UserPageQuery) {
     return request({
         url: apiPrefix + 'list/',
         method: 'get',
         params: query,
     })
-}
+}

+ 1 - 1
src/views/adManage/sb/campaigns/campaignDetail/adGroups/index.vue

@@ -51,7 +51,7 @@ onMounted(() => {
 })
 const jumpAds = (row: any) => {
   router.push({
-    name: 'AdGroupDetail',
+    name: 'SbAdGroupDetail',
     query: { adGroupId: row.adGroupId, targetingType: row.targetingType, tagsViewName: row.adGroupName }
   })
 }

+ 1 - 1
src/views/adManage/sb/campaigns/campaignDetail/budget/api.ts

@@ -2,7 +2,7 @@ import { request } from '/@/utils/service';
 import { UserPageQuery } from '@fast-crud/fast-crud';
 
 
-export const apiPrefix = '/api/ad_manage/spcampaigndetail/budget/'
+export const apiPrefix = '/api/ad_manage/sbcampaigndetail/budget/'
 export function GetList(query: UserPageQuery) {
     return request({
         url: apiPrefix,

+ 3 - 4
src/views/adManage/sb/campaigns/campaignDetail/budget/crud.tsx

@@ -1,7 +1,6 @@
 import * as api from './api'
-import { dict, UserPageQuery, compute, CreateCrudOptionsProps, CreateCrudOptionsRet } from '@fast-crud/fast-crud'
-import { BaseColumn } from '/@/views/adManage/utils/commonTabColumn.js'
-import { parseQueryParams } from '/@/views/adManage/utils/tools.js'
+import {CreateCrudOptionsProps, CreateCrudOptionsRet, UserPageQuery} from '@fast-crud/fast-crud'
+import {parseQueryParams} from '/@/views/adManage/utils/tools.js'
 import XEUtils from 'xe-utils'
 
 export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
@@ -50,7 +49,7 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 				show: false,
 			},
 			columns: {
-				
+
 			},
 		},
 	}

+ 10 - 8
src/views/adManage/sb/campaigns/campaignDetail/budget/index.vue

@@ -12,12 +12,12 @@
 </template>
 
 <script lang="ts" setup>
-import { ref, onMounted } from 'vue'
-import { useFs, FsPage } from '@fast-crud/fast-crud'
-import { LocationQueryValue } from 'vue-router'
-import { usePublicData } from '/@/stores/publicData'
-import { storeToRefs } from 'pinia'
-import { createCrudOptions } from './crud'
+import {ref} from 'vue'
+import {FsPage, useFs} from '@fast-crud/fast-crud'
+import {LocationQueryValue} from 'vue-router'
+import {usePublicData} from '/@/stores/publicData'
+import {storeToRefs} from 'pinia'
+import {createCrudOptions} from './crud'
 import LineChart from './lineChart.vue'
 import DateRangePicker from '/@/components/DateRangePicker/index.vue'
 
@@ -40,5 +40,7 @@ const { crudBinding, crudRef, crudExpose } = useFs({ createCrudOptions, context:
 </script>
 
 <style scoped>
-
-</style>
+:deep(.el-card) {
+  border: none;
+}
+</style>

+ 3 - 0
src/views/adManage/sb/campaigns/campaignDetail/index.vue

@@ -67,4 +67,7 @@ onMounted(async () => {
   color: rgb(177, 177, 177);
   margin-left: 40px;
 }
+:deep(.el-tabs--border-card) {
+  border: none;
+}
 </style>

+ 2 - 2
src/views/adManage/sb/campaigns/campaignDetail/placement/api.ts

@@ -2,11 +2,11 @@ import { request } from '/@/utils/service';
 import { UserPageQuery } from '@fast-crud/fast-crud';
 
 
-export const apiPrefix = '/api/ad_manage/spcampaigndetail/placement/'
+export const apiPrefix = '/api/ad_manage/sbcampaigndetail/placement/'
 export function GetList(query: UserPageQuery) {
     return request({
         url: apiPrefix,
         method: 'get',
         params: query,
     })
-}
+}

+ 27 - 11
src/views/adManage/sb/campaigns/campaignDetail/placement/crud.tsx

@@ -1,16 +1,32 @@
-import { CreateCrudOptionsProps, CreateCrudOptionsRet } from '@fast-crud/fast-crud'
-import { BaseColumn } from '/@/views/adManage/utils/commonTabColumn.js'
-import { spCampaignPlacementEnum } from '/@/views/adManage/utils/enum'
+import * as api from './api'
+import {CreateCrudOptionsProps, CreateCrudOptionsRet, UserPageQuery} from '@fast-crud/fast-crud'
+import {parseQueryParams} from '/@/views/adManage/utils/tools.js'
 import XEUtils from 'xe-utils'
-
+import {sbCampaignPlacementEnum, spCampaignPlacementEnum} from '/@/views/adManage/utils/enum'
+import {BaseColumn} from '/@/views/adManage/utils/commonTabColumn'
 
 export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
-	const { fetchData } = context
+	const pageRequest = async (query: UserPageQuery) => {
+		const params = parseQueryParams(context.value)
+		XEUtils.assign(query, params)
+		return await api.GetList(query)
+	}
+
 
 	return {
 		crudOptions: {
-			table: {
-			},
+				table: {
+					height: 750,
+					headerCellStyle: {
+						backgroundColor: '#f6f7fa', // 直接设置背景颜色
+						height: '20px',
+						// border: '0.5px solid #ddd',
+					},
+					cellStyle: {
+						border: 'none',
+						borderBottom: '0.5px solid #ddd',
+					},
+				},
 			container: {
         fixedHeight: false
       },
@@ -41,11 +57,11 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 					compact: {
 						show: false
 					},
-					refresh: {
-						click: async () => fetchData()
-					}
 				}
 			},
+			request: {
+				pageRequest,
+			},
 			pagination: {
 				show: false
 			},
@@ -59,7 +75,7 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
             width: '200px',
 						fixed: 'left',
 						formatter({ value, row, index }){
-								return XEUtils.find(spCampaignPlacementEnum, (item) => item.value === value).label
+								return XEUtils.find(sbCampaignPlacementEnum, (item) => item.value === value).label
 						}
           }
         },

+ 19 - 29
src/views/adManage/sb/campaigns/campaignDetail/placement/index.vue

@@ -6,10 +6,10 @@
       </template>
       <template v-for="field of Object.keys(BaseColumn)" #[`cell_${field}`]="scope">
         <DataCompare
-          :field="field" 
+          :field="field"
           :value="scope.row[field]"
           :prev-val="scope.row[`prev${field}`]"
-          :gap-val="scope.row[`gap${field}`]" 
+          :gap-val="scope.row[`gap${field}`]"
           :date-range="dateRange"
           :show-compare="showCompare"/>
       </template>
@@ -24,15 +24,14 @@
 </template>
 
 <script lang="ts" setup>
-import { ref, onMounted, Ref, watch } from 'vue'
-import { useFs, FsPage } from '@fast-crud/fast-crud'
-import { createCrudOptions } from './crud'
-import { usePublicData } from '/@/stores/publicData'
-import { storeToRefs } from 'pinia'
+import {onMounted, ref, watch} from 'vue'
+import {FsPage, useFs} from '@fast-crud/fast-crud'
+import {createCrudOptions} from './crud'
+import {usePublicData} from '/@/stores/publicData'
+import {storeToRefs} from 'pinia'
 import DateRangePicker from '/@/components/DateRangePicker/index.vue'
-import { GetList } from './api'
-import { BaseColumn } from '/@/views/adManage/utils/commonTabColumn.js'
-import { LocationQueryValue } from 'vue-router'
+import {BaseColumn} from '/@/views/adManage/utils/commonTabColumn.js'
+import {LocationQueryValue} from 'vue-router'
 import DataCompare from '/@/components/dataCompare/index.vue'
 
 defineOptions({
@@ -44,32 +43,23 @@ interface Props {
   campaignId: LocationQueryValue | LocationQueryValue[]
 }
 const props = defineProps<Props>()
-const loading = ref(true)
+// const loading = ref(true)
 
 const showCompare = ref(false)
-const fetchData = async () => {
-  loading.value = true
-  const resp = await GetList({ 
-    campaignId: props.campaignId,
-    startDate: dateRange.value[0],
-    endDate: dateRange.value[1]
-  })
-  crudExpose.setTableData(resp.data)
-  loading.value = false
-}
 
-const context = { fetchData }
+const queryParams = ref({
+  campaignId: props.campaignId,
+  dateRange
+})
+const { crudBinding, crudRef, crudExpose } = useFs({ createCrudOptions, context: queryParams })
 
-const { crudBinding, crudRef, crudExpose } = useFs({ createCrudOptions, context })
 onMounted(async () => {
-  await fetchData()
+  crudExpose.doRefresh()
 })
 
-
-
 watch(
-  dateRange, 
-  async () => await fetchData()
+  dateRange,
+  async () => crudExpose.doRefresh()
 )
 
 </script>
@@ -81,4 +71,4 @@ watch(
 .green {
   color: #1cbc0e;
 }
-</style>
+</style>

+ 3 - 6
src/views/adManage/sb/campaigns/chartComponents/adStruct.vue

@@ -18,12 +18,9 @@
       <el-col :span="17">
         <div style="margin-left: 40%">
           <span style="background: #3a83f7; width: 18px; height: 10px; margin-top: 8px; display: inline-block; border-radius: 3px;"></span>
-          <TextSelector v-model="barModelValue1" :options="computedBarOptions1" @change="changeBarOne"
-                        style="margin-top: 5px; margin-left: 8px;"/>
-          <span
-              style="background: #f19a37; width: 18px; height: 10px; margin-top: 8px; margin-left: 20px; display: inline-block; border-radius: 3px;"></span>
-          <TextSelector v-model="barModelValue2" :options="computedBarOptions2" @change="changeBarTwo"
-                        style="margin-top: 5px; margin-left: 8px;"/>
+          <TextSelector v-model="barModelValue1" :options="computedBarOptions1" @change="changeBarOne" style="margin-top: 5px; margin-left: 8px;"/>
+          <span style="background: #f19a37; width: 18px; height: 10px; margin-top: 8px; margin-left: 20px; display: inline-block; border-radius: 3px;"></span>
+          <TextSelector v-model="barModelValue2" :options="computedBarOptions2" @change="changeBarTwo" style="margin-top: 5px; margin-left: 8px;"/>
         </div>
         <div ref="bar" style="height: 400px;"></div>
       </el-col>

+ 9 - 10
src/views/adManage/sp/campaigns/campaignDetail/adGroups/index.vue

@@ -19,15 +19,15 @@
 </template>
 
 <script lang="ts" setup>
-import { Ref, ref, onMounted, watch } from 'vue'
-import { useFs, FsPage } from '@fast-crud/fast-crud';
-import { createCrudOptions } from './crud'
-import { useRoute, useRouter, LocationQueryValue } from 'vue-router'
+import {onMounted, ref, watch} from 'vue'
+import {FsPage, useFs} from '@fast-crud/fast-crud'
+import {createCrudOptions} from './crud'
+import {LocationQueryValue, useRouter} from 'vue-router'
 import DateRangePicker from '/@/components/DateRangePicker/index.vue'
-import { usePublicData } from '/@/stores/publicData'
-import { storeToRefs } from 'pinia'
+import {usePublicData} from '/@/stores/publicData'
+import {storeToRefs} from 'pinia'
 import DataTendencyChart from '/@/views/adManage/sp/chartComponents/dataTendency.vue'
-import { getCardData, getLineData } from './api'
+import {getCardData, getLineData} from './api'
 
 const publicData = usePublicData()
 const router = useRouter()
@@ -54,8 +54,7 @@ const jumpAds = (row: any) => {
 watch(
   queryParams,
   async () => {
-
-    crudExpose.doRefresh() 
+    crudExpose.doRefresh()
   },
   { deep: true }
 )
@@ -64,4 +63,4 @@ watch(
 
 <style scoped>
 
-</style>
+</style>

+ 8 - 7
src/views/adManage/sp/campaigns/campaignDetail/index.vue

@@ -35,18 +35,18 @@
 </template>
 
 <script lang="ts" setup>
-import { ref, onMounted, onBeforeMount, Ref } from 'vue'
-import { useRoute, useRouter } from 'vue-router'
+import {onMounted, ref, Ref} from 'vue'
+import {useRoute} from 'vue-router'
 import AdGroups from './adGroups/index.vue'
 import Placement from './placement/index.vue'
 import Budget from './budget/index.vue'
-import { getEnumLabel } from '/@/views/adManage/utils/tools.js'
-import { dynBidStrategyEnum, spCampaignServingStatusEnum } from '/@/views/adManage/utils/enum.js'
-import { useShopInfo } from '/@/stores/shopInfo'
+import {getEnumLabel} from '/@/views/adManage/utils/tools.js'
+import {dynBidStrategyEnum} from '/@/views/adManage/utils/enum.js'
+import {useShopInfo} from '/@/stores/shopInfo'
 // import { usePublicData } from '/@/stores/publicData'
-import { storeToRefs } from 'pinia'
+import {storeToRefs} from 'pinia'
 
-import { GetObj } from './api'
+import {GetObj} from './api'
 
 const shopInfo = useShopInfo()
 const { profile } = storeToRefs(shopInfo)
@@ -59,6 +59,7 @@ onMounted(async () => {
   campaignInfo.value = resp.data
 })
 
+
 </script>
 
 <style lang="scss">

+ 7 - 2
src/views/adManage/utils/enum.ts

@@ -59,7 +59,6 @@ export const sbCampaignMetricsEnum = [
   {label: '可见曝光量', value: 'ViewableImpression'},
 ]
 
-
 export const spCampaignPuchasedOtherProductsMetricsEnum = [
   {label: '其它商品订单数', value: 'TotalPurchasesOtherSKU'},
   {label: '其它商品销售额', value: 'TotalSalesOtherSKU'},
@@ -85,13 +84,19 @@ export const dynStatusEnum = {
     'DISABLED' : '禁用'
   }
 
-
 export const spCampaignPlacementEnum = [
   {label: '搜索结果顶部', value: 'top'},
   {label: '商品页面', value: 'product_page'},
   {label: '搜索结果的其余位置', value: 'rest_of_search'},
 ]
 
+export const sbCampaignPlacementEnum = [
+  {label: '详细信息首页', value: 'Detail Page on-Amazon'},
+  {label: '其他页面', value: 'Other on-Amazon'},
+  {label: '顶部搜索', value: 'Top of Search on-Amazon'},
+  {label: '首页', value: 'Homepage on-Amazon'},
+]
+
 export const spCampaignStateEnum = [
   {label: '投放中', value: 'ENABLE'},
   {label: '已暂停', value: 'PAUSED'},