index.tsx 6.5 KB

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