Parcourir la Source

feat: 文案分配

zhengxy il y a 7 mois
Parent
commit
1d043ee6f6

+ 2 - 0
src/components/businessMoudle/batchGdt3/configArea/index.vue

@@ -329,6 +329,7 @@ const pageInfo = reactive<reactiveTableAndAny>({
329 329
   copywriterInfoData: {//创意文案
330 330
     multiCopyTesting: 0,
331 331
     data: [],
332
+    allData: [],
332 333
     allocation_type: '',//分配形式 1自动分配 2程序化相乘分配
333 334
     writerShareRadioList: '1',// 分配方式 1按广告 2按创意
334 335
     writerRuleRadioList: '1', // 分配规则 1自动分配 2程序化分配
@@ -597,6 +598,7 @@ const computeCount = (cb?) => {
597 598
 const writerCallBack = (obj) => {
598 599
   pageInfo.copywriterInfoData.multiCopyTesting = obj.multiCopyTesting;
599 600
   pageInfo.copywriterInfoData.data = obj.writer;
601
+  pageInfo.copywriterInfoData.allData = obj.writer
600 602
   pageInfo.copywriterInfoData.allocation_type = obj.allocation_type;
601 603
   pageInfo.copywriterInfoData.writerShareRadioList = obj.writerShareRadioList;
602 604
   pageInfo.copywriterInfoData.writerRuleRadioList = obj.writerRuleRadioList;

+ 4 - 4
src/components/businessMoudle/batchGdt3/configArea/landPage/accMinprogram.vue

@@ -1,9 +1,9 @@
1 1
 <template>
2 2
 <div class="tabelListBox">
3 3
     <div class="num_pre" v-if="acc_select_count">
4
-      <span>账户数:</span><span class="num">{{ acc_select_count[accId].accNum || 0 }}</span>
5
-      <span>计划数:</span><span class="num">{{ acc_select_count[accId].planNum || 0 }},</span>
6
-      <span>广告数:</span><span class="num">{{ acc_select_count[accId].adNum || 0 }};</span>
4
+      <span>账户数:</span><span class="num">{{ acc_select_count[accId].accNum || 0 }}</span>
5
+      <!-- <span>计划数:</span><span class="num">{{ acc_select_count[accId].planNum || 0 }},</span> -->
6
+      <!-- <span>广告数:</span><span class="num">{{ acc_select_count[accId].adNum || 0 }};</span> -->
7 7
     </div>
8 8
     <div class="ids">
9 9
       <div class="accItem" v-for="(item, idx) in accIdsList" :key="item.id" :class="item.id == accId ? 'active' : ''"
@@ -61,7 +61,7 @@ onBeforeMount(()=>{
61 61
 })
62 62
 /**点击媒体账户 */
63 63
 const accItemEvent = (item) => {
64
-  copyCallDataInfo.value = (callDataInfo[item?.id] && JSON.parse(JSON.stringify(callDataInfo[item?.id]))) || [] 
64
+  copyCallDataInfo.value = (callDataInfo[item?.id] && JSON.parse(JSON.stringify(callDataInfo[item?.id]))) || []
65 65
   accId.value = item?.id;
66 66
   select_count.value = accCountInfo[accId.value]?.count || -1;
67 67
 }

+ 2 - 2
src/components/businessMoudle/batchGdt3/configArea/landPage/landPageDialog.vue

@@ -25,9 +25,9 @@
25 25
             </el-icon></span>
26 26
         </el-tooltip>
27 27
         <div class="num_pre" v-if="multiCopyTesting == 0">
28
-          <span>账户数:</span><span class="num">{{ count_info?.accNum || 0 }}</span>
28
+          <span>账户数:</span><span class="num">{{ count_info?.accNum || 0 }}</span>
29 29
           <!-- <span>计划数:</span><span class="num">{{ count_info?.planNum || 0 }},</span> -->
30
-          <span>广告数:</span><span class="num">{{ count_info?.adNum || 0 }};</span>
30
+          <!-- <span>广告数:</span><span class="num">{{ count_info?.adNum || 0 }};</span> -->
31 31
         </div>
32 32
       </div>
33 33
       <div class="flex marT15" v-if="allocation == 2 && multiCopyTesting == 0">

+ 8 - 0
src/components/businessMoudle/batchGdt3/configArea/ts/preview.ts

@@ -101,6 +101,14 @@ export const previewCompute = (pageInfo_cr, cMaterial_cr, basicInfoData_cr,) =>
101 101
     };
102 102
     //创意文案
103 103
     if (pageInfo.copywriterInfoData.data && pageInfo.copywriterInfoData.data.length > 0) {
104
+      console.log('pageInfo.copywriterInfoData => ', pageInfo.copywriterInfoData)
105
+      const {writerRuleRadioList: writerRule, writerShareRadioList: writerShare} = pageInfo.copywriterInfoData
106
+      if (writerShare == 1 || (writerShare == 2 && writerRule == 1) || (writerShare == 2 && writerRule == 2) ) { // 按广告分配 || 按创意自动分配 || 按创意程序化相乘
107
+        // 模拟用1条文案确认广告创意数 确认创意数后 再跟进分配方式 将选择的完整的文案列表分配到创意中
108
+        pageInfo.copywriterInfoData.data = [pageInfo.copywriterInfoData.data[0]]
109
+        console.log('pageInfo.copywriterInfoData.data => ', pageInfo.copywriterInfoData.data)
110
+      }
111
+
104 112
       let writer_num = 0;
105 113
       ad_show_list.forEach((main_1) => {
106 114
         for (let i = 0; i < main_1.chooseList.length; i++) {

+ 33 - 52
src/components/businessMoudle/batchGdt3/previewArea/index.vue

@@ -882,6 +882,7 @@ const initEvent = (infoObj_c) => {
882 882
       writerShare: infoObj.copyInfo.pageInfo.copywriterInfoData.writerShareRadioList,
883 883
       writerRule: infoObj.copyInfo.pageInfo.copywriterInfoData.writerRuleRadioList,
884 884
       writerList: infoObj.copyInfo.pageInfo.copywriterInfoData.data,
885
+      writerListAll: infoObj.copyInfo.pageInfo.copywriterInfoData.allData,
885 886
     })
886 887
 
887 888
     accItemEvent(pageInfo.accList[0].id)
@@ -1005,18 +1006,19 @@ const handleSetMaterialRule = ({accountShareRule, creativeRule, materialItemIds
1005 1006
   }
1006 1007
 }
1007 1008
 
1008
-const handleSetWriterRule = ({writerShare, writerRule, writerList = []}) => {
1009
+const handleSetWriterRule = ({writerShare, writerRule, writerList = [], writerListAll = []}) => {
1009 1010
   console.log('writerShare => ', writerShare)
1010 1011
   console.log('writerRule => ', writerRule)
1011 1012
   console.log('writerList => ', writerList)
1013
+  console.log('writerListAll => ', writerListAll)
1012 1014
   console.log('pageInfo.campaign_list => ', JSON.parse(JSON.stringify(pageInfo.campaign_list)))
1013
-
1014
-  if (writerShare == 1) { // 所选文案按广告(定向包)平均分配 删除重复素材
1015
+  // 模拟用1条文案确认广告创意数 确认创意数后 再跟进分配方式 将writerList分配到创意中
1016
+  if (writerShare == 1) { // 所选文案按广告(定向包)平均分配
1015 1017
     const _campaign_list = _.cloneDeep(pageInfo.campaign_list)
1016 1018
 
1017 1019
     let _writerList = []
1018
-    for (let i = 0; i < 99; i++) {
1019
-      _writerList = [..._writerList, ...writerList]
1020
+    for (let i = 0; i < 500; i++) {
1021
+      _writerList = [..._writerList, ...writerListAll]
1020 1022
     }
1021 1023
 
1022 1024
     let adIds: any = []
@@ -1030,11 +1032,8 @@ const handleSetWriterRule = ({writerShare, writerRule, writerList = []}) => {
1030 1032
       })
1031 1033
     })
1032 1034
     adIds = _.uniq(adIds)
1033
-    console.log('adIds => ', adIds)
1034
-    console.log('_writerList => ', _writerList)
1035
-    console.log('_campaign_list => ', _campaign_list)
1036 1035
 
1037
-    let total:any = writerList.length
1036
+    let total:any = writerListAll.length
1038 1037
     let count:any = adIds.length;
1039 1038
     let base:any = Math.floor(total / count);
1040 1039
     let rest:any = total % count;
@@ -1043,83 +1042,65 @@ const handleSetWriterRule = ({writerShare, writerRule, writerList = []}) => {
1043 1042
       let idx = base + (i<rest?1:0)
1044 1043
       arr.push(idx)
1045 1044
     }
1046
-    console.log('arr => ', arr)
1047 1045
 
1048 1046
     adIds = adIds.map(adId => ({
1049 1047
       adId: adId,
1050
-      writerList: [],
1048
+      writerList: '',
1051 1049
     }))
1052 1050
 
1053 1051
     let startIdx = 0
1054 1052
     arr.forEach((length, idx) => {
1055 1053
       let _length = length || 1
1056
-      adIds[idx].writerList = _writerList.slice(startIdx, startIdx+_length)
1054
+      adIds[idx].writerList = _writerList.slice(startIdx, startIdx+_length)[0]
1057 1055
       startIdx = startIdx + _length
1058 1056
     })
1059 1057
 
1060
-    console.log('adIds => ', adIds)
1061
-
1062 1058
     _campaign_list.forEach((campaign) => {
1063 1059
       campaign.chooseList.forEach((choose) => {
1064 1060
         choose.ad_list.forEach(ad => {
1065 1061
           const crtAdId = ad.adId
1066
-          const res = adIds.find(ad => ad.adId === crtAdId)
1067
-          if (res && !res.writerList.includes(ad.adcreatives_info.adcreative_elements.description)) {
1068
-            ad.delFlag = true
1069
-          }
1062
+          const res = adIds.find(a => a.adId === crtAdId)
1063
+          ad.adcreatives_info.adcreative_elements.description = res.writerList
1070 1064
         })
1071
-        choose.ad_list = choose.ad_list.filter(ad => !ad.delFlag)
1072 1065
       })
1073 1066
     })
1074 1067
     pageInfo.campaign_list = _.cloneDeep(_campaign_list)
1075
-  } else if (writerShare == 2 && writerRule == 1) { // 所选文案按创意平均分配 删除重复素材
1068
+
1069
+  } else if (writerShare == 2 && writerRule == 1) { // 所选文案按创意平均分配
1076 1070
     const _campaign_list = _.cloneDeep(pageInfo.campaign_list)
1071
+
1077 1072
     let _writerList = []
1078
-    for (let i = 0; i < 99; i++) {
1079
-      _writerList = [..._writerList, ...writerList]
1073
+    for (let i = 0; i < 500; i++) {
1074
+      _writerList = [..._writerList, ...writerListAll]
1080 1075
     }
1081
-    let adIds: any = []
1076
+
1077
+    let idx = 0
1082 1078
     _campaign_list.forEach((campaign) => {
1083 1079
       campaign.chooseList.forEach((choose) => {
1084 1080
         choose.ad_list.forEach(ad => {
1085
-          ad.account_id = choose.account_id
1086
-          ad.adId = `${choose.account_id}&&&${ad.targeting_id}`
1087
-          adIds.push(ad.adId)
1081
+          ad.adcreatives_info.adcreative_elements.description = _writerList[idx]
1082
+          idx++
1088 1083
         })
1089 1084
       })
1090 1085
     })
1091
-    adIds = _.uniq(adIds)
1092
-    let total:any = writerList.length
1093
-    let count:any = adIds.length;
1094
-    let base:any = Math.floor(total / count);
1095
-    let rest:any = total % count;
1096
-    let arr:any = []; // 记录每个账号分多少个素材
1097
-    for(let i=0; i<count; i++) {
1098
-      let idx = base + (i<rest?1:0)
1099
-      arr.push(idx)
1100
-    }
1101
-    adIds = adIds.map(adId => ({
1102
-      adId: adId,
1103
-      writerList: [],
1104
-    }))
1105
-    let startIdx = 0
1106
-    arr.forEach((length, idx) => {
1107
-      let _length = length || 1
1108
-      adIds[idx].writerList = _writerList.slice(startIdx, startIdx+_length)
1109
-      startIdx = startIdx + _length
1110
-    })
1086
+
1087
+    pageInfo.campaign_list = _.cloneDeep(_campaign_list)
1088
+  } else if (writerShare == 2 && writerRule == 2) { // 所选文案按创意交叉相乘
1089
+    const _campaign_list = _.cloneDeep(pageInfo.campaign_list)
1111 1090
     _campaign_list.forEach((campaign) => {
1112 1091
       campaign.chooseList.forEach((choose) => {
1092
+        let ad_list: any = []
1113 1093
         choose.ad_list.forEach(ad => {
1114
-          const crtAdId = ad.adId
1115
-          const res = adIds.find(ad => ad.adId === crtAdId)
1116
-          if (res && !res.writerList.includes(ad.adcreatives_info.adcreative_elements.description)) {
1117
-            ad.delFlag = true
1118
-          }
1094
+          writerListAll.forEach(writer => {
1095
+            let adObj = _.cloneDeep(ad)
1096
+            adObj.adcreatives_info.adcreative_elements.description = writer
1097
+            ad_list.push(adObj)
1098
+          })
1119 1099
         })
1120
-        choose.ad_list = choose.ad_list.filter(ad => !ad.delFlag)
1100
+        choose.ad_list = ad_list
1121 1101
       })
1122 1102
     })
1103
+
1123 1104
     pageInfo.campaign_list = _.cloneDeep(_campaign_list)
1124 1105
   }
1125 1106
 }