import { useAjax } from "@/Hook/useAjax" import { getCrowdPackApi, sysCrowdPackApi } from "@/services/launchAdq/createAd" import { Button, Checkbox, Input, message, Modal, Space, Switch, Tooltip } from "antd" import React, { useEffect, useState } from "react" import style from '../goodsModal/index.less' import columns from "../crowdPackModal/tableConfig" import { CheckOutlined, QuestionCircleOutlined, SyncOutlined } from "@ant-design/icons" import Tables from "@/components/Tables" /** * 自动扩量设置 * @returns */ interface Props { visible?: boolean, onClose?: () => void, onChange?: (data: any, expandData: { expandEnabled: boolean, expandTargeting: string[] }) => void, data: any, sysTargeting: any, expandData?: { expandEnabled: boolean, expandTargeting: string[] } } const ExpandModal: React.FC = (props) => { /******************************/ const { visible, onClose, data: data1, onChange, sysTargeting, expandData } = props const [data, setData] = useState(data1) const [tableData, setTableData] = useState([])//table数据 const [selectAdz, setSelectAdz] = useState(1) // 选择账户 const [name, setName] = useState('') const [disabledList, setDisabledList] = useState([true, true, true, true]) const [queryForm, setQueryForm] = useState<{ expandEnabled: boolean, expandTargeting: string[] }>(expandData || { expandEnabled: false, expandTargeting: [] }) const getCrowdPack = useAjax((params) => getCrowdPackApi(params)) const sysCrowdPack = useAjax((params) => sysCrowdPackApi(params)) /******************************/ useEffect(() => { if (sysTargeting && sysTargeting?.targeting) { let newDisabledList: boolean[] = [true, true, true, true] Object.keys(sysTargeting?.targeting)?.forEach((item: any) => { switch (item) { case 'geoLocation': // 地域 if (sysTargeting?.targeting[item]?.regions && sysTargeting?.targeting[item]?.regions?.length > 0) { newDisabledList[0] = false } break case 'age': newDisabledList[1] = false break case 'gender': newDisabledList[2] = false break case 'education': newDisabledList[3] = false break } }) setDisabledList(newDisabledList) } }, [sysTargeting]) useEffect(() => { // customAudienceList?: any, excludedCustomAudienceList?: any if (data?.length > 0) { getList([data[selectAdz - 1].adAccountId]) } else { setTableData([]) } }, [selectAdz]) // 同步种子人群 const synGoodsList = () => { sysCrowdPack.run(data?.map((item: { adAccountId: number }) => item?.adAccountId)).then(res => { getList([data[selectAdz - 1].adAccountId]) }) } // 获取人群包列表 const getList = (accountIds: number[]) => { getCrowdPack.run({ accountIds, source: 'ADVERTISER_OWN_DATA' }).then(res => { if (res && Object.keys(res)?.indexOf(accountIds[0].toString()) !== -1) { setTableData(res[accountIds[0]]?.map((item: { audienceId: string }) => ({ ...item, id: item.audienceId }))) } else { setTableData([]) } }) } const handleOk = () => { onChange && onChange(data, queryForm) } /** 表格选折 */ const onChangeTable = (selectedRowKeys: React.Key[], selectedRows: any[]) => { if (selectedRows?.length > 10) { message.error('扩量种子人群最多选择10个') return } let newData = JSON.parse(JSON.stringify(data)) newData[selectAdz - 1]['coldStartAudienceList'] = selectedRows setData([...newData]) } /** 设置选中广告主 */ const handleSelectAdz = (value: number, item: any) => { if (value === selectAdz) { return } setSelectAdz(value) } /** 一键设置 */ const setOnekey = () => { let expandNames: string[] = data[selectAdz - 1]['coldStartAudienceList']?.map((item: { name: string }) => item.name) let newData = JSON.parse(JSON.stringify(data)) const hide = message.loading(`正在设置...`, 0, () => { message.success('设置成功'); }); getCrowdPack.run({ accountIds: newData?.filter((item: { adAccountId: number }) => item.adAccountId !== data[selectAdz - 1].adAccountId)?.map((item: { adAccountId: number }) => item?.adAccountId), source: 'ADVERTISER_OWN_DATA' }).then(res => { if (res && typeof res === 'object') { Object.keys(res).forEach((key: string) => { let values = expandNames.map(name => { let value = res[key]?.find((item: { name: string }) => item.name === name) if (value) { return { ...value, id: value.audienceId } } return undefined }).filter(item => item) if (values.length > 0) { newData = newData.map((item: { adAccountId: string }) => { if (item.adAccountId === key) { return { ...item, coldStartAudienceList: values } } return item }) } }) setData(newData) } message.success('设置完成'); hide() }) } return 自动扩量 } visible={visible} onCancel={() => { onClose && onClose() }} onOk={handleOk} width={1100} className={style.SelectPackage} bodyStyle={{ padding: '0 10px 0 10px' }} >
自动扩量: { setQueryForm({ ...queryForm, expandEnabled: e, expandTargeting: [] }); if (!e) { let newData = JSON.parse(JSON.stringify(data)) newData = newData?.map((item: { coldStartAudienceList: any }) => { return { ...item, coldStartAudienceList: [] } }) setData([...newData]) } }} checked={queryForm.expandEnabled} checkedChildren="开启" unCheckedChildren="关闭" /> {queryForm.expandEnabled && <> 不可突破定向: { setQueryForm({ ...queryForm, expandTargeting: e as string[] }) }} value={queryForm.expandTargeting} > 地域 年龄 性别 学历 扩量种子人群(选填): }
{queryForm.expandEnabled &&

媒体账户

{data?.map((item: { adAccountId: number, id: number }, index: number) => (
{ handleSelectAdz(index + 1, item) }} className={`${style.accItem} ${selectAdz === index + 1 && style.select} `}> {item?.adAccountId} {data[index]['coldStartAudienceList']?.length > 0 && }
))}
setName(e.target.value)} /> {data?.length > 1 && } name ? item.name.indexOf(name) !== -1 : true)} size="small" loading={getCrowdPack?.loading} scroll={{ y: 300 }} bordered defaultPageSize={100} rowSelection={{ type: 'checkbox', selectedRowKeys: data[selectAdz - 1]['coldStartAudienceList']?.map((item: any) => item?.id?.toString()), onChange: onChangeTable, getCheckboxProps: (record: any) => ({ id: record.id, }) }} />
}
} export default React.memo(ExpandModal)