فهرست منبع

feature 庄户配置页面

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

+ 14 - 2
src/views/modules/BatchCreate/linkMultiSelect.vue

@@ -364,6 +364,8 @@
                   }
               })  
           }
+          console.log(this.listArr1, 'this.listArr1---yufei');
+          console.log(this.checkedShowList, 'this.checkedShowList---yufei');
           if(item.level==2){
               // console.log('------------------------------------');
               let childList=this.checkedShowList.filter((element,index) => {
@@ -384,7 +386,9 @@
               if(childList.length==0){
                   data.indeterminates=false
               }
-              
+              console.log(data, '---yufei--data');
+              console.log(checkList, '---yufei--checkList');
+              console.log(plainOptions, '---yufei--plainOptions');
               
               this.getItemData({
                 clickObj:{},
@@ -393,9 +397,9 @@
                 checkList,
                 plainOptions,
               })
-              
 
           }
+          this.$emit('checkedShowList', this.checkedShowList);
           if(item.level==3){
 
           }
@@ -419,6 +423,7 @@
               item.indeterminates=false
           })
           this.checkedShowList=[]
+          this.$emit('checkedShowList', []);
       },
 
       getCheckedList(val){
@@ -579,6 +584,13 @@
                     })
                 };
                 this.listArr1=res.data
+                this.listArr.forEach(item=>{
+                  this.listArr1.forEach(ele=>{
+                    if(ele.value==item){
+                      ele.checked=true
+                    } 
+                  })
+                })
             })
         }
 

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

@@ -1 +1,2 @@
-export const urlAcount = 'http://118.24.244.213:8080';
+export const urlAcount = 'http://118.24.244.213:8080';
+// export const urlAcount = 'http://192.168.1.43:8080';

+ 7 - 0
src/views/modules/account-config/components/configuration-modal.less

@@ -167,6 +167,13 @@
                     margin-left: 10px;
                 }
             }
