فهرست منبع

账户配置功能迭代

jiayufei 4 سال پیش
والد
کامیت
d7fd8be3d8

+ 2 - 2
src/views/modules/account-config/account-config-server.js

@@ -1,3 +1,3 @@
 // export const urlAcount = 'http://118.24.244.213:8080'; // 线上
-// 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.43:8080'; // 子安
+// export const urlAcount = 'http://139.186.165.84:8080'; // 测试

+ 13 - 3
src/views/modules/account-config/account-config.vue

@@ -210,8 +210,17 @@ export default {
                 callback('最低出价不能高于最高出价');
             }
         };
+        let adCpaBidValidator = (rule, value, callback) => {
+            if (Number(this.updateModTxt.accountBudget) < Number(value)) {
+                callback('出价不能大于预算');
+            }
+            else {
+                callback();
+            }
+        };
         let adMaxBidValidator = (rule, value, callback) => {
             const finallyResult = Number(this.configForm.adMinBid);
+            console.log(this.updateModTxt.accountBudget, value, '----999--0-');
             if (finallyResult && value && Number(value) < finallyResult) {
                 callback('最高出价不能低于最低出价');
             }
@@ -258,7 +267,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'},
@@ -345,12 +355,12 @@ export default {
         ...mapGetters(['nickname', 'avatar', 'userInfo']),
         handleAccountMode(e) {
             this.budgetForm.budget = 0;
+            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));
+            this.budgetForm.budget = Number(Number(adBudgetInput).toFixed(2));
             if (Number(adBudgetInput) >= Number(changeBudget) && Number(adBudgetInput) < (Number(changeBudget) + 100)) {
                 this.adBudgetShowTitle = true;
             }

+ 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;

+ 235 - 40
src/views/modules/account-config/components/configuration-modal.vue

@@ -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>
@@ -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>
@@ -421,12 +448,40 @@
                                 </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="smile-o"/>
+                            </a-tooltip>
+                        </a-form-model-item>
                         <a-form-model-item label="智能放量">
                             <a-radio-group v-model="configForm.adAutoExtendEnabled" button-style="solid">
                                 <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="smile-o"/>
+                            </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' : ''">
@@ -748,6 +803,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>
@@ -804,6 +913,7 @@ 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 moment from 'moment';
 import BMF from 'browser-md5-file';
@@ -834,7 +944,8 @@ export default {
         SelectCheckAll,
         radioCheck,
         linkMultiSelect,
-        DirectionalLogic
+        DirectionalLogic,
+        AutoSelect
     },
     data() {
         let handleConfirmValue = (rule, value, callback) => {
@@ -882,6 +993,31 @@ export default {
             }
         };
         return {
+            subTitleMsgStatus: false,
+            subTitleMsg: '',
+            AutoExtendEditSelect: [],
+            adAutoExtendList: [
+                {
+                    value: 'AGE',
+                    label: '年龄'
+                },
+                {
+                    value: 'REGION',
+                    label: '地域'
+                },
+                {
+                    value: 'GENDER',
+                    label: '性别'
+                },
+                {
+                    value: 'INTEREST_ACTION',
+                    label: '行为兴趣'
+                },
+                {
+                    value: 'CUSTOM_AUDIENCE',
+                    label: '自定人群-定向'
+                }
+            ],
             directionalData: [],
             platformLoadingType: '',
             selectPackageTabs: '1',
@@ -1013,6 +1149,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'}
@@ -1077,6 +1217,16 @@ export default {
                 creativeThirdIndustryIds: [{required: true, message: '请选择', trigger: 'change'}]
             },
             configForm: {
+                adInterestActionMode: 'UNLIMITED',
+                creativeDisplayMode: 'CREATIVE_DISPLAY_MODE_CTR',
+                creativeAppName: '',
+                creativeIsPresentedVideo: 0,
+                creativeGenerateDerivedAd: 0,
+                creativeIsCommentDisable: 1,
+                creativeDownloadStatus: 1,
+                creativeSubTitle: '',
+                adConvertedTimeDuration: 'ONE_MONTH',
+                adDownloadMode: 'DEFAULT',
                 dpLinkIndexUsed: 0,
                 adRetargetingTagsType: '',
                 adAudiencePackageId: undefined,
@@ -1152,6 +1302,7 @@ export default {
                 updateGetingExclude: [],
                 adRetargetingTagsInclude: '',
                 adRetargetingTagsExclude: '',
+                adAutoExtendTargets: '',
                 creativeCallToAction: '', // 行动号召
                 creativeLabel: undefined // 倡议标签
             }
@@ -1268,6 +1419,35 @@ export default {
     methods: {
         ...mapGetters(['nickname', 'avatar', 'userInfo']),
         moment,
+        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') {
@@ -1717,6 +1897,44 @@ 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;
+                                }, 200);
+                            }
+                            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 => {
@@ -1833,44 +2051,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);
@@ -2134,7 +2326,7 @@ export default {
                 this.$message.error('请选择已有定向包');
                 return;
             }
-            if (paramsFormData.customPerson === 'a') {  
+            if (paramsFormData.customPerson === 'a') {
                 if (paramsFormData.adRetargetingTagsType === '1' && !paramsFormData.adRetargetingTagsInclude) {
                     this.$message.error('请选择人群');
                     return;
@@ -2179,6 +2371,9 @@ export default {
             else {
                 this.isAdCpaBidBlur = false;
             }
+            if (this.subTitleMsgStatus) {
+                return;
+            }
             if (paramsFormData.adverPosition === 'a') {
                 paramsFormData.creativeSmartInventory = 1;
             }

+ 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>

+ 14 - 4
src/views/modules/creative-copywrit/creative-copywrit.vue

@@ -1590,9 +1590,19 @@
                                 <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 class="name-tags-left">
+                                    <div v-if="item.tabStatus === 'alone'" class="name-tags-left">
                                         <a-tag
-                                            v-for="val in adNameTags"
+                                            v-for="val in item.updateTagsList"
+                                            :key="val.id"
+                                            color="#1890ff"
+                                            @click="handleGetChangeAll(val.name, item.name)"
+                                        >
+                                            + {{ 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)"
@@ -2130,7 +2140,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;
                     });
@@ -2919,7 +2928,8 @@ export default {
                         this.visibleDetail = false;
                         closeAllVideoFun();
                     });
-                } else {
+                }
+                else {
                     fileEdit({
                         id: this.id,
                         status: editStatus,