ソースを参照

Merge branch 'develop' of http://git.zanxiangnet.com/wjx/ad-manage

wjx 2 年 前
コミット
1704cafff6

+ 6 - 1
src/pages/launchSystemNew/components/customerServiceModal/index.tsx

@@ -22,7 +22,7 @@ const CustomerServiceModal: React.FC<Props> = (props) => {
     const [tableData, setTableData] = useState<any[]>([])//table数据
     const [selectAdz, setSelectAdz] = useState<number>(1)   // 选择广告主
     const [selectCrop, setSelectCrop] = useState<number>(1)   // 选择按钮
-    const [data, setData] = useState<any>(data1)
+    const [data, setData] = useState<any>(JSON.parse(JSON.stringify(data1)))
     const [visible, setVisible] = useState<boolean>(false)
     const [sysVisible, setSysVisible] = useState<boolean>(false)
     const [corpId, setCorpId] = useState<string>('')
@@ -32,6 +32,10 @@ const CustomerServiceModal: React.FC<Props> = (props) => {
     const sysCropWechat = useAjax((params) => sysCropWechatApi(params))
     /************************/
 
+    useEffect(() => {
+        setData(data1)
+    }, [data1])
+
     /** 未配置账户获取 */
     useEffect(() => {
         setNotConfigured(() => data.filter((item: { data: { cropList: any[] }[] }) => item?.data?.some((item: { cropList: any[] }) => item?.cropList?.length === 0)))
@@ -117,6 +121,7 @@ const CustomerServiceModal: React.FC<Props> = (props) => {
                 </Tooltip> : <Button type="primary" onClick={handleOk}>确定</Button>}
             </Space>}
             width={1100}
+            onCancel={() => setVisible(false)}
             className={style.SelectPackage}
             bodyStyle={{ padding: '0 10px 0 10px' }}
         >

+ 1 - 1
src/pages/launchSystemNew/launchManage/createAd/creative/index.tsx

@@ -81,7 +81,7 @@ function Creative(props: Props) {
                         return <Tabs.TabPane key={index} tab={'创意' + (index + 1)}>
                             <Spin spinning={getSysAdcreative.loading}>
                                 <div className={style.centerContent}>
-                                    {item.sysAdcreative && <AdcreativeCol data={item.sysAdcreative} />}
+                                    {item?.sysAdcreative && <AdcreativeCol data={item.sysAdcreative} />}
                                 </div>
                             </Spin>
                         </Tabs.TabPane >

+ 66 - 20
src/pages/launchSystemNew/launchManage/createAd/index.tsx

@@ -27,6 +27,7 @@ import AddGroup from '../../components/addGroup'
 import CustomerServiceModal from "../../components/customerServiceModal"
 import { getTaskDetailsApi } from "@/services/launchAdq/taskList"
 import CreativeCL from "./creativeCL"
+import { groupBy } from "@/utils/utils"
 
 const CreateAd: React.FC = () => {
 
@@ -87,33 +88,76 @@ const CreateAd: React.FC = () => {
         if (taskId) {
             getTaskDetails.run(taskId).then(res => {
                 console.log('res----->', res)
+                setLaunchMode(1)
                 const { adCreateLogs, campaignType, promotedObjectType, speedMode, sysAdgroup, sysAdgroupId, sysTargeting, sysTargetingId } = res
-                setAccountCreateLogs(adCreateLogs?.map((item: any) => {
+                let adCreateLogsData = adCreateLogs?.map((item: any) => {
+                    return {
+                        adAccountId: item?.accountId,
+                        id: item?.adAccountId,
+                        userActionSetsList: item?.userActionSetList?.map((item: any) => ({ ...item, id: item?.userActionSetId })),
+                        productList: item?.product ? [{ ...item?.product, productCatalog: item?.productCatalog, id: Number(item?.product?.productOuterId?.replace(/\D/ig, '')) }] : undefined,
+                        coldStartAudienceList: item?.coldStartAudienceList?.map((item: any) => ({ ...item, id: item.audienceId }))
+                        // pageList: [item.page]
+                    }
+                }).filter((item: any, index: number, self: any) => self.findIndex((i: any) => i.id == item.id) === index)
 
-                    return { adAccountId: item?.accountId, id: item?.adAccountId }
-                }))
-                let taskMediaMaps = adCreateLogs?.map((item: any) => {
+                setAccountCreateLogs(adCreateLogsData)
+                const sorted = groupBy(adCreateLogs, (item) => [item.sysAdcreativeId])
+                let taskMediaMaps = sorted[0]?.map((item: any) => {
                     let pageElementsSpecList = item?.sysPage?.pageSpecsList[0]?.pageElementsSpecList // 内容区
                     let globalSpec = item?.sysPage?.globalSpec  // 悬浮组件
                     /** 处理客服 */
                     let cropUserGroupMap: any[] = []
-                    // if ((pageElementsSpecList as any[])?.some((item: { elementType: string }) => item?.elementType === 'ENTERPRISE_WX') || (globalSpec?.globalElementsSpecList?.length > 0 && globalSpec?.globalElementsSpecList?.some((item: { floatButtonSpec: { elementType: string } }) => item?.floatButtonSpec?.elementType === 'ENTERPRISE_WX'))) {
-                    //     let groupList: { type: number, name: string, cropList: any[], cropId?: number, groupId?: number }[] = [];
-                    //     (pageElementsSpecList as any[])?.forEach((item: { elementType: string, enterpriseWxSpec: { btnTitle: string } }) => {
-                    //         if (item?.elementType === 'ENTERPRISE_WX') {
-                    //             groupList.push({ type: 1, name: '联系商家', cropList: [] }) // item.enterpriseWxSpec.btnTitle
-                    //         }
-                    //     })
-                    //     if ((globalSpec?.globalElementsSpecList?.length > 0 && globalSpec?.globalElementsSpecList)) {
-                    //         groupList.push({ type: 2, name: '悬浮组件', cropList: [] })
-                    //     }
-                    //     cropUserGroupMap = adCreateLogs?.map((item: any) => ({ adAccountId: item.accountId, id: item.adAccountId, data: groupList }))
-                    // }
-                    return { sysAdcreative: item?.sysAdcreative, sysPageId: item?.sysPageId, cropUserGroupMap }
+                    if ((pageElementsSpecList as any[])?.some((item: { elementType: string }) => item?.elementType === 'ENTERPRISE_WX') || (globalSpec?.globalElementsSpecList?.length > 0 && globalSpec?.globalElementsSpecList?.some((item: { floatButtonSpec: { elementType: string } }) => item?.floatButtonSpec?.elementType === 'ENTERPRISE_WX'))) {
+                        let groupList: { type: number, name: string, cropList: any[], cropId?: number, groupId?: number }[] = [];
+                        (pageElementsSpecList as any[])?.forEach((item: { elementType: string, enterpriseWxSpec: { btnTitle: string } }) => {
+                            if (item?.elementType === 'ENTERPRISE_WX') {
+                                groupList.push({ type: 1, name: '联系商家', cropList: [] }) // item.enterpriseWxSpec.btnTitle
+                            }
+                        })
+                        if ((globalSpec?.globalElementsSpecList?.length > 0 && globalSpec?.globalElementsSpecList)) {
+                            groupList.push({ type: 2, name: '悬浮组件', cropList: [] })
+                        }
+                        cropUserGroupMap = sorted[0]?.map((item: any) => {
+                            let corpUserGroup1s = item?.corpUserGroup1s
+                            let corpUserGroup2s = item?.corpUserGroup2s
+                            return {
+                                adAccountId: item.accountId, id: item.adAccountId, data: groupList.map((crop: any, index: number) => {
+                                    return { ...crop, cropList: crop.type === 1 ? corpUserGroup1s[index] ? [{ ...corpUserGroup1s[index], id: corpUserGroup1s[index].groupId }] : [] : corpUserGroup2s[0] ? [{ ...corpUserGroup2s[0], id: corpUserGroup2s[0].groupId }] : []}
+                                })
+                            }
+
+                        })
+                    }
+                    let accountPageIdMap: any = {}
+                    adCreateLogs?.forEach((item: any) => {
+                        if (item?.pageId) {
+                            accountPageIdMap[item.accountId] = item?.pageId
+                        }
+                    })
+                    return { sysAdcreative: item?.sysAdcreative, sysPageId: item?.sysPageId, cropUserGroupMap, accountPageIdMap }
+                })
+
+                /** 云端落地页处理 */
+                let pageList = sorted?.map((item: any[]) => {
+                    if (item.some((item1: { sysPageId: number }) => item1.sysPageId)) {
+                        return item[0].sysPage
+                    } else {
+                        return null
+                    }
                 })
-                let pageList = adCreateLogs?.map((item: any) => {
-                    return item?.sysPage || null
+                let adqPageList = sorted?.map((item: any[]) => {
+                    if (item.some((item1: { pageId: number }) => item1.pageId)) {
+                        return item.map((item1: any) => ({
+                            pageList: [{ ...item1.page, id: item1.page.pageId }],
+                            adAccountId: item1?.accountId,
+                            id: item1?.adAccountId,
+                        }))
+                    } else {
+                        return null
+                    }
                 })
+
                 setQueryForm({
                     ...queryForm,
                     campaignType,
@@ -129,8 +173,10 @@ const CreateAd: React.FC = () => {
                     expandTargeting: sysAdgroup?.expandTargeting || [],
                     taskMediaMaps: taskMediaMaps || [],
                     pageList,
+                    adqPageList
                 })
             })
+            sessionStorage.removeItem('TASKID')
         } else {
             let adqAdData = localStorage.getItem('ADQAD')
             if (adqAdData) {
@@ -627,7 +673,7 @@ const CreateAd: React.FC = () => {
                         value={accountCreateLogs?.map((item: { id: number }) => item?.id)}
                         onChange={(e, option) => {
                             console.log(option)
-                            setQueryForm({ ...queryForm, adqPageList: [], pageList: [], taskMediaMaps: queryForm?.taskMediaMaps?.map((item: { sysPageId: number }) => ({ ...item, sysPageId: '', accountPageIdMap: {} })) })
+                            setQueryForm({ ...queryForm, adqPageList: [], pageList: [], taskMediaMaps: queryForm?.taskMediaMaps?.map((item: { sysPageId: number }) => ({ ...item, sysPageId: '', accountPageIdMap: {}, cropUserGroupMap: [] })) })
                             setAccountCreateLogs(option?.map((item: any) => ({ adAccountId: item?.children?.toString()?.split('——')[0], id: item?.value })))
                             clearData()
                         }}

+ 1 - 1
src/pages/launchSystemNew/launchManage/taskList/tableConfig.tsx

@@ -14,7 +14,7 @@ function tableConfig(callback: (data: any, type: 'log' | 'page' | 'copy', allDat
             render: (a: any, b: any) => {
                 return <Space>
                     <a style={{ color: '#1890ff', fontSize: 12 }} onClick={() => { callback({ taskId: b.id, campaignName: b.campaignName }, 'log', b) }}>日志</a>
-                    {/* <a style={{ color: '#1890ff', fontSize: 12 }} onClick={() => { callback({ taskId: b.id, campaignName: b.campaignName }, 'copy') }}>复制</a> */}
+                    <a style={{ color: '#1890ff', fontSize: 12 }} onClick={() => { callback({ taskId: b.id, campaignName: b.campaignName }, 'copy') }}>复制</a>
                 </Space>
             }
         },

+ 14 - 1
src/utils/utils.ts

@@ -130,4 +130,17 @@ export const copy = (str: string) => {
   document.execCommand("Copy")
   document.body.removeChild(element);
   message.success(`复制成功:${str}`)
-}
+}
+
+// 数组分组
+export const groupBy = (array: any[], f: (item: any) => any[]) => {
+  const groups = {};
+  array.forEach(function (o) { //注意这里必须是forEach 大写
+    const group = JSON.stringify(f(o));
+    groups[group] = groups[group] || [];
+    groups[group].push(o);
+  });
+  return Object.keys(groups).map(function (group) {
+    return groups[group];
+  });
+}