浏览代码

自动化规则

xinyan 8 月之前
父节点
当前提交
4970f4421c
共有 1 个文件被更改,包括 68 次插入64 次删除
  1. 68 64
      src/views/efTools/automation/components/adActivityDialog.vue

+ 68 - 64
src/views/efTools/automation/components/adActivityDialog.vue

@@ -171,13 +171,16 @@ function handelSelect({ records }) {
   ];
 }
 
-function handleSelectionChange({ records }) {
-  selectedGroups = selectedGroups.filter(group => {
-    return records.some(record => record.adGroupId === group.adGroupId);
-  });
+function updateSelectedAds() {
+  selectedAds.value = gridOptions.data.filter(ad =>
+      ad.campaignGroupInfo && ad.campaignGroupInfo.some(group => group.isSelected)
+  ).map(ad => ({
+    ...ad,
+    campaignGroupInfo: ad.campaignGroupInfo.filter(group => group.isSelected)
+  }));
+}
 
-  let updatedRecords = [];
-  const parentCampaignMap = new Map();
+function handleSelectionChange({ records }) {
   records.forEach(record => {
     if (record.adGroupId) {
       // 这是一个广告组(子节点)
@@ -185,31 +188,20 @@ function handleSelectionChange({ records }) {
           campaign.campaignGroupInfo.some(group => group.adGroupId === record.adGroupId)
       );
       if (parentCampaign) {
-        // 如果父节点已经存在,则将子节点添加到父节点的 campaignGroupInfo 中
-        if (parentCampaignMap.has(parentCampaign.campaignId)) {
-          parentCampaignMap.get(parentCampaign.campaignId).campaignGroupInfo.push(record);
-        } else {
-          // 如果父节点不存在,则创建一个新的父节点对象
-          parentCampaignMap.set(parentCampaign.campaignId, {
-            campaignType: parentCampaign.campaignType,
-            campaignId: parentCampaign.campaignId,
-            campaignName: parentCampaign.campaignName,
-            campaignGroupInfo: [record]
-          });
+        const group = parentCampaign.campaignGroupInfo.find(group => group.adGroupId === record.adGroupId);
+        if (group) {
+          group.isSelected = true;
         }
       }
+    } else {
+      // 这是一个广告活动(父节点)
+      record.campaignGroupInfo.forEach(group => {
+        group.isSelected = true;
+      });
     }
   });
 
-  // 将所有父节点对象添加到 updatedRecords
-  updatedRecords = Array.from(parentCampaignMap.values());
-
-  // 更新选中的广告
-  selectedAds.value = [
-    ...updatedRecords.map(ad => ({ ...ad, page: currentPage.value })),
-  ];
-  console.log("=>(adActivityDialog.vue:209) selectedAds.value", selectedAds.value);
-
+  updateSelectedAds();
 }
 
 function handleSelectTarget(row) {
@@ -231,28 +223,34 @@ function handleSelectTarget(row) {
 
 
 function handleConfirm({ campaignInfo, targetType }) {
-  if (targetType === 'keyword'){
-    selectedTargetedRow.value.keywordInfo = campaignInfo;
-    targetLength.value = selectedTargetedRow.value.keywordInfo.length;
-  }else if (targetType ==='target'){
-    selectedTargetedRow.value.campaignTargetInfo = campaignInfo;
-    targetLength.value = selectedTargetedRow.value.campaignTargetInfo.length;
-  }
-  selectedTargetedRow.value.isSelected = true;
-  // 更新子节点状态
-  const parent = gridOptions.data.find(ad =>
-      ad.campaignGroupInfo && ad.campaignGroupInfo.some(group => group.adGroupId === selectedTargetedRow.value.adGroupId)
+  if (!selectedTargetedRow.value) return;
+
+  // 找到父级广告活动
+  const parentCampaign = gridOptions.data.find(campaign =>
+      campaign.campaignGroupInfo.some(group => group.adGroupId === selectedTargetedRow.value.adGroupId)
   );
 
-  if (parent) {
-    const group = parent.campaignGroupInfo.find(group => group.adGroupId === selectedTargetedRow.value.adGroupId);
+  if (parentCampaign) {
+    // 更新子节点(广告组)的信息
+    const group = parentCampaign.campaignGroupInfo.find(group => group.adGroupId === selectedTargetedRow.value.adGroupId);
     if (group) {
-      group.isSelected = true; // 更新子节点的 isSelected 状态
-      xGridOne.value.toggleCheckboxRow(group);
-      selectedGroups.push(group);
-      handleSelectionChange({ records: selectedGroups });
+      if (targetType === 'keyword') {
+        group.keywordInfo = campaignInfo;
+      } else if (targetType === 'target') {
+        group.campaignTargetInfo = campaignInfo;
+      }
+      group.isSelected = true;
+      group.targetLength = (group.keywordInfo?.length || 0) + (group.campaignTargetInfo?.length || 0);
     }
   }
+
+  // 更新选中的广告
+  updateSelectedAds();
+
+  // 勾选表格1中的对应行
+  if (xGridOne.value) {
+    xGridOne.value.setCheckboxRow(selectedTargetedRow.value, true);
+  }
 }
 
 const removeSelectedAd = async (row) => {
@@ -288,7 +286,7 @@ async function confirm() {
   const campaignTargetInfo = [
     { targetId: '492707808377423', adGroup_id: '448117369011017', bid: 0.45 },
   ];
-  console.log("=>(adActivityDialog.vue:291) selectedTargetedRow.value", selectedTargetedRow.value);
+  console.log('=>(adActivityDialog.vue:291) selectedTargetedRow.value', selectedTargetedRow.value);
 
   const campaignInfo = selectedTargetedRow.value.keywordInfo.map(keyword => ({
     keywordId: keyword.keywordId,
@@ -464,26 +462,32 @@ onMounted(() => {
                   border="inner"
                   height="484">
           <template #campaignName_default="{ row }">
-            <el-tag
-                v-if="row.campaignType"
-                :color="row.campaignType === 'sb' ? '#0163d2' : (row.campaignType === 'sp' ? '#ff7424' : '#365672')"
-                class="campaign-type"
-                disable-transitions
-                round>
-              {{ row.campaignType }}
-            </el-tag>
-            <span>  {{ row.campaignName }}</span>
-            <span class="flex-container">
-              {{ row.adGroupName }}
-              <el-button
-                  v-if="row.isSelected"
-                  :icon="DocumentAdd"
-                  class="btn-link"
-                  link
-                  @click="handleSelectTarget(row)">
-              共{{ targetLength }}个定向规则
-            </el-button>
-            </span>
+            <template v-if="!row.adGroupId">
+              <!-- 父节点(广告活动) -->
+              <el-tag
+                  v-if="row.campaignType"
+                  :color="row.campaignType === 'sb' ? '#0163d2' : (row.campaignType === 'sp' ? '#ff7424' : '#365672')"
+                  class="campaign-type"
+                  disable-transitions
+                  round>
+                {{ row.campaignType }}
+              </el-tag>
+              <span>{{ row.campaignName }}</span>
+            </template>
+            <template v-else>
+              <!-- 子节点(广告组) -->
+              <div class="flex-container">
+                <span>{{ row.adGroupName }}</span>
+                <el-button
+                    v-if="row.isSelected"
+                    :icon="DocumentAdd"
+                    class="btn-link"
+                    link
+                    @click="handleSelectTarget(row)">
+                  共{{ row.targetLength }}个定向规则
+                </el-button>
+              </div>
+            </template>
           </template>
           <template #header_operation>
             <el-button link size="default" style="color: #2077d7" @click="removeAllSelectedAds">删除全部</el-button>