import Tables from "@/components/Tables" import { useAjax } from "@/Hook/useAjax" import { CreateAdProps } from "@/services/launchAdq/createAd" import { BidModeEnum, BidStrategyEnum, OptimizationGoalEnum, PromotedObjectType, SiteSetEnum } from "@/services/launchAdq/enum" import { getTagsList } from "@/services/launchAdq/global" import { getSysAdgroupsInfo } from "@/services/launchAdq/localAd" import { getsysTargetingInfo } from "@/services/launchAdq/targeting" import { CloseOutlined, SearchOutlined } from "@ant-design/icons" import { Button, Card, Col, Empty, Row, Select, Space, Spin, Tooltip, Image, message } from "antd" import React, { useEffect, useState } from "react" import { useModel } from "umi" import AdModal from "../../components/adModal" import DataSourceModal from "../../components/dataSourceModal" import GoodsModal from "../../components/goodsModal" import IdModal from "../../components/idModal" import LookLanding from "../../components/lookLanding" import SelectCloud from "../../components/selectCloud" import TargetingModal from "../../components/targetingModal" import TargetingTooltip from "../../components/targetingTooltip" import { WxAutoButton } from "../../req" import style from './index.less' import Selector from "./selector" import SubmitModal from "./submitModal" import columns from "./tableConfig" const CreateAd: React.FC = () => { /*************************/ const { getAdAccount } = useModel('useLaunchAdq.useAdAuthorize') const [queryForm, setQueryForm] = useState>({ campaignName: '', // 计划名称 campaignType: 'CAMPAIGN_TYPE_NORMAL', // 计划类型 CAMPAIGN_TYPE_NORMAL CAMPAIGN_TYPE_SEARCH promotedObjectType: 'PROMOTED_OBJECT_TYPE_WECHAT_OFFICIAL_ACCOUNT', // 推广目标类型 speedMode: 'SPEED_MODE_STANDARD', // 投放速度模式 sysAdgroupsId: undefined, // 广告组内容 sysTargetingId: undefined, // 定向包 id adName: undefined, // 广告名称 configuredStatus: 'AD_STATUS_SUSPEND', // 广告状态 sysAdcreativeId: undefined, // 创意ID sysPageId: undefined, // 落地页Id }) const [accountCreateLogs, setAccountCreateLogs] = useState<{ adAccountId: number, id: number, userActionSetsList?: number, productList?: any, conversionList?: any }[]>([]) // 账户 const [adVisible, setAdVisible] = useState(false) // 选择广告弹窗控制 const [dxVisible, setDxVisible] = useState(false) // 选择定向弹窗控制 const [goodsVisible, setGoodsVisible] = useState(false) // 选择商品弹窗控制 const [sourceVisible, setSourceVisible] = useState(false) // 选择数据源弹窗控制 const [idVisible, setIdVisible] = useState(false) // 选择转化ID弹窗控制 const [selectImgVisible, setSelectImgVisible] = useState(false) // 选择转化ID弹窗控制 const [lookVisible, setLookVisible] = useState(false) // 选择转化ID弹窗控制 const [subVisible, setSubVisible] = useState(false) // 选择设置名称弹窗控制 const [wxButtonList, setWxButtonList] = useState([]) const [tableData, setTableData] = useState([]) // 预览表格 const [tableSelect, setTableSelect] = useState([]) const [geoLocationList, setGeoLocationList] = useState({}) // 所有地域列表 const [modelList, setModelList] = useState({}) // 所有品牌手机 const { init, get } = useModel('useLaunchAdq.useBdMediaPup') const tagsList_REGION = useAjax((params) => getTagsList(params)) const tagsList_MODEL = useAjax((params) => getTagsList(params)) const getSysAdgroups = useAjax((params) => getSysAdgroupsInfo(params)) const getsysTargeting = useAjax((params) => getsysTargetingInfo(params)) /*************************/ // 设置地域 useEffect(() => { tagsList_REGION.run({ type: 'REGION' }).then(res => { if (res) { setGeoLocationList(() => (res as any[])?.reduce((prev: any, cur: { id: number }) => { prev[cur.id] = cur return prev }, {})) } }) tagsList_MODEL.run({ type: 'DEVICE_BRAND_MODEL' }).then(res => { if (res) { setModelList(() => (res as any[])?.reduce((prev: any, cur: { id: number }) => { prev[cur.id] = cur return prev }, {})) } }) }, []) // 获取账户列表 useEffect(() => { getAdAccount.run() init({ mediaType: 'PAGE' }) }, []) /** 获取广告详情 */ useEffect(() => { if (queryForm?.sysAdgroupsId) { getSysAdgroups.run(queryForm?.sysAdgroupsId) } }, [queryForm?.sysAdgroupsId]) /** 获取定向详情 */ useEffect(() => { if (queryForm?.sysTargetingId) { getsysTargeting.run(queryForm?.sysTargetingId) } }, [queryForm?.sysTargetingId]) /** 获取落地页详情 */ useEffect(() => { if (queryForm?.sysPageId) { get.run({ mediaType: 'PAGE', sysMediaId: queryForm?.sysPageId }).then(res => { let data = res let pageElementsSpecList = data?.pageSpecsList[0]?.pageElementsSpecList setWxButtonList(() => (pageElementsSpecList as any[])?.filter((item: { elementType: string }) => item?.elementType === 'ENTERPRISE_WX')) }) } }, [queryForm?.sysPageId]) /** 删除商品内容 */ const goodsDel = (index: number) => { let newArr = JSON.parse(JSON.stringify(accountCreateLogs)) delete newArr[index].productList setAccountCreateLogs(newArr) } /** 删除数据源 */ const sourceDel = (index: number, num: number) => { console.log(index, num); let newArr = JSON.parse(JSON.stringify(accountCreateLogs)) newArr[index].userActionSetsList?.splice(num, 1) setAccountCreateLogs(newArr) } /** 设置落地页 */ const setPage = (e: any) => { setQueryForm({ ...queryForm, sysPageId: e[0]?.id || undefined }) setSelectImgVisible(false) } /** 预览 */ const preview = () => { if (accountCreateLogs?.length === 0) { message.error('请选择媒体账户') return } if (!queryForm.promotedObjectType) { message.error('请选择推广目标') return } if (!queryForm.sysAdgroupsId) { message.error('请先设置广告基本信息') return } if (!queryForm.sysTargetingId) { message.error('请选择定向') return } // if (!queryForm.sysAdcreativeId) { // message.error('请设置创意的基本信息') // return // } if (!queryForm.sysPageId) { message.error('请选择落地页') return } let data = accountCreateLogs.map((item: any, index) => { return { ...item, id: index + 1, ...queryForm, sysAdGroupData: getSysAdgroups?.data, targetingData: getsysTargeting?.data, pageData: get?.data } }) console.log('data--->', data) setTableData(data) } const submit = (data: { adName: string, campaignName: string }) => { console.log(111111, tableSelect); console.log(222222, data) } return 配置区} className={style.createAd} hoverable>
广告 {/* =============广告基本信息=========== */}
广告基本信息
{getSysAdgroups?.data ? <>
广告名称: {getSysAdgroups?.data?.adgroupName}
推广目标: {PromotedObjectType[getSysAdgroups?.data?.promotedObjectType]}
广告版位: {getSysAdgroups?.data?.siteSet?.map((item: string) => SiteSetEnum[item]).toString()}
投放日期: {getSysAdgroups?.data?.endDate ? getSysAdgroups?.data?.beginDate + '~' + getSysAdgroups?.data?.endDate : getSysAdgroups?.data?.beginDate + '~' + '长期投放'}
出价方式: {BidModeEnum[getSysAdgroups?.data?.bidMode]}
优化目标: {OptimizationGoalEnum[getSysAdgroups?.data?.optimizationGoal]}
出价类型: {getSysAdgroups?.data?.smartBidType === 'SMART_BID_TYPE_CUSTOM' ? '手动出价' : '自动出价'}
出价策略: {BidStrategyEnum[getSysAdgroups?.data?.bidStrategy]}
广告出价: {getSysAdgroups?.data?.bidAmount}
广告日预算: {getSysAdgroups?.data?.dailyBudget || '不限'}
: }
{queryForm?.promotedObjectType ? { setAdVisible(true) }}>{getSysAdgroups?.data ? '修改' : '添加'} : 添加 }
{/* =============定向包=========== */}
定向{/* 已选:{1} */}
{getsysTargeting?.data ? <>
定向名称: {getsysTargeting?.data?.targetingName}
定向描述: {getsysTargeting?.data?.description}
: }
{ setDxVisible(true) }}>{getsysTargeting?.data ? '修改' : '添加'}
{/* =============商品=========== */}
商品{/* 已选:{1} */}
{accountCreateLogs?.map((item: any, index: number) => { if (item?.productList) { return
{item.adAccountId}
{ item?.productList?.map((pack: { productName: string, author: string, id: number }, index: number) => { return
{pack.productName} { goodsDel(index) }} />
}) }
} else { return null } })}
{accountCreateLogs?.length > 0 ? { setGoodsVisible(true) }}>编辑 : 编辑 }
{/* 数据源 */}
数据源 {/* 已选:{1} */}
{/* userActionSetsList */}
{accountCreateLogs?.map((item: any, index: number) => { if (item?.userActionSetsList && item?.userActionSetsList?.length > 0) { return
{item.adAccountId}
{ item?.userActionSetsList?.map((pack: { name: string, type: string, id: number }, index1: number) => { return
{pack.name}{' > '}{pack.type} { sourceDel(index, index1) }} />
}) }
} else { return null } })}
{accountCreateLogs?.length > 0 ? { setSourceVisible(true) }}>编辑 : 编辑 }
{/* =============广告创意=========== */} 广告创意
创意基本信息
{ }}>编辑
落地页 {wxButtonList?.length > 0 && }
{queryForm?.sysPageId ? <>
落地页名称:{get?.data?.pageName || ''}
分享名称:{get?.data?.shareContentSpec?.shareTitle || ''}
分享描述:{get?.data?.shareContentSpec?.shareDescription || ''}
原生推广页顶部素材预览:
{get?.data?.pageSpecsList[0]?.pageElementsSpecList?.filter((item: any, index: number) => index === 0)?.map((item: { elementType: 'TOP_IMAGE' | 'TOP_VIDEO' | 'TOP_SLIDER', topImageSpec: any, topSliderSpec: any, topVideoSpec: any }, index: number) => { switch (item?.elementType) { case 'TOP_IMAGE': return case 'TOP_SLIDER': return {item?.topSliderSpec?.imageUrlList?.map((url: string, index: number) => )} case 'TOP_VIDEO': return } })}
: }
{queryForm?.sysAdgroupsId ? <> {queryForm?.sysPageId && } : }
{/* =============广告底部按钮=========== */} {/* */} {/* */}
0 ? 推广计划总数:{accountCreateLogs?.length} 广告总数:{accountCreateLogs?.length} {tableSelect?.length > 0 && 已选:{tableSelect?.length}} { } : false } > {tableData?.length > 0 ?
item?.id.toString()), onChange: (selectedRowKeys: React.Key[], selectedRows: any) => { setTableSelect(selectedRows) } }} />
:
}
{/* 选择广告 */} {adVisible && setAdVisible(false)} promotedObjectType={queryForm.promotedObjectType as string} onChange={(e) => { setQueryForm({ ...queryForm, sysAdgroupsId: e }); setAdVisible(false) }} sysAdgroupsId={queryForm?.sysAdgroupsId}/>} {/* 选择定向 */} {dxVisible && setDxVisible(false)} onChange={(e) => { setQueryForm({ ...queryForm, sysTargetingId: e }); setDxVisible(false) }} sysTargetingId={queryForm?.sysTargetingId}/>} {/* 选择商品 */} {goodsVisible && setGoodsVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setGoodsVisible(false) }} />} {/* 选择数据源 */} {sourceVisible && setSourceVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setSourceVisible(false) }} />} {/* 选择转化ID */} {idVisible && setIdVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setSourceVisible(false) }} />} {/* 选择素材 */} {selectImgVisible && setSelectImgVisible(false)} onChange={setPage} isBack={false} />} {/* 查看落地页 */} {lookVisible && setLookVisible(false)} id={queryForm?.sysPageId as any} />} {/* 设置名称 */} {subVisible && setSubVisible(false)} onChange={submit} />}
} export default CreateAd