|
@@ -40,7 +40,7 @@ const campaignType = ref(rowData.value.rule.campaignType);
|
|
const dialogVisible = defineModel({ default: false });
|
|
const dialogVisible = defineModel({ default: false });
|
|
|
|
|
|
// 定向规则
|
|
// 定向规则
|
|
-const selected =ref([]) //存储后端中已存在的广告组
|
|
|
|
|
|
+const selected = ref([]); //存储后端中已存在的广告组
|
|
|
|
|
|
const targetRuleDialogVisible = ref(false);
|
|
const targetRuleDialogVisible = ref(false);
|
|
const selectedTargetedRow = ref(null);
|
|
const selectedTargetedRow = ref(null);
|
|
@@ -199,13 +199,15 @@ function handleGridChange({ records, row, checked }) {
|
|
if (row) {
|
|
if (row) {
|
|
if (!checked) {
|
|
if (!checked) {
|
|
row.isSelected = false;
|
|
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();
|
|
updateSelectedAds();
|
|
}
|
|
}
|
|
@@ -374,25 +376,67 @@ const removeSelectedAd = async (row) => {
|
|
}
|
|
}
|
|
return ad;
|
|
return ad;
|
|
}).filter(ad => ad.campaignGroupInfo && ad.campaignGroupInfo.length > 0);
|
|
}).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 {
|
|
} else {
|
|
// 删除父节点(广告活动)
|
|
// 删除父节点(广告活动)
|
|
selectedAds.value = selectedAds.value.filter(ad => ad.campaignId !== row.campaignId);
|
|
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);
|
|
await $grid.remove(row);
|
|
}
|
|
}
|
|
|
|
|
|
if (xGridOne.value) {
|
|
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() {
|
|
function removeAllSelectedAds() {
|
|
|
|
+ // 清空 selectedAds 中的所有值
|
|
selectedAds.value = [];
|
|
selectedAds.value = [];
|
|
|
|
+
|
|
const $grid = xGridOne.value;
|
|
const $grid = xGridOne.value;
|
|
if ($grid) {
|
|
if ($grid) {
|
|
|
|
+ // 清除表格中所有行的勾选状态
|
|
$grid.clearCheckboxRow();
|
|
$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;
|
|
dialogVisible.value = false;
|
|
}
|
|
}
|
|
|
|
|
|
-//TODO: 确认按钮-adGroupInfo
|
|
|
|
async function confirm() {
|
|
async function confirm() {
|
|
const campaignItems = selectedAds.value.map(ad => ({
|
|
const campaignItems = selectedAds.value.map(ad => ({
|
|
campaignId: ad.campaignId,
|
|
campaignId: ad.campaignId,
|
|
@@ -472,12 +515,12 @@ async function getSelectedAds() {
|
|
if (ad.campaignGroupInfo && ad.campaignGroupInfo.length > 0) {
|
|
if (ad.campaignGroupInfo && ad.campaignGroupInfo.length > 0) {
|
|
ad.campaignGroupInfo.forEach(group => {
|
|
ad.campaignGroupInfo.forEach(group => {
|
|
group.isSelected = true;
|
|
group.isSelected = true;
|
|
- group.targetLength = group.keywordInfo.length;
|
|
|
|
|
|
+ group.targetLength = group.keywordInfo?.length + (group.campaignTargetInfo?.length || 0);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- updateSelectedAds();
|
|
|
|
}
|
|
}
|
|
|
|
+ selectedAds.value.push(...selected.value);
|
|
}
|
|
}
|
|
|
|
|
|
// 获取广告组下拉框
|
|
// 获取广告组下拉框
|