import React, { useCallback, useEffect } from 'react' import { Modal, Form, Input, Divider, Select, Radio, DatePicker, Switch, Checkbox, message } from 'antd' import { SiteSetEnum, BidModeEnum, OptimizationGoalEnum, BidStrategyEnum, PromotedObjectType, EducationEnum } from '@/services/launchAdq/enum' import { ModalConfig } from '.' import moment from 'moment'; import { useAjax } from '@/Hook/useAjax'; import { getSceneTagsList } from '@/services/launchAdq/global'; const { RangePicker }: { RangePicker: any } = DatePicker; let DatePickers: any = DatePicker interface Props { visible: boolean, PupFn: (arg: ModalConfig) => void, callback: (params: any) => void, confirmLoading: boolean, type?: 'add' | 'look' | 'edit',//新增,查看,编辑 dataInfo?: any } /**广告模板*/ function AdModal(props: Props) { let { visible, confirmLoading, PupFn, callback, type, dataInfo } = props let arg = type === 'look' ? { footer: null } : {} const sceneTagsList = useAjax((params) => getSceneTagsList(params)) const [form] = Form.useForm(); let dateType = Form.useWatch('dateType', form) let bidMode = Form.useWatch('bidMode', form) let smartBidType = Form.useWatch('smartBidType', form) let autoAcquisitionEnabled = Form.useWatch('autoAcquisitionEnabled', form) let siteSet = Form.useWatch('siteSet', form) let wechatPositionType = Form.useWatch('wechatPositionType', form) let wechatSceneType = Form.useWatch('wechatSceneType', form) // 确定事件 const handleOk = useCallback(() => { form.validateFields().then(values => { let newValues = JSON.parse(JSON.stringify(values)) newValues.sceneSpec = {} if (newValues.dateType === '2') { newValues['beginDate'] = moment(newValues.date).format('YYYY-MM-DD') } else { newValues['beginDate'] = moment(newValues.date[0]).format('YYYY-MM-DD') newValues['endDate'] = moment(newValues.date[1]).format('YYYY-MM-DD') } Object.keys(newValues).forEach(key => { switch (key) { case 'wechatPositionType': if (newValues[key] === '1') { newValues.sceneSpec = { ...newValues.sceneSpec, wechatPosition: newValues.wechatPosition } } break; case 'wechatSceneType': if (newValues[key] === '1') { newValues.sceneSpec = { ...newValues.sceneSpec, wechatScene: { officialAccountMediaCategory: newValues.officialAccountMediaCategory, miniProgramAndMiniGame: newValues.miniProgramAndMiniGame, payScene: newValues.payScene } } } break; } }) if (newValues.sceneSpec.wechatPosition?.length === 0) { delete newValues.sceneSpec.wechatPosition } if (newValues.sceneSpec.wechatScene) { newValues.sceneSpec.wechatScene.officialAccountMediaCategory?.length === 0 && (delete newValues.sceneSpec.wechatScene.officialAccountMediaCategory) newValues.sceneSpec.wechatScene.miniProgramAndMiniGame?.length === 0 && (delete newValues.sceneSpec.wechatScene.miniProgramAndMiniGame) newValues.sceneSpec.wechatScene.payScene?.length === 0 && (delete newValues.sceneSpec.wechatScene.payScene) } if (!newValues.sceneSpec.wechatPosition && !newValues.sceneSpec.wechatScene) { delete newValues.sceneSpec } delete newValues.officialAccountMediaCategory delete newValues.miniProgramAndMiniGame delete newValues.payScene delete newValues.wechatPositionType delete newValues.wechatPosition delete newValues.wechatScene delete newValues['dateType'] delete newValues['date'] newValues['timeSeries'] = Array(336).fill(1).join('') console.log(newValues) callback(newValues) }) }, [form]) // 场景定向 useEffect(() => { sceneTagsList.run({ typeList: ['WECHAT_POSITION', 'OFFICIAL_ACCOUNT_MEDIA_CATEGORY', 'MINI_PROGRAM_AND_MINI_GAME', 'PAY_SCENE'] }) }, []) // 数据回填 useEffect(() => { if (dataInfo) { form.setFieldsValue({ adgroupName: dataInfo?.adgroupName,//广告名称 promotedObjectType: dataInfo?.promotedObjectType,//推广目标 siteSet: dataInfo?.siteSet,//广告版位 autoAcquisitionEnabled: dataInfo?.autoAcquisitionEnabled,//一键起量 bidAmount: dataInfo?.bidAmount,//出价 smartBidType: dataInfo?.smartBidType,//出价类型 bidStrategy: dataInfo?.bidStrategy,//出价策略 bidMode: dataInfo?.bidMode,//出价方式 optimizationGoal: dataInfo?.optimizationGoal,//优化目标 dateType: dataInfo?.endDate ? '1' : '2',//投放日期 dailyBudget: dataInfo?.dailyBudget,//广告日预算 date: dataInfo?.endDate ? [moment(dataInfo?.beginDate), moment(dataInfo?.endDate)] : moment(dataInfo?.beginDate),//日期 autoAcquisitionBudget: dataInfo?.autoAcquisitionBudget,//起量预算 wechatPositionType: dataInfo?.sceneSpec?.wechatPosition ? '1' : '0',//微信公众号与小程序定投 wechatPosition: dataInfo?.sceneSpec?.wechatPosition,//微信公众号与小程序定投 wechatSceneType: dataInfo?.sceneSpec?.wechatScene?.officialAccountMediaCategory || dataInfo?.sceneSpec?.wechatScene?.miniProgramAndMiniGame || dataInfo?.sceneSpec?.wechatScene?.payScene ? '1' : '0',//微信公众号与小程序场景 officialAccountMediaCategory: dataInfo?.sceneSpec?.wechatScene?.officialAccountMediaCategory,//公众号媒体类型 miniProgramAndMiniGame: dataInfo?.sceneSpec?.wechatScene?.miniProgramAndMiniGame,//小程序小游戏流量类型 payScene: dataInfo?.sceneSpec?.wechatScene?.payScene,//订单详情页消费场景 }) } }, [dataInfo]) return { PupFn({ visible: false,dataInfo:null,type:'add' }) }} onOk={type === 'look' ? () => message.warning('详情无法改动内容') : handleOk} width={900} confirmLoading={confirmLoading} {...arg} >
{/* ============================================================基本信息============================================================= */} 基本信息 广告名称} name='adgroupName' rules={[{ required: true, message: '请输入广告名称!' }]}> 推广目标类型} name='promotedObjectType' rules={[{ required: true, message: '请选择推广告推广目标类型!' }]}> 广告版位} name='siteSet' rules={[{ required: true, message: '请输入选择广告版位!' }]}> { siteSet?.some((s: string) => s === 'SITE_SET_WECHAT') && <> 微信公众号与小程序定投} name='wechatPositionType' style={wechatPositionType === '1' ? { marginBottom: 5 } : {}}> 不限 自定义 {wechatPositionType === '1' && ({ label: item.description, value: item.id }))} /> } 微信公众号与小程序场景} name='wechatSceneType' style={wechatSceneType === '1' ? { marginBottom: 5 } : {}} > 不限 自定义 {wechatSceneType === '1' && <>

公众号媒体类型

i.description !== '不限')?.map((item: { description: any; id: any; }) => ({ label: item.description, value: item.id }))} />

