Browse Source

🐛 feat<自动化规则>:效率工具-自动化规则:修复删除选中广告子节点、父节点问题;修复已有数据删除问题;

xinyan 7 months ago
parent
commit
107a681082

+ 56 - 13
src/views/efTools/automation/components/adActivityDialog.vue

@@ -40,7 +40,7 @@ const campaignType = ref(rowData.value.rule.campaignType);
 const dialogVisible = defineModel({ default: false });
 
 // 定向规则
-const selected =ref([]) //存储后端中已存在的广告组
+const selected = ref([]); //存储后端中已存在的广告组
 
 const targetRuleDialogVisible = ref(false);
 const selectedTargetedRow = ref(null);
@@ -199,13 +199,15 @@ function handleGridChange({ records, row, checked }) {
     if (row) {
       if (!checked) {
         row.isSelected = false;
-        // 清空 keywordInfo 和 campaignTargetInfo
-        if (row.keywordInfo) {
-          row.keywordInfo = [];
-        }
-
-        if (row.campaignTargetInfo) {
-          row.campaignTargetInfo = [];
+        if (row.campaignGroupInfo) {
+          // 如果是父节点,清空所有子节点的 keywordInfo 和 campaignTargetInfo
+          row.campaignGroupInfo.forEach(group => {
+            group.keywordInfo = []; // 清空每个子节点的关键词信息
+            group.campaignTargetInfo = []; // 清空每个子节点的定向目标信息
+          });
+        } else if (row.keywordInfo || row.campaignTargetInfo) {
+          row.keywordInfo = []; // 清空关键词信息
+          row.campaignTargetInfo = []; // 清空定向目标信息
         }
         updateSelectedAds();
       }
@@ -374,25 +376,67 @@ const removeSelectedAd = async (row) => {
         }
         return ad;
       }).filter(ad => ad.campaignGroupInfo && ad.campaignGroupInfo.length > 0);
+      // 更新 selected.value
+      selected.value = selected.value.map(ad => {
+        // 仅在父节点存在时进行过滤
+        if (ad.campaignGroupInfo) {
+          // 过滤掉与 row.adGroupId 匹配的子节点
+          const filteredGroupInfo = ad.campaignGroupInfo.filter(group => group.adGroupId !== row.adGroupId);
+          return {
+            ...ad,
+            campaignGroupInfo: filteredGroupInfo // 更新子节点
+          };
+        }
+        return ad; // 返回未修改的广告
+      }).filter(ad => ad.campaignGroupInfo.length > 0); // 删除无子节点的父节点
+
     } else {
       // 删除父节点(广告活动)
       selectedAds.value = selectedAds.value.filter(ad => ad.campaignId !== row.campaignId);
+      // 更新 selected.value
+      selected.value = selected.value.filter(ad => ad.campaignId !== row.campaignId);
     }
 
     await $grid.remove(row);
   }
 
   if (xGridOne.value) {
-    await xGridOne.value.toggleCheckboxRow(row);
-    row.isSelected = false;
+    // 始终取消选中当前行
+    await xGridOne.value.setCheckboxRow(row, false);
+    handleGridChange({ records: [row], row, checked: false });
+
+    if (!row.isSelected) {
+      // 如果当前行不是选中的状态,查找并取消选中对应的子节点
+      const parentRow = xGridOne.value.data.find(ad => ad.campaignId === row.campaignId);
+      if (parentRow && parentRow.campaignGroupInfo) {
+        parentRow.campaignGroupInfo.forEach(group => {
+          // 将子节点的 isSelected 设置为 false
+          group.isSelected = false;
+        });
+      }
+    }
   }
 };
 
 function removeAllSelectedAds() {
+  // 清空 selectedAds 中的所有值
   selectedAds.value = [];
+
   const $grid = xGridOne.value;
   if ($grid) {
+    // 清除表格中所有行的勾选状态
     $grid.clearCheckboxRow();
+
+    // 循环遍历 gridOptions.data,设置所有子节点的 isSelected 为 false 并清空相关信息
+    gridOptions.data.forEach(ad => {
+      if (ad.campaignGroupInfo) {
+        ad.campaignGroupInfo.forEach(group => {
+          group.isSelected = false; // 设置子节点的 isSelected 为 false
+          group.keywordInfo = []; // 清空每个子节点的关键词信息
+          group.campaignTargetInfo = []; // 清空每个子节点的定向目标信息
+        });
+      }
+    });
   }
 }
 
@@ -400,7 +444,6 @@ function cancel() {
   dialogVisible.value = false;
 }
 
-//TODO: 确认按钮-adGroupInfo
 async function confirm() {
   const campaignItems = selectedAds.value.map(ad => ({
     campaignId: ad.campaignId,
@@ -472,12 +515,12 @@ async function getSelectedAds() {
       if (ad.campaignGroupInfo && ad.campaignGroupInfo.length > 0) {
         ad.campaignGroupInfo.forEach(group => {
           group.isSelected = true;
-          group.targetLength = group.keywordInfo.length;
+          group.targetLength = group.keywordInfo?.length + (group.campaignTargetInfo?.length || 0);
         });
       }
     });
-    updateSelectedAds();
   }
+  selectedAds.value.push(...selected.value);
 }
 
 // 获取广告组下拉框

+ 1 - 1
src/views/efTools/automation/components/targetRuleDialog.vue

@@ -95,8 +95,8 @@ async function fetchTargetRuleList() {
         isSelected: selectedTargetedRow.value.keywordInfo.some(keyword => keyword.keywordId === item.keywordId)
       }));
     } else if (targetType.value === 'target') {
-      gridOptions.rowConfig.height = 85;
       gridOptions.columns = targetColumn;
+      gridOptions.rowConfig.height = 85;
       gridOptions.data = resp.data.targetData.map(item => ({
         ...item,
         isSelected: selectedTargetedRow.value.campaignTargetInfo.some(target => target.targetId === item.targetId)