Просмотр исходного кода

Merge branch 'develop' of http://git.zanxiangnet.com/wjx/ad-manage

wjx 9 месяцев назад
Родитель
Сommit
00b76c6e30

+ 18 - 1
src/pages/launchSystemV3/adMonitorListV3/TabAd.tsx

@@ -10,6 +10,7 @@ import RuleLog from "@/components/EarlyWarning/ruleLog"
 import tableConfigEw from "@/pages/adMonitor/adMonitorList/components/tableConfigEw"
 import tableConfig from "../adqv3/creative/tableConfig"
 import { ADGROUP_STATUS } from "../adqv3/const"
+import ReviewDetails from "../adqv3/creative/reviewDetails"
 
 export enum EWTypeEnum {
     DEFAULT = '默认告警规则',
@@ -28,6 +29,8 @@ const TabAd: React.FC<Props> = ({ accountId, adgroupId }) => {
     const [logVisible, setLogVisible] = useState<boolean>(false)
     const [ruleId, setrRleId] = useState<number>(0)
     const [ruleName, setrRuleName] = useState<string>('')
+    const [dynimicData, setDynamicData] = useState<any>({})
+    const [dynimicVisible, setDynamicVisible] = useState<boolean>(false)
 
     const getAdgroupDetails = useAjax((params) => getAdgroupDetailsApi(params), { formatResult: true })
     const delAdWarningRule = useAjax((params) => delAdWarningRuleApi(params), { formatResult: true })
@@ -106,6 +109,11 @@ const TabAd: React.FC<Props> = ({ accountId, adgroupId }) => {
         return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
     }, [getAdgroupDetails?.data?.data, getAdgroupDetails.loading])
 
+    const reviewStatusDetails = (value: any) => {
+        setDynamicData(value)
+        setDynamicVisible(true)
+    }
+
     const CreativePreview = useMemo(() => {
 
         return <Card
@@ -116,12 +124,13 @@ const TabAd: React.FC<Props> = ({ accountId, adgroupId }) => {
             <TableData
                 size="small"
                 isCard={false}
-                columns={() => tableConfig()}
+                columns={() => tableConfig(reviewStatusDetails)}
                 ajax={getAdgroupDetails}
                 dataSource={getAdgroupDetails?.data?.data?.dynamicCreativeList || []}
                 leftChild={<Space>
                     <strong>创意预览</strong>
                 </Space>}
+                scroll={{ y: 500 }}
                 myKey={'dynamicCreativeId'}
                 loading={getAdgroupDetails?.loading}
                 total={getAdgroupDetails?.data?.data?.dynamicCreativeList?.length || 0}
@@ -202,6 +211,14 @@ const TabAd: React.FC<Props> = ({ accountId, adgroupId }) => {
         {EWContent}
 
         {logVisible && <RuleLog ruleName={ruleName} ruleId={ruleId} visible={logVisible} onClose={() => setLogVisible(false)} />}
+        {dynimicVisible && <ReviewDetails
+            visible={dynimicVisible}
+            dynamic={dynimicData}
+            onClose={() => {
+                setDynamicData({})
+                setDynamicVisible(false)
+            }}
+        />}
     </Space>
 }
 

+ 6 - 2
src/pages/launchSystemV3/adqv3/creative/index.tsx

@@ -30,7 +30,11 @@ const Creative: React.FC<ADQV3.CreativeProps> = ({ queryForm, setQueryForm, user
     }, [queryForm.adgroupId])
 
     useEffect(() => {
-        getDynamicCreativeV3List.run({ ...queryForm, userId })
+        let params: any = { ...queryForm, userId }
+        if (params?.accountId) {
+            params.accountId = params.accountId?.split(/[,,\s\n]+/)
+        }
+        getDynamicCreativeV3List.run(params)
     }, [userId, queryForm])
 
     const onFinish = (values: any) => {
@@ -68,7 +72,7 @@ const Creative: React.FC<ADQV3.CreativeProps> = ({ queryForm, setQueryForm, user
             >
                 <Row gutter={[10, 10]}>
                     <Col><Form.Item name='accountId' style={{ marginRight: 0 }}>
-                        <Input placeholder="广告账号" style={{ width: 120 }} allowClear />
+                        <Input placeholder="广告账号,多个逗号隔开" style={{ width: 150 }} allowClear />
                     </Form.Item></Col>
                     <Col><Form.Item name='adgroupId' style={{ marginRight: 0 }}>
                         <Input placeholder="广告ID" style={{ width: 120 }} allowClear />

+ 21 - 3
src/pages/launchSystemV3/components/PageModal/index.tsx

@@ -26,7 +26,7 @@ const PageModal: React.FC<Props> = (props) => {
     /*************************/
     const { visible, onClose, data: data1, adgroups, onChange, dynamic } = props
     const { marketingGoal, marketingAssetOuterSpec: { marketingTargetType }, marketingCarrierType, siteSet } = adgroups
-    const { creativeTemplateId, creativeComponents: { mainJumpInfo } } = dynamic
+    const { creativeTemplateId, deliveryMode, creativeComponents: { mainJumpInfo } } = dynamic
     let overrideCanvasHeadOption = ''
     if (mainJumpInfo && mainJumpInfo?.length > 0) {
         mainJumpInfo.forEach((item: any) => {
@@ -96,6 +96,10 @@ const PageModal: React.FC<Props> = (props) => {
     }
 
     const handleOk = () => {
+        if (deliveryMode === "DELIVERY_MODE_COMPONENT" && !data?.every(item => item.pageList?.length === mainJumpInfo?.length)) {
+            message.error(`当前落地页数量不足,跳转类型选择了${mainJumpInfo.length}组,落地页应当选择${mainJumpInfo.length}组`)
+            return
+        }
         if (data?.every(item => item.pageList)) {
             onChange && onChange(data)
         } else {
@@ -260,10 +264,23 @@ const PageModal: React.FC<Props> = (props) => {
                      * IMAGE
                      */
                     rowSelection={{
-                        type: [910].includes(creativeTemplateId) ? 'checkbox' : 'radio',
+                        type: ([910].includes(creativeTemplateId) || deliveryMode === "DELIVERY_MODE_COMPONENT") ? 'checkbox' : 'radio',
                         getCheckboxProps: (record) => {
                             let { canvasType, pageElementsSpecList } = record
                             let topData = pageElementsSpecList[0]
+
+                            // 组件化创意
+                            if (deliveryMode === "DELIVERY_MODE_COMPONENT") {
+                                if (data[selectAdz - 1]?.pageList?.length >= mainJumpInfo?.length) {
+                                    return {
+                                        disabled: data[selectAdz - 1]?.pageList?.some((item: any) => item?.pageId === record?.pageId) ? false : true
+                                    }
+                                } else {
+                                    return {
+                                        disabled: false
+                                    } 
+                                }
+                            }
                             /**
                              * 641 三图 642 4图 643 6图 311 一图
                              * 721 素板视频 9:16 -> VERTICAL_VIDEO_NEW_916  720 722 横板视频 -> VIDEO_1280_960
@@ -309,7 +326,8 @@ const PageModal: React.FC<Props> = (props) => {
                             }
                         },
                         selectedRowKeys: data[selectAdz - 1]?.pageList?.map((item: any) => item?.pageId),
-                        onChange: onChangeTable
+                        onChange: onChangeTable,
+                        hideSelectAll: deliveryMode === "DELIVERY_MODE_COMPONENT"
                     }}
                 />
             </div>

+ 1 - 1
src/pages/launchSystemV3/tencentAdPutIn/const.ts

@@ -375,7 +375,7 @@ export enum WECHAT_AD_NEHAVIOR_ENUM {
 
 /** 投放模式 */
 export enum DELIVERY_MODE_ENUM {
-	// DELIVERY_MODE_COMPONENT = '组件化创意',
+	DELIVERY_MODE_COMPONENT = '组件化创意',
 	DELIVERY_MODE_CUSTOMIZE = '自定义创意'
 }
 

+ 3 - 3
src/pages/launchSystemV3/tencentAdPutIn/create/Dynamic/creativeTemplateContent.tsx

@@ -62,7 +62,7 @@ const CreativeTemplateContent: React.FC<{ automaticSiteEnabled: boolean }> = ({
                 <Form.List name="pageSpec">
                     {(fields, { add, remove }) => (
                         <>
-                            {fields.map(({ key, name, ...restField }) => (
+                            {fields.map(({ key, name, ...restField }, index) => (
                                 <Space key={key} style={{ display: 'flex', marginBottom: 8, width: '100%' }} align="baseline">
                                     <Space direction="vertical" style={{ width: '100%' }}>
                                         <Form.Item
@@ -93,7 +93,7 @@ const CreativeTemplateContent: React.FC<{ automaticSiteEnabled: boolean }> = ({
                                                 }}
                                             />
                                         </Form.Item>
-                                        {((siteSet?.some((name: string) => name === 'SITE_SET_MOMENTS') || automaticSiteEnabled) && pageSpec?.[key]?.pageType === 'PAGE_TYPE_WECHAT_CANVAS') && <div style={{ margin: 0, backgroundColor: '#fafafb', padding: '8px 16px 8px', borderRadius: 8 }}>
+                                        {((siteSet?.some((name: string) => name === 'SITE_SET_MOMENTS') || automaticSiteEnabled) && pageSpec?.[index]?.pageType === 'PAGE_TYPE_WECHAT_CANVAS') && <div style={{ margin: 0, backgroundColor: '#fafafb', padding: '8px 16px 8px', borderRadius: 8 }}>
                                             <Form.Item
                                                 name={[name, 'overrideCanvasHeadOption']}
                                                 style={{ marginBottom: 0 }}
@@ -109,7 +109,7 @@ const CreativeTemplateContent: React.FC<{ automaticSiteEnabled: boolean }> = ({
                                 </Space>
                             ))}
                             {pageSpec?.length < jumpInfoNumber && <Form.Item>
-                                <Button type="dashed" disabled onClick={() => add({ pageType: pageSpec?.[0]?.pageType || 'PAGE_TYPE_WECHAT_CANVAS', overrideCanvasHeadOption: 'OPTION_CANVAS_OVERRIDE_CREATIVE' })} block icon={<PlusOutlined />}>
+                                <Button type="dashed" onClick={() => add({ pageId: null, pageType: pageSpec?.[0]?.pageType || 'PAGE_TYPE_WECHAT_CANVAS', overrideCanvasHeadOption: 'OPTION_CREATIVE_OVERRIDE_CANVAS' })} block icon={<PlusOutlined />}>
                                     还可以添加 {jumpInfoNumber - pageSpec?.length} 组
                                 </Button>
                             </Form.Item>}

+ 103 - 51
src/pages/launchSystemV3/tencentAdPutIn/create/addDynamic.tsx

@@ -249,64 +249,112 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
         const { dynamic, dynamicMaterialDTos, dynamicCreativesTextDTOS, mediaType } = addelivery
 
         let dynamicMaterialDTOS = []
-        if ((materialData && Object.keys(materialData).length && dynamicMaterialDTos && Object.keys(dynamicMaterialDTos).length)) {
-            let mType = Object.keys(materialData)[0];
-            dynamicMaterialDTOS = dynamicMaterialDTos.dynamicGroup?.map((item: any) => {
-                if (mType === 'image') {
-                    return [{
-                        type: mType,
-                        valueJson: JSON.stringify({
-                            value: {
-                                imageUrl: item?.image_id?.url,
-                                imageId: item?.image_id?.id,
-                                materialType: item?.image_id?.materialType
-                            }
-                        })
-                    }]
-                } else if (mType === 'image_list' || mType === 'element_story') {
-                    let key = 'image_list'
-                    if (mType === 'element_story') {
-                        key = 'element_story'
-                    }
-                    let list = item?.[key]?.map((l: any) => {
-                        return {
-                            imageUrl: l?.url,
-                            imageId: l?.id,
-                            materialType: l?.materialType
+        if (dynamic.deliveryMode === 'DELIVERY_MODE_CUSTOMIZE') {
+            if ((materialData && Object.keys(materialData).length && dynamicMaterialDTos && Object.keys(dynamicMaterialDTos).length)) {
+                let mType = Object.keys(materialData)[0];
+                dynamicMaterialDTOS = dynamicMaterialDTos.dynamicGroup?.map((item: any) => {
+                    if (mType === 'image') {
+                        return [{
+                            type: mType,
+                            valueJson: JSON.stringify({
+                                value: {
+                                    imageUrl: item?.image_id?.url,
+                                    imageId: item?.image_id?.id,
+                                    materialType: item?.image_id?.materialType
+                                }
+                            })
+                        }]
+                    } else if (mType === 'image_list' || mType === 'element_story') {
+                        let key = 'image_list'
+                        if (mType === 'element_story') {
+                            key = 'element_story'
                         }
-                    })
-                    return [{
-                        type: mType,
-                        valueJson: JSON.stringify({
-                            value: {
-                                list
+                        let list = item?.[key]?.map((l: any) => {
+                            return {
+                                imageUrl: l?.url,
+                                imageId: l?.id,
+                                materialType: l?.materialType
                             }
                         })
-                    }]
-                } else if (['short_video', 'video'].includes(mType)) {
-                    let value: any = {
-                        materialType: item?.video_id?.materialType || item?.short_video1?.materialType || 0,
-                        videoUrl: item?.video_id?.url || item?.short_video1?.url,
-                        videoId: item?.video_id?.id || item?.short_video1?.id
-                    }
-                    if (item?.cover_id?.url) {
-                        value.imageUrl = item?.cover_id?.url
-                        value.imageId = item?.cover_id?.id
-                        value.materialCoverType = item?.cover_id?.materialType
+                        return [{
+                            type: mType,
+                            valueJson: JSON.stringify({
+                                value: {
+                                    list
+                                }
+                            })
+                        }]
+                    } else if (['short_video', 'video'].includes(mType)) {
+                        let value: any = {
+                            materialType: item?.video_id?.materialType || item?.short_video1?.materialType || 0,
+                            videoUrl: item?.video_id?.url || item?.short_video1?.url,
+                            videoId: item?.video_id?.id || item?.short_video1?.id
+                        }
+                        if (item?.cover_id?.url) {
+                            value.imageUrl = item?.cover_id?.url
+                            value.imageId = item?.cover_id?.id
+                            value.materialCoverType = item?.cover_id?.materialType
+                        }
+                        return [{
+                            type: mType,
+                            valueJson: JSON.stringify({
+                                value
+                            })
+                        }]
                     }
                     return [{
                         type: mType,
-                        valueJson: JSON.stringify({
-                            value
-                        })
+                        valueJson: ''
                     }]
-                }
-                return [{
-                    type: mType,
-                    valueJson: ''
-                }]
-            })
+                })
+            }
+        } else {
+            if (dynamicMaterialDTos && Object.keys(dynamicMaterialDTos).length) {
+                dynamicMaterialDTOS = dynamicMaterialDTos.dynamicGroup?.map((item: { list: any[] }) => {
+                    return item.list.map(l => {
+                        if (Array.isArray(l)) {
+                            return {
+                                type: 'image_list',
+                                valueJson: JSON.stringify({
+                                    value: {
+                                        list: l?.map((i: any) => {
+                                            return {
+                                                imageUrl: i?.url,
+                                                imageId: i?.id,
+                                                materialType: i?.materialType
+                                            }
+                                        })
+                                    }
+                                })
+                            }
+                        } else if (l?.url?.includes('mp4')) {
+                            return {
+                                type: 'video',
+                                valueJson: JSON.stringify({
+                                    value: {
+                                        materialType: l?.materialType,
+                                        videoUrl: l?.url,
+                                        videoId: l?.id
+                                    }
+                                })
+                            }
+                        } else {
+                            return {
+                                type: 'image',
+                                valueJson: JSON.stringify({
+                                    value: {
+                                        imageUrl: l?.url,
+                                        imageId: l?.id,
+                                        materialType: l?.materialType
+                                    }
+                                })
+                            }
+                        }
+                    })
+                })
+            }
         }
+
         let accountIdParamDTOMap: any = {}
         accountCreateLogs.forEach(item => {
             let { pageList, productList, userActionSetsList, accountId, wechatChannelList } = item
@@ -328,9 +376,13 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
 
             accountIdParamDTOMap[accountId] = map
         })
+        let dynamicCreativesDTO = { ...dynamic, mediaType }
+        if (dynamic.deliveryMode === 'DELIVERY_MODE_COMPONENT') {
+            dynamicCreativesDTO.creativeTemplateId = 711
+        }
         let params = {
             accountAdgroupMaps: adData.map(item => `${item.accountId},${item.adgroupId}`),
-            dynamicCreativesDTO: { ...dynamic, mediaType },
+            dynamicCreativesDTO,
             dynamicCreativesTextDTOS,
             dynamicMaterialDTOS,
             accountIdParamDTOMap

+ 33 - 26
src/pages/launchSystemV3/tencentAdPutIn/create/index.tsx

@@ -156,25 +156,21 @@ const Create: React.FC = () => {
                         })
                     } else { // 组件化创意
                         dynamicGroup = dynamicMaterialDTOS?.map((item: any[]) => {
-                            return item?.map((i: any) => {
-                                let { type, valueJson } = i
-                                let value = JSON.parse(valueJson).value
-                                if (type === 'image') {
-                                    return { image_id: { id: value.imageId, url: value.imageUrl, materialType: value.materialType } }
-                                } else if (type === 'image_list' || type === 'element_story') {
-                                    return { [type]: value.list.map((l: { imageUrl: any; imageId: any; materialType: any }) => ({ url: l.imageUrl, id: l.imageId, materialType: l.materialType })) }
-                                } else if (type === 'short_video' || type === 'video') {
-                                    let field = type === 'video' ? 'video_id' : 'short_video1'
-                                    let videoData: any = {}
-                                    videoData[field] = { materialType: value.materialType, url: value.videoUrl, id: value.videoId }
-                                    if (value.imageUrl) {
-                                        videoData['cover_id'] = { materialType: value.materialCoverType, url: value.imageUrl, id: value.iamgeId }
+                            return {
+                                list: item?.map((i: any) => {
+                                    let { type, valueJson } = i
+                                    let value = JSON.parse(valueJson).value
+                                    if (type === 'image') {
+                                        return { id: value.imageId, url: value.imageUrl, materialType: value.materialType }
+                                    } else if (type === 'image_list') {
+                                        return value.list.map((l: { imageUrl: any; imageId: any; materialType: any }) => ({ url: l.imageUrl, id: l.imageId, materialType: l.materialType }))
+                                    } else if (type === 'video') {
+                                        return { materialType: value.materialType, url: value.videoUrl, id: value.videoId }
+                                    } else {
+                                        return {}
                                     }
-                                    return videoData
-                                } else {
-                                    return {}
-                                }
-                            })
+                                })
+                            }
                         })
                     }
 
@@ -390,7 +386,9 @@ const Create: React.FC = () => {
                                     id: ad.id + '_' + index,
                                     dynamicGroup: aad,
                                     textDto: textValue,
-                                    rowSpan
+                                    rowSpan: index === 0 ? rowSpan : 0,
+                                    adLength: data.length,
+                                    isRowSpan: true
                                 })
                             })
                         } else {
@@ -399,7 +397,8 @@ const Create: React.FC = () => {
                                     ...ad,
                                     id: ad.id + '_' + index,
                                     dynamicGroup: aad,
-                                    textDto: aad?.textDto
+                                    textDto: aad?.textDto,
+                                    adLength: data.length
                                 })
                             })
                         }
@@ -408,14 +407,16 @@ const Create: React.FC = () => {
                     data.forEach((item) => {
                         const { averageAdDynamic, ...ad } = item
                         if (textType === 3) {
-                            cartesianProduct(textDto, [newDynamicGroup[accountIndex1 % newDynamicGroup.length]]).forEach((taad: any) => {
+                            cartesianProduct(textDto, [newDynamicGroup[accountIndex1 % newDynamicGroup.length]]).forEach((taad: any, i) => {
                                 let [textValue, aad, index] = taad
                                 newData.push({
                                     ...ad,
                                     id: ad.id + '_' + index,
                                     dynamicGroup: aad,
                                     textDto: textValue,
-                                    rowSpan: textDto.length
+                                    rowSpan: i === 0 ? textDto.length : 0,
+                                    adLength: data.length,
+                                    isRowSpan: true
                                 })
                             })
                         } else {
@@ -424,7 +425,8 @@ const Create: React.FC = () => {
                                 ...ad,
                                 dynamicGroup,
                                 textDto,
-                                rowSpan: 1
+                                rowSpan: 1,
+                                adLength: data.length
                             })
                         }
                         accountIndex1 += 1
@@ -436,7 +438,8 @@ const Create: React.FC = () => {
                             ...d1,
                             id: d1.id + '_' + index,
                             dynamicGroup: group,
-                            textDto: (group as any)?.textDto
+                            textDto: (group as any)?.textDto,
+                            adLength: data.length
                         }
                     })
                 }
@@ -583,11 +586,15 @@ const Create: React.FC = () => {
 
             accountIdParamDTOMap[accountId] = map
         })
+        let dynamicCreativesDTO = { ...dynamic, mediaType }
+        if (dynamic.deliveryMode === 'DELIVERY_MODE_COMPONENT') {
+            dynamicCreativesDTO.creativeTemplateId = 711
+        }
         let params = {
             ...values,
             adgroupDTO: adgroups,
             targetings: targeting.map(item => ({ targetingName: item.targetingName, ...item?.targeting || {} })),
-            dynamicCreativesDTO: { ...dynamic, mediaType },
+            dynamicCreativesDTO,
             dynamicCreativesTextDTOS,
             dynamicMaterialDTOS,
             accountIdParamDTOMap
@@ -828,7 +835,7 @@ const Create: React.FC = () => {
                         pagination={{
                             defaultPageSize: 50,
                             total: tableData[activeKey]?.length || 0,
-                            showTotal: (total) => <Tag color="cyan">当前共{total}个创意,{tableData[activeKey]?.length / (tableData[activeKey]?.[0]?.rowSpan)}个广告</Tag>,
+                            showTotal: (total) => <Tag color="cyan">当前共{total}个创意,{tableData[activeKey]?.[0]?.adLength}个广告</Tag>,
                         }}
                     />
                 </div>

+ 6 - 6
src/pages/launchSystemV3/tencentAdPutIn/create/tableConfig.tsx

@@ -24,7 +24,7 @@ const columns = (): TableProps<any>['columns'] => {
                         return <Text style={{ fontSize: 12 }}>{b?.adgroupsDto?.adgroupName}</Text>
                     },
                     onCell: (record, index = 0) => ({
-                        rowSpan: !(index % record.rowSpan) ? record.rowSpan : 0
+                        rowSpan: record?.isRowSpan ? record.rowSpan : record !(index % record.rowSpan) ? record.rowSpan : 0
                     }),
                 },
                 {
@@ -50,7 +50,7 @@ const columns = (): TableProps<any>['columns'] => {
                         return 'ERROR,请联系管理员'
                     },
                     onCell: (record, index = 0) => ({
-                        rowSpan: !(index % record.rowSpan) ? record.rowSpan : 0
+                        rowSpan: record?.isRowSpan ? record.rowSpan : record !(index % record.rowSpan) ? record.rowSpan : 0
                     }),
                 },
                 {
@@ -62,7 +62,7 @@ const columns = (): TableProps<any>['columns'] => {
                         return <Text style={{ fontSize: 12 }}>{b?.targetDto?.targetingName}</Text>
                     },
                     onCell: (record, index = 0) => ({
-                        rowSpan: !(index % record.rowSpan) ? record.rowSpan : 0
+                        rowSpan: record?.isRowSpan ? record.rowSpan : record !(index % record.rowSpan) ? record.rowSpan : 0
                     }),
                 },
                 {
@@ -78,7 +78,7 @@ const columns = (): TableProps<any>['columns'] => {
                         </Space>
                     },
                     onCell: (record, index = 0) => ({
-                        rowSpan: !(index % record.rowSpan) ? record.rowSpan : 0
+                        rowSpan: record?.isRowSpan ? record.rowSpan : record !(index % record.rowSpan) ? record.rowSpan : 0
                     }),
                 },
             ]
@@ -212,7 +212,7 @@ const columns = (): TableProps<any>['columns'] => {
                     width: 200,
                     render: (_, b) => {
                         let pageListDto = b?.pageListDto
-                        return <Text style={{ fontSize: 12, wordBreak: 'break-all' }}>原生推广页:{pageListDto?.[0]?.pageName}</Text>
+                        return <Text style={{ fontSize: 12, wordBreak: 'break-all' }}>原生推广页:{pageListDto?.map((item: { pageName: any; }) => item?.pageName)?.join(',')}</Text>
                     }
                 }
             ]
@@ -374,7 +374,7 @@ export const columnsAddDynamic = (): TableProps<any>['columns'] => {
                     width: 200,
                     render: (_, b) => {
                         let pageListDto = b?.pageListDto
-                        return <Text style={{ fontSize: 12, wordBreak: 'break-all' }}>原生推广页:{pageListDto?.[0]?.pageName}</Text>
+                        return <Text style={{ fontSize: 12, wordBreak: 'break-all' }}>原生推广页:{pageListDto?.map((item: { pageName: any; }) => item?.pageName)?.join(',')}</Text>
                     }
                 }
             ]