|
@@ -360,12 +360,13 @@
|
|
|
</a-form-model-item>
|
|
|
<a-form-model-item v-if="configForm.adConvertType" label="过滤已转化用户">
|
|
|
<a-radio-group v-model="configForm.adHideIfConverted" button-style="solid">
|
|
|
- <a-radio-button value="NO_EXCLUDE">不限</a-radio-button>
|
|
|
- <a-radio-button value="AD">广告计划</a-radio-button>
|
|
|
- <a-radio-button value="CAMPAIGN">广告组</a-radio-button>
|
|
|
- <a-radio-button value="ADVERTISER">广告账户</a-radio-button>
|
|
|
- <a-radio-button value="CUSTOMER">公司账户</a-radio-button>
|
|
|
- <a-radio-button value="APP">APP</a-radio-button>
|
|
|
+ <a-radio-button
|
|
|
+ v-for="item in adHideIfConvertedDataOption"
|
|
|
+ :key="item.id"
|
|
|
+ :value="item.id"
|
|
|
+ >
|
|
|
+ {{ item.name }}
|
|
|
+ </a-radio-button>
|
|
|
</a-radio-group>
|
|
|
</a-form-model-item>
|
|
|
<a-form-model-item label="智能放量">
|
|
@@ -376,16 +377,22 @@
|
|
|
</a-form-model-item>
|
|
|
</a-tab-pane>
|
|
|
<a-tab-pane key="2" tab="选择定向包">
|
|
|
- <a-form-model-item class="select-orientation-class" label="选择已有定向包" prop="selectiveOrientation">
|
|
|
+ <a-form-model-item class="select-orientation-class" label="选择已有定向包" prop="adAudiencePackageId">
|
|
|
<a-select
|
|
|
class="common-input-long"
|
|
|
- v-model="configForm.selectiveOrientation"
|
|
|
+ v-model="configForm.adAudiencePackageId"
|
|
|
+ allow-clear
|
|
|
:placeholder="selectOrientPlaceholder"
|
|
|
:disabled="selectOrientPlaceholder !== '请选择已有定向包名称'"
|
|
|
@change="handleSelectiveOrientation"
|
|
|
>
|
|
|
- <a-select-option value="BUDGET_MODE_DAY">日预算</a-select-option>
|
|
|
- <a-select-option value="BUDGET_MODE_TOTAL">总预算</a-select-option>
|
|
|
+ <a-select-option
|
|
|
+ v-for="(item, index) in selectiveList"
|
|
|
+ :key="index"
|
|
|
+ :value="item.audience_package_id"
|
|
|
+ >
|
|
|
+ {{ item.name }}
|
|
|
+ </a-select-option>
|
|
|
</a-select>
|
|
|
<a-tooltip placement="top">
|
|
|
<template slot="title">
|
|
@@ -397,20 +404,20 @@
|
|
|
</a-form-model-item>
|
|
|
<div class="select-orientation-content">
|
|
|
<p class="orientation-header-title">已选定向信息</p>
|
|
|
- <!-- <div class="orientation-content-msg">
|
|
|
- <div><a-icon type="container"/></div>
|
|
|
- <div>请在上方选择一个已有定向包</div>
|
|
|
- </div> -->
|
|
|
- <div class="orientation-content-substance">
|
|
|
+ <div v-if="packageMessageDetail.length" class="orientation-content-substance">
|
|
|
<div class="content-substance-singal">
|
|
|
<span class="singal-spn">定向人群包:</span>
|
|
|
- <span>行业通用人群包</span>
|
|
|
+ <!-- <span>{{ packageMessageDetail[0].description }}</span> -->
|
|
|
</div>
|
|
|
<div class="content-substance-singal">
|
|
|
<span class="singal-spn">地域:</span>
|
|
|
<span>北京、和白、天津</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div v-else class="orientation-content-msg">
|
|
|
+ <div><a-icon type="container"/></div>
|
|
|
+ <div>请在上方选择一个已有定向包</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</a-tab-pane>
|
|
|
</a-tabs>
|
|
@@ -476,13 +483,13 @@
|
|
|
</a-radio-group>
|
|
|
</a-form-model-item>
|
|
|
<a-form-model-item label="出价方式">
|
|
|
- <a-radio-group v-model="configForm.biddingMethod" button-style="solid" @change="handleBiddingMethod">
|
|
|
- <a-radio-button value="a">固定出价</a-radio-button>
|
|
|
- <a-radio-button value="b">随机出价</a-radio-button>
|
|
|
- <a-radio-button value="c">阶段出价</a-radio-button>
|
|
|
+ <a-radio-group v-model="configForm.adBidCreateType" button-style="solid" @change="handleBiddingMethod">
|
|
|
+ <a-radio-button value="FIX">固定出价</a-radio-button>
|
|
|
+ <a-radio-button value="RAND">随机出价</a-radio-button>
|
|
|
+ <a-radio-button value="STEP">阶段出价</a-radio-button>
|
|
|
</a-radio-group>
|
|
|
</a-form-model-item>
|
|
|
- <a-form-model-item v-if="configForm.biddingMethod === 'a'" label="目标转化出价" :prop="configForm.launchTarget === 'OCPM' ? 'adCpaBid' : ''">
|
|
|
+ <a-form-model-item v-if="configForm.adBidCreateType === 'FIX'" label="目标转化出价" :prop="configForm.launchTarget === 'OCPM' ? 'adCpaBid' : ''">
|
|
|
<a-input-number
|
|
|
class="common-input"
|
|
|
v-model="configForm.adCpaBid"
|
|
@@ -492,59 +499,56 @@
|
|
|
/> 元
|
|
|
<div v-if="isAdCpaBidBlur" style="width: 500px;color: #f00;">{{ adCpaBidBlurTxt }}</div>
|
|
|
</a-form-model-item>
|
|
|
- <a-form-model-item v-if="configForm.biddingMethod === 'b'" label="目标转化出价" class="dp-link-start">
|
|
|
- <a-input-number
|
|
|
- class="common-input"
|
|
|
- v-model="configForm.adCpaBid11"
|
|
|
- :min="0.1"
|
|
|
- :max="10000"
|
|
|
- placeholder="请输入"
|
|
|
- @blur="handleAdCpaBidOneBlur"
|
|
|
- />
|
|
|
- <span>~</span>
|
|
|
- <span class="especial-label cpaBid-mode-label">*</span>
|
|
|
- <div v-if="isAdCpaBid11Blur" style="width: 500px;color: #f00;">{{ adCpaBid11BlurTxt }}</div>
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item v-if="configForm.biddingMethod === 'b'" class="dp-link-end">
|
|
|
- <a-input-number
|
|
|
- class="common-input"
|
|
|
- v-model="configForm.adCpaBid122"
|
|
|
- :min="0.1"
|
|
|
- :max="10000"
|
|
|
- placeholder="请输入"
|
|
|
- @blur="handleAdCpaBidTwoBlur"
|
|
|
- />
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item v-if="configForm.biddingMethod === 'c'" label="目标转化出价" class="dp-link-start">
|
|
|
- <a-input-number
|
|
|
- class="common-input"
|
|
|
- v-model="configForm.ladderOne"
|
|
|
- :min="0.1"
|
|
|
- :max="10000"
|
|
|
- placeholder="请输入"
|
|
|
- @blur="handleLadderOneBlur"
|
|
|
- />
|
|
|
- <span>~</span>
|
|
|
- <span class="especial-label cpaBid-mode-label">*</span>
|
|
|
- <div v-if="isLadderBlur" style="width: 500px;color: #f00;">{{ ladderBlurTxt }}</div>
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item v-if="configForm.biddingMethod === 'c'" class="dp-link-end">
|
|
|
- <a-input-number
|
|
|
- class="common-input"
|
|
|
- v-model="configForm.ladderTwo"
|
|
|
- :min="0.1"
|
|
|
- :max="10000"
|
|
|
- placeholder="请输入"
|
|
|
- @blur="handleLadderTwoBlur"
|
|
|
- />
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item v-if="configForm.biddingMethod === 'c'" label="浮动间隔" prop="floatingInterval">
|
|
|
- <a-input-number
|
|
|
- class="common-input"
|
|
|
- v-model="configForm.floatingInterval"
|
|
|
- placeholder="请输入"
|
|
|
- /> 元
|
|
|
- </a-form-model-item>
|
|
|
+ <div v-if="configForm.adBidCreateType === 'RAND'">
|
|
|
+ <a-form-model-item label="目标转化出价"
|
|
|
+ class="dp-link-start" prop="adMinBid">
|
|
|
+ <a-input-number
|
|
|
+ class="common-input"
|
|
|
+ v-model="configForm.adMinBid"
|
|
|
+ :min="0.1"
|
|
|
+ :max="10000"
|
|
|
+ placeholder="请输入"
|
|
|
+ />
|
|
|
+ <span>~</span>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item class="dp-link-end" prop="adMaxBid">
|
|
|
+ <a-input-number
|
|
|
+ class="common-input"
|
|
|
+ v-model="configForm.adMaxBid"
|
|
|
+ :min="0.1"
|
|
|
+ :max="10000"
|
|
|
+ placeholder="请输入"
|
|
|
+ />
|
|
|
+ </a-form-model-item>
|
|
|
+ </div>
|
|
|
+ <div v-if="configForm.adBidCreateType === 'STEP'">
|
|
|
+ <a-form-model-item label="目标转化出价" class="dp-link-start" prop="adMinBid">
|
|
|
+ <a-input-number
|
|
|
+ class="common-input"
|
|
|
+ v-model="configForm.adMinBid"
|
|
|
+ :min="0.1"
|
|
|
+ :max="10000"
|
|
|
+ placeholder="请输入"
|
|
|
+ />
|
|
|
+ <span>~</span>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item class="dp-link-end" prop="adMaxBid">
|
|
|
+ <a-input-number
|
|
|
+ class="common-input"
|
|
|
+ v-model="configForm.adMaxBid"
|
|
|
+ :min="0.1"
|
|
|
+ :max="10000"
|
|
|
+ placeholder="请输入"
|
|
|
+ />
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item label="浮动间隔" prop="adStepBid">
|
|
|
+ <a-input-number
|
|
|
+ class="common-input"
|
|
|
+ v-model="configForm.adStepBid"
|
|
|
+ placeholder="请输入"
|
|
|
+ /> 元
|
|
|
+ </a-form-model-item>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="separate-module-con">
|
|
|
<p class="rock-title">第三方检测链接</p>
|
|
@@ -764,15 +768,61 @@ export default {
|
|
|
this.handleExportRules(value, 4, 20, callback);
|
|
|
};
|
|
|
let floatingIntervalValidator = (rule, value, callback) => {
|
|
|
- const finallyResult = Number(this.configForm.ladderOne) + Number(value);
|
|
|
- if (finallyResult < Number(this.configForm.ladderTwo)) {
|
|
|
+ const finallyResult = Number(this.configForm.adMinBid) + Number(value);
|
|
|
+ if (finallyResult < Number(this.configForm.adMaxBid)) {
|
|
|
callback();
|
|
|
}
|
|
|
else {
|
|
|
callback('最低出价+浮动间隔<最高出价');
|
|
|
}
|
|
|
};
|
|
|
+ let adMinBidValidator = (rule, value, callback) => {
|
|
|
+ const finallyResult = Number(this.configForm.adMaxBid);
|
|
|
+ if (finallyResult !== '' && value && Number(value) < finallyResult) {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ callback('最低出价不能高于最高出价');
|
|
|
+ }
|
|
|
+ };
|
|
|
+ let adMaxBidValidator = (rule, value, callback) => {
|
|
|
+ const finallyResult = Number(this.configForm.adMinBid);
|
|
|
+ if (finallyResult !== '' && value && Number(value) > finallyResult) {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ callback('最高出价不能低于最低出价');
|
|
|
+ }
|
|
|
+ };
|
|
|
return {
|
|
|
+ adHideIfConvertedDataOption: [ // 过滤已转化用户option
|
|
|
+ {
|
|
|
+ id: 'NO_EXCLUDE',
|
|
|
+ name: '不限'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'AD',
|
|
|
+ name: '广告计划'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'CAMPAIGN',
|
|
|
+ name: '广告组'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'ADVERTISER',
|
|
|
+ name: '广告账户'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'CUSTOMER',
|
|
|
+ name: '公司账户'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'APP',
|
|
|
+ name: 'APP'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ packageMessageDetail: [],
|
|
|
+ selectiveList: [],
|
|
|
isLadderBlur: false,
|
|
|
ladderBlurTxt: '',
|
|
|
isAdCpaBid11Blur: false,
|
|
@@ -874,10 +924,18 @@ export default {
|
|
|
adCpaBid: [
|
|
|
{required: true, message: '请输入', trigger: 'blur'}
|
|
|
],
|
|
|
- floatingInterval: [
|
|
|
+ adStepBid: [
|
|
|
{required: true, message: '请输入', trigger: 'blur'},
|
|
|
{validator: floatingIntervalValidator, trigger: 'blur'}
|
|
|
],
|
|
|
+ adMinBid: [
|
|
|
+ {required: true, message: '请输入最低出价', trigger: 'blur'},
|
|
|
+ {validator: adMinBidValidator, trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ adMaxBid: [
|
|
|
+ {required: true, message: '请输入最高出价', trigger: 'blur'},
|
|
|
+ {validator: adMaxBidValidator, trigger: 'blur'}
|
|
|
+ ],
|
|
|
adName: [
|
|
|
{required: true, message: '请输入广告计划名称'},
|
|
|
{validator: handleCharacterLen100, trigger: 'blur'}
|
|
@@ -886,7 +944,7 @@ export default {
|
|
|
{required: true, message: '请输入', trigger: 'blur'},
|
|
|
{min: 1, max: 7, message: '请输入1-7个字', trigger: 'blur'}
|
|
|
],
|
|
|
- selectiveOrientation: [{required: true, message: '请选择', trigger: 'change'}],
|
|
|
+ adAudiencePackageId: [{required: true, message: '请选择', trigger: 'change'}],
|
|
|
creativeCallToAction: [{required: true, message: '请选择', trigger: 'change'}],
|
|
|
adConvertType: [{required: true, message: '请选择', trigger: 'change'}],
|
|
|
adConvertId: [{required: true, message: '请选择', trigger: 'change'}],
|
|
@@ -894,13 +952,13 @@ export default {
|
|
|
},
|
|
|
configForm: {
|
|
|
directionalLogic: '',
|
|
|
- selectiveOrientation: undefined,
|
|
|
- floatingInterval: 0,
|
|
|
+ adAudiencePackageId: undefined,
|
|
|
+ adStepBid: 0,
|
|
|
ladderOne: '',
|
|
|
ladderTwo: '',
|
|
|
- adCpaBid11: '',
|
|
|
- adCpaBid22: '',
|
|
|
- biddingMethod: 'a',
|
|
|
+ adMinBid: '',
|
|
|
+ adMaxBid: '',
|
|
|
+ adBidCreateType: 'FIX',
|
|
|
creativeOptions: [],
|
|
|
advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
|
|
|
adLocationType: 'HOME',
|
|
@@ -1033,6 +1091,7 @@ export default {
|
|
|
}
|
|
|
this.handleGetCreativeClassification();
|
|
|
this.handleGetAdvertiserStrategy();
|
|
|
+ this.handleGetAdAudiencePackage();
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
@@ -1048,73 +1107,35 @@ export default {
|
|
|
methods: {
|
|
|
...mapGetters(['nickname', 'avatar', 'userInfo']),
|
|
|
moment,
|
|
|
+ handleGetAdAudiencePackage() {
|
|
|
+ const params = {
|
|
|
+ accountId: this.configForm.accountId
|
|
|
+ };
|
|
|
+ getAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getAdAudiencePackage', params)
|
|
|
+ .then(result => {
|
|
|
+ if (result.code === 0) {
|
|
|
+ console.log(result, 'result---0000----0000');
|
|
|
+ this.selectiveList = result.result;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ this.$message.error(result.message);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(error => {
|
|
|
+ console.log(error, 'eeee');
|
|
|
+ });
|
|
|
+ },
|
|
|
handleSelectiveOrientation(e) {
|
|
|
console.log(e, '----选择定向包');
|
|
|
+ const defaultData = this.selectiveList.filter(item => item.audience_package_id === e);
|
|
|
+ this.packageMessageDetail = defaultData;
|
|
|
+ console.log(this.packageMessageDetail, 'this.packageMessageDetail');
|
|
|
},
|
|
|
handleBiddingMethod(e) {
|
|
|
- console.log(e, '---e---ebid--出价方式');
|
|
|
- },
|
|
|
- handleAdCpaBidOneBlur(e) {
|
|
|
- console.log(e.target.value, 'e----one--one');
|
|
|
- const defaultTxt = e.target.value;
|
|
|
- if (!defaultTxt) {
|
|
|
- this.isAdCpaBid11Blur = true;
|
|
|
- this.adCpaBid11BlurTxt = '请输入最低出价';
|
|
|
- }
|
|
|
- else if (defaultTxt > this.configForm.adCpaBid122) {
|
|
|
- this.isAdCpaBid11Blur = true;
|
|
|
- this.adCpaBid11BlurTxt = '最低出价不能大于最高出价';
|
|
|
- }
|
|
|
- else {
|
|
|
- this.isAdCpaBid11Blur = false;
|
|
|
- this.adCpaBid11BlurTxt = '';
|
|
|
- }
|
|
|
- },
|
|
|
- handleAdCpaBidTwoBlur(e) {
|
|
|
- console.log(e.target.value, 'e----two--two');
|
|
|
- const defaultTxt = e.target.value;
|
|
|
- if (!defaultTxt) {
|
|
|
- this.isAdCpaBid11Blur = true;
|
|
|
- this.adCpaBid11BlurTxt = '请输入最高出价';
|
|
|
- }
|
|
|
- else if (defaultTxt < this.configForm.adCpaBid11) {
|
|
|
- this.isAdCpaBid11Blur = true;
|
|
|
- this.adCpaBid11BlurTxt = '最低出价不能大于最高出价';
|
|
|
- }
|
|
|
- else {
|
|
|
- this.isAdCpaBid11Blur = false;
|
|
|
- this.adCpaBid11BlurTxt = '';
|
|
|
- }
|
|
|
- },
|
|
|
- handleLadderOneBlur(e) {
|
|
|
- const defaultTxt = e.target.value;
|
|
|
- if (!defaultTxt) {
|
|
|
- this.isLadderBlur = true;
|
|
|
- this.ladderBlurTxt = '请输入最低出价';
|
|
|
- }
|
|
|
- else if (this.configForm.ladderTwo && defaultTxt > this.configForm.ladderTwo) {
|
|
|
- this.isLadderBlur = true;
|
|
|
- this.ladderBlurTxt = '最低出价不能大于最高出价';
|
|
|
- }
|
|
|
- else {
|
|
|
- this.isLadderBlur = false;
|
|
|
- this.ladderBlurTxt = '';
|
|
|
- }
|
|
|
- },
|
|
|
- handleLadderTwoBlur(e) {
|
|
|
- const defaultTxt = e.target.value;
|
|
|
- if (!defaultTxt) {
|
|
|
- this.isLadderBlur = true;
|
|
|
- this.ladderBlurTxt = '请输入最高出价';
|
|
|
- }
|
|
|
- else if (this.configForm.ladderOne && defaultTxt < this.configForm.ladderOne) {
|
|
|
- this.isLadderBlur = true;
|
|
|
- this.ladderBlurTxt = '最低出价不能大于最高出价';
|
|
|
- }
|
|
|
- else {
|
|
|
- this.isLadderBlur = false;
|
|
|
- this.ladderBlurTxt = '';
|
|
|
- }
|
|
|
+ this.configForm.adCpaBid = 0;
|
|
|
+ this.configForm.adMinBid = '';
|
|
|
+ this.configForm.adMaxBid = '';
|
|
|
+ this.configForm.adStepBid = 0;
|
|
|
},
|
|
|
handleAdCpaBidBlur(e) {
|
|
|
const defaultValue = e.target.value;
|
|
@@ -1355,6 +1376,11 @@ export default {
|
|
|
this.configForm.creativeEnablePersonalAction = detailData.creativeEnablePersonalAction;
|
|
|
this.configForm.creativeCallToAction = detailData.creativeCallToAction;
|
|
|
this.configForm.creativeSource = detailData.creativeSource;
|
|
|
+ this.configForm.adBidCreateType = detailData.adBidCreateType;
|
|
|
+ this.configForm.adMinBid = detailData.adMinBid;
|
|
|
+ this.configForm.adMaxBid = detailData.adMaxBid;
|
|
|
+ this.configForm.adStepBid = detailData.adStepBid;
|
|
|
+ this.configForm.adBidCreateType = detailData.adBidCreateType;
|
|
|
this.configForm.creativeThirdIndustryIds[0] = detailData.creativeThirdIndustryId.substr(0, 4);
|
|
|
this.configForm.creativeThirdIndustryIds[1] = detailData.creativeThirdIndustryId.substr(0, 6);
|
|
|
this.configForm.creativeThirdIndustryIds[2] = detailData.creativeThirdIndustryId;
|