Browse Source

🐛 feat<自动化规则>:已发现问题修复

xinyan 6 tháng trước cách đây
mục cha
commit
35f7e839e3

+ 14 - 46
src/views/efTools/automation/components/adActivityDialog.vue

@@ -16,7 +16,7 @@ import { useShopInfo } from '/@/stores/shopInfo';
 import { ElMessage } from 'element-plus';
 import TargetRuleDialog from '/@/views/efTools/automation/components/targetRuleDialog.vue';
 import { DocumentAdd } from '@element-plus/icons-vue';
-import { allCampaignTypes, campaignStatus } from '/@/views/efTools/utils/enum';
+import { allCampaignTypes, campaignStatus, filterCampaignTypes } from '/@/views/efTools/utils/enum';
 
 
 const shopInfo = useShopInfo();
@@ -63,16 +63,14 @@ const xGridOne = ref(null);
 const xGridTwo = ref(null);
 let selectedAds = ref([]);
 
-// 计算属性,动态生成可选的 campaignType
 const filteredCampaignType = computed(() => {
   const selectedCampaignType = props.rowData.rule.campaignType;
-
-  // 如果 selectedCampaignType 有值,过滤出该值的选项
   if (selectedCampaignType) {
     return allCampaignTypes.filter(item => item.value === selectedCampaignType);
   }
-
-  // 否则,返回所有选项
+  else if (props.rowData.rule.type === 2 || props.rowData.rule.type === 5 || props.rowData.rule.type === 6){
+    return filterCampaignTypes;
+  }
   return allCampaignTypes;
 });
 
