import Selector from "@/pages/launchSystemNew/launchManage/createAd/selector" import React, { useEffect, useState } from "react" import style from './index.less' import { Button, Col, Form, Input, message, Modal, Row, Select, Space, Table, Tag, Tooltip, Typography } from "antd"; import { CloseCircleFilled } from "@ant-design/icons"; import { getGroupListApi } from "@/services/launchAdq/subgroup"; import { useAjax } from "@/Hook/useAjax"; import { getAccountAssetsGroupListAllApi } from "@/services/adqV3/global"; import { getUserAccountListApi } from "@/services/launchAdq/adAuthorize"; import { arraysHaveSameValues, groupBy } from "@/utils/utils"; import { DELIVERY_MODE_ENUM } from "../../const"; import '../../index.less' const { Text } = Typography; interface Props { setAccountCreateLogs: React.Dispatch> accountCreateLogs: PULLIN.AccountCreateLogsProps[] setOwnerAccountId: React.Dispatch> ownerAccountId: number | undefined deliveryMode?: keyof typeof DELIVERY_MODE_ENUM mType?: string, putInType?: 'NOVEL' | 'GAME' onChange?: (value?: any[], isClear?: boolean) => void dynamicGroup?: any[] } /** * 选择账户 * @returns */ const SelectAccount: React.FC = ({ putInType, accountCreateLogs, setAccountCreateLogs, onChange, dynamicGroup, deliveryMode, mType }) => { /***********************************/ const [form] = Form.useForm() const [visible, setVisible] = useState(false) const [selectedRows, setSelectedRows] = useState([]) const [tipsVisible, setTipsVisible] = useState(false) const [loading, setLoading] = useState(false) const [queryForm, setQueryForm] = useState<{ accountIdList?: number[], adUnitTypeList?: string[], groupId?: number, remark?: string, sysGroupId?: number, pageNum: number, pageSize: number }>({ pageNum: 1, pageSize: 50 }) const getGroupList = useAjax(() => getGroupListApi()) const getAccountAssetsGroupListAll = useAjax((params) => getAccountAssetsGroupListAllApi(params)) const getUserAccountList = useAjax((params) => getUserAccountListApi(params)) /***********************************/ const onFinish = (data: any) => { let oldQueryFrom = JSON.parse(JSON.stringify(queryForm)) let params = { ...oldQueryFrom, ...data, pageNum: 1 } if (params?.accountIdList) { params.accountIdList = params?.accountIdList.split(/[,,\n\s]+/ig).filter((item: any) => item) } else { delete params?.accountIdList } setQueryForm(params) } // 判断选择的账号是否在同一个资产组,允许选择云端素材的关键 const getauthMainAccountData = (accountCreateLogs: PULLIN.AccountCreateLogsProps[]): Promise<{ authMainAccountId?: number, isSelectRemote: boolean }> => { return new Promise((resolve) => { if (accountCreateLogs?.length) { setLoading(true) getUserAccountListApi({ adUnitTypeList: putInType === 'NOVEL' ? ['NOVEL', 'NOVEL_IAA', 'SKIT_IAA'] : ['GAME', 'GAME_IAA'], pageNum: 1, pageSize: 20000, accountIdList: accountCreateLogs.map(item => item.accountId) }).then(res => { setLoading(false) console.log('ppppp', res) if (res?.data?.records?.length) { const list = accountCreateLogs.map(item => item.accountId) const selectAccountList = res.data.records.filter((item: { accountId: any }) => list.includes(item.accountId)) const groupAccount = groupBy(selectAccountList, (item) => item.groupId, true) const GrounpArray = Object.keys(groupAccount).map(function (group) { return groupAccount[group]; }) if (GrounpArray.length === 1 && !groupAccount['undefined']) { resolve({ authMainAccountId: GrounpArray?.[0]?.[0]?.authMainAccountId || GrounpArray?.[0]?.[0]?.accountId, isSelectRemote: true }) } else if (GrounpArray.length === 2 && groupAccount?.['undefined']?.length === 1) { const undefinedAccount = groupAccount?.['undefined'][0].accountId let authMainAccountId: any Object.keys(groupAccount).forEach(key => { if (key !== 'undefined') { authMainAccountId = groupAccount[key][0].authMainAccountId } }) if (undefinedAccount === authMainAccountId) { resolve({ authMainAccountId: authMainAccountId, isSelectRemote: true }) } else { resolve({ authMainAccountId: -1, isSelectRemote: false }) } } else if (groupAccount?.['undefined']?.length === 1 && groupAccount?.['undefined']?.[0]?.isGroupMainAccount) { resolve({ authMainAccountId: groupAccount?.['undefined']?.[0]?.accountId, isSelectRemote: true }) } else { resolve({ authMainAccountId: -1, isSelectRemote: false }) } } }).catch(() => { setVisible(false) resolve({ authMainAccountId: undefined, isSelectRemote: false }) }) } else { resolve({ authMainAccountId: undefined, isSelectRemote: false }) } }) } useEffect(() => { if (visible && accountCreateLogs?.length) { setSelectedRows(JSON.parse(JSON.stringify(accountCreateLogs))) } }, [accountCreateLogs, visible]) useEffect(() => { if (putInType && visible) { getUserAccountList.run({ adUnitTypeList: putInType === 'NOVEL' ? ['NOVEL', 'NOVEL_IAA', 'SKIT_IAA'] : ['GAME', 'GAME_IAA'], ...queryForm }) } }, [putInType, queryForm, visible]) useEffect(() => { if (putInType) { // 获取账户组 getGroupList.run() // 获取资产共享组 getAccountAssetsGroupListAll.run({}) } return () => { document.body.style.overflow = 'auto'; } }, [putInType]) const handleOk = (isClear: boolean) => { document.body.style.overflow = 'auto'; onChange?.(selectedRows, isClear) setSelectedRows([]) setVisible(false) setTipsVisible(false) } const handleCancel = () => { document.body.style.overflow = 'auto'; setSelectedRows([]) setVisible(false) } return
{ document.body.style.overflow = 'hidden'; setVisible(true) }} >
{(visible && selectedRows.length > 0) ? <> { setSelectedRows(selectedRows.slice(1)) }} >{selectedRows[0].accountId} {selectedRows?.length > 1 && {selectedRows?.filter((_, index) => index !== 0)?.map((item) => { setSelectedRows(selectedRows?.filter(item1 => item1.accountId !== item.accountId)) }} >{item.accountId})} } > +{selectedRows.length - 1} } : (!visible && accountCreateLogs?.length > 0) ? <> { setAccountCreateLogs(accountCreateLogs.slice(1)) }} >{accountCreateLogs[0].accountId} {accountCreateLogs?.length > 1 && {accountCreateLogs?.filter((_, index) => index !== 0)?.map((item) => { setAccountCreateLogs(accountCreateLogs?.filter(item1 => item1.accountId !== item.accountId)) }} >{item.accountId})} } > +{accountCreateLogs.length - 1} } : 请选择媒体账户}
{visible} {((visible && selectedRows.length > 0) || (!visible && accountCreateLogs?.length > 0)) && { e.stopPropagation() if (visible) { setSelectedRows([]) } else { setAccountCreateLogs([]) } }}>}
{visible &&
{/* */}
{/* */}
`总共 ${total} 账户`, total: getUserAccountList?.data?.total, showSizeChanger: true, showLessItems: true, defaultCurrent: 1, defaultPageSize: 50,//默认初始的每页条数 onChange: (page, pageSize) => { setQueryForm({ ...queryForm, pageNum: page, pageSize }) } }} loading={getUserAccountList.loading || loading} columns={[ { title: '账号', dataIndex: 'accountId', key: 'accountId', width: 80, align: 'center', render(value) { return {value} } }, { title: '企业', dataIndex: 'corporationName', key: 'corporationName', width: 180, ellipsis: true, render(value) { return {value} } }, { title: '企业标识', dataIndex: 'corporationLicence', key: 'corporationLicence', width: 150, ellipsis: true, render(value) { return {value} } }, { title: '备注', dataIndex: 'remark', key: 'remark', ellipsis: true, render(value) { return {value || '--'} } }, ]} rowSelection={{ selectedRowKeys: selectedRows.map(item => item.accountId), onSelect: (record: { accountId: number }, selected: boolean) => { if (selected) { selectedRows.push({ ...record }) setSelectedRows([...selectedRows]) } else { let newSelectAccData = selectedRows.filter((item: { accountId: number }) => item.accountId !== record.accountId) setSelectedRows([...newSelectAccData]) } }, onSelectAll: (selected: boolean, selectedRowss: { accountId: number }[], changeRows: { accountId: number }[]) => { if (selected) { let newSelectAccData = [...selectedRows] changeRows.forEach((item: { accountId: number }) => { let index = newSelectAccData.findIndex((ite: { accountId: number }) => ite.accountId === item.accountId) if (index === -1) { let data: any = { ...item } newSelectAccData.push(data) } }) setSelectedRows([...newSelectAccData]) } else { let newSelectAccData = selectedRows.filter((item: { accountId: number }) => { let index = changeRows.findIndex((ite: { accountId: number }) => ite.accountId === item.accountId) if (index !== -1) { return false } else { return true } }) setSelectedRows([...newSelectAccData]) } } }} />
} {visible &&
} {tipsVisible && 提示} open={tipsVisible} onCancel={() => { setTipsVisible(false) }} onOk={() => handleOk(true)} className="modalResetCss" okText="清空" cancelText="留下来修改账户" >选择的素材有账户组素材,但是与当前账户不匹配,是否使用当前账号清空素材?} } export default React.memo(SelectAccount)