|
@@ -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>
|