|
@@ -42,7 +42,7 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
const [adcreativeTemplateList, setAdcreativeTemplateList] = useState<PULLIN.AdcreativeTemplateList[]>([])
|
|
const [adcreativeTemplateList, setAdcreativeTemplateList] = useState<PULLIN.AdcreativeTemplateList[]>([])
|
|
const [creativeComponents, setCreativeComponents] = useState<any>({})
|
|
const [creativeComponents, setCreativeComponents] = useState<any>({})
|
|
const [isUpdate, setIsUpdate] = useState<boolean>(false)
|
|
const [isUpdate, setIsUpdate] = useState<boolean>(false)
|
|
- const { marketingGoal, marketingAssetOuterSpec, marketingCarrierType, siteSet, wechatPosition } = adgroups
|
|
|
|
|
|
+ const { marketingGoal, marketingAssetOuterSpec, marketingCarrierType, siteSet, wechatPosition, automaticSiteEnabled } = adgroups
|
|
|
|
|
|
const [newMaterialData, setNewMaterialData] = useState<any>({}) // 素材数据
|
|
const [newMaterialData, setNewMaterialData] = useState<any>({}) // 素材数据
|
|
const [newTextData, setNewTextData] = useState<any>({})
|
|
const [newTextData, setNewTextData] = useState<any>({})
|
|
@@ -53,13 +53,22 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
if (deliveryMode === 'DELIVERY_MODE_CUSTOMIZE') { // 自定义创意
|
|
if (deliveryMode === 'DELIVERY_MODE_CUSTOMIZE') { // 自定义创意
|
|
- getCreativeTemplateList.run({ marketingGoal, marketingTargetType: marketingAssetOuterSpec.marketingTargetType, marketingCarrierType, siteSet, wechatSceneSpecPosition: wechatPosition }).then((res: any) => {
|
|
|
|
|
|
+ getCreativeTemplateList.run({
|
|
|
|
+ marketingGoal,
|
|
|
|
+ marketingTargetType: marketingAssetOuterSpec.marketingTargetType,
|
|
|
|
+ marketingCarrierType,
|
|
|
|
+ siteSet,
|
|
|
|
+ wechatSceneSpecPosition: wechatPosition || []
|
|
|
|
+ }).then((res: any) => {
|
|
let newArr: any = []
|
|
let newArr: any = []
|
|
let newData: any[] = []
|
|
let newData: any[] = []
|
|
// 过滤掉相同的和即将下线的
|
|
// 过滤掉相同的和即将下线的
|
|
if (!res) {
|
|
if (!res) {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+ if (automaticSiteEnabled) {
|
|
|
|
+ delete res?.SITE_SET_WECHAT
|
|
|
|
+ }
|
|
let creativeTemplateStyle = ''
|
|
let creativeTemplateStyle = ''
|
|
Object.values(res)?.forEach(arr => {
|
|
Object.values(res)?.forEach(arr => {
|
|
newData.push(arr)
|
|
newData.push(arr)
|
|
@@ -120,7 +129,7 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
} else if (deliveryMode === 'DELIVERY_MODE_COMPONENT') { // 组件化创意
|
|
} else if (deliveryMode === 'DELIVERY_MODE_COMPONENT') { // 组件化创意
|
|
getTemplate()
|
|
getTemplate()
|
|
}
|
|
}
|
|
- }, [deliveryMode, marketingGoal, marketingAssetOuterSpec, marketingCarrierType, siteSet, wechatPosition, value])
|
|
|
|
|
|
+ }, [deliveryMode, marketingGoal, marketingAssetOuterSpec, marketingCarrierType, siteSet, wechatPosition, value, automaticSiteEnabled])
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
if (!(value && Object.keys(value).length > 0) && adcreativeTemplateList?.length > 0 && marketingGoalTypeList?.length > 0) {
|
|
if (!(value && Object.keys(value).length > 0) && adcreativeTemplateList?.length > 0 && marketingGoalTypeList?.length > 0) {
|
|
@@ -143,20 +152,29 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
const getTemplate = (id?: any, isAntTemplateId?: boolean) => {
|
|
const getTemplate = (id?: any, isAntTemplateId?: boolean) => {
|
|
// CAMPAIGN_TYPE_NORMAL
|
|
// CAMPAIGN_TYPE_NORMAL
|
|
if (marketingAssetOuterSpec?.marketingTargetType && deliveryMode) {
|
|
if (marketingAssetOuterSpec?.marketingTargetType && deliveryMode) {
|
|
- getCreativeDetails.run({
|
|
|
|
|
|
+ let params: any = {
|
|
marketingGoal,
|
|
marketingGoal,
|
|
marketingTargetType: marketingAssetOuterSpec.marketingTargetType,
|
|
marketingTargetType: marketingAssetOuterSpec.marketingTargetType,
|
|
marketingCarrierType,
|
|
marketingCarrierType,
|
|
- siteSet: (id === 910 && siteSet?.includes('SITE_SET_MOMENTS')) ? siteSet.filter((item: string) => item !== 'SITE_SET_MOMENTS') : siteSet,
|
|
|
|
deliveryMode,
|
|
deliveryMode,
|
|
creativeTemplateId: id,
|
|
creativeTemplateId: id,
|
|
wechatSceneSpecPosition: wechatPosition,
|
|
wechatSceneSpecPosition: wechatPosition,
|
|
dynamicCreativeType: deliveryMode === 'DELIVERY_MODE_COMPONENT' ? 'DYNAMIC_CREATIVE_TYPE_PROGRAM' : 'DYNAMIC_CREATIVE_TYPE_COMMON'
|
|
dynamicCreativeType: deliveryMode === 'DELIVERY_MODE_COMPONENT' ? 'DYNAMIC_CREATIVE_TYPE_PROGRAM' : 'DYNAMIC_CREATIVE_TYPE_COMMON'
|
|
- }).then(res => {
|
|
|
|
|
|
+ }
|
|
|
|
+ if (automaticSiteEnabled) {
|
|
|
|
+ params.automaticSiteEnabled = automaticSiteEnabled
|
|
|
|
+ } else {
|
|
|
|
+ params.siteSet = siteSet
|
|
|
|
+ }
|
|
|
|
+ getCreativeDetails.run(params).then(res => {
|
|
if (res?.adcreativeTemplateStructAdpermits?.length > 0) {
|
|
if (res?.adcreativeTemplateStructAdpermits?.length > 0) {
|
|
let adcreativeTemplateStructAdpermits = res?.adcreativeTemplateStructAdpermits[0]
|
|
let adcreativeTemplateStructAdpermits = res?.adcreativeTemplateStructAdpermits[0]
|
|
templateChange(adcreativeTemplateStructAdpermits, isAntTemplateId)
|
|
templateChange(adcreativeTemplateStructAdpermits, isAntTemplateId)
|
|
} else {
|
|
} else {
|
|
|
|
+ message.error({
|
|
|
|
+ content: '当前所选营销目的,广告版位下不支持该创意形式。或者无此创意形式权限,请联系相关人员开通白名单',
|
|
|
|
+ duration: 10
|
|
|
|
+ })
|
|
setCreativeComponents({})
|
|
setCreativeComponents({})
|
|
}
|
|
}
|
|
})
|
|
})
|
|
@@ -166,6 +184,7 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
//每次选中创意设置该展示的界面
|
|
//每次选中创意设置该展示的界面
|
|
const templateChange = (adcreativeTemplateStructAdpermits: any, isAntTemplateId?: boolean) => {
|
|
const templateChange = (adcreativeTemplateStructAdpermits: any, isAntTemplateId?: boolean) => {
|
|
let creativeComponents = adcreativeTemplateStructAdpermits?.creativeComponents || []
|
|
let creativeComponents = adcreativeTemplateStructAdpermits?.creativeComponents || []
|
|
|
|
+ let creativeTemplateId = adcreativeTemplateStructAdpermits?.creativeTemplateId
|
|
let creativeTemplateAppellation = adcreativeTemplateStructAdpermits?.creativeTemplateAppellation
|
|
let creativeTemplateAppellation = adcreativeTemplateStructAdpermits?.creativeTemplateAppellation
|
|
let result = processData(creativeComponents);
|
|
let result = processData(creativeComponents);
|
|
console.log(result);
|
|
console.log(result);
|
|
@@ -186,14 +205,14 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
|
|
|
|
setNewMaterialData(newMaterialData)
|
|
setNewMaterialData(newMaterialData)
|
|
setNewTextData(newTextData)
|
|
setNewTextData(newTextData)
|
|
-
|
|
|
|
if (!(value && Object.keys(value).length > 0) || isAntTemplateId) {
|
|
if (!(value && Object.keys(value).length > 0) || isAntTemplateId) {
|
|
let values: any = {
|
|
let values: any = {
|
|
dynamicCreativeName: creativeTemplateAppellation ? '自定义创意' + '_' + creativeTemplateAppellation + '_' + localStorage.getItem('userId') + '_' + randomString(true, 3, 5) : '动态创意' + '_' + localStorage.getItem('userId') + '_' + randomString(true, 3, 5),
|
|
dynamicCreativeName: creativeTemplateAppellation ? '自定义创意' + '_' + creativeTemplateAppellation + '_' + localStorage.getItem('userId') + '_' + randomString(true, 3, 5) : '动态创意' + '_' + localStorage.getItem('userId') + '_' + randomString(true, 3, 5),
|
|
pageSpec: [{
|
|
pageSpec: [{
|
|
pageType: 'PAGE_TYPE_WECHAT_CANVAS',
|
|
pageType: 'PAGE_TYPE_WECHAT_CANVAS',
|
|
overrideCanvasHeadOption: 'OPTION_CREATIVE_OVERRIDE_CANVAS'
|
|
overrideCanvasHeadOption: 'OPTION_CREATIVE_OVERRIDE_CANVAS'
|
|
- }]
|
|
|
|
|
|
+ }],
|
|
|
|
+ brand: undefined
|
|
}
|
|
}
|
|
Object.keys(result).forEach(key => {
|
|
Object.keys(result).forEach(key => {
|
|
switch (key) {
|
|
switch (key) {
|
|
@@ -236,6 +255,10 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
break
|
|
break
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
+ if ([1707, 1708].includes(creativeTemplateId)) {
|
|
|
|
+ delete values?.actionButtonShow
|
|
|
|
+ values.cardType = ['not']
|
|
|
|
+ }
|
|
form.setFieldsValue(values)
|
|
form.setFieldsValue(values)
|
|
setTimeout(() => { setIsUpdate(true) }, 50)
|
|
setTimeout(() => { setIsUpdate(true) }, 50)
|
|
}
|
|
}
|
|
@@ -252,6 +275,7 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
textLinkShow,
|
|
textLinkShow,
|
|
textLink,
|
|
textLink,
|
|
actionButtonShow,
|
|
actionButtonShow,
|
|
|
|
+ cardType,
|
|
actionButton,
|
|
actionButton,
|
|
showDataShow,
|
|
showDataShow,
|
|
showData,
|
|
showData,
|
|
@@ -264,7 +288,12 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
|
|
|
|
let creativeComponents: any = {}
|
|
let creativeComponents: any = {}
|
|
|
|
|
|
|
|
+ let actionButtonJumpInfo = {
|
|
|
|
+ pageType: undefined
|
|
|
|
+ }
|
|
if (pageSpec?.length > 0) {
|
|
if (pageSpec?.length > 0) {
|
|
|
|
+ let { pageType } = pageSpec?.[0]
|
|
|
|
+ actionButtonJumpInfo.pageType = pageType
|
|
creativeComponents.mainJumpInfo = pageSpec.map((item: { pageType: string, overrideCanvasHeadOption: string, }) => {
|
|
creativeComponents.mainJumpInfo = pageSpec.map((item: { pageType: string, overrideCanvasHeadOption: string, }) => {
|
|
return {
|
|
return {
|
|
value: {
|
|
value: {
|
|
@@ -280,13 +309,16 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
|
|
- // 这边没有闪屏视频逻辑
|
|
|
|
|
|
+ // 品牌形象
|
|
if (jumpInfo) {
|
|
if (jumpInfo) {
|
|
let pageType = jumpInfo.pageType
|
|
let pageType = jumpInfo.pageType
|
|
|
|
+ console.log('pageType-->', pageType)
|
|
let value = {
|
|
let value = {
|
|
jumpInfo
|
|
jumpInfo
|
|
}
|
|
}
|
|
- if (['PAGE_TYPE_H5_PROFILE', "PAGE_TYPE_NOT_USED"].includes(pageType)) {
|
|
|
|
|
|
+ if (['PAGE_TYPE_H5_PROFILE'].includes(pageType)) {
|
|
|
|
+ value['profileId'] = brand
|
|
|
|
+ } else if (["PAGE_TYPE_NOT_USED"].includes(pageType)) {
|
|
let [brandName, brandImageId] = brand.split('_')
|
|
let [brandName, brandImageId] = brand.split('_')
|
|
value['brandName'] = brandName
|
|
value['brandName'] = brandName
|
|
value['brandImageId'] = brandImageId
|
|
value['brandImageId'] = brandImageId
|
|
@@ -294,12 +326,22 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
value['brandName'] = null
|
|
value['brandName'] = null
|
|
value['brandImageId'] = null
|
|
value['brandImageId'] = null
|
|
}
|
|
}
|
|
- // 处理落地页类型相关
|
|
|
|
- let { pageType: pageSpecPageType, overrideCanvasHeadOption } = pageSpec?.[0]
|
|
|
|
|
|
+
|
|
let pageSpecData: any = {}
|
|
let pageSpecData: any = {}
|
|
- pageSpecData[pageSpecFieldConVert[pageSpecPageType]] = {
|
|
|
|
- pageId: null,
|
|
|
|
- overrideCanvasHeadOption
|
|
|
|
|
|
+
|
|
|
|
+ if (pageType === 'PAGE_TYPE_H5_PROFILE') {
|
|
|
|
+ pageSpecData[pageSpecFieldConVert[pageType]] = {
|
|
|
|
+ pageId: null
|
|
|
|
+ }
|
|
|
|
+ } else if (pageType === 'PAGE_TYPE_H5') {
|
|
|
|
+ pageSpecData[pageSpecFieldConVert[pageType]] = {
|
|
|
|
+ pageUrl: null,
|
|
|
|
+ mpaH5WildcardUrl: null
|
|
|
|
+ }
|
|
|
|
+ } else if (pageType === 'PAGE_TYPE_WECHAT_OFFICIAL_ACCOUNT_DETAIL') {
|
|
|
|
+ pageSpecData[pageSpecFieldConVert[pageType]] = {
|
|
|
|
+ appId: null
|
|
|
|
+ }
|
|
}
|
|
}
|
|
value.jumpInfo = {
|
|
value.jumpInfo = {
|
|
...value.jumpInfo,
|
|
...value.jumpInfo,
|
|
@@ -314,8 +356,18 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
}
|
|
}
|
|
|
|
|
|
// 行动按钮
|
|
// 行动按钮
|
|
- if (actionButtonShow) {
|
|
|
|
- creativeComponents.actionButton = [actionButton]
|
|
|
|
|
|
+ if (actionButton && Object.keys(actionButton).length > 0) {
|
|
|
|
+ let newActionButton = [actionButton]
|
|
|
|
+ if (!actionButton.value?.jumpInfo) {
|
|
|
|
+ newActionButton = [{
|
|
|
|
+ ...actionButton,
|
|
|
|
+ value: {
|
|
|
|
+ ...actionButton.value,
|
|
|
|
+ jumpInfo: actionButtonJumpInfo
|
|
|
|
+ }
|
|
|
|
+ }]
|
|
|
|
+ }
|
|
|
|
+ creativeComponents.actionButton = newActionButton
|
|
}
|
|
}
|
|
|
|
|
|
// 数据外显
|
|
// 数据外显
|
|
@@ -337,40 +389,47 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
brand,
|
|
brand,
|
|
textLink,
|
|
textLink,
|
|
actionButton,
|
|
actionButton,
|
|
- showData
|
|
|
|
|
|
+ showData,
|
|
|
|
+ mainJumpInfo,
|
|
},
|
|
},
|
|
...surplusValues
|
|
...surplusValues
|
|
} = JSON.parse(JSON.stringify(value))
|
|
} = JSON.parse(JSON.stringify(value))
|
|
let dynamicValues: any = {
|
|
let dynamicValues: any = {
|
|
...surplusValues
|
|
...surplusValues
|
|
}
|
|
}
|
|
|
|
+ // 卡片广告
|
|
|
|
+ let isCardDynamic = dynamicValues?.creativeTemplateId && [1707, 1708].includes(dynamicValues.creativeTemplateId)
|
|
|
|
+ let cardType: string[] = []
|
|
|
|
|
|
// 529 闪屏视频 没有品牌 要单独处理
|
|
// 529 闪屏视频 没有品牌 要单独处理
|
|
if (brand && brand?.length > 0) {
|
|
if (brand && brand?.length > 0) {
|
|
- let { jumpInfo, brandName, brandImageId } = brand[0].value
|
|
|
|
|
|
+ let { jumpInfo, brandName, brandImageId, profileId } = brand[0].value
|
|
if (jumpInfo) {
|
|
if (jumpInfo) {
|
|
- let {
|
|
|
|
- pageSpec,
|
|
|
|
- pageType
|
|
|
|
- } = jumpInfo
|
|
|
|
- dynamicValues.jumpInfo = {
|
|
|
|
- pageType
|
|
|
|
- }
|
|
|
|
- let key = Object.keys(pageSpec)[0]
|
|
|
|
- let pageSpecValue = pageSpec[key]
|
|
|
|
- dynamicValues.pageSpec = Array(brand.length).fill('').map(() => ({ ...pageSpecValue, pageType: pageSpecFieldConVertUn[key] }))
|
|
|
|
|
|
+ let { pageType } = jumpInfo
|
|
|
|
+ dynamicValues.jumpInfo = { pageType }
|
|
}
|
|
}
|
|
if (brandName && brandImageId) {
|
|
if (brandName && brandImageId) {
|
|
dynamicValues.brand = brandName + '_' + brandImageId
|
|
dynamicValues.brand = brandName + '_' + brandImageId
|
|
|
|
+ } else if (profileId) {
|
|
|
|
+ dynamicValues.brand = profileId
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (mainJumpInfo && mainJumpInfo?.length > 0) {
|
|
|
|
+ dynamicValues.pageSpec = mainJumpInfo.map((item: any) => {
|
|
|
|
+ let { pageSpec } = item.value
|
|
|
|
+ let key = Object.keys(pageSpec)[0]
|
|
|
|
+ let pageSpecValue = pageSpec[key]
|
|
|
|
+ return { ...pageSpecValue, pageType: pageSpecFieldConVertUn[key] }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
// 文字链
|
|
// 文字链
|
|
if (textLink && textLink?.length > 0) {
|
|
if (textLink && textLink?.length > 0) {
|
|
dynamicValues = {
|
|
dynamicValues = {
|
|
...dynamicValues,
|
|
...dynamicValues,
|
|
textLinkShow: true,
|
|
textLinkShow: true,
|
|
- textLink
|
|
|
|
|
|
+ textLink: textLink[0]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -381,6 +440,10 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
actionButtonShow: true,
|
|
actionButtonShow: true,
|
|
actionButton: actionButton[0]
|
|
actionButton: actionButton[0]
|
|
}
|
|
}
|
|
|
|
+ if (isCardDynamic) {
|
|
|
|
+ cardType.push('action_button')
|
|
|
|
+ delete dynamicValues.actionButtonShow
|
|
|
|
+ }
|
|
}
|
|
}
|
|
// 数据外显
|
|
// 数据外显
|
|
if (showData && showData?.length > 0) {
|
|
if (showData && showData?.length > 0) {
|
|
@@ -390,6 +453,11 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
showData: showData[0]
|
|
showData: showData[0]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (cardType.length === 0 && isCardDynamic) {
|
|
|
|
+ cardType = ['not']
|
|
|
|
+ }
|
|
|
|
+ dynamicValues.cardType = cardType
|
|
dynamicValues.creativeTemplateStyle = oldCreativeTemplateStyle === '视频' ? 'video' : 'image'
|
|
dynamicValues.creativeTemplateStyle = oldCreativeTemplateStyle === '视频' ? 'video' : 'image'
|
|
form.setFieldsValue({ ...dynamicValues })
|
|
form.setFieldsValue({ ...dynamicValues })
|
|
}
|
|
}
|
|
@@ -453,9 +521,9 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
|
|
|
|
|
|
{Object.keys(creativeComponents).length > 0 && <>
|
|
{Object.keys(creativeComponents).length > 0 && <>
|
|
{/* 创意内容 */}
|
|
{/* 创意内容 */}
|
|
- <CreativeTemplateContent />
|
|
|
|
|
|
+ <CreativeTemplateContent automaticSiteEnabled={automaticSiteEnabled}/>
|
|
{/* 营销组件 */}
|
|
{/* 营销组件 */}
|
|
- <CreativeConversionAssistant />
|
|
|
|
|
|
+ <CreativeConversionAssistant automaticSiteEnabled={automaticSiteEnabled} />
|
|
{/* 创意设置 */}
|
|
{/* 创意设置 */}
|
|
<CreativeTemplateSetup />
|
|
<CreativeTemplateSetup />
|
|
</>}
|
|
</>}
|