|
@@ -7,19 +7,23 @@
|
|
|
<a-form-item label="转化跟踪方式">
|
|
|
<a-select placeholder="请选择">
|
|
|
<a-select-option value="XIANSUOTONG">线索通</a-select-option>
|
|
|
- <a-select-option value="XIANSUOTONG_API">线索同API</a-select-option>
|
|
|
+ <a-select-option value="XIANSUOTONG_API">线索API</a-select-option>
|
|
|
</a-select>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="优化目标">
|
|
|
<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
|
|
|
+ v-for="(item, index) in []"
|
|
|
+ :key="index"
|
|
|
+ ></a-select-option>
|
|
|
</a-select>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="落地页">
|
|
|
<a-select placeholder="请选择" v-model:value="plan.external_url">
|
|
|
- <a-select-option value="shanghai">Zone one</a-select-option>
|
|
|
- <a-select-option value="beijing">Zone two</a-select-option>
|
|
|
+ <a-select-option
|
|
|
+ v-for="(item, index) in []"
|
|
|
+ :key="index"
|
|
|
+ ></a-select-option>
|
|
|
</a-select>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="直达链接内容">
|
|
@@ -91,7 +95,10 @@
|
|
|
style="margin-bottom: 20px"
|
|
|
>
|
|
|
<a-form-item label="定向方式">
|
|
|
- <a-radio-group v-model:value="userTarget.directType">
|
|
|
+ <a-radio-group
|
|
|
+ v-model:value="userTarget.directType"
|
|
|
+ @change="getPackageList"
|
|
|
+ >
|
|
|
<a-radio value="BUILD">新建定向</a-radio>
|
|
|
<a-radio value="SELECT">选择已有定向包</a-radio>
|
|
|
</a-radio-group>
|
|
@@ -102,9 +109,11 @@
|
|
|
>
|
|
|
<a-select placeholder="请选择">
|
|
|
<a-select-option
|
|
|
- v-for="(item, index) in []"
|
|
|
+ v-for="(item, index) in directList"
|
|
|
:key="index"
|
|
|
- ></a-select-option>
|
|
|
+ :value="item.audience_package_id"
|
|
|
+ >{{ item.name }}</a-select-option
|
|
|
+ >
|
|
|
</a-select>
|
|
|
</a-form-item>
|
|
|
</a-form>
|
|
@@ -160,7 +169,7 @@
|
|
|
</a-form-item>
|
|
|
<!-- 媒体定向 -->
|
|
|
<a-form-item label="媒体定向">
|
|
|
- <a-radio-group v-model:value="userTarget.mediaTarget">
|
|
|
+ <a-radio-group v-model:value="plan.superior_popularity_type">
|
|
|
<a-radio-button value="NONE">不限</a-radio-button>
|
|
|
<a-radio-button value="1" disabled>游戏优质媒体</a-radio-button>
|
|
|
<a-radio-button value="CUSTOM">自定义</a-radio-button>
|
|
@@ -169,7 +178,7 @@
|
|
|
<direction-exclusion
|
|
|
ref="mediaCom"
|
|
|
:compType="'media'"
|
|
|
- v-if="userTarget.mediaTarget === 'CUSTOM'"
|
|
|
+ v-if="plan.superior_popularity_type === 'CUSTOM'"
|
|
|
></direction-exclusion>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="平台">
|
|
@@ -376,15 +385,66 @@
|
|
|
<h1>预算与出价</h1>
|
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
|
<a-form-item label="投放场景">
|
|
|
- <a-radio-group v-model:value="plan.smart_bid_type">
|
|
|
+ <a-radio-group
|
|
|
+ v-model:value="plan.smart_bid_type"
|
|
|
+ @change="itemChange('smart_bid_type')"
|
|
|
+ >
|
|
|
<a-radio value="SMART_BID_CUSTOM">常规投放</a-radio>
|
|
|
<a-radio value="SMART_BID_CONSERVATIVE">放量投放</a-radio>
|
|
|
</a-radio-group>
|
|
|
- <span style="font-size: 13px; color: gray"
|
|
|
+ <span
|
|
|
+ style="font-size: 13px; color: gray"
|
|
|
+ v-show="plan.smart_bid_type === 'SMART_BID_CUSTOM'"
|
|
|
>控制成本,尽量消耗完预算</span
|
|
|
>
|
|
|
+ <span
|
|
|
+ style="font-size: 13px; color: gray"
|
|
|
+ v-show="plan.smart_bid_type === 'SMART_BID_CONSERVATIVE'"
|
|
|
+ >接受成本上浮,尽量消耗更多预算</span
|
|
|
+ >
|
|
|
+ <a-checkbox
|
|
|
+ v-if="plan.smart_bid_type === 'SMART_BID_CONSERVATIVE'"
|
|
|
+ v-model:checked="plan.adjust_cpa"
|
|
|
+ >通过学习期后,尝试优化转化成本</a-checkbox
|
|
|
+ >
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item
|
|
|
+ label="日预算"
|
|
|
+ v-if="plan.smart_bid_type === 'SMART_BID_CONSERVATIVE'"
|
|
|
+ >
|
|
|
+ <a-input
|
|
|
+ addon-after="元"
|
|
|
+ v-model:value="plan.budget"
|
|
|
+ style="width: 140px"
|
|
|
+ type="number"
|
|
|
+ />
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item
|
|
|
+ label="预算"
|
|
|
+ v-if="plan.smart_bid_type === 'SMART_BID_CUSTOM'"
|
|
|
+ >
|
|
|
+ <a-input
|
|
|
+ addon-after="元"
|
|
|
+ v-model:value="plan.budget"
|
|
|
+ style="width: 220px"
|
|
|
+ type="number"
|
|
|
+ >
|
|
|
+ <template #addonBefore>
|
|
|
+ <a-select v-model:value="plan.budget_mode" style="width: 90px">
|
|
|
+ <a-select-option value="BUDGET_MODE_DAY"
|
|
|
+ >日预算</a-select-option
|
|
|
+ >
|
|
|
+ <a-select-option value="BUDGET_MODE_TOTAL"
|
|
|
+ >总预算</a-select-option
|
|
|
+ >
|
|
|
+ </a-select>
|
|
|
+ </template></a-input
|
|
|
+ >
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="竞价策略">
|
|
|
+ <a-form-item
|
|
|
+ label="竞价策略"
|
|
|
+ v-if="plan.smart_bid_type === 'SMART_BID_CUSTOM'"
|
|
|
+ >
|
|
|
<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>
|
|
@@ -397,6 +457,11 @@
|
|
|
<a-radio value="SCHEDULE_FROM_NOW">从今天起长期投放</a-radio>
|
|
|
<a-radio value="SCHEDULE_START_END">设置开始和结束时间</a-radio>
|
|
|
</a-radio-group>
|
|
|
+ <a-range-picker
|
|
|
+ v-if="plan.schedule_type === 'SCHEDULE_START_END'"
|
|
|
+ v-model:value="range"
|
|
|
+ :allowClear="false"
|
|
|
+ />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="投放时段">
|
|
|
<a-radio-group v-model:value="userTarget.timeDuration">
|
|
@@ -412,11 +477,16 @@
|
|
|
<!-- 投放时段 -->
|
|
|
<a-form-item label="付费方式">
|
|
|
<a-radio-group v-model:value="plan.pricing">
|
|
|
- <a-radio value="PRICING_OCPM">按展示付费(oCPM)</a-radio>
|
|
|
+ <a-radio value="PRICING_CPM">按展示付费(oCPM)</a-radio>
|
|
|
</a-radio-group>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="目标转化出价">
|
|
|
- <a-input style="width: 100px" type="number" suffix="元" />
|
|
|
+ <a-input
|
|
|
+ style="width: 100px"
|
|
|
+ type="number"
|
|
|
+ suffix="元"
|
|
|
+ v-model:value="plan.cpa_bid"
|
|
|
+ />
|
|
|
<span style="font-size: 13px; color: gray">出价不能大于预算</span>
|
|
|
</a-form-item>
|
|
|
</a-form>
|
|
@@ -427,27 +497,30 @@
|
|
|
<h1>第三方检测链</h1>
|
|
|
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
|
<a-form-item label="展示">
|
|
|
- <a-input placeholder="选填" v-model:value="plan.track_url" />
|
|
|
+ <a-input placeholder="选填" v-model:value="plan.track_url[0]" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="有效触点">
|
|
|
- <a-input placeholder="选填" v-model:value="plan.action_track_url" />
|
|
|
+ <a-input
|
|
|
+ placeholder="选填"
|
|
|
+ v-model:value="plan.action_track_url[0]"
|
|
|
+ />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="视频播放">
|
|
|
<a-input
|
|
|
placeholder="选填"
|
|
|
- v-model:value="plan.video_play_track_url"
|
|
|
+ v-model:value="plan.video_play_track_url[0]"
|
|
|
/>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="视频播完">
|
|
|
<a-input
|
|
|
placeholder="选填"
|
|
|
- v-model:value="plan.video_play_done_track_url"
|
|
|
+ v-model:value="plan.video_play_done_track_url[0]"
|
|
|
/>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="视频有效播放">
|
|
|
<a-input
|
|
|
placeholder="选填"
|
|
|
- v-model:value="plan.video_play_effective_track_url"
|
|
|
+ v-model:value="plan.video_play_effective_track_url[0]"
|
|
|
/>
|
|
|
</a-form-item>
|
|
|
</a-form>
|
|
@@ -470,8 +543,10 @@
|
|
|
|
|
|
<script lang="ts">
|
|
|
import { defineComponent, reactive, toRefs, ref } from "vue";
|
|
|
-import { createPlan } from "@/api";
|
|
|
+import { createPlan, getPackage } from "@/api";
|
|
|
import Bus from "@/utils/bus";
|
|
|
+import { Moment } from "moment";
|
|
|
+import moment from "moment";
|
|
|
import TimeSchedule from "../component/time-schedule.vue";
|
|
|
import Location from "../component/location-auto-release.vue";
|
|
|
import DirectionExclusion from "../component/direction-exclusion.vue";
|
|
@@ -510,7 +585,7 @@ const PlanEdit = defineComponent({
|
|
|
},
|
|
|
plan: {
|
|
|
// part1 优化目标----------------------------------------------------
|
|
|
- convert_type: "转化跟踪方式", // 转化跟踪方式
|
|
|
+ convert_type: "", // 转化跟踪方式
|
|
|
external_url: undefined, // 落地页
|
|
|
open_url: "", // 直达链接内容
|
|
|
// part2 投放位置----------------------------------------------------
|
|
@@ -526,7 +601,7 @@ const PlanEdit = defineComponent({
|
|
|
retargeting_tags_include: ref<any[]>([]), // 定向人群
|
|
|
retargeting_tags_exclude: ref<any[]>([]), //排除人群
|
|
|
interest_action_mode: "UNLIMITED", // 行为兴趣
|
|
|
- superior_popularity_type: "", // 媒体定向类型 、、 选择自定义媒体包时本字段不传
|
|
|
+ superior_popularity_type: "NONE", // 媒体定向类型 、、 选择自定义媒体包时本字段不传
|
|
|
flow_package: ref<any[]>([]), // 定向流量包
|
|
|
exclude_flow_package: ref<any[]>([]), // 排除流量包
|
|
|
platform: ref<any[]>(["NONE"]), // 平台-字符串数组
|
|
@@ -545,30 +620,34 @@ const PlanEdit = defineComponent({
|
|
|
auto_extend_targets: ref<any[]>([]), // 可开放定向
|
|
|
// part4 预算与出价---------------------------------------
|
|
|
smart_bid_type: "SMART_BID_CUSTOM", // 投放场景
|
|
|
+ adjust_cpa: false, // 优化转化成本 0-false 1-true // 投放场景为常规投放时不传
|
|
|
flow_control_mode: "FLOW_CONTROL_MODE_FAST", // 竞价策略
|
|
|
- budget_mode: "", // 预算类型
|
|
|
+ budget_mode: "BUDGET_MODE_DAY", // 预算类型 日预算-BUDGET_MODE_DAY 总预算-BUDGET_MODE_TOTAL // 投放场景为放量投放时 固定为日预算
|
|
|
budget: 0, // 预算
|
|
|
schedule_type: "SCHEDULE_FROM_NOW", // 投放时间类型
|
|
|
start_time: "", // 投放开始时间
|
|
|
end_time: "", // 投放结束时间
|
|
|
schedule_time: "", // 投放时段
|
|
|
- pricing: "PRICING_OCPM", // 付费方式
|
|
|
+ pricing: "PRICING_CPM", // 付费方式
|
|
|
cpa_bid: "", // 目标转化出价
|
|
|
// part5 第三方检测---------------------------------------
|
|
|
- track_url: "", // 展示
|
|
|
- action_track_url: "", // 有效触点
|
|
|
- video_play_track_url: "", // 视频播放
|
|
|
- video_play_done_track_url: "", // 视频播完
|
|
|
- video_play_effective_track_url: "", // 有效播放
|
|
|
+ track_url: ref<any[]>([]), // 展示
|
|
|
+ action_track_url: ref<any[]>([]), // 有效触点
|
|
|
+ video_play_track_url: ref<any[]>([]), // 视频播放
|
|
|
+ video_play_done_track_url: ref<any[]>([]), // 视频播完
|
|
|
+ video_play_effective_track_url: ref<any[]>([]), // 有效播放
|
|
|
// part6 计划名称---------------------------------------
|
|
|
name: "", // 计划名称
|
|
|
number: 1, // 创建数量
|
|
|
},
|
|
|
+ range: ref<Moment[]>([]), // 投放时间选择
|
|
|
phonePriceMarks: PriceSlider, //手机价格区间
|
|
|
optionsList: {
|
|
|
mediaList: LaunchMedia, // 投放媒体
|
|
|
sceneList: LaunchScene, // 投放场景
|
|
|
},
|
|
|
+ advertiser_id: 0,
|
|
|
+ directList: ref<any[]>([]),
|
|
|
});
|
|
|
return {
|
|
|
...toRefs(state),
|
|
@@ -585,11 +664,13 @@ const PlanEdit = defineComponent({
|
|
|
};
|
|
|
},
|
|
|
mounted() {
|
|
|
+ this.advertiser_id = Number(this.$route.query.advertiser_id);
|
|
|
+ let time = this.getNowFormatDate();
|
|
|
+ this.plan.name = `${this.plan.pricing}_${time}`;
|
|
|
Bus.$on("stepThreeCheck", (val?: any) => {
|
|
|
console.log("Step3Check");
|
|
|
- // Bus.$emit("stepThreeBack");
|
|
|
- // console.log("接口");
|
|
|
- this.beforeCommit();
|
|
|
+ Bus.$emit("stepThreeBack");
|
|
|
+ // this.beforeCommit();
|
|
|
});
|
|
|
},
|
|
|
methods: {
|
|
@@ -634,7 +715,7 @@ const PlanEdit = defineComponent({
|
|
|
? "HAS_OPEN"
|
|
|
: "DISABLED";
|
|
|
// 2.用户定向选择已有定向包时处理
|
|
|
- // 3.缺省代表不限的字段 ['NONE'] => [], 平台、设备类型、运营商carrier、新用户activate_type
|
|
|
+ // 3.缺省代表不限的字段 ['NONE'] => [], 平台、设备类型、运营商carrier、新用户activate_type、(年龄age)、ac(unknown)
|
|
|
// 3.1平台
|
|
|
if (data.platform[0] === "NONE") delete data.platform;
|
|
|
// 3.2设备类型device_type
|
|
@@ -643,6 +724,10 @@ const PlanEdit = defineComponent({
|
|
|
if (data.carrier[0] === "NONE") delete data.carrier;
|
|
|
// 3.4新用户activate_type
|
|
|
if (data.activate_type[0] === "NONE") delete data.activate_type;
|
|
|
+ // 3.5年龄 age
|
|
|
+ if (data.age[0] === "NONE") delete data.age;
|
|
|
+ // 3.6 ac
|
|
|
+ if (data.ac[0] === "unknown") delete data.ac;
|
|
|
// 4.当过滤已转化用户不是CUSTOMER 时 删除过滤时间
|
|
|
if (data.hide_if_converted !== "CUSTOMER")
|
|
|
delete data.converted_time_duration;
|
|
@@ -665,10 +750,36 @@ const PlanEdit = defineComponent({
|
|
|
// 12.删除plan.name plan.number
|
|
|
delete data.name;
|
|
|
delete data.number;
|
|
|
-
|
|
|
+ // 13.投放场景为常规投放时 删除优化转化成本 adjust_cpa 否则删除竞价策略
|
|
|
+ if (data.smart_bid_type === "SMART_BID_CUSTOM") {
|
|
|
+ delete data.adjust_cpa;
|
|
|
+ } else {
|
|
|
+ data.adjust_cpa = this.numAndBool(data.adjust_cpa);
|
|
|
+ delete data.flow_control_mode;
|
|
|
+ }
|
|
|
+ // 14.当投放时间为指定时间时 range=>start_time\end_time 否则删除
|
|
|
+ if (data.schedule_type === "SCHEDULE_START_END") {
|
|
|
+ data.start_time = moment(this.range[0]).format("YYYY-MM-DD");
|
|
|
+ data.end_time = moment(this.range[1]).format("YYYY-MM-DD");
|
|
|
+ } else {
|
|
|
+ delete data.start_time;
|
|
|
+ delete data.end_time;
|
|
|
+ }
|
|
|
+ // 15.投放人群为不限时 删除 retargeting_tags_include 、 retargeting_tags_exclude
|
|
|
+ if (this.userTarget.crowdType === "NONE") {
|
|
|
+ delete data.retargeting_tags_include;
|
|
|
+ delete data.retargeting_tags_exclude;
|
|
|
+ }
|
|
|
+ // 15.媒体定向为不限时 删除 flow_package 、 exclude_flow_package
|
|
|
+ if (this.plan.superior_popularity_type === "NONE") {
|
|
|
+ delete data.flow_package;
|
|
|
+ delete data.exclude_flow_package;
|
|
|
+ } else {
|
|
|
+ delete data.superior_popularity_type;
|
|
|
+ }
|
|
|
// 调用接口
|
|
|
console.log("data", data);
|
|
|
- return;
|
|
|
+ // return;
|
|
|
this.savePlan(data);
|
|
|
},
|
|
|
// 保存数据
|
|
@@ -684,7 +795,13 @@ const PlanEdit = defineComponent({
|
|
|
ad_data: { ...plan_data },
|
|
|
};
|
|
|
console.log("新建计划数据", param);
|
|
|
- let { data } = await createPlan(param);
|
|
|
+ try {
|
|
|
+ let { data } = await createPlan(param);
|
|
|
+ console.log("请求成功");
|
|
|
+ Bus.$emit("stepThreeBack");
|
|
|
+ } catch (err) {
|
|
|
+ console.log("请求失败", err.msg);
|
|
|
+ }
|
|
|
},
|
|
|
// 回显之前处理数据
|
|
|
beforeBackShow(planOrigin: any) {
|
|
@@ -728,6 +845,27 @@ const PlanEdit = defineComponent({
|
|
|
this.userTarget.timeDuration = planOrigin.schedule_time
|
|
|
? "CUSTOM"
|
|
|
: "NONE";
|
|
|
+ // 11.投放场景不是常规投放时 优化成本bool转num
|
|
|
+ if (planOrigin.smart_bid_type !== "SMART_BID_CUSTOM")
|
|
|
+ planOrigin.adjust_cpa = this.numAndBool(planOrigin.adjust_cpa);
|
|
|
+ // 12.如果返回数据里有start_time/end_time 将这两个值赋值给range
|
|
|
+ if (planOrigin.hasOwnProperty("")) {
|
|
|
+ this.range = [
|
|
|
+ moment(planOrigin.start_time, "YYYY-MM-DD"),
|
|
|
+ moment(planOrigin.end_time, "YYYY-MM-DD"),
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 获取已有定向包
|
|
|
+ async getPackageList() {
|
|
|
+ let param = {
|
|
|
+ advertiser_id: this.advertiser_id,
|
|
|
+ page: 1,
|
|
|
+ page_size: 100,
|
|
|
+ };
|
|
|
+ let { data } = await getPackage(param);
|
|
|
+ console.log("定向包数据", data);
|
|
|
+ this.directList = data.audience_packages;
|
|
|
},
|
|
|
// 多选框互斥
|
|
|
checkboxChange(val: any, type: any) {
|
|
@@ -815,6 +953,17 @@ const PlanEdit = defineComponent({
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
+ // 选项改变时联动
|
|
|
+ itemChange(type: any) {
|
|
|
+ // 投放场景为放量投放 预算类型固定为日预算 清空预算
|
|
|
+ if (
|
|
|
+ type === "smart_bid_type" &&
|
|
|
+ this.plan.smart_bid_type === "SMART_BID_CONSERVATIVE"
|
|
|
+ ) {
|
|
|
+ this.plan.budget_mode = "BUDGET_MODE_DAY";
|
|
|
+ this.plan.budget = 0;
|
|
|
+ }
|
|
|
+ },
|
|
|
// 用户定向保存为定向包
|
|
|
saveDirectPackage() {
|
|
|
console.log("保存定向包");
|
|
@@ -826,6 +975,47 @@ const PlanEdit = defineComponent({
|
|
|
if (val === true) return 1;
|
|
|
if (val === false) return 0;
|
|
|
},
|
|
|
+ // 工具函数 获取当前时间
|
|
|
+ getNowFormatDate() {
|
|
|
+ var date = new Date();
|
|
|
+ var seperator1 = "-";
|
|
|
+ var seperator2 = ":";
|
|
|
+ var month: any = date.getMonth() + 1;
|
|
|
+ var strDate: any = date.getDate();
|
|
|
+ var strHours: any = date.getHours();
|
|
|
+ var strMinutes: any = date.getMinutes();
|
|
|
+ var strSeconds: any = date.getSeconds();
|
|
|
+ if (month >= 1 && month <= 9) {
|
|
|
+ month = "0" + month;
|
|
|
+ }
|
|
|
+ if (strDate >= 0 && strDate <= 9) {
|
|
|
+ strDate = "0" + strDate;
|
|
|
+ }
|
|
|
+ if (strHours >= 0 && strHours <= 9) {
|
|
|
+ strHours = "0" + strHours;
|
|
|
+ }
|
|
|
+ if (strMinutes >= 0 && strMinutes <= 9) {
|
|
|
+ strMinutes = "0" + strMinutes;
|
|
|
+ }
|
|
|
+ if (strSeconds >= 0 && strSeconds <= 9) {
|
|
|
+ strSeconds = "0" + strSeconds;
|
|
|
+ }
|
|
|
+ var currentdate =
|
|
|
+ date.getFullYear() +
|
|
|
+ seperator1 +
|
|
|
+ month +
|
|
|
+ seperator1 +
|
|
|
+ strDate +
|
|
|
+ " " +
|
|
|
+ strHours +
|
|
|
+ seperator2 +
|
|
|
+ strMinutes +
|
|
|
+ seperator2 +
|
|
|
+ strSeconds;
|
|
|
+ currentdate = currentdate.replace(/-/g, "_").replace(/ /g, "_");
|
|
|
+ currentdate = currentdate.slice(5, 19);
|
|
|
+ return currentdate;
|
|
|
+ },
|
|
|
// 互斥项切换-工具函数
|
|
|
checkboxCheck(val: string) {
|
|
|
// if (this.plan[val].indexOf("NONE") == 0 && this.plan[val].length > 1) {
|