|
@@ -192,6 +192,15 @@
|
|
|
allow-clear
|
|
|
/>
|
|
|
</a-form-model-item>
|
|
|
+ <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="优先应用商店下载">
|
|
|
+ <a-radio-group
|
|
|
+ v-model="configForm.adDownloadMode"
|
|
|
+ button-style="solid"
|
|
|
+ >
|
|
|
+ <a-radio-button value="DEFAULT">不启用</a-radio-button>
|
|
|
+ <a-radio-button value="APP_STORE_DELIVERY">启用</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
</div>
|
|
|
<div class="separate-module-con">
|
|
|
<p class="rock-title">优化目标</p>
|
|
@@ -305,6 +314,24 @@
|
|
|
<a-form-model-item label="年龄">
|
|
|
<radio-check v-model="configForm.adSelectAge" :options="ageArr" @change="getAgeSelect"></radio-check>
|
|
|
</a-form-model-item>
|
|
|
+ <a-form-model-item label="行为兴趣">
|
|
|
+ <a-radio-group
|
|
|
+ v-model="configForm.adInterestActionMode"
|
|
|
+ button-style="solid"
|
|
|
+ >
|
|
|
+ <a-radio-button value="UNLIMITED">不限</a-radio-button>
|
|
|
+ <a-radio-button value="RECOMMEND">
|
|
|
+ 系统推荐
|
|
|
+ <a-tooltip placement="top">
|
|
|
+ <template slot="title">
|
|
|
+ <span>若与自定义人群包同时使用,选择定向人群时系统推荐定向不生效</span>
|
|
|
+ </template>
|
|
|
+ <a-icon type="question-circle" />
|
|
|
+ </a-tooltip>
|
|
|
+ </a-radio-button>
|
|
|
+ <a-radio-button value="CUSTOM" disabled>自定义</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
<a-form-model-item label="自定义人群">
|
|
|
<a-radio-group v-model="configForm.customPerson" button-style="solid" @change="handleCustomPerson">
|
|
|
<a-radio-button value="NONE">不限</a-radio-button>
|
|
@@ -421,12 +448,40 @@
|
|
|
</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="smile-o"/>
|
|
|
+ </a-tooltip>
|
|
|
+ </a-form-model-item>
|
|
|
<a-form-model-item label="智能放量">
|
|
|
<a-radio-group v-model="configForm.adAutoExtendEnabled" button-style="solid">
|
|
|
<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="smile-o"/>
|
|
|
+ </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="2" tab="选择定向包">
|
|
|
<a-form-model-item class="select-orientation-class" label="选择已有定向包" :prop="selectPackageTabs === '2' ? 'adAudiencePackageId' : ''">
|
|
@@ -748,6 +803,60 @@
|
|
|
allow-clear
|
|
|
/>
|
|
|
</a-form-model-item>
|
|
|
+ <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName">
|
|
|
+ <a-input
|
|
|
+ class="common-input-long"
|
|
|
+ placeholder="请输入来源"
|
|
|
+ v-model="configForm.creativeAppName"
|
|
|
+ allow-clear
|
|
|
+ />
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL' && platformLoadingType === 'APP_ANDROID'" label="副标题">
|
|
|
+ <a-input
|
|
|
+ class="common-input-long"
|
|
|
+ placeholder="请输入来源"
|
|
|
+ v-model="configForm.creativeSubTitle"
|
|
|
+ allow-clear
|
|
|
+ @blur="handleCreativeSubTitleBlur"
|
|
|
+ />
|
|
|
+ </a-form-model-item>
|
|
|
+ <div v-if="subTitleMsgStatus" style="width: 500px;color: #f00;margin-left: 140px">{{ subTitleMsg }}</div>
|
|
|
+ <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="自动生成素材视频">
|
|
|
+ <a-radio-group v-model="configForm.creativeIsPresentedVideo" button-style="solid">
|
|
|
+ <a-radio-button :value="0">不启用</a-radio-button>
|
|
|
+ <a-radio-button :value="1">启用</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="最优创意衍生计划">
|
|
|
+ <a-radio-group v-model="configForm.creativeGenerateDerivedAd" button-style="solid">
|
|
|
+ <a-radio-button :value="0">不启用</a-radio-button>
|
|
|
+ <a-radio-button :value="1">启用</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item label="广告评论">
|
|
|
+ <a-radio-group v-model="configForm.creativeIsCommentDisable" button-style="solid">
|
|
|
+ <a-radio-button :value="1">关闭</a-radio-button>
|
|
|
+ <a-radio-button :value="0">开启</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item label="客户端下载视频">
|
|
|
+ <a-radio-group v-model="configForm.creativeDownloadStatus" button-style="solid">
|
|
|
+ <a-radio-button :value="1">关闭</a-radio-button>
|
|
|
+ <a-radio-button :value="0">开启</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item label="创意展现">
|
|
|
+ <a-radio-group v-model="configForm.creativeDisplayMode" button-style="solid">
|
|
|
+ <a-radio-button value="CREATIVE_DISPLAY_MODE_CTR">优选模式</a-radio-button>
|
|
|
+ <a-radio-button value="CREATIVE_DISPLAY_MODE_RANDOM">轮播模式</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <div v-if="configForm.creativeDisplayMode === 'CREATIVE_DISPLAY_MODE_CTR'" class="adver-position-radio">
|
|
|
+ 选择优选模式,系统会自动对效果好的创意进行展示量倾斜,创意效果越好展示量越高
|
|
|
+ </div>
|
|
|
+ <div v-if="configForm.creativeDisplayMode === 'CREATIVE_DISPLAY_MODE_RANDOM'" class="adver-position-radio">
|
|
|
+ 使用创意轮播,系统将平分各创意展现机会,便于广告主比较各创意投放效果
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="separate-module-con">
|
|
|
<p class="rock-title">创意分类</p>
|
|
@@ -804,6 +913,7 @@ import SelectCheckAll from '../../BatchCreate/toutiaoTime';
|
|
|
import radioCheck from '@/components/formComponents/checkBoxGroup';
|
|
|
import linkMultiSelect from '@/views/modules/BatchCreate/linkMultiSelect';
|
|
|
import DirectionalLogic from './directional-logic/directional-logic';
|
|
|
+import AutoSelect from './tree-select/tree-select';
|
|
|
|
|
|
import moment from 'moment';
|
|
|
import BMF from 'browser-md5-file';
|
|
@@ -834,7 +944,8 @@ export default {
|
|
|
SelectCheckAll,
|
|
|
radioCheck,
|
|
|
linkMultiSelect,
|
|
|
- DirectionalLogic
|
|
|
+ DirectionalLogic,
|
|
|
+ AutoSelect
|
|
|
},
|
|
|
data() {
|
|
|
let handleConfirmValue = (rule, value, callback) => {
|
|
@@ -882,6 +993,31 @@ export default {
|
|
|
}
|
|
|
};
|
|
|
return {
|
|
|
+ subTitleMsgStatus: false,
|
|
|
+ subTitleMsg: '',
|
|
|
+ AutoExtendEditSelect: [],
|
|
|
+ adAutoExtendList: [
|
|
|
+ {
|
|
|
+ value: 'AGE',
|
|
|
+ label: '年龄'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'REGION',
|
|
|
+ label: '地域'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'GENDER',
|
|
|
+ label: '性别'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'INTEREST_ACTION',
|
|
|
+ label: '行为兴趣'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'CUSTOM_AUDIENCE',
|
|
|
+ label: '自定人群-定向'
|
|
|
+ }
|
|
|
+ ],
|
|
|
directionalData: [],
|
|
|
platformLoadingType: '',
|
|
|
selectPackageTabs: '1',
|
|
@@ -1013,6 +1149,10 @@ export default {
|
|
|
labelCol: {span: 4},
|
|
|
wrapperCol: {span: 14},
|
|
|
rules: {
|
|
|
+ creativeAppName: [
|
|
|
+ {required: true, message: '请输入', trigger: 'blur'},
|
|
|
+ {validator: handleCharacterLen20, trigger: 'blur'}
|
|
|
+ ],
|
|
|
adExternalUrl: [
|
|
|
{required: true, message: '请输入', trigger: 'blur'},
|
|
|
{validator: handleConfirmValue, trigger: 'blur'}
|
|
@@ -1077,6 +1217,16 @@ export default {
|
|
|
creativeThirdIndustryIds: [{required: true, message: '请选择', trigger: 'change'}]
|
|
|
},
|
|
|
configForm: {
|
|
|
+ adInterestActionMode: 'UNLIMITED',
|
|
|
+ creativeDisplayMode: 'CREATIVE_DISPLAY_MODE_CTR',
|
|
|
+ creativeAppName: '',
|
|
|
+ creativeIsPresentedVideo: 0,
|
|
|
+ creativeGenerateDerivedAd: 0,
|
|
|
+ creativeIsCommentDisable: 1,
|
|
|
+ creativeDownloadStatus: 1,
|
|
|
+ creativeSubTitle: '',
|
|
|
+ adConvertedTimeDuration: 'ONE_MONTH',
|
|
|
+ adDownloadMode: 'DEFAULT',
|
|
|
dpLinkIndexUsed: 0,
|
|
|
adRetargetingTagsType: '',
|
|
|
adAudiencePackageId: undefined,
|
|
@@ -1152,6 +1302,7 @@ export default {
|
|
|
updateGetingExclude: [],
|
|
|
adRetargetingTagsInclude: '',
|
|
|
adRetargetingTagsExclude: '',
|
|
|
+ adAutoExtendTargets: '',
|
|
|
creativeCallToAction: '', // 行动号召
|
|
|
creativeLabel: undefined // 倡议标签
|
|
|
}
|
|
@@ -1268,6 +1419,35 @@ export default {
|
|
|
methods: {
|
|
|
...mapGetters(['nickname', 'avatar', 'userInfo']),
|
|
|
moment,
|
|
|
+ handleCreativeSubTitleBlur(e) {
|
|
|
+ const defaultValue = e.target.value;
|
|
|
+ let cnReg = /([\u4e00-\u9fa5]|[\u3000-\u303F]|[\uFF00-\uFF60])/;
|
|
|
+ let length = 0;
|
|
|
+ let strArr = defaultValue.split('');
|
|
|
+ strArr.forEach(item => {
|
|
|
+ if (cnReg.test(item)) {
|
|
|
+ length += 2;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ length += 1;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (4 <= length && length <= 24) {
|
|
|
+ this.subTitleMsgStatus = false;
|
|
|
+ this.subTitleMsg = '';
|
|
|
+ }
|
|
|
+ else if (!defaultValue) {
|
|
|
+ this.subTitleMsgStatus = false;
|
|
|
+ this.subTitleMsg = '';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ this.subTitleMsgStatus = true;
|
|
|
+ this.subTitleMsg = '只能输入4-24个字符';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleSelectTxtend(list) {
|
|
|
+ this.configForm.adAutoExtendTargets = list && list.map(item => item.value).join(',');
|
|
|
+ },
|
|
|
handleSelectPackageTabs(e) {
|
|
|
if (this.modalTitle === 'add') {
|
|
|
if (e === '1') {
|
|
@@ -1717,6 +1897,44 @@ export default {
|
|
|
this.listArr = detailData.adCity.split(',');
|
|
|
this.configForm.adSelectCity = detailData.adCity.split(',');
|
|
|
}, 200);
|
|
|
+ let paramsData = {};
|
|
|
+ if (detailData.adDownloadType === 'DOWNLOAD_URL') {
|
|
|
+ paramsData = {
|
|
|
+ advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
|
|
|
+ advertiserId: detailData.accountId,
|
|
|
+ appType: 'APP_ANDROID',
|
|
|
+ deliveryRange: 'DEFAULT',
|
|
|
+ externalUrl: detailData.adExternalUrl,
|
|
|
+ landingType: detailData.campaignLandingType,
|
|
|
+ packageName: detailData.adPackage,
|
|
|
+ promotionContent: detailData.adDownloadType
|
|
|
+ };
|
|
|
+ }
|
|
|
+ else if (detailData.adDownloadType === 'EXTERNAL_URL') {
|
|
|
+ paramsData = {
|
|
|
+ advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
|
|
|
+ advertiserId: detailData.accountId,
|
|
|
+ deliveryRange: 'DEFAULT',
|
|
|
+ externalUrl: detailData.adExternalUrl,
|
|
|
+ landingType: detailData.campaignLandingType,
|
|
|
+ promotionContent: detailData.adDownloadType
|
|
|
+ };
|
|
|
+ }
|
|
|
+ postAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getToolConvert', paramsData).then(result => {
|
|
|
+ if (result.code === 0) {
|
|
|
+ const updateResult = result.result.filter(item => item.external_actions.length > 0);
|
|
|
+ this.configForm.adConvertType = updateResult[0].convert_type;
|
|
|
+ this.optimizationOption = updateResult[0].external_actions;
|
|
|
+ setTimeout(() => {
|
|
|
+ this.configForm.adConvertId = detailData.adConvertId;
|
|
|
+ }, 200);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ this.$message.error(result.message);
|
|
|
+ }
|
|
|
+ }).catch(error => {
|
|
|
+ console.log(error, 'eeee');
|
|
|
+ });
|
|
|
getAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getDMPCustomAudience', {accountId: detailData.accountId}).then(result => {
|
|
|
if (result.code === 0) {
|
|
|
result.result.forEach(item => {
|
|
@@ -1833,44 +2051,18 @@ export default {
|
|
|
if (detailData.adKeywords) {
|
|
|
this.creativeTag = detailData.adKeywords;
|
|
|
}
|
|
|
- let paramsData = {};
|
|
|
- if (this.configForm.adDownloadType === 'DOWNLOAD_URL') {
|
|
|
- paramsData = {
|
|
|
- advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
|
|
|
- advertiserId: this.configForm.accountId,
|
|
|
- appType: 'APP_ANDROID',
|
|
|
- deliveryRange: 'DEFAULT',
|
|
|
- externalUrl: this.configForm.adExternalUrl,
|
|
|
- landingType: this.configForm.campaignLandingType,
|
|
|
- packageName: this.configForm.adPackage,
|
|
|
- promotionContent: this.configForm.adDownloadType
|
|
|
- };
|
|
|
- }
|
|
|
- else if (this.configForm.adDownloadType === 'EXTERNAL_URL') {
|
|
|
- paramsData = {
|
|
|
- advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
|
|
|
- advertiserId: this.configForm.accountId,
|
|
|
- deliveryRange: 'DEFAULT',
|
|
|
- externalUrl: this.configForm.adExternalUrl,
|
|
|
- landingType: this.configForm.campaignLandingType,
|
|
|
- promotionContent: this.configForm.adDownloadType
|
|
|
- };
|
|
|
- }
|
|
|
- postAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getToolConvert', paramsData).then(result => {
|
|
|
- if (result.code === 0) {
|
|
|
- const updateResult = result.result.filter(item => item.external_actions.length > 0);
|
|
|
- this.configForm.adConvertType = updateResult[0].convert_type;
|
|
|
- this.optimizationOption = updateResult[0].external_actions;
|
|
|
- setTimeout(() => {
|
|
|
- this.configForm.adConvertId = detailData.adConvertId;
|
|
|
- }, 300);
|
|
|
- }
|
|
|
- else {
|
|
|
- this.$message.error(result.message);
|
|
|
- }
|
|
|
- }).catch(error => {
|
|
|
- console.log(error, 'eeee');
|
|
|
- });
|
|
|
+ this.configForm.adInterestActionMode = detailData.adInterestActionMode;
|
|
|
+ this.configForm.creativeDisplayMode = detailData.creativeDisplayMode;
|
|
|
+ this.configForm.creativeAppName = detailData.creativeAppName;
|
|
|
+ this.configForm.creativeIsPresentedVideo = detailData.creativeIsPresentedVideo;
|
|
|
+ this.configForm.creativeGenerateDerivedAd = detailData.creativeGenerateDerivedAd;
|
|
|
+ this.configForm.creativeIsCommentDisable = detailData.creativeIsCommentDisable;
|
|
|
+ this.configForm.creativeDownloadStatus = detailData.creativeDownloadStatus;
|
|
|
+ this.configForm.creativeSubTitle = detailData.creativeSubTitle;
|
|
|
+ this.configForm.adConvertedTimeDuration = detailData.adConvertedTimeDuration;
|
|
|
+ this.configForm.adDownloadMode = detailData.adDownloadMode;
|
|
|
+ this.configForm.adAutoExtendTargets = detailData.adAutoExtendTargets;
|
|
|
+ this.AutoExtendEditSelect = detailData.adAutoExtendTargets.length && detailData.adAutoExtendTargets.split(',');
|
|
|
}
|
|
|
else {
|
|
|
this.$message.error(result.message);
|
|
@@ -2134,7 +2326,7 @@ export default {
|
|
|
this.$message.error('请选择已有定向包');
|
|
|
return;
|
|
|
}
|
|
|
- if (paramsFormData.customPerson === 'a') {
|
|
|
+ if (paramsFormData.customPerson === 'a') {
|
|
|
if (paramsFormData.adRetargetingTagsType === '1' && !paramsFormData.adRetargetingTagsInclude) {
|
|
|
this.$message.error('请选择人群');
|
|
|
return;
|
|
@@ -2179,6 +2371,9 @@ export default {
|
|
|
else {
|
|
|
this.isAdCpaBidBlur = false;
|
|
|
}
|
|
|
+ if (this.subTitleMsgStatus) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
if (paramsFormData.adverPosition === 'a') {
|
|
|
paramsFormData.creativeSmartInventory = 1;
|
|
|
}
|