import { Carousel, Drawer, Spin } from "antd"; import React, { useEffect, useMemo, useState } from "react" import { ReactComponent as Topimg } from '@/assets/topimg.svg' import { ReactComponent as Img } from '@/assets/img.svg' import style from './index.less' import '../addLandingPage/index1.less' import { UserAddOutlined } from "@ant-design/icons"; import { useModel } from "umi"; import { getTypeKey } from "@/utils/utils"; type Props = { visible?: boolean, onClose?: () => void, id: number } /** * 查看落地页 * @param props * @returns */ function LookLanding(props: Props) { let { visible, onClose, id } = props const [pageBackColor, setPageBackColor] = useState('#FFFFFF') // 背景颜色 const [content, setContent] = useState([]) // 内容 const [globalData, setGlobalData] = useState([]) // 浮窗 const { get } = useModel('useLaunchAdq.useBdMediaPup') useEffect(() => { if (id) { get.run({ sysMediaId: id, mediaType: 'PAGE' }).then(res => { if (res) { const { pageSpecsList, globalSpec } = res setPageBackColor(pageSpecsList[0]?.bgColor) let pageElementsSpecList = pageSpecsList[0]?.pageElementsSpecList setContent(pageElementsSpecList?.map((item: any) => { let typeKey = getTypeKey(item?.elementType) if (typeKey) { let data = item[typeKey] || {} return { elementType: item?.elementType, ...data } } return item })) if (globalSpec && Object.keys(globalSpec).length > 0) { let globalElementsSpecList = globalSpec.globalElementsSpecList let newComponentItem = globalElementsSpecList?.map((item: { elementType: string }) => { let typeKey = getTypeKey(item.elementType) let { elementType, ...data } = item[typeKey] let typeKey1 = getTypeKey(elementType) let componentItem: any = data[typeKey1] if (componentItem) { componentItem['elementType'] = elementType } data.componentItem = componentItem data.elementType = item.elementType delete data[typeKey1] return data }) setGlobalData(newComponentItem) } } }) } }, [id]) console.log('content---->', content) // 顶部组件 const topCon = useMemo(() => { if (content?.length > 0) { let { imageUrl, elementType, imageUrlList, videoUrl } = content[0] return <> { elementType === 'TOP_IMAGE' ? <>
{ imageUrl ? :
}
: elementType === 'TOP_SLIDER' ? <>
{imageUrlList?.map((item: any, index: number) => { return
})}
: elementType === 'TOP_VIDEO' ? <>
{ videoUrl &&
}
: null } } else { return null } }, [content]) const comptCon = () => { if (content?.length === 0) { return null } else { return
item?.elementType === 'FLOAT_BUTTON') ? { paddingBottom: 90, minHeight: 510 } : {}}> {content.map((value: any, index: number) => { if (value.elementType === 'IMAGE') { let { imageUrl, paddingTop, paddingBottom } = value return
{ imageUrl ? :
}
} else if (value.elementType === 'TEXT') { let { fontSize, fontColor, textAlignment, text, fontStyle, paddingTop, paddingBottom } = value return
{text ? text?.split(/[\r\n]/g)?.map((item: any, index: number) => { if (item) { return
{item?.split(' ')?.map((item1: any, ind: number) => { if (item1) { return {item1} } else { return   } })}
} else { return
 
} }) : '请输入文本内容'}
} else if (value.elementType === 'GH' || value.elementType === 'ENTERPRISE_WX') { let { paddingTop, paddingBottom, btnTitle, fontColor, btnBgColorTheme, btnBorderColorTheme, btnFontType, useIcon } = value return
} else if (value?.elementType === 'shelfnew') { let { paddingTop, paddingBottom, layoutItems, borderColor, bgColor, type, wxad_align, id } = value if (type === '104') { let componentItem = layoutItems?.componentItem[0]?.layoutItems?.componentItem let otherData = componentItem[1]?.layoutItems?.componentItem return
{componentItem[0]?.pureImageUrl ? :
}

{otherData[0]?.content || otherData[0]?.name}

{otherData[1]?.content || otherData[1]?.name}

{otherData[2]?.btnTitle}
} else if (type === '103') { let componentItem = layoutItems?.componentItem return
{ componentItem?.map((item: any, index: number) => { let shelfnewItem = item?.layoutItems?.componentItem[0]?.layoutItems?.componentItem return
{shelfnewItem[0]?.pureImageUrl ? :
}

{shelfnewItem[1]?.content || shelfnewItem[1]?.name}

{shelfnewItem[2]?.content || shelfnewItem[2]?.name}

{shelfnewItem[3]?.btnTitle}

}) }
} else { return null } } else { return null } })} {globalData.map((value: any, index: number) => { if (value?.elementType === 'FLOAT_BUTTON') { let { titleColor, descColor, componentItem, imageUrl, title, desc, styleType } = value return
{styleType === 0 && (imageUrl ? :
)}
{title || '标题'}
{(styleType === 1 || styleType === 0) &&
{desc || '描述'}
}
{componentItem?.btnTitle}
} return null })}
} } return { onClose && onClose() }} visible={visible} width={420} >
{/* 头部 */} {topCon} {/* 内容*/}
{comptCon()}
} export default React.memo(LookLanding)