|
@@ -1,5 +1,5 @@
|
|
|
import React, { useCallback, useEffect, useState } from 'react'
|
|
|
-import { Modal, Form, Input, Divider, Select, Radio, DatePicker, Switch, Checkbox, Tooltip, Row, Col, Space, TimePicker, Button } from 'antd'
|
|
|
+import { Modal, Form, Input, Divider, Select, Radio, DatePicker, Switch, Checkbox, Tooltip, Row, Col, Space, TimePicker, Button, InputNumber } from 'antd'
|
|
|
import { BidModeEnum, OptimizationGoalEnum, BidStrategyEnum, AdStatus, GoalRoasEnum } from '@/services/launchAdq/enum'
|
|
|
import { ModalConfig } from '../index'
|
|
|
import moment from 'moment';
|
|
@@ -54,6 +54,9 @@ function WeChatAdModal(props: Props) {
|
|
|
let deepBidAmount = Form.useWatch('deepBidAmount', form)
|
|
|
let bidAmountAdjustmentEnabled = Form.useWatch('bidAmountAdjustmentEnabled', form)
|
|
|
let bidAmount = Form.useWatch('bidAmount', form)
|
|
|
+ let amountModel = Form.useWatch('amountModel', form)
|
|
|
+ let bidAmountMax = Form.useWatch('bidAmountMax', form)
|
|
|
+ let bidAmountMin = Form.useWatch('bidAmountMin', form)
|
|
|
|
|
|
const [behaviorList, setBehaviorList] = useState<string[]>([])
|
|
|
const [worthList, setWorthList] = useState<string[]>([])
|
|
@@ -186,6 +189,9 @@ function WeChatAdModal(props: Props) {
|
|
|
siteSet: dataInfo?.siteSet,//广告版位
|
|
|
autoAcquisitionEnabled: dataInfo?.autoAcquisitionEnabled,//一键起量
|
|
|
bidAmount: dataInfo?.bidAmount,//出价
|
|
|
+ amountModel: dataInfo?.amountModel,
|
|
|
+ bidAmountMin: dataInfo?.bidAmountMin,
|
|
|
+ bidAmountMax: dataInfo?.bidAmountMax,
|
|
|
smartBidType: dataInfo?.smartBidType,//出价类型
|
|
|
bidStrategy: dataInfo?.bidStrategy,//出价策略
|
|
|
bidMode: dataInfo?.bidMode,//出价方式
|
|
@@ -251,6 +257,7 @@ function WeChatAdModal(props: Props) {
|
|
|
}
|
|
|
} else {
|
|
|
form.setFieldsValue({
|
|
|
+ amountModel: 1,
|
|
|
adgroupName: '广告_微信朋友圈', // + moment().format('YYYYMMDDhhmmss') + '_' + currentUser.userId,
|
|
|
date: moment().startOf('day').add(2, 'M'),
|
|
|
optimizationGoal: "OPTIMIZATIONGOAL_ECOMMERCE_ORDER",
|
|
@@ -375,6 +382,7 @@ function WeChatAdModal(props: Props) {
|
|
|
className='ad_form_style'
|
|
|
initialValues={
|
|
|
{
|
|
|
+ amountModel: 1,
|
|
|
promotedObjectType: queryForm.promotedObjectType,
|
|
|
siteSet: ['SITE_SET_MOMENTS', 'SITE_SET_WECHAT', 'SITE_SET_WECHAT_PLUGIN'],
|
|
|
bidMode: 'BID_MODE_OCPM',
|
|
@@ -618,28 +626,81 @@ function WeChatAdModal(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 label={<strong>出价模式</strong>} name='amountModel'>
|
|
|
+ <Radio.Group>
|
|
|
+ <Radio.Button value={0}>固定价格</Radio.Button>
|
|
|
+ <Radio.Button value={1}>随机价格</Radio.Button>
|
|
|
+ </Radio.Group>
|
|
|
</Form.Item>
|
|
|
+ {amountModel === 1 ? <>
|
|
|
+ <Form.Item label={<strong>最小广告出价</strong>} name='bidAmountMin' rules={[
|
|
|
+ { required: true, message: '请输入最小出价' },
|
|
|
+ {
|
|
|
+ required: true, message: `需要小于最大出价`, validator(rule, value, callback) {
|
|
|
+ let regPos = /^[0-9]+.?[0-9]*/; //判断是否是数字。
|
|
|
+ if (!bidAmountMax) {
|
|
|
+ return Promise.resolve()
|
|
|
+ } else {
|
|
|
+ if (!regPos.test(value)) {
|
|
|
+ return Promise.reject()
|
|
|
+ }
|
|
|
+ if (value < bidAmountMax) {
|
|
|
+ return Promise.resolve()
|
|
|
+ } else {
|
|
|
+ return Promise.reject()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ }
|
|
|
+ ]}>
|
|
|
+ <InputNumber placeholder="输入最小出价" style={{ width: 150 }} />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label={<strong>最大广告出价</strong>} name='bidAmountMax' rules={[
|
|
|
+ { required: true, message: '请输入最大出价' },
|
|
|
+ {
|
|
|
+ required: true, message: `需要大于最小出价`, validator(rule, value, callback) {
|
|
|
+ let regPos = /^[0-9]+.?[0-9]*/; //判断是否是数字。
|
|
|
+ if (!bidAmountMin) {
|
|
|
+ return Promise.resolve()
|
|
|
+ } else {
|
|
|
+ if (!regPos.test(value)) {
|
|
|
+ return Promise.reject()
|
|
|
+ }
|
|
|
+ if (value > bidAmountMin) {
|
|
|
+ return Promise.resolve()
|
|
|
+ } else {
|
|
|
+ return Promise.reject()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ }
|
|
|
+ ]}>
|
|
|
+ <InputNumber placeholder={`输入最大出价`} style={{ width: 150 }} />
|
|
|
+ </Form.Item>
|
|
|
+ </> : <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' && <>
|
|
|
{/* 当版位选择大于1时才出现 */}
|
|
|
- {siteSet?.length > 1 && <Form.Item label={<strong>分版位出价</strong>} name='bidAmountAdjustmentEnabled' valuePropName="checked">
|
|
|
- <Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
|
- </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>}
|
|
|
+ {amountModel === 1 && <>
|
|
|
+ {siteSet?.length > 1 && <Form.Item label={<strong>分版位出价</strong>} name='bidAmountAdjustmentEnabled' valuePropName="checked">
|
|
|
+ <Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
|
+ </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>
|