|
@@ -439,7 +439,7 @@ li.chouzhen.first:before {
|
|
|
v-for="(item, index) in appList"
|
|
|
:key="item.appId"
|
|
|
>{{ item.appName }}({{ item.appVersion }}/{{
|
|
|
- item.platform == 1 ? 'android' : 'ios'
|
|
|
+ item.platform == 1 || item.platform == 2 ? 'android' : 'ios'
|
|
|
}})</a-select-option
|
|
|
>
|
|
|
</a-select>
|
|
@@ -672,9 +672,9 @@ li.chouzhen.first:before {
|
|
|
}
|
|
|
]"
|
|
|
>
|
|
|
- <a-radio-button :value="3">不限</a-radio-button>
|
|
|
- <a-radio-button :value="1">android</a-radio-button>
|
|
|
- <a-radio-button :value="2">ios</a-radio-button>
|
|
|
+ <a-radio-button :value="3" disabled>不限</a-radio-button>
|
|
|
+ <a-radio-button :value="1" disabled>android</a-radio-button>
|
|
|
+ <a-radio-button :value="2" disabled>ios</a-radio-button>
|
|
|
</a-radio-group>
|
|
|
</a-form-item>
|
|
|
<a-form-item
|
|
@@ -753,7 +753,10 @@ li.chouzhen.first:before {
|
|
|
</a-radio-group>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="" v-bind="tailFormItemLayout">
|
|
|
- <a-checkbox-group v-decorator="['expansion']" style="width:150%">
|
|
|
+ <a-checkbox-group
|
|
|
+ v-decorator="['expansion', { initialValue: [] }]"
|
|
|
+ style="width:150%"
|
|
|
+ >
|
|
|
<a-checkbox
|
|
|
value="noAgeBreak"
|
|
|
style="margin-bottom: 8px"
|
|
@@ -831,6 +834,7 @@ li.chouzhen.first:before {
|
|
|
<a-form-item label="投放时段">
|
|
|
<a-radio-group
|
|
|
button-style="solid"
|
|
|
+ @change="changeTimeData"
|
|
|
v-decorator="[
|
|
|
'scheduleTime',
|
|
|
{
|
|
@@ -848,7 +852,15 @@ li.chouzhen.first:before {
|
|
|
<a-radio-button :value="2">特定时间</a-radio-button>
|
|
|
</a-radio-group>
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="" v-bind="tailFormItemLayout">
|
|
|
+ <a-form-item
|
|
|
+ label=""
|
|
|
+ v-bind="tailFormItemLayout"
|
|
|
+ v-if="
|
|
|
+ getFormData('formOriginality', 'scheduleTime') &&
|
|
|
+ getFormData('formOriginality', 'scheduleTime') == 2
|
|
|
+ "
|
|
|
+ >
|
|
|
+ {{ createArr(scheduleTimeData, 0, 24, 24) }}
|
|
|
<scheduleTime
|
|
|
style="width:100%"
|
|
|
:scheduleTime.sync="scheduleTimeData"
|
|
@@ -859,171 +871,26 @@ li.chouzhen.first:before {
|
|
|
</a-row>
|
|
|
<a-row :gutter="16">
|
|
|
<a-col :span="16">
|
|
|
- <a-form-item label="投放方式">
|
|
|
- <a-radio-group
|
|
|
- button-style="solid"
|
|
|
- v-decorator="[
|
|
|
- 'speed',
|
|
|
- {
|
|
|
- rules: [
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '创意展现方式必选'
|
|
|
- }
|
|
|
- ],
|
|
|
- initialValue: 1
|
|
|
- }
|
|
|
- ]"
|
|
|
- >
|
|
|
- <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-item>
|
|
|
- </a-col>
|
|
|
- </a-row>
|
|
|
-
|
|
|
- <a-row :gutter="16">
|
|
|
- <a-col :span="16">
|
|
|
- <a-form-item label="广告位置">
|
|
|
- <checkBoxGroup
|
|
|
- :options="[
|
|
|
- { label: '优选广告位', value: 1 },
|
|
|
- { label: '上下滑大屏广告', value: 6 },
|
|
|
- { label: '视频播放页广告', value: 3 },
|
|
|
- { label: '联盟广告', value: 5 }
|
|
|
- ]"
|
|
|
+ <a-form-item label="单计划组数量">
|
|
|
+ <a-input-number
|
|
|
v-decorator="[
|
|
|
- 'sceneId',
|
|
|
+ 'dayBudget',
|
|
|
{
|
|
|
rules: [
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '转化目标必选'
|
|
|
+ message: '不小于500,不超过100000000,仅支持输入自然数'
|
|
|
}
|
|
|
- ],
|
|
|
- initialValue: [1]
|
|
|
- }
|
|
|
- ]"
|
|
|
- @change="changeData"
|
|
|
- />
|
|
|
- </a-form-item>
|
|
|
- </a-col>
|
|
|
- </a-row>
|
|
|
- <a-row :gutter="16">
|
|
|
- <a-col :span="16">
|
|
|
- <a-form-item label="单计划组数量">
|
|
|
- <a-input-number
|
|
|
- v-decorator="[
|
|
|
- 'unitNum',
|
|
|
- {
|
|
|
- initialValue: 60,
|
|
|
- rules: [{ required: true, message: '单计划组数量必填' }]
|
|
|
- }
|
|
|
- ]"
|
|
|
- :min="1"
|
|
|
- style="width: 100%"
|
|
|
- placeholder="仅支持输入自然数"
|
|
|
- :precision="0"
|
|
|
- />
|
|
|
- </a-form-item>
|
|
|
- </a-col>
|
|
|
- </a-row>
|
|
|
- <a-row :gutter="16">
|
|
|
- <a-col :span="16">
|
|
|
- <a-form-item label="组下素材数量">
|
|
|
- <a-input-number
|
|
|
- v-decorator="[
|
|
|
- 'materialNum',
|
|
|
- {
|
|
|
- initialValue: 15,
|
|
|
- rules: [{ required: true, message: '组下素材数量必填' }]
|
|
|
+ ]
|
|
|
}
|
|
|
]"
|
|
|
- style="width: 100%"
|
|
|
- placeholder="仅支持输入自然数"
|
|
|
+ :min="500"
|
|
|
+ :max="100000000"
|
|
|
+ style="width: 90%"
|
|
|
+ placeholder="不小于500,不超过100000000,仅支持输入自然数"
|
|
|
:precision="0"
|
|
|
- :max="15"
|
|
|
- :min="1"
|
|
|
/>
|
|
|
- </a-form-item>
|
|
|
- </a-col>
|
|
|
- </a-row>
|
|
|
- <a-row :gutter="16">
|
|
|
- <a-col :span="16">
|
|
|
- <a-form-item label="行动号召">
|
|
|
- <!-- mode="multiple" -->
|
|
|
- <a-select
|
|
|
- mode="multiple"
|
|
|
- v-decorator="[
|
|
|
- 'actionBarText',
|
|
|
- { rules: [{ required: true, message: '请选择行动号召按钮文案' }] }
|
|
|
- ]"
|
|
|
- showSearch
|
|
|
- allowClear
|
|
|
- placeholder="选择行动号召按钮文案"
|
|
|
- optionFilterProp="children"
|
|
|
- :filterOption="filterOption"
|
|
|
- >
|
|
|
- <a-select-option
|
|
|
- v-for="appModel in actionBarTextList"
|
|
|
- :key="appModel.id"
|
|
|
- :value="appModel.actionBarText"
|
|
|
- >
|
|
|
- {{ appModel.actionBarText }}
|
|
|
- </a-select-option>
|
|
|
- </a-select>
|
|
|
- </a-form-item>
|
|
|
- </a-col>
|
|
|
- </a-row>
|
|
|
-
|
|
|
- <a-row :gutter="16">
|
|
|
- <a-col :span="16">
|
|
|
- <a-form-item label="广告语">
|
|
|
- <div
|
|
|
- style="position:relative"
|
|
|
- v-for="(item, index) in descriptionList"
|
|
|
- :key="index"
|
|
|
- >
|
|
|
- <a-textarea
|
|
|
- class="rending"
|
|
|
- placeholder="请输入广告语"
|
|
|
- @change="descriptionchange(item.value, index)"
|
|
|
- v-model.trim="item.value"
|
|
|
- :autosize="{ minRows: 2, maxRows: 6 }"
|
|
|
- :max-length="30"
|
|
|
- ></a-textarea>
|
|
|
- <p
|
|
|
- style="
|
|
|
- font-size: 12px;
|
|
|
- color: #b6bbc7;
|
|
|
- letter-spacing: 0.3px;
|
|
|
- text-align: right;
|
|
|
- line-height: 30px;
|
|
|
- position: absolute;
|
|
|
- bottom: 0;
|
|
|
- right: 6px;
|
|
|
- width: 100%;
|
|
|
- margin-bottom: 0;
|
|
|
- border: 0;
|
|
|
- "
|
|
|
- >
|
|
|
- {{ item.value.length }}/30
|
|
|
- <!-- {{ getFormData('description').length }}/30 -->
|
|
|
- </p>
|
|
|
- <div style="position:absolute;right:-50px;top:-10px">
|
|
|
- <a-icon
|
|
|
- type="plus"
|
|
|
- @click="addDescription()"
|
|
|
- style="margin-right:15px"
|
|
|
- />
|
|
|
- <a-icon
|
|
|
- type="minus"
|
|
|
- @click="removeDescription(index)"
|
|
|
- v-if="descriptionList.length > 1"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ 元
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
|
</a-row>
|
|
@@ -1057,20 +924,76 @@ li.chouzhen.first:before {
|
|
|
]"
|
|
|
>
|
|
|
<a-select-option :value="2">行为数</a-select-option>
|
|
|
+ <!-- v-if="getFormData('campaignType') == 2 && groupTypeData.isActivate == 1 -->
|
|
|
<a-select-option :value="180">激活</a-select-option>
|
|
|
- <a-select-option :value="53">表单提交</a-select-option>
|
|
|
- <a-select-option :value="394">订单提交</a-select-option>
|
|
|
- <a-select-option :value="348">使用有效线索</a-select-option>
|
|
|
- <a-select-option :value="383">授信出价</a-select-option>
|
|
|
- <a-select-option :value="384">完件出价</a-select-option>
|
|
|
- <a-select-option :value="190">付费出价</a-select-option>
|
|
|
- <a-select-option :value="191">首日ROI</a-select-option>
|
|
|
- <a-select-option :value="396">注册优化目标</a-select-option>
|
|
|
- <a-select-option :value="324">唤起应用</a-select-option>
|
|
|
- <a-select-option :value="715">微信复制优化目标</a-select-option>
|
|
|
- <a-select-option :value="716">多转化事件</a-select-option>
|
|
|
- <a-select-option :value="717">广告观看次数</a-select-option>
|
|
|
- <a-select-option :value="773">关键行为</a-select-option>
|
|
|
+ <a-select-option
|
|
|
+ :value="53"
|
|
|
+ v-if="groupTypeData && groupTypeData.isFormSubmit == '1'"
|
|
|
+ >表单提交</a-select-option
|
|
|
+ >
|
|
|
+
|
|
|
+ <a-select-option
|
|
|
+ :value="394"
|
|
|
+ v-if="groupTypeData && groupTypeData.isOrderSubmit == '1'"
|
|
|
+ >订单提交</a-select-option
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ :value="348"
|
|
|
+ v-if="groupTypeData && groupTypeData.isValidClue == '1'"
|
|
|
+ >使用有效线索</a-select-option
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ :value="383"
|
|
|
+ v-if="groupTypeData && groupTypeData.isCreditGrant == '1'"
|
|
|
+ >授信出价</a-select-option
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ :value="384"
|
|
|
+ v-if="groupTypeData && groupTypeData.isWanJian == '1'"
|
|
|
+ >完件出价</a-select-option
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ :value="190"
|
|
|
+ v-if="groupTypeData && groupTypeData.isPurchase == '1'"
|
|
|
+ >付费出价</a-select-option
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ :value="191"
|
|
|
+ v-if="groupTypeData && groupTypeData.isFirstdayRoi == '1'"
|
|
|
+ >首日ROI</a-select-option
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ :value="396"
|
|
|
+ v-if="groupTypeData && groupTypeData.isRegister == '1'"
|
|
|
+ >注册优化目标</a-select-option
|
|
|
+ >
|
|
|
+
|
|
|
+ <a-select-option
|
|
|
+ :value="324"
|
|
|
+ v-if="groupTypeData && groupTypeData.isAppInvoked == '1'"
|
|
|
+ >唤起应用</a-select-option
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ :value="715"
|
|
|
+ v-if="groupTypeData && groupTypeData.isAddWechat == '1'"
|
|
|
+ >微信复制优化目标</a-select-option
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ :value="716"
|
|
|
+ v-if="groupTypeData && groupTypeData.isMultiConversion == '1'"
|
|
|
+ >多转化事件</a-select-option
|
|
|
+ >
|
|
|
+ <a-select-option
|
|
|
+ :value="717"
|
|
|
+ v-if="groupTypeData && groupTypeData.isAdWatchTimes == '1'"
|
|
|
+ >广告观看次数</a-select-option
|
|
|
+ >
|
|
|
+
|
|
|
+ <a-select-option
|
|
|
+ :value="773"
|
|
|
+ v-if="groupTypeData && groupTypeData.isKeyAction == '1'"
|
|
|
+ >关键行为</a-select-option
|
|
|
+ >
|
|
|
</a-select>
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
@@ -1089,24 +1012,19 @@ li.chouzhen.first:before {
|
|
|
<a-row :gutter="16">
|
|
|
<a-col :span="16">
|
|
|
<a-form-item label="转化目标出价">
|
|
|
- <a-input
|
|
|
- style="width:300px"
|
|
|
+ <a-input-number
|
|
|
v-decorator="[
|
|
|
'cpaBid',
|
|
|
{
|
|
|
- rules: [
|
|
|
- { required: true, message: ' ' },
|
|
|
- { validator: cpaBidValid }
|
|
|
- ]
|
|
|
+ rules: [{ required: true, message: '转化目标出价必填' }]
|
|
|
}
|
|
|
]"
|
|
|
- >
|
|
|
- </a-input>
|
|
|
- <br />
|
|
|
- <span style="color:red"
|
|
|
- >单出价请输入单数字,阶梯出价请用/隔开 例如10/12,区间出价请用-链接
|
|
|
- 例如20-25</span
|
|
|
- >
|
|
|
+ :min="0"
|
|
|
+ :max="100000000"
|
|
|
+ style="width: 90%"
|
|
|
+ :precision="2"
|
|
|
+ />
|
|
|
+ 元
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
|
</a-row>
|
|
@@ -1135,42 +1053,6 @@ li.chouzhen.first:before {
|
|
|
>
|
|
|
</a-select>
|
|
|
</a-form-item>
|
|
|
- <!-- <a-form-item label="深度转化目标">
|
|
|
- <a-select
|
|
|
- style="width:300px"
|
|
|
- size="default"
|
|
|
- allowClear
|
|
|
- v-decorator="['deepConversionType']"
|
|
|
- >
|
|
|
- <a-select-option :value="3">
|
|
|
- 付费
|
|
|
- </a-select-option>
|
|
|
- <a-select-option :value="7">
|
|
|
- 次日留存
|
|
|
- </a-select-option>
|
|
|
- <a-select-option :value="10">
|
|
|
- 完件
|
|
|
- </a-select-option>
|
|
|
- <a-select-option :value="11">
|
|
|
- 授信
|
|
|
- </a-select-option>
|
|
|
- <a-select-option :value="13">
|
|
|
- 添加购物车
|
|
|
- </a-select-option>
|
|
|
- <a-select-option :value="14">
|
|
|
- 提交订单
|
|
|
- </a-select-option>
|
|
|
- <a-select-option :value="15">
|
|
|
- 购买
|
|
|
- </a-select-option>
|
|
|
- <a-select-option :value="44">
|
|
|
- 有效线索
|
|
|
- </a-select-option>
|
|
|
- <a-select-option :value="92">
|
|
|
- 付费roi
|
|
|
- </a-select-option>
|
|
|
- </a-select>
|
|
|
- </a-form-item> -->
|
|
|
</a-col>
|
|
|
</a-row>
|
|
|
<a-row :gutter="16" v-if="groupTypeData">
|
|
@@ -1184,12 +1066,14 @@ li.chouzhen.first:before {
|
|
|
"
|
|
|
>
|
|
|
<a-form-item label="深度转化出价">
|
|
|
- <a-input style="width:300px" v-decorator="['deepConversionBid']"> </a-input>
|
|
|
- <br />
|
|
|
- <span style="color:red"
|
|
|
- >单出价请输入单数字,阶梯出价请用/隔开 例如10/12,区间出价请用-链接
|
|
|
- 例如20-25</span
|
|
|
- >
|
|
|
+ <a-input-number
|
|
|
+ v-decorator="['deepConversionBid']"
|
|
|
+ :min="0"
|
|
|
+ :max="100000000"
|
|
|
+ style="width: 90%"
|
|
|
+ :precision="2"
|
|
|
+ />
|
|
|
+ 元
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
|
</a-row>
|
|
@@ -1336,6 +1220,7 @@ export default {
|
|
|
formInformation: this.$form.createForm(this), //设置基本信息表单
|
|
|
formTargetApp: this.$form.createForm(this), //目标应用编辑表单
|
|
|
formDirectional: this.$form.createForm(this), //定向包编辑表单
|
|
|
+ platformOsDisabled: false,
|
|
|
formOptimize: this.$form.createForm(this), //优化目标表单
|
|
|
formOriginality: this.$form.createForm(this), //创意表单
|
|
|
sumbitLoading: false,
|
|
@@ -1389,7 +1274,7 @@ export default {
|
|
|
showCheckPerson: [],
|
|
|
sumContent: 0,
|
|
|
searchTemplate: '',
|
|
|
- scheduleTimeData:'',
|
|
|
+ scheduleTimeData: '',
|
|
|
//优化目标参数
|
|
|
groupTypeData: null,
|
|
|
//创意信息参数
|
|
@@ -1546,6 +1431,7 @@ export default {
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
+ this.getIsActivate(null)
|
|
|
}
|
|
|
},
|
|
|
activeKey: function(n, o) {
|
|
@@ -1629,6 +1515,43 @@ export default {
|
|
|
methods: {
|
|
|
...mapGetters(['userInfo']),
|
|
|
moment,
|
|
|
+ /*
|
|
|
+ @params str{ String} 要截取的字符串
|
|
|
+ @params start { Number } 首次截取的开始索引,每次截取后递增
|
|
|
+ @params end { Number } 首次截取的结束索引,每次截取后递增
|
|
|
+ @params unit { Number } 每一组个数
|
|
|
+ */
|
|
|
+ // 将字符串转换成unit个字符为一组的数组
|
|
|
+
|
|
|
+ createArr(str, start, end, unit) {
|
|
|
+ if (str) {
|
|
|
+ let arr = [] //保存每次截取后的字符串
|
|
|
+ let counts = Math.ceil(str.length / unit) //循环截取的次数,向上取整
|
|
|
+
|
|
|
+ for (let i = 0; i < counts; i++) {
|
|
|
+ let newStr = str.substring(start, end)
|
|
|
+ arr.push(newStr.split(''))
|
|
|
+ start = end
|
|
|
+ end += unit
|
|
|
+ }
|
|
|
+ return arr
|
|
|
+ }
|
|
|
+ },
|
|
|
+ changeTimeData() {
|
|
|
+ this.scheduleTimeData = ''
|
|
|
+ },
|
|
|
+ getIsActivate(val) {
|
|
|
+ let params = {}
|
|
|
+ params.accountId = this.accountIds
|
|
|
+ params.campaignType = this.getFormData('formProject', 'campaignType')
|
|
|
+ params.appId = val
|
|
|
+
|
|
|
+ this.getAction('/kuaishou/batch/getIsActivate', params).then(res => {
|
|
|
+ if (res.success) {
|
|
|
+ this.groupTypeData = res.result
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
handleConfirmValue(rule, value, callback) {
|
|
|
if (Math.abs(value[0] - value[1]) < 5) {
|
|
|
callback('自定义年龄段需要间隔大于5岁')
|
|
@@ -1649,6 +1572,10 @@ export default {
|
|
|
this.formTargetApp.setFieldsValue({ siteId: undefined })
|
|
|
}
|
|
|
})
|
|
|
+ this.getIsActivate(e)
|
|
|
+
|
|
|
+ var data = this.appList.filter(item => item.appId == e)[0]
|
|
|
+ this.formDirectional.setFieldsValue({ platformOs: data.platform == 1 || data.platform == 2 ? 1 : 2 })
|
|
|
},
|
|
|
personSelect() {
|
|
|
if (this.people === '1' || this.people === '2') {
|
|
@@ -1996,217 +1923,163 @@ export default {
|
|
|
})
|
|
|
},
|
|
|
handleSubmit() {
|
|
|
- let formProjectData = new Promise((resolve, reject) => {
|
|
|
- this.formProject.validateFields((err, values) => {
|
|
|
- if (!err) {
|
|
|
- if (this.accountIds.length > 0) {
|
|
|
- resolve({ ...values, accountIds: this.accountIds })
|
|
|
+ if (this.accountIds) {
|
|
|
+ let formProjectData = new Promise((resolve, reject) => {
|
|
|
+ this.formProject.validateFields((err, values) => {
|
|
|
+ if (!err) {
|
|
|
+ if (this.accountIds.length > 0) {
|
|
|
+ resolve({ ...values, accountIds: this.accountIds })
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ reject('选择项目表单出错')
|
|
|
}
|
|
|
- } else {
|
|
|
- reject('选择项目表单出错')
|
|
|
- }
|
|
|
- })
|
|
|
- })
|
|
|
- let formInformationData = new Promise((resolve, reject) => {
|
|
|
- this.formInformation.validateFields((err, values) => {
|
|
|
- if (!err) {
|
|
|
- resolve({ ...values })
|
|
|
- } else {
|
|
|
- reject('基本信息出错')
|
|
|
- }
|
|
|
- })
|
|
|
- })
|
|
|
- let formOptimizeData = new Promise((resolve, reject) => {
|
|
|
- this.formOptimize.validateFields((err, values) => {
|
|
|
- if (!err) {
|
|
|
- resolve({ ...values })
|
|
|
- } else {
|
|
|
- reject('优化目标出错')
|
|
|
- }
|
|
|
- })
|
|
|
- })
|
|
|
- let formTargetAppData = new Promise((resolve, reject) => {
|
|
|
- this.formTargetApp.validateFields((err, values) => {
|
|
|
- if (!err) {
|
|
|
- resolve({ ...values })
|
|
|
- } else {
|
|
|
- reject('目标应用出错')
|
|
|
- }
|
|
|
- })
|
|
|
- })
|
|
|
- let formDirectionalData = new Promise((resolve, reject) => {
|
|
|
- this.formDirectional.validateFields((err, values) => {
|
|
|
- if (!err) {
|
|
|
- resolve({ ...values })
|
|
|
- } else {
|
|
|
- reject('定向包出错')
|
|
|
- }
|
|
|
+ })
|
|
|
})
|
|
|
- })
|
|
|
- let formOriginalityData = new Promise((resolve, reject) => {
|
|
|
- this.formOriginality.validateFields((err, values) => {
|
|
|
- if (!err) {
|
|
|
- resolve({ ...values })
|
|
|
- } else {
|
|
|
- reject('创意信息出错')
|
|
|
- }
|
|
|
+ let formInformationData = new Promise((resolve, reject) => {
|
|
|
+ this.formInformation.validateFields((err, values) => {
|
|
|
+ if (!err) {
|
|
|
+ resolve({ ...values })
|
|
|
+ } else {
|
|
|
+ reject('基本信息出错')
|
|
|
+ }
|
|
|
+ })
|
|
|
})
|
|
|
- })
|
|
|
- Promise.all([
|
|
|
- formProjectData,
|
|
|
- formInformationData,
|
|
|
- formOptimizeData,
|
|
|
- formTargetAppData,
|
|
|
- formDirectionalData,
|
|
|
- formOriginalityData
|
|
|
- ])
|
|
|
- .then(res => {
|
|
|
- if (this.multipleBidDataDrawer.length === 0 || this.descriptionList === 0) {
|
|
|
- this.$message.error('请填写完整')
|
|
|
- return
|
|
|
- }
|
|
|
- let isNotComplete = this.multipleBidDataDrawer.findIndex(item => {
|
|
|
- return item.appId === null || item.appId === '' || item.appId === undefined
|
|
|
+ let formOptimizeData = new Promise((resolve, reject) => {
|
|
|
+ this.formOptimize.validateFields((err, values) => {
|
|
|
+ if (!err) {
|
|
|
+ resolve({ ...values })
|
|
|
+ } else {
|
|
|
+ reject('优化目标出错')
|
|
|
+ }
|
|
|
})
|
|
|
- if (isNotComplete > -1) {
|
|
|
- this.$message.error('未选择应用')
|
|
|
- return
|
|
|
- }
|
|
|
- let isNotComplete2 = this.descriptionList.findIndex(item => {
|
|
|
- return item.value === ''
|
|
|
+ })
|
|
|
+ let formTargetAppData = new Promise((resolve, reject) => {
|
|
|
+ this.formTargetApp.validateFields((err, values) => {
|
|
|
+ if (!err) {
|
|
|
+ resolve({ ...values })
|
|
|
+ } else {
|
|
|
+ reject('目标应用出错')
|
|
|
+ }
|
|
|
})
|
|
|
- if (isNotComplete2 > -1) {
|
|
|
- this.$message.error('广告语未填')
|
|
|
- return
|
|
|
- }
|
|
|
- this.sumbitLoading = true
|
|
|
- let params = { ...res[0], ...res[1], ...res[2], ...res[3], ...res[4], ...res[5] }
|
|
|
- params.useAppMarket = params.useAppMarket ? 1 : 0
|
|
|
- params.appStore = params.appStore ? JSON.stringify(params.appStore) : '[]'
|
|
|
- params.crowdArray = this.finallyRightTree.map(item => {
|
|
|
- return {
|
|
|
- accountId: item.key,
|
|
|
- population:
|
|
|
- item.people === '0'
|
|
|
- ? []
|
|
|
- : item.people === '1' || item.people === '3'
|
|
|
- ? item.incluedSelectedRowKeys
|
|
|
- : [],
|
|
|
- excludePopulation:
|
|
|
- item.people === '0'
|
|
|
- ? []
|
|
|
- : item.people === '2' || item.people === '3'
|
|
|
- ? item.excludeSelectedRowKeys
|
|
|
- : []
|
|
|
+ })
|
|
|
+ let formDirectionalData = new Promise((resolve, reject) => {
|
|
|
+ this.formDirectional.validateFields((err, values) => {
|
|
|
+ if (!err) {
|
|
|
+ resolve({ ...values })
|
|
|
+ } else {
|
|
|
+ reject('定向包出错')
|
|
|
}
|
|
|
})
|
|
|
- params.appInfoArray = this.multipleBidDataDrawer
|
|
|
- params.creativeArray = this.creativeTagData.map(item => {
|
|
|
- return {
|
|
|
- ...item,
|
|
|
- creativeCategory: item.creativeCategory
|
|
|
- ? item.creativeCategory[item.creativeCategory.length - 1]
|
|
|
- : '',
|
|
|
- creativeTag: JSON.stringify(item.creativeTag)
|
|
|
+ })
|
|
|
+ let formOriginalityData = new Promise((resolve, reject) => {
|
|
|
+ this.formOriginality.validateFields((err, values) => {
|
|
|
+ if (!err) {
|
|
|
+ resolve({ ...values })
|
|
|
+ } else {
|
|
|
+ reject('创意信息出错')
|
|
|
}
|
|
|
})
|
|
|
- if (this.fansStarType == 0) {
|
|
|
- params.fansStar = []
|
|
|
- }
|
|
|
- if (this.deviceType == 0) {
|
|
|
- params.deviceBrand = []
|
|
|
- }
|
|
|
- if (this.priceType == 0) {
|
|
|
- params.devicePrice = []
|
|
|
- }
|
|
|
- if (this.budgetType === '2') {
|
|
|
- params.campaignDayBudget = params.campaignDayBudget * 1000
|
|
|
- } else {
|
|
|
- params.campaignDayBudget = 0
|
|
|
- }
|
|
|
- if (this.dayBudgetType === '2') {
|
|
|
- params.unitDayBudget = params.unitDayBudget * 1000
|
|
|
- } else {
|
|
|
- params.unitDayBudget = 0
|
|
|
- }
|
|
|
- if (params.cpaBid) {
|
|
|
- if ((params.cpaBid + '').includes('/')) {
|
|
|
- let bidArr = params.cpaBid.split('/')
|
|
|
- for (let index = 0; index < bidArr.length; index++) {
|
|
|
- bidArr[index] = bidArr[index] * 1000
|
|
|
- }
|
|
|
- params.cpaBid = bidArr.join('/')
|
|
|
- } else if ((params.cpaBid + '').includes('-')) {
|
|
|
- let bidArr = params.cpaBid.split('-')
|
|
|
- for (let index = 0; index < bidArr.length; index++) {
|
|
|
- bidArr[index] = bidArr[index] * 1000
|
|
|
+ })
|
|
|
+ Promise.all([
|
|
|
+ formProjectData,
|
|
|
+ formInformationData,
|
|
|
+ formOptimizeData,
|
|
|
+ formTargetAppData,
|
|
|
+ formDirectionalData,
|
|
|
+ formOriginalityData
|
|
|
+ ])
|
|
|
+ .then(res => {
|
|
|
+ this.sumbitLoading = true
|
|
|
+ let params = { ...res[0], ...res[1], ...res[2], ...res[3], ...res[4], ...res[5] }
|
|
|
+ params.accountId = this.accountIds
|
|
|
+ params.userId = this.userInfo().id
|
|
|
+ params.useAppMarket = params.useAppMarket ? 1 : 0
|
|
|
+ params.appStore = params.appStore ? JSON.stringify(params.appStore) : '[]'
|
|
|
+ params.regionIds = this.district == 'NONE' ? [] : this.regionList
|
|
|
+ params.ruleEnable = params.ruleEnable ? 1 : 2
|
|
|
+ if (params.ruleEnable == 1) {
|
|
|
+ if (!params.campaignNameRule && !params.unitNameRule && !params.creativeNameRule) {
|
|
|
+ this.$message.error('自定义命名规则开启,至少任一规则不可为空')
|
|
|
}
|
|
|
- params.cpaBid = bidArr.join('-')
|
|
|
+ }
|
|
|
+ if (this.ageType == 'noLimit') {
|
|
|
+ params.minAge = ''
|
|
|
+ params.maxAge = ''
|
|
|
+ params.agesRange = []
|
|
|
+ } else if (this.ageType == 'ageLimit') {
|
|
|
+ params.minAge = ''
|
|
|
+ params.maxAge = ''
|
|
|
+ params.agesRange = params.agesRange
|
|
|
+ } else if (this.ageType == 'ageCustom') {
|
|
|
+ params.minAge = params.age[0]
|
|
|
+ params.maxAge = params.age[1]
|
|
|
+ params.agesRange = []
|
|
|
+ }
|
|
|
+ params.isOpen = 1
|
|
|
+
|
|
|
+ if (params.expansion.includes('noAgeBreak')) {
|
|
|
+ params.noAgeBreak = 1
|
|
|
} else {
|
|
|
- params.cpaBid = params.cpaBid * 1000
|
|
|
+ params.noAgeBreak = 2
|
|
|
}
|
|
|
- } else {
|
|
|
- params.cpaBid = 0
|
|
|
- }
|
|
|
- if (params.deepConversionBid && params.deepConversionBid != 0) {
|
|
|
- if ((params.deepConversionBid + '').includes('/')) {
|
|
|
- let bidArr = params.deepConversionBid.split('/')
|
|
|
- for (let index = 0; index < bidArr.length; index++) {
|
|
|
- bidArr[index] = bidArr[index] * 1000
|
|
|
- }
|
|
|
- params.deepConversionBid = bidArr.join('/')
|
|
|
- } else if ((params.deepConversionBid + '').includes('-')) {
|
|
|
- let bidArr = params.deepConversionBid.split('-')
|
|
|
- for (let index = 0; index < bidArr.length; index++) {
|
|
|
- bidArr[index] = bidArr[index] * 1000
|
|
|
- }
|
|
|
- params.deepConversionBid = bidArr.join('-')
|
|
|
+ if (params.expansion.includes('noGenderBreak')) {
|
|
|
+ params.noGenderBreak = 1
|
|
|
} else {
|
|
|
- params.deepConversionBid = params.deepConversionBid * 1000
|
|
|
+ params.noGenderBreak = 2
|
|
|
}
|
|
|
- } else {
|
|
|
- params.deepConversionBid = 0
|
|
|
- }
|
|
|
- // if (params.creativeCategory && params.creativeCategory.length > 0) {
|
|
|
- // params.creativeCategory = params.creativeCategory[params.creativeCategory.length - 1]
|
|
|
- // } else {
|
|
|
- // params.creativeCategory = undefined
|
|
|
- // }
|
|
|
- // params.creativeTag = params.creativeTag ? JSON.stringify(params.creativeTag) : undefined
|
|
|
- // params.appIdArray = this.multipleBidData.map(res => {
|
|
|
- // return res.apptemId
|
|
|
- // })
|
|
|
- params.description = JSON.stringify(
|
|
|
- this.descriptionList.map(item => {
|
|
|
- return item.value
|
|
|
- })
|
|
|
- )
|
|
|
- params.singleAppid = 1
|
|
|
- params.actionBarText = params.actionBarText
|
|
|
- params.deepConversionType = params.deepConversionType ? params.deepConversionType : ''
|
|
|
- params.deepConversionBid = params.deepConversionBid ? params.deepConversionBid : ''
|
|
|
- if (this.$route.query.id) {
|
|
|
- params.id = this.$route.query.id
|
|
|
- }
|
|
|
- params.userId = this.userInfo().id
|
|
|
- this.postDataAction('/dimension/kuaiShouDimensionStrategy/insertOrUpdate', params).then(res => {
|
|
|
- if (res.success) {
|
|
|
- this.sumbitLoading = false
|
|
|
+ if (params.expansion.includes('noAreaBreak')) {
|
|
|
+ params.noAreaBreak = 1
|
|
|
+ } else {
|
|
|
+ params.noAreaBreak = 2
|
|
|
+ }
|
|
|
+
|
|
|
+ params.population =
|
|
|
+ this.people === '0'
|
|
|
+ ? []
|
|
|
+ : this.people === '1' || this.people === '3'
|
|
|
+ ? this.incluedSelectedRowKeys
|
|
|
+ : []
|
|
|
+ params.excludePopulation =
|
|
|
+ this.people === '0'
|
|
|
+ ? []
|
|
|
+ : this.people === '2' || this.people === '3'
|
|
|
+ ? this.excludeSelectedRowKeys
|
|
|
+ : []
|
|
|
+ params.cpaBid = params.cpaBid * 1000
|
|
|
+ params.deepConversionBid = params.deepConversionBid ? params.deepConversionBid * 1000 : null
|
|
|
+
|
|
|
+ params.singleAppid = 1
|
|
|
+ params.deepConversionType = params.deepConversionType ? params.deepConversionType : ''
|
|
|
+
|
|
|
+ // params.
|
|
|
+ if (this.$route.query.id) {
|
|
|
+ params.id = this.$route.query.id
|
|
|
+ }
|
|
|
+ params.userId = this.userInfo().id
|
|
|
+ this.postDataAction('/hosting/kuaishouHostingTemplate/add', params).then(res => {
|
|
|
+ if (res.success) {
|
|
|
+ this.sumbitLoading = false
|
|
|
|
|
|
- if (params.id) {
|
|
|
- this.$bus.$emit('remove', `/autoLaunch/creatMaterialTest?id=${params.id}`)
|
|
|
+ if (params.id) {
|
|
|
+ this.$bus.$emit(
|
|
|
+ 'remove',
|
|
|
+ `/autoLaunch/trusteeship/creatMaterialTest?id=${params.id}`
|
|
|
+ )
|
|
|
+ } else {
|
|
|
+ this.$bus.$emit('remove', '/autoLaunch/trusteeship/creatMaterialTest')
|
|
|
+ }
|
|
|
+ this.$router.replace('/autoLaunch/material-test')
|
|
|
} else {
|
|
|
- this.$bus.$emit('remove', '/autoLaunch/creatMaterialTest')
|
|
|
+ this.sumbitLoading = false
|
|
|
}
|
|
|
- this.$router.replace('/autoLaunch/material-test')
|
|
|
- } else {
|
|
|
- this.sumbitLoading = false
|
|
|
- }
|
|
|
+ })
|
|
|
})
|
|
|
- })
|
|
|
- .catch(err => {
|
|
|
- this.$message.error('请填写完整')
|
|
|
- })
|
|
|
+ .catch(err => {
|
|
|
+ this.$message.error('请填写完整')
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ this.$message.error('请选择账户')
|
|
|
+ }
|
|
|
},
|
|
|
clearAllData() {
|
|
|
this.$router.replace('/autoLaunch/material-test')
|