123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 |
- import { Space, TableProps, Typography } from "antd"
- import React from "react"
- const { Text, Title } = Typography;
- import style from './index.less'
- import VideoNews from "@/pages/launchSystemNew/components/newsModal/videoNews";
- import styles from './Material/index.less'
- import { OPTIMIZATIONGOAL_ENUM } from "../const";
- const columns = (): TableProps<any>['columns'] => {
- return [
- {
- title: '广告',
- dataIndex: 'adgroup',
- key: 'adgroup',
- align: 'center',
- children: [
- {
- title: '广告名称',
- dataIndex: 'adgroupName',
- key: 'adgroupName',
- width: 250,
- render: (_, b) => {
- return <Text style={{ fontSize: 12 }}>{b?.adgroupsDto?.adgroupName}</Text>
- },
- onCell: (record, index = 0) => ({
- rowSpan: record?.isRowSpan ? record.rowSpan : !(index % record.rowSpan) ? record.rowSpan : 0
- })
- },
- {
- title: '营销内容',
- dataIndex: 'productName',
- key: 'productName',
- width: 200,
- render: (_, b) => {
- if (['MARKETING_TARGET_TYPE_FICTION', 'MARKETING_TARGET_TYPE_SHORT_DRAMA'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
- return <Space size={0} direction="vertical">
- <Text style={{ fontSize: 12 }}>推广产品:{b?.productDto?.marketingAssetName}(产品ID:{b?.productDto?.marketingAssetId})</Text>
- {(b.adgroupsDto?.marketingCarrierType === 'MARKETING_CARRIER_TYPE_WECHAT_OFFICIAL_ACCOUNT' && b?.marketingCarrierDto) && <Text style={{ fontSize: 12 }}>营销载体:{b.marketingCarrierDto.map((item: { wechatOfficialAccountName: any; wechatOfficialAccountId: any; }) => `${item?.wechatOfficialAccountName}(${item?.wechatOfficialAccountId})`)?.toString()}</Text>}
- <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
- </Space>
- } else if (['MARKETING_TARGET_TYPE_WECHAT_OFFICIAL_ACCOUNT'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
- return <Space size={0} direction="vertical">
- <Text style={{ fontSize: 12 }}>推广产品:微信公众号</Text>
- <Text style={{ fontSize: 12 }}>营销载体:微信公众号</Text>
- <Text style={{ fontSize: 12 }}>应用:{b?.productDto?.wechatOfficialAccountName}({b?.productDto?.wechatOfficialAccountId})</Text>
- <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
- </Space>
- } else if (['MARKETING_TARGET_TYPE_MINI_PROGRAM_WECHAT'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
- return <Space size={0} direction="vertical">
- <Text style={{ fontSize: 12 }}>推广产品:微信小程序(产品本地ID:{b?.adgroupsDto?.sysWechatAppId})</Text>
- <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
- </Space>
- } else if (['MARKETING_TARGET_TYPE_WECHAT_WORK'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
- return <Space size={0} direction="vertical">
- <Text style={{ fontSize: 12 }}>推广产品:企业微信(产品本地ID:{b?.adgroupsDto?.sysCorpWechatId})</Text>
- <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
- </Space>
- } else if (['MARKETING_TARGET_TYPE_WECHAT_MINI_GAME'].includes(b.adgroupsDto?.marketingAssetOuterSpec?.marketingTargetType)) {
- return <Space size={0} direction="vertical">
- <Text style={{ fontSize: 12 }}>推广产品:微信小游戏(appId:{b?.adgroupsDto?.wxGameAppId})</Text>
- <Text style={{ fontSize: 12 }}>转化归因:{b?.userActionSetsList ? b?.userActionSetsList.map((item: { name: any; }) => item.name).toString() : b?.conversionList ? b?.conversionList.map((item: { conversionName: any; conversionId: any; }) => `${item?.conversionName}(${item.conversionId})`).toString() : '暂未配置'}</Text>
- </Space>
- }
- return 'ERROR,请联系管理员'
- },
- onCell: (record, index = 0) => ({
- rowSpan: record?.isRowSpan ? record.rowSpan : !(index % record.rowSpan) ? record.rowSpan : 0
- }),
- },
- {
- title: '定向',
- dataIndex: 'targeting',
- key: 'targeting',
- width: 170,
- render: (_, b) => {
- return <Text style={{ fontSize: 12 }}>{b?.targetDto?.targetingName}</Text>
- },
- onCell: (record, index = 0) => ({
- rowSpan: record?.isRowSpan ? record.rowSpan : !(index % record.rowSpan) ? record.rowSpan : 0
- }),
- },
- {
- title: '预算与出价',
- dataIndex: 'dailyBudget',
- key: 'dailyBudget',
- width: 170,
- render: (_, b) => {
- let { optimizationGoal, dailyBudget, bidAmount, bidMode } = b?.adgroupsDto
- return <Space size={0} direction="vertical">
- <Text style={{ fontSize: 12 }}>广告日预算:{dailyBudget ? dailyBudget + '元/天' : '不限'}</Text>
- <Text style={{ fontSize: 12 }}>出价:{bidAmount}元/{optimizationGoal ? (OPTIMIZATIONGOAL_ENUM as any)[optimizationGoal] : ['BID_MODE_OCPM', 'BID_MODE_OCPC'].includes(bidMode) ? '千次曝光' : '点击'}</Text>
- </Space>
- },
- onCell: (record, index = 0) => ({
- rowSpan: record?.isRowSpan ? record.rowSpan : !(index % record.rowSpan) ? record.rowSpan : 0
- }),
- },
- ]
- },
- {
- title: '创意',
- dataIndex: 'dynamicDto',
- key: 'dynamicDto',
- align: 'center',
- children: [
- {
- title: '创意名称',
- dataIndex: 'dynamicCreativeName',
- key: 'dynamicCreativeName',
- width: 200,
- render: (_, b) => {
- return <Text style={{ fontSize: 12 }}>{b?.dynamicDto?.dynamicCreativeName}</Text>
- }
- },
- {
- title: '创意素材',
- dataIndex: 'dynamicGroup',
- key: 'dynamicGroup',
- width: 210,
- render: (_, b) => {
- let deliveryMode = b?.dynamicDto?.deliveryMode
- let dynamicGroup = b?.dynamicGroup
- if (dynamicGroup && Object.keys(dynamicGroup).length) {
- let keys = Object.keys(dynamicGroup)
- if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE") {
- return <>
- <div className={style.detail_body_m}>
- {(keys.includes('video_id') || keys.includes('short_video1')) ? <>
- <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选1个视频,0张图片</Title>
- <div className={style.video}>
- <VideoNews src={dynamicGroup?.video_id?.url || dynamicGroup?.short_video1?.url} keyFrameImageUrl={dynamicGroup?.video_id?.keyFrameImageUrl || dynamicGroup?.short_video1?.keyFrameImageUrl}/>
- {dynamicGroup?.cover_id && <div className={style.cover_image} style={{ marginLeft: 4 }}>
- <img src={dynamicGroup?.cover_id?.url} />
- </div>}
- </div>
- </> : keys.includes('image_id') ? <>
- <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选0个视频,1张图片</Title>
- <div className={style.cover_image}>
- <img src={dynamicGroup?.image_id?.url} />
- </div>
- </> : (keys.includes('image_list') || keys.includes('element_story')) ? <>
- <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选1个组图, 0个视频</Title>
- {dynamicGroup?.[keys.includes('image_list') ? 'image_list' : 'element_story']?.map((item: { url: string | undefined; }, index: undefined) => <div className={style.cover_image} key={index} style={{ width: 30, height: 24, minWidth: 32 }}>
- <img src={item?.url} />
- </div>)}
- </> : null}
- </div>
- </>
- } else {
- return <div style={{ display: 'flex', gap: 5, flexWrap: 'wrap' }}>
- {dynamicGroup?.list?.map((item: any, index: number) => {
- if (Array.isArray(item)) {
- let length = item.length
- return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
- <div className={styles.content} style={{ width: 30, height: 30 }}>
- {item.map((l, i) => <img src={l?.url} key={i} style={{ width: length >= 6 ? 9.999 : 14.999 }} />)}
- </div>
- </div>
- } else if (item?.url?.includes('mp4') || item?.keyFrameImageUrl) {
- return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
- <div className={styles.content} style={{ width: 30, height: 30 }}>
- <VideoNews src={item?.url} style={{ width: 30, height: 30 }} keyFrameImageUrl={item?.keyFrameImageUrl} maskBodyStyle={{ backgroundColor: "rgba(242, 246, 254, 0.1)" }} />
- </div>
- </div>
- } else {
- return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
- <div className={styles.content} style={{ width: 30, height: 30 }}><img src={item?.url} /></div>
- </div>
- }
- })}
- </div>
- }
- } else {
- return <Text style={{ fontSize: 12 }}>无需配置</Text>
- }
- }
- },
- {
- title: '创意文案',
- dataIndex: 'textDto',
- key: 'textDto',
- width: 200,
- render: (value, b) => {
- let deliveryMode = b?.dynamicDto?.deliveryMode
- if (value && Object.keys(value).length) {
- if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE") {
- return <div className={style.detail_body} style={{ height: 'auto' }}>
- {Object.keys(value)?.map((key, index: number) => {
- return <div key={index}>
- {key === 'description' ? <>
- <Title level={5} style={{ fontSize: 12 }}>{'文案'}</Title>
- {value['description'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
- </> : key === 'title' ? <>
- <Title level={5} style={{ fontSize: 12 }}>{'标题'}</Title>
- {value['title'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
- </> : null}
- </div>
- })}
- </div>
- } else {
- return <div className={style.detail_body} style={{ height: 'auto' }}>
- {Object.keys(value)?.map((key, index: number) => {
- return <div key={index}>
- {key === 'description' ? <>
- <Title level={5} style={{ fontSize: 12 }}>{'文案'}</Title>
- {value['description'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
- </> : key === 'title' ? <>
- <Title level={5} style={{ fontSize: 12 }}>{'标题'}</Title>
- {value['title'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
- </> : null}
- </div>
- })}
- </div>
- }
- } else {
- return <Text style={{ fontSize: 12 }}>无需配置</Text>
- }
- }
- },
- {
- title: '跳转类型',
- dataIndex: 'pageListDto',
- key: 'pageListDto',
- width: 200,
- render: (_, b) => {
- let pageListDto = b?.pageListDto
- let pageType = b?.dynamicDto?.creativeComponents?.mainJumpInfo?.[0]?.value?.pageType
- if (pageType === 'PAGE_TYPE_WECHAT_MINI_GAME') {
- return <Text style={{ fontSize: 12 }}>无需配置</Text>
- }
- return <Text style={{ fontSize: 12, wordBreak: 'break-all' }}>
- {pageType === 'PAGE_TYPE_OFFICIAL' ? '灵鹊落地页' : pageType === 'PAGE_TYPE_WECHAT_MINI_PROGRAM' ? '微信小程序' : '原生推广页'}:
- {pageListDto?.map((item: { pageName: any; }) => item?.pageName)?.join(',')}
- </Text>
- }
- }
- ]
- }
- ]
- }
- export const columnsAddDynamic = (): TableProps<any>['columns'] => {
- return [
- {
- title: '广告',
- dataIndex: 'adgroup',
- key: 'adgroup',
- align: 'center',
- children: [
- {
- title: '广告名称',
- dataIndex: 'adgroupName',
- key: 'adgroupName',
- width: 250,
- render: (_, b) => {
- return <Text style={{ fontSize: 12 }}>{b?.adgroupsDto?.adgroupName}</Text>
- },
- onCell: (record, index = 0) => ({
- rowSpan: !(index % record.rowSpan) ? record.rowSpan : 0
- }),
- },
- ]
- },
- {
- title: '创意',
- dataIndex: 'dynamicDto',
- key: 'dynamicDto',
- align: 'center',
- children: [
- {
- title: '创意名称',
- dataIndex: 'dynamicCreativeName',
- key: 'dynamicCreativeName',
- width: 200,
- render: (_, b) => {
- return <Text style={{ fontSize: 12 }}>{b?.dynamicDto?.dynamicCreativeName}</Text>
- }
- },
- {
- title: '创意素材',
- dataIndex: 'dynamicGroup',
- key: 'dynamicGroup',
- width: 200,
- render: (_, b) => {
- let deliveryMode = b?.dynamicDto?.deliveryMode
- let dynamicGroup = b?.dynamicGroup
- if (dynamicGroup && Object.keys(dynamicGroup).length) {
- let keys = Object.keys(dynamicGroup)
- if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE") {
- // return <Text style={{ fontSize: 12, color: '#1890ff' }}>已选{(keys.includes('video_id') || keys.includes('short_video1')) ? '1个视频,0张图片' : keys.includes('image_id') ? '0个视频,1张图片' : (keys.includes('image_list') || keys.includes('element_story') ? '1个组图, 0个视频' : '')}</Text>
- return <>
- <div className={style.detail_body_m}>
- {(keys.includes('video_id') || keys.includes('short_video1')) ? <>
- <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选1个视频,0张图片</Title>
- <div className={style.video}>
- <VideoNews src={dynamicGroup?.video_id?.url || dynamicGroup?.short_video1?.url} keyFrameImageUrl={dynamicGroup?.video_id?.keyFrameImageUrl || dynamicGroup?.short_video1?.keyFrameImageUrl}/>
- {dynamicGroup?.cover_id && <div className={style.cover_image} style={{ marginLeft: 4 }}>
- <img src={dynamicGroup?.cover_id?.url} />
- </div>}
- </div>
- </> : keys.includes('image_id') ? <>
- <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选0个视频,1张图片</Title>
- <div className={style.cover_image}>
- <img src={dynamicGroup?.image_id?.url} />
- </div>
- </> : (keys.includes('image_list') || keys.includes('element_story')) ? <>
- <Title style={{ fontSize: 12, color: '#1890ff', marginBottom: 0, width: '100%' }}>已选1个组图, 0个视频</Title>
- {dynamicGroup?.[keys.includes('image_list') ? 'image_list' : 'element_story']?.map((item: { url: string | undefined; }, index: undefined) => <div className={style.cover_image} key={index} style={{ width: 30, height: 24, minWidth: 32 }}>
- <img src={item?.url} />
- </div>)}
- </> : null}
- </div>
- </>
- } else {
- return <div style={{ display: 'flex', gap: 5, flexWrap: 'wrap' }}>
- {dynamicGroup?.list?.map((item: any, index: number) => {
- if (Array.isArray(item)) {
- let length = item.length
- return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
- <div className={styles.content} style={{ width: 30, height: 30 }}>
- {item.map((l, i) => <img src={l?.url} key={i} style={{ width: length === 6 ? 9.999 : 14.999 }} />)}
- </div>
- </div>
- } else if (item?.url?.includes('mp4') || item?.keyFrameImageUrl) {
- return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
- <div className={styles.content} style={{ width: 30, height: 30 }}>
- <VideoNews src={item?.url} style={{ width: 30, height: 30 }} keyFrameImageUrl={item?.keyFrameImageUrl} maskBodyStyle={{ backgroundColor: "rgba(242, 246, 254, 0.1)" }} />
- </div>
- </div>
- } else {
- return <div className={styles.boxList_body_item} key={index} style={{ width: 30, height: 30 }}>
- <div className={styles.content} style={{ width: 30, height: 30 }}><img src={item?.url} /></div>
- </div>
- }
- })}
- </div>
- }
- } else {
- return <Text style={{ fontSize: 12 }}>无需配置</Text>
- }
- }
- },
- {
- title: '创意文案',
- dataIndex: 'textDto',
- key: 'textDto',
- width: 200,
- render: (value, b) => {
- let deliveryMode = b?.dynamicDto?.deliveryMode
- if (value && Object.keys(value).length) {
- if (deliveryMode === "DELIVERY_MODE_CUSTOMIZE") {
- return <div className={style.detail_body} style={{ height: 'auto' }}>
- {Object.keys(value)?.map((key, index: number) => {
- return <div key={index}>
- {key === 'description' ? <>
- <Title level={5} style={{ fontSize: 12 }}>{'文案'}</Title>
- {value['description'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
- </> : key === 'title' ? <>
- <Title level={5} style={{ fontSize: 12 }}>{'标题'}</Title>
- {value['title'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
- </> : null}
- </div>
- })}
- </div>
- } else {
- return <div className={style.detail_body} style={{ height: 'auto' }}>
- {Object.keys(value)?.map((key, index: number) => {
- return <div key={index}>
- {key === 'description' ? <>
- <Title level={5} style={{ fontSize: 12 }}>{'文案'}</Title>
- {value['description'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
- </> : key === 'title' ? <>
- <Title level={5} style={{ fontSize: 12 }}>{'标题'}</Title>
- {value['title'].map((t: string, index: number) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
- </> : null}
- </div>
- })}
- </div>
- }
- } else {
- return <Text style={{ fontSize: 12 }}>无需配置</Text>
- }
- }
- },
- {
- title: '跳转类型',
- dataIndex: 'pageListDto',
- key: 'pageListDto',
- width: 200,
- render: (_, b) => {
- let pageListDto = b?.pageListDto
- let pageType = b?.dynamicDto?.creativeComponents?.mainJumpInfo?.[0]?.value?.pageType
- if (pageType === 'PAGE_TYPE_WECHAT_MINI_GAME') {
- return <Text style={{ fontSize: 12 }}>无需配置</Text>
- }
- return <Text style={{ fontSize: 12, wordBreak: 'break-all' }}>
- {pageType === 'PAGE_TYPE_OFFICIAL' ? '灵鹊落地页' : pageType === 'PAGE_TYPE_WECHAT_MINI_PROGRAM' ? '微信小程序' : '原生推广页'}:
- {pageListDto?.map((item: { pageName: any; }) => item?.pageName)?.join(',')}
- </Text>
- }
- }
- ]
- }
- ]
- }
- export default columns
|