|
@@ -7,7 +7,6 @@
|
|
<div style="width: 50%; border-right: 1px solid #e5e7eb">
|
|
<div style="width: 50%; border-right: 1px solid #e5e7eb">
|
|
<el-tabs v-model="keyWordsTabs" class="demo-tabs">
|
|
<el-tabs v-model="keyWordsTabs" class="demo-tabs">
|
|
<div style="margin: 8px">
|
|
<div style="margin: 8px">
|
|
-
|
|
|
|
<div style="display: flex; align-items: center">
|
|
<div style="display: flex; align-items: center">
|
|
<div style="min-width: 40px; margin-left: 8px; font-weight: 500; color: #616266">竞价:</div>
|
|
<div style="min-width: 40px; margin-left: 8px; font-weight: 500; color: #616266">竞价:</div>
|
|
<el-select v-model="bidType" class="m-2" placeholder="Select" style="width: 450px">
|
|
<el-select v-model="bidType" class="m-2" placeholder="Select" style="width: 450px">
|
|
@@ -17,8 +16,8 @@
|
|
<template #prepend>$</template>
|
|
<template #prepend>$</template>
|
|
</el-input>
|
|
</el-input>
|
|
</div>
|
|
</div>
|
|
- <div style="display: flex; align-items: center;">
|
|
|
|
- <span style="margin: 0 10px 0 8px; font-weight: 500; color: #616266;">匹配类型: </span>
|
|
|
|
|
|
+ <div style="display: flex; align-items: center">
|
|
|
|
+ <span style="margin: 0 10px 0 8px; font-weight: 500; color: #616266">匹配类型: </span>
|
|
<el-checkbox v-model="broadType" label="广泛" />
|
|
<el-checkbox v-model="broadType" label="广泛" />
|
|
<el-checkbox v-model="phraseType" label="词组" />
|
|
<el-checkbox v-model="phraseType" label="词组" />
|
|
<el-checkbox v-model="exactType" label="精确" />
|
|
<el-checkbox v-model="exactType" label="精确" />
|
|
@@ -37,8 +36,8 @@
|
|
</el-table>
|
|
</el-table>
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
<el-tab-pane label="输入" name="second">
|
|
<el-tab-pane label="输入" name="second">
|
|
- <el-input v-model="keyWordsTextarea" :rows="10" type="textarea" style="padding-left: 5px;" />
|
|
|
|
- <div style="display: flex; flex-direction: row-reverse; margin-top: 10px;">
|
|
|
|
|
|
+ <el-input v-model="keyWordsTextarea" :rows="10" type="textarea" style="padding-left: 5px" />
|
|
|
|
+ <div style="display: flex; flex-direction: row-reverse; margin-top: 10px">
|
|
<el-button type="primary" text bg @click="addKeyWords">添加</el-button>
|
|
<el-button type="primary" text bg @click="addKeyWords">添加</el-button>
|
|
</div>
|
|
</div>
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
@@ -67,7 +66,11 @@
|
|
<el-input v-model="scope.row.bid" placeholder="Please input bid" />
|
|
<el-input v-model="scope.row.bid" placeholder="Please input bid" />
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="suggestBid" label="建议出价" />
|
|
|
|
|
|
+ <el-table-column prop="suggestBid" label="建议出价" align="center">
|
|
|
|
+ <template #default="{ row }">
|
|
|
|
+ <div>{{ row.adviceBid ? row.adviceBid : '--' }}</div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
<el-table-column prop="operate" label="操作" width="60" align="right">
|
|
<el-table-column prop="operate" label="操作" width="60" align="right">
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
<el-button type="danger" size="small" link @click="delSingleKeyWord(scope)">删除</el-button>
|
|
<el-button type="danger" size="small" link @click="delSingleKeyWord(scope)">删除</el-button>
|
|
@@ -85,12 +88,10 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
-import { Ref, inject, ref, watch } from 'vue'
|
|
|
|
import { ElMessage } from 'element-plus'
|
|
import { ElMessage } from 'element-plus'
|
|
-import { useShopInfo } from '/@/stores/shopInfo'
|
|
|
|
-import { usePublicData } from '/@/stores/publicData'
|
|
|
|
import { storeToRefs } from 'pinia'
|
|
import { storeToRefs } from 'pinia'
|
|
-import { useRouter } from 'vue-router'
|
|
|
|
|
|
+import { Ref, inject, ref } from 'vue'
|
|
|
|
+import { useShopInfo } from '/@/stores/shopInfo'
|
|
import { request } from '/@/utils/service'
|
|
import { request } from '/@/utils/service'
|
|
|
|
|
|
const respCampaignId = inject<Ref>('respCampaignId')
|
|
const respCampaignId = inject<Ref>('respCampaignId')
|
|
@@ -105,7 +106,7 @@ const bidTypeOptions = [
|
|
{
|
|
{
|
|
value: 'suggestBid',
|
|
value: 'suggestBid',
|
|
label: '建议出价',
|
|
label: '建议出价',
|
|
- disabled: true
|
|
|
|
|
|
+ disabled: true,
|
|
},
|
|
},
|
|
{
|
|
{
|
|
value: 'customBid',
|
|
value: 'customBid',
|
|
@@ -114,7 +115,7 @@ const bidTypeOptions = [
|
|
{
|
|
{
|
|
value: 'defaultBid',
|
|
value: 'defaultBid',
|
|
label: '默认出价',
|
|
label: '默认出价',
|
|
- disabled: true
|
|
|
|
|
|
+ disabled: true,
|
|
},
|
|
},
|
|
]
|
|
]
|
|
|
|
|
|
@@ -126,14 +127,14 @@ let broadType = ref(true)
|
|
let phraseType = ref(true)
|
|
let phraseType = ref(true)
|
|
let exactType = ref(true)
|
|
let exactType = ref(true)
|
|
const MATCH_TYPE = {
|
|
const MATCH_TYPE = {
|
|
- BROAD: '广泛',
|
|
|
|
- PHRASE: '词组',
|
|
|
|
- EXACT: '精确',
|
|
|
|
|
|
+ broad: '广泛',
|
|
|
|
+ phrase: '词组',
|
|
|
|
+ exact: '精确',
|
|
}
|
|
}
|
|
const MATCH_TYPE_MAP = {
|
|
const MATCH_TYPE_MAP = {
|
|
- 广泛: 'BROAD',
|
|
|
|
- 词组: 'PHRASE',
|
|
|
|
- 精确: 'EXACT',
|
|
|
|
|
|
+ 广泛: 'broad',
|
|
|
|
+ 词组: 'phrase',
|
|
|
|
+ 精确: 'exact',
|
|
}
|
|
}
|
|
const successCount = ref('')
|
|
const successCount = ref('')
|
|
const errorCount = ref('')
|
|
const errorCount = ref('')
|
|
@@ -146,13 +147,13 @@ function addKeyWords() {
|
|
const trimmedItem = item.trim()
|
|
const trimmedItem = item.trim()
|
|
if (trimmedItem) {
|
|
if (trimmedItem) {
|
|
if (broadType.value) {
|
|
if (broadType.value) {
|
|
- addKeyWordEntry(trimmedItem, MATCH_TYPE.BROAD)
|
|
|
|
|
|
+ addKeyWordEntry(trimmedItem, MATCH_TYPE.broad)
|
|
}
|
|
}
|
|
if (phraseType.value) {
|
|
if (phraseType.value) {
|
|
- addKeyWordEntry(trimmedItem, MATCH_TYPE.PHRASE)
|
|
|
|
|
|
+ addKeyWordEntry(trimmedItem, MATCH_TYPE.phrase)
|
|
}
|
|
}
|
|
if (exactType.value) {
|
|
if (exactType.value) {
|
|
- addKeyWordEntry(trimmedItem, MATCH_TYPE.EXACT)
|
|
|
|
|
|
+ addKeyWordEntry(trimmedItem, MATCH_TYPE.exact)
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
ElMessage({
|
|
ElMessage({
|
|
@@ -165,18 +166,6 @@ function addKeyWords() {
|
|
}
|
|
}
|
|
|
|
|
|
function addKeyWordEntry(keyword, matchType) {
|
|
function addKeyWordEntry(keyword, matchType) {
|
|
- // let bidValue
|
|
|
|
- // switch (bidType.value) {
|
|
|
|
- // case 'customBid':
|
|
|
|
- // bidValue = bidInput.value
|
|
|
|
- // break
|
|
|
|
- // case 'defaultBid':
|
|
|
|
- // // bidValue = adGroupRuleForm.defaultBidInp
|
|
|
|
- // break
|
|
|
|
- // default:
|
|
|
|
- // bidValue = ''
|
|
|
|
- // }
|
|
|
|
-
|
|
|
|
let keyWordEntry = {
|
|
let keyWordEntry = {
|
|
keyword: keyword,
|
|
keyword: keyword,
|
|
matchType: matchType,
|
|
matchType: matchType,
|
|
@@ -206,16 +195,18 @@ function delAllKeyWords() {
|
|
addedKeyWordsTableData.value = []
|
|
addedKeyWordsTableData.value = []
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// TODO: 必须要创建了商品之后才能创建关键词定向
|
|
async function keyWordsSave() {
|
|
async function keyWordsSave() {
|
|
keywordsLoading.value = true
|
|
keywordsLoading.value = true
|
|
successCount.value = ''
|
|
successCount.value = ''
|
|
errorCount.value = ''
|
|
errorCount.value = ''
|
|
|
|
+
|
|
const keywordList = addedKeyWordsTableData.value.map((kw) => ({
|
|
const keywordList = addedKeyWordsTableData.value.map((kw) => ({
|
|
keywordText: kw.keyword,
|
|
keywordText: kw.keyword,
|
|
bid: kw.bid,
|
|
bid: kw.bid,
|
|
matchType: MATCH_TYPE_MAP[kw.matchType],
|
|
matchType: MATCH_TYPE_MAP[kw.matchType],
|
|
}))
|
|
}))
|
|
-
|
|
|
|
|
|
+
|
|
const requestData = {
|
|
const requestData = {
|
|
profile_id: profile.value.profile_id,
|
|
profile_id: profile.value.profile_id,
|
|
campaignId: respCampaignId.value,
|
|
campaignId: respCampaignId.value,
|
|
@@ -225,7 +216,7 @@ async function keyWordsSave() {
|
|
const filteredRequestData = Object.fromEntries(Object.entries(requestData).filter(([_, v]) => v != null))
|
|
const filteredRequestData = Object.fromEntries(Object.entries(requestData).filter(([_, v]) => v != null))
|
|
try {
|
|
try {
|
|
const resp = await request({
|
|
const resp = await request({
|
|
- url: '/api/ad_manage/sptargets/add/keywords/',
|
|
|
|
|
|
+ url: '/api/ad_manage/sbtargets/add/keywords/',
|
|
method: 'POST',
|
|
method: 'POST',
|
|
data: filteredRequestData,
|
|
data: filteredRequestData,
|
|
})
|
|
})
|
|
@@ -247,7 +238,7 @@ async function keyWordsSave() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-const headerCellStyle = (args) => {
|
|
|
|
|
|
+function headerCellStyle(args) {
|
|
if (args.rowIndex === 0) {
|
|
if (args.rowIndex === 0) {
|
|
return {
|
|
return {
|
|
backgroundColor: 'rgba(245, 245, 245, 0.9)',
|
|
backgroundColor: 'rgba(245, 245, 245, 0.9)',
|