|
@@ -106,7 +106,7 @@
|
|
|
</div>
|
|
|
</a-form-model-item>
|
|
|
<a-form-model-item label="创建数量: 广告组数量" class="campaign-cnt-class" prop="campaignCnt">
|
|
|
- <a-input-number v-model="configForm.campaignCnt" @change="handleCampaignCnt"/>
|
|
|
+ <a-input-number v-model="configForm.campaignCnt" :min="0" @change="handleCampaignCnt"/>
|
|
|
<a-tooltip placement="top">
|
|
|
<template slot="title">
|
|
|
<span>输入的数量为每天所创建的广告组数量</span>
|
|
@@ -117,7 +117,7 @@
|
|
|
<div v-if="campaignStatus" style="width: 500px;color: #f00;">单账号每天创建计划上限500个</div>
|
|
|
</a-form-model-item>
|
|
|
<a-form-model-item label="广告计划数量" class="campaign-ad-class" prop="campaignAdCnt">
|
|
|
- <a-input-number v-model="configForm.campaignAdCnt" @change="handleCampaignAdCnt"/>
|
|
|
+ <a-input-number v-model="configForm.campaignAdCnt" :min="0" @change="handleCampaignAdCnt"/>
|
|
|
</a-form-model-item>
|
|
|
</div>
|
|
|
<div class="separate-module-con">
|
|
@@ -204,7 +204,7 @@
|
|
|
<a-select-option
|
|
|
v-for="(item, index) in optimizationOption"
|
|
|
:key="index"
|
|
|
- :value="item.convert_id "
|
|
|
+ :value="item.convert_id"
|
|
|
>
|
|
|
{{ item.external_name }}
|
|
|
</a-select-option>
|
|
@@ -250,102 +250,170 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="separate-module-con">
|
|
|
- <p class="rock-title">用户定向--新建定向</p>
|
|
|
- <a-form-model-item label="地域">
|
|
|
- <a-radio-group v-model="configForm.adDistrict" button-style="solid">
|
|
|
- <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
- <a-radio-button value="CITY">按省市</a-radio-button>
|
|
|
- <a-radio-button value="COUNTY">按区县</a-radio-button>
|
|
|
- <a-radio-button value="BUSINESS_DISTRICT">按商圈</a-radio-button>
|
|
|
- </a-radio-group>
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item label="性别">
|
|
|
- <a-radio-group v-model="configForm.adGender" button-style="solid">
|
|
|
- <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
- <a-radio-button value="GENDER_MALE">男</a-radio-button>
|
|
|
- <a-radio-button value="GENDER_FEMALE">女</a-radio-button>
|
|
|
- </a-radio-group>
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item label="年龄">
|
|
|
- <a-radio-group v-model="configForm.adAge" button-style="solid">
|
|
|
- <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
- <a-radio-button value="AGE_BETWEEN_18_23">18-23</a-radio-button>
|
|
|
- <a-radio-button value="AGE_BETWEEN_24_30">24-30</a-radio-button>
|
|
|
- <a-radio-button value="AGE_BETWEEN_31_40">31-40</a-radio-button>
|
|
|
- <a-radio-button value="AGE_BETWEEN_41_49">41-49</a-radio-button>
|
|
|
- <a-radio-button value="AGE_ABOVE_50">50+</a-radio-button>
|
|
|
- </a-radio-group>
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item label="自定义人群">
|
|
|
- <a-radio-group v-model="configForm.adRetargetingTagsInclude" button-style="solid">
|
|
|
- <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
- <a-radio-button value="a" disabled>自定义人群</a-radio-button>
|
|
|
- </a-radio-group>
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item label="媒体定向">
|
|
|
- <a-radio-group v-model="configForm.adSuperiorPopularityType" button-style="solid">
|
|
|
- <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
- <a-radio-button value="GAME" disabled>游戏优质媒体</a-radio-button>
|
|
|
- <a-radio-button value="b" disabled>自定义</a-radio-button>
|
|
|
- </a-radio-group>
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item label="平台">
|
|
|
- <a-radio-group v-model="configForm.adPlatform" button-style="solid">
|
|
|
- <a-radio-button value="NONE" :disabled="!!configForm.adDownloadUrl">不限</a-radio-button>
|
|
|
- <a-radio-button value="IOS" :disabled="!!configForm.adDownloadUrl">IOS</a-radio-button>
|
|
|
- <a-radio-button value="ANDROID">Andriod</a-radio-button>
|
|
|
- <a-radio-button value="PC" :disabled="!!configForm.adDownloadUrl">PC</a-radio-button>
|
|
|
- </a-radio-group>
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item v-if="configForm.adDownloadUrl" label="安卓版本">
|
|
|
- <a-radio-group v-model="configForm.adAndroidVersion" button-style="solid" @change="handleAndroidVersion">
|
|
|
- <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
- <a-radio-button value="a">自定义</a-radio-button>
|
|
|
- </a-radio-group>
|
|
|
- </a-form-model-item>
|
|
|
- <div class="adver-position-radio">
|
|
|
- <div v-if="configForm.adDownloadUrl && configForm.adAndroidVersion === 'a'" class="position-radio-change">
|
|
|
- <p>安卓版本</p>
|
|
|
- <a-radio-group v-model="configForm.androidChangeValue">
|
|
|
- <a-radio :style="radioStyle" value="8.0">Andriod 8.0及以上</a-radio>
|
|
|
- <a-radio :style="radioStyle" value="7.1">Andriod 7.1及以上</a-radio>
|
|
|
- <a-radio :style="radioStyle" value="7.0">Andriod 7.0及以上</a-radio>
|
|
|
- <a-radio :style="radioStyle" value="6.0">Andriod 6.0及以上</a-radio>
|
|
|
- </a-radio-group>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <a-form-model-item label="网络">
|
|
|
- <a-radio-group v-model="configForm.adAc" button-style="solid">
|
|
|
- <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
- <a-radio-button value="WIFI">Wi-Fi</a-radio-button>
|
|
|
- <a-radio-button value="2G">2G</a-radio-button>
|
|
|
- <a-radio-button value="3G">3G</a-radio-button>
|
|
|
- <a-radio-button value="4G">4G</a-radio-button>
|
|
|
- </a-radio-group>
|
|
|
- </a-form-model-item>
|
|
|
- <a-form-model-item label="已安装用户">
|
|
|
- <a-radio-group v-model="configForm.adHideIfExists" button-style="solid">
|
|
|
- <a-radio-button value="0">不限</a-radio-button>
|
|
|
- <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.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-group>
|
|
|
- </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-form-model-item>
|
|
|
+ <a-tabs default-active-key="1">
|
|
|
+ <a-tab-pane key="1" tab="新建定向">
|
|
|
+ <p class="rock-title">用户定向</p>
|
|
|
+ <a-form-model-item label="地域">
|
|
|
+ <a-radio-group v-model="configForm.adDistrict" button-style="solid">
|
|
|
+ <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
+ <a-radio-button value="CITY">按省市</a-radio-button>
|
|
|
+ <a-radio-button value="COUNTY">按区县</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <div v-if="configForm.adDistrict === 'CITY'" class="adver-position-radio selected-city-arr">
|
|
|
+ <link-multi-select
|
|
|
+ title="省份"
|
|
|
+ :listArr="listArr"
|
|
|
+ :maxLayers="2"
|
|
|
+ :listUrl="regionCityListUrl"
|
|
|
+ @getSelectedArr="getSelectedCityArr"
|
|
|
+ @checkedShowList="handleCheckedShowList"
|
|
|
+ >
|
|
|
+ </link-multi-select>
|
|
|
+ <a-radio-group class="city-arr-radio-group" v-model="configForm.adLocationType">
|
|
|
+ <a-radio value="HOME">居住在该地区的用户</a-radio>
|
|
|
+ <a-radio value="TRAVEL"> 到该地区旅行的用户</a-radio>
|
|
|
+ <a-radio value="ALL">该地区内的所有用户</a-radio>
|
|
|
+ <a-radio value="CURRENT">正在该地区的用户</a-radio>
|
|
|
+ </a-radio-group>
|
|
|
+ </div>
|
|
|
+ <a-form-model-item label="性别">
|
|
|
+ <a-radio-group v-model="configForm.adGender" button-style="solid">
|
|
|
+ <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
+ <a-radio-button value="GENDER_MALE">男</a-radio-button>
|
|
|
+ <a-radio-button value="GENDER_FEMALE">女</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <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.adRetargetingTagsInclude" button-style="solid">
|
|
|
+ <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.adRetargetingTagsInclude === 'a'" label="定向逻辑">
|
|
|
+ <a-radio-group v-model="configForm.directionalLogic" button-style="solid">
|
|
|
+ <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.directionalLogic === '1'" class="adver-position-radio">
|
|
|
+ <div style="width: 60%;">
|
|
|
+ <directional-logic packtype="directional"></directional-logic>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="configForm.directionalLogic === '2'" class="adver-position-radio">
|
|
|
+ <div style="width: 60%;">
|
|
|
+ <directional-logic packtype="exclude"></directional-logic>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <a-form-model-item label="媒体定向">
|
|
|
+ <a-radio-group v-model="configForm.adSuperiorPopularityType" button-style="solid">
|
|
|
+ <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
+ <a-radio-button value="GAME" disabled>游戏优质媒体</a-radio-button>
|
|
|
+ <a-radio-button value="b" disabled>自定义</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item label="平台">
|
|
|
+ <a-radio-group v-model="configForm.adPlatform" button-style="solid">
|
|
|
+ <a-radio-button value="NONE" :disabled="!!configForm.adDownloadUrl">不限</a-radio-button>
|
|
|
+ <a-radio-button value="IOS" :disabled="!!configForm.adDownloadUrl">IOS</a-radio-button>
|
|
|
+ <a-radio-button value="ANDROID">Andriod</a-radio-button>
|
|
|
+ <a-radio-button value="PC" :disabled="!!configForm.adDownloadUrl">PC</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item v-if="configForm.adDownloadUrl" label="安卓版本">
|
|
|
+ <a-radio-group v-model="configForm.adAndroidVersion" button-style="solid" @change="handleAndroidVersion">
|
|
|
+ <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
+ <a-radio-button value="a">自定义</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <div class="adver-position-radio">
|
|
|
+ <div v-if="configForm.adDownloadUrl && configForm.adAndroidVersion === 'a'" class="position-radio-change">
|
|
|
+ <p>安卓版本</p>
|
|
|
+ <a-radio-group v-model="configForm.androidChangeValue">
|
|
|
+ <a-radio :style="radioStyle" value="8.0">Andriod 8.0及以上</a-radio>
|
|
|
+ <a-radio :style="radioStyle" value="7.1">Andriod 7.1及以上</a-radio>
|
|
|
+ <a-radio :style="radioStyle" value="7.0">Andriod 7.0及以上</a-radio>
|
|
|
+ <a-radio :style="radioStyle" value="6.0">Andriod 6.0及以上</a-radio>
|
|
|
+ </a-radio-group>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <a-form-model-item label="网络">
|
|
|
+ <a-radio-group v-model="configForm.adAc" button-style="solid">
|
|
|
+ <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
+ <a-radio-button value="WIFI">Wi-Fi</a-radio-button>
|
|
|
+ <a-radio-button value="2G">2G</a-radio-button>
|
|
|
+ <a-radio-button value="3G">3G</a-radio-button>
|
|
|
+ <a-radio-button value="4G">4G</a-radio-button>
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-model-item>
|
|
|
+ <a-form-model-item label="已安装用户">
|
|
|
+ <a-radio-group v-model="configForm.adHideIfExists" button-style="solid">
|
|
|
+ <a-radio-button value="0">不限</a-radio-button>
|
|
|
+ <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.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-group>
|
|
|
+ </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-form-model-item>
|
|
|
+ </a-tab-pane>
|
|
|
+ <a-tab-pane key="2" tab="选择定向包">
|
|
|
+ <a-form-model-item class="select-orientation-class" label="选择已有定向包" prop="selectiveOrientation">
|
|
|
+ <a-select
|
|
|
+ class="common-input-long"
|
|
|
+ v-model="configForm.selectiveOrientation"
|
|
|
+ :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>
|
|
|
+ <a-tooltip placement="top">
|
|
|
+ <template slot="title">
|
|
|
+ <span>输入的数量为每天所创建的广告组数量</span>
|
|
|
+ <span>以及每个广告组创建的广告计划数量</span>
|
|
|
+ </template>
|
|
|
+ <a-icon class="form-itrm-icon orientation-icon" type="smile-o"/>
|
|
|
+ </a-tooltip>
|
|
|
+ </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 class="content-substance-singal">
|
|
|
+ <span class="singal-spn">定向人群包:</span>
|
|
|
+ <span>行业通用人群包</span>
|
|
|
+ </div>
|
|
|
+ <div class="content-substance-singal">
|
|
|
+ <span class="singal-spn">地域:</span>
|
|
|
+ <span>北京、和白、天津</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </a-tab-pane>
|
|
|
+ </a-tabs>
|
|
|
</div>
|
|
|
<div class="separate-module-con">
|
|
|
<p class="rock-title">预算与出价</p>
|
|
@@ -428,38 +496,52 @@
|
|
|
<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.adCpaBid11"
|
|
|
+ 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.adCpaBid122"
|
|
|
+ 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="浮动间隔">
|
|
|
+ <a-form-model-item v-if="configForm.biddingMethod === 'c'" label="浮动间隔" prop="floatingInterval">
|
|
|
<a-input-number
|
|
|
class="common-input"
|
|
|
- v-model="configForm.adCpaBid133"
|
|
|
+ v-model="configForm.floatingInterval"
|
|
|
placeholder="请输入"
|
|
|
/> 元
|
|
|
</a-form-model-item>
|
|
@@ -551,15 +633,22 @@
|
|
|
<a-radio-button :value="true">开启智能优选</a-radio-button>
|
|
|
<a-radio-button :value="false">关闭智能优选</a-radio-button>
|
|
|
</a-radio-group>
|
|
|
+ <span class="especial-label">*</span>
|
|
|
</a-form-model-item>
|
|
|
<div class="adver-position-radio">
|
|
|
- <a-form-model-item>
|
|
|
- <a-input
|
|
|
+ <a-form-model-item prop="creativeCallToAction">
|
|
|
+ <a-select
|
|
|
class="common-input-long"
|
|
|
- placeholder="请输入"
|
|
|
v-model="configForm.creativeCallToAction"
|
|
|
- allow-clear
|
|
|
- />
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ v-for="(item, index) in configForm.creativeOptions"
|
|
|
+ :key="index + 1"
|
|
|
+ :value="item"
|
|
|
+ >
|
|
|
+ {{ item }}
|
|
|
+ </a-select-option>
|
|
|
+ </a-select>
|
|
|
</a-form-model-item>
|
|
|
</div>
|
|
|
<a-form-model-item label="来源" :prop="getSource">
|
|
@@ -623,6 +712,9 @@
|
|
|
<script>
|
|
|
import AcountSearch from '@/views/modules/Statistics/components/Treeselect.vue';
|
|
|
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 moment from 'moment';
|
|
|
import BMF from 'browser-md5-file';
|
|
@@ -650,7 +742,10 @@ export default {
|
|
|
},
|
|
|
components: {
|
|
|
AcountSearch,
|
|
|
- SelectCheckAll
|
|
|
+ SelectCheckAll,
|
|
|
+ radioCheck,
|
|
|
+ linkMultiSelect,
|
|
|
+ DirectionalLogic
|
|
|
},
|
|
|
data() {
|
|
|
let handleConfirmValue = (rule, value, callback) => {
|
|
@@ -668,9 +763,24 @@ export default {
|
|
|
let handleCharacterLen20 = (rule, value, callback) => {
|
|
|
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)) {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ callback('最低出价+浮动间隔<最高出价');
|
|
|
+ }
|
|
|
+ };
|
|
|
return {
|
|
|
+ isLadderBlur: false,
|
|
|
+ ladderBlurTxt: '',
|
|
|
+ isAdCpaBid11Blur: false,
|
|
|
+ adCpaBid11BlurTxt: '',
|
|
|
isAdCpaBidBlur: false,
|
|
|
adCpaBidBlurTxt: '',
|
|
|
+ listArr: [],
|
|
|
+ regionCityListUrl: 'ctop/bytedanceAreaInfo/list',
|
|
|
defaultAdBudget: '',
|
|
|
adBudgetShowTitle: false,
|
|
|
adBudgetNum: 0,
|
|
@@ -688,6 +798,32 @@ export default {
|
|
|
value: 'industryId',
|
|
|
children: 'children'
|
|
|
},
|
|
|
+ ageArr: [
|
|
|
+ {
|
|
|
+ value: 'NONE',
|
|
|
+ label: '不限'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'AGE_BETWEEN_18_23',
|
|
|
+ label: '18-23岁'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'AGE_BETWEEN_24_30',
|
|
|
+ label: '24-30岁'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'AGE_BETWEEN_31_40',
|
|
|
+ label: '31-40岁'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'AGE_BETWEEN_41_49',
|
|
|
+ label: '41-49岁'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'AGE_ABOVE_50',
|
|
|
+ label: '50岁+'
|
|
|
+ }
|
|
|
+ ],
|
|
|
fileList: [],
|
|
|
isCoverImgDiv: false,
|
|
|
imageUrl: '',
|
|
@@ -738,6 +874,10 @@ export default {
|
|
|
adCpaBid: [
|
|
|
{required: true, message: '请输入', trigger: 'blur'}
|
|
|
],
|
|
|
+ floatingInterval: [
|
|
|
+ {required: true, message: '请输入', trigger: 'blur'},
|
|
|
+ {validator: floatingIntervalValidator, trigger: 'blur'}
|
|
|
+ ],
|
|
|
adName: [
|
|
|
{required: true, message: '请输入广告计划名称'},
|
|
|
{validator: handleCharacterLen100, trigger: 'blur'}
|
|
@@ -746,14 +886,26 @@ export default {
|
|
|
{required: true, message: '请输入', trigger: 'blur'},
|
|
|
{min: 1, max: 7, message: '请输入1-7个字', trigger: 'blur'}
|
|
|
],
|
|
|
+ selectiveOrientation: [{required: true, message: '请选择', trigger: 'change'}],
|
|
|
+ creativeCallToAction: [{required: true, message: '请选择', trigger: 'change'}],
|
|
|
adConvertType: [{required: true, message: '请选择', trigger: 'change'}],
|
|
|
adConvertId: [{required: true, message: '请选择', trigger: 'change'}],
|
|
|
creativeThirdIndustryIds: [{required: true, message: '请选择', trigger: 'change'}]
|
|
|
},
|
|
|
configForm: {
|
|
|
+ directionalLogic: '',
|
|
|
+ selectiveOrientation: undefined,
|
|
|
+ floatingInterval: 0,
|
|
|
+ ladderOne: '',
|
|
|
+ ladderTwo: '',
|
|
|
adCpaBid11: '',
|
|
|
adCpaBid22: '',
|
|
|
biddingMethod: 'a',
|
|
|
+ creativeOptions: [],
|
|
|
+ advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
|
|
|
+ adLocationType: 'HOME',
|
|
|
+ adCity: '',
|
|
|
+ adSelectCity: [],
|
|
|
defaultFormList: [],
|
|
|
productSellingPoints: [], // 商品买点
|
|
|
adBudgetMode: 'BUDGET_MODE_DAY', // 预算类型
|
|
@@ -781,7 +933,8 @@ export default {
|
|
|
checkboxChangeValue: [], // 广告位置-按照媒体指定位置
|
|
|
adDistrict: 'NONE', // 定向-区域
|
|
|
adGender: 'NONE', // 定向-性别
|
|
|
- adAge: 'NONE', // 定向-年龄
|
|
|
+ adAge: '', // 定向-年龄
|
|
|
+ adSelectAge: ['NONE'],
|
|
|
adRetargetingTagsInclude: 'NONE', // 定向-自定义
|
|
|
adSuperiorPopularityType: 'NONE', // 定向-媒体定向
|
|
|
adPlatform: 'NONE', // 定向-平台
|
|
@@ -814,6 +967,9 @@ export default {
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
|
+ selectOrientPlaceholder() {
|
|
|
+ return this.configForm.accountId ? '请选择已有定向包名称' : '请选择广告账户';
|
|
|
+ },
|
|
|
getEndIndex() {
|
|
|
return Number(this.configForm.dpLinkStartIndex);
|
|
|
},
|
|
@@ -876,6 +1032,7 @@ export default {
|
|
|
this.handleGetOptimizationObjective(paramsData);
|
|
|
}
|
|
|
this.handleGetCreativeClassification();
|
|
|
+ this.handleGetAdvertiserStrategy();
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
@@ -891,6 +1048,74 @@ export default {
|
|
|
methods: {
|
|
|
...mapGetters(['nickname', 'avatar', 'userInfo']),
|
|
|
moment,
|
|
|
+ handleSelectiveOrientation(e) {
|
|
|
+ console.log(e, '----选择定向包');
|
|
|
+ },
|
|
|
+ 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 = '';
|
|
|
+ }
|
|
|
+ },
|
|
|
handleAdCpaBidBlur(e) {
|
|
|
const defaultValue = e.target.value;
|
|
|
if (this.configForm.adBudget > 0 && defaultValue > this.configForm.adBudget) {
|
|
@@ -905,6 +1130,50 @@ export default {
|
|
|
this.isAdCpaBidBlur = false;
|
|
|
}
|
|
|
},
|
|
|
+ handleGetAdvertiserStrategy() {
|
|
|
+ const params = {
|
|
|
+ accountId: this.configForm.accountId,
|
|
|
+ landingType: this.configForm.campaignLandingType,
|
|
|
+ advancedCreativeType: 'ATTACHED_CREATIVE_NONE'
|
|
|
+ };
|
|
|
+ getAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getAdActionText', params)
|
|
|
+ .then(result => {
|
|
|
+ if (result.code === 0) {
|
|
|
+ this.configForm.creativeOptions = result.result;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ this.$message.error(result.message);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(error => {
|
|
|
+ console.log(error, 'eeee');
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 获取选中的城市
|
|
|
+ getSelectedCityArr(val) {
|
|
|
+ setTimeout(() => {
|
|
|
+ this.configForm.adSelectCity = val;
|
|
|
+ }, 200);
|
|
|
+ },
|
|
|
+ handleCheckedShowList(val) {
|
|
|
+ if (val.length) {
|
|
|
+ this.configForm.adSelectCity = val.map(item => item.code);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ this.configForm.adSelectCity = [];
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getAgeSelect(data) {
|
|
|
+ if (data.length > 1 && data.findIndex(item => item === 'NONE') === 0) {
|
|
|
+ data.splice(data.findIndex(item => item === 'NONE'), 1);
|
|
|
+ }
|
|
|
+ else if (data.length > 1 && data.findIndex(item => item === 'NONE') === data.length - 1) {
|
|
|
+ data.splice(0, data.length - 1);
|
|
|
+ }
|
|
|
+ else if (data.length === 0) {
|
|
|
+ data.push('NONE');
|
|
|
+ }
|
|
|
+ },
|
|
|
handleAdBudgetBlur(e) {
|
|
|
const adBudgetInput = e.target.value;
|
|
|
if (this.configForm.adCpaBid > adBudgetInput) {
|
|
@@ -927,7 +1196,7 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
handleAccountBudget(e) {
|
|
|
- this.configForm.accountBudget = Number(e.target.value).toFixed(2);
|
|
|
+ this.configForm.accountBudget = Number(Number(e.target.value).toFixed(2));
|
|
|
},
|
|
|
handleExportRules(value, min, max, callback) {
|
|
|
let cnReg = /([\u4e00-\u9fa5]|[\u3000-\u303F]|[\uFF00-\uFF60])/;
|
|
@@ -1055,10 +1324,14 @@ export default {
|
|
|
this.configForm.adDownloadUrl = detailData.adDownloadUrl || '';
|
|
|
this.configForm.adPackage = detailData.adPackage || '';
|
|
|
this.configForm.adConvertType = detailData.adConvertType || '';
|
|
|
- this.configForm.adConvertId = detailData.adConvertId || '';
|
|
|
this.configForm.adDistrict = detailData.adDistrict || 'NONE';
|
|
|
+ setTimeout(() => {
|
|
|
+ this.listArr = detailData.adCity.split(',');
|
|
|
+ this.configForm.adSelectCity = detailData.adCity.split(',');
|
|
|
+ }, 200);
|
|
|
this.configForm.adGender = detailData.adGender || 'NONE';
|
|
|
- this.configForm.adAge = detailData.adAge || 'NONE';
|
|
|
+ this.configForm.adLocationType = detailData.adLocationType;
|
|
|
+ this.configForm.adSelectAge = detailData.adAge.split(',');
|
|
|
this.configForm.adRetargetingTagsInclude = detailData.adRetargetingTagsInclude;
|
|
|
this.configForm.adSuperiorPopularityType = detailData.adSuperiorPopularityType;
|
|
|
this.configForm.adPlatform = detailData.adPlatform;
|
|
@@ -1155,6 +1428,9 @@ export default {
|
|
|
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);
|
|
@@ -1292,7 +1568,8 @@ export default {
|
|
|
reader.readAsDataURL(img);
|
|
|
},
|
|
|
beforeUpload(info) {
|
|
|
- const isZip = info.type.includes('png') || info.type.includes('jpg');
|
|
|
+ console.log(info, '----info----');
|
|
|
+ const isZip = info.type.includes('png') || info.type.includes('jpeg');
|
|
|
const fileOvesize = info.size > (1024 * 1024);
|
|
|
if (!isZip) {
|
|
|
this.$message.error('请上传正确类型的图片');
|
|
@@ -1396,6 +1673,12 @@ export default {
|
|
|
},
|
|
|
handleRelaxSure() {
|
|
|
let paramsFormData = this.configForm;
|
|
|
+ if (this.configForm.adDistrict === 'CITY') {
|
|
|
+ if (!this.configForm.adSelectCity.length) {
|
|
|
+ this.$message.error('请选择省市');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
if (!this.urlResult) {
|
|
|
this.$message.error('请上传图片');
|
|
|
return;
|
|
@@ -1440,12 +1723,14 @@ export default {
|
|
|
else if (paramsFormData.launchTimeInterval === 'a') {
|
|
|
paramsFormData.adScheduleTime = paramsFormData.scheduleTimeData;
|
|
|
}
|
|
|
- if (paramsFormData.adAndroidVersion = 'a') {
|
|
|
+ if (paramsFormData.adAndroidVersion === 'a') {
|
|
|
paramsFormData.adAndroidOsv = paramsFormData.androidChangeValue;
|
|
|
}
|
|
|
- else if (paramsFormData.adAndroidVersion = 'NONE') {
|
|
|
+ else {
|
|
|
paramsFormData.adAndroidOsv = 'NONE';
|
|
|
}
|
|
|
+ paramsFormData.adCity = paramsFormData.adSelectCity.join(',');
|
|
|
+ paramsFormData.adAge = paramsFormData.adSelectAge.join(',');
|
|
|
paramsFormData.productSellingPoints = this.configForm.defaultFormList && this.configForm.defaultFormList.map(item => item.value);
|
|
|
paramsFormData.creativeThirdIndustryId = paramsFormData.creativeThirdIndustryIds[2];
|
|
|
paramsFormData.creativeProductImageCode = this.md5Result;
|