adgroupsMarketingContent.tsx 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. import { Card, Form, Select, Space, Switch, Tooltip } from "antd"
  2. import React, { useContext, useEffect, useState } from "react"
  3. import MarketingGoal from "./marketingGoal"
  4. import NewRadio from "@/pages/launchSystemV3/components/NewRadio"
  5. import { DispatchAd } from "./newCreateAd"
  6. 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"
  7. import New1Radio from "@/pages/launchSystemV3/components/New1Radio"
  8. import { getOptimizationGoalPermissionsV3Api } from "@/services/adqV3/global"
  9. import { adRules, sdpRules } from "../../rules"
  10. import { QuestionCircleFilled } from "@ant-design/icons"
  11. import { SelectMiniProgramWechat } from "@/pages/launchSystemV3/tencenTasset/miniProgramWechat"
  12. import { SelectCorpWechat } from "@/pages/launchSystemV3/tencenTasset/corpWechat/manage"
  13. import { SelectGameAppId } from "@/pages/launchSystemV3/tencenTasset/game"
  14. import { useRequest } from "ahooks"
  15. import { SelectApplication } from "@/pages/launchSystemV3/tencenTasset/application"
  16. /**
  17. * 营销内容
  18. * @param value 回填
  19. * @returns
  20. */
  21. const AdgroupsMarketingContent: React.FC<{ accountIdList: number[], value?: any }> = ({ accountIdList, value }) => {
  22. /****************************************/
  23. const { form, OGPParams, setOGPparams, putInType, setSmartDeliveryGoalRules } = useContext(DispatchAd)!;
  24. const marketingGoal = Form.useWatch('marketingGoal', form);
  25. const marketingSubGoal = Form.useWatch<string>('marketingSubGoal', form);
  26. const marketingTargetType = Form.useWatch('marketingTargetType', form);
  27. const marketingCarrierType = Form.useWatch('marketingCarrierType', form);
  28. const bidMode = Form.useWatch('bidMode', form);
  29. const optimizationGoal = Form.useWatch('optimizationGoal', form);
  30. const smartBidType = Form.useWatch('smartBidType', form);
  31. const bidScene = Form.useWatch('bidScene', form);
  32. const wxGameAppId = Form.useWatch('wxGameAppId', form);
  33. const depthConversionEnabled = Form.useWatch('depthConversionEnabled', form);
  34. const deepConversionType = Form.useWatch(['deepConversionSpec', 'deepConversionType'], form);
  35. const deliveryMethod = Form.useWatch('deliveryMethod', form);
  36. const smartDeliveryPlatform = Form.useWatch('smartDeliveryPlatform', form);
  37. // 推广产品
  38. const [marketingTargetTypeList, setMarketingTargetTypeList] = useState<PULLIN.DataType[]>([])
  39. const [marketingCarrierTypeList, setMarketingCarrierTypeList] = useState<PULLIN.DataType[]>([])
  40. const [smartDeliveryGoalList, setSmartDeliveryGoalList] = useState<PULLIN.DataType[]>([])
  41. const [rules, setRules] = useState<any>({})
  42. const [behaviorList, setBehaviorList] = useState<string[]>([])
  43. const [worthList, setWorthList] = useState<string[]>([])
  44. const [deepConversionData, setDeepConversionData] = useState<PULLIN.DataType[]>([])
  45. const [isUpdateOptimizationGoal, setIsUpdateOptimizationGoal] = useState<boolean>(false)
  46. const queryOptimizationGoalPermissions = useRequest((params) => getOptimizationGoalPermissionsV3Api(params), { manual: true, debounceInterval: 100 })
  47. /****************************************/
  48. // 处理投放目标
  49. useEffect(() => {
  50. if (marketingTargetType && marketingCarrierType && deliveryMethod === "SMART") {
  51. const goalTypeRules: string[] = rules?.[marketingTargetType]?.MARKETING_SUB_GOAL_UNKNOWN?.[marketingCarrierType]?.GOAL_TYPE
  52. const smartDeliveryGoalOptions = sdpRules.find(item => item.smart_delivery_platform === smartDeliveryPlatform)?.smart_delivery_goal_options
  53. if (smartDeliveryGoalOptions && Array.isArray(smartDeliveryGoalOptions)) {
  54. const newSmartDeliveryGoalList: PULLIN.DataType[] = []
  55. const newSmartDeliveryGoalRules = smartDeliveryGoalOptions.filter(item => {
  56. if (goalTypeRules?.includes(item.value)) {
  57. newSmartDeliveryGoalList.push({ label: item.optimization_goal_combos[0].title, value: item.value })
  58. return true
  59. }
  60. return false
  61. })
  62. setSmartDeliveryGoalRules(newSmartDeliveryGoalRules)
  63. if (newSmartDeliveryGoalList?.length) {
  64. const newSmartDeliveryGoal = newSmartDeliveryGoalList[0]
  65. form.setFieldsValue({
  66. smartDeliverySceneSpec: {
  67. smartDeliveryGoal: newSmartDeliveryGoal.value,
  68. smartDeliveryGoalSpec: {}
  69. }
  70. })
  71. }
  72. setSmartDeliveryGoalList(newSmartDeliveryGoalList)
  73. }
  74. }
  75. }, [marketingCarrierType, marketingTargetType, rules, deliveryMethod, smartDeliveryPlatform])
  76. /** 获取深度优化 出价和版位改变时查询 */
  77. const getOptimizationGoalPermissions = () => {
  78. let marketingCarrierType = OGPParams?.marketingCarrierType
  79. let bidMode = OGPParams.bidMode
  80. let siteSet = OGPParams.siteSet
  81. let automaticSiteEnabled = OGPParams.automaticSiteEnabled
  82. let marketingGoal = OGPParams.marketingGoal
  83. let marketingTargetType = OGPParams?.marketingTargetType
  84. if (marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_OFFICIAL_ACCOUNT') {
  85. marketingCarrierType = 'MARKETING_CARRIER_TYPE_WECHAT_OFFICIAL_ACCOUNT'
  86. }
  87. if ((bidMode && siteSet && siteSet?.length > 0 && marketingGoal && marketingCarrierType && marketingTargetType) || automaticSiteEnabled) {
  88. let obj: any = { siteSet: automaticSiteEnabled ? defaultSiteSet : siteSet, marketingGoal, marketingCarrierType: marketingCarrierType, marketingTargetType, marketingSubGoal: OGPParams?.marketingSubGoal || 'MARKETING_SUB_GOAL_UNKNOWN' }
  89. if (bidMode === 'BID_MODE_OCPC' || bidMode === 'BID_MODE_OCPM') {
  90. obj.bidMode = bidMode
  91. }
  92. if (putInType === 'GAME' && marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' && wxGameAppId) {
  93. obj.marketingCarrierDetail = {
  94. marketingCarrierId: wxGameAppId
  95. }
  96. }
  97. queryOptimizationGoalPermissions.run({ ...obj, taskType: putInType, accountIdList })
  98. }
  99. }
  100. useEffect(() => {
  101. if (OGPParams.marketingCarrierType && OGPParams.marketingTargetType && deliveryMethod === 'NORMAL') {
  102. getOptimizationGoalPermissions()
  103. }
  104. }, [OGPParams, putInType, wxGameAppId, accountIdList, deliveryMethod])
  105. // 处理深度转化优化
  106. useEffect(() => {
  107. if (optimizationGoal && queryOptimizationGoalPermissions?.data?.data) {
  108. let { deepBehaviorOptimizationGoalPermissionList, deepWorthOptimizationGoalPermissionList } = queryOptimizationGoalPermissions?.data?.data
  109. let behavior = deepBehaviorOptimizationGoalPermissionList?.find((item: { optimizationGoal: string }) => item.optimizationGoal === optimizationGoal)
  110. let worth = deepWorthOptimizationGoalPermissionList?.find((item: { optimizationGoal: string }) => item.optimizationGoal === optimizationGoal)
  111. let newBehaviorList = behavior?.deepBehaviorOptimizationGoalList || []
  112. setBehaviorList(newBehaviorList)
  113. let newWorthList = worth?.deepWorthOptimizationGoalList || []
  114. setWorthList(newWorthList)
  115. let newDeepConversionData: PULLIN.DataType[] = [];
  116. (newBehaviorList?.length > 0 && newDeepConversionData.push({ label: '优化转化行为', value: 'DEEP_CONVERSION_BEHAVIOR' }))
  117. { newWorthList?.length > 0 && newDeepConversionData.push({ label: '优化ROI', value: 'DEEP_CONVERSION_WORTH' }) }
  118. setDeepConversionData(newDeepConversionData)
  119. const inputInstance = form.getFieldValue('deepConversionSpec');
  120. let deepConversionType = newBehaviorList?.length > 0 ? 'DEEP_CONVERSION_BEHAVIOR' : newWorthList?.length > 0 ? "DEEP_CONVERSION_WORTH" : ''
  121. if (inputInstance?.deepConversionType ? inputInstance?.deepConversionType === 'DEEP_CONVERSION_BEHAVIOR' ? !newBehaviorList?.length : !newWorthList?.length : true) {
  122. form.setFieldsValue({
  123. deepConversionSpec: {
  124. deepConversionType
  125. }
  126. })
  127. }
  128. }
  129. }, [optimizationGoal, queryOptimizationGoalPermissions?.data?.data])
  130. // 选择营销目的触发
  131. useEffect(() => {
  132. let newRule: any = {}
  133. let newMarketingTargetTypeList: PULLIN.DataType[] = []
  134. if (marketingGoal) {
  135. // 根据const里数据对比选出可展示数据
  136. if (putInType === 'NOVEL' && (deliveryMethod === 'NORMAL' || (deliveryMethod === 'SMART' && smartDeliveryPlatform))) {
  137. if (deliveryMethod === 'SMART' && smartDeliveryPlatform) {
  138. newRule = adRules[smartDeliveryPlatform][marketingGoal]
  139. } else {
  140. newRule = adRules[marketingGoal]
  141. }
  142. newMarketingTargetTypeList = Object.keys(MARKETING_TARGET_TYPE_ENUM).filter(key => newRule?.[key]).map(key => ({ label: MARKETING_TARGET_TYPE_ENUM[key as keyof typeof MARKETING_TARGET_TYPE_ENUM], value: key }))
  143. } else if (putInType === 'GAME') {
  144. newRule = adRules[marketingGoal][marketingSubGoal]
  145. newMarketingTargetTypeList = Object.keys(MARKETING_TARGET_TYPE_GAME_ENUM).filter(key => newRule?.[key]).map(key => ({ label: MARKETING_TARGET_TYPE_GAME_ENUM[key as keyof typeof MARKETING_TARGET_TYPE_GAME_ENUM], value: key }))
  146. }
  147. }
  148. setMarketingTargetTypeList(newMarketingTargetTypeList)
  149. setRules(newRule)
  150. }, [marketingGoal, marketingSubGoal, putInType, deliveryMethod, smartDeliveryPlatform])
  151. // 推广产品设置默认值
  152. useEffect(() => {
  153. if (!(value && Object.keys(value).length > 0) && marketingTargetTypeList && (!marketingTargetType || (marketingTargetType && !marketingTargetTypeList.some(item => item.value === marketingTargetType)))) {
  154. form.setFieldsValue({ marketingTargetType: marketingTargetTypeList?.[0]?.value })
  155. }
  156. }, [marketingTargetType, marketingTargetTypeList, OGPParams, value])
  157. // 营销载体类型
  158. useEffect(() => {
  159. let newMarketingTargetTypeListList: PULLIN.DataType[] = []
  160. // 推广产品是公众号不展示 营销载体类型
  161. if (marketingTargetType) {
  162. const marketingTargetTypeRules: string[] = rules?.[marketingTargetType]?.MARKETING_SUB_GOAL_UNKNOWN
  163. 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 }))
  164. }
  165. setMarketingCarrierTypeList(newMarketingTargetTypeListList)
  166. }, [marketingTargetType, rules])
  167. // 设置营销载体默认值
  168. useEffect(() => {
  169. if (!(value && Object.keys(value).length > 0) && !marketingCarrierType || (marketingCarrierType && marketingCarrierTypeList?.length && !marketingCarrierTypeList.some(item => item.value === marketingCarrierType))) {
  170. let newMarketingCarrierType = marketingCarrierTypeList?.[0]?.value
  171. form.setFieldsValue({ marketingCarrierType: newMarketingCarrierType })
  172. setOGPparams({ ...OGPParams, marketingTargetType, marketingCarrierType: newMarketingCarrierType })
  173. }
  174. }, [marketingCarrierType, marketingCarrierTypeList, OGPParams, value, marketingTargetType])
  175. // 切换 其他 优化目标更新
  176. useEffect(() => {
  177. let optimizationGoalPermissionList: string[] = queryOptimizationGoalPermissions?.data?.data?.optimizationGoalPermissionList
  178. if (isUpdateOptimizationGoal && optimizationGoalPermissionList?.length > 0 && !optimizationGoalPermissionList?.includes(optimizationGoal)) {
  179. if (putInType === 'NOVEL') {
  180. form.setFieldsValue({ optimizationGoal: optimizationGoalPermissionList?.includes('OPTIMIZATIONGOAL_ECOMMERCE_ORDER') ? 'OPTIMIZATIONGOAL_ECOMMERCE_ORDER' : optimizationGoalPermissionList?.includes('OPTIMIZATIONGOAL_PAGE_SCAN_CODE') ? 'OPTIMIZATIONGOAL_PAGE_SCAN_CODE' : undefined })
  181. } else if (putInType === 'GAME') {
  182. form.setFieldsValue({ optimizationGoal: (optimizationGoalPermissionList?.includes('OPTIMIZATIONGOAL_ECOMMERCE_ORDER') ? 'OPTIMIZATIONGOAL_ECOMMERCE_ORDER' : optimizationGoalPermissionList?.[0]) || undefined })
  183. }
  184. setIsUpdateOptimizationGoal(false)
  185. }
  186. }, [queryOptimizationGoalPermissions?.data?.data?.optimizationGoalPermissionList, marketingGoal, marketingTargetType, marketingCarrierType, optimizationGoal, value, isUpdateOptimizationGoal, putInType])
  187. const setIsUpdate = () => {
  188. if (bidMode === 'BID_MODE_OCPM' || bidMode === 'BID_MODE_OCPC') {
  189. setIsUpdateOptimizationGoal(true)
  190. }
  191. form.setFieldsValue({
  192. deepConversionSpec: {
  193. deepConversionType,
  194. ...(deepConversionType === 'DEEP_CONVERSION_BEHAVIOR' ? {
  195. deepConversionBehaviorSpec: {
  196. goal: undefined
  197. }
  198. } : {
  199. deepConversionWorthSpec: {
  200. goal: undefined
  201. }
  202. })
  203. }
  204. })
  205. }
  206. return <Card
  207. title={<strong style={{ fontSize: 18 }}>营销内容</strong>}
  208. className="cardResetCss"
  209. >
  210. <Form.Item name="marketingGoal" label={<strong>营销目的</strong>} rules={[{ required: true, message: '请选择营销目的!' }]} hidden={putInType === 'GAME'}>
  211. <MarketingGoal
  212. data={putInType === 'GAME' ? marketingGoalGameList :
  213. deliveryMethod === 'NORMAL' ? marketingGoalList :
  214. marketingGoalList.filter(item => smartDeliveryPlatform ? Object.keys(adRules[smartDeliveryPlatform]).includes(item.value) : false)
  215. }
  216. onChange={(e) => {
  217. if (e === 'MARKETING_GOAL_LEAD_RETENTION' && ['MARKETING_TARGET_TYPE_APP_ANDROID', 'MARKETING_TARGET_TYPE_APP_IOS'].includes(marketingTargetType)) {
  218. form.setFieldsValue({
  219. marketingTargetType: 'MARKETING_TARGET_TYPE_FICTION',
  220. })
  221. }
  222. setOGPparams({ ...OGPParams, marketingGoal: e as string });
  223. setIsUpdate()
  224. }}
  225. />
  226. </Form.Item>
  227. {putInType === 'GAME' && <Form.Item name="marketingSubGoal" label={<strong>营销目的</strong>} rules={[{ required: true, message: '请选择营销目的!' }]}>
  228. <MarketingGoal data={marketingSubGoalGameList} onChange={(e) => { setOGPparams({ ...OGPParams, marketingSubGoal: e as string }); setIsUpdate() }} />
  229. </Form.Item>}
  230. {marketingTargetTypeList?.length > 0 && <Form.Item name="marketingTargetType" label={<strong>推广产品</strong>} rules={[{ required: true, message: '请选择推广产品!' }]}>
  231. <NewRadio data={marketingTargetTypeList} onChange={(e) => {
  232. if (e === 'MARKETING_CARRIER_TYPE_WECHAT_OFFICIAL_ACCOUNT') { // 公众号
  233. setOGPparams({ ...OGPParams, marketingTargetType: e, marketingCarrierType: 'MARKETING_CARRIER_TYPE_WECHAT_OFFICIAL_ACCOUNT' })
  234. form.setFieldsValue({ marketingCarrierType: 'MARKETING_CARRIER_TYPE_WECHAT_OFFICIAL_ACCOUNT' })
  235. } else {
  236. setOGPparams({ ...OGPParams, marketingTargetType: e })
  237. }
  238. setIsUpdate()
  239. }} />
  240. </Form.Item>}
  241. {marketingCarrierTypeList?.length > 0 && <Form.Item name="marketingCarrierType" label={<strong>营销载体类型</strong>} rules={[{ required: true, message: '请选择营销载体类型!' }]}>
  242. <New1Radio data={marketingCarrierTypeList} onChange={(e) => { setOGPparams({ ...OGPParams, marketingCarrierType: e }); setIsUpdate() }} />
  243. </Form.Item>}
  244. {marketingTargetType === 'MARKETING_TARGET_TYPE_MINI_PROGRAM_WECHAT' ? <Form.Item name='sysWechatAppId' rules={[{ required: true, message: '请选择微信小程序' }]}>
  245. <SelectMiniProgramWechat />
  246. </Form.Item> : marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_WORK' ? <Form.Item name='tencentCorpId' rules={[{ required: true, message: '请选择企业微信' }]}>
  247. <SelectCorpWechat />
  248. </Form.Item> : marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' ? <Form.Item name='wxGameAppId' rules={[{ required: true, message: '请选择微信小游戏' }]}>
  249. <SelectGameAppId gameType="WXGAME" />
  250. </Form.Item> : null}
  251. {['MARKETING_CARRIER_TYPE_APP_ANDROID', 'MARKETING_CARRIER_TYPE_APP_IOS'].includes(marketingCarrierType) && <Form.Item name='promoteApplicationId' rules={[{ required: true, message: '请选择推广应用' }]}>
  252. <SelectApplication type={marketingCarrierType === 'MARKETING_CARRIER_TYPE_APP_ANDROID' ? 'ANDROID' : marketingCarrierType === 'MARKETING_CARRIER_TYPE_APP_IOS' ? 'IOS' : undefined} />
  253. </Form.Item>}
  254. {(bidMode === 'BID_MODE_OCPM' || bidMode === 'BID_MODE_OCPC') && <>
  255. {['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', 'MARKETING_CARRIER_TYPE_WECHAT_OFFICIAL_ACCOUNT'].includes(marketingCarrierType) && <Form.Item
  256. label={<Space>
  257. <strong>转化归因新链路</strong>
  258. <Tooltip title={<>
  259. <h5 style={{ color: '#FFF' }}>注意账号需要开通权限,该功能与“精准匹配归因”互斥;</h5>
  260. <p>
  261. 转化中包含你希望高效获取的行为作为优化目标,深度优化目标,以及转化数据上报和归因的方式。
  262. 我们将按照你设置的优化目标,为你尽可能找到实现转化的用户。
  263. 你可以在工具箱-转化归因模块进行转化配置。
  264. <a href="https://e.qq.com/ads/helpcenter/detail/?cid=3529&pid=3179" target="__blank">了解更多</a>
  265. </p>
  266. </>}>
  267. <QuestionCircleFilled />
  268. </Tooltip>
  269. </Space>}
  270. name='isConversion'
  271. help="注意账号需要开通权限"
  272. >
  273. <New1Radio data={[{ label: '开启', value: true }, { label: '关闭', value: false, disabled: deliveryMethod === 'SMART' }]} />
  274. </Form.Item>}
  275. {/* 常规投放 优化目标 智能投放不支持 */}
  276. {deliveryMethod === 'NORMAL' ? <>
  277. <Form.Item
  278. label={<strong>优化目标</strong>}
  279. name='optimizationGoal'
  280. rules={[{ required: true, message: '请选择优化目标' }]}
  281. help={(marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' && !wxGameAppId) ? '请先选择微信小游戏' : undefined}
  282. validateStatus={(marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' && !wxGameAppId) ? 'error' : undefined}
  283. >
  284. <Select
  285. style={{ width: 480 }}
  286. showSearch
  287. filterOption={(input, option) =>
  288. (option!.children as unknown as string)?.toLowerCase()?.includes(input?.toLowerCase())
  289. }
  290. disabled={(marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' && !wxGameAppId)}
  291. allowClear
  292. placeholder='请选择'
  293. loading={queryOptimizationGoalPermissions.loading}
  294. >
  295. {queryOptimizationGoalPermissions?.data?.data?.optimizationGoalPermissionList.filter((key: string) => key !== 'UNKNOWN').map((key: string) => {
  296. return <Select.Option value={key} key={key}>{OPTIMIZATIONGOAL_ENUM[key as keyof typeof OPTIMIZATIONGOAL_ENUM]}</Select.Option>
  297. })}
  298. </Select>
  299. </Form.Item>
  300. {/* 深度优化 */}
  301. {((behaviorList?.length > 0 || worthList?.length > 0) && (marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' ? !!wxGameAppId : true) && (putInType === 'GAME' ? bidScene !== 'BID_SCENE_NORMAL_MAX' : smartBidType !== 'SMART_BID_TYPE_SYSTEMATIC')) && <>
  302. <Form.Item label={<strong>深度转化优化</strong>} name='depthConversionEnabled' valuePropName="checked">
  303. <Switch
  304. disabled={(marketingTargetType === 'MARKETING_TARGET_TYPE_WECHAT_MINI_GAME' && !wxGameAppId)}
  305. checkedChildren="开启"
  306. unCheckedChildren="关闭"
  307. onChange={(e) => {
  308. if (e) {
  309. if (behaviorList?.length > 0) {
  310. form.setFieldsValue({
  311. deepConversionSpec: {
  312. deepConversionType: 'DEEP_CONVERSION_BEHAVIOR',
  313. }
  314. })
  315. } else if (worthList?.length > 0) {
  316. form.setFieldsValue({
  317. deepConversionSpec: {
  318. deepConversionType: 'DEEP_CONVERSION_WORTH',
  319. deepConversionWorthSpec: { roiAllocationMode: 1 }
  320. }
  321. })
  322. } else {
  323. form.setFieldsValue({
  324. deepConversionSpec: {
  325. deepConversionType: undefined,
  326. }
  327. })
  328. }
  329. }
  330. }}
  331. />
  332. </Form.Item>
  333. {depthConversionEnabled && <>
  334. <Form.Item label={<strong>深度优化类型</strong>} name={['deepConversionSpec', 'deepConversionType']} rules={[{ required: true, message: '请选择深度优化类型' }]}>
  335. <New1Radio
  336. data={deepConversionData}
  337. onChange={(e) => {
  338. form.setFieldsValue({
  339. deepConversionSpec: {
  340. deepConversionType: e,
  341. ...(e === 'DEEP_CONVERSION_WORTH' ? { deepConversionWorthSpec: { roiAllocationMode: 1 } } : {})
  342. }
  343. })
  344. }}
  345. />
  346. </Form.Item>
  347. <Form.Item label={<strong>深度优化目标</strong>} name={['deepConversionSpec', deepConversionType === 'DEEP_CONVERSION_BEHAVIOR' ? 'deepConversionBehaviorSpec' : 'deepConversionWorthSpec', 'goal']} rules={[{ required: true, message: '请选择深度优化目标' }]}>
  348. <Select style={{ width: 480 }} placeholder='请选择'>
  349. {deepConversionType === 'DEEP_CONVERSION_BEHAVIOR' ? Object.keys(OPTIMIZATIONGOAL_ENUM).filter(key => behaviorList?.includes(key)).map(key => <Select.Option value={key} key={key}>{OPTIMIZATIONGOAL_ENUM[key as keyof typeof OPTIMIZATIONGOAL_ENUM]}</Select.Option>) : deepConversionType === 'DEEP_CONVERSION_WORTH' ?
  350. Object.keys(GOAL_ROAS_ENUM).filter(key => worthList?.includes(key)).map(key => <Select.Option value={key} key={key}>{GOAL_ROAS_ENUM[key as keyof typeof GOAL_ROAS_ENUM]}</Select.Option>) : null}
  351. </Select>
  352. </Form.Item>
  353. </>}
  354. </>}
  355. </> : <>
  356. {/* 智能投放 投放目标 */}
  357. {(smartDeliveryGoalList?.length > 0 && deliveryMethod === 'SMART') && <Form.Item name={['smartDeliverySceneSpec', 'smartDeliveryGoal']} label={<strong>投放目标</strong>} rules={[{ required: true, message: '请选择投放目标!' }]}>
  358. <New1Radio data={smartDeliveryGoalList} />
  359. </Form.Item>}
  360. </>}
  361. </>}
  362. </Card>
  363. }
  364. export default React.memo(AdgroupsMarketingContent)