+            .selected-city-arr {
+                width: 50%;
+                .city-arr-radio-group {
+                    margin-top: 20px;
+                    margin-bottom: 20px;
+                }
+            }
             .position-radio-change {
                 margin-bottom: 10px;
                 /deep/ .ant-checkbox-wrapper {

+ 140 - 23
src/views/modules/account-config/components/configuration-modal.vue

@@ -204,7 +204,7 @@
                         <a-select-option
                             v-for="(item, index) in optimizationOption"
                             :key="index"
-                            :value="item.convert_id "
+                            :value="item.convert_id"
                         >
                             {{ item.external_name }}
                         </a-select-option>
@@ -256,9 +256,26 @@
                         <a-radio-button value="NONE">不限</a-radio-button>
                         <a-radio-button value="CITY">按省市</a-radio-button>
                         <a-radio-button value="COUNTY">按区县</a-radio-button>
-                        <a-radio-button value="BUSINESS_DISTRICT">按商圈</a-radio-button>
+                        <!-- <a-radio-button value="BUSINESS_DISTRICT">按商圈</a-radio-button> -->
                     </a-radio-group>
                 </a-form-model-item>
+                <div v-if="configForm.adDistrict === 'CITY'" class="adver-position-radio selected-city-arr">
+                    <link-multi-select
+                        title="省份"
+                        :listArr="listArr"
+                        :maxLayers="2"
+                        :listUrl="regionCityListUrl"
+                        @getSelectedArr="getSelectedCityArr"
+                        @checkedShowList="handleCheckedShowList"
+                    >
+                    </link-multi-select>
+                    <a-radio-group class="city-arr-radio-group" v-model="configForm.adLocationType">
+                        <a-radio value="HOME">居住在该地区的用户</a-radio>
+                        <a-radio value="TRAVEL"> 到该地区旅行的用户</a-radio>
+                        <a-radio value="ALL">该地区内的所有用户</a-radio>
+                        <a-radio value="CURRENT">正在该地区的用户</a-radio>
+                    </a-radio-group>
+                </div>
                 <a-form-model-item label="性别">
                     <a-radio-group v-model="configForm.adGender" button-style="solid">
                         <a-radio-button value="NONE">不限</a-radio-button>
@@ -267,14 +284,7 @@
                     </a-radio-group>
                 </a-form-model-item>
                 <a-form-model-item label="年龄">
-                    <a-radio-group v-model="configForm.adAge" button-style="solid">
-                        <a-radio-button value="NONE">不限</a-radio-button>
-                        <a-radio-button value="AGE_BETWEEN_18_23">18-23</a-radio-button>
-                        <a-radio-button value="AGE_BETWEEN_24_30">24-30</a-radio-button>
-                        <a-radio-button value="AGE_BETWEEN_31_40">31-40</a-radio-button>
-                        <a-radio-button value="AGE_BETWEEN_41_49">41-49</a-radio-button>
-                        <a-radio-button value="AGE_ABOVE_50">50+</a-radio-button>
-                    </a-radio-group>
+                    <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.adRetargetingTagsInclude" button-style="solid">
@@ -504,15 +514,22 @@
                         <a-radio-button :value="true">开启智能优选</a-radio-button>
                         <a-radio-button :value="false">关闭智能优选</a-radio-button>
                     </a-radio-group>
+                    <span class="especial-label">*</span>
                 </a-form-model-item>
                 <div class="adver-position-radio">
-                    <a-form-model-item>
-                        <a-input
+                    <a-form-model-item prop="creativeCallToAction">
+                        <a-select
                             class="common-input-long"
-                            placeholder="请输入"
                             v-model="configForm.creativeCallToAction"
-                            allow-clear
-                        />
+                        >
+                            <a-select-option
+                                v-for="(item, index) in configForm.creativeOptions"
+                                :key="index + 1"
+                                :value="item"
+                            >
+                                {{ item }}
+                            </a-select-option>
+                        </a-select>
                     </a-form-model-item>
                 </div>
                 <a-form-model-item label="来源" :prop="getSource">
@@ -576,6 +593,8 @@
 <script>
 import AcountSearch from '@/views/modules/Statistics/components/Treeselect.vue';
 import SelectCheckAll from '../../BatchCreate/toutiaoTime';
+import radioCheck from '@/components/formComponents/checkBoxGroup';
+import linkMultiSelect from '@/views/modules/BatchCreate/linkMultiSelect';
 
 import moment from 'moment';
 import BMF from 'browser-md5-file';
@@ -603,7 +622,9 @@ export default {
     },
     components: {
         AcountSearch,
-        SelectCheckAll
+        SelectCheckAll,
+        radioCheck,
+        linkMultiSelect
     },
     data() {
         let handleConfirmValue = (rule, value, callback) => {
@@ -622,6 +643,8 @@ export default {
             this.handleExportRules(value, 4, 20, callback);
         };
         return {
+            listArr: [],
+            regionCityListUrl: 'ctop/bytedanceAreaInfo/list',
             defaultAdBudget: '',
             adBudgetShowTitle: false,
             adBudgetNum: 0,
@@ -639,6 +662,32 @@ export default {
                 value: 'industryId',
                 children: 'children'
             },
+            ageArr: [
+                {
+                    value: 'NONE',
+                    label: '不限'
+                },
+                {
+                    value: 'AGE_BETWEEN_18_23',
+                    label: '18-23岁'
+                },
+                {
+                    value: 'AGE_BETWEEN_24_30',
+                    label: '24-30岁'
+                },
+                {
+                    value: 'AGE_BETWEEN_31_40',
+                    label: '31-40岁'
+                },
+                {
+                    value: 'AGE_BETWEEN_41_49',
+                    label: '41-49岁'
+                },
+                {
+                    value: 'AGE_ABOVE_50',
+                    label: '50岁+'
+                }
+            ],
             fileList: [],
             isCoverImgDiv: false,
             imageUrl: '',
@@ -697,11 +746,17 @@ export default {
                     {required: true, message: '请输入', trigger: 'blur'},
                     {min: 1, max: 7, message: '请输入1-7个字', trigger: 'blur'}
                 ],
+                creativeCallToAction: [{required: true, message: '请选择', trigger: 'change'}],
                 adConvertType: [{required: true, message: '请选择', trigger: 'change'}],
                 adConvertId: [{required: true, message: '请选择', trigger: 'change'}],
                 creativeThirdIndustryIds: [{required: true, message: '请选择', trigger: 'change'}]
             },
             configForm: {
+                creativeOptions: [],
+                advancedCreativeType: 'ATTACHED_CREATIVE_NONE',
+                adLocationType: 'HOME',
+                adCity: '',
+                adSelectCity: [],
                 defaultFormList: [],
                 productSellingPoints: [], // 商品买点
                 adBudgetMode: 'BUDGET_MODE_DAY', // 预算类型
@@ -729,7 +784,8 @@ export default {
                 checkboxChangeValue: [], // 广告位置-按照媒体指定位置
                 adDistrict: 'NONE', // 定向-区域
                 adGender: 'NONE', // 定向-性别
-                adAge: 'NONE', // 定向-年龄
+                adAge: '', // 定向-年龄
+                adSelectAge: ['NONE'],
                 adRetargetingTagsInclude: 'NONE', // 定向-自定义
                 adSuperiorPopularityType: 'NONE', // 定向-媒体定向
                 adPlatform: 'NONE', // 定向-平台
@@ -824,6 +880,7 @@ export default {
                 this.handleGetOptimizationObjective(paramsData);
             }
             this.handleGetCreativeClassification();
+            this.handleGetAdvertiserStrategy();
         }
     },
     mounted() {
@@ -839,6 +896,50 @@ export default {
     methods: {
         ...mapGetters(['nickname', 'avatar', 'userInfo']),
         moment,
+        handleGetAdvertiserStrategy() {
+            const params = {
+                accountId: this.configForm.accountId,
+                landingType: this.configForm.campaignLandingType,
+                advancedCreativeType: 'ATTACHED_CREATIVE_NONE'
+            };
+            getAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getAdActionText', params)
+                .then(result => {
+                    if (result.code === 0) {
+                        this.configForm.creativeOptions = result.result;
+                    }
+                    else {
+                        this.$message.error(result.message);
+                    }
+                })
+                .catch(error => {
+                    console.log(error, 'eeee');
+                });
+        },
+        // 获取选中的城市
+        getSelectedCityArr(val) {
+            setTimeout(() => {
+                this.configForm.adSelectCity = val;
+            }, 200);
+        },
+        handleCheckedShowList(val) {
+            if (val.length) {
+                this.configForm.adSelectCity = val.map(item => item.code);
+            }
+            else {
+                this.configForm.adSelectCity = [];
+            }
+        },
+        getAgeSelect(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');
+            }
+        },
         handleAdBudgetBlur(e) {
             const adBudgetInput = e.target.value;
             if (Number(adBudgetInput) >= Number(this.defaultAdBudget) && Number(adBudgetInput) < (Number(this.defaultAdBudget) + 100)) {
@@ -852,7 +953,7 @@ export default {
             }
         },
         handleAccountBudget(e) {
-            this.configForm.accountBudget = Number(e.target.value).toFixed(2);
+            this.configForm.accountBudget = Number(Number(e.target.value).toFixed(2));
         },
         handleExportRules(value, min, max, callback) {
             let cnReg = /([\u4e00-\u9fa5]|[\u3000-\u303F]|[\uFF00-\uFF60])/;
@@ -980,10 +1081,14 @@ export default {
                         this.configForm.adDownloadUrl = detailData.adDownloadUrl || '';
                         this.configForm.adPackage = detailData.adPackage || '';
                         this.configForm.adConvertType = detailData.adConvertType || '';
-                        this.configForm.adConvertId = detailData.adConvertId || '';
                         this.configForm.adDistrict = detailData.adDistrict || 'NONE';
+                        setTimeout(() => {
+                            this.listArr = detailData.adCity.split(',');
+                            this.configForm.adSelectCity = detailData.adCity.split(',');
+                        }, 200);
                         this.configForm.adGender = detailData.adGender || 'NONE';
-                        this.configForm.adAge = detailData.adAge || 'NONE';
+                        this.configForm.adLocationType = detailData.adLocationType;
+                        this.configForm.adSelectAge = detailData.adAge.split(',');
                         this.configForm.adRetargetingTagsInclude = detailData.adRetargetingTagsInclude;
                         this.configForm.adSuperiorPopularityType = detailData.adSuperiorPopularityType;
                         this.configForm.adPlatform = detailData.adPlatform;
@@ -1080,6 +1185,9 @@ export default {
                                 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);
@@ -1217,7 +1325,8 @@ export default {
             reader.readAsDataURL(img);
         },
         beforeUpload(info) {
-            const isZip = info.type.includes('png') || info.type.includes('jpg');
+            console.log(info, '----info----');
+            const isZip = info.type.includes('png') || info.type.includes('jpeg');
             const fileOvesize = info.size > (1024 * 1024);
             if (!isZip) {
                 this.$message.error('请上传正确类型的图片');
@@ -1321,6 +1430,12 @@ export default {
         },
         handleRelaxSure() {
             let paramsFormData = this.configForm;
+            if (this.configForm.adDistrict === 'CITY') {
+                if (!this.configForm.adSelectCity.length) {
+                    this.$message.error('请选择省市');
+                    return;
+                }
+            }
             if (!this.urlResult) {
                 this.$message.error('请上传图片');
                 return;
@@ -1365,12 +1480,14 @@ export default {
             else if (paramsFormData.launchTimeInterval === 'a') {
                 paramsFormData.adScheduleTime = paramsFormData.scheduleTimeData;
             }
-            if (paramsFormData.adAndroidVersion = 'a') {
+            if (paramsFormData.adAndroidVersion === 'a') {
                 paramsFormData.adAndroidOsv = paramsFormData.androidChangeValue;
             }
-            else if (paramsFormData.adAndroidVersion = 'NONE') {
+            else {
                 paramsFormData.adAndroidOsv = 'NONE';
             }
+            paramsFormData.adCity = paramsFormData.adSelectCity.join(',');
+            paramsFormData.adAge = paramsFormData.adSelectAge.join(',');
             paramsFormData.productSellingPoints = this.configForm.defaultFormList && this.configForm.defaultFormList.map(item => item.value);
             paramsFormData.creativeThirdIndustryId = paramsFormData.creativeThirdIndustryIds[2];
             paramsFormData.creativeProductImageCode = this.md5Result;