|
@@ -6,8 +6,8 @@
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form-item label="转化跟踪方式">
|
|
<a-form-item label="转化跟踪方式">
|
|
<a-select placeholder="请选择">
|
|
<a-select placeholder="请选择">
|
|
- <a-select-option value="shanghai">Zone one</a-select-option>
|
|
|
|
- <a-select-option value="beijing">Zone two</a-select-option>
|
|
|
|
|
|
+ <a-select-option value="XIANSUOTONG">线索通</a-select-option>
|
|
|
|
+ <a-select-option value="XIANSUOTONG_API">线索同API</a-select-option>
|
|
</a-select>
|
|
</a-select>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="优化目标">
|
|
<a-form-item label="优化目标">
|
|
@@ -33,12 +33,49 @@
|
|
<h1>设置投放位置</h1>
|
|
<h1>设置投放位置</h1>
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form-item label="广告位置">
|
|
<a-form-item label="广告位置">
|
|
- <a-radio-group>
|
|
|
|
- <a-radio value="1">系统优选广告位</a-radio>
|
|
|
|
- <a-radio value="2">首选媒体</a-radio>
|
|
|
|
- <a-radio value="3">首选场景</a-radio>
|
|
|
|
|
|
+ <a-radio-group v-model:value="plan.inventory_catalog">
|
|
|
|
+ <a-radio value="SMART">系统优选广告位</a-radio>
|
|
|
|
+ <a-radio value="MANUAL">首选媒体</a-radio>
|
|
|
|
+ <a-radio value="SCENE">首选场景</a-radio>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
|
|
+ <a-form-item
|
|
|
|
+ label="投放媒体"
|
|
|
|
+ v-show="plan.inventory_catalog === 'MANUAL'"
|
|
|
|
+ >
|
|
|
|
+ <a-select
|
|
|
|
+ mode="multiple"
|
|
|
|
+ size="default"
|
|
|
|
+ placeholder="请选择"
|
|
|
|
+ v-model:value="plan.inventory_type"
|
|
|
|
+ style="width: 400px"
|
|
|
|
+ >
|
|
|
|
+ <a-select-option
|
|
|
|
+ v-for="item in optionsList.mediaList"
|
|
|
|
+ :key="item.value"
|
|
|
|
+ >
|
|
|
|
+ {{ item.label }}
|
|
|
|
+ </a-select-option>
|
|
|
|
+ </a-select>
|
|
|
|
+ </a-form-item>
|
|
|
|
+ <a-form-item
|
|
|
|
+ label="投放场景"
|
|
|
|
+ v-show="plan.inventory_catalog === 'SCENE'"
|
|
|
|
+ >
|
|
|
|
+ <a-select
|
|
|
|
+ size="default"
|
|
|
|
+ placeholder="请选择"
|
|
|
|
+ v-model:value="plan.scene_inventory"
|
|
|
|
+ style="width: 400px"
|
|
|
|
+ >
|
|
|
|
+ <a-select-option
|
|
|
|
+ v-for="item in optionsList.sceneList"
|
|
|
|
+ :key="item.value"
|
|
|
|
+ >
|
|
|
|
+ {{ item.label }}
|
|
|
|
+ </a-select-option>
|
|
|
|
+ </a-select>
|
|
|
|
+ </a-form-item>
|
|
<a-form-item label="搜索快投关键词">
|
|
<a-form-item label="搜索快投关键词">
|
|
<a-switch v-model:checked="plan.feed_delivery_search" />
|
|
<a-switch v-model:checked="plan.feed_delivery_search" />
|
|
</a-form-item>
|
|
</a-form-item>
|
|
@@ -48,13 +85,34 @@
|
|
<!-- part3------用户定向 -->
|
|
<!-- part3------用户定向 -->
|
|
<div class="part-box">
|
|
<div class="part-box">
|
|
<h1>用户定向</h1>
|
|
<h1>用户定向</h1>
|
|
- <a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
|
|
|
|
+ <a-form
|
|
|
|
+ :label-col="labelCol"
|
|
|
|
+ :wrapper-col="wrapperCol"
|
|
|
|
+ style="margin-bottom: 20px"
|
|
|
|
+ >
|
|
<a-form-item label="定向方式">
|
|
<a-form-item label="定向方式">
|
|
<a-radio-group v-model:value="userTarget.directType">
|
|
<a-radio-group v-model:value="userTarget.directType">
|
|
<a-radio value="BUILD">新建定向</a-radio>
|
|
<a-radio value="BUILD">新建定向</a-radio>
|
|
<a-radio value="SELECT">选择已有定向包</a-radio>
|
|
<a-radio value="SELECT">选择已有定向包</a-radio>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
|
|
+ <a-form-item
|
|
|
|
+ label="选择已有定向包"
|
|
|
|
+ v-if="userTarget.directType === 'SELECT'"
|
|
|
|
+ >
|
|
|
|
+ <a-select placeholder="请选择">
|
|
|
|
+ <a-select-option
|
|
|
|
+ v-for="(item, index) in []"
|
|
|
|
+ :key="index"
|
|
|
|
+ ></a-select-option>
|
|
|
|
+ </a-select>
|
|
|
|
+ </a-form-item>
|
|
|
|
+ </a-form>
|
|
|
|
+ <a-form
|
|
|
|
+ :label-col="labelCol"
|
|
|
|
+ :wrapper-col="wrapperCol"
|
|
|
|
+ v-if="userTarget.directType === 'BUILD'"
|
|
|
|
+ >
|
|
<!-- 地域组件 -->
|
|
<!-- 地域组件 -->
|
|
<a-form-item label="地域">
|
|
<a-form-item label="地域">
|
|
<!-- 组件数据接入DDD -->
|
|
<!-- 组件数据接入DDD -->
|
|
@@ -68,7 +126,7 @@
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="年龄">
|
|
<a-form-item label="年龄">
|
|
- <a-checkbox-group v-model:value="plan.age">
|
|
|
|
|
|
+ <a-checkbox-group v-model:value="plan.age" style="width: 700px">
|
|
<a-checkbox value="NONE">不限</a-checkbox>
|
|
<a-checkbox value="NONE">不限</a-checkbox>
|
|
<a-checkbox value="AGE_BETWEEN_18_23">18-23</a-checkbox>
|
|
<a-checkbox value="AGE_BETWEEN_18_23">18-23</a-checkbox>
|
|
<a-checkbox value="AGE_BETWEEN_24_30">24-30</a-checkbox>
|
|
<a-checkbox value="AGE_BETWEEN_24_30">24-30</a-checkbox>
|
|
@@ -84,7 +142,10 @@
|
|
<a-radio-button value="CUSTOM">自定义人群</a-radio-button>
|
|
<a-radio-button value="CUSTOM">自定义人群</a-radio-button>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<!-- 组件数据待接入DDD -->
|
|
<!-- 组件数据待接入DDD -->
|
|
- <direction-exclusion :compType="'crowd'"></direction-exclusion>
|
|
|
|
|
|
+ <direction-exclusion
|
|
|
|
+ :compType="'crowd'"
|
|
|
|
+ v-if="userTarget.crowdType === 'CUSTOM'"
|
|
|
|
+ ></direction-exclusion>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="行为兴趣">
|
|
<a-form-item label="行为兴趣">
|
|
<a-radio-group v-model:value="plan.interest_action_mode">
|
|
<a-radio-group v-model:value="plan.interest_action_mode">
|
|
@@ -93,14 +154,17 @@
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<!-- 媒体定向 -->
|
|
<!-- 媒体定向 -->
|
|
- <a-form-item label="媒体定向" v-model:value="userTarget.mediaTarget">
|
|
|
|
- <a-radio-group>
|
|
|
|
|
|
+ <a-form-item label="媒体定向">
|
|
|
|
+ <a-radio-group v-model:value="userTarget.mediaTarget">
|
|
<a-radio-button value="NONE">不限</a-radio-button>
|
|
<a-radio-button value="NONE">不限</a-radio-button>
|
|
<a-radio-button value="1" disabled>游戏优质媒体</a-radio-button>
|
|
<a-radio-button value="1" disabled>游戏优质媒体</a-radio-button>
|
|
<a-radio-button value="CUSTOM">自定义</a-radio-button>
|
|
<a-radio-button value="CUSTOM">自定义</a-radio-button>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<!-- 组件数据接入DDD -->
|
|
<!-- 组件数据接入DDD -->
|
|
- <direction-exclusion :compType="'media'"></direction-exclusion>
|
|
|
|
|
|
+ <direction-exclusion
|
|
|
|
+ :compType="'media'"
|
|
|
|
+ v-if="userTarget.mediaTarget === 'CUSTOM'"
|
|
|
|
+ ></direction-exclusion>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="平台">
|
|
<a-form-item label="平台">
|
|
<a-checkbox-group v-model:value="plan.platform">
|
|
<a-checkbox-group v-model:value="plan.platform">
|
|
@@ -163,7 +227,10 @@
|
|
<a-radio-button value="CLASSIFY">文章分类</a-radio-button>
|
|
<a-radio-button value="CLASSIFY">文章分类</a-radio-button>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<!-- 组件数据接入DDD -->
|
|
<!-- 组件数据接入DDD -->
|
|
- <check-box :compType="1"></check-box>
|
|
|
|
|
|
+ <check-box
|
|
|
|
+ :compType="1"
|
|
|
|
+ v-if="userTarget.articleType === 'CLASSIFY'"
|
|
|
|
+ ></check-box>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="运营商">
|
|
<a-form-item label="运营商">
|
|
<a-checkbox-group v-model:value="plan.carrier">
|
|
<a-checkbox-group v-model:value="plan.carrier">
|
|
@@ -174,7 +241,10 @@
|
|
</a-checkbox-group>
|
|
</a-checkbox-group>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="新用户">
|
|
<a-form-item label="新用户">
|
|
- <a-checkbox-group v-model:value="plan.activate_type">
|
|
|
|
|
|
+ <a-checkbox-group
|
|
|
|
+ v-model:value="plan.activate_type"
|
|
|
|
+ style="width: 600px"
|
|
|
|
+ >
|
|
<a-checkbox value="NONE">不限</a-checkbox>
|
|
<a-checkbox value="NONE">不限</a-checkbox>
|
|
<a-checkbox value="WITH_IN_A_MONTH">一个月以内</a-checkbox>
|
|
<a-checkbox value="WITH_IN_A_MONTH">一个月以内</a-checkbox>
|
|
<a-checkbox value="ONE_MONTH_2_THREE_MONTH"
|
|
<a-checkbox value="ONE_MONTH_2_THREE_MONTH"
|
|
@@ -190,53 +260,59 @@
|
|
<a-radio-button value="BRAND">手机品牌</a-radio-button>
|
|
<a-radio-button value="BRAND">手机品牌</a-radio-button>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<!-- 组件数据接入DDD -->
|
|
<!-- 组件数据接入DDD -->
|
|
- <check-box :compType="2"></check-box>
|
|
|
|
|
|
+ <check-box
|
|
|
|
+ :compType="2"
|
|
|
|
+ v-if="userTarget.deviceBrand === 'BRAND'"
|
|
|
|
+ ></check-box>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="手机价格">
|
|
<a-form-item label="手机价格">
|
|
- <a-radio-group>
|
|
|
|
- <a-radio-button value="0">不限</a-radio-button>
|
|
|
|
- <a-radio-button value="1">自定义</a-radio-button>
|
|
|
|
|
|
+ <a-radio-group v-model:value="userTarget.phonePrice">
|
|
|
|
+ <a-radio-button value="NONE">不限</a-radio-button>
|
|
|
|
+ <a-radio-button value="CUSTOM">自定义</a-radio-button>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
- <a-slider
|
|
|
|
- range
|
|
|
|
- :marks="phonePriceMarks"
|
|
|
|
- :max="11000"
|
|
|
|
- :min="0"
|
|
|
|
- :step="null"
|
|
|
|
- v-model:value="plan.launch_price"
|
|
|
|
- style="width: 410px"
|
|
|
|
- />
|
|
|
|
- <span
|
|
|
|
- style="position: relative; top: -54px; left: 450px"
|
|
|
|
- v-if="plan.launch_price[0] > 0 && plan.launch_price[1] < 11000"
|
|
|
|
- >{{ plan.launch_price[0] }}元~{{ plan.launch_price[1] }}元</span
|
|
|
|
- >
|
|
|
|
- <span
|
|
|
|
- style="position: relative; top: -54px; left: 450px"
|
|
|
|
- v-if="
|
|
|
|
- (plan.launch_price[0] === 0 && plan.launch_price[1] === 11000) ||
|
|
|
|
- plan.launch_price[0] == plan.launch_price[1]
|
|
|
|
- "
|
|
|
|
- >不限</span
|
|
|
|
- >
|
|
|
|
- <span
|
|
|
|
- style="position: relative; top: -54px; left: 450px"
|
|
|
|
- v-if="
|
|
|
|
- plan.launch_price[0] === 0 &&
|
|
|
|
- plan.launch_price[1] < 11000 &&
|
|
|
|
- plan.launch_price[1] !== 0
|
|
|
|
- "
|
|
|
|
- >{{ plan.launch_price[1] }}元以内</span
|
|
|
|
- >
|
|
|
|
- <span
|
|
|
|
- style="position: relative; top: -54px; left: 450px"
|
|
|
|
- v-if="
|
|
|
|
- plan.launch_price[0] > 0 &&
|
|
|
|
- plan.launch_price[1] === 11000 &&
|
|
|
|
- plan.launch_price[0] !== 11000
|
|
|
|
- "
|
|
|
|
- >{{ plan.launch_price[0] }}元以上</span
|
|
|
|
- >
|
|
|
|
|
|
+ <div v-if="userTarget.phonePrice === 'CUSTOM'">
|
|
|
|
+ <a-slider
|
|
|
|
+ range
|
|
|
|
+ :marks="phonePriceMarks"
|
|
|
|
+ :max="11000"
|
|
|
|
+ :min="0"
|
|
|
|
+ :step="null"
|
|
|
|
+ v-model:value="plan.launch_price"
|
|
|
|
+ style="width: 410px"
|
|
|
|
+ />
|
|
|
|
+ <span
|
|
|
|
+ style="position: relative; top: -54px; left: 450px"
|
|
|
|
+ v-if="plan.launch_price[0] > 0 && plan.launch_price[1] < 11000"
|
|
|
|
+ >{{ plan.launch_price[0] }}元~{{ plan.launch_price[1] }}元</span
|
|
|
|
+ >
|
|
|
|
+ <span
|
|
|
|
+ style="position: relative; top: -54px; left: 450px"
|
|
|
|
+ v-if="
|
|
|
|
+ (plan.launch_price[0] === 0 &&
|
|
|
|
+ plan.launch_price[1] === 11000) ||
|
|
|
|
+ plan.launch_price[0] == plan.launch_price[1]
|
|
|
|
+ "
|
|
|
|
+ >不限</span
|
|
|
|
+ >
|
|
|
|
+ <span
|
|
|
|
+ style="position: relative; top: -54px; left: 450px"
|
|
|
|
+ v-if="
|
|
|
|
+ plan.launch_price[0] === 0 &&
|
|
|
|
+ plan.launch_price[1] < 11000 &&
|
|
|
|
+ plan.launch_price[1] !== 0
|
|
|
|
+ "
|
|
|
|
+ >{{ plan.launch_price[1] }}元以内</span
|
|
|
|
+ >
|
|
|
|
+ <span
|
|
|
|
+ style="position: relative; top: -54px; left: 450px"
|
|
|
|
+ v-if="
|
|
|
|
+ plan.launch_price[0] > 0 &&
|
|
|
|
+ plan.launch_price[1] === 11000 &&
|
|
|
|
+ plan.launch_price[0] !== 11000
|
|
|
|
+ "
|
|
|
|
+ >{{ plan.launch_price[0] }}元以上</span
|
|
|
|
+ >
|
|
|
|
+ </div>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<!-- 职业状态 -->
|
|
<!-- 职业状态 -->
|
|
<a-form-item label="职业状态">
|
|
<a-form-item label="职业状态">
|
|
@@ -245,13 +321,23 @@
|
|
<a-radio-button value="STATUS">职业状态</a-radio-button>
|
|
<a-radio-button value="STATUS">职业状态</a-radio-button>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<!-- 组件数据待接入DDD -->
|
|
<!-- 组件数据待接入DDD -->
|
|
- <check-box :compType="3"></check-box>
|
|
|
|
|
|
+ <check-box
|
|
|
|
+ :compType="3"
|
|
|
|
+ v-if="userTarget.workStatus === 'STATUS'"
|
|
|
|
+ ></check-box>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<!-- 智能放量 -->
|
|
<!-- 智能放量 -->
|
|
<a-form-item label="智能放量">
|
|
<a-form-item label="智能放量">
|
|
- <a-switch />
|
|
|
|
- <check-box :compType="4"></check-box>
|
|
|
|
|
|
+ <a-switch
|
|
|
|
+ v-model:checked="plan.auto_extend_enabled"
|
|
|
|
+ checked-children="开"
|
|
|
|
+ un-checked-children="关"
|
|
|
|
+ />
|
|
|
|
+ <check-box :compType="4" v-if="plan.auto_extend_enabled"></check-box>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
|
|
+ <p style="line-height: 40px; width: 700px; text-align: right">
|
|
|
|
+ <a-button @click="saveDirectPackage">保存为定向包</a-button>
|
|
|
|
+ </p>
|
|
</a-form>
|
|
</a-form>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
@@ -260,33 +346,42 @@
|
|
<h1>预算与出价</h1>
|
|
<h1>预算与出价</h1>
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form-item label="投放场景">
|
|
<a-form-item label="投放场景">
|
|
- <a-radio-group>
|
|
|
|
- <a-radio-button value="0">常规投放</a-radio-button>
|
|
|
|
- <a-radio-button value="1">放量投放</a-radio-button>
|
|
|
|
|
|
+ <a-radio-group v-model:value="plan.smart_bid_type">
|
|
|
|
+ <a-radio value="SMART_BID_CUSTOM">常规投放</a-radio>
|
|
|
|
+ <a-radio value="SMART_BID_CONSERVATIVE">放量投放</a-radio>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<span style="font-size: 13px; color: gray"
|
|
<span style="font-size: 13px; color: gray"
|
|
>控制成本,尽量消耗完预算</span
|
|
>控制成本,尽量消耗完预算</span
|
|
>
|
|
>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="竞价策略">
|
|
<a-form-item label="竞价策略">
|
|
- <a-radio-group>
|
|
|
|
- <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 v-model:value="plan.flow_control_mode">
|
|
|
|
+ <a-radio value="FLOW_CONTROL_MODE_FAST">优先跑量</a-radio>
|
|
|
|
+ <a-radio value="FLOW_CONTROL_MODE_SMOOTH">均衡投放</a-radio>
|
|
|
|
+ <a-radio value="FLOW_CONTROL_MODE_BALANCE">控制成本上限</a-radio>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<!-- 预算 -->
|
|
<!-- 预算 -->
|
|
<a-form-item label="投放时间">
|
|
<a-form-item label="投放时间">
|
|
- <a-radio-group>
|
|
|
|
- <a-radio-button value="0">从今天起长期投放</a-radio-button>
|
|
|
|
- <a-radio-button value="1">设置开始和结束时间</a-radio-button>
|
|
|
|
|
|
+ <a-radio-group v-model:value="plan.schedule_type">
|
|
|
|
+ <a-radio value="SCHEDULE_FROM_NOW">从今天起长期投放</a-radio>
|
|
|
|
+ <a-radio value="SCHEDULE_START_END">设置开始和结束时间</a-radio>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
- <time-schedule style="width: 800px; margin-top: 10px"></time-schedule>
|
|
|
|
|
|
+ </a-form-item>
|
|
|
|
+ <a-form-item label="投放时段">
|
|
|
|
+ <a-radio-group v-model:value="userTarget.timeDuration">
|
|
|
|
+ <a-radio value="NONE">不限</a-radio>
|
|
|
|
+ <a-radio value="CUSTOM">指定时间段</a-radio>
|
|
|
|
+ </a-radio-group>
|
|
|
|
+ <time-schedule
|
|
|
|
+ style="width: 800px; margin-top: 10px"
|
|
|
|
+ v-if="userTarget.timeDuration === 'CUSTOM'"
|
|
|
|
+ ></time-schedule>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<!-- 投放时段 -->
|
|
<!-- 投放时段 -->
|
|
<a-form-item label="付费方式">
|
|
<a-form-item label="付费方式">
|
|
- <a-radio-group>
|
|
|
|
- <a-radio value="0">按展示付费(oCPM)</a-radio>
|
|
|
|
|
|
+ <a-radio-group v-model:value="plan.pricing">
|
|
|
|
+ <a-radio value="PRICING_OCPM">按展示付费(oCPM)</a-radio>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="目标转化出价">
|
|
<a-form-item label="目标转化出价">
|
|
@@ -301,19 +396,28 @@
|
|
<h1>第三方检测链</h1>
|
|
<h1>第三方检测链</h1>
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form-item label="展示">
|
|
<a-form-item label="展示">
|
|
- <a-input placeholder="选填" />
|
|
|
|
|
|
+ <a-input placeholder="选填" v-model:value="plan.track_url" />
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="有效触点">
|
|
<a-form-item label="有效触点">
|
|
- <a-input placeholder="选填" />
|
|
|
|
|
|
+ <a-input placeholder="选填" v-model:value="plan.action_track_url" />
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="视频播放">
|
|
<a-form-item label="视频播放">
|
|
- <a-input placeholder="选填" />
|
|
|
|
|
|
+ <a-input
|
|
|
|
+ placeholder="选填"
|
|
|
|
+ v-model:value="plan.video_play_track_url"
|
|
|
|
+ />
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="视频播完">
|
|
<a-form-item label="视频播完">
|
|
- <a-input placeholder="选填" />
|
|
|
|
|
|
+ <a-input
|
|
|
|
+ placeholder="选填"
|
|
|
|
+ v-model:value="plan.video_play_done_track_url"
|
|
|
|
+ />
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="视频有效播放">
|
|
<a-form-item label="视频有效播放">
|
|
- <a-input placeholder="选填" />
|
|
|
|
|
|
+ <a-input
|
|
|
|
+ placeholder="选填"
|
|
|
|
+ v-model:value="plan.video_play_effective_track_url"
|
|
|
|
+ />
|
|
</a-form-item>
|
|
</a-form-item>
|
|
</a-form>
|
|
</a-form>
|
|
</div>
|
|
</div>
|
|
@@ -323,10 +427,10 @@
|
|
<h1>计划名称</h1>
|
|
<h1>计划名称</h1>
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form-item label="计划名称">
|
|
<a-form-item label="计划名称">
|
|
- <a-input placeholder="选填" />
|
|
|
|
|
|
+ <a-input placeholder="选填" v-model:value="plan.name" />
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="创建数量">
|
|
<a-form-item label="创建数量">
|
|
- <a-input placeholder="选填" />
|
|
|
|
|
|
+ <a-input placeholder="选填" v-model:value="plan.number" />
|
|
</a-form-item>
|
|
</a-form-item>
|
|
</a-form>
|
|
</a-form>
|
|
</div>
|
|
</div>
|
|
@@ -335,14 +439,14 @@
|
|
|
|
|
|
<script lang="ts">
|
|
<script lang="ts">
|
|
import { defineComponent, reactive, toRefs, ref } from "vue";
|
|
import { defineComponent, reactive, toRefs, ref } from "vue";
|
|
-import {} from "@/api";
|
|
|
|
|
|
+import { createPlan } from "@/api";
|
|
import Bus from "@/utils/bus";
|
|
import Bus from "@/utils/bus";
|
|
import TimeSchedule from "../component/time-schedule.vue";
|
|
import TimeSchedule from "../component/time-schedule.vue";
|
|
import Location from "../component/location-auto-release.vue";
|
|
import Location from "../component/location-auto-release.vue";
|
|
import DirectionExclusion from "../component/direction-exclusion.vue";
|
|
import DirectionExclusion from "../component/direction-exclusion.vue";
|
|
import CheckBox from "../component/check-box.vue";
|
|
import CheckBox from "../component/check-box.vue";
|
|
import { message } from "ant-design-vue";
|
|
import { message } from "ant-design-vue";
|
|
-import { PriceSlider } from "../component/plan-data";
|
|
|
|
|
|
+import { PriceSlider, LaunchMedia, LaunchScene } from "../component/plan-data";
|
|
|
|
|
|
const PlanEdit = defineComponent({
|
|
const PlanEdit = defineComponent({
|
|
components: {
|
|
components: {
|
|
@@ -361,53 +465,70 @@ const PlanEdit = defineComponent({
|
|
mediaTarget: "NONE", // 媒体定向 不限-NONE 自定义-CUSTOM
|
|
mediaTarget: "NONE", // 媒体定向 不限-NONE 自定义-CUSTOM
|
|
articleType: "NONE", // 文章分类 不限-NONE 分类-CLASSIFY
|
|
articleType: "NONE", // 文章分类 不限-NONE 分类-CLASSIFY
|
|
deviceBrand: "NONE", // 手机品牌 不限-NONE 品牌-BRAND
|
|
deviceBrand: "NONE", // 手机品牌 不限-NONE 品牌-BRAND
|
|
- workStatus: 'NONE', // 职业状态 不限-NONE 状态-STATUS
|
|
|
|
|
|
+ workStatus: "NONE", // 职业状态 不限-NONE 状态-STATUS
|
|
|
|
+ phonePrice: "NONE", // 手机价格 不限-NONE 自定义-CUNSTOM
|
|
|
|
+ timeDuration: "NONE", // 投放时段 不限-NONE 指定时段-CUSTOM
|
|
},
|
|
},
|
|
plan: {
|
|
plan: {
|
|
// part1 优化目标----------------------------------------------------
|
|
// part1 优化目标----------------------------------------------------
|
|
- external_url: "", // 落地页
|
|
|
|
|
|
+ external_url: undefined, // 落地页
|
|
open_url: "", // 直达链接内容
|
|
open_url: "", // 直达链接内容
|
|
// part2 投放位置----------------------------------------------------
|
|
// part2 投放位置----------------------------------------------------
|
|
|
|
+ inventory_catalog: "SMART", // 广告位置
|
|
|
|
+ inventory_type: ref<any[]>([]), // 投放媒体-广告位置是首选媒体时必填 否则删除
|
|
|
|
+ scene_inventory: "", // 投放场景-广告位置时首选场景时必填 否则删除
|
|
feed_delivery_search: true, // 搜索快投关键词
|
|
feed_delivery_search: true, // 搜索快投关键词
|
|
// part3 用户定向----------------------------------------------------
|
|
// part3 用户定向----------------------------------------------------
|
|
district: "", // 地域类型
|
|
district: "", // 地域类型
|
|
city: ref<any[]>([]), // 选中的城市或区县
|
|
city: ref<any[]>([]), // 选中的城市或区县
|
|
- gender: "", // 性别
|
|
|
|
- age: ref<any[]>([]), // 年龄
|
|
|
|
|
|
+ gender: "NONE", // 性别
|
|
|
|
+ age: ref<any[]>(["NONE"]), // 年龄
|
|
retargeting_tags_include: ref<any[]>([]), // 定向人群
|
|
retargeting_tags_include: ref<any[]>([]), // 定向人群
|
|
retargeting_tags_exclude: ref<any[]>([]), //排除人群
|
|
retargeting_tags_exclude: ref<any[]>([]), //排除人群
|
|
- interest_action_mode: "", // 行为兴趣
|
|
|
|
|
|
+ interest_action_mode: "UNLIMITED", // 行为兴趣
|
|
superior_popularity_type: "", // 媒体定向类型 、、 选择自定义媒体包时本字段不传
|
|
superior_popularity_type: "", // 媒体定向类型 、、 选择自定义媒体包时本字段不传
|
|
flow_package: ref<any[]>([]), // 定向流量包
|
|
flow_package: ref<any[]>([]), // 定向流量包
|
|
exclude_flow_package: ref<any[]>([]), // 排除流量包
|
|
exclude_flow_package: ref<any[]>([]), // 排除流量包
|
|
- platform: ref<any[]>([]), // 平台-字符串数组
|
|
|
|
- device_type: ref<any[]>([]), // 设备类型 不限不传
|
|
|
|
- ac: ref<any[]>([]), // 网络
|
|
|
|
|
|
+ platform: ref<any[]>(["NONE"]), // 平台-字符串数组
|
|
|
|
+ device_type: ref<any[]>(["NONE"]), // 设备类型 不限不传
|
|
|
|
+ ac: ref<any[]>(["unknown"]), // 网络
|
|
hide_if_exists: 0, // 已安装用户 0-不限 1-过滤 2-定向
|
|
hide_if_exists: 0, // 已安装用户 0-不限 1-过滤 2-定向
|
|
hide_if_converted: "AD", // 过滤已转化用户 默认AD广告计划
|
|
hide_if_converted: "AD", // 过滤已转化用户 默认AD广告计划
|
|
- converted_time_duration: "", // 过滤时间
|
|
|
|
|
|
+ converted_time_duration: "CUSTOMER", // 过滤时间
|
|
article_category: ref<any[]>([]), // 文章分类
|
|
article_category: ref<any[]>([]), // 文章分类
|
|
- carrier: ref<any[]>([]), // 运营商
|
|
|
|
- activate_type: ref<any[]>([]), // 新用户
|
|
|
|
|
|
+ carrier: ref<any[]>(["NONE"]), // 运营商
|
|
|
|
+ activate_type: ref<any[]>(["NONE"]), // 新用户
|
|
device_brand: ref<any[]>([]), // 手机品牌
|
|
device_brand: ref<any[]>([]), // 手机品牌
|
|
launch_price: ref<any[]>([0, 11000]), // 手机价格-number[]
|
|
launch_price: ref<any[]>([0, 11000]), // 手机价格-number[]
|
|
career: ref<any[]>([]), // 职业状态-string[]
|
|
career: ref<any[]>([]), // 职业状态-string[]
|
|
- auto_extend_enabled: 0, // 智能放量
|
|
|
|
|
|
+ auto_extend_enabled: false, // 智能放量
|
|
|
|
+ auto_extend_targets: ref<any[]>([]), // 可开放定向
|
|
// part4 预算与出价---------------------------------------
|
|
// part4 预算与出价---------------------------------------
|
|
- smart_bid_type: "", // 投放场景
|
|
|
|
- flow_control_mode: "", // 竞价策略
|
|
|
|
|
|
+ smart_bid_type: "SMART_BID_CUSTOM", // 投放场景
|
|
|
|
+ flow_control_mode: "FLOW_CONTROL_MODE_FAST", // 竞价策略
|
|
budget_mode: "", // 预算类型
|
|
budget_mode: "", // 预算类型
|
|
budget: 0, // 预算
|
|
budget: 0, // 预算
|
|
- schedule_type: "", // 投放时间类型
|
|
|
|
|
|
+ schedule_type: "SCHEDULE_FROM_NOW", // 投放时间类型
|
|
start_time: "", // 投放开始时间
|
|
start_time: "", // 投放开始时间
|
|
end_time: "", // 投放结束时间
|
|
end_time: "", // 投放结束时间
|
|
schedule_time: "", // 投放时段
|
|
schedule_time: "", // 投放时段
|
|
- pricing: "", // 付费方式
|
|
|
|
|
|
+ pricing: "PRICING_OCPM", // 付费方式
|
|
cpa_bid: "", // 目标转化出价
|
|
cpa_bid: "", // 目标转化出价
|
|
// part5 第三方检测---------------------------------------
|
|
// part5 第三方检测---------------------------------------
|
|
|
|
+ track_url: "", // 展示
|
|
|
|
+ action_track_url: "", // 有效触点
|
|
|
|
+ video_play_track_url: "", // 视频播放
|
|
|
|
+ video_play_done_track_url: "", // 视频播完
|
|
|
|
+ video_play_effective_track_url: "", // 有效播放
|
|
// part6 计划名称---------------------------------------
|
|
// part6 计划名称---------------------------------------
|
|
|
|
+ name: "", // 计划名称
|
|
|
|
+ number: 1, // 创建数量
|
|
},
|
|
},
|
|
phonePriceMarks: PriceSlider, //手机价格区间
|
|
phonePriceMarks: PriceSlider, //手机价格区间
|
|
|
|
+ optionsList: {
|
|
|
|
+ mediaList: LaunchMedia, // 投放媒体
|
|
|
|
+ sceneList: LaunchScene, // 投放场景
|
|
|
|
+ },
|
|
});
|
|
});
|
|
return {
|
|
return {
|
|
...toRefs(state),
|
|
...toRefs(state),
|
|
@@ -419,6 +540,8 @@ const PlanEdit = defineComponent({
|
|
Bus.$on("stepThreeCheck", (val?: any) => {
|
|
Bus.$on("stepThreeCheck", (val?: any) => {
|
|
console.log("Step3Check");
|
|
console.log("Step3Check");
|
|
Bus.$emit("stepThreeBack");
|
|
Bus.$emit("stepThreeBack");
|
|
|
|
+ // console.log("接口");
|
|
|
|
+ // this.beforeCommit();
|
|
});
|
|
});
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
@@ -449,6 +572,37 @@ const PlanEdit = defineComponent({
|
|
if (this.userTarget.deviceBrand === "NONE") delete data.device_brand;
|
|
if (this.userTarget.deviceBrand === "NONE") delete data.device_brand;
|
|
// 7.职位状态为不限时 删除字段career
|
|
// 7.职位状态为不限时 删除字段career
|
|
if (this.userTarget.workStatus === "NONE") delete data.career;
|
|
if (this.userTarget.workStatus === "NONE") delete data.career;
|
|
|
|
+ // 8.广告位置不是首选媒体时 删除投放媒体字段 不是首选场景-删除投放场景字段
|
|
|
|
+ if (data.inventory_catalog !== "MANUAL") delete data.inventory_type;
|
|
|
|
+ if (data.inventory_catalog !== "SCENE") delete data.scene_inventory;
|
|
|
|
+ // 9.手机价格为不限时 删除字段launch_price
|
|
|
|
+ if (this.userTarget.phonePrice === "NONE") delete data.launch_price;
|
|
|
|
+ // 10.智能放量开关auto_extend_enabled false=> 0 true=>1 关闭智能放量 删除开放定向字段
|
|
|
|
+ data.auto_extend_enabled = this.numAndBool(data.auto_extend_enabled);
|
|
|
|
+ if (!data.auto_extend_enabled) delete data.auto_extend_targets;
|
|
|
|
+ // 11.投放时段-timeDuration-NONE时 删除schedule_time
|
|
|
|
+ if (this.userTarget.timeDuration === "NONE") delete data.schedule_time;
|
|
|
|
+ // 12.删除plan.name plan.number
|
|
|
|
+ delete data.name;
|
|
|
|
+ delete data.number;
|
|
|
|
+
|
|
|
|
+ // 调用接口
|
|
|
|
+ this.savePlan(data);
|
|
|
|
+ },
|
|
|
|
+ // 保存数据
|
|
|
|
+ async savePlan(plan_data: any) {
|
|
|
|
+ let advertiser_id = this.$route.query.advertiser_id;
|
|
|
|
+ let campaign_id = this.$route.query.campaign_id;
|
|
|
|
+ let param = {
|
|
|
|
+ advertiser_id,
|
|
|
|
+ campaign_id,
|
|
|
|
+ ad_num: this.plan.number,
|
|
|
|
+ is_template: 1,
|
|
|
|
+ name: this.plan.name,
|
|
|
|
+ ad_data: { ...plan_data },
|
|
|
|
+ };
|
|
|
|
+ console.log("新建计划数据", param);
|
|
|
|
+ let { data } = await createPlan(param);
|
|
},
|
|
},
|
|
// 回显之前处理数据
|
|
// 回显之前处理数据
|
|
beforeBackShow(planOrigin: any) {
|
|
beforeBackShow(planOrigin: any) {
|
|
@@ -478,14 +632,31 @@ const PlanEdit = defineComponent({
|
|
? "CLASSIFY"
|
|
? "CLASSIFY"
|
|
: "NONE";
|
|
: "NONE";
|
|
// 6.根据否有device_brand字段判断页面变量手机品牌
|
|
// 6.根据否有device_brand字段判断页面变量手机品牌
|
|
- this.userTarget.deviceBrand = planOrigin.device_brand
|
|
|
|
- ? "BRAND"
|
|
|
|
- : "NONE";
|
|
|
|
|
|
+ this.userTarget.deviceBrand = planOrigin.device_brand ? "BRAND" : "NONE";
|
|
// 7.根据否有career字段判断页面变量职业状态
|
|
// 7.根据否有career字段判断页面变量职业状态
|
|
- this.userTarget.workStatus = planOrigin.career
|
|
|
|
- ? "STATUS"
|
|
|
|
|
|
+ this.userTarget.workStatus = planOrigin.career ? "STATUS" : "NONE";
|
|
|
|
+ // 8.根据否有launch_price字段判断页面变量手机价格
|
|
|
|
+ this.userTarget.phonePrice = planOrigin.launch_price ? "CUSTOM" : "NONE";
|
|
|
|
+ // 9.根据auto_extend_enabled字段转化trur/false渲染
|
|
|
|
+ planOrigin.auto_extend_enabled = this.numAndBool(
|
|
|
|
+ planOrigin.auto_extend_enabled
|
|
|
|
+ );
|
|
|
|
+ // 10.根据否有schedule_time字段判断页面变量投放时段
|
|
|
|
+ this.userTarget.timeDuration = planOrigin.schedule_time
|
|
|
|
+ ? "CUSTOM"
|
|
: "NONE";
|
|
: "NONE";
|
|
},
|
|
},
|
|
|
|
+ // 用户定向保存为定向包
|
|
|
|
+ saveDirectPackage() {
|
|
|
|
+ console.log("保存定向包");
|
|
|
|
+ },
|
|
|
|
+ // 工具函数 0=>false 1=>true false=>0 true=>1
|
|
|
|
+ numAndBool(val: any) {
|
|
|
|
+ if (val === 0) return false;
|
|
|
|
+ if (val === 1) return true;
|
|
|
|
+ if (val === true) return 1;
|
|
|
|
+ if (val === false) return 0;
|
|
|
|
+ },
|
|
},
|
|
},
|
|
beforeUnmount() {
|
|
beforeUnmount() {
|
|
Bus.$off("stepThreeCheck");
|
|
Bus.$off("stepThreeCheck");
|