|
@@ -116,7 +116,7 @@
|
|
<!-- 地域组件 -->
|
|
<!-- 地域组件 -->
|
|
<a-form-item label="地域">
|
|
<a-form-item label="地域">
|
|
<!-- 组件数据接入DDD -->
|
|
<!-- 组件数据接入DDD -->
|
|
- <location :checkedCity="'[]'"></location>
|
|
|
|
|
|
+ <location :checkedCity="'[]'" ref="cityCom"></location>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="性别">
|
|
<a-form-item label="性别">
|
|
<a-radio-group v-model:value="plan.gender">
|
|
<a-radio-group v-model:value="plan.gender">
|
|
@@ -126,7 +126,11 @@
|
|
</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" style="width: 700px">
|
|
|
|
|
|
+ <a-checkbox-group
|
|
|
|
+ v-model:value="plan.age"
|
|
|
|
+ style="width: 700px"
|
|
|
|
+ @change="checkboxChange($event, 'age')"
|
|
|
|
+ >
|
|
<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>
|
|
@@ -143,6 +147,7 @@
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<!-- 组件数据待接入DDD -->
|
|
<!-- 组件数据待接入DDD -->
|
|
<direction-exclusion
|
|
<direction-exclusion
|
|
|
|
+ ref="crowdCom"
|
|
:compType="'crowd'"
|
|
:compType="'crowd'"
|
|
v-if="userTarget.crowdType === 'CUSTOM'"
|
|
v-if="userTarget.crowdType === 'CUSTOM'"
|
|
></direction-exclusion>
|
|
></direction-exclusion>
|
|
@@ -162,12 +167,16 @@
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<!-- 组件数据接入DDD -->
|
|
<!-- 组件数据接入DDD -->
|
|
<direction-exclusion
|
|
<direction-exclusion
|
|
|
|
+ ref="mediaCom"
|
|
:compType="'media'"
|
|
:compType="'media'"
|
|
v-if="userTarget.mediaTarget === 'CUSTOM'"
|
|
v-if="userTarget.mediaTarget === 'CUSTOM'"
|
|
></direction-exclusion>
|
|
></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"
|
|
|
|
+ @change="checkboxChange($event, 'platform')"
|
|
|
|
+ >
|
|
<a-checkbox value="NONE">不限</a-checkbox>
|
|
<a-checkbox value="NONE">不限</a-checkbox>
|
|
<a-checkbox value="IOS">ios</a-checkbox>
|
|
<a-checkbox value="IOS">ios</a-checkbox>
|
|
<a-checkbox value="ANDROID">Android</a-checkbox>
|
|
<a-checkbox value="ANDROID">Android</a-checkbox>
|
|
@@ -175,14 +184,20 @@
|
|
</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.device_type">
|
|
|
|
|
|
+ <a-checkbox-group
|
|
|
|
+ v-model:value="plan.device_type"
|
|
|
|
+ @change="checkboxChange($event, 'device_type')"
|
|
|
|
+ >
|
|
<a-checkbox value="NONE">不限</a-checkbox>
|
|
<a-checkbox value="NONE">不限</a-checkbox>
|
|
<a-checkbox value="MOBILE">智能手机</a-checkbox>
|
|
<a-checkbox value="MOBILE">智能手机</a-checkbox>
|
|
<a-checkbox value="PAD">平板</a-checkbox>
|
|
<a-checkbox value="PAD">平板</a-checkbox>
|
|
</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.ac">
|
|
|
|
|
|
+ <a-checkbox-group
|
|
|
|
+ v-model:value="plan.ac"
|
|
|
|
+ @change="checkboxChange($event, 'ac')"
|
|
|
|
+ >
|
|
<a-checkbox value="unknown">不限</a-checkbox>
|
|
<a-checkbox value="unknown">不限</a-checkbox>
|
|
<a-checkbox value="WIFI">Wi-Fi</a-checkbox>
|
|
<a-checkbox value="WIFI">Wi-Fi</a-checkbox>
|
|
<a-checkbox value="2G">2G</a-checkbox>
|
|
<a-checkbox value="2G">2G</a-checkbox>
|
|
@@ -228,12 +243,17 @@
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<!-- 组件数据接入DDD -->
|
|
<!-- 组件数据接入DDD -->
|
|
<check-box
|
|
<check-box
|
|
|
|
+ ref="articleCom"
|
|
:compType="1"
|
|
:compType="1"
|
|
|
|
+ :showList="[]"
|
|
v-if="userTarget.articleType === 'CLASSIFY'"
|
|
v-if="userTarget.articleType === 'CLASSIFY'"
|
|
></check-box>
|
|
></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"
|
|
|
|
+ @change="checkboxChange($event, 'carrier')"
|
|
|
|
+ >
|
|
<a-checkbox value="NONE">不限</a-checkbox>
|
|
<a-checkbox value="NONE">不限</a-checkbox>
|
|
<a-checkbox value="MOBILE">移动</a-checkbox>
|
|
<a-checkbox value="MOBILE">移动</a-checkbox>
|
|
<a-checkbox value="UNICOM">联通</a-checkbox>
|
|
<a-checkbox value="UNICOM">联通</a-checkbox>
|
|
@@ -244,6 +264,7 @@
|
|
<a-checkbox-group
|
|
<a-checkbox-group
|
|
v-model:value="plan.activate_type"
|
|
v-model:value="plan.activate_type"
|
|
style="width: 600px"
|
|
style="width: 600px"
|
|
|
|
+ @change="checkboxChange($event, 'activate_type')"
|
|
>
|
|
>
|
|
<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>
|
|
@@ -261,7 +282,9 @@
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<!-- 组件数据接入DDD -->
|
|
<!-- 组件数据接入DDD -->
|
|
<check-box
|
|
<check-box
|
|
|
|
+ ref="brandCom"
|
|
:compType="2"
|
|
:compType="2"
|
|
|
|
+ :showList="[]"
|
|
v-if="userTarget.deviceBrand === 'BRAND'"
|
|
v-if="userTarget.deviceBrand === 'BRAND'"
|
|
></check-box>
|
|
></check-box>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
@@ -322,7 +345,9 @@
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<!-- 组件数据待接入DDD -->
|
|
<!-- 组件数据待接入DDD -->
|
|
<check-box
|
|
<check-box
|
|
|
|
+ ref="workCom"
|
|
:compType="3"
|
|
:compType="3"
|
|
|
|
+ :showList="[]"
|
|
v-if="userTarget.workStatus === 'STATUS'"
|
|
v-if="userTarget.workStatus === 'STATUS'"
|
|
></check-box>
|
|
></check-box>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
@@ -333,7 +358,12 @@
|
|
checked-children="开"
|
|
checked-children="开"
|
|
un-checked-children="关"
|
|
un-checked-children="关"
|
|
/>
|
|
/>
|
|
- <check-box :compType="4" v-if="plan.auto_extend_enabled"></check-box>
|
|
|
|
|
|
+ <check-box
|
|
|
|
+ ref="extendCom"
|
|
|
|
+ :compType="4"
|
|
|
|
+ :showList="[]"
|
|
|
|
+ v-if="plan.auto_extend_enabled"
|
|
|
|
+ ></check-box>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<p style="line-height: 40px; width: 700px; text-align: right">
|
|
<p style="line-height: 40px; width: 700px; text-align: right">
|
|
<a-button @click="saveDirectPackage">保存为定向包</a-button>
|
|
<a-button @click="saveDirectPackage">保存为定向包</a-button>
|
|
@@ -374,6 +404,7 @@
|
|
<a-radio value="CUSTOM">指定时间段</a-radio>
|
|
<a-radio value="CUSTOM">指定时间段</a-radio>
|
|
</a-radio-group>
|
|
</a-radio-group>
|
|
<time-schedule
|
|
<time-schedule
|
|
|
|
+ ref="timeCom"
|
|
style="width: 800px; margin-top: 10px"
|
|
style="width: 800px; margin-top: 10px"
|
|
v-if="userTarget.timeDuration === 'CUSTOM'"
|
|
v-if="userTarget.timeDuration === 'CUSTOM'"
|
|
></time-schedule>
|
|
></time-schedule>
|
|
@@ -456,6 +487,14 @@ const PlanEdit = defineComponent({
|
|
CheckBox,
|
|
CheckBox,
|
|
},
|
|
},
|
|
setup() {
|
|
setup() {
|
|
|
|
+ const cityCom: any = ref(null); // 地域组件
|
|
|
|
+ const crowdCom: any = ref(null); // 人群组件
|
|
|
|
+ const mediaCom: any = ref(null); // 媒体组件
|
|
|
|
+ const timeCom: any = ref(null); // 时段组件
|
|
|
|
+ const articleCom: any = ref(null); // 文章分类组件
|
|
|
|
+ const workCom: any = ref(null); // 工作状态组件
|
|
|
|
+ const brandCom: any = ref(null); // 手机品牌组件
|
|
|
|
+ const extendCom: any = ref(null); // 智能放量组件
|
|
const state = reactive({
|
|
const state = reactive({
|
|
// 页面变量
|
|
// 页面变量
|
|
userTarget: {
|
|
userTarget: {
|
|
@@ -471,6 +510,7 @@ const PlanEdit = defineComponent({
|
|
},
|
|
},
|
|
plan: {
|
|
plan: {
|
|
// part1 优化目标----------------------------------------------------
|
|
// part1 优化目标----------------------------------------------------
|
|
|
|
+ convert_type: "转化跟踪方式", // 转化跟踪方式
|
|
external_url: undefined, // 落地页
|
|
external_url: undefined, // 落地页
|
|
open_url: "", // 直达链接内容
|
|
open_url: "", // 直达链接内容
|
|
// part2 投放位置----------------------------------------------------
|
|
// part2 投放位置----------------------------------------------------
|
|
@@ -534,14 +574,22 @@ const PlanEdit = defineComponent({
|
|
...toRefs(state),
|
|
...toRefs(state),
|
|
labelCol: { span: 3 },
|
|
labelCol: { span: 3 },
|
|
wrapperCol: { span: 8 },
|
|
wrapperCol: { span: 8 },
|
|
|
|
+ cityCom,
|
|
|
|
+ crowdCom,
|
|
|
|
+ mediaCom,
|
|
|
|
+ timeCom,
|
|
|
|
+ articleCom,
|
|
|
|
+ workCom,
|
|
|
|
+ brandCom,
|
|
|
|
+ extendCom,
|
|
};
|
|
};
|
|
},
|
|
},
|
|
mounted() {
|
|
mounted() {
|
|
Bus.$on("stepThreeCheck", (val?: any) => {
|
|
Bus.$on("stepThreeCheck", (val?: any) => {
|
|
console.log("Step3Check");
|
|
console.log("Step3Check");
|
|
- Bus.$emit("stepThreeBack");
|
|
|
|
|
|
+ // Bus.$emit("stepThreeBack");
|
|
// console.log("接口");
|
|
// console.log("接口");
|
|
- // this.beforeCommit();
|
|
|
|
|
|
+ this.beforeCommit();
|
|
});
|
|
});
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
@@ -549,6 +597,38 @@ const PlanEdit = defineComponent({
|
|
beforeCommit() {
|
|
beforeCommit() {
|
|
let data: any = {};
|
|
let data: any = {};
|
|
data = JSON.parse(JSON.stringify(this.plan));
|
|
data = JSON.parse(JSON.stringify(this.plan));
|
|
|
|
+ // 一、组件数据收集
|
|
|
|
+ // 1.地域组件
|
|
|
|
+ data.district = this.cityCom.backData().type;
|
|
|
|
+ data.city = this.cityCom.backData().list;
|
|
|
|
+ // 2.定向排除-人群组件
|
|
|
|
+ data.retargeting_tags_include = this.crowdCom
|
|
|
|
+ ? this.crowdCom.backData().direction
|
|
|
|
+ : []; // 定向
|
|
|
|
+ data.retargeting_tags_exclude = this.crowdCom
|
|
|
|
+ ? this.crowdCom.backData().exclusion
|
|
|
|
+ : []; // 排除
|
|
|
|
+ // 3.定向排除-媒体组件
|
|
|
|
+ data.flow_package = this.mediaCom
|
|
|
|
+ ? this.mediaCom.backData().direction
|
|
|
|
+ : []; // 定向
|
|
|
|
+ data.exclude_flow_package = this.mediaCom
|
|
|
|
+ ? this.mediaCom.backData().exclusion
|
|
|
|
+ : []; // 排除
|
|
|
|
+ // 4.checkbox-文章分类
|
|
|
|
+ data.article_category = this.articleCom ? this.articleCom.backData() : [];
|
|
|
|
+ // 5.checkbox-手机品牌
|
|
|
|
+ data.device_brand = this.brandCom ? this.brandCom.backData() : [];
|
|
|
|
+ // 6.checkbox-职业状态
|
|
|
|
+ data.career = this.workCom ? this.workCom.backData() : [];
|
|
|
|
+ // 7.checkbox-智能放量
|
|
|
|
+ data.auto_extend_targets = this.extendCom
|
|
|
|
+ ? this.extendCom.backData()
|
|
|
|
+ : [];
|
|
|
|
+ // 8.投放时段
|
|
|
|
+ data.schedule_time = this.timeCom ? this.timeCom.backData() : [];
|
|
|
|
+
|
|
|
|
+ // 二、数据处理
|
|
// 1.搜索快投关键词 feed_delivery_search--true=>HAS_OPEN, false=>DISABLED
|
|
// 1.搜索快投关键词 feed_delivery_search--true=>HAS_OPEN, false=>DISABLED
|
|
data.feed_delivery_search = data.feed_delivery_search
|
|
data.feed_delivery_search = data.feed_delivery_search
|
|
? "HAS_OPEN"
|
|
? "HAS_OPEN"
|
|
@@ -587,6 +667,8 @@ const PlanEdit = defineComponent({
|
|
delete data.number;
|
|
delete data.number;
|
|
|
|
|
|
// 调用接口
|
|
// 调用接口
|
|
|
|
+ console.log("data", data);
|
|
|
|
+ return;
|
|
this.savePlan(data);
|
|
this.savePlan(data);
|
|
},
|
|
},
|
|
// 保存数据
|
|
// 保存数据
|
|
@@ -628,6 +710,7 @@ const PlanEdit = defineComponent({
|
|
? planOrigin.activate_type
|
|
? planOrigin.activate_type
|
|
: ["NONE"];
|
|
: ["NONE"];
|
|
// 5.根据是否有article_category 字段判断页面变量文章分类
|
|
// 5.根据是否有article_category 字段判断页面变量文章分类
|
|
|
|
+ // planOrigin.article_category= ['SOCIETY', 'ENTERTAINMENT', 'CARS']
|
|
this.userTarget.articleType = planOrigin.article_category
|
|
this.userTarget.articleType = planOrigin.article_category
|
|
? "CLASSIFY"
|
|
? "CLASSIFY"
|
|
: "NONE";
|
|
: "NONE";
|
|
@@ -646,6 +729,92 @@ const PlanEdit = defineComponent({
|
|
? "CUSTOM"
|
|
? "CUSTOM"
|
|
: "NONE";
|
|
: "NONE";
|
|
},
|
|
},
|
|
|
|
+ // 多选框互斥
|
|
|
|
+ checkboxChange(val: any, type: any) {
|
|
|
|
+ // 年龄互斥
|
|
|
|
+ if (type === "age") {
|
|
|
|
+ this.$nextTick(() => {
|
|
|
|
+ if (this.plan.age.indexOf("NONE") == 0 && this.plan.age.length > 1) {
|
|
|
|
+ this.plan.age.splice(this.plan.age.indexOf("NONE"), 1);
|
|
|
|
+ } else if (this.plan.age.indexOf("NONE") > 0) {
|
|
|
|
+ this.plan.age = ["NONE"];
|
|
|
|
+ }
|
|
|
|
+ if (this.plan.age.length === 0) this.plan.age = ["NONE"];
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ // 平台互斥
|
|
|
|
+ if (type === "platform") {
|
|
|
|
+ this.$nextTick(() => {
|
|
|
|
+ if (
|
|
|
|
+ this.plan.platform.indexOf("NONE") == 0 &&
|
|
|
|
+ this.plan.platform.length > 1
|
|
|
|
+ ) {
|
|
|
|
+ this.plan.platform.splice(this.plan.platform.indexOf("NONE"), 1);
|
|
|
|
+ } else if (this.plan.platform.indexOf("NONE") > 0) {
|
|
|
|
+ this.plan.platform = ["NONE"];
|
|
|
|
+ }
|
|
|
|
+ if (this.plan.platform.length === 0) this.plan.platform = ["NONE"];
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ // 设备类型互斥
|
|
|
|
+ if (type === "device_type") {
|
|
|
|
+ if (
|
|
|
|
+ this.plan.device_type.indexOf("NONE") == 0 &&
|
|
|
|
+ this.plan.device_type.length > 1
|
|
|
|
+ ) {
|
|
|
|
+ this.plan.device_type.splice(
|
|
|
|
+ this.plan.device_type.indexOf("NONE"),
|
|
|
|
+ 1
|
|
|
|
+ );
|
|
|
|
+ } else if (this.plan.device_type.indexOf("NONE") > 0) {
|
|
|
|
+ this.plan.device_type = ["NONE"];
|
|
|
|
+ }
|
|
|
|
+ if (this.plan.device_type.length === 0)
|
|
|
|
+ this.plan.device_type = ["NONE"];
|
|
|
|
+ }
|
|
|
|
+ // 网络互斥
|
|
|
|
+ if (type === "ac") {
|
|
|
|
+ console.log("acccc");
|
|
|
|
+ if (this.plan.ac.indexOf("unknown") == 0 && this.plan.ac.length > 1) {
|
|
|
|
+ this.plan.ac.splice(this.plan.ac.indexOf("unknown"), 1);
|
|
|
|
+ } else if (this.plan.ac.indexOf("unknown") > 0) {
|
|
|
|
+ this.plan.ac = ["unknown"];
|
|
|
|
+ }
|
|
|
|
+ if (this.plan.ac.length === 0) this.plan.ac = ["unknown"];
|
|
|
|
+ }
|
|
|
|
+ // 运营商互斥
|
|
|
|
+ if (type === "carrier") {
|
|
|
|
+ this.$nextTick(() => {
|
|
|
|
+ if (
|
|
|
|
+ this.plan.carrier.indexOf("NONE") == 0 &&
|
|
|
|
+ this.plan.carrier.length > 1
|
|
|
|
+ ) {
|
|
|
|
+ this.plan.carrier.splice(this.plan.carrier.indexOf("NONE"), 1);
|
|
|
|
+ } else if (this.plan.carrier.indexOf("NONE") > 0) {
|
|
|
|
+ this.plan.carrier = ["NONE"];
|
|
|
|
+ }
|
|
|
|
+ if (this.plan.carrier.length === 0) this.plan.carrier = ["NONE"];
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ // 新用户互斥
|
|
|
|
+ if (type === "activate_type") {
|
|
|
|
+ this.$nextTick(() => {
|
|
|
|
+ if (
|
|
|
|
+ this.plan.activate_type.indexOf("NONE") == 0 &&
|
|
|
|
+ this.plan.activate_type.length > 1
|
|
|
|
+ ) {
|
|
|
|
+ this.plan.activate_type.splice(
|
|
|
|
+ this.plan.activate_type.indexOf("NONE"),
|
|
|
|
+ 1
|
|
|
|
+ );
|
|
|
|
+ } else if (this.plan.activate_type.indexOf("NONE") > 0) {
|
|
|
|
+ this.plan.activate_type = ["NONE"];
|
|
|
|
+ }
|
|
|
|
+ if (this.plan.activate_type.length === 0)
|
|
|
|
+ this.plan.activate_type = ["NONE"];
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ },
|
|
// 用户定向保存为定向包
|
|
// 用户定向保存为定向包
|
|
saveDirectPackage() {
|
|
saveDirectPackage() {
|
|
console.log("保存定向包");
|
|
console.log("保存定向包");
|
|
@@ -657,6 +826,14 @@ const PlanEdit = defineComponent({
|
|
if (val === true) return 1;
|
|
if (val === true) return 1;
|
|
if (val === false) return 0;
|
|
if (val === false) return 0;
|
|
},
|
|
},
|
|
|
|
+ // 互斥项切换-工具函数
|
|
|
|
+ checkboxCheck(val: string) {
|
|
|
|
+ // if (this.plan[val].indexOf("NONE") == 0 && this.plan[val].length > 1) {
|
|
|
|
+ // this.plan[val].splice(this.plan[val].indexOf("NONE"), 1);
|
|
|
|
+ // } else if (this.plan[val].indexOf("NONE") > 0) {
|
|
|
|
+ // this.plan[val] = ["NONE"];
|
|
|
|
+ // }
|
|
|
|
+ },
|
|
},
|
|
},
|
|
beforeUnmount() {
|
|
beforeUnmount() {
|
|
Bus.$off("stepThreeCheck");
|
|
Bus.$off("stepThreeCheck");
|