|
@@ -13,13 +13,14 @@ import { cartesianProduct, distributeArray } from "@/utils/utils";
|
|
import { columnsAddDynamic } from "./tableConfig";
|
|
import { columnsAddDynamic } from "./tableConfig";
|
|
import { useAjax } from "@/Hook/useAjax";
|
|
import { useAjax } from "@/Hook/useAjax";
|
|
import { createDynamicTaskApi } from "@/services/adqV3";
|
|
import { createDynamicTaskApi } from "@/services/adqV3";
|
|
|
|
+import TacticsS from "./TacticsS";
|
|
const { Text, Title } = Typography;
|
|
const { Text, Title } = Typography;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 新增创意
|
|
* 新增创意
|
|
* @returns
|
|
* @returns
|
|
*/
|
|
*/
|
|
-const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose, adData }) => {
|
|
|
|
|
|
+const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose, adData: selectData, tactics }) => {
|
|
|
|
|
|
/****************************************/
|
|
/****************************************/
|
|
const [addelivery, setAddelivery] = useState<PULLIN.AddeliveryProps>({ adgroups: {}, targeting: [], dynamic: {}, dynamicMaterialDTos: {}, dynamicCreativesTextDTOS: {}, mediaType: 0 })
|
|
const [addelivery, setAddelivery] = useState<PULLIN.AddeliveryProps>({ adgroups: {}, targeting: [], dynamic: {}, dynamicMaterialDTos: {}, dynamicCreativesTextDTOS: {}, mediaType: 0 })
|
|
@@ -31,26 +32,39 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
const [tableData, setTableData] = useState<any>({})
|
|
const [tableData, setTableData] = useState<any>({})
|
|
const [activeKey, setActiveKey] = useState<string>()
|
|
const [activeKey, setActiveKey] = useState<string>()
|
|
const [dynamicCount, setDynamicCount] = useState<number>(0)
|
|
const [dynamicCount, setDynamicCount] = useState<number>(0)
|
|
|
|
+ const [adData, setAdData] = useState<any[]>(selectData)
|
|
|
|
|
|
const createDynamicTask = useAjax((params) => createDynamicTaskApi(params))
|
|
const createDynamicTask = useAjax((params) => createDynamicTaskApi(params))
|
|
/****************************************/
|
|
/****************************************/
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
- if (adData?.length > 0) {
|
|
|
|
- const { siteSet, marketingCarrierType, marketingGoal, marketingTargetType, sceneSpec, automaticSiteEnabled } = adData[0]
|
|
|
|
|
|
+ if (tactics) {
|
|
|
|
+ const {
|
|
|
|
+ adData,
|
|
|
|
+ addelivery,
|
|
|
|
+ accountCreateLogs,
|
|
|
|
+ materialData,
|
|
|
|
+ textData
|
|
|
|
+ } = JSON.parse(tactics.strategyValue)
|
|
|
|
+ setAccountCreateLogs(accountCreateLogs)
|
|
|
|
+ setAddelivery(addelivery)
|
|
|
|
+ setAdData(adData)
|
|
|
|
+ setMaterialData(materialData)
|
|
|
|
+ setTextData(textData)
|
|
|
|
+ } else if (selectData?.length > 0) {
|
|
|
|
+ const { siteSet, marketingCarrierType, marketingGoal, marketingTargetType, sceneSpec, automaticSiteEnabled } = selectData[0]
|
|
setAddelivery({ ...addelivery, adgroups: { marketingGoal, marketingCarrierType, siteSet, automaticSiteEnabled, sceneSpec, marketingAssetOuterSpec: { marketingTargetType } } })
|
|
setAddelivery({ ...addelivery, adgroups: { marketingGoal, marketingCarrierType, siteSet, automaticSiteEnabled, sceneSpec, marketingAssetOuterSpec: { marketingTargetType } } })
|
|
- let AccountSet = new Set(adData.map(item => item.accountId))
|
|
|
|
|
|
+ let AccountSet = new Set(selectData.map(item => item.accountId))
|
|
setAccountCreateLogs([...AccountSet].map(accountId => ({ accountId })))
|
|
setAccountCreateLogs([...AccountSet].map(accountId => ({ accountId })))
|
|
}
|
|
}
|
|
- }, [adData])
|
|
|
|
|
|
+ }, [selectData, tactics])
|
|
|
|
|
|
const clearData = () => {
|
|
const clearData = () => {
|
|
setTableData([])
|
|
setTableData([])
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 预览
|
|
const preview = () => {
|
|
const preview = () => {
|
|
- console.log('addelivery------>', addelivery)
|
|
|
|
- console.log('accountCreateLogs------>', accountCreateLogs)
|
|
|
|
if (accountCreateLogs?.length === 0) {
|
|
if (accountCreateLogs?.length === 0) {
|
|
message.error('请先选择媒体账户')
|
|
message.error('请先选择媒体账户')
|
|
return
|
|
return
|
|
@@ -115,15 +129,12 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
// 创意组平均分配到广告逻辑
|
|
// 创意组平均分配到广告逻辑
|
|
let averageAdDynamicList: any[] = []
|
|
let averageAdDynamicList: any[] = []
|
|
if (mediaType === 1 && newDynamicGroup.length) {
|
|
if (mediaType === 1 && newDynamicGroup.length) {
|
|
- let adLength = 0
|
|
|
|
- accountCreateLogs.forEach(item => {
|
|
|
|
- adLength = adData.length
|
|
|
|
- if (adLength > dynamicGroupLength) {
|
|
|
|
- message.error(`创意组分配规则选择创意组平均分配到广告时,创意组总数必须大于等于广告总数。当前创意组数量:${dynamicGroupLength},广告数量:${adLength}`)
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- averageAdDynamicList = distributeArray(newDynamicGroup, adLength)
|
|
|
|
- })
|
|
|
|
|
|
+ let adLength = adData.length
|
|
|
|
+ if (adLength > dynamicGroupLength) {
|
|
|
|
+ message.error(`创意组分配规则选择创意组平均分配到广告时,创意组总数必须大于等于广告总数。当前创意组数量:${dynamicGroupLength},广告数量:${adLength}`)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ averageAdDynamicList = distributeArray(newDynamicGroup, adLength)
|
|
}
|
|
}
|
|
|
|
|
|
adData.forEach((ad, index) => {
|
|
adData.forEach((ad, index) => {
|
|
@@ -200,6 +211,7 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
setTableData(newTableData)
|
|
setTableData(newTableData)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 提交
|
|
const onSubmit = () => {
|
|
const onSubmit = () => {
|
|
const { dynamic, dynamicMaterialDTos, dynamicCreativesTextDTOS, mediaType } = addelivery
|
|
const { dynamic, dynamicMaterialDTos, dynamicCreativesTextDTOS, mediaType } = addelivery
|
|
|
|
|
|
@@ -290,7 +302,6 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
dynamicMaterialDTOS,
|
|
dynamicMaterialDTOS,
|
|
accountIdParamDTOMap
|
|
accountIdParamDTOMap
|
|
}
|
|
}
|
|
- console.log('----->', params)
|
|
|
|
createDynamicTask.run(params).then(res => {
|
|
createDynamicTask.run(params).then(res => {
|
|
if (res) {
|
|
if (res) {
|
|
message.success('创建任务提交成功')
|
|
message.success('创建任务提交成功')
|
|
@@ -304,7 +315,7 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
visible={visible}
|
|
visible={visible}
|
|
width={1500}
|
|
width={1500}
|
|
onClose={onClose}
|
|
onClose={onClose}
|
|
- bodyStyle={{ backgroundColor: '#f1f4fc', padding: 10 }}
|
|
|
|
|
|
+ bodyStyle={{ backgroundColor: '#f1f4fc', padding: '0 10px 10px' }}
|
|
>
|
|
>
|
|
<Space direction="vertical" style={{ width: '100%' }}>
|
|
<Space direction="vertical" style={{ width: '100%' }}>
|
|
<Spin spinning={false}>
|
|
<Spin spinning={false}>
|
|
@@ -362,6 +373,21 @@ const AddDynamic: React.FC<PULLIN.NewAddDynamic> = ({ visible, onChange, onClose
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<Space className={style.bts} wrap>
|
|
<Space className={style.bts} wrap>
|
|
|
|
+ <TacticsS strategyValue={{
|
|
|
|
+ adData: adData.map(item => {
|
|
|
|
+ const { accountId, adgroupName, adgroupId, siteSet, marketingCarrierType, marketingGoal, marketingTargetType, sceneSpec, automaticSiteEnabled } = item
|
|
|
|
+ return {
|
|
|
|
+ siteSet, marketingCarrierType, marketingGoal, marketingTargetType, sceneSpec, automaticSiteEnabled,
|
|
|
|
+ accountId,
|
|
|
|
+ adgroupId,
|
|
|
|
+ adgroupName
|
|
|
|
+ }
|
|
|
|
+ }),
|
|
|
|
+ addelivery,
|
|
|
|
+ accountCreateLogs,
|
|
|
|
+ materialData,
|
|
|
|
+ textData
|
|
|
|
+ }} />
|
|
<Button type='primary' onClick={preview}><SearchOutlined />预览广告</Button>
|
|
<Button type='primary' onClick={preview}><SearchOutlined />预览广告</Button>
|
|
</Space>
|
|
</Space>
|
|
|
|
|