index.tsx 4.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import React, { useContext, useEffect, useState } from "react"
  2. import style from '../index.less'
  3. import { Button, Typography } from "antd"
  4. import { DispatchAddelivery } from "..";
  5. import { PlusCircleOutlined, RedoOutlined } from "@ant-design/icons";
  6. import NewText from "./newText";
  7. const { Title, Text } = Typography;
  8. const MaterialText: React.FC = () => {
  9. /*************************************/
  10. const { textData, addelivery, setAddelivery, clearData } = useContext(DispatchAddelivery)!;
  11. const { dynamic, dynamicCreativesTextDTOS, dynamicMaterialDTos, mediaType } = addelivery
  12. const [addVisible, setAddVisible] = useState<boolean>(false)
  13. const [descName, setDescName] = useState<string>('')
  14. const [titleName, setTitleName] = useState<string>('')
  15. /*************************************/
  16. useEffect(() => {
  17. if (textData && Object.keys(textData).length > 0) {
  18. Object.keys(textData).forEach(key => {
  19. let item = textData[key]
  20. let content = item.children.content
  21. if (key === 'description') {
  22. setDescName(content.description)
  23. } else if (key === 'title') {
  24. setTitleName(content.description)
  25. }
  26. })
  27. }
  28. }, [textData])
  29. return <div className={`${style.settingsBody_content_row} ${style.row5}`}>
  30. <div className={style.title}>
  31. <span>创意文案 <span className={style.selected}>已选 {dynamicCreativesTextDTOS?.dynamicCreativesTextDetailDTOList?.length || 0}</span></span>
  32. {(dynamicCreativesTextDTOS && Object.keys(dynamicCreativesTextDTOS).length > 0) ? <Button type="link" size="small" style={{ fontSize: 11, padding: 0 }} onClick={() => setAddelivery({ ...addelivery, dynamicCreativesTextDTOS: {} })}><RedoOutlined />清空</Button> : null}
  33. </div>
  34. <div className={style.detail}>
  35. <div className={style.detail_body}>
  36. <Title level={5} style={{ fontSize: 12 }} ellipsis>{dynamicCreativesTextDTOS?.type === 0 ? '全部相同' : dynamicCreativesTextDTOS?.type === 1 ? '按创意组一一对应' : dynamicCreativesTextDTOS?.type === 2 ? '按文案顺序分配' : dynamicCreativesTextDTOS?.type === 3 ? '先分配创意组,文案后叉乘': dynamicCreativesTextDTOS?.type === 4 ? '创意组和文案叉乘打乱后分配' : null}</Title>
  37. {dynamicCreativesTextDTOS?.dynamicCreativesTextDetailDTOList?.map((item: { [x: string]: (boolean | React.ReactPortal | null | undefined)[]; }, index: number) => {
  38. if (item) {
  39. let keys = Object.keys(item)
  40. return <div key={index}>
  41. {keys.includes('description') ? <>
  42. <Title level={5} style={{ fontSize: 12 }}>{descName}</Title>
  43. {item['description'].map((t, index) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
  44. </> : keys.includes('title') ? <>
  45. <Title level={5} style={{ fontSize: 12 }}>{titleName}</Title>
  46. {item['title'].map((t, index) => <div className={style.text} key={index}><Text ellipsis={{ tooltip: true }}>{t}</Text></div>)}
  47. </> : null}
  48. </div>
  49. }
  50. return null
  51. })}
  52. {((dynamic && Object.keys(dynamic).length > 0) && !(textData && Object.keys(textData).length > 0)) && <div className={style.ad_config}>
  53. <div className={style.ad_config_item}>无需设置创意文案</div>
  54. </div>}
  55. </div>
  56. <div className={style.detail_footer}>
  57. <Button disabled={!(dynamicMaterialDTos && Object.keys(dynamicMaterialDTos)?.length > 0)} type="link" icon={<PlusCircleOutlined />} style={{ padding: 0, fontSize: 12 }} onClick={() => setAddVisible(true)}>添加</Button>
  58. </div>
  59. </div>
  60. {addVisible && <NewText
  61. value={dynamicCreativesTextDTOS}
  62. dynamicMaterialDTos={dynamicMaterialDTos}
  63. mediaType={mediaType}
  64. textData={textData}
  65. visible={addVisible}
  66. deliveryMode={dynamic?.deliveryMode}
  67. onClose={() => {
  68. setAddVisible(false)
  69. }}
  70. onChange={(values) => {
  71. setAddelivery({ ...addelivery, dynamicCreativesTextDTOS: values })
  72. setAddVisible(false)
  73. clearData()
  74. }}
  75. />}
  76. </div>
  77. }
  78. export default React.memo(MaterialText)