|
@@ -169,13 +169,76 @@
|
|
|
/>
|
|
|
</a-form-model-item>
|
|
|
</div>
|
|
|
- <div class="separate-module-con">
|
|
|
- <p class="rock-title">投放内容</p>
|
|
|
- <a-form-model-item label="投放目标">
|
|
|
- <a-radio-group
|
|
|
- :disabled="modalTitle === 'edit'"
|
|
|
- v-model="configForm.launchTarget"
|
|
|
- button-style="solid"
|
|
|
+ <a-form-model-item label="预算方式">
|
|
|
+ <a-radio-group
|
|
|
+ v-model="configForm.accountBudgetMode"
|
|
|
+ button-style="solid"
|
|
|
+ @change="handleAccountMode"
|
|
|
+ >
|
|
|
+ <a-radio-button value="1">不限预算</a-radio-button>
|
|
|
+ <a-radio-button value="2">指定预算</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item v-if="configForm.accountBudgetMode === '2'" label="账户日预算" prop="accountBudget">
|
|
|
+ <a-input-number
|
|
|
+ v-model="configForm.accountBudget"
|
|
|
+ :min="1000"
|
|
|
+ :max="9999999.99"
|
|
|
+ :step="0.01"
|
|
|
+ @blur="handleAccountBudget"
|
|
|
+ /> 元
|
|
|
+ </a-form-model-item>
|
|
|
+ <!-- <a-form-model-item v-if="configForm.accountBudgetMode === '2'" label="账户日预算" prop="accountBudget">
|
|
|
+ <a-input-number
|
|
|
+ v-model="configForm.accountBudget"
|
|
|
+ :min="1000"
|
|
|
+ :max="9999999.99"
|
|
|
+ :step="0.01"
|
|
|
+ @blur="handleAccountBudget"
|
|
|
+ /> 元
|
|
|
+ </a-form-model-item> -->
|
|
|
+ <!-- <div v-if="adBudgetShowTitle" style="width: 500px;color: #f00;margin-left: 140px;">单次修改预算幅度, 不能低于100.0元</div> -->
|
|
|
+ </div>
|
|
|
+ <div class="separate-module-con">
|
|
|
+ <p class="rock-title">广告组信息</p>
|
|
|
+ <a-form-model-item label="推广目标">
|
|
|
+ <a-radio-group :disabled="modalTitle === 'edit'" v-model="configForm.campaignLandingType" button-style="solid">
|
|
|
+ <a-radio-button value="APP">应用</a-radio-button>
|
|
|
+ <a-radio-button value="LINK" disabled>销售线索收集</a-radio-button>
|
|
|
+ <a-radio-button value="SHOP" disabled>电商店铺推广</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item label="广告类型">
|
|
|
+ <a-radio-group :disabled="modalTitle === 'edit'" v-model="configForm.advertisingType" button-style="solid">
|
|
|
+ <a-radio-button value="1">信息流广告</a-radio-button>
|
|
|
+ <a-radio-button value="2">搜索广告</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ </div>
|
|
|
+ <div class="separate-module-con">
|
|
|
+ <p class="rock-title">基础信息</p>
|
|
|
+ <a-form-model-item label="广告组名称" prop="campaignName">
|
|
|
+ <a-input
|
|
|
+ class="common-input-long"
|
|
|
+ v-model="configForm.campaignName"
|
|
|
+ allow-clear
|
|
|
+ placeholder="请输入广告组名称"
|
|
|
+ />
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item label="广告计划名称" prop="adName">
|
|
|
+ <a-input
|
|
|
+ class="common-input-long"
|
|
|
+ id="groupName"
|
|
|
+ v-model="configForm.adName"
|
|
|
+ allow-clear
|
|
|
+ placeholder="请输入广告计划名称"
|
|
|
+ />
|
|
|
+ <div>
|
|
|
+ <a-tag
|
|
|
+ v-for="item in adNameTags"
|
|
|
+ :key="item"
|
|
|
+ color="#1890ff"
|
|
|
+ @click="handleGetChangeAll(item, 'groupName')"
|
|
|
>
|
|
|
<a-radio-button value="OCPM">转化量</a-radio-button>
|
|
|
<a-radio-button value="CPC" disabled>点击量</a-radio-button>
|
|
@@ -387,34 +450,84 @@
|
|
|
button-style="solid"
|
|
|
@change="handleCustomPerson"
|
|
|
>
|
|
|
- <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
- <a-radio-button value="a">自定义人群</a-radio-button>
|
|
|
- </a-radio-group>
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item v-if="configForm.customPerson === 'a'" label="定向逻辑">
|
|
|
- <a-radio-group
|
|
|
- v-model="configForm.adRetargetingTagsType"
|
|
|
- button-style="solid"
|
|
|
- @change="handleDirectionalLogic"
|
|
|
+ {{ item.name }}
|
|
|
+ </a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item v-if="configForm.adHideIfConverted === 'CUSTOMER' || configForm.adHideIfConverted === 'APP'" label="过滤时间">
|
|
|
+ <a-radio-group v-model="configForm.adConvertedTimeDuration" button-style="solid">
|
|
|
+ <a-radio-button value="ONE_MONTH">1个月</a-radio-button>
|
|
|
+ <a-radio-button value="THREE_MONTH">3个月</a-radio-button>
|
|
|
+ <a-radio-button value="SIX_MONTH">6个月</a-radio-button>
|
|
|
+ <a-radio-button value="TWELVE_MONTH">12个月</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ <a-tooltip placement="top">
|
|
|
+ <template slot="title">
|
|
|
+ <span>对已转化过的用户避免再次投放的时间</span>
|
|
|
+ </template>
|
|
|
+ <a-icon class="form-itrm-icon" style="left: -90px;" type="question-circle"/>
|
|
|
+ </a-tooltip>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item label="智能放量">
|
|
|
+ <a-radio-group v-model="configForm.adAutoExtendEnabled" button-style="solid" @change="handleAdAutoExtend">
|
|
|
+ <a-radio-button value="0">不开启</a-radio-button>
|
|
|
+ <a-radio-button value="1">开启</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ <a-tooltip placement="top">
|
|
|
+ <template slot="title">
|
|
|
+ <span>智能放量可以帮您逐步探索已选定向人群之外的目标人群,提升跑量。已选择定向建议放开</span>
|
|
|
+ </template>
|
|
|
+ <a-icon class="form-itrm-icon" style="left: -90px;" type="question-circle"/>
|
|
|
+ </a-tooltip>
|
|
|
+ </a-form-model-item>
|
|
|
+ <div v-if="configForm.adAutoExtendEnabled === '1'" class="adver-position-radio" style="width: 70%;">
|
|
|
+ <auto-select
|
|
|
+ :defaultlist="adAutoExtendList"
|
|
|
+ :editdata="AutoExtendEditSelect"
|
|
|
+ @select-finally-result="handleSelectTxtend"
|
|
|
+ >
|
|
|
+ </auto-select>
|
|
|
+ </div>
|
|
|
+ </a-tab-pane>
|
|
|
+ <a-tab-pane key="choice" tab="选择定向包">
|
|
|
+ <a-form-model-item class="select-orientation-class" label="选择已有定向包" :prop="configForm.adDirectionalFlag === 'choice' ? 'adAudiencePackageId' : ''">
|
|
|
+ <a-select
|
|
|
+ class="common-input-long"
|
|
|
+ style="width: 320px;"
|
|
|
+ v-model="configForm.adAudiencePackageId"
|
|
|
+ allow-clear
|
|
|
+ placeholder="请选择已有定向包名称"
|
|
|
+ :disabled="selectOrientPlaceholder !== 'able'"
|
|
|
+ @change="handleSelectiveOrientation"
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ v-for="(item, index) in selectiveList"
|
|
|
+ :key="index"
|
|
|
+ :value="item.audience_package_id"
|
|
|
>
|
|
|
- <a-radio-button value="1">定向</a-radio-button>
|
|
|
- <a-radio-button value="2">排除</a-radio-button>
|
|
|
- <a-radio-button value="3">同时定向排除</a-radio-button>
|
|
|
- </a-radio-group>
|
|
|
- </a-form-model-item>
|
|
|
- <div v-if="configForm.customPerson === 'a' && configForm.adRetargetingTagsType === '1'" class="adver-position-radio">
|
|
|
- <div style="width: 60%;">
|
|
|
- <directional-logic
|
|
|
- ref="direct"
|
|
|
- packtype="directional"
|
|
|
- multitype="alone"
|
|
|
- :defaultlist="directionalData"
|
|
|
- :valueids="configForm.adRetargetingTagsType"
|
|
|
- :updatelistinclude="configForm.updateGetingInclude" @selection-alone-event="handleSelectionAloneEvent"
|
|
|
- @clearlist="handleClearlist"
|
|
|
- @clear-table-alone="handleClearTableAlone"
|
|
|
- >
|
|
|
- </directional-logic>
|
|
|
+ <div class="orient-list">
|
|
|
+ <span class="orient-option-left" style="display: inline-block;width: 150px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">{{ item.name }}</span>
|
|
|
+ <span class="orient-option-right" style="display: inline-block;width: 150px;text-align:right;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">{{ item.changeName }}</span>
|
|
|
+ </div>
|
|
|
+ </a-select-option>
|
|
|
+ </a-select>
|
|
|
+ <span style="margin-left: 20px;">
|
|
|
+ <a-button :disabled="selectOrientPlaceholder !== 'able'" type="primary" @click="handleAsyncPackage">同步定向包</a-button>
|
|
|
+ </span>
|
|
|
+ <a-tooltip placement="top">
|
|
|
+ <template slot="title">
|
|
|
+ <span>已有定向包只展示当前推广目的和投放范围下,定向功能升级后仍可用的定向包</span>
|
|
|
+ </template>
|
|
|
+ <a-icon class="form-itrm-icon orientation-icon" type="question-circle"/>
|
|
|
+ </a-tooltip>
|
|
|
+ </a-form-model-item>
|
|
|
+ <span v-if="selectOrientPlaceholder !== 'able'" style="color: #f00; margin-left: 198px;">{{ selectOrientPlaceholder }}</span>
|
|
|
+ <div class="select-orientation-content">
|
|
|
+ <p class="orientation-header-title">已选定向信息</p>
|
|
|
+ <div v-if="packageMessageDetail.length" class="orientation-content-substance">
|
|
|
+ <div class="content-substance-singal">
|
|
|
+ <span class="singal-spn">定向人群包:</span>
|
|
|
+ <span class="singal-content">{{ packageMessageDetail[0].description }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div v-if="configForm.customPerson === 'a' && configForm.adRetargetingTagsType === '2'" class="adver-position-radio">
|
|
@@ -1114,6 +1227,9 @@ export default {
|
|
|
callback();
|
|
|
}
|
|
|
}
|
|
|
+ else if (this.modalTitle === 'add') {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
};
|
|
|
return {
|
|
|
sureLoading: false,
|
|
@@ -1235,7 +1351,7 @@ export default {
|
|
|
listArr: [],
|
|
|
regionCityListUrl: 'ctop/bytedanceAreaInfo/list',
|
|
|
defaultAdBudget: '',
|
|
|
- adBudgetShowTitle: false,
|
|
|
+ // adBudgetShowTitle: false,/
|
|
|
adBudgetNum: 300,
|
|
|
campaignStatus: false,
|
|
|
detailData: {},
|
|
@@ -1251,6 +1367,44 @@ export default {
|
|
|
value: 'industryId',
|
|
|
children: 'children'
|
|
|
},
|
|
|
+ promotionTypeList: [
|
|
|
+ {
|
|
|
+ value: 'EXTERNAL',
|
|
|
+ label: '落地页'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'ARTICLE',
|
|
|
+ label: '文章推广'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'GOODS',
|
|
|
+ label: '商品推广'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'DPA',
|
|
|
+ label: '商品目录'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'STORE',
|
|
|
+ label: '门店推广'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'AWEME',
|
|
|
+ label: '抖音号推广'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'SHOP',
|
|
|
+ label: '店铺直投'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'APP_ANDROID',
|
|
|
+ label: '应用下载-安卓'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'APP_IOS',
|
|
|
+ label: '应用下载-IOS'
|
|
|
+ }
|
|
|
+ ],
|
|
|
ageArr: [
|
|
|
{
|
|
|
value: 'NONE',
|
|
@@ -1457,12 +1611,6 @@ export default {
|
|
|
if (!this.configForm.accountId) {
|
|
|
return '请选择账户';
|
|
|
}
|
|
|
- else if (this.configForm.adDownloadType === 'DOWNLOAD_URL' && !this.platformLoadingType) {
|
|
|
- return '请填写投放内容';
|
|
|
- }
|
|
|
- else if (this.configForm.adDownloadType === 'EXTERNAL_URL' && !this.configForm.adExternalUrl) {
|
|
|
- return '请填写投放内容';
|
|
|
- }
|
|
|
else {
|
|
|
return 'able';
|
|
|
}
|
|
@@ -1497,7 +1645,6 @@ export default {
|
|
|
promotionContent: this.configForm.adDownloadType
|
|
|
};
|
|
|
this.handleGetOptimizationObjective(paramsData);
|
|
|
- this.handleGetAdAudiencePackage();
|
|
|
}
|
|
|
},
|
|
|
NewAdPackage(newVal, oldVal) {
|
|
@@ -1515,11 +1662,6 @@ export default {
|
|
|
this.handleGetOptimizationObjective(paramsData);
|
|
|
}
|
|
|
},
|
|
|
- platformLoadingType(newVal, oldVal) {
|
|
|
- if (newVal && this.configForm.accountId) {
|
|
|
- this.handleGetAdAudiencePackage();
|
|
|
- }
|
|
|
- },
|
|
|
NewAountId(newVal, oldVal) {
|
|
|
if (newVal && this.configForm.adPackage) {
|
|
|
const paramsData = {
|
|
@@ -1534,13 +1676,11 @@ export default {
|
|
|
};
|
|
|
this.handleGetOptimizationObjective(paramsData);
|
|
|
}
|
|
|
- if (newVal && this.platformLoadingType) {
|
|
|
- this.handleGetAdAudiencePackage();
|
|
|
- }
|
|
|
if (newVal) {
|
|
|
this.handleGetCreativeClassification();
|
|
|
this.handleGetAdvertiserStrategy();
|
|
|
this.handleDirectionalList();
|
|
|
+ this.handleGetAdAudiencePackage()
|
|
|
}
|
|
|
else {
|
|
|
this.createOptions = [];
|
|
@@ -1760,13 +1900,20 @@ export default {
|
|
|
},
|
|
|
handleGetAdAudiencePackage() {
|
|
|
const params = {
|
|
|
- accountId: this.configForm.accountId,
|
|
|
- landingType: this.configForm.adDownloadType === 'DOWNLOAD_URL' ? this.platformLoadingType : 'EXTERNAL'
|
|
|
+ accountId: this.configForm.accountId
|
|
|
};
|
|
|
getAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getAdAudiencePackage', params)
|
|
|
.then(result => {
|
|
|
if (result.code === 0) {
|
|
|
- this.selectiveList = result.result || [];
|
|
|
+ const defaultList = result.result;
|
|
|
+ this.promotionTypeList.forEach(item => {
|
|
|
+ defaultList.forEach(val => {
|
|
|
+ if (item.landing_type === val.value) {
|
|
|
+ val.changeName = item.label;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ this.selectiveList = defaultList;
|
|
|
}
|
|
|
else {
|
|
|
this.$message.error(result.message);
|
|
@@ -2480,9 +2627,6 @@ export default {
|
|
|
},
|
|
|
handleRelaxSure() {
|
|
|
let paramsFormData = this.configForm;
|
|
|
- if (this.adBudgetShowTitle) {
|
|
|
- return;
|
|
|
- }
|
|
|
if (this.configForm.adDistrict === 'CITY') {
|
|
|
if (!this.configForm.adSelectCity.length) {
|
|
|
this.$message.error('请选择省市');
|