import { useAjax } from "@/Hook/useAjax" import { delBatchApi, modifyAdTimeBatchApi, modifyAmountBatchApi, modifyDailyBudgetBatchApi, updateBatchAdgroupInfoApi } from "@/services/launchAdq/adqv3" import { Button, Card, DatePicker, Form, Input, InputNumber, Modal, Radio, Select, Space, Table, message } from "antd" import React, { useEffect, useState } from "react" import '../../tencentAdPutIn/index.less' import { RangePickerProps } from "antd/lib/date-picker" import moment from "moment" import style from '../../tencentAdPutIn/create/index.less' import TimeInSelect from "@/pages/launchSystemNew/components/timeInSelect" import { getTimeSeriesList } from "@/pages/launchSystemNew/adq/ad/const" import { txtLength } from "@/utils/utils" import InputName from "@/components/InputName" import New1Radio from "../../components/New1Radio" import { SelectTimeList } from "../../tencentAdPutIn/const" interface Props { type: '修改出价' | '修改名称' | '修改日限额' | '修改投放时间' | '删除' | '深度优化ROI' | '修改投放首日开始时间' updateData: any[], visible?: boolean, onClose?: () => void onChange?: () => void } const UpdateAd3: React.FC = ({ visible, type, onClose, onChange, updateData }) => { /****************************************/ const [form] = Form.useForm(); const timeSeriesType = Form.useWatch('timeSeriesType', form) const updateType = Form.useWatch('updateType', form) const [failIdList, setFailIdList] = useState<{ adgroupId: number, code: number, message: string, messageCn: string }[]>([]) const [failVisible, setFailVisible] = useState(false) const modifyAmountBatch = useAjax((params) => modifyAmountBatchApi(params)) // 出价 const modifyAdTimeBatch = useAjax((params) => modifyAdTimeBatchApi(params)) // 时间 const updateBatchAdgroupInfo = useAjax((params) => updateBatchAdgroupInfoApi(params)) // 名称 const modifyDailyBudgetBatch = useAjax((params) => modifyDailyBudgetBatchApi(params)) // 日限额 const delBatch = useAjax((params) => delBatchApi(params)) // 删除 /****************************************/ useEffect(() => { if (type === '删除') { form.setFieldsValue({ delAd: updateData.map(item => item.adgroupName) }) } else if (type === '深度优化ROI') { form.setFieldsValue({ deepConversionSpec: updateData?.[0]?.deepConversionSpec }) } }, [type, updateData]) const handleOk = (values: any) => { console.log(values) let accountAdgroupMaps = [...new Set(updateData?.map(item => item.accountId + ',' + item.adgroupId))] switch (type) { case '修改出价': let paramsCj: any = {} if (values?.updateType === 'percent') { paramsCj.bidAmountPercent = values?.bidAmountPercent / 100 } else { paramsCj.bidAmount = values?.bidAmount } modifyAmountBatch.run({ accountAdgroupMaps, ...paramsCj }).then(res => { if (res?.failIdList?.length === 0) { message.success(`修改操作完成!`) onChange?.() } else { setFailIdList(res?.list || []) setFailVisible(true) } }) break case '修改名称': case '深度优化ROI': case '修改投放首日开始时间': let params2: any = {} if (type === '深度优化ROI') { params2 = JSON.parse(JSON.stringify(values)) if (params2.updateType === 'percent') { delete params2?.deepConversionSpec?.deepConversionWorthSpec?.expectedRoi params2.deepConversionSpec.deepConversionWorthSpec.expectedRoiPercent = params2?.deepConversionSpec?.deepConversionWorthSpec?.expectedRoiPercent / 100 } else { delete params2?.deepConversionSpec?.deepConversionWorthSpec?.expectedRoiPercent } delete params2.updateType } else { params2 = values } updateBatchAdgroupInfo.run({ accountAdgroupMaps, ...params2 }).then(res => { if (res?.failIdList?.length === 0) { message.success(`修改操作完成!`) onChange?.() } else { setFailIdList(res?.list || []) setFailVisible(true) } }) break case '修改投放时间': let params = { accountAdgroupMaps, ...values } params.beginDate = moment(params.date[0]).format('YYYY-MM-DD') params.endDate = moment(params.date[1]).format('YYYY-MM-DD') if (params.timeSeriesType === '0') { // params.timeSeries = Array(336).fill(1).join(''); } else { params.timeSeries = params.timeSeries.join(''); } delete params.timeSeriesType delete params.date modifyAdTimeBatch.run(params).then(res => { if (res?.failIdList?.length === 0) { message.success(`修改操作完成!`) onChange?.() } else { setFailIdList(res?.list || []) setFailVisible(true) } }) break case '修改日限额': modifyDailyBudgetBatch.run({ accountAdgroupMaps, ...values }).then(res => { if (res?.failIdList?.length === 0) { message.success(`修改操作完成!`) onChange?.() } else { setFailIdList(res?.list || []) setFailVisible(true) } }) break case '删除': delBatch.run({ accountAdgroupMaps }).then(res => { if (res?.failIdList?.length === 0) { message.success(`删除广告操作完成!`) onChange?.() } else { setFailIdList(res?.list || []) setFailVisible(true) } }) break } } /** 禁止选择以前时间 */ const disabledDate: RangePickerProps['disabledDate'] = current => { // Can not select days before today and today return current && current < moment().startOf('day'); }; return <> {type}} open={visible} footer={null} onCancel={onClose} bodyStyle={{ padding: '0 0 40px', position: 'relative', borderRadius: '0 0 8px 8px' }} className='modalResetCss' width={type === '修改投放时间' ? 900 : type === '深度优化ROI' ? 800 : 600} >
{ message.error(errorFields?.[0]?.errors?.[0]) }} onFinish={handleOk} initialValues={{ timeSeriesType: '0', timeSeries: getTimeSeriesList(), updateType: 'fixed' }} > {type === '删除' ? '确认删除?' : '修改设置'}} className="cardResetCss" > {type === '修改出价' ? <> 出价修改方式} name='updateType' rules={[ { required: true, message: '请选择出价修改方式' } ]} > 固定值 百分比上下浮动修改 {updateType === 'fixed' ? 出价} name='bidAmount' rules={[ { required: true, message: '请输入' } ]} > : 浮动比} name='bidAmountPercent' rules={[ { required: true, message: '请输入' } ]} > } : type === '修改名称' ? 广告名称} name='adgroupName' // tooltip="下标、日期时分秒、广告账户创建时默认自带" rules={[ { required: true, message: '请输入广告名称!' }, { required: true, message: '广告名称不能包含特殊字符:< > & ‘ ” / 以及TAB、换行、回车键,请修改', validator(_, value) { let reg = /[&‘’“”/\n\t\f]/ig if (value && reg.test(value)) { return Promise.reject() } return Promise.resolve() } }, { required: true, message: '请确保广告名称长度不超过60个字(1个汉字等于2个字符)', validator(_, value) { if (value && txtLength(value) > 50) { return Promise.reject() } return Promise.resolve() } } ]} > : type === '修改日限额' ? 日限额} name='bidAmount' rules={[ { required: true, message: '请输入' } ]} > : type === '修改投放时间' ? <> 投放日期} name='date' rules={[{ required: true, message: '请选择投放日期' }]}> 投放时间}>
选择时段
全天 指定多个时段
{timeSeriesType === '2' &&
}
: type === '删除' ? 广告名称} name='delAd' rules={[{ required: true, message: '请选择广告' }]}> : type === '深度优化ROI' ? <> 深度优化类型} name={['deepConversionSpec', 'deepConversionType']} rules={[{ required: true, message: '请选择深度优化类型' }]}> 深度优化目标} name={['deepConversionSpec', 'deepConversionWorthSpec', 'goal']} rules={[{ required: true, message: '请选择深度优化目标' }]}> 期望ROI修改方式} name='updateType' rules={[ { required: true, message: '请选择期望ROI修改方式' } ]} > 固定值 百分比上下浮动修改 {updateType === 'fixed' ? 期望ROI} name={['deepConversionSpec', 'deepConversionWorthSpec', 'expectedRoi']} rules={[ { required: true, message: '请输入期望ROI' }, { type: 'number', min: 0.001, max: 1000, message: '范围0.001~1000' }, { validator: (_: any, value: string) => { if (!value || /^\d+(\.\d{0,3})?$/.test(value)) { return Promise.resolve(); } return Promise.reject(new Error('请输入最多三位小数')); } } ]} > : 期望ROI浮动比} name={['deepConversionSpec', 'deepConversionWorthSpec', 'expectedRoiPercent']} rules={[{ required: true, message: '请输入期望ROI浮动比' }]} > } : type === '修改投放首日开始时间' ? 首日开始时间} rules={[{ required: true, message: '请选择首日开始时间' }]}>