Преглед изворни кода

Merge branch 'feature/work-jyf'

jiayufei пре 4 година
родитељ
комит
f3b21cd899

+ 1 - 0
src/views/modules/account-config/account-config-server.js

@@ -1,3 +1,4 @@
 export const urlAcount = 'http://118.24.244.213:8080'; // 线上
+// export const urlAcount = 'http://apipre.tjyourong.com.cn'; // 预生产
 // export const urlAcount = 'http://192.168.1.43:8080'; // 子安
 // export const urlAcount = 'http://139.186.165.84:8080'; // 测试

+ 61 - 19
src/views/modules/account-config/account-config.vue

@@ -104,7 +104,7 @@
                             @blur="handleAccountBudget"
                         /> 元
                     </a-form-model-item>
-                    <div v-if="adBudgetShowTitle" style="width: 500px;color: #f00;margin-left: 140px;">单次修改预算幅度, 不能低于100.0元</div>
+                    <!-- <div v-if="adBudgetShowTitle" style="width: 500px;color: #f00;margin-left: 140px;">单次修改预算幅度, 不能低于100.0元</div> -->
                 </a-form-model>
             </div>
         </a-modal>
@@ -141,6 +141,7 @@
                                 v-model="configForm.adMinBid"
                                 :min="0.1"
                                 :max="10000"
+                                :step="0.01"
                                 placeholder="请输入最小值"
                             />
                         </a-form-model-item>
@@ -151,6 +152,7 @@
                                 v-model="configForm.adMaxBid"
                                 :min="0.1"
                                 :max="10000"
+                                :step="0.01"
                                 placeholder="请输入最大值"
                             />
                         </a-form-model-item>
@@ -162,6 +164,7 @@
                                 v-model="configForm.adMinBid"
                                 :min="0.1"
                                 :max="10000"
+                                :step="0.01"
                                 placeholder="请输入最小值"
                             />
                         </a-form-model-item>
@@ -172,12 +175,15 @@
                                 v-model="configForm.adMaxBid"
                                 :min="0.1"
                                 :max="10000"
+                                :step="0.01"
                                 placeholder="请输入最大值"
                             />
                         </a-form-model-item>
                         <a-form-model-item label="浮动间隔" prop="adStepBid">
                             <a-input-number
                                 class="common-input"
+                                :min="0"
+                                :step="0.01"
                                 v-model="configForm.adStepBid"
                                 placeholder="请输入浮动间隔"
                             />