小程序小游戏流量类型

i.description !== '不限')?.map((item: { description: any; id: any; }) => ({ label: item.description, value: item.id }))} />

订单详情页消费场景

i.description !== '不限')?.map((item: { description: any; id: any; }) => ({ label: item.description, value: item.id }))} /> } } {/* ============================================================排期与出价============================================================= */} 排期与出价 投放日期} name='dateType'> 选择开始与结束日期 长期投放 {/* 投放日期的不同展示不同的日期选择 */} { dateType === '1' ? : } 投放时段}> 全天投放 出价方式} name='bidMode'> { Object.keys(BidModeEnum).map(key => { return {BidModeEnum[key]} }) } {/* 出价方式为OCPM才展示 */} { bidMode === 'BID_MODE_OCPM' && <> 优化目标} name='optimizationGoal' rules={[{ required: true, message: '请选择优化目标' }]}> 出价类型} name='smartBidType'> 手动出价 自动出价 出价策略} name='bidStrategy'> { Object.keys(BidStrategyEnum).map(key => { return {BidStrategyEnum[key]} }) } } {/* 出价类型为手动出价才展示 */} { smartBidType !== 'SMART_BID_TYPE_SYSTEMATIC' && <> 出价} name='bidAmount' rules={[{ required: true, message: '请输入价格' }]}> {/* 当版位选择大于1时才出现 */} {/* {siteSet?.length > 1 &&分版位出价} name='bidAdjustment'> } */} 一键起量} name='autoAcquisitionEnabled' valuePropName="checked"> {/* 一键起量开启时才出现 */} {autoAcquisitionEnabled && 起量预算} name='autoAcquisitionBudget' rules={[{ required: true, message: '请输入起量预算' }]}> } } 广告日预算} name='dailyBudget'>
} export default AdModal