@@ -87,7 +85,6 @@ const selectedColumns = computed(() => [
 ]);
 
 const treeProps = computed(() => {
-  // activeModel.value = 'specified';
   if (activeModel.value === 'adGroup' || activeModel.value === 'specified') {
     return {
       rowField: 'campaignId',
@@ -101,6 +98,7 @@ const treeProps = computed(() => {
 const gridOptions = reactive({
   border: 'inner',
   height: 500,
+  loading:false,
   rowConfig: {
     isHover: true,
     keyField: 'campaignId',
@@ -112,10 +110,9 @@ const gridOptions = reactive({
     checkStrictly: false,
     checkMethod: ({ row }) => {
       if (activeModel.value === 'specified') {
-        // 如果是 specified 模式,只有已选择的行可以被取消选中
         return row.isSelected;
       }
-      return true; // 其他模式下都可以选中
+      return true;
     }
   },
   columns: computed(() => [
@@ -159,8 +156,7 @@ async function fetchAdCampaign() {
   //   searchAdCampaign.value = JSON.parse(savedAdCampaign);
   // }
   try {
-    loading.value = true;
-    // const cachedSelectedAds = [...selectedAds.value];
+    gridOptions.loading = true;
     if (profile.value.profile_id && templateId.value) {
       const resp = await getRelationCampaign({
         profileId: profile.value.profile_id,
@@ -179,19 +175,10 @@ async function fetchAdCampaign() {
   } catch (error) {
     ElMessage.error('请求广告活动数据失败');
   } finally {
-    loading.value = false;
+    gridOptions.loading  = false;
   }
 }
 
-// 处理表格复选框选择变化(是否为树形结构)
-// const handleGridChange = (event) => {
-//   if (activeModel.value == 'specified' || activeModel.value == 'adGroup') {
-//     handleSelectionChange(event);
-//   } else {
-//     handelSelect(event);
-//   }
-// };
-
 function handleGridChange({ records, row, checked }) {
   if (activeModel.value === 'specified') {
     if (row) {
@@ -200,12 +187,12 @@ function handleGridChange({ records, row, checked }) {
         if (row.campaignGroupInfo) {
           // 如果是父节点,清空所有子节点的 keywordInfo 和 campaignTargetInfo
           row.campaignGroupInfo.forEach(group => {
-            group.keywordInfo = []; // 清空每个子节点的关键词信息
-            group.campaignTargetInfo = []; // 清空每个子节点的定向目标信息
+            group.keywordInfo = [];
+            group.campaignTargetInfo = [];
           });
         } else if (row.keywordInfo || row.campaignTargetInfo) {
-          row.keywordInfo = []; // 清空关键词信息
-          row.campaignTargetInfo = []; // 清空定向目标信息
+          row.keywordInfo = [];
+          row.campaignTargetInfo = [];
         }
         updateSelectedAds();
       }
@@ -245,9 +232,7 @@ function handelSelect({ records }) {
   ];
 }
 
-// 处理一开始selectedAds.value为空时能正常
 function updateSelectedAds() {
-  // 获取当前选中广告组
   const filteredAds = gridOptions.data
       .filter(ad => ad.campaignGroupInfo && ad.campaignGroupInfo.some(group => group.isSelected))
       .map(ad => ({
@@ -255,7 +240,6 @@ function updateSelectedAds() {
         campaignGroupInfo: ad.campaignGroupInfo.filter(group => group.isSelected),
         page: currentPage.value
       }));
-  // 合并新选中的广告组与现有的 selectedAds
   selectedAds.value = [
     ...selected.value, // 保留已存在的选中广告
     ...filteredAds
@@ -272,7 +256,7 @@ function handleSelectionChange({ records }) {
   const parentCampaignMap = new Map();
   records.forEach(record => {
     if (record.adGroupId) {
-      // 这是一个广告组(子节点
+      // 子节点
       const parentCampaign = gridOptions.data.find(campaign =>
           campaign.campaignGroupInfo.some(group => group.adGroupId === record.adGroupId)
       );
@@ -330,7 +314,6 @@ function handleSelectTarget(row) {
 function handleConfirm({ campaignInfo, targetType }) {
   if (!selectedTargetedRow.value) return;
 
-  // 找到父级广告活动
   const parentCampaign = gridOptions.data.find(campaign =>
       campaign.campaignGroupInfo.some(group => group.adGroupId === selectedTargetedRow.value.adGroupId)
   );
@@ -344,7 +327,7 @@ function handleConfirm({ campaignInfo, targetType }) {
       } else if (targetType === 'target') {
         group.campaignTargetInfo = campaignInfo;
       }
-      group.isSelected = true; // 更新子节点的选择状态
+      group.isSelected = true;
       group.targetLength = (group.keywordInfo?.length || 0) + (group.campaignTargetInfo?.length || 0);
     }
 
@@ -384,9 +367,7 @@ async function removeSpecificAd(row) {
       }).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,
@@ -399,8 +380,6 @@ async function removeSpecificAd(row) {
     } else {
       // 删除父节点(广告活动)
       selectedAds.value = selectedAds.value.filter(ad => ad.campaignId !== row.campaignId);
-      console.log("=>(adActivityDialog.vue:394) selectedAds.value", selectedAds.value);
-      // 更新 selected.value
       selected.value = selected.value.filter(ad => ad.campaignId !== row.campaignId);
     }
 
@@ -417,7 +396,6 @@ async function removeSpecificAd(row) {
       const parentRow = xGridOne.value.data.find(ad => ad.campaignId === row.campaignId);
       if (parentRow && parentRow.campaignGroupInfo) {
         parentRow.campaignGroupInfo.forEach(group => {
-          // 将子节点的 isSelected 设置为 false
           group.isSelected = false;
         });
       }
@@ -454,15 +432,12 @@ const removedAd = async (row) => {
 };
 
 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 => {
@@ -804,14 +779,8 @@ onMounted(() => {
 }
 
 .campaign-type {
-  /* width: 35px; */
-  /* text-align: center; */
-  /* height: 22px; */
-  /* font-size: 13px; */
-  /* font-weight: 400; */
   color: #fff;
   border-color: #fff;
-  /* line-height: 21px; */
   border-radius: 12px;
   margin-right: 4px;
 }
@@ -843,7 +812,6 @@ onMounted(() => {
 .btn-link {
   font-size: 13px;
   color: #0085ff;
-  /* ling-heigt: 23px; */
 }
 
 .flex-container {

+ 3 - 3
src/views/efTools/automation/index.vue

@@ -272,10 +272,10 @@ onMounted(() => {
         <el-button icon="Edit" style="color: #0b52a7" type="text" @click="editTmpl(row)"></el-button>
         <el-button icon="SetUp" style="color: #0b52a7" type="text" @click="showDialog(row)"></el-button>
         <el-popconfirm
-            width="300"
             :icon="WarningFilled"
             icon-color="#ff8d2b"
             title="删除模板后,所有使用该模板的广告活动将暂停相关自动化规则"
+            width="300"
             @confirm="deleteTmpl(row)"
         >
           <template #reference>
@@ -284,8 +284,8 @@ onMounted(() => {
           <template #actions="{ confirm, cancel }">
             <el-button size="small" @click="cancel">No!</el-button>
             <el-button
-                type="danger"
                 size="small"
+                type="danger"
                 @click="confirm"
             >
               Yes?
@@ -312,7 +312,7 @@ onMounted(() => {
           @refresh="refreshTable"></component>
     </div>
   </el-drawer>
-  <AdActivityDialog v-if="isDialogVisible" v-model="isDialogVisible" :rowData @confirmSuccess="getList"/>
+  <AdActivityDialog v-if="isDialogVisible" v-model="isDialogVisible" :rowData @confirmSuccess="getList" />
   <AutomatedRuleTips v-model="autoInfo"></AutomatedRuleTips>
 </template>
 

+ 5 - 0
src/views/efTools/utils/enum.ts

@@ -21,6 +21,11 @@ export const allCampaignTypes = [
   { value: 'sd', label: 'SD' },
 ];
 
+export const filterCampaignTypes = [
+  { value: 'sb', label: 'SB' },
+  { value: 'sp', label: 'SP' },
+];
+
 export const campaignStatus = [
   { value: 0, label: '未存档' },
   { value: 'ENABLED', label: '已启用' },