|
@@ -1,6 +1,6 @@
|
|
|
import React, { useCallback, useEffect, useState } from 'react'
|
|
|
import { Modal, Form, Input, Divider, Select, Radio, DatePicker, Switch, Checkbox, message, Tooltip, Row, Col, Space, TimePicker, Button } from 'antd'
|
|
|
-import { BidModeEnum, OptimizationGoalEnum, BidStrategyEnum, AdStatus } from '@/services/launchAdq/enum'
|
|
|
+import { BidModeEnum, OptimizationGoalEnum, BidStrategyEnum, AdStatus, GoalRoasEnum } from '@/services/launchAdq/enum'
|
|
|
import { ModalConfig } from '../index'
|
|
|
import moment from 'moment';
|
|
|
import { useAjax } from '@/Hook/useAjax';
|
|
@@ -8,6 +8,8 @@ import { getSceneTagsList } from '@/services/launchAdq/global';
|
|
|
import { ExclamationCircleOutlined } from '@ant-design/icons';
|
|
|
import { CreateAdProps } from '@/services/launchAdq/createAd';
|
|
|
import { createSysAdgroups } from '@/services/launchAdq/localAd';
|
|
|
+import AdPositionList from './adPositionList';
|
|
|
+import BidAdjustment from './bidAdjustment';
|
|
|
const { RangePicker }: { RangePicker: any } = DatePicker;
|
|
|
let DatePickers: any = DatePicker
|
|
|
interface Props {
|
|
@@ -20,6 +22,23 @@ interface Props {
|
|
|
dataInfo?: any,
|
|
|
ajax: any
|
|
|
}
|
|
|
+
|
|
|
+const siteSetData = [
|
|
|
+ { siteSet: 'SITE_SET_MOMENTS', type: 1 },
|
|
|
+ { siteSet: 'SITE_SET_MOBILE_UNION', type: 3 },
|
|
|
+ { siteSet: 'SITE_SET_TENCENT_NEWS', type: 2 },
|
|
|
+ { siteSet: 'SITE_SET_TENCENT_VIDEO', type: 2 },
|
|
|
+ { siteSet: 'SITE_SET_KANDIAN', type: 2 },
|
|
|
+ { siteSet: 'SITE_SET_QQ_MUSIC_GAME', type: 2 },
|
|
|
+ { siteSet: 'SITE_SET_WECHAT', type: 4 },
|
|
|
+]
|
|
|
+
|
|
|
+export interface SiteSetPackageDataProps {
|
|
|
+ siteSet: string[],
|
|
|
+ bidCoefficient?: number,
|
|
|
+ deepBidCoefficient?: number
|
|
|
+}
|
|
|
+
|
|
|
/**收集线索广告弹窗*/
|
|
|
function LeadAdModal(props: Props) {
|
|
|
let { visible, confirmLoading, PupFn, callback, type, dataInfo, queryForm, ajax } = props
|
|
@@ -40,6 +59,21 @@ function LeadAdModal(props: Props) {
|
|
|
let wechatSceneType = Form.useWatch('wechatSceneType', form)
|
|
|
let automaticSiteEnabled = Form.useWatch('automaticSiteEnabled', form)
|
|
|
let optimizationGoal = Form.useWatch('optimizationGoal', form)
|
|
|
+
|
|
|
+ let depthConversionEnabled = Form.useWatch('depthConversionEnabled', form)
|
|
|
+ let deepConversionType = Form.useWatch('deepConversionType', form)
|
|
|
+ let goal = Form.useWatch('goal', form)
|
|
|
+ let bidAdjustmentEnabled = Form.useWatch('bidAdjustmentEnabled', form)
|
|
|
+ let siteSetPackage = Form.useWatch('siteSetPackage', form)
|
|
|
+ let deepBidAmount = Form.useWatch('deepBidAmount', form)
|
|
|
+ let bidAmountAdjustmentEnabled = Form.useWatch('bidAmountAdjustmentEnabled', form)
|
|
|
+ let bidAmount = Form.useWatch('bidAmount', form)
|
|
|
+
|
|
|
+ const [behaviorList, setBehaviorList] = useState<string[]>([])
|
|
|
+ const [worthList, setWorthList] = useState<string[]>([])
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
// 确定事件
|
|
|
const handleOk = useCallback(() => {
|
|
|
form.validateFields().then(values => {
|
|
@@ -72,8 +106,50 @@ function LeadAdModal(props: Props) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
break;
|
|
|
+ case 'siteSetPackage': // 处理分版位出价
|
|
|
+ if (newValues[key]?.length > 0) {
|
|
|
+ let newSiteSetPackage: SiteSetPackageDataProps[] = JSON.parse(JSON.stringify(newValues[key]))
|
|
|
+ if (!newValues?.bidAmountAdjustmentEnabled) {
|
|
|
+ newSiteSetPackage = newSiteSetPackage.map(item => {
|
|
|
+ let { bidCoefficient, ...newItem } = item
|
|
|
+ return { ...newItem }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (!newValues?.bidAdjustmentEnabled) {
|
|
|
+ newSiteSetPackage = newSiteSetPackage.map(item => {
|
|
|
+ let { deepBidCoefficient, ...newItem } = item
|
|
|
+ return { ...newItem }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ newValues.bidAdjustment = {
|
|
|
+ siteSetPackage: newSiteSetPackage
|
|
|
+ }
|
|
|
+ delete newValues.siteSetPackage
|
|
|
+ }
|
|
|
+ break
|
|
|
+ case 'deepConversionType': // 处理深度优化
|
|
|
+ let deepConversionSpec: any = {
|
|
|
+ deepConversionType: newValues[key]
|
|
|
+ }
|
|
|
+ if (newValues[key] === 'DEEP_CONVERSION_WORTH') { // 优化 ROI
|
|
|
+ deepConversionSpec.deepConversionWorthSpec = {
|
|
|
+ goal: newValues.goal,
|
|
|
+ expectedroi: newValues.deepBidAmount
|
|
|
+ }
|
|
|
+ } else if (newValues[key] === 'DEEP_CONVERSION_BEHAVIOR') { // 优化转化行为
|
|
|
+ deepConversionSpec.deepConversionBehaviorSpec = {
|
|
|
+ goal: newValues.goal,
|
|
|
+ bidAmount: newValues.deepBidAmount * 100
|
|
|
+ }
|
|
|
+ }
|
|
|
+ newValues.deepConversionSpec = deepConversionSpec
|
|
|
+ delete newValues.deepBidAmount
|
|
|
+ delete newValues.goal
|
|
|
+ delete newValues.optimizationMode
|
|
|
+ delete newValues.deepConversionType
|
|
|
+ delete newValues.depthConversionEnabled
|
|
|
+ break
|
|
|
}
|
|
|
})
|
|
|
if (newValues.sceneSpec.wechatPosition?.length === 0) {
|
|
@@ -89,6 +165,8 @@ function LeadAdModal(props: Props) {
|
|
|
}
|
|
|
delete newValues.officialAccountMediaCategory
|
|
|
delete newValues.miniProgramAndMiniGame
|
|
|
+ delete newValues?.bidAmountAdjustmentEnabled
|
|
|
+ delete newValues?.bidAdjustmentEnabled
|
|
|
delete newValues.payScene
|
|
|
delete newValues.wechatPositionType
|
|
|
delete newValues.wechatPosition
|
|
@@ -118,7 +196,7 @@ function LeadAdModal(props: Props) {
|
|
|
// 数据回填
|
|
|
useEffect(() => {
|
|
|
if (dataInfo) {
|
|
|
- form.setFieldsValue({
|
|
|
+ let formData: any = {
|
|
|
adgroupName: dataInfo?.adgroupName,//广告名称
|
|
|
promotedObjectType: dataInfo?.promotedObjectType,//推广目标
|
|
|
siteSet: dataInfo?.siteSet,//广告版位
|
|
@@ -140,7 +218,49 @@ function LeadAdModal(props: Props) {
|
|
|
payScene: dataInfo?.sceneSpec?.wechatScene?.payScene,//订单详情页消费场景
|
|
|
firstDayBeginTime: dataInfo?.firstDayBeginTime ? moment(`${dataInfo?.beginDate} ${dataInfo?.firstDayBeginTime}`) : undefined,//首日开始时间
|
|
|
configuredStatus: dataInfo?.configuredStatus || 'AD_STATUS_SUSPEND',//广告启停
|
|
|
+ }
|
|
|
+ Object.keys(dataInfo).forEach(key => {
|
|
|
+ switch (key) {
|
|
|
+ case 'bidAdjustment': // 处理分版位出价
|
|
|
+ if (dataInfo[key]?.siteSetPackage && dataInfo[key]?.siteSetPackage?.length > 0) {
|
|
|
+ let siteSetPackage: SiteSetPackageDataProps[] = dataInfo[key].siteSetPackage
|
|
|
+ if (siteSetPackage.some(item => item.bidCoefficient)) { // 判断出价是否开启了分版位
|
|
|
+ formData.bidAmountAdjustmentEnabled = true
|
|
|
+ } else {
|
|
|
+ siteSetPackage = siteSetPackage.map(item => ({ ...item, bidCoefficient: 1 }))
|
|
|
+ }
|
|
|
+ if (siteSetPackage.some(item => item.deepBidCoefficient)) { // 判断深度出价是否开启了分版位
|
|
|
+ formData.bidAdjustmentEnabled = true
|
|
|
+ } else {
|
|
|
+ siteSetPackage = siteSetPackage.map(item => ({ ...item, deepBidCoefficient: 1 }))
|
|
|
+ }
|
|
|
+ formData.siteSetPackage = siteSetPackage
|
|
|
+ }
|
|
|
+ break
|
|
|
+ case 'deepConversionSpec': // 处理深度优化
|
|
|
+ if (dataInfo[key]?.deepConversionType === 'DEEP_CONVERSION_WORTH') {
|
|
|
+ formData = {
|
|
|
+ ...formData,
|
|
|
+ optimizationMode: 'DEEP_CONVERSION_TARGET',
|
|
|
+ depthConversionEnabled: true,
|
|
|
+ deepConversionType: dataInfo[key]?.deepConversionType,
|
|
|
+ goal: dataInfo[key]?.deepConversionWorthSpec?.goal,
|
|
|
+ deepBidAmount: dataInfo[key]?.deepConversionWorthSpec?.expectedroi,
|
|
|
+ }
|
|
|
+ } else if (dataInfo[key]?.deepConversionType === 'DEEP_CONVERSION_BEHAVIOR') {
|
|
|
+ formData = {
|
|
|
+ ...formData,
|
|
|
+ optimizationMode: 'DEEP_CONVERSION_TARGET',
|
|
|
+ depthConversionEnabled: true,
|
|
|
+ deepConversionType: dataInfo[key]?.deepConversionType,
|
|
|
+ goal: dataInfo[key]?.deepConversionBehaviorSpec?.goal,
|
|
|
+ deepBidAmount: dataInfo[key]?.deepConversionBehaviorSpec?.bidAmount / 100,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
})
|
|
|
+ form.setFieldsValue(formData)
|
|
|
if (dataInfo?.firstDayBeginTime) {//存在首日开始时间,选中开关
|
|
|
setState({ ...state, isShowTime: ['1'] })
|
|
|
}
|
|
@@ -171,6 +291,71 @@ function LeadAdModal(props: Props) {
|
|
|
})
|
|
|
}
|
|
|
}, [bidMode, siteSet])
|
|
|
+
|
|
|
+ // 处理深度转化优化
|
|
|
+ useEffect(() => {
|
|
|
+ if (optimizationGoal && ajax?.data) {
|
|
|
+ let { deepBehaviorOptimizationGoalPermissionList, deepWorthOptimizationGoalPermissionList } = ajax?.data
|
|
|
+ // deepBehaviorOptimizationGoalPermissionList 优化转化行为
|
|
|
+ // deepWorthOptimizationGoalPermissionList 优化ROI
|
|
|
+ let behavior = deepBehaviorOptimizationGoalPermissionList?.find((item: { optimizationGoal: string }) => item.optimizationGoal === optimizationGoal)
|
|
|
+ let worth = deepWorthOptimizationGoalPermissionList?.find((item: { optimizationGoal: string }) => item.optimizationGoal === optimizationGoal)
|
|
|
+ setBehaviorList(behavior?.deepBehaviorOptimizationGoalList || [])
|
|
|
+ setWorthList(worth?.deepWorthOptimizationGoalList || [])
|
|
|
+ }
|
|
|
+ }, [optimizationGoal, ajax?.data])
|
|
|
+
|
|
|
+ /**处理分版位数据 */
|
|
|
+ const setSiteSetHandle = (siteSet: string[]) => {
|
|
|
+ let data: SiteSetPackageDataProps[] = []
|
|
|
+ if (siteSet && siteSet?.length > 0) {
|
|
|
+ let data1: string[] = []
|
|
|
+ let data2: string[] = []
|
|
|
+ let data3: string[] = []
|
|
|
+ let data4: string[] = []
|
|
|
+ siteSet.forEach((item: string) => {
|
|
|
+ let siteData = siteSetData?.find(item1 => item1.siteSet === item)
|
|
|
+ if (siteData) {
|
|
|
+ switch (siteData.type) {
|
|
|
+ case 1:
|
|
|
+ data1.push(item)
|
|
|
+ break
|
|
|
+ case 2:
|
|
|
+ data2.push(item)
|
|
|
+ break
|
|
|
+ case 3:
|
|
|
+ data3.push(item)
|
|
|
+ break
|
|
|
+ case 4:
|
|
|
+ data4.push(item)
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ let newSiteSetPackageData: SiteSetPackageDataProps[] = []
|
|
|
+ if (data1?.length > 0) {
|
|
|
+ newSiteSetPackageData.push({ siteSet: data1, bidCoefficient: 1, deepBidCoefficient: 1 })
|
|
|
+ }
|
|
|
+ if (data2?.length > 0) {
|
|
|
+ newSiteSetPackageData.push({ siteSet: data2, bidCoefficient: 1, deepBidCoefficient: 1 })
|
|
|
+ }
|
|
|
+ if (data3?.length > 0) {
|
|
|
+ newSiteSetPackageData.push({ siteSet: data3, bidCoefficient: 1, deepBidCoefficient: 1 })
|
|
|
+ }
|
|
|
+ if (data4?.length > 0) {
|
|
|
+ newSiteSetPackageData.push({ siteSet: data4, bidCoefficient: 1, deepBidCoefficient: 1 })
|
|
|
+ }
|
|
|
+ data = newSiteSetPackageData
|
|
|
+ } else {
|
|
|
+ data = []
|
|
|
+ }
|
|
|
+ form.setFieldsValue({
|
|
|
+ siteSetPackage: data
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('siteSetPackage--->', siteSetPackage, bidAdjustmentEnabled, siteSet);
|
|
|
+
|
|
|
return <Modal
|
|
|
visible={visible}
|
|
|
title={type === 'add' ? '新建广告' : type === 'look' ? '广告详情' : '编辑广告'}
|
|
@@ -206,7 +391,8 @@ function LeadAdModal(props: Props) {
|
|
|
wechatSceneType: '0',
|
|
|
wechatPositionType: '0',
|
|
|
// optimizationGoal: 'OPTIMIZATIONGOAL_ECOMMERCE_ORDER',
|
|
|
- configuredStatus: 'AD_STATUS_SUSPEND'
|
|
|
+ configuredStatus: 'AD_STATUS_SUSPEND',
|
|
|
+ siteSetPackage: [{ siteSet: ["SITE_SET_MOMENTS"], bidCoefficient: 1, deepBidCoefficient: 1 }, { siteSet: ["SITE_SET_WECHAT"], bidCoefficient: 1, deepBidCoefficient: 1 }]
|
|
|
}
|
|
|
}
|
|
|
>
|
|
@@ -223,7 +409,7 @@ function LeadAdModal(props: Props) {
|
|
|
</Radio.Group>
|
|
|
</Form.Item>
|
|
|
{!automaticSiteEnabled && <Form.Item name='siteSet' noStyle rules={[{ required: true, message: '请输入选择广告版位!' }]}>
|
|
|
- <Checkbox.Group style={{ width: '100%' }} onChange={() => { bidModeChange({ bidMode: 'BID_MODE_OCPM' }) }}>
|
|
|
+ <Checkbox.Group style={{ width: '100%' }} onChange={(e) => { bidModeChange({ bidMode: 'BID_MODE_OCPM' }); setSiteSetHandle(e as string[]) }}>
|
|
|
<Row>
|
|
|
<Col span={4}>
|
|
|
<Checkbox value="SITE_SET_MOMENTS">微信朋友圈</Checkbox>
|
|
@@ -238,7 +424,7 @@ function LeadAdModal(props: Props) {
|
|
|
<Checkbox value="SITE_SET_TENCENT_VIDEO">腾讯视频</Checkbox>
|
|
|
</Col>
|
|
|
<Col span={4}>
|
|
|
- <Checkbox value="SITE_SET_KANDIAN">腾讯看点</Checkbox>
|
|
|
+ <Checkbox value="SITE_SET_KANDIAN">QQ 浏览器</Checkbox>
|
|
|
</Col>
|
|
|
<Col span={6}>
|
|
|
<Checkbox value="SITE_SET_QQ_MUSIC_GAME">QQ、腾讯音乐及游戏</Checkbox>
|
|
@@ -358,15 +544,28 @@ function LeadAdModal(props: Props) {
|
|
|
</>
|
|
|
}
|
|
|
{/* 出价类型为手动出价才展示 */}
|
|
|
- {
|
|
|
- smartBidType !== 'SMART_BID_TYPE_SYSTEMATIC' && <>
|
|
|
- <Form.Item label={<strong>出价</strong>} name='bidAmount' rules={[{ required: true, message: '请输入价格' }]}>
|
|
|
- <Input placeholder={`输入价格 元/${bidMode === 'BID_MODE_CPM' ? '千次曝光' : bidMode === 'BID_MODE_CPC' ? '点击' : OptimizationGoalEnum[optimizationGoal]}`} style={{ width: 300 }} />
|
|
|
- </Form.Item>
|
|
|
+ {smartBidType !== 'SMART_BID_TYPE_SYSTEMATIC' && <>
|
|
|
+ <Form.Item label={<strong>出价</strong>} name='bidAmount' rules={[{ required: true, message: '请输入价格' }]}>
|
|
|
+ <Input placeholder={`输入价格 元/${bidMode === 'BID_MODE_CPM' ? '千次曝光' : bidMode === 'BID_MODE_CPC' ? '点击' : OptimizationGoalEnum[optimizationGoal]}`} style={{ width: 300 }} />
|
|
|
+ </Form.Item>
|
|
|
+ {(bidMode === 'BID_MODE_OCPM' || bidMode === 'BID_MODE_OCPC') && <>
|
|
|
{/* 当版位选择大于1时才出现 */}
|
|
|
- {/* {siteSet?.length > 1 &&<Form.Item label={<strong>分版位出价</strong>} name='bidAdjustment'>
|
|
|
+ {siteSet?.length > 1 && <Form.Item label={<strong>分版位出价</strong>} name='bidAmountAdjustmentEnabled' valuePropName="checked">
|
|
|
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
|
- </Form.Item>} */}
|
|
|
+ </Form.Item>}
|
|
|
+ {bidAmountAdjustmentEnabled && <Form.Item
|
|
|
+ label={<strong>分版位出价</strong>}
|
|
|
+ name='siteSetPackage'
|
|
|
+ rules={[{ required: bidAmountAdjustmentEnabled ? true : false, message: '请设置系数' }]}
|
|
|
+ >
|
|
|
+ <BidAdjustment bidAmount={bidAmount} deepConversionType='BID_MODE' goal={goal}>
|
|
|
+ <AdPositionList value={siteSetPackage} onChange={(data) => {
|
|
|
+ form.setFieldsValue({
|
|
|
+ siteSetPackage: data
|
|
|
+ })
|
|
|
+ }} />
|
|
|
+ </BidAdjustment>
|
|
|
+ </Form.Item>}
|
|
|
<Form.Item label={<strong>一键起量</strong>} name='autoAcquisitionEnabled' valuePropName="checked">
|
|
|
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
|
</Form.Item>
|
|
@@ -374,8 +573,70 @@ function LeadAdModal(props: Props) {
|
|
|
{autoAcquisitionEnabled && <Form.Item label={<strong>起量预算</strong>} name='autoAcquisitionBudget' rules={[{ required: true, message: '请输入起量预算' }]}>
|
|
|
<Input placeholder='起量预算' style={{ width: 300 }} />
|
|
|
</Form.Item>}
|
|
|
- </>
|
|
|
- }
|
|
|
+
|
|
|
+ {/* 深度优化 */}
|
|
|
+ {(behaviorList?.length > 0 || worthList?.length > 0) && <Form.Item label={<strong>深度转化优化</strong>} name='depthConversionEnabled' valuePropName="checked">
|
|
|
+ <Switch checkedChildren="开启" unCheckedChildren="关闭" onChange={(e) => {
|
|
|
+ if (e) {
|
|
|
+ form.setFieldsValue({
|
|
|
+ optimizationMode: 'DEEP_CONVERSION_TARGET',
|
|
|
+ deepConversionType: behaviorList?.length > 0 ? 'DEEP_CONVERSION_BEHAVIOR' : worthList?.length > 0 ? 'DEEP_CONVERSION_WORTH' : ''
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }} />
|
|
|
+ </Form.Item>}
|
|
|
+ {depthConversionEnabled && <div style={{ backgroundColor: 'rgb(247, 248, 250)', padding: '18px 0 3px', marginBottom: 10, borderRadius: 8 }}>
|
|
|
+ <Form.Item label={<strong>深度优化方式</strong>} name='optimizationMode' rules={[{ required: true, message: '请选择深度优化方式' }]}>
|
|
|
+ <Radio.Group>
|
|
|
+ <Radio.Button value="DEEP_CONVERSION_TARGET">深度目标优化</Radio.Button>
|
|
|
+ </Radio.Group>
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label={<strong>深度优化类型</strong>} name='deepConversionType' rules={[{ required: true, message: '请选择深度优化类型' }]}>
|
|
|
+ <Radio.Group onChange={() => {
|
|
|
+ form.setFieldsValue({
|
|
|
+ goal: undefined,
|
|
|
+ deepBidAmount: undefined
|
|
|
+ })
|
|
|
+ }}>
|
|
|
+ {behaviorList?.length > 0 && <Radio.Button value="DEEP_CONVERSION_BEHAVIOR">优化转化行为</Radio.Button>}
|
|
|
+ {worthList?.length > 0 && <Radio.Button value="DEEP_CONVERSION_WORTH">优化 ROI</Radio.Button>}
|
|
|
+ </Radio.Group>
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label={<strong>深度优化目标</strong>} name='goal' rules={[{ required: true, message: '请选择深度优化目标' }]}>
|
|
|
+ <Select style={{ width: 380 }} placeholder='请选择'>
|
|
|
+ {deepConversionType === 'DEEP_CONVERSION_BEHAVIOR' ? Object.keys(OptimizationGoalEnum).filter(key => behaviorList?.includes(key)).map(key => <Select.Option value={key} key={key}>{OptimizationGoalEnum[key]}</Select.Option>) : deepConversionType === 'DEEP_CONVERSION_WORTH' ?
|
|
|
+ Object.keys(GoalRoasEnum).filter(key => worthList?.includes(key)).map(key => <Select.Option value={key} key={key}>{GoalRoasEnum[key]}</Select.Option>) : null}
|
|
|
+ </Select>
|
|
|
+ </Form.Item>
|
|
|
+ {deepConversionType === 'DEEP_CONVERSION_BEHAVIOR' ? <>
|
|
|
+ <Form.Item label={<strong>深度目标出价</strong>} name='deepBidAmount' rules={[{ required: true, message: '请输入深度目标出价' }]}>
|
|
|
+ <Input style={{ width: 380 }} suffix={`元/${OptimizationGoalEnum[goal] || '优化目标'}`} placeholder={`请输入深度目标出价,范围0.1~10000`} />
|
|
|
+ </Form.Item>
|
|
|
+ </> :
|
|
|
+ deepConversionType === 'DEEP_CONVERSION_WORTH' ? <>
|
|
|
+ <Form.Item label={<strong>期望ROI</strong>} name='deepBidAmount' rules={[{ required: true, message: '请输入期望ROI' }]}>
|
|
|
+ <Input style={{ width: 380 }} placeholder={`期望ROI目标范围0.001~1000,输入0.05,表示ROI目标为5%`} />
|
|
|
+ </Form.Item>
|
|
|
+ </> : null}
|
|
|
+ {siteSet?.length > 1 && <Form.Item label={<strong>开启分版位深度目标出价</strong>} name='bidAdjustmentEnabled' valuePropName="checked">
|
|
|
+ <Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
|
+ </Form.Item>}
|
|
|
+ {bidAdjustmentEnabled && <Form.Item
|
|
|
+ label={<strong>分版位深度目标出价</strong>}
|
|
|
+ name='siteSetPackage'
|
|
|
+ rules={[{ required: bidAdjustmentEnabled ? true : false, message: '请设置系数' }]}
|
|
|
+ >
|
|
|
+ <BidAdjustment bidAmount={deepBidAmount} deepConversionType={deepConversionType} goal={goal}>
|
|
|
+ {!(bidAmountAdjustmentEnabled) ? <AdPositionList value={siteSetPackage} onChange={(data) => {
|
|
|
+ form.setFieldsValue({
|
|
|
+ siteSetPackage: data
|
|
|
+ })
|
|
|
+ }} /> : <></>}
|
|
|
+ </BidAdjustment>
|
|
|
+ </Form.Item>}
|
|
|
+ </div>}
|
|
|
+ </>}
|
|
|
+ </>}
|
|
|
<Form.Item label={<strong>广告日预算</strong>} name='dailyBudget'>
|
|
|
<Input placeholder='不填默认为不限' style={{ width: 300 }} />
|
|
|
</Form.Item>
|