Ver Fonte

Merge branch 'develop' of http://git.zanxiangnet.com/wjx/ad-manage

wjx há 5 meses atrás
pai
commit
18e7b25158

+ 18 - 6
src/pages/launchSystemV3/tencentAdPutIn/create/Dynamic/newDynamic.tsx

@@ -1,4 +1,4 @@
-import { Button, Card, Form, Modal, Radio, Space, Spin, message } from "antd"
+import { Button, Card, Form, Modal, Radio, Space, Spin, Switch, Typography, message } from "antd"
 import React, { useContext, useEffect, useState } from "react"
 import '../../index.less'
 import { getCreativeDetailsApi, getCreativeTemplateListApi } from "@/services/adqV3/global";
@@ -12,7 +12,7 @@ import { processData, randomString } from "@/utils/utils";
 import CreativeTemplateContent from "./creativeTemplateContent";
 import CreativeConversionAssistant from "./creativeConversionAssistant";
 import CreativeTemplateSetup from "./creativeTemplateSetup";
-
+const { Text } = Typography;
 
 export const DispatchDynamic = React.createContext<PULLIN.DynamicReactContent | null>(null);
 
@@ -38,6 +38,7 @@ const NewDynamic: React.FC<Props> = ({ putInType, value: newValue, visible, onCl
     const [form] = Form.useForm();
     const creativeTemplateStyle = Form.useWatch('creativeTemplateStyle', form);
     const deliveryMode = Form.useWatch('deliveryMode', form);
+    const dynamicCreativeSwitch = Form.useWatch('dynamicCreativeSwitch', form);
 
     const [marketingGoalTypeList, setMarketingGoalTypeList] = useState<PULLIN.DataType[]>([])
     const [adcreativeTemplateList, setAdcreativeTemplateList] = useState<PULLIN.AdcreativeTemplateList[]>([])
@@ -55,7 +56,7 @@ const NewDynamic: React.FC<Props> = ({ putInType, value: newValue, visible, onCl
     /**********************************/
 
     useEffect(() => {
-        if (deliveryMode === 'DELIVERY_MODE_CUSTOMIZE') { // 自定义创意
+        if (deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' || dynamicCreativeSwitch) { // 自定义创意
             let params: any = {
                 marketingGoal,
                 marketingTargetType: marketingAssetOuterSpec.marketingTargetType,
@@ -141,7 +142,7 @@ const NewDynamic: React.FC<Props> = ({ putInType, value: newValue, visible, onCl
         } else if (deliveryMode === 'DELIVERY_MODE_COMPONENT') {  // 组件化创意
             getTemplate()
         }
-    }, [deliveryMode, marketingGoal, marketingAssetOuterSpec, marketingCarrierType, siteSet, sceneSpec?.wechatPosition, value, automaticSiteEnabled, putInType])
+    }, [deliveryMode, dynamicCreativeSwitch, marketingGoal, marketingAssetOuterSpec, marketingCarrierType, siteSet, sceneSpec?.wechatPosition, value, automaticSiteEnabled, putInType])
 
     useEffect(() => {
         if (!(value && Object.keys(value).length > 0) && adcreativeTemplateList?.length > 0 && marketingGoalTypeList?.length > 0) {
@@ -171,7 +172,7 @@ const NewDynamic: React.FC<Props> = ({ putInType, value: newValue, visible, onCl
                 deliveryMode,
                 creativeTemplateId: id,
                 wechatSceneSpecPosition: sceneSpec?.wechatPosition,
-                dynamicCreativeType: deliveryMode === 'DELIVERY_MODE_COMPONENT' ? 'DYNAMIC_CREATIVE_TYPE_PROGRAM' : 'DYNAMIC_CREATIVE_TYPE_COMMON'
+                dynamicCreativeType: (deliveryMode === 'DELIVERY_MODE_COMPONENT' && !dynamicCreativeSwitch) ? 'DYNAMIC_CREATIVE_TYPE_PROGRAM' : 'DYNAMIC_CREATIVE_TYPE_COMMON'
             }
             if (automaticSiteEnabled) {
                 params.automaticSiteEnabled = automaticSiteEnabled
@@ -653,6 +654,17 @@ const NewDynamic: React.FC<Props> = ({ putInType, value: newValue, visible, onCl
                         <Card
                             title={<strong style={{ fontSize: 18 }}>创意形式</strong>}
                             className="cardResetCss"
+                            extra={deliveryMode === 'DELIVERY_MODE_COMPONENT' ? <Space>
+                                <Form.Item name="dynamicCreativeSwitch" valuePropName="checked" className="formItemResetCss" style={{ marginBottom: 0 }}>
+                                    <Switch size="small" onChange={(checked) => {
+                                        if (checked) {
+                                            setTimeout(() => { setIsUpdate(true) }, 50)
+                                            setValue(undefined)
+                                        }
+                                    }} />
+                                </Form.Item>
+                                <div style={{ paddingTop: 2 }}><Text style={{ fontSize: 12 }}>指定创意形式</Text></div>
+                            </Space> : null}
                         >
                             <Form.Item name="deliveryMode" label={<strong>投放模式</strong>} rules={[{ required: true, message: '请选择投放模式!' }]}>
                                 <Radio.Group onChange={() => {
@@ -662,7 +674,7 @@ const NewDynamic: React.FC<Props> = ({ putInType, value: newValue, visible, onCl
                                     {Object.keys(DELIVERY_MODE_ENUM).map(key => <Radio value={key} key={key}>{DELIVERY_MODE_ENUM[key as keyof typeof DELIVERY_MODE_ENUM]}</Radio>)}
                                 </Radio.Group>
                             </Form.Item>
-                            {deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' && <>
+                            {(deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' || dynamicCreativeSwitch) && <>
                                 <Form.Item name="creativeTemplateStyle" label={<strong>创意形式类型</strong>} rules={[{ required: true, message: '请选择营销目的!' }]}>
                                     <New1Radio data={marketingGoalTypeList} onChange={(e) => { typeChange(e === 'video' ? '视频' : '图片', true); }} />
                                 </Form.Item>

+ 7 - 6
src/pages/launchSystemV3/tencentAdPutIn/create/Material/addMaterial.tsx

@@ -13,6 +13,7 @@ interface Props {
     creativeTemplateId: number
     materialData: any
     deliveryMode: string,
+    dynamicCreativeSwitch?: boolean
     value?: any,
     visible?: boolean
     onClose?: () => void
@@ -21,7 +22,7 @@ interface Props {
     putInType?: 'NOVEL' | 'GAME'
 }
 
-const AddMaterial: React.FC<Props> = ({ creativeTemplateId, materialData, deliveryMode, visible, value, onChange, onClose, adLength, accountCreateLogs, putInType }) => {
+const AddMaterial: React.FC<Props> = ({ creativeTemplateId, materialData, deliveryMode, dynamicCreativeSwitch, visible, value, onChange, onClose, adLength, accountCreateLogs, putInType }) => {
 
     /*********************************/
     const [form] = Form.useForm();
@@ -176,7 +177,7 @@ const AddMaterial: React.FC<Props> = ({ creativeTemplateId, materialData, delive
     return <Modal
         title={<Space>
             <strong style={{ fontSize: 20 }}>创意素材</strong>
-            {deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' ? <>
+            {(deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' || dynamicCreativeSwitch) ? <>
                 {videoUploads && Object.keys(videoUploads)?.length > 0 && <Button type="link" onClick={() => {
                     setSelectCloudData({ defaultParams: { sizeQueries: creativeTemplateId === 1708 ? [{ relation: '>=', width: 1280, height: 720 }] : [{ relation: '>=', width: videoUploads.restriction.videoRestriction.minWidth, height: videoUploads.restriction.videoRestriction.minHeight }], fileSize: videoUploads.restriction.videoRestriction.fileSize * 1024, materialType: 'video' }, num: 100 })
                     setMaterialConfig({
@@ -313,7 +314,7 @@ const AddMaterial: React.FC<Props> = ({ creativeTemplateId, materialData, delive
                         {fields.map((field, num) => (<Card
                             title={<Space>
                                 <strong style={{ fontSize: 18 }}>创意组{num + 1}</strong>
-                                {deliveryMode === 'DELIVERY_MODE_COMPONENT' && <>
+                                {(deliveryMode === 'DELIVERY_MODE_COMPONENT' && !dynamicCreativeSwitch) && <>
                                     <Dropdown
                                         menu={{
                                             items: [
@@ -401,10 +402,10 @@ const AddMaterial: React.FC<Props> = ({ creativeTemplateId, materialData, delive
                             </Space>}
                             className="cardResetCss"
                             key={field.key}
-                            style={{ width: deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' ? ([641, 642, 643, 720, 721, 722, 1529, 618].includes(creativeTemplateId) || dynamicGroup?.length === 1) ? '100%' : 'calc(50% - 5px)' : '100%' }}
+                            style={{ width: (deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' || dynamicCreativeSwitch) ? ([641, 642, 643, 720, 721, 722, 1529, 618].includes(creativeTemplateId) || dynamicGroup?.length === 1) ? '100%' : 'calc(50% - 5px)' : '100%' }}
                             extra={fields?.length > 1 && <DeleteOutlined className={styles.clear} onClick={() => remove(field.name)} style={{ color: 'red' }} />}
                         >
-                            {deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' ? <Space size={30} style={{ width: '100%' }} className={styles.space}>
+                            {(deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' || dynamicCreativeSwitch) ? <Space size={30} style={{ width: '100%' }} className={styles.space}>
                                 {Object.keys(materialData)?.map(key => {
                                     let m = materialData[key]
                                     let children = m.children
@@ -632,7 +633,7 @@ const AddMaterial: React.FC<Props> = ({ creativeTemplateId, materialData, delive
             putInType={putInType}
             onChange={(content: any) => {
                 if (content.length > 0) {
-                    if (deliveryMode === 'DELIVERY_MODE_COMPONENT') { // 组件化创意
+                    if (deliveryMode === 'DELIVERY_MODE_COMPONENT' && !dynamicCreativeSwitch) { // 组件化创意
                         if (materialConfig.index === 20000) {
                             if (materialConfig.isGroup) {
 

+ 4 - 3
src/pages/launchSystemV3/tencentAdPutIn/create/Material/index.tsx

@@ -15,7 +15,7 @@ const Material: React.FC<{ adData?: any[] }> = ({ adData }) => {
     /***************************************/
     const { materialData, addelivery, setAddelivery, clearData, accountCreateLogs, putInType } = useContext(DispatchAddelivery)!;
     const { dynamic, dynamicMaterialDTos, mediaType, targeting, adgroups: { marketingAssetOuterSpec, marketingCarrierType }, dynamicCreativesTextDTOS } = addelivery
-    const { creativeTemplateId, deliveryMode } = dynamic
+    const { creativeTemplateId, deliveryMode, dynamicCreativeSwitch } = dynamic
     const [adLength, setAdLength] = useState<number>(0)
 
     const [newVisible, setNewVisible] = useState<boolean>(false)
@@ -118,8 +118,8 @@ const Material: React.FC<{ adData?: any[] }> = ({ adData }) => {
                         <Title level={5} style={{ fontSize: 12 }}>{mediaType === 0 ? '全账号复用' : mediaType === 1 ? '平均分配到广告' : mediaType === 2 ? '顺序分配到广告' : mediaType === 3 ? '账号下平均分配到广告' : null}</Title>
                         <div className={style.detail_body_m}>
                             {dynamicMaterialDTos.dynamicGroup.map((item: any, index: number) => {
-                                if (deliveryMode === 'DELIVERY_MODE_CUSTOMIZE') {
-                                    return <div key={index} style={{ width: deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' ? [641, 642, 643, 2277].includes(creativeTemplateId) ? '100%' : [720, 721, 722, 1529, 618].includes(creativeTemplateId) ? '50%' : '25%' : '100%' }}>
+                                if (deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' || dynamicCreativeSwitch) {
+                                    return <div key={index} style={{ width: (deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' || dynamicCreativeSwitch) ? [641, 642, 643, 2277].includes(creativeTemplateId) ? '100%' : [720, 721, 722, 1529, 618].includes(creativeTemplateId) ? '50%' : '25%' : '100%' }}>
                                         <Title level={5} style={{ fontSize: 12 }}>创意组{index + 1}</Title>
                                         {mType ? ['short_video', 'video'].includes(mType) ? <div className={style.video}>
                                             <VideoNews src={item?.video_id?.url || item?.short_video1?.url} keyFrameImageUrl={item?.video_id?.keyFrameImageUrl || item?.short_video1?.keyFrameImageUrl} />
@@ -216,6 +216,7 @@ const Material: React.FC<{ adData?: any[] }> = ({ adData }) => {
             value={{ dynamicMaterialDTos, mediaType }}
             materialData={materialData}
             deliveryMode={deliveryMode}
+            dynamicCreativeSwitch={dynamicCreativeSwitch}
             visible={newVisible}
             onClose={() => {
                 setNewVisible(false)

+ 13 - 9
src/pages/launchSystemV3/tencentAdPutIn/create/addDynamic.tsx

@@ -28,7 +28,7 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
     const [addelivery, setAddelivery] = useState<PULLIN.AddeliveryProps>({ adgroups: {}, targeting: [], dynamic: {}, dynamicMaterialDTos: {}, dynamicCreativesTextDTOS: {}, mediaType: 0 })
     const { adgroups, dynamic } = addelivery
     const { marketingAssetOuterSpec, marketingCarrierType, marketingGoal, marketingSubGoal, siteSet, automaticSiteEnabled, sceneSpec } = addelivery.adgroups
-    const { deliveryMode, creativeTemplateId } = addelivery.dynamic
+    const { deliveryMode, creativeTemplateId, dynamicCreativeSwitch } = addelivery.dynamic
     const [wechatVisible, setWechatVisible] = useState<boolean>(false) // 选择微信公众号弹窗控制
     const [channelsProfileVisible, setChannelsProfileVisible] = useState<boolean>(false) // 选择微信公众号弹窗控制
     const [materialData, setMaterialData] = useState<any>({}) // 素材数据
@@ -55,7 +55,7 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
                 deliveryMode,
                 creativeTemplateId,
                 wechatSceneSpecPosition: sceneSpec?.wechatPosition,
-                dynamicCreativeType: deliveryMode === 'DELIVERY_MODE_COMPONENT' ? 'DYNAMIC_CREATIVE_TYPE_PROGRAM' : 'DYNAMIC_CREATIVE_TYPE_COMMON'
+                dynamicCreativeType: (deliveryMode === 'DELIVERY_MODE_COMPONENT' && !dynamicCreativeSwitch) ? 'DYNAMIC_CREATIVE_TYPE_PROGRAM' : 'DYNAMIC_CREATIVE_TYPE_COMMON'
             }
             if (automaticSiteEnabled) {
                 params.automaticSiteEnabled = automaticSiteEnabled
@@ -92,7 +92,7 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
                 }
             })
         }
-    }, [creativeTemplateId, deliveryMode, marketingGoal, marketingAssetOuterSpec, marketingCarrierType, siteSet, sceneSpec?.wechatPosition, automaticSiteEnabled, putInType])
+    }, [creativeTemplateId, deliveryMode, dynamicCreativeSwitch, marketingGoal, marketingAssetOuterSpec, marketingCarrierType, siteSet, sceneSpec?.wechatPosition, automaticSiteEnabled, putInType])
 
     useEffect(() => {
         if (adData && adData.length) {
@@ -306,7 +306,7 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
                         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) => {
@@ -414,8 +414,8 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
             } else {
                 handleDynamic(adData, averageAdDynamicList)
             }
-            
-            
+
+
         }
 
         setDynamicCount(newDynamicCount)
@@ -429,7 +429,7 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
         const { dynamic, dynamicMaterialDTos, dynamicCreativesTextDTOS, mediaType } = addelivery
 
         let dynamicMaterialDTOS = []
-        if (dynamic.deliveryMode === 'DELIVERY_MODE_CUSTOMIZE') {
+        if (dynamic.deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' || dynamic?.dynamicCreativeSwitch) {
             if ((materialData && Object.keys(materialData).length && dynamicMaterialDTos && Object.keys(dynamicMaterialDTos).length)) {
                 let mType = Object.keys(materialData)[0];
                 dynamicMaterialDTOS = dynamicMaterialDTos.dynamicGroup?.map((item: any) => {
@@ -555,7 +555,7 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
                 pageList: pageList?.map((item: { pageId: any }) => item.pageId)
             }
 
-            if (wechatChannelList && (['MARKETING_TARGET_TYPE_WECHAT_OFFICIAL_ACCOUNT'].includes(adgroups?.marketingAssetOuterSpec?.marketingTargetType) || adgroups?.marketingCarrierType === 'MARKETING_CARRIER_TYPE_WECHAT_OFFICIAL_ACCOUNT')) {
+            if (wechatChannelList && (['MARKETING_TARGET_TYPE_WECHAT_OFFICIAL_ACCOUNT'].includes(adgroups?.marketingAssetOuterSpec?.marketingTargetType) || adgroups?.marketingCarrierType === 'MARKETING_CARRIER_TYPE_WECHAT_OFFICIAL_ACCOUNT' || dynamic?.creativeComponents?.brand?.[0]?.value?.jumpInfo?.pageType === 'PAGE_TYPE_WECHAT_OFFICIAL_ACCOUNT_DETAIL')) {
                 map.wechatChannelId = wechatChannelList?.[0]?.wechatOfficialAccountId
             }
 
@@ -565,8 +565,12 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
 
             accountIdParamDTOMap[accountId] = map
         })
-        let dynamicCreativesDTO = { ...dynamic, mediaType }
+        dynamic.dynamicCreativeType = 'DYNAMIC_CREATIVE_TYPE_COMMON'
         if (dynamic.deliveryMode === 'DELIVERY_MODE_COMPONENT') {
+            dynamic.dynamicCreativeType = dynamic?.dynamicCreativeSwitch ? 'DYNAMIC_CREATIVE_TYPE_COMMON' : 'DYNAMIC_CREATIVE_TYPE_PROGRAM'
+        }
+        let dynamicCreativesDTO = { ...dynamic, mediaType }
+        if (dynamic.deliveryMode === 'DELIVERY_MODE_COMPONENT' && !dynamic?.dynamicCreativeSwitch) {
             dynamicCreativesDTO.creativeTemplateId = 711
         }
         let params = {

+ 14 - 6
src/pages/launchSystemV3/tencentAdPutIn/create/index.tsx

@@ -40,7 +40,7 @@ const Create: React.FC = () => {
     const { initTargeting } = useModel('useLaunchV3.useTargeting')
     const [addelivery, setAddelivery] = useState<PULLIN.AddeliveryProps>({ adgroups: {}, targeting: [], dynamic: {}, dynamicMaterialDTos: {}, dynamicCreativesTextDTOS: {}, mediaType: 0 })
     const { marketingAssetOuterSpec, marketingCarrierType, marketingGoal, marketingSubGoal, siteSet, automaticSiteEnabled, sceneSpec, isConversion } = addelivery.adgroups
-    const { deliveryMode, creativeTemplateId, creativeComponents } = addelivery.dynamic
+    const { deliveryMode, creativeTemplateId, dynamicCreativeSwitch, creativeComponents } = addelivery.dynamic
     const [accountCreateLogs, setAccountCreateLogs] = useState<PULLIN.AccountCreateLogsProps[]>([])  // 账户
     const [goodsVisible, setGoodsVisible] = useState<boolean>(false) // 选择小说弹窗控制
     const [wechatVisible, setWechatVisible] = useState<boolean>(false) // 选择微信公众号弹窗控制
@@ -89,7 +89,7 @@ const Create: React.FC = () => {
                 deliveryMode,
                 creativeTemplateId,
                 wechatSceneSpecPosition: sceneSpec?.wechatPosition,
-                dynamicCreativeType: deliveryMode === 'DELIVERY_MODE_COMPONENT' ? 'DYNAMIC_CREATIVE_TYPE_PROGRAM' : 'DYNAMIC_CREATIVE_TYPE_COMMON'
+                dynamicCreativeType: (deliveryMode === 'DELIVERY_MODE_COMPONENT' && !dynamicCreativeSwitch) ? 'DYNAMIC_CREATIVE_TYPE_PROGRAM' : 'DYNAMIC_CREATIVE_TYPE_COMMON'
             }
             if (automaticSiteEnabled) {
                 params.automaticSiteEnabled = automaticSiteEnabled
@@ -126,7 +126,7 @@ const Create: React.FC = () => {
                 }
             })
         }
-    }, [creativeTemplateId, deliveryMode, marketingGoal, marketingAssetOuterSpec, marketingCarrierType, siteSet, sceneSpec?.wechatPosition, automaticSiteEnabled, putInType])
+    }, [creativeTemplateId, deliveryMode, dynamicCreativeSwitch, marketingGoal, marketingAssetOuterSpec, marketingCarrierType, siteSet, sceneSpec?.wechatPosition, automaticSiteEnabled, putInType])
 
     /** 存为预设 */
     const severBd = () => {
@@ -187,7 +187,7 @@ const Create: React.FC = () => {
                                 message.warning('请注意,检测投放开始日期小于今天,已自动改成今天,如需修改,请重新设置')
                             }
                             let dynamicGroup: any[] = []
-                            if (dynamic.deliveryMode === 'DELIVERY_MODE_CUSTOMIZE') {
+                            if (dynamic.deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' || (dynamic.deliveryMode === 'DELIVERY_MODE_COMPONENT' && dynamic?.dynamicCreativeType === 'DYNAMIC_CREATIVE_TYPE_COMMON')) {
                                 dynamicGroup = dynamicMaterialDTOS?.map((item: any[]) => {
                                     let { type, valueJson } = item[0]
                                     let value = JSON.parse(valueJson).value
@@ -253,6 +253,10 @@ const Create: React.FC = () => {
                                 return data
                             }))
 
+                            if (dynamic.deliveryMode === 'DELIVERY_MODE_COMPONENT' && dynamic?.dynamicCreativeType === 'DYNAMIC_CREATIVE_TYPE_COMMON') {
+                                dynamic.dynamicCreativeSwitch = true
+                            }
+
                             setAddelivery({
                                 adgroups: { ...adgroupDTO, isConversion, adgroupName: adgroupDTO.adgroupName + '_副本' + randomString(true, 3, 5), endDate, beginDate },
                                 targeting: targetings.map((item: any) => {
@@ -648,7 +652,7 @@ const Create: React.FC = () => {
         const { adgroups, targeting, dynamic, dynamicMaterialDTos, dynamicCreativesTextDTOS, mediaType } = JSON.parse(JSON.stringify(addelivery)) as PULLIN.AddeliveryProps
 
         let dynamicMaterialDTOS = []
-        if (dynamic.deliveryMode === 'DELIVERY_MODE_CUSTOMIZE') {
+        if (dynamic.deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' || dynamic?.dynamicCreativeSwitch) {
             if ((materialData && Object.keys(materialData).length && dynamicMaterialDTos && Object.keys(dynamicMaterialDTos).length)) {
                 let mType = Object.keys(materialData)[0];
                 dynamicMaterialDTOS = dynamicMaterialDTos.dynamicGroup?.map((item: any) => {
@@ -791,8 +795,12 @@ const Create: React.FC = () => {
 
             accountIdParamDTOMap[accountId] = map
         })
-        let dynamicCreativesDTO = { ...dynamic, mediaType }
+        dynamic.dynamicCreativeType = 'DYNAMIC_CREATIVE_TYPE_COMMON'
         if (dynamic.deliveryMode === 'DELIVERY_MODE_COMPONENT') {
+            dynamic.dynamicCreativeType = dynamic?.dynamicCreativeSwitch ? 'DYNAMIC_CREATIVE_TYPE_COMMON' : 'DYNAMIC_CREATIVE_TYPE_PROGRAM'
+        }
+        let dynamicCreativesDTO = { ...dynamic, mediaType }
+        if (dynamic.deliveryMode === 'DELIVERY_MODE_COMPONENT' && !dynamic?.dynamicCreativeSwitch) {
             dynamicCreativesDTO.creativeTemplateId = 711
         }
         delete adgroups?.isConversion  // 前端控制新链路字段

+ 4 - 2
src/pages/launchSystemV3/tencentAdPutIn/create/tableConfig.tsx

@@ -120,10 +120,11 @@ const columns = (): TableProps<any>['columns'] => {
                     width: 210,
                     render: (_, b) => {
                         let deliveryMode = b?.dynamicDto?.deliveryMode
+                        let dynamicCreativeSwitch = b?.dynamicDto?.dynamicCreativeSwitch
                         let dynamicGroup = b?.dynamicGroup
                         if (dynamicGroup && Object.keys(dynamicGroup).length) {
                             let keys = Object.keys(dynamicGroup)
-                            if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE") {
+                            if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE" || dynamicCreativeSwitch) {
                                 return <>
                                     <div className={style.detail_body_m}>
                                         {(keys.includes('video_id') || keys.includes('short_video1')) ? <>
@@ -288,10 +289,11 @@ export const columnsAddDynamic = (): TableProps<any>['columns'] => {
                     width: 200,
                     render: (_, b) => {
                         let deliveryMode = b?.dynamicDto?.deliveryMode
+                        let dynamicCreativeSwitch = b?.dynamicDto?.dynamicCreativeSwitch
                         let dynamicGroup = b?.dynamicGroup
                         if (dynamicGroup && Object.keys(dynamicGroup).length) {
                             let keys = Object.keys(dynamicGroup)
-                            if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE") {
+                            if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE" || dynamicCreativeSwitch) {
                                 // return <Text style={{ fontSize: 12, color: '#1890ff' }}>已选{(keys.includes('video_id') || keys.includes('short_video1')) ? '1个视频,0张图片' : keys.includes('image_id') ? '0个视频,1张图片' : (keys.includes('image_list') || keys.includes('element_story') ? '1个组图, 0个视频' : '')}</Text>
                                 return <>
                                     <div className={style.detail_body_m}>

+ 6 - 0
src/pages/launchSystemV3/tencentAdPutIn/index.less

@@ -171,4 +171,10 @@
         border-radius: 6px;
     }
     
+}
+
+.formItemResetCss {
+    .ant-form-item-control-input {
+        min-height: auto;
+    }
 }