|
@@ -5,13 +5,14 @@ import NewRadio from "@/pages/launchSystemV3/components/NewRadio"
|
|
|
import { DispatchAd } from "./newCreateAd"
|
|
|
import { GOAL_ROAS_ENUM, MARKETING_CARRIER_TYPE_ENUM, MARKETING_TARGET_TYPE_ENUM, MARKETING_TARGET_TYPE_GAME_ENUM, OPTIMIZATIONGOAL_ENUM, defaultSiteSet, marketingGoalGameList, marketingGoalList, marketingSubGoalGameList } from "../../const"
|
|
|
import New1Radio from "@/pages/launchSystemV3/components/New1Radio"
|
|
|
-import { useAjax } from "@/Hook/useAjax"
|
|
|
import { getOptimizationGoalPermissionsV3Api } from "@/services/adqV3/global"
|
|
|
import { adRules } from "../../rules"
|
|
|
import { QuestionCircleFilled } from "@ant-design/icons"
|
|
|
import { SelectMiniProgramWechat } from "@/pages/launchSystemV3/tencenTasset/miniProgramWechat"
|
|
|
import { SelectCorpWechat } from "@/pages/launchSystemV3/tencenTasset/corpWechat"
|
|
|
-import { SelectGame, SelectGameAppId } from "@/pages/launchSystemV3/tencenTasset/game"
|
|
|
+import { SelectGameAppId } from "@/pages/launchSystemV3/tencenTasset/game"
|
|
|
+import { useRequest } from "ahooks"
|
|
|
+import { SelectApplication } from "@/pages/launchSystemV3/tencenTasset/application"
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -19,7 +20,7 @@ import { SelectGame, SelectGameAppId } from "@/pages/launchSystemV3/tencenTasset
|
|
|
* @param value 回填
|
|
|
* @returns
|
|
|
*/
|
|
|
-const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
+const AdgroupsMarketingContent: React.FC<{ accountIdList: number[], value?: any }> = ({ accountIdList, value }) => {
|
|
|
|
|
|
/****************************************/
|
|
|
const { form, OGPParams, setOGPparams, putInType } = useContext(DispatchAd)!;
|
|
@@ -45,7 +46,7 @@ const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
const [deepConversionData, setDeepConversionData] = useState<PULLIN.DataType[]>([])
|
|
|
const [isUpdateOptimizationGoal, setIsUpdateOptimizationGoal] = useState<boolean>(false)
|
|
|
|
|
|
- const queryOptimizationGoalPermissions = useAjax((params) => getOptimizationGoalPermissionsV3Api(params))
|
|
|
+ const queryOptimizationGoalPermissions = useRequest((params) => getOptimizationGoalPermissionsV3Api(params), { manual: true, debounceInterval: 100 })
|
|
|
/****************************************/
|
|
|
|
|
|
/** 获取深度优化 出价和版位改变时查询 */
|
|
@@ -69,7 +70,7 @@ const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
marketingCarrierId: wxGameAppId
|
|
|
}
|
|
|
}
|
|
|
- queryOptimizationGoalPermissions.run({ ...obj, taskType: putInType })
|
|
|
+ queryOptimizationGoalPermissions.run({ ...obj, taskType: putInType, accountIdList })
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -77,12 +78,12 @@ const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
if (OGPParams.marketingCarrierType && OGPParams.marketingTargetType) {
|
|
|
getOptimizationGoalPermissions()
|
|
|
}
|
|
|
- }, [OGPParams, putInType, wxGameAppId])
|
|
|
+ }, [OGPParams, putInType, wxGameAppId, accountIdList])
|
|
|
|
|
|
// 处理深度转化优化
|
|
|
useEffect(() => {
|
|
|
- if (optimizationGoal && queryOptimizationGoalPermissions?.data) {
|
|
|
- let { deepBehaviorOptimizationGoalPermissionList, deepWorthOptimizationGoalPermissionList } = queryOptimizationGoalPermissions?.data
|
|
|
+ if (optimizationGoal && queryOptimizationGoalPermissions?.data?.data) {
|
|
|
+ let { deepBehaviorOptimizationGoalPermissionList, deepWorthOptimizationGoalPermissionList } = queryOptimizationGoalPermissions?.data?.data
|
|
|
let behavior = deepBehaviorOptimizationGoalPermissionList?.find((item: { optimizationGoal: string }) => item.optimizationGoal === optimizationGoal)
|
|
|
let worth = deepWorthOptimizationGoalPermissionList?.find((item: { optimizationGoal: string }) => item.optimizationGoal === optimizationGoal)
|
|
|
let newBehaviorList = behavior?.deepBehaviorOptimizationGoalList || []
|
|
@@ -103,7 +104,7 @@ const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
- }, [optimizationGoal, queryOptimizationGoalPermissions?.data])
|
|
|
+ }, [optimizationGoal, queryOptimizationGoalPermissions?.data?.data])
|
|
|
|
|
|
// 选择营销目的触发
|
|
|
useEffect(() => {
|
|
@@ -131,13 +132,12 @@ const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
}
|
|
|
}, [marketingTargetType, marketingTargetTypeList, OGPParams, value])
|
|
|
|
|
|
- // // 营销载体类型
|
|
|
+ // 营销载体类型
|
|
|
useEffect(() => {
|
|
|
let newMarketingTargetTypeListList: PULLIN.DataType[] = []
|
|
|
// 推广产品是公众号不展示 营销载体类型
|
|
|
if (marketingTargetType) {
|
|
|
let marketingTargetTypeRules: string[] = rules?.[marketingTargetType]?.MARKETING_SUB_GOAL_UNKNOWN
|
|
|
- console.log(marketingTargetTypeRules)
|
|
|
newMarketingTargetTypeListList = Object.keys(MARKETING_CARRIER_TYPE_ENUM).filter(key => marketingTargetTypeRules?.[key as keyof typeof marketingTargetTypeRules]).map(key => ({ label: MARKETING_CARRIER_TYPE_ENUM[key as keyof typeof MARKETING_CARRIER_TYPE_ENUM], value: key }))
|
|
|
}
|
|
|
setMarketingCarrierTypeList(newMarketingTargetTypeListList)
|
|
@@ -154,7 +154,7 @@ const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
|
|
|
// 切换 其他 优化目标更新
|
|
|
useEffect(() => {
|
|
|
- let optimizationGoalPermissionList: string[] = queryOptimizationGoalPermissions?.data?.optimizationGoalPermissionList
|
|
|
+ let optimizationGoalPermissionList: string[] = queryOptimizationGoalPermissions?.data?.data?.optimizationGoalPermissionList
|
|
|
if (isUpdateOptimizationGoal && optimizationGoalPermissionList?.length > 0 && !optimizationGoalPermissionList?.includes(optimizationGoal)) {
|
|
|
if (putInType === 'NOVEL') {
|
|
|
form.setFieldsValue({ optimizationGoal: optimizationGoalPermissionList?.includes('OPTIMIZATIONGOAL_ECOMMERCE_ORDER') ? 'OPTIMIZATIONGOAL_ECOMMERCE_ORDER' : optimizationGoalPermissionList?.includes('OPTIMIZATIONGOAL_PAGE_SCAN_CODE') ? 'OPTIMIZATIONGOAL_PAGE_SCAN_CODE' : undefined })
|
|
@@ -163,7 +163,7 @@ const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
}
|
|
|
setIsUpdateOptimizationGoal(false)
|
|
|
}
|
|
|
- }, [queryOptimizationGoalPermissions?.data?.optimizationGoalPermissionList, marketingGoal, marketingTargetType, marketingCarrierType, optimizationGoal, value, isUpdateOptimizationGoal, putInType])
|
|
|
+ }, [queryOptimizationGoalPermissions?.data?.data?.optimizationGoalPermissionList, marketingGoal, marketingTargetType, marketingCarrierType, optimizationGoal, value, isUpdateOptimizationGoal, putInType])
|
|
|
|
|
|
const setIsUpdate = () => {
|
|
|
if (bidMode === 'BID_MODE_OCPM' || bidMode === 'BID_MODE_OCPC') {
|
|
@@ -190,7 +190,15 @@ const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
className="cardResetCss"
|
|
|
>
|
|
|
<Form.Item name="marketingGoal" label={<strong>营销目的</strong>} rules={[{ required: true, message: '请选择营销目的!' }]} hidden={putInType === 'GAME'}>
|
|
|
- <MarketingGoal data={putInType === 'GAME' ? marketingGoalGameList : marketingGoalList} onChange={(e) => { setOGPparams({ ...OGPParams, marketingGoal: e as string }); setIsUpdate() }} />
|
|
|
+ <MarketingGoal data={putInType === 'GAME' ? marketingGoalGameList : marketingGoalList} onChange={(e) => {
|
|
|
+ if (e === 'MARKETING_GOAL_LEAD_RETENTION' && ['MARKETING_TARGET_TYPE_APP_ANDROID', 'MARKETING_TARGET_TYPE_APP_IOS'].includes(marketingTargetType)) {
|
|
|
+ form.setFieldsValue({
|
|
|
+ marketingTargetType: 'MARKETING_TARGET_TYPE_FICTION',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ setOGPparams({ ...OGPParams, marketingGoal: e as string });
|
|
|
+ setIsUpdate()
|
|
|
+ }} />
|
|
|
</Form.Item>
|
|
|
{putInType === 'GAME' && <Form.Item name="marketingSubGoal" label={<strong>营销目的</strong>} rules={[{ required: true, message: '请选择营销目的!' }]}>
|
|
|
<MarketingGoal data={marketingSubGoalGameList} onChange={(e) => { setOGPparams({ ...OGPParams, marketingSubGoal: e as string }); setIsUpdate() }} />
|
|
@@ -206,18 +214,27 @@ const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
setIsUpdate()
|
|
|
}} />
|
|
|
</Form.Item>}
|
|
|
- {marketingTargetType === 'MARKETING_TARGET_TYPE_MINI_PROGRAM_WECHAT' ? <Form.Item label={<strong>微信小程序</strong>} name='sysWechatAppId' rules={[{ required: true, message: '请选择微信小程序' }]}>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ {marketingCarrierTypeList?.length > 0 && <Form.Item name="marketingCarrierType" label={<strong>营销载体类型</strong>} rules={[{ required: true, message: '请选择营销载体类型!' }]}>
|
|
|
+ <New1Radio data={marketingCarrierTypeList} onChange={(e) => { setOGPparams({ ...OGPParams, marketingCarrierType: e }); setIsUpdate() }} />
|
|
|
+ </Form.Item>}
|
|
|
+
|
|
|
+ {marketingTargetType === 'MARKETING_TARGET_TYPE_MINI_PROGRAM_WECHAT' ? <Form.Item name='sysWechatAppId' rules={[{ required: true, message: '请选择微信小程序' }]}>
|
|
|
<SelectMiniProgramWechat />
|
|
|
- </Form.Item> : marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_WORK' ? <Form.Item label={<strong>企业微信</strong>} name='sysCorpWechatId' rules={[{ required: true, message: '请选择企业微信' }]}>
|
|
|
+ </Form.Item> : marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_WORK' ? <Form.Item name='sysCorpWechatId' rules={[{ required: true, message: '请选择企业微信' }]}>
|
|
|
<SelectCorpWechat />
|
|
|
- </Form.Item> : marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' ? <Form.Item label={<strong>微信小游戏</strong>} name='wxGameAppId' rules={[{ required: true, message: '请选择微信小游戏' }]}>
|
|
|
+ </Form.Item> : marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' ? <Form.Item name='wxGameAppId' rules={[{ required: true, message: '请选择微信小游戏' }]}>
|
|
|
<SelectGameAppId gameType="WXGAME" />
|
|
|
</Form.Item> : null}
|
|
|
- {marketingCarrierTypeList?.length > 0 && <Form.Item name="marketingCarrierType" label={<strong>营销载体类型</strong>} rules={[{ required: true, message: '请选择营销载体类型!' }]}>
|
|
|
- <New1Radio data={marketingCarrierTypeList} onChange={(e) => { setOGPparams({ ...OGPParams, marketingCarrierType: e }); setIsUpdate() }} />
|
|
|
+
|
|
|
+ {['MARKETING_CARRIER_TYPE_APP_ANDROID', 'MARKETING_CARRIER_TYPE_APP_IOS'].includes(marketingCarrierType) && <Form.Item name='promoteApplicationId' rules={[{ required: true, message: '请选择推广应用' }]}>
|
|
|
+ <SelectApplication type={marketingCarrierType === 'MARKETING_CARRIER_TYPE_APP_ANDROID' ? 'ANDROID' : marketingCarrierType === 'MARKETING_CARRIER_TYPE_APP_IOS' ? 'IOS' : undefined} />
|
|
|
</Form.Item>}
|
|
|
+
|
|
|
{(bidMode === 'BID_MODE_OCPM' || bidMode === 'BID_MODE_OCPC') && <>
|
|
|
- {['MARKETING_CARRIER_TYPE_JUMP_PAGE', 'MARKETING_CARRIER_TYPE_APP_IOS', 'MARKETING_CARRIER_TYPE_APP_QUICK_APP', 'MARKETING_CARRIER_TYPE_WECHAT_MINI_GAME'].includes(marketingCarrierType) && <Form.Item
|
|
|
+ {['MARKETING_CARRIER_TYPE_JUMP_PAGE', 'MARKETING_CARRIER_TYPE_APP_IOS', 'MARKETING_CARRIER_TYPE_APP_ANDROID', 'MARKETING_CARRIER_TYPE_APP_QUICK_APP', 'MARKETING_CARRIER_TYPE_WECHAT_MINI_GAME'].includes(marketingCarrierType) && <Form.Item
|
|
|
label={<Space>
|
|
|
<strong>转化归因新链路</strong>
|
|
|
<Tooltip title={<>
|
|
@@ -255,7 +272,7 @@ const AdgroupsMarketingContent: React.FC<{ value?: any }> = ({ value }) => {
|
|
|
placeholder='请选择'
|
|
|
loading={queryOptimizationGoalPermissions.loading}
|
|
|
>
|
|
|
- {queryOptimizationGoalPermissions?.data?.optimizationGoalPermissionList.filter((key: string) => key !== 'UNKNOWN').map((key: string) => {
|
|
|
+ {queryOptimizationGoalPermissions?.data?.data?.optimizationGoalPermissionList.filter((key: string) => key !== 'UNKNOWN').map((key: string) => {
|
|
|
return <Select.Option value={key} key={key}>{OPTIMIZATIONGOAL_ENUM[key as keyof typeof OPTIMIZATIONGOAL_ENUM]}</Select.Option>
|
|
|
})}
|
|
|
</Select>
|