Ver Fonte

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

wjx há 3 meses atrás
pai
commit
515f326b9d

+ 2 - 1
src/pages/launchSystemV3/tencentAdPutIn/create/Ad/index.tsx

@@ -19,7 +19,7 @@ import { ShowApplication } from "@/pages/launchSystemV3/tencenTasset/application
 const Ad: React.FC = () => {
 
     /*****************************/
-    const { addelivery, setAddelivery, accountCreateLogs, clearData, setAccountCreateLogs, putInType } = useContext(DispatchAddelivery)!;
+    const { addelivery, setAddelivery, accountCreateLogs, clearData, setAccountCreateLogs, putInType, setIsDqSubmit } = useContext(DispatchAddelivery)!;
     const { adgroups } = addelivery
     const {
         marketingGoal, marketingSubGoal, marketingAssetOuterSpec, marketingCarrierType, automaticSiteEnabled, explorationStrategy, siteSet, prioritySiteSet, searchExpandTargetingSwitch, bidMode, smartBidType, bidScene, bidAmount, optimizationGoal, isConversion, depthConversionEnabled,
@@ -128,6 +128,7 @@ const Ad: React.FC = () => {
                 setNewVisible(false)
             }}
             onChange={(adgroups) => {
+                setIsDqSubmit?.(false)
                 if (
                     adgroups.marketingGoal === marketingGoal &&  // 营销内容
                     adgroups.marketingCarrierType === marketingCarrierType && // 营销载体

+ 2 - 1
src/pages/launchSystemV3/tencentAdPutIn/create/Dynamic/index.tsx

@@ -15,7 +15,7 @@ import { useAjax } from "@/Hook/useAjax"
 const Dynamic: React.FC<{ creativeTemplateAppellation?: string, creativeTemplateStyle?: string }> = ({ creativeTemplateAppellation, creativeTemplateStyle }) => {
 
     /***************************************/
-    const { addelivery, setAddelivery, clearData, setAccountCreateLogs, accountCreateLogs, putInType } = useContext(DispatchAddelivery)!;
+    const { addelivery, setAddelivery, clearData, setAccountCreateLogs, accountCreateLogs, putInType, setIsDqSubmit } = useContext(DispatchAddelivery)!;
     const { adgroups, dynamic: dynamicData } = addelivery;
     const { deliveryMode, creativeTemplateId, dynamicCreativeName, creativeComponents, configuredStatus } = dynamicData
     const { textLink, actionButton, showData, brand, mainJumpInfo, floatingZoneComponent, creativeLabelDTOS, creativeBarrageDTOS, creativeFirstReplyDTO } = creativeComponents || {}
@@ -136,6 +136,7 @@ const Dynamic: React.FC<{ creativeTemplateAppellation?: string, creativeTemplate
                 }
                 setNewVisible(false)
                 clearData()
+                setIsDqSubmit?.(false)
             }}
         />}
     </div>

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

@@ -13,7 +13,7 @@ const { Title } = Typography;
 const Material: React.FC<{ adData?: any[] }> = ({ adData }) => {
 
     /***************************************/
-    const { materialData, addelivery, setAddelivery, clearData, accountCreateLogs, putInType, adLength } = useContext(DispatchAddelivery)!;
+    const { materialData, addelivery, setAddelivery, clearData, accountCreateLogs, putInType, adLength, setIsDqSubmit } = useContext(DispatchAddelivery)!;
     const { dynamic, dynamicMaterialDTos, mediaType, adgroups: { marketingAssetOuterSpec, marketingCarrierType }, dynamicCreativesTextDTOS } = addelivery
     const { creativeTemplateId, deliveryMode, dynamicCreativeSwitch } = dynamic
 
@@ -41,6 +41,7 @@ const Material: React.FC<{ adData?: any[] }> = ({ adData }) => {
                     newDynamicCreativesTextDetailDTOList = dynamicCreativesTextDTOS?.dynamicCreativesTextDetailDTOList
                 }
             })
+            setIsDqSubmit?.(false)
             setAddelivery({
                 ...addelivery,
                 dynamicMaterialDTos: {
@@ -67,6 +68,7 @@ const Material: React.FC<{ adData?: any[] }> = ({ adData }) => {
                 const length = item.list.length
                 return { list: dynamicGroupList.splice(0, length) }
             })
+            setIsDqSubmit?.(false)
             setAddelivery({
                 ...addelivery,
                 dynamicMaterialDTos: {
@@ -89,7 +91,15 @@ const Material: React.FC<{ adData?: any[] }> = ({ adData }) => {
                     <a style={{ marginLeft: 16, fontSize: 12, color: '#f50' }} onClick={handleDisruptionComponent}><SyncOutlined /></a>
                 </Tooltip>}
             </span>
-            {(dynamicMaterialDTos && Object.keys(dynamicMaterialDTos).length > 0) ? <Button type="link" size="small" style={{ fontSize: 11, padding: 0 }} onClick={() => setAddelivery({ ...addelivery, dynamicMaterialDTos: {}, dynamicCreativesTextDTOS: {} })}><RedoOutlined />清空</Button> : null}
+            {(dynamicMaterialDTos && Object.keys(dynamicMaterialDTos).length > 0) ? <Button
+                type="link"
+                size="small"
+                style={{ fontSize: 11, padding: 0 }}
+                onClick={() => {
+                    setAddelivery({ ...addelivery, dynamicMaterialDTos: {}, dynamicCreativesTextDTOS: {} })
+                    setIsDqSubmit?.(false)
+                }}
+            ><RedoOutlined />清空</Button> : null}
         </div>
         <div className={style.detail}>
             <div className={style.detail_body}>
@@ -183,6 +193,7 @@ const Material: React.FC<{ adData?: any[] }> = ({ adData }) => {
                     putInType={putInType}
                     type={deliveryMode === "DELIVERY_MODE_CUSTOMIZE" ? creativeTemplateId : deliveryMode}
                     onChange={({ dynamicMaterialDTos, mediaType, dynamicCreativesTextDTOS }) => {
+                        setIsDqSubmit?.(false)
                         setAddelivery({ ...addelivery, dynamicMaterialDTos, mediaType: mediaType as any, dynamicCreativesTextDTOS })
                     }}
                 />}
@@ -204,6 +215,7 @@ const Material: React.FC<{ adData?: any[] }> = ({ adData }) => {
             putInType={putInType}
             accountCreateLogs={accountCreateLogs}
             onChange={({ dynamicMaterialDTos, mediaType }) => {
+                setIsDqSubmit?.(false)
                 const newAddelivery = { ...addelivery, dynamicMaterialDTos, mediaType }
                 if (addelivery.mediaType !== mediaType && mediaType !== 1 && addelivery.dynamicCreativesTextDTOS?.type === 4) {
                     newAddelivery.dynamicCreativesTextDTOS = {}

+ 12 - 2
src/pages/launchSystemV3/tencentAdPutIn/create/MaterialText/index.tsx

@@ -11,7 +11,7 @@ const { Title, Text } = Typography;
 const MaterialText: React.FC<{ adDataGroup?: { [x: number]: any[] } }> = ({ adDataGroup }) => {
 
     /*************************************/
-    const { textData, addelivery, setAddelivery, clearData, putInType, accountCreateLogs } = useContext(DispatchAddelivery)!;
+    const { textData, addelivery, setAddelivery, clearData, putInType, accountCreateLogs, setIsDqSubmit } = useContext(DispatchAddelivery)!;
     const { dynamic, dynamicCreativesTextDTOS, dynamicMaterialDTos, mediaType } = addelivery
 
     const [addVisible, setAddVisible] = useState<boolean>(false)
@@ -36,6 +36,7 @@ const MaterialText: React.FC<{ adDataGroup?: { [x: number]: any[] } }> = ({ adDa
     const handleDisruption = () => {
         const textDto: { description: string[] }[] = dynamicCreativesTextDTOS.dynamicCreativesTextDetailDTOList
         if (textDto?.[0]?.description) {
+            setIsDqSubmit?.(false)
             const textDtoArr = shuffleArray(textDto.reduce((acc: string[], val) => acc.concat(val.description), []))
             setAddelivery({
                 ...addelivery,
@@ -55,7 +56,15 @@ const MaterialText: React.FC<{ adDataGroup?: { [x: number]: any[] } }> = ({ adDa
                     <a style={{ marginLeft: 8, fontSize: 12 }} onClick={handleDisruption}><SyncOutlined /></a>
                 </Tooltip>}
             </span>
-            {(dynamicCreativesTextDTOS && Object.keys(dynamicCreativesTextDTOS).length > 0) ? <Button type="link" size="small" style={{ fontSize: 11, padding: 0 }} onClick={() => setAddelivery({ ...addelivery, dynamicCreativesTextDTOS: {} })}><RedoOutlined />清空</Button> : null}
+            {(dynamicCreativesTextDTOS && Object.keys(dynamicCreativesTextDTOS).length > 0) ? <Button
+                type="link"
+                size="small"
+                style={{ fontSize: 11, padding: 0 }}
+                onClick={() => {
+                    setAddelivery({ ...addelivery, dynamicCreativesTextDTOS: {} })
+                    setIsDqSubmit?.(false)
+                }}
+            ><RedoOutlined />清空</Button> : null}
         </div>
         <div className={style.detail}>
             <div className={style.detail_body}>
@@ -99,6 +108,7 @@ const MaterialText: React.FC<{ adDataGroup?: { [x: number]: any[] } }> = ({ adDa
                 setAddVisible(false)
             }}
             onChange={(values) => {
+                setIsDqSubmit?.(false)
                 setAddelivery({ ...addelivery, dynamicCreativesTextDTOS: values })
                 setAddVisible(false)
                 clearData()

+ 2 - 2
src/pages/launchSystemV3/tencentAdPutIn/create/PageList/index.tsx

@@ -16,7 +16,7 @@ const { Title, Text } = Typography;
 const PageList: React.FC<{ adDataGroup?: { [x: number]: any[] } }> = ({ adDataGroup }) => {
 
     /********************************/
-    const { addelivery, setAddelivery, accountCreateLogs, setAccountCreateLogs, clearData } = useContext(DispatchAddelivery)!;
+    const { addelivery, setAddelivery, accountCreateLogs, setAccountCreateLogs, clearData, setIsDqSubmit } = useContext(DispatchAddelivery)!;
     const { dynamic, adgroups, targeting } = addelivery
 
     const [addVisible, setAddVisible] = useState<boolean>(false)
@@ -33,6 +33,7 @@ const PageList: React.FC<{ adDataGroup?: { [x: number]: any[] } }> = ({ adDataGr
     }, [dynamic])
 
     const setPageData = ({ data, landingPageType }: { data: PULLIN.AccountCreateLogsProps[]; landingPageType: 0 | 1; }, type: 1 | 2 | 3) => {
+        setIsDqSubmit?.(false)
         if (landingPageType === 1) {
             if (adDataGroup && Object.keys(adDataGroup).length) {
                 if (data.some(item => {
@@ -75,7 +76,6 @@ const PageList: React.FC<{ adDataGroup?: { [x: number]: any[] } }> = ({ adDataGr
                 setAddMiniProgramVisible(false);
                 break
         }
-        
         clearData()
     }
 

+ 15 - 3
src/pages/launchSystemV3/tencentAdPutIn/create/Target/index.tsx

@@ -18,7 +18,7 @@ const Target: React.FC = () => {
 
     /***************************************/
     const { geoLocationList, modelList } = useModel('useLaunchV3.useTargeting')
-    const { addelivery, setAddelivery, clearData, putInType } = useContext(DispatchAddelivery)!;
+    const { addelivery, setAddelivery, clearData, putInType, setIsDqSubmit } = useContext(DispatchAddelivery)!;
     const { targeting, adgroups } = addelivery
     const [addVisible, setAddVisible] = useState<boolean>(false)
     const [addTemVisible, setAddTemVisible] = useState<boolean>(false)
@@ -33,7 +33,15 @@ const Target: React.FC = () => {
         <div className={`${style.settingsBody_content_row} ${style.row2}`}>
             <div className={style.title}>
                 <span>定向 <span className={style.selected}>已选 {targeting?.length || 0}</span></span>
-                {targeting?.length > 0 && <Button type="link" size="small" style={{ fontSize: 11, padding: 0 }} onClick={() => setAddelivery({ ...addelivery, targeting: [] })}><RedoOutlined />清空</Button>}
+                {targeting?.length > 0 && <Button
+                    type="link"
+                    size="small"
+                    style={{ fontSize: 11, padding: 0 }}
+                    onClick={() => {
+                        setAddelivery({ ...addelivery, targeting: [] })
+                        setIsDqSubmit?.(false)
+                    }}
+                ><RedoOutlined />清空</Button>}
             </div>
             <div className={style.detail}>
                 <div className={style.detail_body}>
@@ -48,6 +56,7 @@ const Target: React.FC = () => {
                                 targeting={{ targetingName: item.targetingName, ...item.targeting }}
                                 onClear={() => {
                                     let newTargeting: any[] = JSON.parse(JSON.stringify(targeting))
+                                    setIsDqSubmit?.(false)
                                     setAddelivery({ ...addelivery, targeting: newTargeting.filter((_, i) => index !== i) })
                                 }}
                                 onModify={() => {
@@ -97,6 +106,7 @@ const Target: React.FC = () => {
                 setAddelivery({ ...addelivery, targeting: [...target, ...currentTarget] })
                 setAddVisible(false)
                 clearData()
+                setIsDqSubmit?.(false)
             }}
         />}
 
@@ -123,11 +133,12 @@ const Target: React.FC = () => {
                 setModifyLength(undefined)
                 setAddelivery({ ...addelivery, targeting: newTarget })
                 clearData()
+                setIsDqSubmit?.(false)
             }}
         />}
 
         {/* 一键生成 */}
-        {copyVisible && <GenerateTarget 
+        {copyVisible && <GenerateTarget
             target={copyDta}
             visible={copyVisible}
             onClose={() => {
@@ -141,6 +152,7 @@ const Target: React.FC = () => {
                 setCopyVisible(false)
                 setAddelivery({ ...addelivery, targeting: newTarget })
                 clearData()
+                setIsDqSubmit?.(false)
             }}
         />}
     </>

+ 21 - 5
src/pages/launchSystemV3/tencentAdPutIn/create/index.tsx

@@ -1,4 +1,4 @@
-import { Button, Card, Empty, Modal, Popconfirm, Radio, Space, Spin, Table, Tabs, Tag, message, notification } from "antd"
+import { Button, Card, Empty, Modal, Popconfirm, Radio, Space, Spin, Table, Tabs, Tag, Tooltip, message, notification } from "antd"
 import React, { useEffect, useState } from "react"
 import style from './index.less'
 import '../index.less'
@@ -63,6 +63,7 @@ const Create: React.FC = () => {
     const [putInType, setPutInType] = useLocalStorageState<'NOVEL' | 'GAME'>('PUTINTYPE');
     const [copyTask, setCopyTask] = useState<{ copyTaskId?: number, uuid?: string }>({})
     const [ownerAccountId, setOwnerAccountId] = useState<number>()
+    const [isDqSubmit, setIsDqSubmit] = useState<boolean>(false) // 是否提交过
 
     const createAdgroupTask = useAjax((params) => createAdgroupTaskApi(params))
     const createAdgroupTaskV2 = useAjax((params) => createAdgroupTaskV2Api(params))
@@ -80,6 +81,8 @@ const Create: React.FC = () => {
     }, [initialState?.menu])
 
     useEffect(() => {
+        // 刷新页面清除数据
+        setIsDqSubmit(false)
         initTargeting()
     }, [])
 
@@ -183,6 +186,7 @@ const Create: React.FC = () => {
         })
         setCopyTask({})
         setTableData({})
+        setIsDqSubmit(false)
     }
 
     /**数据回填 */
@@ -907,6 +911,7 @@ const Create: React.FC = () => {
                         },
                         onCancel: () => {
                             setSubVisible(false)
+                            setIsDqSubmit(true)
                         }
                     })
                 }
@@ -946,6 +951,7 @@ const Create: React.FC = () => {
                         ownerAccountId={ownerAccountId}
                         putInType={putInType}
                         onChange={(e, isClear) => {
+                            setIsDqSubmit(false)
                             clearData()
                             setAccountCreateLogs(e?.map((item: any) => ({ accountId: item.accountId })) || []);
                             if (isClear) {
@@ -991,7 +997,9 @@ const Create: React.FC = () => {
                                 setTextData,
                                 clearData,
                                 putInType,
-                                adLength
+                                adLength,
+                                isDqSubmit,
+                                setIsDqSubmit
                             }}>
                             <div className={style.settingsBody_content_right}>
                                 {/* 广告信息 */}
@@ -1034,6 +1042,7 @@ const Create: React.FC = () => {
                     data={accountCreateLogs}
                     onClose={() => setGoodsVisible(false)}
                     onChange={(e) => {
+                        setIsDqSubmit(false)
                         setAccountCreateLogs(e);
                         setGoodsVisible(false);
                         clearData()
@@ -1045,6 +1054,7 @@ const Create: React.FC = () => {
                     data={accountCreateLogs}
                     onClose={() => setSourceVisible(false)}
                     onChange={(e) => {
+                        setIsDqSubmit(false)
                         setAccountCreateLogs(e);
                         setSourceVisible(false);
                         clearData()
@@ -1056,6 +1066,7 @@ const Create: React.FC = () => {
                     data={accountCreateLogs}
                     onClose={() => setWechatVisible(false)}
                     onChange={(e) => {
+                        setIsDqSubmit(false)
                         setAccountCreateLogs(e);
                         setWechatVisible(false);
                         clearData()
@@ -1067,6 +1078,7 @@ const Create: React.FC = () => {
                     data={accountCreateLogs}
                     onClose={() => setChannelsProfileVisible(false)}
                     onChange={(e) => {
+                        setIsDqSubmit(false)
                         setAccountCreateLogs(e);
                         setChannelsProfileVisible(false);
                         clearData()
@@ -1080,6 +1092,7 @@ const Create: React.FC = () => {
                     data={accountCreateLogs}
                     onClose={() => setConversionVisible(false)}
                     onChange={(e) => {
+                        setIsDqSubmit(false)
                         setAccountCreateLogs(e);
                         setConversionVisible(false);
                         clearData()
@@ -1091,6 +1104,7 @@ const Create: React.FC = () => {
                     data={accountCreateLogs}
                     onClose={() => setPositionPackageVisible(false)}
                     onChange={(e) => {
+                        setIsDqSubmit(false)
                         setAccountCreateLogs(e);
                         setPositionPackageVisible(false);
                         clearData()
@@ -1110,9 +1124,11 @@ const Create: React.FC = () => {
                     tabBarExtraContent={<Space>
                         <span>广告总数:{adCount}</span>
                         <span>创意总数:{dynamicCount}</span>
-                        <Button type='primary' onClick={() => {
-                            setSubVisible(true)
-                        }}>提交创建</Button>
+                        <Tooltip title="注意,当前有提交过!" open={isDqSubmit ? undefined : false}>
+                            <Button type='primary' danger={isDqSubmit} onClick={() => {
+                                setSubVisible(true)
+                            }}>提交创建</Button>
+                        </Tooltip>
                     </Space>}
                     items={accountCreateLogs.map(item => ({ label: item.accountId, key: item.accountId?.toString() })) as any[]}
                 />

+ 2 - 0
src/pages/launchSystemV3/tencentAdPutIn/typings.d.ts

@@ -36,6 +36,8 @@ declare namespace PULLIN {
         // 是否可以选择云端素材
         isSelectRemote?: boolean,
         adLength: number
+        isDqSubmit?: boolean
+        setIsDqSubmit?: React.Dispatch<React.SetStateAction<boolean>>
     }
     type DataType = { label: string | number, value: any, disabled?: boolean }
     interface FormItemDataProps {