|
@@ -87,6 +87,18 @@ function CreativePup(props: Props) {
|
|
|
list: [],//素材
|
|
|
max: 1,//素材数量
|
|
|
})//图片素材配置
|
|
|
+ const [imgListMaterialConfig, setImgListMaterialConfig] = useState<{
|
|
|
+ adcreativeTemplateId?: number,
|
|
|
+ type: string,
|
|
|
+ cloudSize: { relation: string, width: number, height: number }[],
|
|
|
+ list: any[],
|
|
|
+ max: number
|
|
|
+ }>({
|
|
|
+ type: '',//类型
|
|
|
+ cloudSize: [],//素材搜索条件
|
|
|
+ list: [],//素材
|
|
|
+ max: 1,//素材数量
|
|
|
+ })//图片素材配置
|
|
|
const [videoMaterialConfig, setVideoMaterialConfig] = useState<{
|
|
|
adcreativeTemplateId?: number,
|
|
|
type: string,
|
|
@@ -99,6 +111,7 @@ function CreativePup(props: Props) {
|
|
|
list: [],//素材
|
|
|
max: 1,//素材数量
|
|
|
})//图片素材配置
|
|
|
+ const [imgType, setimgType] = useState<'single' | 'many'>('single')
|
|
|
const [conversionList, setConversionList] = useState<any>(null)
|
|
|
let pageType = Form.useWatch('pageType', form)
|
|
|
let adcreativeTemplateId = Form.useWatch('adcreativeTemplateId', form)
|
|
@@ -138,7 +151,7 @@ function CreativePup(props: Props) {
|
|
|
case 'image_list'://图素材
|
|
|
newValues.adcreativeElements = {
|
|
|
...newValues.adcreativeElements,
|
|
|
- imageUrlList: imgMaterialConfig.list?.map(item => item.url),
|
|
|
+ imageUrlList: imgListMaterialConfig.list?.map(item => item.url),
|
|
|
description: newValues.description,
|
|
|
}
|
|
|
delete newValues[key]
|
|
@@ -276,7 +289,7 @@ function CreativePup(props: Props) {
|
|
|
// // 开启存为模板开关执行
|
|
|
callback(newValues)
|
|
|
})
|
|
|
- }, [form, imgMaterialConfig, videoMaterialConfig, queryForm, template_checked, adcreative_template, isShowSc])
|
|
|
+ }, [form, imgMaterialConfig, imgListMaterialConfig, videoMaterialConfig, queryForm, template_checked, adcreative_template, isShowSc])
|
|
|
// 获取创意形式列表
|
|
|
useEffect(() => {
|
|
|
if (siteSet?.length > 0 && promotedObjectType) {
|
|
@@ -308,7 +321,11 @@ function CreativePup(props: Props) {
|
|
|
})
|
|
|
/*****暂时排除激励和banner有问题******/
|
|
|
if (siteSet.some((i: string) => i === 'SITE_SET_MOMENTS')) {
|
|
|
- newArr = newArr.filter((item: { adcreativeTemplateId: number }) => item.adcreativeTemplateId !== 910 && item.adcreativeTemplateId !== 925)
|
|
|
+ newArr = newArr.filter((item: { adcreativeTemplateId: number }) => item.adcreativeTemplateId !== 910 && item.adcreativeTemplateId !== 925 && item.adcreativeTemplateId !== 2107 && item.adcreativeTemplateId !== 2109)
|
|
|
+ }
|
|
|
+ /*****暂时排除出框形态 视频合约广告******/
|
|
|
+ if (siteSet.some((i: string) => i === 'SITE_SET_WECHAT')) {
|
|
|
+ newArr = newArr.filter((item: { adcreativeTemplateId: number }) => item.adcreativeTemplateId !== 1945)
|
|
|
}
|
|
|
let newArr1: any[] = []
|
|
|
let newArr2: any[] = []
|
|
@@ -466,11 +483,12 @@ function CreativePup(props: Props) {
|
|
|
useEffect(() => {
|
|
|
if (imgMaterialConfig.adcreativeTemplateId && adcreativeTemplateId !== imgMaterialConfig.adcreativeTemplateId) {
|
|
|
setImgMaterialConfig({ ...imgMaterialConfig, adcreativeTemplateId: undefined, list: [] })
|
|
|
+ setImgListMaterialConfig({ ...imgListMaterialConfig, adcreativeTemplateId: undefined, list: [] })
|
|
|
}
|
|
|
if (videoMaterialConfig.adcreativeTemplateId && adcreativeTemplateId !== videoMaterialConfig.adcreativeTemplateId) {
|
|
|
setVideoMaterialConfig({ ...videoMaterialConfig, adcreativeTemplateId: undefined, list: [] })
|
|
|
}
|
|
|
- }, [adcreativeTemplateId, imgMaterialConfig, videoMaterialConfig])
|
|
|
+ }, [adcreativeTemplateId, imgMaterialConfig, videoMaterialConfig, imgListMaterialConfig])
|
|
|
// 文案助手
|
|
|
const textList = useCallback((arg: { maxTextLength: number, keyword?: string }) => {
|
|
|
let { maxTextLength, keyword } = arg
|
|
@@ -579,7 +597,7 @@ function CreativePup(props: Props) {
|
|
|
obj = { ...obj, image: imageUrl }
|
|
|
}
|
|
|
if (imageUrlList) {
|
|
|
- setImgMaterialConfig({
|
|
|
+ setImgListMaterialConfig({
|
|
|
cloudSize: [],
|
|
|
list: imageUrlList?.map((url: any) => ({ url })),
|
|
|
max: imageUrlList.length,
|
|
@@ -710,150 +728,128 @@ function CreativePup(props: Props) {
|
|
|
{/* ============================================================素材============================================================= */}
|
|
|
{/* 优先展示视频或图片,朋友圈常规不勾选使用外部素材替换内部,隐藏此选项,后期自动将落地页顶部素材添加进入 */}
|
|
|
{((overrideCanvasHeadOption !== 'OPTION_CANVAS_OVERRIDE_CREATIVE') || siteSet.every((name: string) => name !== 'SITE_SET_MOMENTS')) && <div style={{ display: 'flex', flexFlow: 'column' }}>
|
|
|
- {
|
|
|
- adcreative_template?.adcreativeElements?.filter(item => item.required && item.name === 'image_list' || item.name === 'short_video1' || item.name === 'video' || item.name === 'image' || item.name === 'element_story').map(item => {
|
|
|
- return <Form.Item
|
|
|
- label={<strong>{item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') ? '视频封面图' : item.description}</strong>}
|
|
|
- key={item.name}
|
|
|
+ {adcreative_template?.adcreativeElements?.filter(item => item.required && item.name === 'image_list' || item.name === 'short_video1' || item.name === 'video' || item.name === 'image' || item.name === 'element_story').map(item => {
|
|
|
+ return <Form.Item
|
|
|
+ label={<strong>{item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') ? '视频封面图' : item.description}</strong>}
|
|
|
+ key={item.name}
|
|
|
+ >
|
|
|
+ {/* 视频 */}
|
|
|
+ {(item.name === 'short_video1' || item.name === 'video') && <Form.Item
|
|
|
+ noStyle
|
|
|
+ rules={[{ required: true, message: '请选择素材!' }]}
|
|
|
+ name={item.name}
|
|
|
+ style={item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') ? { order: 2 } : {}}
|
|
|
>
|
|
|
- {/* 视频 */}
|
|
|
- {
|
|
|
- (item.name === 'short_video1' || item.name === 'video') && <Form.Item
|
|
|
- noStyle
|
|
|
- rules={[{ required: true, message: '请选择素材!' }]}
|
|
|
- name={item.name}
|
|
|
- style={item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') ? { order: 2 } : {}}
|
|
|
- >
|
|
|
- <div className={`${styles.box} ${styles.video}`} onClick={() => {
|
|
|
- init({ mediaType: 'VIDEO', cloudSize: adcreativeTemplateId === 1708 ? [[{ relation: '=', width: 1280, height: 720 }]] : [[{ relation: '=', width: item.restriction.videoRestriction.minWidth, height: item.restriction.videoRestriction.minHeight }]], maxSize: item.restriction.videoRestriction.fileSize * 1024 })
|
|
|
- setTimeout(() => {
|
|
|
- set_selectVideoVisible(true)
|
|
|
- setVideoMaterialConfig({
|
|
|
- ...videoMaterialConfig,
|
|
|
- type: item.name,
|
|
|
- max: 1,
|
|
|
- adcreativeTemplateId
|
|
|
- })
|
|
|
- }, 100)
|
|
|
- }}>
|
|
|
- <p>
|
|
|
- {
|
|
|
- videoMaterialConfig?.list[0] ? <video src={videoMaterialConfig?.list[0].url} controls /> : <>
|
|
|
- <span>{`推荐尺寸(${adcreativeTemplateId === 1708 ? 1280 : item.restriction.videoRestriction.minWidth} x ${adcreativeTemplateId === 1708 ? 720 : item.restriction.videoRestriction.minHeight})`}</span>
|
|
|
- <span>{`${item.restriction.videoRestriction.fileFormat?.map(str => str?.replace('MEDIA_TYPE_', ''))};< ${item.restriction.videoRestriction.fileSize / 1024}M;时长 ≥ ${item.restriction.videoRestriction.minDuration}s,≤ ${item.restriction.videoRestriction.maxDuration}s,必须带有声音`}</span>
|
|
|
- </>
|
|
|
- }
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- </Form.Item>
|
|
|
- }
|
|
|
- {/* 单图 */}
|
|
|
- {
|
|
|
- item.name === 'image' && <Form.Item
|
|
|
- noStyle
|
|
|
- rules={[{ required: true, message: '请选择素材!' }]}
|
|
|
- name={item.name}
|
|
|
- style={item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') ? { order: 2 } : {}}
|
|
|
- >
|
|
|
- <div className={`${styles.box} ${styles.image}`} onClick={() => {
|
|
|
- init({ mediaType: 'IMG', cloudSize: [[{ relation: '=', width: item.restriction.imageRestriction.width, height: item.restriction.imageRestriction.height }]], maxSize: item.restriction.imageRestriction.fileSize * 1024 })
|
|
|
- setTimeout(() => {
|
|
|
- set_selectImgVisible(true)
|
|
|
- setImgMaterialConfig({
|
|
|
- ...imgMaterialConfig,
|
|
|
- type: item.name,
|
|
|
- max: 1,
|
|
|
- adcreativeTemplateId
|
|
|
- })
|
|
|
- }, 100)
|
|
|
-
|
|
|
- }}>
|
|
|
- <p>
|
|
|
- {imgMaterialConfig?.list[0] ? <img src={imgMaterialConfig?.list[0].url} /> : <>
|
|
|
- <span>{`推荐尺寸(${item.restriction.imageRestriction.width} x ${item.restriction.imageRestriction.height})`}</span>
|
|
|
- <span>{`${item.restriction.imageRestriction.fileFormat?.map(str => str?.replace('IMAGE_TYPE_', ''))};小于 ${item.restriction.imageRestriction.fileSize}KB`}</span>
|
|
|
- </>}
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- </Form.Item>
|
|
|
- }
|
|
|
- {/* {
|
|
|
- item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') && <Button onClick={videoToImgs} size='small' type='primary' disabled={!videoMaterialConfig.list[0]}>从视频生成封面图</Button>
|
|
|
- } */}
|
|
|
- {/* 多图 */}
|
|
|
- {
|
|
|
- item.name === 'image_list' && <Form.Item
|
|
|
- noStyle
|
|
|
- rules={[{ required: true, message: '请选择素材!' }]}
|
|
|
- name={item.name}
|
|
|
- style={item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') ? { order: 2 } : {}}
|
|
|
- >
|
|
|
- <div className={`${styles.box} ${item.arrayProperty.maxNumber >= 3 ? styles.image_list : styles.image}`} onClick={() => {
|
|
|
- init({ mediaType: 'IMG', num: item.arrayProperty.maxNumber, cloudSize: [[{ relation: '=', width: item.restriction.imageRestriction.width, height: item.restriction.imageRestriction.height }]], maxSize: item.restriction.imageRestriction.fileSize * 1024 })
|
|
|
- setTimeout(() => {
|
|
|
- set_selectImgVisible(true)
|
|
|
- setImgMaterialConfig({
|
|
|
- ...imgMaterialConfig,
|
|
|
- type: item.name,
|
|
|
- max: item.arrayProperty.maxNumber,
|
|
|
- adcreativeTemplateId
|
|
|
- })
|
|
|
- }, 100)
|
|
|
- }}>
|
|
|
- {
|
|
|
- Array(item.arrayProperty.maxNumber).fill('').map((arr, index) => {
|
|
|
- return <p key={index}>
|
|
|
- {
|
|
|
- imgMaterialConfig?.list[index] ? <img src={imgMaterialConfig?.list[index].url} /> : <>
|
|
|
- <span>{`推荐尺寸(${item.restriction.imageRestriction.width} x ${item.restriction.imageRestriction.height})`}</span>
|
|
|
- <span>{`${item.restriction.imageRestriction.fileFormat?.map(str => str?.replace('IMAGE_TYPE_', ''))};小于 ${item.restriction.imageRestriction.fileSize}KB`}</span>
|
|
|
- </>
|
|
|
- }
|
|
|
-
|
|
|
- </p>
|
|
|
- })
|
|
|
- }
|
|
|
- </div>
|
|
|
- </Form.Item>
|
|
|
- }
|
|
|
- {
|
|
|
- item.name === 'element_story' && <Form.Item
|
|
|
- noStyle
|
|
|
- rules={[{ required: true, message: '请选择素材!' }]}
|
|
|
- name={item.name}
|
|
|
- style={item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') ? { order: 2 } : {}}
|
|
|
- >
|
|
|
- <div className={`${styles.box} ${item.arrayProperty.maxNumber >= 3 ? styles.image_list : styles.image}`} onClick={() => {
|
|
|
- init({ mediaType: 'IMG', num: item?.arrayProperty?.maxNumber, cloudSize: [[{ relation: '=', width: item?.restriction.imageRestriction?.width, height: item?.restriction.imageRestriction?.height }]], maxSize: item?.restriction?.imageRestriction?.fileSize * 1024 })
|
|
|
- setTimeout(() => {
|
|
|
- set_selectImgVisible(true)
|
|
|
- setImgMaterialConfig({
|
|
|
- ...imgMaterialConfig,
|
|
|
- type: item.name,
|
|
|
- max: item.arrayProperty.maxNumber,
|
|
|
- adcreativeTemplateId
|
|
|
- })
|
|
|
- }, 100)
|
|
|
- }}>
|
|
|
- {
|
|
|
- Array(item.arrayProperty.maxNumber).fill('').map((arr, index) => {
|
|
|
- return <p key={index}>
|
|
|
- {
|
|
|
- imgMaterialConfig?.list[index] ? <img style={item?.restriction.imageRestriction?.width > item?.restriction.imageRestriction?.height ? { width: '100%', height: 'auto' } : {}} src={imgMaterialConfig?.list[index].url} /> : <>
|
|
|
- <span>{`推荐尺寸(${item.restriction.imageRestriction.width} x ${item.restriction.imageRestriction.height})`}</span>
|
|
|
- <span>{`${item.restriction.imageRestriction.fileFormat?.map(str => str?.replace('IMAGE_TYPE_', ''))};小于 ${item.restriction.imageRestriction.fileSize}KB`}</span>
|
|
|
- </>
|
|
|
- }
|
|
|
+ <div className={`${styles.box} ${styles.video}`} onClick={() => {
|
|
|
+ init({ mediaType: 'VIDEO', cloudSize: adcreativeTemplateId === 1708 ? [[{ relation: '=', width: 1280, height: 720 }]] : [[{ relation: '=', width: item.restriction.videoRestriction.minWidth, height: item.restriction.videoRestriction.minHeight }]], maxSize: item.restriction.videoRestriction.fileSize * 1024 })
|
|
|
+ setTimeout(() => {
|
|
|
+ set_selectVideoVisible(true)
|
|
|
+ setVideoMaterialConfig({
|
|
|
+ ...videoMaterialConfig,
|
|
|
+ type: item.name,
|
|
|
+ max: 1,
|
|
|
+ adcreativeTemplateId
|
|
|
+ })
|
|
|
+ }, 100)
|
|
|
+ }}>
|
|
|
+ <p>
|
|
|
+ {videoMaterialConfig?.list[0] ? <video src={videoMaterialConfig?.list[0].url} controls /> : <>
|
|
|
+ <span>{`推荐尺寸(${adcreativeTemplateId === 1708 ? 1280 : item.restriction.videoRestriction.minWidth} x ${adcreativeTemplateId === 1708 ? 720 : item.restriction.videoRestriction.minHeight})`}</span>
|
|
|
+ <span>{`${item.restriction.videoRestriction.fileFormat?.map(str => str?.replace('MEDIA_TYPE_', ''))};< ${item.restriction.videoRestriction.fileSize / 1024}M;时长 ≥ ${item.restriction.videoRestriction.minDuration}s,≤ ${item.restriction.videoRestriction.maxDuration}s,必须带有声音`}</span>
|
|
|
+ </>}
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ </Form.Item>}
|
|
|
+ {/* 单图 */}
|
|
|
+ {item.name === 'image' && <Form.Item
|
|
|
+ noStyle
|
|
|
+ rules={[{ required: true, message: '请选择素材!' }]}
|
|
|
+ name={item.name}
|
|
|
+ style={item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') ? { order: 2 } : {}}
|
|
|
+ >
|
|
|
+ <div className={`${styles.box} ${styles.image}`} onClick={() => {
|
|
|
+ init({ mediaType: 'IMG', cloudSize: [[{ relation: '=', width: item.restriction.imageRestriction.width, height: item.restriction.imageRestriction.height }]], maxSize: item.restriction.imageRestriction.fileSize * 1024 })
|
|
|
+ setimgType('single')
|
|
|
+ setTimeout(() => {
|
|
|
+ set_selectImgVisible(true)
|
|
|
+ setImgMaterialConfig({
|
|
|
+ ...imgMaterialConfig,
|
|
|
+ type: item.name,
|
|
|
+ max: 1,
|
|
|
+ adcreativeTemplateId
|
|
|
+ })
|
|
|
+ }, 100)
|
|
|
|
|
|
- </p>
|
|
|
- })
|
|
|
- }
|
|
|
- </div>
|
|
|
- </Form.Item>
|
|
|
- }
|
|
|
- </Form.Item>
|
|
|
- })
|
|
|
- }
|
|
|
+ }}>
|
|
|
+ <p>
|
|
|
+ {imgMaterialConfig?.list[0] ? <img src={imgMaterialConfig?.list[0].url} /> : <>
|
|
|
+ <span>{`推荐尺寸(${item.restriction.imageRestriction.width} x ${item.restriction.imageRestriction.height})`}</span>
|
|
|
+ <span>{`${item.restriction.imageRestriction.fileFormat?.map(str => str?.replace('IMAGE_TYPE_', ''))};小于 ${item.restriction.imageRestriction.fileSize}KB`}</span>
|
|
|
+ </>}
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ </Form.Item>}
|
|
|
+ {/* 多图 */}
|
|
|
+ {item.name === 'image_list' && <Form.Item
|
|
|
+ noStyle
|
|
|
+ rules={[{ required: true, message: '请选择素材!' }]}
|
|
|
+ name={item.name}
|
|
|
+ style={item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') ? { order: 2 } : {}}
|
|
|
+ >
|
|
|
+ <div className={`${styles.box} ${item.arrayProperty.maxNumber >= 3 ? styles.image_list : styles.image}`} onClick={() => {
|
|
|
+ init({ mediaType: 'IMG', num: item.arrayProperty.maxNumber, cloudSize: [[{ relation: '=', width: item.restriction.imageRestriction.width, height: item.restriction.imageRestriction.height }]], maxSize: item.restriction.imageRestriction.fileSize * 1024 })
|
|
|
+ setimgType('many')
|
|
|
+ setTimeout(() => {
|
|
|
+ set_selectImgVisible(true)
|
|
|
+ setImgListMaterialConfig({
|
|
|
+ ...imgListMaterialConfig,
|
|
|
+ type: item.name,
|
|
|
+ max: item.arrayProperty.maxNumber,
|
|
|
+ adcreativeTemplateId
|
|
|
+ })
|
|
|
+ }, 100)
|
|
|
+ }}>
|
|
|
+ {Array(item.arrayProperty.maxNumber).fill('').map((arr, index) => {
|
|
|
+ return <p key={index}>
|
|
|
+ {imgListMaterialConfig?.list[index] ? <img src={imgListMaterialConfig?.list[index].url} /> : <>
|
|
|
+ <span>{`推荐尺寸(${item.restriction.imageRestriction.width} x ${item.restriction.imageRestriction.height})`}</span>
|
|
|
+ <span>{`${item.restriction.imageRestriction.fileFormat?.map(str => str?.replace('IMAGE_TYPE_', ''))};小于 ${item.restriction.imageRestriction.fileSize}KB`}</span>
|
|
|
+ </>}
|
|
|
+ </p>
|
|
|
+ })}
|
|
|
+ </div>
|
|
|
+ </Form.Item>}
|
|
|
+ {item.name === 'element_story' && <Form.Item
|
|
|
+ noStyle
|
|
|
+ rules={[{ required: true, message: '请选择素材!' }]}
|
|
|
+ name={item.name}
|
|
|
+ style={item.description === '图片' && adcreative_template?.adcreativeElements?.some(item => item.name === 'video') ? { order: 2 } : {}}
|
|
|
+ >
|
|
|
+ <div className={`${styles.box} ${item.arrayProperty.maxNumber >= 3 ? styles.image_list : styles.image}`} onClick={() => {
|
|
|
+ init({ mediaType: 'IMG', num: item?.arrayProperty?.maxNumber, cloudSize: [[{ relation: '=', width: item?.restriction.imageRestriction?.width, height: item?.restriction.imageRestriction?.height }]], maxSize: item?.restriction?.imageRestriction?.fileSize * 1024 })
|
|
|
+ setimgType('single')
|
|
|
+ setTimeout(() => {
|
|
|
+ set_selectImgVisible(true)
|
|
|
+ setImgMaterialConfig({
|
|
|
+ ...imgMaterialConfig,
|
|
|
+ type: item.name,
|
|
|
+ max: item.arrayProperty.maxNumber,
|
|
|
+ adcreativeTemplateId
|
|
|
+ })
|
|
|
+ }, 100)
|
|
|
+ }}>
|
|
|
+ {Array(item.arrayProperty.maxNumber).fill('').map((arr, index) => {
|
|
|
+ return <p key={index}>
|
|
|
+ {imgMaterialConfig?.list[index] ? <img style={item?.restriction.imageRestriction?.width > item?.restriction.imageRestriction?.height ? { width: '100%', height: 'auto' } : {}} src={imgMaterialConfig?.list[index].url} /> : <>
|
|
|
+ <span>{`推荐尺寸(${item.restriction.imageRestriction.width} x ${item.restriction.imageRestriction.height})`}</span>
|
|
|
+ <span>{`${item.restriction.imageRestriction.fileFormat?.map(str => str?.replace('IMAGE_TYPE_', ''))};小于 ${item.restriction.imageRestriction.fileSize}KB`}</span>
|
|
|
+ </>}
|
|
|
+ </p>
|
|
|
+ })}
|
|
|
+ </div>
|
|
|
+ </Form.Item>}
|
|
|
+ </Form.Item>
|
|
|
+ })}
|
|
|
</div>}
|
|
|
|
|
|
{/* 标题 */}
|
|
@@ -877,230 +873,199 @@ function CreativePup(props: Props) {
|
|
|
/>
|
|
|
</Form.Item>
|
|
|
<span>{`${titles?.length ?? 0}/${item.restriction.textRestriction.maxLength}`}</span>
|
|
|
- {
|
|
|
- titleShow && <List
|
|
|
- loading={getTextLsit?.loading}
|
|
|
- size="small"
|
|
|
- style={{ maxHeight: 300, overflowX: 'auto' }}
|
|
|
- bordered
|
|
|
- dataSource={getTextLsit?.data?.returnTexts}
|
|
|
- renderItem={(item: any) => <List.Item onClick={() => {
|
|
|
- form.setFieldsValue({ title: item.text })
|
|
|
- settitleshow(false)
|
|
|
- }}><span >{item.text}{item.tag && <span className={styles.crt}>{'CTR 高'}</span>}</span></List.Item>}
|
|
|
- />
|
|
|
- }
|
|
|
+ {titleShow && <List
|
|
|
+ loading={getTextLsit?.loading}
|
|
|
+ size="small"
|
|
|
+ style={{ maxHeight: 300, overflowX: 'auto' }}
|
|
|
+ bordered
|
|
|
+ dataSource={getTextLsit?.data?.returnTexts}
|
|
|
+ renderItem={(item: any) => <List.Item onClick={() => {
|
|
|
+ form.setFieldsValue({ title: item.text })
|
|
|
+ settitleshow(false)
|
|
|
+ }}><span >{item.text}{item.tag && <span className={styles.crt}>{'CTR 高'}</span>}</span></List.Item>}
|
|
|
+ />}
|
|
|
</Form.Item>
|
|
|
</div>
|
|
|
})
|
|
|
}
|
|
|
- {//过滤了不必传和品牌名称,品牌标识图(外部传)短视频结构(组装使用)
|
|
|
- adcreative_template?.adcreativeElements?.filter(item => item.required && item.name === 'description').map(item => {
|
|
|
- let maxNum = adcreativeTemplateId === 1708 || adcreativeTemplateId === 1707 ? pupState.xd_show ? 10 : item.restriction.textRestriction.maxLength : item.restriction.textRestriction.maxLength
|
|
|
- return <div key={item.fieldType}>
|
|
|
- <Form.Item label={<strong>{item.description}</strong>} className={'my_description'}>
|
|
|
- <Form.Item name={item.name} noStyle rules={[{ required: true, pattern: RegExp(item.restriction.textRestriction.textPattern?.replace(/\+/ig, `{1,${maxNum}}`)), message: '请输入正确的' + item.description }]}>
|
|
|
- <Input
|
|
|
- placeholder={'请输入' + item.description}
|
|
|
- style={{ width: 500 }}
|
|
|
- onFocus={() => {
|
|
|
- setdescriptionshow(true)
|
|
|
- textList({ maxTextLength: maxNum })
|
|
|
- }}
|
|
|
- onChange={(e) => {
|
|
|
- let value = e.target.value
|
|
|
- textList({ maxTextLength: maxNum, keyword: value })
|
|
|
- }}
|
|
|
- allowClear
|
|
|
- />
|
|
|
- </Form.Item>
|
|
|
- <span>{`${description?.length ?? 0}/${maxNum}`}</span>
|
|
|
- {
|
|
|
- descriptionShow && <List
|
|
|
- loading={getTextLsit?.loading}
|
|
|
- size="small"
|
|
|
- style={{ maxHeight: 300, overflowX: 'auto' }}
|
|
|
- bordered
|
|
|
- dataSource={getTextLsit?.data?.returnTexts}
|
|
|
- renderItem={(item: any) => <List.Item onClick={(e: any) => {
|
|
|
- form.setFieldsValue({ description: item.text })
|
|
|
- setdescriptionshow(false)
|
|
|
- }}><span >{item.text}{item.tag && <span className={styles.crt}>{'CTR 高'}</span>}</span></List.Item>}
|
|
|
- />
|
|
|
- }
|
|
|
+ {/* 过滤了不必传和品牌名称,品牌标识图(外部传)短视频结构(组装使用) */}
|
|
|
+ {adcreative_template?.adcreativeElements?.filter(item => item.required && item.name === 'description').map(item => {
|
|
|
+ let maxNum = adcreativeTemplateId === 1708 || adcreativeTemplateId === 1707 ? pupState.xd_show ? 10 : item.restriction.textRestriction.maxLength : item.restriction.textRestriction.maxLength
|
|
|
+ return <div key={item.fieldType}>
|
|
|
+ <Form.Item label={<strong>{item.description}</strong>} className={'my_description'}>
|
|
|
+ <Form.Item name={item.name} noStyle rules={[{ required: true, pattern: RegExp(item.restriction.textRestriction.textPattern?.replace(/\+/ig, `{1,${maxNum}}`)), message: '请输入正确的' + item.description }]}>
|
|
|
+ <Input
|
|
|
+ placeholder={'请输入' + item.description}
|
|
|
+ style={{ width: 500 }}
|
|
|
+ onFocus={() => {
|
|
|
+ setdescriptionshow(true)
|
|
|
+ textList({ maxTextLength: maxNum })
|
|
|
+ }}
|
|
|
+ onChange={(e) => {
|
|
|
+ let value = e.target.value
|
|
|
+ textList({ maxTextLength: maxNum, keyword: value })
|
|
|
+ }}
|
|
|
+ allowClear
|
|
|
+ />
|
|
|
</Form.Item>
|
|
|
- </div>
|
|
|
- })
|
|
|
- }
|
|
|
+ <span>{`${description?.length ?? 0}/${maxNum}`}</span>
|
|
|
+ {descriptionShow && <List
|
|
|
+ loading={getTextLsit?.loading}
|
|
|
+ size="small"
|
|
|
+ style={{ maxHeight: 300, overflowX: 'auto' }}
|
|
|
+ bordered
|
|
|
+ dataSource={getTextLsit?.data?.returnTexts}
|
|
|
+ renderItem={(item: any) => <List.Item onClick={(e: any) => {
|
|
|
+ form.setFieldsValue({ description: item.text })
|
|
|
+ setdescriptionshow(false)
|
|
|
+ }}><span >{item.text}{item.tag && <span className={styles.crt}>{'CTR 高'}</span>}</span></List.Item>}
|
|
|
+ />}
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ })}
|
|
|
{/* ============================================================落地页============================================================= */}
|
|
|
{adcreativeTemplateId ? <Form.Item label={<strong>落地页</strong>} name='pageType' >
|
|
|
<Radio.Group>
|
|
|
- {
|
|
|
- pageTypeList?.map((item: any) => {
|
|
|
- return <Radio.Button value={item.pageType} key={item.pageType} disabled={!item.description.includes('微信原生推广页')}>{item.description.includes('微信原生推广页') ? '微信原生推广页' : item.description}</Radio.Button>
|
|
|
- })
|
|
|
- }
|
|
|
+ {pageTypeList?.map((item: any) => {
|
|
|
+ return <Radio.Button value={item.pageType} key={item.pageType} disabled={!item.description.includes('微信原生推广页')}>{item.description.includes('微信原生推广页') ? '微信原生推广页' : item.description}</Radio.Button>
|
|
|
+ })}
|
|
|
</Radio.Group>
|
|
|
</Form.Item> : <div style={{ minHeight: 400, display: 'flex', justifyContent: 'center', alignItems: 'center' }}>
|
|
|
<Empty description="请先选择创意形式" />
|
|
|
</div>}
|
|
|
- {
|
|
|
- pageType === 'PAGE_TYPE_CANVAS_WECHAT' && isShowSc && <Form.Item label={<strong>素材选项</strong>} name='overrideCanvasHeadOption'>
|
|
|
- <Radio.Group >
|
|
|
- {
|
|
|
- adcreativeTemplateId && creativeConfig[adcreativeTemplateId]?.overrideCanvasHeadOption?.map((item: string | number) => {
|
|
|
- return <Radio value={item} key={item}>{overrideCanvasHeadOptionEnum[item]}</Radio>
|
|
|
- })
|
|
|
- }
|
|
|
- </Radio.Group>
|
|
|
- </Form.Item>
|
|
|
- }
|
|
|
+ {pageType === 'PAGE_TYPE_CANVAS_WECHAT' && isShowSc && <Form.Item label={<strong>素材选项</strong>} name='overrideCanvasHeadOption'>
|
|
|
+ <Radio.Group >
|
|
|
+ {adcreativeTemplateId && creativeConfig[adcreativeTemplateId]?.overrideCanvasHeadOption?.map((item: string | number) => {
|
|
|
+ return <Radio value={item} key={item}>{overrideCanvasHeadOptionEnum[item]}</Radio>
|
|
|
+ })}
|
|
|
+ </Radio.Group>
|
|
|
+ </Form.Item>}
|
|
|
{/* ============================================================普通行动按钮============================================================= */}
|
|
|
- {
|
|
|
- pupState.xd_show && <Form.Item hidden={isShowXd} label={<strong>行动按钮</strong>} name='actionBtn' valuePropName="checked">
|
|
|
- <Switch checkedChildren="开启" unCheckedChildren="关闭" disabled={isShowXd} />
|
|
|
+ {pupState.xd_show && <Form.Item hidden={isShowXd} label={<strong>行动按钮</strong>} name='actionBtn' valuePropName="checked">
|
|
|
+ <Switch checkedChildren="开启" unCheckedChildren="关闭" disabled={isShowXd} />
|
|
|
+ </Form.Item>}
|
|
|
+ {actionBtn && <>
|
|
|
+ <Form.Item name='linkNameType' label={<strong>按钮文案</strong>}>
|
|
|
+ <Select style={{ width: 200 }} showSearch filterOption={(input, option) =>
|
|
|
+ (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
|
|
|
+ } allowClear>
|
|
|
+ {linkNameList?.map((item: any) => {
|
|
|
+ return <Select.Option value={item.linkNameType} key={item.linkNameType}>{item.description}</Select.Option>
|
|
|
+ })}
|
|
|
+ </Select>
|
|
|
</Form.Item>
|
|
|
- }
|
|
|
- {
|
|
|
- actionBtn && <>
|
|
|
- <Form.Item name='linkNameType' label={<strong>按钮文案</strong>}>
|
|
|
- <Select style={{ width: 200 }} showSearch filterOption={(input, option) =>
|
|
|
- (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
|
|
|
- } allowClear>
|
|
|
- {
|
|
|
- linkNameList?.map((item: any) => {
|
|
|
- return <Select.Option value={item.linkNameType} key={item.linkNameType}>{item.description}</Select.Option>
|
|
|
- })
|
|
|
- }
|
|
|
- </Select>
|
|
|
+ <Form.Item label={<strong>跳转落地页</strong>}>
|
|
|
+ <Form.Item name='linkPageType' noStyle>
|
|
|
+ <Radio.Group style={{ display: 'flex' }}>
|
|
|
+ {linkPageList?.map((item: { linkPageType: string; description: string; }, index: number) => {
|
|
|
+ return <Radio.Button value={item.linkPageType} key={item.linkPageType} >{item.description}</Radio.Button>
|
|
|
+ })}
|
|
|
+ </Radio.Group>
|
|
|
</Form.Item>
|
|
|
- <Form.Item label={<strong>跳转落地页</strong>}>
|
|
|
- <Form.Item name='linkPageType' noStyle>
|
|
|
- <Radio.Group style={{ display: 'flex' }}>
|
|
|
- {
|
|
|
- linkPageList?.map((item: { linkPageType: string; description: string; }, index: number) => {
|
|
|
- return <Radio.Button value={item.linkPageType} key={item.linkPageType} >{item.description}</Radio.Button>
|
|
|
- })
|
|
|
- }
|
|
|
- </Radio.Group>
|
|
|
- </Form.Item>
|
|
|
- {/* 自定义落地页地址 */}
|
|
|
- {linkPageType === "LINK_PAGE_TYPE_DEFAULT" && <Form.Item name='pageUrl' rules={[{ required: true, message: '请输入自定义落地页地址' }]} style={{ marginTop: 10, marginBottom: 0 }}>
|
|
|
- <Input placeholder='请输入自定义落地页地址' style={{ width: 300 }} />
|
|
|
- </Form.Item>}
|
|
|
- {/* 小程序 */}
|
|
|
- {
|
|
|
- linkPageType === "LINK_PAGE_TYPE_MINI_PROGRAM_WECHAT" && <Form.Item noStyle >
|
|
|
- <Form.Item rules={[{ required: true, message: '请输入小程序原始ID' }]} name='miniProgramId' style={{ marginTop: 10, marginBottom: 0 }} >
|
|
|
- <Input placeholder='请输入小程序原始ID' style={{ width: 300 }} />
|
|
|
- </Form.Item>
|
|
|
- <Form.Item rules={[{ required: true, message: '请输入小程序链接' }]} name='miniProgramPath' style={{ marginTop: 10, marginBottom: 0 }}>
|
|
|
- <Input placeholder='请输入小程序链接' style={{ width: 300 }} />
|
|
|
- </Form.Item>
|
|
|
+ {/* 自定义落地页地址 */}
|
|
|
+ {linkPageType === "LINK_PAGE_TYPE_DEFAULT" && <Form.Item name='pageUrl' rules={[{ required: true, message: '请输入自定义落地页地址' }]} style={{ marginTop: 10, marginBottom: 0 }}>
|
|
|
+ <Input placeholder='请输入自定义落地页地址' style={{ width: 300 }} />
|
|
|
+ </Form.Item>}
|
|
|
+ {/* 小程序 */}
|
|
|
+ {
|
|
|
+ linkPageType === "LINK_PAGE_TYPE_MINI_PROGRAM_WECHAT" && <Form.Item noStyle >
|
|
|
+ <Form.Item rules={[{ required: true, message: '请输入小程序原始ID' }]} name='miniProgramId' style={{ marginTop: 10, marginBottom: 0 }} >
|
|
|
+ <Input placeholder='请输入小程序原始ID' style={{ width: 300 }} />
|
|
|
</Form.Item>
|
|
|
- }
|
|
|
- </Form.Item>
|
|
|
- {/* 落地页 */}
|
|
|
+ <Form.Item rules={[{ required: true, message: '请输入小程序链接' }]} name='miniProgramPath' style={{ marginTop: 10, marginBottom: 0 }}>
|
|
|
+ <Input placeholder='请输入小程序链接' style={{ width: 300 }} />
|
|
|
+ </Form.Item>
|
|
|
+ </Form.Item>
|
|
|
+ }
|
|
|
+ </Form.Item>
|
|
|
+ {/* 落地页 */}
|
|
|
|
|
|
- </>
|
|
|
- }
|
|
|
+ </>}
|
|
|
{/* ============================================================特殊行动按钮============================================================= */}
|
|
|
- {
|
|
|
- !pupState.xd_show && adcreative_template?.adcreativeElements?.find(item => item.name === 'button_text') && <Form.Item label={<strong>行动按钮</strong>} >
|
|
|
- <Form.Item valuePropName="checked" noStyle >
|
|
|
- <Switch checkedChildren="开启" unCheckedChildren="关闭" checked={true} disabled defaultChecked={true} />
|
|
|
- </Form.Item>
|
|
|
- </Form.Item>
|
|
|
- }
|
|
|
- {
|
|
|
- !pupState.xd_show && adcreative_template?.adcreativeElements?.find(item => item.name === 'button_text') && <Form.Item name='buttonText' label={<strong>按钮文案</strong>} rules={[{ required: true, message: '请选择按钮文案!' }]}>
|
|
|
- <Select style={{ width: 200 }} showSearch filterOption={(input, option) =>
|
|
|
- (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
|
|
|
- } allowClear>
|
|
|
- {
|
|
|
- adcreative_template?.adcreativeElements?.find(item => item.name === 'button_text')?.enumProperty?.enumeration?.map((item: any) => {
|
|
|
- return <Select.Option value={item.value} key={item.value}>{item.value}</Select.Option>
|
|
|
- })
|
|
|
- }
|
|
|
- </Select>
|
|
|
+ {!pupState.xd_show && adcreative_template?.adcreativeElements?.find(item => item.name === 'button_text') && <Form.Item label={<strong>行动按钮</strong>} >
|
|
|
+ <Form.Item valuePropName="checked" noStyle >
|
|
|
+ <Switch checkedChildren="开启" unCheckedChildren="关闭" checked={true} disabled defaultChecked={true} />
|
|
|
</Form.Item>
|
|
|
- }
|
|
|
+ </Form.Item>}
|
|
|
+ {!pupState.xd_show && adcreative_template?.adcreativeElements?.find(item => item.name === 'button_text') && <Form.Item name='buttonText' label={<strong>按钮文案</strong>} rules={[{ required: true, message: '请选择按钮文案!' }]}>
|
|
|
+ <Select style={{ width: 200 }} showSearch filterOption={(input, option) =>
|
|
|
+ (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
|
|
|
+ } allowClear>
|
|
|
+ {
|
|
|
+ adcreative_template?.adcreativeElements?.find(item => item.name === 'button_text')?.enumProperty?.enumeration?.map((item: any) => {
|
|
|
+ return <Select.Option value={item.value} key={item.value}>{item.value}</Select.Option>
|
|
|
+ })
|
|
|
+ }
|
|
|
+ </Select>
|
|
|
+ </Form.Item>}
|
|
|
{/* ============================================================数据展示============================================================= */}
|
|
|
{pupState.sj_show && <Form.Item label={<strong>数据展示</strong>} name='dataShow' valuePropName="checked">
|
|
|
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
|
</Form.Item>}
|
|
|
- {
|
|
|
- dataShow && <>
|
|
|
- <Form.Item name='conversionDataType' label={<strong>数据类型</strong>}>
|
|
|
- <Radio.Group>
|
|
|
- {
|
|
|
- conversionList?.conversion_data_type?.map((item: { value: string; description: string; }, index: number) => {
|
|
|
- return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
|
|
|
- })
|
|
|
- }
|
|
|
- </Radio.Group>
|
|
|
- </Form.Item>
|
|
|
- {conversionList?.conversion_target_type && conversionDataType === 'CONVERSION_DATA_ADMETRIC' && <Form.Item name='conversionTargetType' label={<strong>转化行为</strong>}>
|
|
|
- <Radio.Group>
|
|
|
- {
|
|
|
- conversionList?.conversion_target_type?.map((item: { value: string; description: string; }, index: number) => {
|
|
|
- return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
|
|
|
- })
|
|
|
- }
|
|
|
- </Radio.Group>
|
|
|
- </Form.Item>}
|
|
|
- </>
|
|
|
- }
|
|
|
+ {dataShow && <>
|
|
|
+ <Form.Item name='conversionDataType' label={<strong>数据类型</strong>}>
|
|
|
+ <Radio.Group>
|
|
|
+ {
|
|
|
+ conversionList?.conversion_data_type?.map((item: { value: string; description: string; }, index: number) => {
|
|
|
+ return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
|
|
|
+ })
|
|
|
+ }
|
|
|
+ </Radio.Group>
|
|
|
+ </Form.Item>
|
|
|
+ {conversionList?.conversion_target_type && conversionDataType === 'CONVERSION_DATA_ADMETRIC' && <Form.Item name='conversionTargetType' label={<strong>转化行为</strong>}>
|
|
|
+ <Radio.Group>
|
|
|
+ {
|
|
|
+ conversionList?.conversion_target_type?.map((item: { value: string; description: string; }, index: number) => {
|
|
|
+ return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
|
|
|
+ })
|
|
|
+ }
|
|
|
+ </Radio.Group>
|
|
|
+ </Form.Item>}
|
|
|
+ </>}
|
|
|
{/* ============================================================视频结束页============================================================= */}
|
|
|
{pupState.sp_show && <Form.Item label={<strong>视频结束页</strong>} name='videoOver' valuePropName="checked">
|
|
|
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
|
</Form.Item>}
|
|
|
- {
|
|
|
- videoOver && <>
|
|
|
- <Form.Item name='endPageType' label={<strong>视频结束页类型</strong>} >
|
|
|
- <Radio.Group>
|
|
|
- {
|
|
|
- adcreative_template?.adcreativeElements?.filter(item => item.name === 'end_page_type')[0]?.enumProperty?.enumeration?.map((item) => {
|
|
|
- return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
|
|
|
- })
|
|
|
- }
|
|
|
- </Radio.Group>
|
|
|
- </Form.Item>
|
|
|
- <div className={'my_endPageDesc'} >
|
|
|
- <Form.Item label={<strong>结束文案</strong>}>
|
|
|
- <Form.Item name='endPageDesc' rules={[{ required: true, pattern: RegExp("^[^\\<\\>\\&'\\\"\\/\\x08\\x09\\x0A\\x0D\\\\]{1,12}$"), message: '请输入正确的结束页文案' }]} noStyle>
|
|
|
- <Input
|
|
|
- placeholder='请输入结束页文案'
|
|
|
- style={{ width: 300 }}
|
|
|
- onFocus={() => {
|
|
|
- setendPageDescnshow(true)
|
|
|
- textList({ maxTextLength: 12 })
|
|
|
- }}
|
|
|
- onChange={(e) => {
|
|
|
- let value = e.target.value
|
|
|
- textList({ maxTextLength: 12, keyword: value })
|
|
|
- }}
|
|
|
- allowClear
|
|
|
- />
|
|
|
- </Form.Item>
|
|
|
- <span>{endPageDesc?.length || 0}/12</span>
|
|
|
- {
|
|
|
- endPageDescShow && <List
|
|
|
- loading={getTextLsit?.loading}
|
|
|
- size="small"
|
|
|
- style={{ maxHeight: 300, maxWidth: 300, overflowX: 'auto' }}
|
|
|
- bordered
|
|
|
- dataSource={getTextLsit?.data?.returnTexts}
|
|
|
- renderItem={(item: any) => <List.Item onClick={(e: any) => {
|
|
|
- form.setFieldsValue({ endPageDesc: item.text })
|
|
|
- setendPageDescnshow(false)
|
|
|
- }}><span >{item.text}{item.tag && <span className={styles.crt}>{'CTR 高'}</span>}</span></List.Item>}
|
|
|
- />
|
|
|
- }
|
|
|
+ {videoOver && <>
|
|
|
+ <Form.Item name='endPageType' label={<strong>视频结束页类型</strong>} >
|
|
|
+ <Radio.Group>
|
|
|
+ {adcreative_template?.adcreativeElements?.filter(item => item.name === 'end_page_type')[0]?.enumProperty?.enumeration?.map((item) => {
|
|
|
+ return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
|
|
|
+ })}
|
|
|
+ </Radio.Group>
|
|
|
+ </Form.Item>
|
|
|
+ <div className={'my_endPageDesc'} >
|
|
|
+ <Form.Item label={<strong>结束文案</strong>}>
|
|
|
+ <Form.Item name='endPageDesc' rules={[{ required: true, pattern: RegExp("^[^\\<\\>\\&'\\\"\\/\\x08\\x09\\x0A\\x0D\\\\]{1,12}$"), message: '请输入正确的结束页文案' }]} noStyle>
|
|
|
+ <Input
|
|
|
+ placeholder='请输入结束页文案'
|
|
|
+ style={{ width: 300 }}
|
|
|
+ onFocus={() => {
|
|
|
+ setendPageDescnshow(true)
|
|
|
+ textList({ maxTextLength: 12 })
|
|
|
+ }}
|
|
|
+ onChange={(e) => {
|
|
|
+ let value = e.target.value
|
|
|
+ textList({ maxTextLength: 12, keyword: value })
|
|
|
+ }}
|
|
|
+ allowClear
|
|
|
+ />
|
|
|
</Form.Item>
|
|
|
- </div>
|
|
|
- </>
|
|
|
- }
|
|
|
+ <span>{endPageDesc?.length || 0}/12</span>
|
|
|
+ {endPageDescShow && <List
|
|
|
+ loading={getTextLsit?.loading}
|
|
|
+ size="small"
|
|
|
+ style={{ maxHeight: 300, maxWidth: 300, overflowX: 'auto' }}
|
|
|
+ bordered
|
|
|
+ dataSource={getTextLsit?.data?.returnTexts}
|
|
|
+ renderItem={(item: any) => <List.Item onClick={(e: any) => {
|
|
|
+ form.setFieldsValue({ endPageDesc: item.text })
|
|
|
+ setendPageDescnshow(false)
|
|
|
+ }}><span >{item.text}{item.tag && <span className={styles.crt}>{'CTR 高'}</span>}</span></List.Item>}
|
|
|
+ />}
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ </>}
|
|
|
</>
|
|
|
}
|
|
|
{/* ============================================================基本信息============================================================= */}
|
|
@@ -1111,67 +1076,70 @@ function CreativePup(props: Props) {
|
|
|
</Form.Item>
|
|
|
</Form>
|
|
|
{/* 选择图片素材 */}
|
|
|
- {
|
|
|
- selectImgVisible && <SelectCloud
|
|
|
- visible={selectImgVisible}
|
|
|
- onClose={() => {
|
|
|
- set_selectImgVisible(false)
|
|
|
- }}
|
|
|
- sliderImgContent={imgMaterialConfig.list}
|
|
|
- onChange={(content) => {
|
|
|
+ {selectImgVisible && <SelectCloud
|
|
|
+ visible={selectImgVisible}
|
|
|
+ onClose={() => {
|
|
|
+ set_selectImgVisible(false)
|
|
|
+ }}
|
|
|
+ sliderImgContent={imgType === 'many' ? imgListMaterialConfig.list : imgMaterialConfig.list}
|
|
|
+ onChange={(content) => {
|
|
|
+ if (imgType === 'many') {
|
|
|
+ setImgListMaterialConfig({ ...imgListMaterialConfig, list: content })
|
|
|
if (content.length > 0) {
|
|
|
- form.setFieldsValue({ [imgMaterialConfig.type]: imgMaterialConfig.type })
|
|
|
+ form.setFieldsValue({ [imgListMaterialConfig.type]: imgListMaterialConfig.type })
|
|
|
}
|
|
|
+ } else {
|
|
|
setImgMaterialConfig({ ...imgMaterialConfig, list: content })
|
|
|
- set_selectImgVisible(false)
|
|
|
- }} />
|
|
|
- }
|
|
|
- {/* 选择视频素材 */}
|
|
|
- {
|
|
|
- selectVideoVisible && <SelectCloud
|
|
|
- visible={selectVideoVisible}
|
|
|
- onClose={() => set_selectVideoVisible(false)}
|
|
|
- sliderImgContent={videoMaterialConfig.list}
|
|
|
- onChange={(content) => {
|
|
|
if (content.length > 0) {
|
|
|
- form.setFieldsValue({ [videoMaterialConfig.type]: videoMaterialConfig.type })
|
|
|
+ form.setFieldsValue({ [imgMaterialConfig.type]: imgMaterialConfig.type })
|
|
|
}
|
|
|
- setVideoMaterialConfig({ ...videoMaterialConfig, list: content })
|
|
|
- set_selectVideoVisible(false)
|
|
|
- }} />
|
|
|
- }
|
|
|
+ }
|
|
|
+ set_selectImgVisible(false)
|
|
|
+ }}
|
|
|
+ />}
|
|
|
+ {/* 选择视频素材 */}
|
|
|
+ {selectVideoVisible && <SelectCloud
|
|
|
+ visible={selectVideoVisible}
|
|
|
+ onClose={() => set_selectVideoVisible(false)}
|
|
|
+ sliderImgContent={videoMaterialConfig.list}
|
|
|
+ onChange={(content) => {
|
|
|
+ if (content.length > 0) {
|
|
|
+ form.setFieldsValue({ [videoMaterialConfig.type]: videoMaterialConfig.type })
|
|
|
+ }
|
|
|
+ setVideoMaterialConfig({ ...videoMaterialConfig, list: content })
|
|
|
+ set_selectVideoVisible(false)
|
|
|
+ }}
|
|
|
+ />}
|
|
|
{/* 视频封面图弹窗 */}
|
|
|
- {
|
|
|
- videoImgsVisbile && <Modal
|
|
|
- visible={videoImgsVisbile}
|
|
|
- title={<div>生成封面图 <Switch checkedChildren="开启预览" unCheckedChildren="关闭预览" checked={videoImgs.preview} onChange={(checked) => { set_videoImgs({ ...videoImgs, preview: checked }) }} /></div>}
|
|
|
- onOk={() => {
|
|
|
- if (videoImgs.activeUrl) {
|
|
|
- setImgMaterialConfig({ ...imgMaterialConfig, list: [{ url: videoImgs.activeUrl }] })
|
|
|
- set_videoImgsVisbile(false)
|
|
|
- } else {
|
|
|
- message.error('请选择图片,获取使用取消按钮关闭弹窗!')
|
|
|
- }
|
|
|
- }}
|
|
|
- onCancel={() => { set_videoImgsVisbile(false) }}
|
|
|
- confirmLoading={getVideoCapture.loading}
|
|
|
- width={600}
|
|
|
- >
|
|
|
+ {videoImgsVisbile && <Modal
|
|
|
+ visible={videoImgsVisbile}
|
|
|
+ title={<div>生成封面图 <Switch checkedChildren="开启预览" unCheckedChildren="关闭预览" checked={videoImgs.preview} onChange={(checked) => { set_videoImgs({ ...videoImgs, preview: checked }) }} /></div>}
|
|
|
+ onOk={() => {
|
|
|
+ if (videoImgs.activeUrl) {
|
|
|
+ setImgMaterialConfig({ ...imgMaterialConfig, list: [{ url: videoImgs.activeUrl }] })
|
|
|
+ set_videoImgsVisbile(false)
|
|
|
+ } else {
|
|
|
+ message.error('请选择图片,获取使用取消按钮关闭弹窗!')
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ onCancel={() => { set_videoImgsVisbile(false) }}
|
|
|
+ confirmLoading={getVideoCapture.loading}
|
|
|
+ width={600}
|
|
|
+ >
|
|
|
|
|
|
- <Radio.Group className={styles.videoImgs} onChange={(e) => {
|
|
|
- let url = e.target.value
|
|
|
- set_videoImgs({ ...videoImgs, activeUrl: url })
|
|
|
- }}>
|
|
|
- {
|
|
|
- videoImgs?.urlList?.map((item: any, index: number) => {
|
|
|
- return <Radio.Button value={item} key={index}>
|
|
|
- <Image src={item} preview={videoImgs.preview} />
|
|
|
- </Radio.Button>
|
|
|
- })
|
|
|
- }
|
|
|
- </Radio.Group>
|
|
|
- </Modal>
|
|
|
- }
|
|
|
+ <Radio.Group className={styles.videoImgs} onChange={(e) => {
|
|
|
+ let url = e.target.value
|
|
|
+ set_videoImgs({ ...videoImgs, activeUrl: url })
|
|
|
+ }}>
|
|
|
+ {
|
|
|
+ videoImgs?.urlList?.map((item: any, index: number) => {
|
|
|
+ return <Radio.Button value={item} key={index}>
|
|
|
+ <Image src={item} preview={videoImgs.preview} />
|
|
|
+ </Radio.Button>
|
|
|
+ })
|
|
|
+ }
|
|
|
+ </Radio.Group>
|
|
|
+ </Modal>}
|
|
|
</Modal >
|
|
|
}
|
|
|
export default CreativePup
|