index.tsx 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import React, { useCallback, useState } from 'react'
  2. import { Button, Col, Space, Spin, Tabs, Tooltip, } from 'antd'
  3. import style from '../index.less'
  4. import CreativeModal from "../../../components/creativeModal"
  5. import { CreateAdProps } from '@/services/launchAdq/createAd'
  6. import { BaseResult } from '@ahooksjs/use-request/lib/types'
  7. import { ModalConfig } from '../ad'
  8. import AdcreativeCol from "../adcreativeCol"
  9. import CreativePup from './modal'
  10. import { CopyOutlined } from '@ant-design/icons'
  11. type Props = {
  12. queryForm: Partial<CreateAdProps>,
  13. setQueryForm: React.Dispatch<React.SetStateAction<Partial<CreateAdProps>>>,
  14. getSysAdgroups: BaseResult<any, any>,
  15. getSysAdcreative: BaseResult<any, any>,
  16. clearData: () => void,
  17. targetKey: string,
  18. page_checked: boolean,
  19. set_targetKey: (key: string) => void
  20. }
  21. function Creative(props: Props) {
  22. let { queryForm, getSysAdgroups, getSysAdcreative, setQueryForm, clearData, targetKey, set_targetKey } = props
  23. const [adModalConfig, setAdModalConfig] = useState<ModalConfig>({//新建广告弹窗
  24. visible: false,
  25. type: 'add'
  26. })
  27. const [creativeVisible, setCreativeVisible] = useState<boolean>(false) // 选择创意弹窗控制
  28. // 设置变量
  29. const handleAdModalConfig = useCallback((arg: ModalConfig) => {
  30. setAdModalConfig({ ...adModalConfig, ...arg })
  31. }, [adModalConfig])
  32. // 获取创意详情
  33. const getInfo = useCallback((sysAdcreativeId) => {
  34. getSysAdcreative.run(sysAdcreativeId).then(res => {
  35. let arr = queryForm.taskMediaMaps || []
  36. let { createTime, ...params } = res
  37. arr[targetKey] = { sysAdcreative: { ...params, isTemplate: false,sysAdcreativeId:params.id } }
  38. setQueryForm({ ...queryForm, sysAdcreativeId, taskMediaMaps: arr });
  39. setCreativeVisible(false);
  40. clearData()
  41. })
  42. }, [queryForm, targetKey])
  43. // tabs新增和删除
  44. const onEdit = useCallback((targetKey: string | React.MouseEvent<Element, MouseEvent> | React.KeyboardEvent<Element>, action: 'add' | 'remove') => {
  45. if (queryForm.taskMediaMaps) {
  46. if (action === 'add') {
  47. setQueryForm({ ...queryForm, taskMediaMaps: [...queryForm.taskMediaMaps, { sysAdcreative: '' }] })
  48. set_targetKey(queryForm.taskMediaMaps.length.toString())
  49. } else {
  50. let arr = queryForm.taskMediaMaps || []
  51. let adqPageArr = queryForm.adqPageList || []
  52. let pageArr = queryForm.pageList || []
  53. if (arr.length > 1) {
  54. arr = arr.filter((item, index) => index.toString() !== targetKey)
  55. adqPageArr = adqPageArr?.filter((item, index) => index.toString() !== targetKey)
  56. pageArr = pageArr?.filter((item, index) => index.toString() !== targetKey)
  57. } else {
  58. arr = [{ sysAdcreative: '' }]
  59. adqPageArr = []
  60. pageArr = []
  61. }
  62. set_targetKey((Number(targetKey) === 0 ? 0 : Number(targetKey) - 1).toString())
  63. setQueryForm({ ...queryForm, taskMediaMaps: arr, pageList: pageArr, adqPageList: adqPageArr })
  64. }
  65. }
  66. }, [queryForm])
  67. // 复制当前创意
  68. const copyBefore = () => {
  69. if (queryForm.taskMediaMaps) {
  70. let taskMediaMaps = queryForm.taskMediaMaps
  71. let taskMediaMap = queryForm.taskMediaMaps[targetKey]
  72. taskMediaMaps.push(JSON.parse(JSON.stringify(taskMediaMap)))
  73. setQueryForm({ ...queryForm, taskMediaMaps: taskMediaMaps })
  74. }
  75. }
  76. return <Col span={12} className={style.conRightBorder}>
  77. <div className={style.top}>创意基本信息
  78. {queryForm.taskMediaMaps && queryForm.taskMediaMaps?.length > 0 && <a onClick={() => {
  79. setQueryForm({ ...queryForm, taskMediaMaps: [], sysAdcreativeId: undefined, pageList: [], adqPageList: [] })
  80. set_targetKey('0')
  81. }}>全部清空</a>}
  82. </div>
  83. <div className={style.center}>
  84. <Tabs
  85. size={'small'}
  86. onEdit={onEdit}
  87. type="editable-card"
  88. activeKey={targetKey}
  89. tabBarExtraContent={queryForm.taskMediaMaps?.[targetKey]?.sysAdcreative ? {
  90. right: <Tooltip title="复制当前创意">
  91. <Button icon={<CopyOutlined />} style={{ marginLeft: 4 }} type="link" onClick={copyBefore}></Button>
  92. </Tooltip>
  93. } : {}}
  94. onChange={(key) => { set_targetKey(key) }}
  95. >
  96. {queryForm?.taskMediaMaps?.map((item, index) => {
  97. return <Tabs.TabPane key={index} tab={'创意' + (index + 1)}>
  98. <Spin spinning={getSysAdcreative.loading}>
  99. <div className={style.centerContent}>
  100. {item?.sysAdcreative && <AdcreativeCol data={item.sysAdcreative} />}
  101. </div>
  102. </Spin>
  103. </Tabs.TabPane>
  104. })}
  105. </Tabs>
  106. </div>
  107. <div className={style.bottom}>
  108. <Space size={20}>
  109. {queryForm?.sysAdgroup ? <>
  110. <span onClick={() => { setCreativeVisible(true) }}>{queryForm?.taskMediaMaps && queryForm?.taskMediaMaps[targetKey]?.sysAdcreative ? '重选创意' : '选择创意'}</span>
  111. </> : <Tooltip title="请先设置广告">
  112. <span>选择创意</span>
  113. </Tooltip>}
  114. {queryForm?.sysAdgroup ? <>
  115. <span onClick={() => { handleAdModalConfig(queryForm?.taskMediaMaps && queryForm?.taskMediaMaps[targetKey]?.sysAdcreative ? { visible: true, type: 'edit' } : { visible: true, type: 'add' }) }}>{queryForm?.taskMediaMaps && queryForm?.taskMediaMaps[targetKey]?.sysAdcreative ? '编辑创意' : '新建创意'}</span>
  116. </> : <Tooltip title="请先设置广告">
  117. <span>新建创意</span>
  118. </Tooltip>}
  119. </Space>
  120. </div>
  121. {/* 选择创意 */}
  122. {creativeVisible && <CreativeModal siteSet={getSysAdgroups?.data?.siteSet} visible={creativeVisible} onClose={() => setCreativeVisible(false)} onChange={getInfo} sysAdcreativeId={queryForm?.sysAdcreativeId} promotedObjectType={queryForm.promotedObjectType as string} />}
  123. {/* 创建创意 */}
  124. {adModalConfig.visible && <CreativePup visible={adModalConfig.visible} type={adModalConfig.type} PupFn={handleAdModalConfig} callback={(values: any) => {
  125. let arr = queryForm.taskMediaMaps || []
  126. let adqPageArr: any = queryForm.adqPageList || []
  127. let pageArr: any = queryForm.pageList || []
  128. adqPageArr[targetKey as string] = null//清除adq落地页
  129. pageArr[targetKey as string] = null//清除本地落地页
  130. arr[targetKey] = { sysAdcreative: values }
  131. setQueryForm({ ...queryForm, taskMediaMaps: arr, adqPageList: adqPageArr, pageList: pageArr }); setCreativeVisible(false); clearData();
  132. handleAdModalConfig({ visible: false, dataInfo: null, type: 'add' })
  133. }} dataInfo={queryForm?.taskMediaMaps && queryForm?.taskMediaMaps[targetKey]?.sysAdcreative} queryForm={queryForm} />}
  134. </Col>
  135. }
  136. export default Creative