|
@@ -7,7 +7,7 @@ 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 { Button, Card, Col, Empty, Row, Select, Space, Spin, Tooltip, Image, message, Popover, Tabs, Checkbox } from "antd"
|
|
|
import React, { useCallback, useEffect, useRef, useState } from "react"
|
|
|
import { useModel } from "umi"
|
|
|
import Ad from "./ad"
|
|
@@ -41,8 +41,9 @@ const CreateAd: React.FC = () => {
|
|
|
adgroupName: undefined, // 广告名称
|
|
|
configuredStatus: 'AD_STATUS_SUSPEND', // 广告状态
|
|
|
sysAdcreativeId: undefined, // 创意ID
|
|
|
- sysAdcreative: undefined, // 创意内容
|
|
|
- sysPageId: undefined, // 落地页Id
|
|
|
+ taskMediaMaps: [], // 创意内容
|
|
|
+ pageList: [],//本地落地页详情入口
|
|
|
+ adqPageList: [],//云落地页
|
|
|
})
|
|
|
const [accountCreateLogs, setAccountCreateLogs] = useState<{ adAccountId: number, id: number, userActionSetsList?: number, productList?: any, conversionList?: any, customAudienceList?: any, excludedCustomAudienceList?: any, pageList?: any }[]>([]) // 账户
|
|
|
|
|
@@ -59,6 +60,8 @@ const CreateAd: React.FC = () => {
|
|
|
const [tableSelect, setTableSelect] = useState<any[]>([])
|
|
|
const [geoLocationList, setGeoLocationList] = useState<any>({}) // 所有地域列表
|
|
|
const [modelList, setModelList] = useState<any>({}) // 所有品牌手机
|
|
|
+ const [targetKey, set_targetKey] = useState('0')//创意key
|
|
|
+ const [page_checked, set_page_checked] = useState(false)//创意key
|
|
|
const { init, get } = useModel('useLaunchAdq.useBdMediaPup')
|
|
|
|
|
|
|
|
@@ -79,7 +82,6 @@ const CreateAd: React.FC = () => {
|
|
|
setAccountCreateLogs(accountCreateLogs)
|
|
|
}
|
|
|
}, [])
|
|
|
-
|
|
|
// 设置地域
|
|
|
useEffect(() => {
|
|
|
tagsList_REGION.run({ type: 'REGION' }).then(res => {
|
|
@@ -119,30 +121,8 @@ const CreateAd: React.FC = () => {
|
|
|
}
|
|
|
}, [getSysAdgroups?.data?.bidMode])
|
|
|
|
|
|
- /** 获取创意详情 */
|
|
|
- useEffect(() => {
|
|
|
- if (queryForm?.sysAdcreativeId && queryForm.sysAdcreativeId !== getSysAdcreative.params[0]) {
|
|
|
- getSysAdcreative.run(queryForm?.sysAdcreativeId).then(res=>{
|
|
|
- setQueryForm({...queryForm,sysAdcreative:res})
|
|
|
- })
|
|
|
- }
|
|
|
- }, [queryForm])
|
|
|
|
|
|
|
|
|
- /** 获取落地页详情 */
|
|
|
- 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) => {
|
|
@@ -172,11 +152,7 @@ const CreateAd: React.FC = () => {
|
|
|
setAccountCreateLogs(newArr)
|
|
|
}
|
|
|
|
|
|
- /** 设置落地页 */
|
|
|
- const setPage = (e: any) => {
|
|
|
- setQueryForm({ ...queryForm, sysPageId: e[0]?.id || undefined })
|
|
|
- setSelectImgVisible(false)
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
/** 预览 */
|
|
|
const preview = () => {
|
|
@@ -196,16 +172,28 @@ const CreateAd: React.FC = () => {
|
|
|
message.error('请选择定向')
|
|
|
return
|
|
|
}
|
|
|
- if (!queryForm.sysAdcreativeId) {
|
|
|
+ if (!queryForm.taskMediaMaps?.every(item => item.sysAdcreative)) {
|
|
|
message.error('请设置创意的基本信息')
|
|
|
return
|
|
|
}
|
|
|
- if (!queryForm.sysPageId) {
|
|
|
+ if (!queryForm.taskMediaMaps?.every(item => item.sysPageId || item.pageId)) {
|
|
|
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 }
|
|
|
+ let data: any[] = []
|
|
|
+ accountCreateLogs.forEach((item: any) => {
|
|
|
+ queryForm.taskMediaMaps?.forEach((task, index) => {
|
|
|
+ let obj = {
|
|
|
+ ...item,
|
|
|
+ ...queryForm,
|
|
|
+ sysAdGroupData: queryForm.sysAdgroup,
|
|
|
+ targetingData: queryForm.sysTargeting,
|
|
|
+ sysAdcreativeData: task.sysAdcreative,
|
|
|
+ pageData: (queryForm.pageList as any)[index],
|
|
|
+ myId: Number(item.id + '' + index)
|
|
|
+ }
|
|
|
+ data.push(obj)
|
|
|
+ })
|
|
|
})
|
|
|
console.log('data--->', data)
|
|
|
setTableData(data)
|
|
@@ -214,7 +202,8 @@ const CreateAd: React.FC = () => {
|
|
|
const submit = (data: { adgroupName: string, campaignName: string }) => {
|
|
|
console.log(111111, tableSelect);
|
|
|
let params = { ...queryForm, ...data }
|
|
|
- let accountLogs = tableSelect.map((item: any) => {
|
|
|
+ console.log(accountCreateLogs)
|
|
|
+ let accountLogs = accountCreateLogs.map((item: any, index) => {
|
|
|
// userActionSetsList 数据源 productList 商品
|
|
|
let data: any = { adAccountId: item.id }
|
|
|
if (item?.userActionSetsList?.length > 0) { // 数据源
|
|
@@ -231,11 +220,18 @@ const CreateAd: React.FC = () => {
|
|
|
data.excludedCustomAudience = item?.excludedCustomAudienceList?.map((item: any) => item.id)
|
|
|
}
|
|
|
if (item?.pageList) {
|
|
|
- data.pageId = item?.pageList[0].id
|
|
|
+ data.pageId = item?.pageData?.id
|
|
|
}
|
|
|
return data
|
|
|
})
|
|
|
params.accountCreateLogs = accountLogs
|
|
|
+ delete params.sysAdgroupId
|
|
|
+ delete params.sysAdcreativeId
|
|
|
+ delete params.sysTargetingId
|
|
|
+ delete params.pageList
|
|
|
+ delete params.adqPageList
|
|
|
+ console.log('params', params)
|
|
|
+ // return
|
|
|
createAdBatch.run(params).then(res => {
|
|
|
if (res) {
|
|
|
sessionStorage.setItem('CAMP', data?.campaignName)
|
|
@@ -275,11 +271,71 @@ const CreateAd: React.FC = () => {
|
|
|
adgroupName: undefined, // 广告名称
|
|
|
configuredStatus: 'AD_STATUS_SUSPEND', // 广告状态
|
|
|
sysAdcreativeId: undefined, // 创意ID
|
|
|
- sysPageId: undefined, // 落地页Id
|
|
|
})
|
|
|
}
|
|
|
- console.log(queryForm)
|
|
|
-
|
|
|
+ /** 设置落地页 */
|
|
|
+ const setPage = (e: any) => {
|
|
|
+ let arr: any = queryForm.taskMediaMaps || []
|
|
|
+ if (page_checked) {
|
|
|
+ arr = queryForm.taskMediaMaps?.map(item => ({ ...item, sysPageId: e[0]?.id, pageId: '', pageAccountId: '' }))
|
|
|
+ } else {
|
|
|
+ arr[targetKey as string] = { ...arr[targetKey as string], sysPageId: e[0]?.id, pageId: '', pageAccountId: '' }
|
|
|
+ }
|
|
|
+ getPageInfo(arr)
|
|
|
+ setSelectImgVisible(false)
|
|
|
+ }
|
|
|
+ /** 获取落地页详情 */
|
|
|
+ const getPageInfo = useCallback((arrList) => {
|
|
|
+ if (arrList && arrList[targetKey]?.sysPageId) {
|
|
|
+ get.run({ mediaType: 'PAGE', sysMediaId: arrList[targetKey]?.sysPageId }).then(res => {
|
|
|
+ if (!Object.keys(res)?.includes('fail')) {
|
|
|
+ let data = res
|
|
|
+ let pageElementsSpecList = data?.pageSpecsList[0]?.pageElementsSpecList
|
|
|
+ let arr: any = queryForm.pageList || []
|
|
|
+ if (page_checked) {
|
|
|
+ arr = arr.map((item: any) => data)
|
|
|
+ } else {
|
|
|
+ arr[targetKey] = data
|
|
|
+ }
|
|
|
+ setQueryForm({ ...queryForm, pageList: arr, taskMediaMaps: arrList })//设置落地页详情数组
|
|
|
+ setWxButtonList(() => (pageElementsSpecList as any[])?.filter((item: { elementType: string }) => item?.elementType === 'ENTERPRISE_WX'))
|
|
|
+ } else {
|
|
|
+ //清空对应创意中的落地页ID
|
|
|
+ let arr = queryForm.taskMediaMaps || []
|
|
|
+ arr[targetKey].sysPageId = ''
|
|
|
+ setQueryForm({ ...queryForm, taskMediaMaps: arr })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }, [queryForm, targetKey, page_checked])
|
|
|
+ // 设置云端落地页
|
|
|
+ const setAdqPage = useCallback((data) => {
|
|
|
+ let arr: any = queryForm.taskMediaMaps || []
|
|
|
+ let adqPageArr: any = queryForm.adqPageList || []
|
|
|
+ if (page_checked) {
|
|
|
+ adqPageArr = queryForm.taskMediaMaps?.map(item => data)
|
|
|
+ arr = queryForm.taskMediaMaps?.map(item => ({ ...item, sysPageId: '', pageId: data.pageId, pageAccountId: data.accountId }))
|
|
|
+ } else {
|
|
|
+ adqPageArr[targetKey as string] = data
|
|
|
+ arr[targetKey as string] = { ...arr[targetKey as string], sysPageId: '', pageId: data.pageId, pageAccountId: data.accountId }
|
|
|
+ }
|
|
|
+ setQueryForm({ ...queryForm, taskMediaMaps: arr, adqPageList: adqPageArr })
|
|
|
+
|
|
|
+ }, [queryForm, targetKey, page_checked])
|
|
|
+ // tabs新增和删除
|
|
|
+ const onEdit = useCallback((targetKey: string | React.MouseEvent<Element, MouseEvent> | React.KeyboardEvent<Element>, action: 'add' | 'remove') => {
|
|
|
+ if (queryForm.taskMediaMaps) {
|
|
|
+ if (action === 'remove') {
|
|
|
+ let arr = queryForm.taskMediaMaps
|
|
|
+ let adqPageArr = queryForm.adqPageList || []
|
|
|
+ let pageArr = queryForm.pageList || []
|
|
|
+ adqPageArr[targetKey as string] = {}
|
|
|
+ pageArr[targetKey as string] = {}
|
|
|
+ arr[targetKey as string] = { ...arr[targetKey as string], pageId: '', sysPageId: '', pageAccountId: '' }
|
|
|
+ setQueryForm({ ...queryForm, taskMediaMaps: arr, pageList: pageArr, adqPageList: adqPageArr })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }, [queryForm, targetKey])
|
|
|
return <Space direction="vertical" style={{ width: '100%' }}>
|
|
|
<Card title={<div className={style.cardTitle}>配置区</div>} className={style.createAd} hoverable>
|
|
|
<Space>
|
|
@@ -298,11 +354,12 @@ const CreateAd: React.FC = () => {
|
|
|
}
|
|
|
value={accountCreateLogs?.map((item: { id: number }) => item?.id)}
|
|
|
onChange={(e, option) => {
|
|
|
- setAccountCreateLogs(option?.map((item: any) => ({ adAccountId: item?.children, id: item?.value })))
|
|
|
+ console.log(option)
|
|
|
+ setAccountCreateLogs(option?.map((item: any) => ({ adAccountId: item?.children?.toString()?.split('——')[0], id: item?.value })))
|
|
|
clearData()
|
|
|
}}
|
|
|
>
|
|
|
- {getAdAccount?.data?.data?.map((item: any) => <Select.Option value={item.id} key={item.id}>{item.accountId+'——'+item.remark}</Select.Option>)}
|
|
|
+ {getAdAccount?.data?.data?.map((item: any) => <Select.Option value={item.id} key={item.id}>{item.remark ? item.accountId + '——' + item.remark : item.accountId}</Select.Option>)}
|
|
|
{/* <Select.OptGroup label="Engineer">
|
|
|
<Select.Option value="20632113">20632113</Select.Option>
|
|
|
</Select.OptGroup> */}
|
|
@@ -312,7 +369,7 @@ const CreateAd: React.FC = () => {
|
|
|
<Selector label="推广目标">
|
|
|
<Select style={{ width: 200 }} value={queryForm?.promotedObjectType} placeholder="请选择推广目标" bordered={false} showSearch filterOption={(input: any, option: any) =>
|
|
|
(option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
|
|
|
- } onChange={(e) => { setQueryForm({ ...queryForm, promotedObjectType: e ,sysAdgroup:null,sysAdgroupId:undefined,sysAdcreative:null,sysAdcreativeId:undefined}); clearData() }}>
|
|
|
+ } onChange={(e) => { setQueryForm({ ...queryForm, promotedObjectType: e, sysAdgroup: null, sysAdgroupId: undefined, taskMediaMaps: [], sysAdcreativeId: undefined }); clearData() }}>
|
|
|
{Object.keys(PromotedObjectType).map(key => {
|
|
|
return <Select.Option value={key} key={key}>{PromotedObjectType[key]}</Select.Option>
|
|
|
})}
|
|
@@ -322,7 +379,7 @@ const CreateAd: React.FC = () => {
|
|
|
|
|
|
<div className={style.cardBody}>
|
|
|
<Row className={style.content}>
|
|
|
- <Col span={16} className={style.conLeft}>
|
|
|
+ <Col span={12} className={style.conLeft}>
|
|
|
<Row className={`${style.conTitle} ${style.conRightBorder}`}><Col span={24}>广告</Col></Row>
|
|
|
<Row className={style.items}>
|
|
|
{/* =============广告基本信息=========== */}
|
|
@@ -341,7 +398,7 @@ const CreateAd: React.FC = () => {
|
|
|
accountCreateLogs={accountCreateLogs}
|
|
|
/>
|
|
|
{/* =============商品=========== */}
|
|
|
- <Col className={style.conRightBorder}>
|
|
|
+ <Col className={style.conRightBorder} span={5}>
|
|
|
<div className={style.top}>
|
|
|
商品{/* <span>已选:{1}</span> */}
|
|
|
</div>
|
|
@@ -372,7 +429,7 @@ const CreateAd: React.FC = () => {
|
|
|
</div>
|
|
|
</Col>
|
|
|
{/* 数据源 */}
|
|
|
- <Col className={style.conRightBorder}>
|
|
|
+ <Col className={style.conRightBorder} span={5}>
|
|
|
<div className={style.top}>
|
|
|
数据源 {/* <span>已选:{1}</span> */}
|
|
|
</div>
|
|
@@ -406,71 +463,82 @@ const CreateAd: React.FC = () => {
|
|
|
</Row>
|
|
|
</Col>
|
|
|
{/* =============广告创意=========== */}
|
|
|
- <Col span={8} className={style.conRight}>
|
|
|
+ <Col span={12} className={style.conRight}>
|
|
|
<Row className={style.conTitle}><Col span={24}>广告创意</Col></Row>
|
|
|
<Row className={style.items}>
|
|
|
{/* 创意 */}
|
|
|
- <Creative queryForm={queryForm} setQueryForm={setQueryForm} getSysAdgroups={getSysAdgroups} clearData={clearData} getSysAdcreative={getSysAdcreative}/>
|
|
|
+ <Creative queryForm={queryForm} setQueryForm={setQueryForm} getSysAdgroups={getSysAdgroups} clearData={clearData} getSysAdcreative={getSysAdcreative} set_targetKey={set_targetKey} targetKey={targetKey} page_checked={page_checked} />
|
|
|
{/* 落地页 */}
|
|
|
<Col span={12} >
|
|
|
<div className={style.top}>
|
|
|
- <span>落地页 <Tooltip title="云端落地页优先于本地落地页">
|
|
|
+ 落地页
|
|
|
+ {/* <span >落地页<Tooltip title="云端落地页优先于本地落地页">
|
|
|
<QuestionCircleOutlined />
|
|
|
- </Tooltip></span>
|
|
|
+ </Tooltip></span> */}
|
|
|
{wxButtonList?.length > 0 && <Button type="link" size="small">配置客服</Button>}
|
|
|
+ {<Checkbox checked={page_checked} onChange={(e) => {
|
|
|
+ let checked = e.target.checked
|
|
|
+ set_page_checked(checked)
|
|
|
+ }}><span style={{ fontSize: 12, fontWeight: 400, color: '#635f5f' }}>同落地页<Tooltip title="勾选后请重新选择一次落地页,将覆盖全部创意,使用同一个落地页">
|
|
|
+ <QuestionCircleOutlined style={{ color: '#03a9f4', marginLeft: 2 }} />
|
|
|
+ </Tooltip></span></Checkbox>}
|
|
|
</div>
|
|
|
<div className={style.center}>
|
|
|
- <Spin spinning={get.loading}>
|
|
|
- <div className={style.centerContent}>
|
|
|
- {(queryForm?.sysPageId || accountCreateLogs?.some((item: any) => item.pageList?.length > 0) && !Object.keys(get?.data)?.includes('fail')) ? <>
|
|
|
- {(queryForm?.sysPageId && !accountCreateLogs?.every((item: any) => item.pageList?.length > 0)) && <>
|
|
|
- <div>落地页名称:{get?.data?.pageName || ''}</div>
|
|
|
- <div>分享名称:{get?.data?.shareContentSpec?.shareTitle || ''}</div>
|
|
|
- <div>分享描述:{get?.data?.shareContentSpec?.shareDescription || ''}</div>
|
|
|
- <div style={{ marginBottom: 10 }}>原生推广页顶部素材预览:
|
|
|
- <div>{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 <Image width={80} src={item.topImageSpec.imageUrl} style={{ borderRadius: 8, overflow: 'hidden' }} key={index} />
|
|
|
- case 'TOP_SLIDER':
|
|
|
- return <Space wrap key={index}>
|
|
|
- {item?.topSliderSpec?.imageUrlList?.map((url: string, index: number) => <Image width={70} src={url} style={{ borderRadius: 8 }} key={'TOP_SLIDER' + index} />)}
|
|
|
- </Space>
|
|
|
- case 'TOP_VIDEO':
|
|
|
- return <video src={item.topVideoSpec.videoUrl} width={150} controls key={index}></video>
|
|
|
- }
|
|
|
- })}</div>
|
|
|
- </div>
|
|
|
- </>}
|
|
|
- {accountCreateLogs?.map((item: any, index: number) => {
|
|
|
- if (item?.pageList && item?.pageList?.length > 0) {
|
|
|
- return <div className={style.acc} key={index}>
|
|
|
- <div className={style.accName} style={{ fontWeight: 800 }}>{item.adAccountId}</div>
|
|
|
+ <Tabs size={'small'} onEdit={onEdit} type="editable-card" activeKey={targetKey} onChange={(key) => { set_targetKey(key) }} hideAdd >
|
|
|
+ {
|
|
|
+ queryForm?.taskMediaMaps?.map((item, index) => {
|
|
|
+ return <Tabs.TabPane tab={'创意' + (index + 1)} key={index} >
|
|
|
+ <Spin spinning={get.loading}>
|
|
|
+ <div className={style.centerContent}>
|
|
|
{
|
|
|
- item?.pageList?.map((pack: { pageName: string, type: string, id: number }, index1: number) => {
|
|
|
- return <div className={style.accCon} key={pack.id}> <span className={style.title}>{pack.pageName}</span> <CloseOutlined className={style.close} onClick={() => {
|
|
|
- pageDel(index)
|
|
|
- }} /></div>
|
|
|
- })
|
|
|
- }
|
|
|
+ item?.sysPageId || item?.pageId ? <>
|
|
|
+ {
|
|
|
+ (item?.sysPageId && queryForm?.pageList) && <>
|
|
|
+ <div>落地页名称:{queryForm?.pageList[targetKey]?.pageName || ''}</div>
|
|
|
+ <div>分享名称:{queryForm?.pageList[targetKey]?.shareContentSpec?.shareTitle || ''}</div>
|
|
|
+ <div>分享描述:{queryForm?.pageList[targetKey]?.shareContentSpec?.shareDescription || ''}</div>
|
|
|
+ <div style={{ marginBottom: 10 }}>原生推广页顶部素材预览:
|
|
|
+ <div>{queryForm?.pageList[targetKey]?.pageSpecsList && queryForm?.pageList[targetKey]?.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 <Image width={80} src={item?.topImageSpec?.imageUrl} style={{ borderRadius: 8, overflow: 'hidden' }} key={index} />
|
|
|
+ case 'TOP_SLIDER':
|
|
|
+ return <Space wrap key={index}>
|
|
|
+ {item?.topSliderSpec?.imageUrlList?.map((url: string, index: number) => <Image width={70} src={url} style={{ borderRadius: 8 }} key={'TOP_SLIDER' + index} />)}
|
|
|
+ </Space>
|
|
|
+ case 'TOP_VIDEO':
|
|
|
+ return <video src={item?.topVideoSpec?.videoUrl} width={150} controls key={index}></video>
|
|
|
+ }
|
|
|
+ })}</div>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ }
|
|
|
+ {
|
|
|
+ item?.pageId && queryForm?.adqPageList && <div className={style.acc} >
|
|
|
+ <div className={style.accName} style={{ fontWeight: 800 }}>{queryForm?.adqPageList[targetKey]?.adAccountId}</div>
|
|
|
+ <div className={style.accCon}>
|
|
|
+ <span className={style.title}>{queryForm?.adqPageList[targetKey]?.pageName}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ }
|
|
|
+ </> : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />}
|
|
|
</div>
|
|
|
- } else {
|
|
|
- return null
|
|
|
- }
|
|
|
- })}
|
|
|
- </> : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />}
|
|
|
- </div>
|
|
|
- </Spin>
|
|
|
+ </Spin>
|
|
|
+ </Tabs.TabPane>
|
|
|
+ })
|
|
|
+ }
|
|
|
+ </Tabs>
|
|
|
</div>
|
|
|
- <div className={style.bottom}>{queryForm?.sysAdcreativeId ? <>
|
|
|
- {queryForm?.sysPageId && <Button type="link" onClick={() => { setLookVisible(true) }}>查看</Button>}
|
|
|
- <Button type="link" onClick={() => { setSelectImgVisible(true) }}>{queryForm?.sysPageId ? '修改' : '选择落地页'}</Button>
|
|
|
- {accountCreateLogs?.length > 0 ? <Button type="link" onClick={() => { setPageVisible(true) }}>云端落地页</Button> : <Tooltip title="请先选择媒体账户">
|
|
|
- <Button type="link">云端落地页</Button>
|
|
|
+ <div className={style.bottom}>{
|
|
|
+ queryForm?.sysAdcreativeId ? <>
|
|
|
+ {queryForm?.taskMediaMaps && queryForm?.taskMediaMaps[targetKey]?.sysPageId && <Button type="link" onClick={() => { setLookVisible(true) }}>查看</Button>}
|
|
|
+ <Button type="link" onClick={() => { setSelectImgVisible(true) }}>{queryForm?.taskMediaMaps && queryForm?.taskMediaMaps[targetKey]?.sysPageId ? '修改' : '选择落地页'}</Button>
|
|
|
+ {accountCreateLogs?.length > 0 ? <Button type="link" onClick={() => { setPageVisible(true) }}>云端落地页</Button> : <Tooltip title="请先选择媒体账户">
|
|
|
+ <Button type="link">云端落地页</Button>
|
|
|
+ </Tooltip>}
|
|
|
+ </> : <Tooltip title="请先设置创意">
|
|
|
+ <Button type="link"><span>选择落地页</span></Button>
|
|
|
</Tooltip>}
|
|
|
- </> : <Tooltip title="请先设置创意">
|
|
|
- <Button type="link"><span>选择落地页</span></Button>
|
|
|
- </Tooltip>}
|
|
|
</div>
|
|
|
</Col>
|
|
|
</Row>
|
|
@@ -489,15 +557,15 @@ const CreateAd: React.FC = () => {
|
|
|
className={style.createAd}
|
|
|
hoverable
|
|
|
extra={tableData?.length > 0 ? <Space>
|
|
|
- <span>推广计划总数:{accountCreateLogs?.length}</span>
|
|
|
- <span>广告总数:{accountCreateLogs?.length}</span>
|
|
|
- {tableSelect?.length > 0 && <span> 已选:<span style={{ color: '#1890FF' }}>{tableSelect?.length}</span> 条</span>}
|
|
|
+ <span>推广计划总数:{tableData?.length}</span>
|
|
|
+ <span>广告总数:{tableData?.length}</span>
|
|
|
+ {/* {tableSelect?.length > 0 && <span> 已选:<span style={{ color: '#1890FF' }}>{tableSelect?.length}</span> 条</span>} */}
|
|
|
{
|
|
|
<Button type='primary' onClick={() => {
|
|
|
- if (tableSelect.length === 0) {
|
|
|
- message.error('请选择要提交的计划!')
|
|
|
- return
|
|
|
- };
|
|
|
+ // if (tableSelect.length === 0) {
|
|
|
+ // message.error('请选择要提交的计划!')
|
|
|
+ // return
|
|
|
+ // };
|
|
|
setSubVisible(true)
|
|
|
}}>批量提交审核</Button>
|
|
|
}
|
|
@@ -512,13 +580,14 @@ const CreateAd: React.FC = () => {
|
|
|
total={0}
|
|
|
size="small"
|
|
|
bordered
|
|
|
- scroll={{ x: 1800 }}
|
|
|
- rowSelection={{
|
|
|
- selectedRowKeys: tableSelect?.map((item: any) => item?.id.toString()),
|
|
|
- onChange: (selectedRowKeys: React.Key[], selectedRows: any) => {
|
|
|
- setTableSelect(selectedRows)
|
|
|
- }
|
|
|
- }}
|
|
|
+ scroll={{ x: 2000 }}
|
|
|
+ myKey={'myId'}
|
|
|
+ // rowSelection={{
|
|
|
+ // selectedRowKeys: tableSelect?.map((item: any) => item?.myId.toString()),
|
|
|
+ // onChange: (selectedRowKeys: React.Key[], selectedRows: any) => {
|
|
|
+ // setTableSelect(selectedRows)
|
|
|
+ // }
|
|
|
+ // }}
|
|
|
/>
|
|
|
</div>
|
|
|
</div> : <div style={{ minHeight: 400, display: 'flex', justifyContent: 'center', alignItems: 'center' }}>
|
|
@@ -527,7 +596,7 @@ const CreateAd: React.FC = () => {
|
|
|
</Card>
|
|
|
|
|
|
|
|
|
-
|
|
|
+
|
|
|
{/* 选择商品 */}
|
|
|
{goodsVisible && <GoodsModal visible={goodsVisible} data={accountCreateLogs} onClose={() => setGoodsVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setGoodsVisible(false); clearData() }} />}
|
|
|
{/* 选择数据源 */}
|
|
@@ -535,11 +604,11 @@ const CreateAd: React.FC = () => {
|
|
|
{/* 选择转化ID */}
|
|
|
{idVisible && <IdModal visible={idVisible} data={accountCreateLogs} onClose={() => setIdVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setSourceVisible(false); clearData() }} />}
|
|
|
{/* 选择ADQ落地页 */}
|
|
|
- {pageVisible && <PageModal visible={pageVisible} data={accountCreateLogs} onClose={() => setPageVisible(false)} onChange={(e) => { setAccountCreateLogs(e); setPageVisible(false); clearData() }} />}
|
|
|
+ {pageVisible && <PageModal visible={pageVisible} data={getAdAccount?.data?.data} onClose={() => setPageVisible(false)} onChange={(e) => { console.log('选择ADQ落地页', e); setAdqPage(e); setPageVisible(false); clearData() }} />}
|
|
|
{/* 选择素材 */}
|
|
|
{selectImgVisible && <SelectCloud visible={selectImgVisible} onClose={() => setSelectImgVisible(false)} onChange={setPage} isBack={false} />}
|
|
|
{/* 查看落地页 */}
|
|
|
- {lookVisible && <LookLanding visible={lookVisible} onClose={() => setLookVisible(false)} id={queryForm?.sysPageId as any} />}
|
|
|
+ {lookVisible && <LookLanding visible={lookVisible} onClose={() => setLookVisible(false)} id={queryForm?.taskMediaMaps && queryForm?.taskMediaMaps[targetKey].sysPageId} />}
|
|
|
{/* 设置名称 */}
|
|
|
{subVisible && <SubmitModal data={getSysAdgroups?.data} visible={subVisible} onClose={() => setSubVisible(false)} onChange={submit} ajax={createAdBatch} />}
|
|
|
</Space>
|