@@ -203,19 +209,27 @@ export default {
     data() {
         let adMinBidValidator = (rule, value, callback) => {
             const finallyResult = Number(this.configForm.adMaxBid);
-            if (finallyResult !== '' && value && Number(value) < finallyResult) {
+            if (finallyResult !== '' && value && Number(value) <= finallyResult) {
                 callback();
             }
             else {
                 callback('最低出价不能高于最高出价');
             }
         };
+        let adCpaBidValidator = (rule, value, callback) => {
+            if (Number(this.updateModTxt.adBudget) < Number(value)) {
+                callback('出价不能大于预算');
+            }
+            else {
+                callback();
+            }
+        };
         let adMaxBidValidator = (rule, value, callback) => {
             const finallyResult = Number(this.configForm.adMinBid);
-            if (finallyResult && value && Number(value) < finallyResult) {
+            if (finallyResult && value && Number(value) <= finallyResult) {
                 callback('最高出价不能低于最低出价');
             }
-            else if (Number(this.updateModTxt.accountBudget) < Number(value)) {
+            else if (Number(this.updateModTxt.adBudget) < Number(value)) {
                 callback('出价不能大于预算');
             }
             else if (Number(this.configForm.adMaxBid) > Number(this.configForm.adMinBid) + Number(this.configForm.adStepBid)) {
@@ -236,6 +250,25 @@ export default {
                 callback('最低出价+浮动间隔<最高出价');
             }
         };
+        let budgetValidator = (rule, value, callback) => {
+            // const finallyResult = Number(this.configForm.adMinBid) + Number(value);
+            // if (finallyResult < Number(this.configForm.adMaxBid)) {
+            //     callback();
+            // }
+            // else {
+            //     callback('最低出价+浮动间隔<最高出价');
+            // }
+            const changeBudget = this.updateModTxt.accountBudget;
+            if (Number(value) > Number(changeBudget) && Number(value) < (Number(changeBudget) + 100)) {
+                callback('单次修改预算幅度, 不能低于100.0元');
+            }
+            else if (Number(value) < Number(changeBudget) && Number(value) > (Number(changeBudget) - 100)) {
+                callback('单次修改预算幅度, 不能低于100.0元');
+            }
+            else {
+                callback();
+            }
+        };
         return {
             adBudgetShowTitle: false,
             budgetVisible: false,
@@ -245,7 +278,8 @@ export default {
             },
             budgetRules: {
                 budget: [
-                    {required: true, message: '请输入', trigger: 'blur'}
+                    {required: true, message: '请输入', trigger: 'blur'},
+                    {validator: budgetValidator, trigger: 'blur'}
                 ]
             },
             labelCol: {span: 4},
@@ -258,7 +292,8 @@ export default {
             },
             rules: {
                 adCpaBid: [
-                    {required: true, message: '请输入', trigger: 'blur'}
+                    {required: true, message: '请输入', trigger: 'blur'},
+                    {validator: adCpaBidValidator, trigger: 'blur'}
                 ],
                 adStepBid: [
                     {required: true, message: '请输入', trigger: 'blur'},
@@ -344,22 +379,22 @@ export default {
     methods: {
         ...mapGetters(['nickname', 'avatar', 'userInfo']),
         handleAccountMode(e) {
-            this.budgetForm.budget = 0;
+            this.budgetForm.budget = 1000;
+            this.adBudgetShowTitle = false;
         },
         handleAccountBudget(e) {
             const adBudgetInput = e.target.value;
-            console.log(this.updateModTxt, 'this.updateModTxt-this.updateModTxt');
-            const changeBudget = this.updateModTxt.accountBudget;
-            this.configForm.budget = Number(Number(adBudgetInput).toFixed(2));
-            if (Number(adBudgetInput) >= Number(changeBudget) && Number(adBudgetInput) < (Number(changeBudget) + 100)) {
-                this.adBudgetShowTitle = true;
-            }
-            else if (Number(adBudgetInput) <= Number(changeBudget) && Number(adBudgetInput) > (Number(changeBudget) - 100)) {
-                this.adBudgetShowTitle = true;
-            }
-            else {
-                this.adBudgetShowTitle = false;
-            }
+            // const changeBudget = this.updateModTxt.accountBudget;
+            this.budgetForm.budget = Number(Number(adBudgetInput).toFixed(2));
+            // if (Number(adBudgetInput) >= Number(changeBudget) && Number(adBudgetInput) < (Number(changeBudget) + 100)) {
+            //     this.adBudgetShowTitle = true;
+            // }
+            // else if (Number(adBudgetInput) <= Number(changeBudget) && Number(adBudgetInput) > (Number(changeBudget) - 100)) {
+            //     this.adBudgetShowTitle = true;
+            // }
+            // else {
+            //     this.adBudgetShowTitle = false;
+            // }
         },
         handleModeSure() {
             let paramsData = new FormData();
@@ -400,10 +435,15 @@ export default {
         },
         handleUpdateMod(record) {
             this.updateModTxt = record;
+            this.configForm.adMinBid = record.adMinBid;
+            this.configForm.adMaxBid = record.adMaxBid;
+            this.configForm.adStepBid = record.adStepBid;
             this.modeVisible = true;
         },
         handleUpdateBudget(record) {
             this.updateModTxt = record;
+            this.budgetForm.budgetType = record.accountBudgetMode;
+            this.budgetForm.budget = record.accountBudget;
             this.budgetVisible = true;
         },
         handleBudgetSure() {
@@ -430,6 +470,7 @@ export default {
         },
         handleBudgetCancel() {
             this.budgetVisible = false;
+            this.budgetForm.budgetType = '1';
         },
         handlePopoverChange(data) {
             putAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/updStaOrCpaOrBudgetById', data).then(result => {
@@ -441,6 +482,7 @@ export default {
                     this.adCpaBid = undefined;
                     this.modeVisible = false;
                     this.budgetVisible = false;
+                    this.budgetForm.budgetType = '1';
                     this.handleInitTable();
                 }
                 else {

+ 119 - 0
src/views/modules/account-config/components/check-more-plat/check-more-plat.less

@@ -0,0 +1,119 @@
+.ul-radio-group {
+    border-radius: 5px;
+    height: 32px;
+    padding: 0;
+    margin: 0;
+    border: none;
+    background: transparent;
+    .btn {
+        background: transparent;
+        padding: 0;
+        margin: 0;
+        border: none;
+    }
+    .item {
+        min-width: 80px;
+        padding: 0px 15px;
+        text-align: center;
+        display: inline-block;
+        border: 1px solid #ccc;
+        border-left: 0;
+        height: 32px;
+        line-height: 32px;
+        cursor: pointer;
+        .checkbox-button-input {
+            width: 0;
+            height: 0;
+            opacity: 0;
+        }
+        .ant-checkbox {
+            display: none;
+        }
+    }
+    .bgcolor {
+        color: rgba(0, 0, 0, 0.25);
+        background-color: #f5f5f5;
+        border-color: #d9d9d9;
+        cursor: not-allowed;
+    }
+    .item::after {
+        content: '';
+        position: absolute;
+        right: 1px;
+        top: -2px;
+        width: 0;
+        height: 0;
+        border-top: 6px solid transparent;
+        border-bottom: 6px solid transparent;
+        border-left: 6px solid;
+        border-left-color: #e0e0e0;
+        -webkit-transform: rotate(-45deg);
+        -ms-transform: rotate(-45deg);
+        transform: rotate(-45deg);
+        border-radius: 2px;
+    }
+    .item:hover {
+        color: #1890ff;
+    }
+    .selection {
+        color: #fff;
+        background: #1890ff;
+    }
+    .item.selection:hover {
+        color: #fff;
+        background: #40a9ff;
+    }
+    .item.selection:after {
+        border-left: 6px solid #1890ff;
+    }
+    .item:hover::after {
+        border-left: 6px solid #40a9ff;
+    }
+    .bgcolor:hover {
+        color: rgba(0, 0, 0, 0.25);
+        background-color: #f5f5f5;
+        border-color: #d9d9d9;
+        cursor: not-allowed;
+    }
+    .bgcolor:hover::after {
+        border-left: 6px solid #e0e0e0;
+    }
+    .bgcolor.selection:after {
+        border-left: 6px solid #e0e0e0;
+    }
+    .bgcolor.selection {
+        color: rgba(0, 0, 0, 0.25);
+        background-color: #f5f5f5;
+        border-color: #d9d9d9;
+        cursor: not-allowed;
+    }
+    .bgcolor.selection:hover {
+        color: rgba(0, 0, 0, 0.25);
+        background-color: #f5f5f5;
+        border-color: #d9d9d9;
+        cursor: not-allowed;
+    }
+    .bgcolor.selection:after {
+        border-left: 6px solid #e0e0e0;
+    }
+    .ant-checkbox-wrapper + .ant-checkbox-wrapper {
+        margin-left: 0;
+    }
+}
+.ul-radio-group .item:first-child {
+    border-radius: 5px 0 0 5px;
+    border-left: 1px solid #ccc;
+}
+.ul-radio-group .item.selection:first-child {
+    border-radius: 5px 0 0 5px;
+    border-left: 1px solid #1890ff;
+}
+.ul-radio-group .item.selection:nth-child(2) {
+    border-left: 1px solid #1890ff;
+}
+.ul-radio-group .item:first-child:after {
+    border-left: 0;
+}
+.ul-radio-group .item:last-child {
+    border-radius: 0px 5px 5px 0px;
+}

+ 331 - 0
src/views/modules/account-config/components/check-more-plat/check-more-plat.vue

@@ -0,0 +1,331 @@
+<style lang="scss">
+.ul-radio-group {
+  border-radius: 5px;
+  height: 32px;
+  padding: 0;
+  margin: 0;
+  border: none;
+  background: transparent;
+
+  .btn {
+    background: transparent;
+    padding: 0;
+    margin: 0;
+    border: none;
+  }
+  .item {
+    min-width: 80px;
+    padding: 0px 15px;
+    text-align: center;
+    display: inline-block;
+    border: 1px solid #ccc;
+    border-left: 0;
+    height: 32px;
+    line-height: 32px;
+    cursor: pointer;
+    .checkbox-button-input {
+      width: 0;
+      height: 0;
+      opacity: 0;
+    }
+    .ant-checkbox {
+      display: none;
+    }
+  }
+  .bgcolor {
+    color: rgba(0, 0, 0, 0.25);
+    background-color: #f5f5f5;
+    border-color: #d9d9d9;
+    cursor: not-allowed;
+  }
+  .item::after {
+    content: '';
+    position: absolute;
+    right: 1px;
+    top: -2px;
+    width: 0;
+    height: 0;
+    border-top: 6px solid transparent;
+    border-bottom: 6px solid transparent;
+    border-left: 6px solid;
+    border-left-color: #e0e0e0;
+    -webkit-transform: rotate(-45deg);
+    -ms-transform: rotate(-45deg);
+    transform: rotate(-45deg);
+    border-radius: 2px;
+  }
+  .item:hover {
+    color: #1890ff;
+  }
+  .selection {
+    color: #fff;
+    background: #1890ff;
+    // border-color: #1890ff;
+  }
+  .item.selection:hover {
+    color: #fff;
+    background: #40a9ff;
+  }
+  .item.selection:after {
+    border-left: 6px solid #1890ff;
+  }
+  .item:hover::after {
+    // border-color: #40a9ff;
+    border-left: 6px solid #40a9ff;
+  }
+  .bgcolor:hover {
+    color: rgba(0, 0, 0, 0.25);
+    background-color: #f5f5f5;
+    border-color: #d9d9d9;
+    cursor: not-allowed;
+  }
+  .bgcolor:hover::after {
+    // border-color: #40a9ff;
+    border-left: 6px solid #e0e0e0;
+  }
+  .bgcolor.selection:after {
+    border-left: 6px solid #e0e0e0;
+  }
+  .bgcolor.selection {
+    color: rgba(0, 0, 0, 0.25);
+    background-color: #f5f5f5;
+    border-color: #d9d9d9;
+    cursor: not-allowed;
+  }
+  .bgcolor.selection:hover {
+    // color: #1890ff;
+    color: rgba(0, 0, 0, 0.25);
+    background-color: #f5f5f5;
+    border-color: #d9d9d9;
+    cursor: not-allowed;
+  }
+  .bgcolor.selection:after {
+    border-left: 6px solid #e0e0e0;
+  }
+  .ant-checkbox-wrapper + .ant-checkbox-wrapper {
+    margin-left: 0;
+  }
+}
+.ul-radio-group .item:first-child {
+  border-radius: 5px 0 0 5px;
+  border-left: 1px solid #ccc;
+}
+.ul-radio-group .item.selection:first-child {
+  border-radius: 5px 0 0 5px;
+  border-left: 1px solid #1890ff;
+}
+.ul-radio-group .item.selection:nth-child(2) {
+  border-left: 1px solid #1890ff;
+}
+.ul-radio-group .item:first-child:after {
+  border-left: 0;
+}
+.ul-radio-group .item:last-child {
+  border-radius: 0px 5px 5px 0px;
+}
+</style>
+<template>
+    <div class="ul-radio-group">
+        <a-checkbox-group v-model="selectedVal" :disabled="disabled" style="width: 100%">
+            <a-checkbox
+                v-for="item of selectOption"
+                :label="item.label"
+                :key="item.value"
+                :value="item.value"
+                :class="{
+                    item: true && userButton,
+                    selection: selectedVal && selectedVal.indexOf(item.value) > -1 && userButton,
+                    bgcolor: item.disabled
+                }"
+            >
+                {{ item.label }}
+            </a-checkbox>
+        </a-checkbox-group>
+    </div>
+</template>
+<script>
+import {isArray} from '@/utils/Tools';
+import {getAction } from '@/api/manage';
+export default {
+    name: 'check-more-plat',
+    props: {
+        userButton: {
+            type: Boolean,
+            default() {
+                return true
+            }
+        },
+        code: {
+            // 参数code
+            type: String,
+            default: ''
+        },
+        allValue: {
+            type: Boolean,
+            default() {
+                return false
+            }
+        },
+        options: {
+            // 外部传入的option 可替代请求项
+            type: Array,
+            default() {
+                return []
+            }
+        },
+        value: {
+            // v-model绑定值
+            type: [Number, Array, String],
+            default() {
+                return []
+            }
+        },
+        label: {
+            // label 绑定值
+            type: [Array, String],
+            default: ''
+        },
+        radioStyle: {
+            // 是否复选框模拟单选效果
+            type: Boolean,
+            default: false
+        },
+        disabled: {
+            // 是否禁用
+            type: Boolean,
+            default: false
+        }
+    },
+    data() {
+        return {
+            selectOption: []
+        }
+    },
+    watch: {
+        options(val) {
+            if (isArray(val)) {
+                this.selectOption.splice(0, this.selectOption.length);
+                this.selectOption.push(...val);
+            }
+        },
+        selectedVal(n, o) {
+            if (this.radioStyle && !this.allValue) {
+                if (n.length == 0) {
+                this.selectedVal = o;
+                }
+            }
+        }
+    },
+    computed: {
+        selectedVal: {
+            get: function () {
+                return this.value;
+            },
+            set: function (val) {
+                this.selectChange(val);
+            }
+        }
+    },
+    mounted() {
+        this.$nextTick(() => {
+            if (this.code && this.options.length == 0) {
+                // 如果code值不为空且options.lengt==0, 则去请求字典项
+                this.getOptions();
+            }
+            else {
+                // 否则直接获取外部传入的options
+                this.selectOption.splice(0, this.selectOption.length);
+                this.selectOption.push(...this.options);
+            }
+        });
+    },
+  methods: {
+    getOptions() {
+        // 获取字典项
+        getAction('/sys/dictItem/list', { dictId: this.code, pageSize: 1000, pageNo: 1 }).then((res) => {
+            if (res.success && isArray(res.result.records)) {
+                var data = res.result.records;
+                data = data.map((item) => {
+                    return {
+                        label: item.itemText,
+                        value: item.itemValue,
+                        ...item
+                    };
+                });
+                if (this.allValue) {
+                    data.unshift({ label: '不检查', value: 'unlimited' });
+                    if (this.value == '' || this.value == '' || this.value == null || this.value.length == 0) {
+                        this.selectedVal = ['unlimited'];
+                    };
+                }
+                else {
+                    if (this.value == '' || this.value == '' || this.value == null || this.value.length == 0) {
+                        this.selectedVal = [];
+                    }
+                }
+                this.selectOption.push(...data);
+            }
+        });
+    },
+    selectChange(val) {
+        // 选择事件
+        if (!this.radioStyle) {
+            // 多选
+            var retrunData = [];
+            let label = this.selectOption.filter((v) => val.findIndex((item) => item == v.value) > -1).map((v) => v.label);
+            if (this.allValue) {
+                if (val.findIndex((item) => item == 'unlimited') == 0) {
+                    retrunData = val.slice(-1);
+                }
+                else if (val.findIndex((item) => item == 'unlimited') == val.length - 1) {
+                    retrunData = ['unlimited'];
+                }
+                else {
+                    retrunData = val;
+                }
+            }
+            else {
+                retrunData = val;
+            }
+            this.$emit('input', retrunData);
+            this.$emit('update:label', label);
+            this.$emit('change', val);
+        }
+        else {
+            // 模拟单选radio效果
+            let selectVal = [];
+            if (this.allValue) {
+                if (val.length == 0) {
+                    selectVal = ['unlimited'];
+                }
+            }
+            else {
+                if (val.length == 0) {
+                    selectVal = [];
+                }
+            }
+            if (val.length > 0) {
+                selectVal = val.slice(-1);
+            }
+            let label = this.selectOption
+            .filter((v) => selectVal.findIndex((item) => item == v.value) > -1)
+            .map((v) => v.label);
+            this.$emit('input', selectVal);
+            this.$emit('update:label', label);
+            this.$emit('change', selectVal);
+        }
+    },
+    emitChange(...args) {
+        // emit change事件
+        this.$emit('change', ...args);
+    },
+    consoleFun(...args) {
+        // 打印信息
+        if (process.env.NODE_ENV == 'development') {
+            console.log(...args);
+        }
+    }
+  }
+}
+</script>
+

+ 5 - 6
src/views/modules/account-config/components/configuration-modal.less

@@ -15,6 +15,11 @@
                 margin-right: 20px;
             }
         }
+        .form-itrm-icon {
+            position: absolute;
+            top: 3px;
+            left: -175px;
+        }
         .separate-title-header {
             font-size: 22px;
             font-weight: bold;
@@ -187,12 +192,6 @@
             .acount-search-class {
                 width: 350px;
             }
-            
-            .form-itrm-icon {
-                position: absolute;
-                top: 3px;
-                left: -175px;
-            }
             .advers-title-class {
                 margin-left: 10px;
                 margin-right: 15px;

+ 347 - 77
src/views/modules/account-config/components/configuration-modal.vue

@@ -128,7 +128,7 @@
                             <span>输入的数量为每天所创建的广告组数量</span>
                             <span>以及每个广告组创建的广告计划数量</span>
                         </template>
-                        <a-icon class="form-itrm-icon" type="smile-o"/>
+                        <a-icon class="form-itrm-icon" type="question-circle"/>
                     </a-tooltip>
                     <div v-if="campaignStatus" style="width: 500px;color: #f00;">单账号每天创建计划上限500个</div>
                 </a-form-model-item>
@@ -192,6 +192,15 @@
                         allow-clear
                     />
                 </a-form-model-item>
+                <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="优先应用商店下载">
+                    <a-radio-group
+                        v-model="configForm.adDownloadMode"
+                        button-style="solid"
+                    >
+                        <a-radio-button value="DEFAULT">不启用</a-radio-button>
+                        <a-radio-button value="APP_STORE_DELIVERY">启用</a-radio-button>
+                    </a-radio-group>
+                </a-form-model-item>
             </div>
             <div class="separate-module-con">
                 <p class="rock-title">优化目标</p>
@@ -268,8 +277,8 @@
                 </div>
             </div>
             <div class="separate-module-con">
-                <a-tabs v-model="selectPackageTabs" @change="handleSelectPackageTabs">
-                    <a-tab-pane key="1" tab="新建定向">
+                <a-tabs v-model="configForm.adDirectionalFlag" @change="handleSelectPackageTabs">
+                    <a-tab-pane key="add" tab="新建定向">
                         <p class="rock-title">用户定向</p>
                         <a-form-model-item label="地域">
                             <a-radio-group v-model="configForm.adDistrict" button-style="solid">
@@ -305,6 +314,24 @@
                         <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.adInterestActionMode"
+                                button-style="solid"
+                            >
+                                <a-radio-button value="UNLIMITED">不限</a-radio-button>
+                                <a-radio-button value="RECOMMEND">
+                                    系统推荐
+                                    <a-tooltip placement="top">
+                                        <template slot="title">
+                                            <span>若与自定义人群包同时使用,选择定向人群时系统推荐定向不生效</span>
+                                        </template>
+                                        <a-icon type="question-circle" />
+                                    </a-tooltip>
+                                </a-radio-button>
+                                <a-radio-button value="CUSTOM" disabled>自定义</a-radio-button>
+                            </a-radio-group>
+                        </a-form-model-item>
                         <a-form-model-item label="自定义人群">
                             <a-radio-group v-model="configForm.customPerson" button-style="solid" @change="handleCustomPerson">
                                 <a-radio-button value="NONE">不限</a-radio-button>
@@ -328,6 +355,7 @@
                                     :valueids="configForm.adRetargetingTagsType"
                                     :updatelistinclude="configForm.updateGetingInclude" @selection-alone-event="handleSelectionAloneEvent"
                                     @clearlist="handleClearlist"
+                                    @clear-table-alone="handleClearTableAlone"
                                 >
                                 </directional-logic>
                             </div>
@@ -342,6 +370,7 @@
                                     :valueids="configForm.adRetargetingTagsType"
                                     :updatelistexclude="configForm.updateGetingExclude" @selection-alone-event="handleSelectionAloneEvent"
                                     @clearlist="handleClearlist"
+                                    @clear-table-alone="handleClearTableLogic"
                                 >
                                 </directional-logic>
                             </div>
@@ -358,6 +387,8 @@
                                     :updatelistexclude="configForm.updateGetingExclude" @selection-direct-event="handleDirectEvent"
                                     @selection-exclude-event="handleExcludeEvent"
                                     @clearlist="handleClearlist"
+                                    @clear-table-direct="handleClearTableAlone"
+                                    @clear-table-exclude="handleClearTableLogic"
                                 >
                                 </directional-logic>
                             </div>
@@ -370,6 +401,12 @@
                             </a-radio-group>
                         </a-form-model-item>
                         <a-form-model-item label="平台">
+                            <!-- <check-more-plat
+                                v-model="configForm.updateAdPlatform"
+                                :options="adPlatformOption"
+                                @change="handlePlateSelect"
+                            >
+                            </check-more-plat> -->
                             <a-radio-group v-model="configForm.adPlatform" button-style="solid">
                                 <a-radio-button value="NONE" :disabled="platformLoadingType === 'APP_IOS' || platformLoadingType === 'APP_ANDROID'">不限</a-radio-button>
                                 <a-radio-button value="IOS" :disabled="platformLoadingType === 'APP_ANDROID'">IOS</a-radio-button>
@@ -378,7 +415,12 @@
                             </a-radio-group>
                         </a-form-model-item>
                         <a-form-model-item label="设备类型">
-                            <radio-check v-model="configForm.adDeviceSelectType" :options="deviceTypeList" @change="getAgeSelect"></radio-check>
+                            <radio-check
+                                v-model="configForm.adDeviceSelectType"
+                                :options="deviceTypeList"
+                                @change="getAgeSelect"
+                            >
+                            </radio-check>
                         </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">
@@ -411,7 +453,7 @@
                             </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-group v-model="configForm.adHideIfConverted" button-style="solid" @change="handleAdhideConver">
                                 <a-radio-button
                                     v-for="item in adHideIfConvertedDataOption"
                                     :key="item.id"
@@ -421,15 +463,43 @@
                                 </a-radio-button>
                             </a-radio-group>
                         </a-form-model-item>
+                        <a-form-model-item v-if="configForm.adHideIfConverted === 'CUSTOMER' || configForm.adHideIfConverted === 'APP'" label="过滤时间">
+                            <a-radio-group v-model="configForm.adConvertedTimeDuration" button-style="solid">
+                                <a-radio-button value="ONE_MONTH">1个月</a-radio-button>
+                                <a-radio-button value="THREE_MONTH">3个月</a-radio-button>
+                                <a-radio-button value="SIX_MONTH">6个月</a-radio-button>
+                                <a-radio-button value="TWELVE_MONTH">12个月</a-radio-button>
+                            </a-radio-group>
+                            <a-tooltip placement="top">
+                                <template slot="title">
+                                    <span>对已转化过的用户避免再次投放的时间</span>
+                                </template>
+                                <a-icon class="form-itrm-icon" style="left: -90px;" type="question-circle"/>
+                            </a-tooltip>
+                        </a-form-model-item>
                         <a-form-model-item label="智能放量">
-                            <a-radio-group v-model="configForm.adAutoExtendEnabled" button-style="solid">
+                            <a-radio-group v-model="configForm.adAutoExtendEnabled" button-style="solid" @change="handleAdAutoExtend">
                                 <a-radio-button value="0">不开启</a-radio-button>
                                 <a-radio-button value="1">开启</a-radio-button>
                             </a-radio-group>
+                            <a-tooltip placement="top">
+                                <template slot="title">
+                                    <span>智能放量可以帮您逐步探索已选定向人群之外的目标人群,提升跑量。已选择定向建议放开</span>
+                                </template>
+                                <a-icon class="form-itrm-icon" style="left: -90px;" type="question-circle"/>
+                            </a-tooltip>
                         </a-form-model-item>
+                        <div v-if="configForm.adAutoExtendEnabled === '1'" class="adver-position-radio" style="width: 70%;">
+                            <auto-select
+                                :defaultlist="adAutoExtendList"
+                                :editdata="AutoExtendEditSelect"
+                                @select-finally-result="handleSelectTxtend"
+                            >
+                            </auto-select> 
+                        </div>
                     </a-tab-pane>
-                    <a-tab-pane key="2" tab="选择定向包">
-                        <a-form-model-item class="select-orientation-class" label="选择已有定向包" :prop="selectPackageTabs === '2' ? 'adAudiencePackageId' : ''">
+                    <a-tab-pane key="choice" tab="选择定向包">
+                        <a-form-model-item class="select-orientation-class" label="选择已有定向包" :prop="configForm.adDirectionalFlag === 'choice' ? 'adAudiencePackageId' : ''">
                             <a-select
                                 class="common-input-long"
                                 v-model="configForm.adAudiencePackageId"
@@ -453,7 +523,7 @@
                                 <template slot="title">
                                     <span>已有定向包只展示当前推广目的和投放范围下,定向功能升级后仍可用的定向包</span>
                                 </template>
-                                <a-icon class="form-itrm-icon orientation-icon" type="smile-o"/>
+                                <a-icon class="form-itrm-icon orientation-icon" type="question-circle"/>
                             </a-tooltip>
                         </a-form-model-item>
                         <span v-if="selectOrientPlaceholder !== 'able'" style="color: #f00; margin-left: 198px;">{{ selectOrientPlaceholder }}</span>
@@ -629,6 +699,7 @@
                         <a-input-number
                             class="common-input"
                             v-model="configForm.adStepBid"
+                            :min="0"
                             :step="0.01"
                             placeholder="请输入"
                             @blur="handleFloatingInterval"
@@ -748,6 +819,60 @@
                         allow-clear
                     />
                 </a-form-model-item>
+                <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName">
+                    <a-input
+                        class="common-input-long"
+                        placeholder="请输入来源"
+                        v-model="configForm.creativeAppName"
+                        allow-clear
+                    />
+                </a-form-model-item>
+                <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL' && platformLoadingType === 'APP_ANDROID'" label="副标题">
+                    <a-input
+                        class="common-input-long"
+                        placeholder="请输入来源"
+                        v-model="configForm.creativeSubTitle"
+                        allow-clear
+                        @blur="handleCreativeSubTitleBlur"
+                    />
+                </a-form-model-item>
+                <div v-if="subTitleMsgStatus" style="width: 500px;color: #f00;margin-left: 140px">{{ subTitleMsg }}</div>
+                <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="自动生成视频素材">
+                    <a-radio-group v-model="configForm.creativeIsPresentedVideo" 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-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="最优创意衍生计划">
+                    <a-radio-group v-model="configForm.creativeGenerateDerivedAd" 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-form-model-item label="广告评论">
+                    <a-radio-group v-model="configForm.creativeIsCommentDisable" button-style="solid">
+                        <a-radio-button :value="1">关闭</a-radio-button>
+                        <a-radio-button :value="0">开启</a-radio-button>
+                    </a-radio-group>
+                </a-form-model-item>
+                <a-form-model-item label="客户端下载视频">
+                    <a-radio-group v-model="configForm.creativeDownloadStatus" button-style="solid">
+                        <a-radio-button :value="1">关闭</a-radio-button>
+                        <a-radio-button :value="0">开启</a-radio-button>
+                    </a-radio-group>
+                </a-form-model-item>
+                <a-form-model-item label="创意展现">
+                    <a-radio-group v-model="configForm.creativeDisplayMode" button-style="solid">
+                        <a-radio-button value="CREATIVE_DISPLAY_MODE_CTR">优选模式</a-radio-button>
+                        <a-radio-button value="CREATIVE_DISPLAY_MODE_RANDOM">轮播模式</a-radio-button>
+                    </a-radio-group>
+                </a-form-model-item>
+                <div v-if="configForm.creativeDisplayMode === 'CREATIVE_DISPLAY_MODE_CTR'" class="adver-position-radio">
+                    选择优选模式,系统会自动对效果好的创意进行展示量倾斜,创意效果越好展示量越高
+                </div>
+                <div v-if="configForm.creativeDisplayMode === 'CREATIVE_DISPLAY_MODE_RANDOM'" class="adver-position-radio">
+                    使用创意轮播,系统将平分各创意展现机会,便于广告主比较各创意投放效果
+                </div>
             </div>
             <div class="separate-module-con">
                 <p class="rock-title">创意分类</p>
@@ -791,7 +916,7 @@
                 </div>
             </div>
             <div class="separate-module-con btn-Unique-con">
-                <a-button class="sure-btn" type="primary" @click="handleRelaxSure">确定</a-button>
+                <a-button class="sure-btn" type="primary" :loading="sureLoading" @click="handleRelaxSure">确定</a-button>
                 <a-button class="cancel-btn" @click="handleRelaxCancel">取消</a-button>
             </div>
         </a-form-model>
@@ -804,6 +929,8 @@ 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 AutoSelect from './tree-select/tree-select';
+import CheckMorePlat from './check-more-plat/check-more-plat';
 
 import moment from 'moment';
 import BMF from 'browser-md5-file';
@@ -834,7 +961,9 @@ export default {
         SelectCheckAll,
         radioCheck,
         linkMultiSelect,
-        DirectionalLogic
+        DirectionalLogic,
+        AutoSelect,
+        CheckMorePlat
     },
     data() {
         let handleConfirmValue = (rule, value, callback) => {
@@ -881,10 +1010,66 @@ export default {
                 callback('最高出价不能低于最低出价');
             }
         };
+        let budgetValidator = (rule, value, callback) => {
+            if (this.modalTitle === 'edit') {
+                if (Number(value) > Number(this.defaultAdBudget) && Number(value) < (Number(this.defaultAdBudget) + 100)) {
+                    callback('单次修改预算幅度, 不能低于100.0元');
+                }
+                else if (Number(value) < Number(this.defaultAdBudget) && Number(value) > (Number(this.defaultAdBudget) - 100)) {
+                    callback('单次修改预算幅度, 不能低于100.0元');
+                }
+                else {
+                    callback();
+                }
+            }
+        };
         return {
+            sureLoading: false,
+            subTitleMsgStatus: false,
+            subTitleMsg: '',
+            AutoExtendEditSelect: [],
+            adPlatformOption: [
+                {
+                    value: 'NONE',
+                    label: '不限'
+                },
+                {
+                    value: 'IOS',
+                    label: 'IOS'
+                },
+                {
+                    value: 'ANDROID',
+                    label: 'ANDROID'
+                },
+                {
+                    value: 'PC',
+                    label: 'PC'
+                }
+            ],
+            adAutoExtendList: [
+                {
+                    value: 'AGE',
+                    label: '年龄'
+                },
+                {
+                    value: 'REGION',
+                    label: '地域'
+                },
+                {
+                    value: 'GENDER',
+                    label: '性别'
+                },
+                {
+                    value: 'INTEREST_ACTION',
+                    label: '行为兴趣'
+                },
+                {
+                    value: 'CUSTOM_AUDIENCE',
+                    label: '自定人群-定向'
+                }
+            ],
             directionalData: [],
             platformLoadingType: '',
-            selectPackageTabs: '1',
             deviceTypeList: [
                 {
                     value: 'NONE',
@@ -959,7 +1144,7 @@ export default {
             regionCityListUrl: 'ctop/bytedanceAreaInfo/list',
             defaultAdBudget: '',
             adBudgetShowTitle: false,
-            adBudgetNum: 1,
+            adBudgetNum: 300,
             campaignStatus: false,
             detailData: {},
             modalTitle: '',
@@ -1013,6 +1198,10 @@ export default {
             labelCol: {span: 4},
             wrapperCol: {span: 14},
             rules: {
+                creativeAppName: [
+                    {required: true, message: '请输入', trigger: 'blur'},
+                    {validator: handleCharacterLen20, trigger: 'blur'}
+                ],
                 adExternalUrl: [
                     {required: true, message: '请输入', trigger: 'blur'},
                     {validator: handleConfirmValue, trigger: 'blur'}
@@ -1037,7 +1226,8 @@ export default {
                     {required: true, message: '请输入', trigger: 'blur'}
                 ],
                 accountBudget: [
-                    {required: true, message: '请输入', trigger: 'blur'}
+                    {required: true, message: '请输入', trigger: 'blur'},
+                    {validator: budgetValidator, trigger: 'blur'}
                 ],
                 campaignName: [
                     {required: true, message: '请输入广告组名称', trigger: 'blur'},
@@ -1077,6 +1267,17 @@ export default {
                 creativeThirdIndustryIds: [{required: true, message: '请选择', trigger: 'change'}]
             },
             configForm: {
+                adDirectionalFlag: 'add',
+                adInterestActionMode: 'UNLIMITED',
+                creativeDisplayMode: 'CREATIVE_DISPLAY_MODE_CTR',
+                creativeAppName: '',
+                creativeIsPresentedVideo: 0,
+                creativeGenerateDerivedAd: 0,
+                creativeIsCommentDisable: 1,
+                creativeDownloadStatus: 1,
+                creativeSubTitle: '',
+                adConvertedTimeDuration: 'THREE_MONTH',
+                adDownloadMode: 'DEFAULT',
                 dpLinkIndexUsed: 0,
                 adRetargetingTagsType: '',
                 adAudiencePackageId: undefined,
@@ -1095,7 +1296,7 @@ export default {
                 productSellingPoints: [], // 商品买点
                 adBudgetMode: 'BUDGET_MODE_DAY', // 预算类型
                 adDownloadUrl: '', // 下载链接
-                accountBudget: 1000, // 账户日预算
+                accountBudget: 0, // 账户日预算
                 accountId: undefined, // 账户
                 dpLinkStartIndex: 1,
                 dpLinkEndIndex: 2,
@@ -1123,6 +1324,7 @@ export default {
                 customPerson: 'NONE', // 定向-自定义
                 adSuperiorPopularityType: 'NONE', // 定向-媒体定向
                 adPlatform: 'NONE', // 定向-平台
+                updateAdPlatform: ['NONE'],
                 adDeviceSelectType: ['NONE'],
                 adSelectAc: ['NONE'],
                 adAc: '', // 定向-网络
@@ -1132,7 +1334,7 @@ export default {
                 adAndroidVersion: 'NONE', // 定向-安卓版本
                 androidChangeValue: '', // 安卓版本-自定义
                 adSmartBidType: 'SMART_BID_CUSTOM', // 投放场景
-                adBudget: 1, // 预算
+                adBudget: 300, // 预算
                 adScheduleType: 'SCHEDULE_FROM_NOW', // 投放时间
                 launchDateRange: [], // 设置开始和结束时间
                 launchTimeInterval: 'buxian', // 投放时段
@@ -1152,6 +1354,7 @@ export default {
                 updateGetingExclude: [],
                 adRetargetingTagsInclude: '',
                 adRetargetingTagsExclude: '',
+                adAutoExtendTargets: '',
                 creativeCallToAction: '', // 行动号召
                 creativeLabel: undefined // 倡议标签
             }
@@ -1268,6 +1471,48 @@ export default {
     methods: {
         ...mapGetters(['nickname', 'avatar', 'userInfo']),
         moment,
+        handleAdhideConver(e) {
+            const defaultValue = e.target.value;
+            if (defaultValue === 'CUSTOMER' || defaultValue === 'APP') {
+                this.configForm.adConvertedTimeDuration = 'THREE_MONTH';
+            }
+        },
+        handleAdAutoExtend(e) {
+            const defaultValue = e.target.value;
+            if (defaultValue === '0') {
+                this.AutoExtendEditSelect = [];
+                this.configForm.adAutoExtendTargets = '';
+            }
+        },
+        handleCreativeSubTitleBlur(e) {
+            const defaultValue = e.target.value;
+            let cnReg = /([\u4e00-\u9fa5]|[\u3000-\u303F]|[\uFF00-\uFF60])/;
+            let length = 0;
+            let strArr = defaultValue.split('');
+            strArr.forEach(item => {
+                if (cnReg.test(item)) {
+                    length += 2;
+                }
+                else {
+                    length += 1;
+                }
+            });
+            if (4 <= length && length <= 24) {
+                this.subTitleMsgStatus = false;
+                this.subTitleMsg = '';
+            }
+            else if (!defaultValue) {
+                this.subTitleMsgStatus = false;
+                this.subTitleMsg = '';
+            }
+            else {
+                this.subTitleMsgStatus = true;
+                this.subTitleMsg = '只能输入4-24个字符';
+            }
+        },
+        handleSelectTxtend(list) {
+            this.configForm.adAutoExtendTargets = list && list.map(item => item.value).join(',');
+        },
         handleSelectPackageTabs(e) {
             if (this.modalTitle === 'add') {
                 if (e === '1') {
@@ -1286,10 +1531,8 @@ export default {
                     this.configForm.adRetargetingTagsExclude = '';
                     this.configForm.updateGetingExclude = [];
                     this.configForm.adRetargetingTagsType = '';
-                    if (!this.platformLoadingType) {
-                        this.configForm.adPlatform = 'NONE';
-                        this.platformLoadingType = '';
-                    }
+                    this.configForm.adPlatform = 'NONE';
+                    this.platformLoadingType = '';
                     this.configForm.adDeviceSelectType = ['NONE'];
                     this.configForm.adAndroidVersion = 'NONE';
                     this.configForm.adSelectAc = ['NONE'];
@@ -1383,6 +1626,14 @@ export default {
                 this.configForm.adRetargetingTagsInclude = '';
             }
         },
+        handleClearTableAlone(list) {
+            this.configForm.updateGetingInclude = list;
+            this.configForm.adRetargetingTagsInclude = list && list.join(',');
+        },
+        handleClearTableLogic(list) {
+            this.configForm.updateGetingExclude = list;
+            this.configForm.adRetargetingTagsExclude = list && list.join(',');
+        },
         handleClearlist() {
             this.configForm.updateGetingInclude = [];
             this.configForm.adRetargetingTagsInclude = '';
@@ -1507,6 +1758,17 @@ export default {
                 this.configForm.adSelectCity = [];
             }
         },
+        handlePlateSelect(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');
+            }
+        },
         getAgeSelect(data) {
             if (data.length > 1 && data.findIndex(item => item === 'NONE') === 0) {
                 data.splice(data.findIndex(item => item === 'NONE'), 1);
@@ -1532,17 +1794,6 @@ export default {
         handleAccountBudget(e) {
             const adBudgetInput = e.target.value;
             this.configForm.accountBudget = Number(Number(adBudgetInput).toFixed(2));
-            if (this.modalTitle === 'edit') {
-                if (Number(adBudgetInput) >= Number(this.defaultAdBudget) && Number(adBudgetInput) < (Number(this.defaultAdBudget) + 100)) {
-                    this.adBudgetShowTitle = true;
-                }
-                else if (Number(adBudgetInput) <= Number(this.defaultAdBudget) && Number(adBudgetInput) > (Number(this.defaultAdBudget) - 100)) {
-                    this.adBudgetShowTitle = true;
-                }
-                else {
-                    this.adBudgetShowTitle = false;
-                }
-            }
         },
         handleExportRules(value, min, max, callback) {
             let cnReg = /([\u4e00-\u9fa5]|[\u3000-\u303F]|[\uFF00-\uFF60])/;
@@ -1668,7 +1919,6 @@ export default {
                         const detailData = result.result;
                         this.configForm.accountId = detailData.accountId;
                         if (detailData.adAudiencePackageId) {
-                            this.selectPackageTabs = '2';
                             getAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getAdAudiencePackage', {accountId: detailData.accountId})
                                 .then(result => {
                                     if (result.code === 0) {
@@ -1684,13 +1934,11 @@ export default {
                                     console.log(error, 'eeee');
                                 });
                         }
-                        else {
-                            this.selectPackageTabs = '1';
-                        }
                         this.configForm.dpLinkStartIndex = detailData.dpLinkStartIndex;
                         this.configForm.dpLinkEndIndex = detailData.dpLinkEndIndex;
                         this.configForm.accountBudgetMode = detailData.accountBudgetMode;
                         this.configForm.accountBudget = detailData.accountBudget;
+                        this.configForm.adDirectionalFlag = detailData.adDirectionalFlag;
                         this.configForm.campaignLandingType = detailData.campaignLandingType;
                         this.configForm.advertisingType = detailData.advertisingType || '1';
                         this.configForm.campaignName = detailData.campaignName || '';
@@ -1717,13 +1965,51 @@ export default {
                             this.listArr = detailData.adCity.split(',');
                             this.configForm.adSelectCity = detailData.adCity.split(',');
                         }, 200);
+                        let paramsData = {};
+                        if (detailData.adDownloadType === 'DOWNLOAD_URL') {
+                            paramsData = {
+                                advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
+                                advertiserId: detailData.accountId,
+                                appType: 'APP_ANDROID',
+                                deliveryRange: 'DEFAULT',
+                                externalUrl: detailData.adExternalUrl,
+                                landingType: detailData.campaignLandingType,
+                                packageName: detailData.adPackage,
+                                promotionContent: detailData.adDownloadType
+                            };
+                        }
+                        else if (detailData.adDownloadType === 'EXTERNAL_URL') {
+                            paramsData = {
+                                advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
+                                advertiserId: detailData.accountId,
+                                deliveryRange: 'DEFAULT',
+                                externalUrl: detailData.adExternalUrl,
+                                landingType: detailData.campaignLandingType,
+                                promotionContent: detailData.adDownloadType
+                            };
+                        }
+                        postAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getToolConvert', paramsData).then(result => {
+                            if (result.code === 0) {
+                                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;
+                                }, 1000);
+                            }
+                            else {
+                                this.$message.error(result.message);
+                            }
+                        }).catch(error => {
+                            console.log(error, 'eeee');
+                        });
                         getAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getDMPCustomAudience', {accountId: detailData.accountId}).then(result => {
                             if (result.code === 0) {
                                 result.result.forEach(item => {
                                     item.key = item.custom_audience_id;
                                 });
                                 this.directionalData = result.result;
-                                this.configForm.adRetargetingTagsType = detailData.adRetargetingTagsType || '1';
+                                this.configForm.adRetargetingTagsType = detailData.adRetargetingTagsType;
                                 if (detailData.adRetargetingTagsType === '3') {
                                     this.configForm.customPerson = 'a';
                                     this.configForm.adRetargetingTagsInclude = detailData.adRetargetingTagsInclude;
@@ -1833,44 +2119,18 @@ export default {
                         if (detailData.adKeywords) {
                             this.creativeTag = detailData.adKeywords;
                         }
-                        let paramsData = {};
-                        if (this.configForm.adDownloadType === 'DOWNLOAD_URL') {
-                            paramsData = {
-                                advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
-                                advertiserId: this.configForm.accountId,
-                                appType: 'APP_ANDROID',
-                                deliveryRange: 'DEFAULT',
-                                externalUrl: this.configForm.adExternalUrl,
-                                landingType: this.configForm.campaignLandingType,
-                                packageName: this.configForm.adPackage,
-                                promotionContent: this.configForm.adDownloadType
-                            };
-                        }
-                        else if (this.configForm.adDownloadType === 'EXTERNAL_URL') {
-                            paramsData = {
-                                advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
-                                advertiserId: this.configForm.accountId,
-                                deliveryRange: 'DEFAULT',
-                                externalUrl: this.configForm.adExternalUrl,
-                                landingType: this.configForm.campaignLandingType,
-                                promotionContent: this.configForm.adDownloadType
-                            };
-                        }
-                        postAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getToolConvert', paramsData).then(result => {
-                            if (result.code === 0) {
-                                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);
-                            }
-                        }).catch(error => {
-                            console.log(error, 'eeee');
-                        });
+                        this.configForm.adInterestActionMode = detailData.adInterestActionMode;
+                        this.configForm.creativeDisplayMode = detailData.creativeDisplayMode;
+                        this.configForm.creativeAppName = detailData.creativeAppName;
+                        this.configForm.creativeIsPresentedVideo = detailData.creativeIsPresentedVideo;
+                        this.configForm.creativeGenerateDerivedAd = detailData.creativeGenerateDerivedAd;
+                        this.configForm.creativeIsCommentDisable = detailData.creativeIsCommentDisable;
+                        this.configForm.creativeDownloadStatus = detailData.creativeDownloadStatus;
+                        this.configForm.creativeSubTitle = detailData.creativeSubTitle;
+                        this.configForm.adConvertedTimeDuration = detailData.adConvertedTimeDuration;
+                        this.configForm.adDownloadMode = detailData.adDownloadMode;
+                        this.configForm.adAutoExtendTargets = detailData.adAutoExtendTargets;
+                        this.AutoExtendEditSelect = detailData.adAutoExtendTargets.length && detailData.adAutoExtendTargets.split(',');
                     }
                     else {
                         this.$message.error(result.message);
@@ -1924,6 +2184,7 @@ export default {
             postAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/addBytedanceStrategy', data).then(result => {
                 if (result.code === 0) {
                     this.$message.success('创建成功');
+                    this.sureLoading = false;
                     this.$router.replace('/account-config/account-config');
                     this.$bus.$emit('remove', '/account-config/components/configuration-modal');
                 }
@@ -1971,7 +2232,7 @@ export default {
             }
             else if (e === 'BUDGET_MODE_DAY') {
                 this.adBudgetNum = 0;
-                this.configForm.adBudget = 0;
+                this.configForm.adBudget = 300;
             }
         },
         handleDelOrigin(list) {
@@ -2130,11 +2391,11 @@ export default {
                     return;
                 }
             }
-            if (this.selectPackageTabs === '2' && !this.configForm.adAudiencePackageId) {
+            if (this.configForm.adDirectionalFlag === 'choice' && !this.configForm.adAudiencePackageId) {
                 this.$message.error('请选择已有定向包');
                 return;
             }
-            if (paramsFormData.customPerson === 'a') {  
+            if (paramsFormData.customPerson === 'a') {
                 if (paramsFormData.adRetargetingTagsType === '1' && !paramsFormData.adRetargetingTagsInclude) {
                     this.$message.error('请选择人群');
                     return;
@@ -2148,6 +2409,10 @@ export default {
                     return;
                 }
             }
+            if (paramsFormData.adAutoExtendEnabled === '1' && !paramsFormData.adAutoExtendTargets) {
+                this.$message.error('请选择可开放定向');
+                return;
+            }
             if (this.configForm.adScheduleType === 'SCHEDULE_START_END' && !this.configForm.launchDateRange.length) {
                 this.$message.error('请选择投放时间');
                 return;
@@ -2179,6 +2444,9 @@ export default {
             else {
                 this.isAdCpaBidBlur = false;
             }
+            if (this.subTitleMsgStatus) {
+                return;
+            }
             if (paramsFormData.adverPosition === 'a') {
                 paramsFormData.creativeSmartInventory = 1;
             }
@@ -2226,6 +2494,7 @@ export default {
             paramsFormData.userId = this.userInfo().id;
             this.$refs.ruleForm.validate(valid => {
                 if (valid) {
+                    this.sureLoading = true;
                     if (this.modalTitle === 'add') {
                         this.handleAddList(paramsFormData);
                     }
@@ -2246,6 +2515,7 @@ export default {
             putAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/edit', queryData).then(result => {
                 if (result.code === 0) {
                     this.$message.success(result.message);
+                    this.sureLoading = false;
                     this.$router.replace('/account-config/account-config');
                     this.$bus.$emit('remove', '/account-config/components/configuration-modal');
                 }

+ 3 - 0
src/views/modules/account-config/components/directional-logic/directional-logic.vue

@@ -475,17 +475,20 @@ export default {
                 let formData = this.selectRightData;
                 this.selectRightData = formData.filter(item => list.key !== item.key);
                 this.tableSelectIds = this.selectRightData.map(item => item.key);
+                this.$emit('clear-table-alone', this.tableSelectIds);
             }
             else if (type === 'all') {
                 if (style === 'direct') {
                     let directData = this.tableSelectDirectData;
                     this.tableSelectDirectData = directData.filter(item => list.key !== item.key);
                     this.tableSelectDirectIds = this.tableSelectDirectData.map(item => item.key);
+                    this.$emit('clear-table-direct', this.tableSelectDirectIds);
                 }
                 else if (style === 'exclude') {
                     let excludeData = this.tableSelectExcludeData;
                     this.tableSelectExcludeData = excludeData.filter(item => list.key !== item.key);
                     this.tableSelectExcludeIds = this.tableSelectExcludeData.map(item => item.key);
+                    this.$emit('clear-table-exclude', this.tableSelectExcludeIds);
                 }
             }
         },

+ 71 - 0
src/views/modules/account-config/components/tree-select/tree-select.less

@@ -0,0 +1,71 @@
+
+.tree-select-content {
+    .input-search {
+        width: 240px;
+        margin: 10px 0 10px 0;
+    }
+    .tree-select-class {
+        display: flex;
+        justify-content: space-between;
+        .class-left-header {
+            display: flex;
+            justify-content: space-between;
+            height: 50px;
+            line-height: 50px;
+            background-color: #f9fafd;
+            border-bottom: 1px solid #eee;
+            text-indent: 10px;
+            .clear-all-class {
+                margin-right: 20px;
+            }
+        }
+        .select-class-left {
+            width: 60%;
+            height: 400px;
+            border: 1px solid #eee;
+            .class-left-content {
+                overflow-y: auto;
+                height: 340px;
+                margin: 10px;
+            }
+            .example {
+                text-align: center;
+                line-height: 200px;
+            }
+        }
+        .select-class-right {
+            width: 35%;
+            height: 400px;
+            border: 1px solid #eee;
+            .class-left-content {
+                padding: 0 10px;
+                height: 348px;
+                overflow-y: auto;
+                .apply-right-tree {
+                    display: flex;
+                    justify-content: space-between;
+                    align-items: baseline;
+                    .left-content-p {
+                        display: inline-block;
+                        width: 85%;
+                        height: 25px;
+                        line-height: 25px;
+                        margin: 0;
+                        overflow: hidden;
+                        text-overflow: ellipsis;
+                        white-space: nowrap;
+                    }
+                    .delete-type-class {
+                        color: #1890ff;
+                        cursor: pointer;
+                    }
+                }
+            }
+            .no-data-class {
+                height: 340px;
+                line-height: 340px;
+                text-align: center;
+            }
+        }
+    }
+}

+ 125 - 0
src/views/modules/account-config/components/tree-select/tree-select.vue

@@ -0,0 +1,125 @@
+<template>
+    <div class="tree-select-content">
+        <!-- <a-input-search class="input-search" placeholder="请输入账户名或ID" @change="onChange" /> -->
+        <div class="tree-select-class">
+            <div class="select-class-left">
+                <div class="class-left-header">可放开定向</div>
+                <div class="class-left-content">
+                    <template>
+                        <a-checkbox-group v-model="checkedValue" @change="handleCheckGroup">
+                            <a-row>
+                                <a-col :span="24" v-for="item in changeCheckData" :key="item.value">
+                                    <a-checkbox :value="item.value">{{ item.label }}</a-checkbox>
+                                </a-col>
+                            </a-row>
+                        </a-checkbox-group>
+                    </template>
+                    <div class="example">
+                        <span v-if="!changeCheckData.length">暂无数据</span>
+                    </div>
+                </div>
+            </div>
+            <div class="select-class-right">
+                <div class="class-left-header">
+                    已选 ({{ applyTypeOption.length ? applyTypeOption.length : 0}})
+                    <span class="clear-all-class"><a @click="handleClearAll">清空</a></span>
+                </div>
+                <div v-if="applyTypeOption.length" class="class-left-content">
+                    <div class="apply-right-tree" v-for="item in applyTypeOption" :key="item.value">
+                        <p class="left-content-p">
+                            <a-tooltip placement="left">
+                                <template slot="title">
+                                    <span>{{ item.label }}</span>
+                                </template>
+                                {{ item.label }}
+                            </a-tooltip>
+                        </p>
+                        <a-icon type="delete" class="delete-type-class" @click="handleDelTree(item)" />
+                    </div>
+                </div>
+                <div v-else class="no-data-class">暂无数据</div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+import {mapGetters} from 'vuex';
+
+export default {
+    name: 'tree-select',
+    props: {
+        defaultlist: {
+            type: Array,
+            default: () => []
+        },
+        editdata: {
+            type: Array,
+            default: () => []
+        }
+    },
+    data() {
+        return {
+            checkedValue: [],
+            checkedKeys: [],
+            treeData: [],
+            updateTreeData: [],
+            applyTypeOption: [],
+            changeCheckData: []
+        };
+    },
+    mounted() {
+        this.changeCheckData = this.defaultlist;
+        this.updateTreeData = this.defaultlist;
+        if (this.editdata.length) {
+            this.checkedValue = [...this.editdata];
+            const rightSelectList = [];
+            this.updateTreeData.forEach(item => {
+                if (this.editdata.includes(item.value)) {
+                    rightSelectList.push(item);
+                }
+            });
+            this.applyTypeOption = rightSelectList;
+        }
+    },
+    methods: {
+        ...mapGetters(['userInfo']),
+        handleCheckGroup(checkedValues) {
+            const rightSelectList = [];
+            this.checkedValue = checkedValues;
+            this.updateTreeData.forEach(item => {
+                if (checkedValues.includes(item.value)) {
+                    rightSelectList.push(item);
+                }
+            });
+            this.applyTypeOption = rightSelectList;
+            this.$emit('select-finally-result', this.applyTypeOption);
+        },
+        handleClearAll() {
+            this.checkedValue = [];
+            this.applyTypeOption = [];
+        },
+        handleDelTree(list) {
+            const defaultData = this.applyTypeOption;
+            this.applyTypeOption = defaultData.filter(item => item.value !== list.value);
+            this.checkedValue = this.applyTypeOption.map(item => item.value);
+            this.$emit('select-finally-result', this.applyTypeOption);
+        },
+        onChange(e) {
+            const value = e.target.value;
+            this.changeCheckData = value !== '' ? this.getNewTreeData(this.updateTreeData, value) : [...this.updateTreeData];
+        },
+        getNewTreeData(data, value) {
+            const checkList = [];
+            data.forEach(item => {
+                if (item.label.indexOf(value) !== -1) {
+                    checkList.push(item);
+                }
+            });
+            return checkList;
+        },
+    }
+};
+</script>
+<style lang="less" scoped>
+    @import 'tree-select';
+</style>

+ 7 - 0
src/views/modules/creative-copywrit/creative-copywrit.less

@@ -6,6 +6,13 @@
         height: 500px !important;
         overflow-y: auto;
     }
+    .ad-name-tags-class {
+        width: 500px;
+        display: flex;
+        .name-tags-left {
+            width: 350px;
+        }
+    }
     .acount-title {
         display: flex;
         font-size: 14px;

+ 197 - 18
src/views/modules/creative-copywrit/creative-copywrit.vue

@@ -1476,7 +1476,8 @@
                     <div class="acount-title-left">创意标题</div>
                     <div class="acount-title-right">
                         <a-button type="primary" @click="handleAddOrigin"><a-icon type="plus" />创意标题</a-button>
-                        <a-button class="examin-select-title" @click="handleSelectTitle">选标题</a-button>
+                        <!-- TODO 暂时功能隐藏 -->
+                        <!-- <a-button class="examin-select-title" @click="handleSelectTitle">选标题</a-button> -->
                         <span>已填:{{ titleFiledResult.length || 0 }}</span>
                     </div>
                 </div>
@@ -1501,11 +1502,36 @@
                                         ]}
                                     ]"
                                     class="examin-form-input"
+                                    :id="item.name"
                                     placeholder="请输入"
-                                    @change="handleFormInputChang($event, item)"
+                                    @change="handleFormInputChang($event, item.name, item.id)"
                                 />
-                                <span class="examin-form-num">{{ handleFilterName(item.name) }}/30</span>
+                                <span class="examin-form-num">{{ item.lenSize }}/30</span>
                                 <a-icon class="examin-form-icon" type="delete" @click="handleDelOrigin(item)"/>
+                                <!-- <div class="ad-name-tags-class">
+                                    <div v-if="item.tabStatus === 'alone'" class="name-tags-left">
+                                        <a-tag
+                                            v-for="val in item.updateTagsList"
+                                            :key="val.id"
+                                            color="#1890ff"
+                                            @click="handleGetChangeAll(val.name, item.name, item.id)"
+                                        >
+                                            + {{ val.name }}
+                                        </a-tag>
+                                    </div>
+                                    <div v-if="item.tabStatus === 'all'" class="name-tags-left">
+                                        <a-tag
+                                            v-for="val in item.defaultTagsList"
+                                            :key="val.id"
+                                            color="#1890ff"
+                                            @click="handleGetChangeAll(val.name, item.name, item.id)"
+                                        >
+                                            + {{ val.name }}
+                                        </a-tag>
+                                    </div>
+                                    <div v-if="item.tabStatus === 'alone'"><a @click="handleMoreTagsShow(item.id, 'more')">更多</a></div>
+                                    <div v-if="item.tabStatus === 'all'"><a @click="handleMoreTagsShow(item.id, 'little')">收起</a></div>
+                                </div> -->
                             </a-form-item>
                         </a-form>
                     </div>
@@ -1534,7 +1560,8 @@
                     <div class="acount-title-left">创意标题</div>
                     <div class="acount-title-right">
                         <a-button type="primary" @click="handleAddOrigin"><a-icon type="plus" />创意标题</a-button>
-                        <a-button class="examin-select-title" @click="handleSelectTitle">选标题</a-button>
+                        <!-- TODO 暂时功能隐藏 -->
+                        <!-- <a-button class="examin-select-title" @click="handleSelectTitle">选标题</a-button> -->
                         <span>已填:{{ titleFiledResult.length || 0 }}</span>
                     </div>
                 </div>
@@ -1564,6 +1591,30 @@
                                 />
                                 <span class="examin-form-num">{{ handleFilterName(item.name) }}/30</span>
                                 <a-icon class="examin-form-icon" type="delete" @click="handleDelOrigin(item)"/>
+                                <!-- <div class="ad-name-tags-class">
+                                    <div v-if="item.tabStatus === 'alone'" class="name-tags-left">
+                                        <a-tag
+                                            v-for="val in item.updateTagsList"
+                                            :key="val.id"
+                                            color="#1890ff"
+                                            @click="handleGetChangeAll(val.name, item.name, val.maxWordLen, item.id)"
+                                        >
+                                            + {{ val.name }}
+                                        </a-tag>
+                                    </div>
+                                    <div v-if="item.tabStatus === 'all'" class="name-tags-left">
+                                        <a-tag
+                                            v-for="val in item.defaultTagsList"
+                                            :key="val.id"
+                                            color="#1890ff"
+                                            @click="handleGetChangeAll(val.name, item.name, val.maxWordLen, item.id)"
+                                        >
+                                            + {{ val.name }}
+                                        </a-tag>
+                                    </div>
+                                    <div v-if="item.tabStatus === 'alone'"><a @click="handleMoreTagsShow(item.id, 'more')">更多</a></div>
+                                    <div v-if="item.tabStatus === 'all'"><a @click="handleMoreTagsShow(item.id, 'little')">收起</a></div>
+                                </div> -->
                             </a-form-item>
                         </a-form>
                     </div>
@@ -1604,6 +1655,7 @@ export default {
     },
     data() {
         return {
+            adNameTags: [],
             materTitltStatus: false,
             accountMaster: {
                 height: '35px',
@@ -1881,6 +1933,7 @@ export default {
             }
         });
         this.getHangye();
+        this.handleGetCreativeWord();
     },
     watch: {
         $route(n, o) {
@@ -1933,6 +1986,84 @@ export default {
     },
     methods: {
         ...mapGetters(['nickname', 'avatar', 'userInfo']),
+        handleMoreTagsShow(val, type) {
+            if (type === 'more') {
+                this.defaultFormList.forEach(item => {
+                    if (item.id === val) {
+                        item.tabStatus = 'all';
+                    }
+                });
+            }
+            else if (type === 'little') {
+                this.defaultFormList.forEach(item => {
+                    if (item.id === val) {
+                        item.tabStatus = 'alone';
+                    }
+                });
+            }
+        },
+        handleGetCreativeWord() {
+            getAction('/ctop/ByteDanceCreativeWordPackage/list').then(result => {
+                if (result.code === 0) {
+                    this.adNameTags = result.result.records;
+                }
+                else {
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
+            });
+        },
+        judge(item) {
+            // let re = /{{(.*?)}}/g;
+            let re = /\{\{(.+?)\}\}/g;
+            let array = [];
+            let temp;
+            while ((temp = re.exec(item))) {
+                array.push(temp[1]);
+            };
+            return array;
+        },
+        // 点击获取光标位置进行字段插入
+        handleGetChangeAll(item, field, formId) {
+            let node = document.getElementById(field);
+            let startPos = node.selectionStart; // input 第0个字符到选中的字符
+            let endPos = node.selectionEnd; // 选中的字符到最后的字符
+            let txt = node.value;
+            if (startPos === 0 || endPos === 0) {
+                txt += '{{' + item + '}}';
+                this.examinForm.setFieldsValue({[field]: txt});
+            }
+            else {
+                this.examinForm.setFieldsValue({[field]: txt.substring(0, startPos) + '{{' + item + '}}' + txt.substring(endPos)});
+                node.selectionStart = startPos + item.length + 6;
+                node.selectionEnd = startPos + item.length + 6;
+            }
+            node.focus();
+            node.blur();
+            let finallyLenList = this.judge(this.examinForm.getFieldsValue()[field]);
+            const inputDefaultLen = this.examinForm.getFieldsValue()[field].length;
+            let tagsLen = finallyLenList.length * 4;
+            let tagsSureLen = 0;
+            let resultSelectSize = 0;
+            this.adNameTags.forEach(item => {
+                finallyLenList.forEach(val => {
+                    if (item.name === val) {
+                        tagsSureLen += item.maxWordLen;
+                    }
+                });
+            });
+            finallyLenList.forEach(item => {
+                tagsLen += item.length;
+            });
+            resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen;
+            this.defaultFormList.forEach(item => {
+                if (item.id === formId) {
+                    item.lenSize = resultSelectSize;
+                    item.value = this.examinForm.getFieldsValue()[field];
+                }
+            });
+        },
         handleMaterTitleClick() {
             this.materTitltStatus = !this.materTitltStatus;
             if (this.materTitltStatus) {
@@ -1955,7 +2086,6 @@ export default {
                     batchList.push(item);
                 }
             });
-            console.log(batchList, 'batchList');
             this.modalShowBatchList = batchList;
             this.batchVisible = true;
             for (let i = 0; i < 3; i++) {
@@ -1963,7 +2093,11 @@ export default {
                 this.defaultFormList.push({
                     id: randomNum,
                     name: 'username' + randomNum,
-                    value: ''
+                    value: '',
+                    lenSize: 0,
+                    tabStatus: 'alone',
+                    defaultTagsList: this.adNameTags,
+                    updateTagsList: this.adNameTags.slice(0, 4)
                 });
             }
         },
@@ -1972,11 +2106,16 @@ export default {
                 this.$message.error('请至少输入3条标题');
                 return;
             }
+            let changeSlogan = this.defaultFormList;
+            changeSlogan.forEach(item => {
+                item.title = item.value;
+                item.creative_word_ids = [];
+            });
             let params = {
                 ids: this.modalShowBatchList.map(item => item.id) || [],
                 auditorId: this.userInfo().id,
                 status: 1,
-                slogans: this.defaultFormList.map(item => item.value) || []
+                slogans: changeSlogan
             };
             this.examinForm.validateFields(err => {
                 if (!err) {
@@ -1994,7 +2133,6 @@ export default {
             });
         },
         handleBatchCancel() {
-            console.log('批量取消按钮');
             this.batchVisible = false;
         },
         handleFodderWind() {
@@ -2042,7 +2180,6 @@ export default {
                     this.showUrlWater = res.result.watermarkUrl;
                     this.name = res.result.watermarkCode;
                     this.materialName = res.result.materialName;
-                    // 0317淘特除螨仪.mp4     0317幸福里 没钱 高清版.mp4    0316幸福里来北京五年 高清  大妈和美女2高清.mp4  WIFIAQZS2004JYL.mp4
                     res.result.slogans.forEach(item => {
                         item.name = 'username' + item.id;
                     });
@@ -2102,10 +2239,10 @@ export default {
                 this.solganForm.setFieldsValue({[data.name]: data.slogan});
             });
         },
-        handleFormInputChang(e, data) {
+        handleFormInputChang(e, field, formId) {
             const changeFiled = [];
             this.defaultFormList.forEach(item => {
-                if (item.id === data.id) {
+                if (item.id === formId) {
                     item.value = e.target.value;
                 }
             });
@@ -2114,6 +2251,30 @@ export default {
                     changeFiled.push(item.value);
                 }
             });
+            let finallyLenList = this.judge(this.examinForm.getFieldsValue()[field]);
+            const inputDefaultLen = this.defaultFormList.filter(item => item.id === formId)[0].value.length;
+            let tagsLen = finallyLenList.length * 4;
+            let tagsSureLen = 0;
+            let resultSelectSize = 0;
+            this.adNameTags.forEach(item => {
+                finallyLenList.forEach(val => {
+                    if (item.name === val) {
+                        tagsSureLen += item.maxWordLen;
+                    }
+                });
+            });
+            finallyLenList.forEach(item => {
+                tagsLen += item.length;
+            });
+            resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen;
+            this.defaultFormList.forEach(item => {
+                if (item.id === formId) {
+                    item.lenSize = resultSelectSize;
+                }
+            });
+            console.log(this.adNameTags, this.defaultFormList, 'lens--lens');
+            console.log(finallyLenList, inputDefaultLen, tagsLen, tagsSureLen, 'finallyLenList--finallyLenList');
+            console.log(resultSelectSize, 'resultSelectSize--resultSelectSize--resultSelectSize');
             this.titleFiledResult = changeFiled;
         },
         handleCheckBoxChang(data) {
@@ -2172,7 +2333,10 @@ export default {
                 this.defaultFormList.push({
                     id: dateTime,
                     name: name,
-                    value: item
+                    value: item,
+                    tabStatus: 'alone',
+                    defaultTagsList: this.adNameTags,
+                    updateTagsList: this.adNameTags.slice(0, 4)
                 });
             });
             this.titleResult = [];
@@ -2195,7 +2359,11 @@ export default {
             this.defaultFormList.push({
                 id: randomNum,
                 name: 'username' + randomNum,
-                value: ''
+                value: '',
+                lenSize: 0,
+                tabStatus: 'alone',
+                defaultTagsList: this.adNameTags,
+                updateTagsList: this.adNameTags.slice(0, 4)
             });
         },
         handleDelOrigin(list) {
@@ -2212,6 +2380,9 @@ export default {
                         res.result.slogans.forEach(item => {
                             item.name = 'username' + item.id;
                             item.value = item.slogan;
+                            item.tabStatus = 'alone';
+                            item.defaultTagsList = this.adNameTags;
+                            item.updateTagsList = this.adNameTags.slice(0, 4);
                         });
                         this.defaultFormList = res.result.slogans;
                         this.$nextTick(() => {
@@ -2226,7 +2397,11 @@ export default {
                             this.defaultFormList.push({
                                 id: randomNum,
                                 name: 'username' + randomNum,
-                                value: ''
+                                value: '',
+                                lenSize: 0,
+                                tabStatus: 'alone',
+                                defaultTagsList: this.adNameTags,
+                                updateTagsList: this.adNameTags.slice(0, 4)
                             });
                         }
                     }
@@ -2250,11 +2425,16 @@ export default {
                 this.$message.error('请至少输入3条标题');
                 return;
             }
+            let changeSlogan = this.defaultFormList;
+            changeSlogan.forEach(item => {
+                item.title = item.value;
+                item.creative_word_ids = [];
+            });
             let params = {
                 id: this.currentPageOnlyList.id,
                 auditorId: this.userInfo().id,
                 status: 1,
-                slogans: this.defaultFormList.map(item => item.value) || []
+                slogans: changeSlogan
             };
             this.examinForm.validateFields(err => {
                 if (!err) {
@@ -2609,8 +2789,6 @@ export default {
             }
         },
         onChangeCheck(checkedList, data) {
-            console.log(data, 'data--data');
-            console.log(checkedList, this.checkArr, this.dataSource, '-------');
             if (data.value === '0') {
                 this.showTabsTitle = '0';
             }
@@ -2821,7 +2999,8 @@ export default {
                         this.visibleDetail = false;
                         closeAllVideoFun();
                     });
-                } else {
+                }
+                else {
                     fileEdit({
                         id: this.id,
                         status: editStatus,

+ 5 - 0
src/views/modules/headline-view/headline-view-server.js

@@ -0,0 +1,5 @@
+export const urlAcount = 'http://118.24.244.213:8080'; // 线上
+// export const urlAcount = 'http://apipre.tjyourong.com.cn'; // 预生产
+// export const urlAcount = 'http://192.168.1.43:8080'; // 子安
+// export const urlAcount = 'http://139.186.165.84:8080'; // 测试
+// export const urlAcount = 'http://192.168.1.8:8080'; // 学超

+ 0 - 0
src/views/modules/headline-view/headline-view.less


Разлика између датотеке није приказан због своје велике величине
+ 1658 - 0
src/views/modules/headline-view/headline-view.vue


+ 1 - 1
vue.config.js

@@ -88,7 +88,7 @@ module.exports = {
         // target:'http://118.24.244.213:8804',
         // target: 'http://192.168.1.43:8080', // 子安
         // target: 'http://192.168.1.8:8806', // 学超
-      //  target:'http://139.186.165.84:8806', //测试
+       target:'http://139.186.165.84:8806', //测试
         // target:'http://apipre.tjyourong.com.cn', //预生产
 
         ws: false,