import Tables from "@/components/Tables" import { useAjax } from "@/Hook/useAjax" import { createAdBatchApi, CreateAdProps } from "@/services/launchAdq/createAd" import { getSysAdcreativeInfo } from "@/services/launchAdq/creative" import { PromotedObjectType } from "@/services/launchAdq/enum" import { getTagsList } from "@/services/launchAdq/global" import { getSysAdgroupsInfo } from "@/services/launchAdq/localAd" import { getsysTargetingInfo } from "@/services/launchAdq/targeting" import { CloseOutlined, EditOutlined, QuestionCircleOutlined, SearchOutlined } from "@ant-design/icons" import { Button, Card, Col, Empty, Row, Select, Space, Spin, Tooltip, Image, message, Popover } from "antd" import React, { useEffect, useRef, useState } from "react" import { useModel } from "umi" import AdModal from "../../components/adModal" import CreativeModal from "../../components/creativeModal" import CrowdPackModal from "../../components/crowdPackModal" import DataSourceModal from "../../components/dataSourceModal" import GoodsModal from "../../components/goodsModal" import IdModal from "../../components/idModal" import LookLanding from "../../components/lookLanding" import PageModal from "../../components/pageModal" import SelectCloud from "../../components/selectCloud" import TargetingModal from "../../components/targetingModal" import TargetingTooltip from "../../components/targetingTooltip" import { WxAutoButton } from "../../req" import AdcreativeCol from "./adcreativeCol" import AdgroupsCol from "./adgroupsCol" 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', // 投放速度模式 sysAdgroupId: undefined, // 广告组内容 sysTargetingId: undefined, // 定向包 id adgroupName: 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, customAudienceList?: any, excludedCustomAudienceList?: any, pageList?: any }[]>([]) // 账户 const [adVisible, setAdVisible] = useState(false) // 选择广告弹窗控制 const [dxVisible, setDxVisible] = useState(false) // 选择定向弹窗控制 const [creativeVisible, setCreativeVisible] = 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 [cpVisible, setCpVisible] = useState(false) // 选择设置名称弹窗控制 const [pageVisible, setPageVisible] = 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)) const getSysAdcreative = useAjax((params) => getSysAdcreativeInfo(params)) const createAdBatch = useAjax((params) => createAdBatchApi(params)) /*************************/ /**数据回填 */ useEffect(() => { let adqAdData = localStorage.getItem('ADQAD') if (adqAdData) { const { queryForm, accountCreateLogs } = JSON.parse(adqAdData) setQueryForm({ ...queryForm }) setAccountCreateLogs(accountCreateLogs) } }, []) // 设置地域 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?.sysAdgroupId) { getSysAdgroups.run(queryForm?.sysAdgroupId) } }, [queryForm?.sysAdgroupId]) useEffect(() => { if (getSysAdgroups?.data?.bidMode !== 'BID_MODE_CPM' && accountCreateLogs?.length > 0) { let newAccountCreateLogs = accountCreateLogs?.map((item: any) => { if (item?.customAudienceList) { delete item?.customAudienceList } return { ...item } }) setAccountCreateLogs([...newAccountCreateLogs]) } }, [getSysAdgroups?.data?.bidMode]) /** 获取创意详情 */ useEffect(() => { if (queryForm?.sysAdcreativeId) { getSysAdcreative.run(queryForm?.sysAdcreativeId) } }, [queryForm?.sysAdcreativeId]) /** 获取定向详情 */ useEffect(() => { if (queryForm?.sysTargetingId) { getsysTargeting.run(queryForm?.sysTargetingId) } }, [queryForm?.sysTargetingId]) /** 获取落地页详情 */ useEffect(() => { if (queryForm?.sysPageId) { get.run({ mediaType: 'PAGE', sysMediaId: queryForm?.sysPageId }).then(res => { if (!Object.keys(res)?.includes('fail')) { let data = res let pageElementsSpecList = data?.pageSpecsList[0]?.pageElementsSpecList setWxButtonList(() => (pageElementsSpecList as any[])?.filter((item: { elementType: string }) => item?.elementType === 'ENTERPRISE_WX')) } else { setQueryForm({ ...queryForm, sysPageId: undefined }) } }) } }, [queryForm?.sysPageId]) /** 删除商品内容 */ const goodsDel = (index: number) => { let newArr = JSON.parse(JSON.stringify(accountCreateLogs)) delete newArr[index].productList setAccountCreateLogs(newArr) } /** 删除云端内容 */ const pageDel = (index: number) => { let newArr = JSON.parse(JSON.stringify(accountCreateLogs)) delete newArr[index].pageList setAccountCreateLogs(newArr) } /** 删除数据源 */ const sourceDel = (index: number, num: number) => { let newArr = JSON.parse(JSON.stringify(accountCreateLogs)) newArr[index].userActionSetsList?.splice(num, 1) setAccountCreateLogs(newArr) } /** 删除人群包 */ const cpDel = (index: number, num: number, key: string) => { let newArr = JSON.parse(JSON.stringify(accountCreateLogs)) newArr[index][key]?.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.sysAdgroupId) { message.error('请先设置广告基本信息') return } if (!queryForm.sysTargetingId) { message.error('请选择定向') return } if (!queryForm.sysAdcreativeId) { message.error('请设置创意的基本信息') return } if (!accountCreateLogs?.every((item: any) => item.pageList?.length > 0)) { // 所有都选云端 if (!queryForm.sysPageId) { message.error('请选择落地页') return } } let data = accountCreateLogs.map((item: any, index) => { return { ...item, ...queryForm, sysAdGroupData: getSysAdgroups?.data, targetingData: getsysTargeting?.data, sysAdcreativeData: { ...getSysAdcreative?.data }, pageData: get?.data } }) console.log('data--->', data) setTableData(data) } const submit = (data: { adgroupName: string, campaignName: string }) => { console.log(111111, tableSelect); let params = { ...queryForm, ...data } let accountLogs = tableSelect.map((item: any) => { // userActionSetsList 数据源 productList 商品 let data: any = { adAccountId: item.id } if (item?.userActionSetsList?.length > 0) { // 数据源 data.userActionSets = item?.userActionSetsList?.map((item: any) => ({ id: item?.id, type: item?.type })) } if (item?.productList?.length > 0) { // 商品 data.productId = item?.productList[0].productOuterId data.productCatalogId = item?.productList[0].productCatalogId } if (item?.customAudienceList?.length > 0) { data.customAudience = item?.customAudienceList?.map((item: any) => item.id) } if (item?.excludedCustomAudienceList?.length > 0) { data.excludedCustomAudience = item?.excludedCustomAudienceList?.map((item: any) => item.id) } if (item?.pageList) { data.pageId = item?.pageList[0].id } return data }) params.accountCreateLogs = accountLogs createAdBatch.run(params).then(res => { if (res) { sessionStorage.setItem('CAMP', data?.campaignName) message.success('创建成功') window.location.href = '/#/launchSystemNew/launchManage/taskList' } }) } /** 清除数据 */ const clearData = () => { setTableData([]) setTableSelect([]) } /** 存为预设 */ const severBd = () => { // queryForm accountCreateLogs localStorage.setItem('ADQAD', JSON.stringify({ queryForm, accountCreateLogs })) message.success('存储成功') } /** 清除 */ const delBdPlan = () => { localStorage.removeItem('ADQAD') setAccountCreateLogs([]) setQueryForm({ campaignName: '', // 计划名称 campaignType: 'CAMPAIGN_TYPE_NORMAL', // 计划类型 CAMPAIGN_TYPE_NORMAL CAMPAIGN_TYPE_SEARCH promotedObjectType: 'PROMOTED_OBJECT_TYPE_WECHAT_OFFICIAL_ACCOUNT', // 推广目标类型 speedMode: 'SPEED_MODE_STANDARD', // 投放速度模式 sysAdgroupId: undefined, // 广告组内容 sysTargetingId: undefined, // 定向包 id adgroupName: undefined, // 广告名称 configuredStatus: 'AD_STATUS_SUSPEND', // 广告状态 sysAdcreativeId: undefined, // 创意ID sysPageId: undefined, // 落地页Id }) } return 配置区} className={style.createAd} hoverable>
广告 {/* =============广告基本信息=========== */}
广告基本信息
{(getSysAdgroups?.data && queryForm?.sysAdgroupId) ? : }
{queryForm?.promotedObjectType ? { setAdVisible(true) }}>{getSysAdgroups?.data ? '修改' : '添加'} : 添加 }
{/* =============定向包=========== */}
定向 {getSysAdgroups?.data?.bidMode === 'BID_MODE_CPM' && <>{accountCreateLogs?.length > 0 && queryForm?.sysTargetingId ? : 0 ? `请先添加定向` : `请先选择媒体账户`}> }}
{queryForm?.sysTargetingId ? <> {accountCreateLogs?.some((item: any) => item?.customAudienceList?.length > 0) ? <> {getsysTargeting?.data &&
} trigger="hover" placement="right" >
定向名称: {getsysTargeting?.data?.targetingName}
定向描述: {getsysTargeting?.data?.description || '<空>'}
} {accountCreateLogs?.map((item: any, index: number) => { if (item?.customAudienceList) { return
{item.adAccountId}
{item?.customAudienceList?.length > 0 && <>
定向用户群
{ item?.customAudienceList?.map((pack: { name: string, id: number }, index1: number) => { return
{pack.name} { cpDel(index, index1, 'customAudienceList') }} />
}) } } {item?.excludedCustomAudienceList?.length > 0 && <>
排除用户群
{ item?.excludedCustomAudienceList?.map((pack: { name: string, id: number }, index1: number) => { return
{pack.name} { cpDel(index, index1, 'excludedCustomAudienceList') }} />
}) } }
} else { return null } })} : <>
定向名称: {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) }}>编辑 : 编辑 }
{/* =============广告创意=========== */} 广告创意 {/* 创意 */}
创意基本信息
{(getSysAdcreative?.data && queryForm?.sysAdcreativeId) && }
{queryForm?.sysAdgroupId ? <> : }
{/* 落地页 */}
落地页 {wxButtonList?.length > 0 && }
{accountCreateLogs?.some((item: any) => item.pageList?.length > 0 || (queryForm?.sysPageId && (get?.data && !Object.keys(get?.data)?.includes('fail')))) ? <> {(queryForm?.sysPageId && !accountCreateLogs?.every((item: any) => item.pageList?.length > 0)) && <>
落地页名称:{get?.data?.pageName || ''}
分享名称:{get?.data?.shareContentSpec?.shareTitle || ''}
分享描述:{get?.data?.shareContentSpec?.shareDescription || ''}
原生推广页顶部素材预览:
{get?.data?.pageSpecsList && 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 } })}
} {accountCreateLogs?.map((item: any, index: number) => { if (item?.pageList && item?.pageList?.length > 0) { return
{item.adAccountId}
{ item?.pageList?.map((pack: { pageName: string, type: string, id: number }, index1: number) => { return
{pack.pageName} { pageDel(index) }} />
}) }
} else { return null } })} : }
{queryForm?.sysAdcreativeId ? <> {queryForm?.sysPageId && } {accountCreateLogs?.length > 0 ? : } : }
{/* =============广告底部按钮=========== */}
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, sysAdgroupId: e, sysAdcreativeId: undefined }); setAdVisible(false); clearData() }} sysAdgroupId={queryForm?.sysAdgroupId} />} {/* 选择定向 */} {dxVisible && setDxVisible(false)} onChange={(e) => { setQueryForm({ ...queryForm, sysTargetingId: e }); setDxVisible(false); clearData() }} sysTargetingId={queryForm?.sysTargetingId} />} {/* 选择创意 */} {creativeVisible && setCreativeVisible(false)} onChange={(e) => { setQueryForm({ ...queryForm, sysAdcreativeId: e }); setCreativeVisible(false); clearData() }} sysAdcreativeId={queryForm?.sysAdcreativeId} promotedObjectType={queryForm.promotedObjectType as string} />} {/* 选择商品 */} {goodsVisible && setGoodsVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setGoodsVisible(false); clearData() }} />} {/* 选择数据源 */} {sourceVisible && setSourceVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setSourceVisible(false); clearData() }} />} {/* 选择转化ID */} {idVisible && setIdVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setSourceVisible(false); clearData() }} />} {/* 选择定向包 */} {cpVisible && setCpVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setCpVisible(false); clearData() }} />} {/* 选择ADQ落地页 */} {pageVisible && setPageVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setPageVisible(false); clearData() }} />} {/* 选择素材 */} {selectImgVisible && setSelectImgVisible(false)} onChange={setPage} isBack={false} />} {/* 查看落地页 */} {lookVisible && setLookVisible(false)} id={queryForm?.sysPageId as any} />} {/* 设置名称 */} {subVisible && setSubVisible(false)} onChange={submit} ajax={createAdBatch} />}
} export default CreateAd