|
@@ -174,11 +174,10 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
|
|
|
|
let newTableData: any = {}, newDynamicCount = 0
|
|
|
|
|
|
- let textType = dynamicCreativesTextDTOS.type
|
|
|
- let textDto = dynamicCreativesTextDTOS?.dynamicCreativesTextDetailDTOList || []
|
|
|
- let textDtoLenth = textDto.length
|
|
|
- let dynamicGroupLength = dynamicMaterialDTos?.dynamicGroup?.length || 0
|
|
|
-
|
|
|
+ const textType = dynamicCreativesTextDTOS.type
|
|
|
+ const textDto = dynamicCreativesTextDTOS?.dynamicCreativesTextDetailDTOList || []
|
|
|
+ const textDtoLenth = textDto.length
|
|
|
+ const dynamicGroupLength = dynamicMaterialDTos?.dynamicGroup?.length || 0
|
|
|
let newDynamicGroup: any = []
|
|
|
if (![910].includes(dynamic.creativeTemplateId)) {
|
|
|
newDynamicGroup = dynamicMaterialDTos?.dynamicGroup || []
|
|
@@ -189,7 +188,7 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
|
newDynamicGroup = newDynamicGroup.map((item: any, index: number) => ({ ...item, textDto: textDto?.[index] }))
|
|
|
} else if (textType === 2) {
|
|
|
newDynamicGroup = newDynamicGroup.map((item: any, index: number) => ({ ...item, textDto: textDto?.[index % textDtoLenth] }))
|
|
|
- } else if ((textType === 3 && mediaType === 0) || (textType === 4 && mediaType === 1)) {
|
|
|
+ } else if ((textType === 3 && mediaType === 0) || (textType === 4 && mediaType === 1) || (textType === 4 && mediaType === 3)) {
|
|
|
newDynamicGroup = cartesianProduct(newDynamicGroup, textDto || [{}]).map((item) => {
|
|
|
let [dynamicGroup, textDtoData] = item
|
|
|
return {
|
|
@@ -203,7 +202,7 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
|
|
|
|
// 创意组平均分配到广告逻辑
|
|
|
let averageAdDynamicList: any[] = []
|
|
|
- if ((mediaType === 1 || mediaType === 2) && newDynamicGroup.length) {
|
|
|
+ if ((mediaType === 1 || mediaType === 2 || mediaType === 3) && newDynamicGroup.length) {
|
|
|
let adLength = adData.length
|
|
|
if (mediaType === 1) {
|
|
|
if (textType === 4) {
|
|
@@ -224,6 +223,18 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
|
message.error(`创意组分配规则选择“顺序分配到广告”时,创意组总数必须小于等于广告总数。当前创意组数量:${dynamicGroupLength},广告数量:${adLength}`)
|
|
|
return
|
|
|
}
|
|
|
+ } else if (mediaType === 3) {
|
|
|
+ const dynamicDataLength = textType === 4 ? newDynamicGroup.length : dynamicGroupLength
|
|
|
+ if (Object.keys(adDataGroup).some(key => {
|
|
|
+ const adLength = adDataGroup[key as any].length
|
|
|
+ if (adLength > dynamicDataLength) {
|
|
|
+ message.error(`创意组分配规则选择“账号下平均分配到广告”时,创意组总数必须大于等于每个账号广告总数。当前创意组数量:${dynamicDataLength},当前账号(${key})下广告数量:${adLength}`)
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ return false
|
|
|
+ })) {
|
|
|
+ return
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
// 落地页平均分配判断数量
|
|
@@ -283,110 +294,128 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
|
newDynamicCount += item.pageList.length
|
|
|
})
|
|
|
} else {
|
|
|
- adData.forEach((ad, index) => {
|
|
|
- let item = accountCreateLogs.find(a => a.accountId === ad.accountId) as PULLIN.AccountCreateLogsProps
|
|
|
- let averageAdDynamic = averageAdDynamicList?.[index]
|
|
|
- let data = [{
|
|
|
- id: ad.adgroupId + '_' + index,
|
|
|
- pageListDto: item.pageList, // 落地页
|
|
|
- adgroupsDto: ad,
|
|
|
- dynamicDto: dynamic, // 创意信息
|
|
|
- averageAdDynamic,
|
|
|
- rowSpan: (mediaType === 1 && textType !== 4) ? averageAdDynamic.length : ([910].includes(dynamic.creativeTemplateId) ? item.pageList?.length : (textType === 3 ? textDtoLenth * dynamicGroupLength : dynamicGroupLength)) || 1
|
|
|
- }]
|
|
|
-
|
|
|
- let newData: any[] = []
|
|
|
- if ([910].includes(dynamic.creativeTemplateId)) {
|
|
|
- newData = cartesianProduct(data, item.pageList).map((item, index) => {
|
|
|
- let [d1, pageList, num] = item
|
|
|
- return {
|
|
|
- ...d1,
|
|
|
- id: d1.id + '_' + index,
|
|
|
- pageListDto: [pageList],
|
|
|
- dynamicDto: {
|
|
|
- ...d1.dynamicDto,
|
|
|
- dynamicCreativeName: d1.dynamicDto.dynamicCreativeName + num
|
|
|
+ const handleDynamic = (adData: any[], averageAdDynamicList: any[]) => {
|
|
|
+ adData.forEach((ad, index) => {
|
|
|
+ let item = accountCreateLogs.find(a => a.accountId === ad.accountId) as PULLIN.AccountCreateLogsProps
|
|
|
+ let averageAdDynamic = averageAdDynamicList?.[index]
|
|
|
+ let data = [{
|
|
|
+ id: ad.adgroupId + '_' + index,
|
|
|
+ pageListDto: item.pageList, // 落地页
|
|
|
+ adgroupsDto: ad,
|
|
|
+ dynamicDto: dynamic, // 创意信息
|
|
|
+ averageAdDynamic,
|
|
|
+ rowSpan: ((mediaType === 1 || mediaType === 3) && textType !== 4) ? averageAdDynamic.length : ([910].includes(dynamic.creativeTemplateId) ? item.pageList?.length : (textType === 3 ? textDtoLenth * dynamicGroupLength : dynamicGroupLength)) || 1
|
|
|
+ }]
|
|
|
+
|
|
|
+ let newData: any[] = []
|
|
|
+ if ([910].includes(dynamic.creativeTemplateId)) {
|
|
|
+ newData = cartesianProduct(data, item.pageList).map((item, index) => {
|
|
|
+ let [d1, pageList, num] = item
|
|
|
+ return {
|
|
|
+ ...d1,
|
|
|
+ id: d1.id + '_' + index,
|
|
|
+ pageListDto: [pageList],
|
|
|
+ dynamicDto: {
|
|
|
+ ...d1.dynamicDto,
|
|
|
+ dynamicCreativeName: d1.dynamicDto.dynamicCreativeName + num
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- })
|
|
|
- } else {
|
|
|
- if (mediaType === 1) {
|
|
|
- data.forEach(item => {
|
|
|
- const { averageAdDynamic, ...ad } = item
|
|
|
- if (textType === 3) {
|
|
|
- let rowSpan = textDtoLenth * averageAdDynamic.length
|
|
|
- cartesianProduct(textDto, averageAdDynamic).forEach((taad: any, index) => {
|
|
|
- let [textValue, aad] = taad
|
|
|
- newData.push({
|
|
|
- ...ad,
|
|
|
- id: ad.id + '_' + index,
|
|
|
- dynamicGroup: aad,
|
|
|
- textDto: textValue,
|
|
|
- rowSpan
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ if (mediaType === 1 || mediaType === 3) {
|
|
|
+ data.forEach(item => {
|
|
|
+ const { averageAdDynamic, ...ad } = item
|
|
|
+ if (textType === 3) {
|
|
|
+ let rowSpan = textDtoLenth * averageAdDynamic.length
|
|
|
+ cartesianProduct(textDto, averageAdDynamic).forEach((taad: any, index) => {
|
|
|
+ let [textValue, aad] = taad
|
|
|
+ newData.push({
|
|
|
+ ...ad,
|
|
|
+ id: ad.id + '_' + index,
|
|
|
+ dynamicGroup: aad,
|
|
|
+ textDto: textValue,
|
|
|
+ rowSpan
|
|
|
+ })
|
|
|
})
|
|
|
- })
|
|
|
- } else if (textType === 4) {
|
|
|
- averageAdDynamic.forEach((aad: any, index: number) => {
|
|
|
- newData.push({
|
|
|
- ...ad,
|
|
|
- id: ad.id + '_' + index,
|
|
|
- dynamicGroup: aad,
|
|
|
- textDto: aad?.textDto,
|
|
|
- rowSpan: index === 0 ? averageAdDynamic.length : 0,
|
|
|
- isRowSpan: true
|
|
|
+ } else if (textType === 4) {
|
|
|
+ averageAdDynamic.forEach((aad: any, index: number) => {
|
|
|
+ newData.push({
|
|
|
+ ...ad,
|
|
|
+ id: ad.id + '_' + index,
|
|
|
+ dynamicGroup: aad,
|
|
|
+ textDto: aad?.textDto,
|
|
|
+ rowSpan: index === 0 ? averageAdDynamic.length : 0,
|
|
|
+ isRowSpan: true
|
|
|
+ })
|
|
|
})
|
|
|
- })
|
|
|
- } else {
|
|
|
- averageAdDynamic.forEach((aad: any, index: number) => {
|
|
|
- newData.push({
|
|
|
- ...ad,
|
|
|
- id: ad.id + '_' + index,
|
|
|
- dynamicGroup: aad,
|
|
|
- textDto: aad?.textDto
|
|
|
+ } else {
|
|
|
+ averageAdDynamic.forEach((aad: any, index: number) => {
|
|
|
+ newData.push({
|
|
|
+ ...ad,
|
|
|
+ id: ad.id + '_' + index,
|
|
|
+ dynamicGroup: aad,
|
|
|
+ textDto: aad?.textDto
|
|
|
+ })
|
|
|
})
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
- } else if (mediaType === 2) {
|
|
|
- data.forEach((item) => {
|
|
|
- const { averageAdDynamic, ...ad } = item
|
|
|
- if (textType === 3) {
|
|
|
- cartesianProduct(textDto, [newDynamicGroup[accountIndex1 % newDynamicGroup.length]]).forEach((taad: any) => {
|
|
|
- let [textValue, aad, index] = taad
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else if (mediaType === 2) {
|
|
|
+ data.forEach((item) => {
|
|
|
+ const { averageAdDynamic, ...ad } = item
|
|
|
+ if (textType === 3) {
|
|
|
+ cartesianProduct(textDto, [newDynamicGroup[accountIndex1 % newDynamicGroup.length]]).forEach((taad: any) => {
|
|
|
+ let [textValue, aad, index] = taad
|
|
|
+ newData.push({
|
|
|
+ ...ad,
|
|
|
+ id: ad.id + '_' + index,
|
|
|
+ dynamicGroup: aad,
|
|
|
+ textDto: textValue,
|
|
|
+ rowSpan: textDto.length
|
|
|
+ })
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ let { textDto, ...dynamicGroup } = newDynamicGroup[accountIndex1 % newDynamicGroup.length]
|
|
|
newData.push({
|
|
|
...ad,
|
|
|
- id: ad.id + '_' + index,
|
|
|
- dynamicGroup: aad,
|
|
|
- textDto: textValue,
|
|
|
- rowSpan: textDto.length
|
|
|
+ dynamicGroup,
|
|
|
+ textDto,
|
|
|
+ rowSpan: 1
|
|
|
})
|
|
|
- })
|
|
|
- } else {
|
|
|
- let { textDto, ...dynamicGroup } = newDynamicGroup[accountIndex1 % newDynamicGroup.length]
|
|
|
- newData.push({
|
|
|
- ...ad,
|
|
|
- dynamicGroup,
|
|
|
- textDto,
|
|
|
- rowSpan: 1
|
|
|
- })
|
|
|
- }
|
|
|
- accountIndex1 += 1
|
|
|
- })
|
|
|
+ }
|
|
|
+ accountIndex1 += 1
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ newData = cartesianProduct(data, newDynamicGroup.length > 0 ? newDynamicGroup : [{}]).map((item, index) => {
|
|
|
+ let [d1, group] = item
|
|
|
+ return {
|
|
|
+ ...d1,
|
|
|
+ id: d1.id + '_' + index,
|
|
|
+ dynamicGroup: group,
|
|
|
+ textDto: (group as any)?.textDto
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ newDynamicCount += newData.length
|
|
|
+ newTableData[ad.adgroupId] = newData
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (mediaType === 3) {
|
|
|
+ Object.keys(adDataGroup).forEach(key => {
|
|
|
+ const newAdData = adDataGroup[key as any]
|
|
|
+ const adLength = newAdData.length
|
|
|
+ if (textType === 4) {
|
|
|
+ averageAdDynamicList = splitArrayIntoRandomChunks(newDynamicGroup, adLength)
|
|
|
} else {
|
|
|
- newData = cartesianProduct(data, newDynamicGroup.length > 0 ? newDynamicGroup : [{}]).map((item, index) => {
|
|
|
- let [d1, group] = item
|
|
|
- return {
|
|
|
- ...d1,
|
|
|
- id: d1.id + '_' + index,
|
|
|
- dynamicGroup: group,
|
|
|
- textDto: (group as any)?.textDto
|
|
|
- }
|
|
|
- })
|
|
|
+ averageAdDynamicList = distributeArray(newDynamicGroup, adLength)
|
|
|
}
|
|
|
- }
|
|
|
- newDynamicCount += newData.length
|
|
|
- newTableData[ad.adgroupId] = newData
|
|
|
- })
|
|
|
+ handleDynamic(newAdData, averageAdDynamicList)
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ handleDynamic(adData, averageAdDynamicList)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
setDynamicCount(newDynamicCount)
|