shenwu 2 роки тому
батько
коміт
1d1ea52f98
21 змінених файлів з 401 додано та 187 видалено
  1. 6 1
      src/global.less
  2. 0 1
      src/pages/launchSystemNew/adq/adAccount/index.tsx
  3. 3 3
      src/pages/launchSystemNew/adq/index.tsx
  4. 1 1
      src/pages/launchSystemNew/components/adModal/index.tsx
  5. 1 1
      src/pages/launchSystemNew/components/creativeModal/index.tsx
  6. 11 4
      src/pages/launchSystemNew/components/creativeModal/tableConfig.tsx
  7. 1 1
      src/pages/launchSystemNew/components/targetingModal/index.tsx
  8. 14 14
      src/pages/launchSystemNew/components/targetingTooltip/index.tsx
  9. 2 1
      src/pages/launchSystemNew/launchManage/createAd/ad/modal/leadAd.tsx
  10. 1 0
      src/pages/launchSystemNew/launchManage/createAd/ad/modal/wechat.tsx
  11. 35 33
      src/pages/launchSystemNew/launchManage/createAd/adcreativeCol.tsx
  12. 12 12
      src/pages/launchSystemNew/launchManage/createAd/adgroupsCol.tsx
  13. 1 2
      src/pages/launchSystemNew/launchManage/createAd/creative/index.tsx
  14. 206 83
      src/pages/launchSystemNew/launchManage/createAd/creative/modal/index.tsx
  15. 5 6
      src/pages/launchSystemNew/launchManage/createAd/index.tsx
  16. 4 4
      src/pages/launchSystemNew/launchManage/createAd/targeting/index.tsx
  17. 1 0
      src/pages/launchSystemNew/launchManage/createAd/targeting/modal/index.tsx
  18. 5 0
      src/pages/launchSystemNew/launchManage/localAd/brand/index.tsx
  19. 49 1
      src/pages/launchSystemNew/launchManage/taskList/logTableConfig.tsx
  20. 2 2
      src/pages/launchSystemNew/launchManage/taskList/tableConfig.tsx
  21. 41 17
      src/services/launchAdq/enum.ts

+ 6 - 1
src/global.less

@@ -376,4 +376,9 @@ body {
 //   td{
 //     background-color: #fff !important;
 //   }
-// }
+// }
+.ad_form_style{
+  .ant-form-item{
+    margin-bottom: 15px;
+  }
+}

+ 0 - 1
src/pages/launchSystemNew/adq/adAccount/index.tsx

@@ -73,7 +73,6 @@ function AdAccount(props:Props) {
             total={listAjax?.data?.data?.total}
             page={listAjax?.data?.data?.current}
             pageSize={listAjax?.data?.data?.size}
-            myKey={'adgroupId'}
             leftChild={<>
                 <Row gutter={[10, 10]}>
                 </Row>

+ 3 - 3
src/pages/launchSystemNew/adq/index.tsx

@@ -70,7 +70,7 @@ function Adq() {
                     }
                     if (item?.value) {
                         obj['childrenarr'] = item?.value?.map(item => {
-                            return { key: item.accountId + '_' + item.id, label: item.accountId }
+                            return { key: item.accountId + '_' + item.id, label: item?.remark ? item.accountId + '_' + item?.remark : item.accountId }
                         })
                     }
                     useAll.push(obj)
@@ -103,7 +103,7 @@ function Adq() {
             let em: any = document.getElementById('myMenus')
             console.log(topEq)
             if (em) {
-                em.scrollTop = (52-4) * topEq
+                em.scrollTop = (52 - 4) * topEq
             }
         }
     }, [userId, userAll])
@@ -118,7 +118,7 @@ function Adq() {
                 }
 
                 } allowClear onChange={(value: any) => {
-                    if(value){
+                    if (value) {
                         setUserId(value.toString())
                     }
                 }}>

+ 1 - 1
src/pages/launchSystemNew/components/adModal/index.tsx

@@ -72,7 +72,7 @@ const AdModal: React.FC<Props> = (props) => {
             ajax={sysAdgroupsList}
             dataSource={sysAdgroupsList?.data?.records}
             loading={sysAdgroupsList?.loading}
-            scroll={{ y: 600 }}
+            scroll={{ y: 550 }}
             total={sysAdgroupsList?.data?.total}
             page={sysAdgroupsList?.data?.current}
             pageSize={sysAdgroupsList?.data?.size}

+ 1 - 1
src/pages/launchSystemNew/components/creativeModal/index.tsx

@@ -62,7 +62,7 @@ const CreativeModal: React.FC<Props> = (props) => {
             ajax={sysAdcreativeList}
             dataSource={sysAdcreativeList?.data?.data?.records}
             loading={sysAdcreativeList?.loading}
-            scroll={{ y: 400 }}
+            scroll={{ y: 550}}
             total={sysAdcreativeList?.data?.data?.total}
             page={sysAdcreativeList?.data?.data?.current}
             pageSize={sysAdcreativeList?.data?.data?.size}

+ 11 - 4
src/pages/launchSystemNew/components/creativeModal/tableConfig.tsx

@@ -1,5 +1,6 @@
-import { PageTypeEnum, PromotedObjectType } from '@/services/launchAdq/enum'
-function tableConfig():any{
+import { AdcreativeTemplateEnum, LinkPageNameTypeEnum, LinkPageTypeEnum, PageTypeEnum, PromotedObjectType } from '@/services/launchAdq/enum'
+import React from 'react'
+function tableConfig(): any {
     return [
         {
             title: 'ID',
@@ -35,10 +36,13 @@ function tableConfig():any{
             }
         },
         {
-            title: '创意形式ID',
+            title: '创意形式',
             dataIndex: 'adcreativeTemplateId',
             key: 'adcreativeTemplateId',
             align: 'center',
+            render: (a: any) => {
+                return AdcreativeTemplateEnum[a]
+            }
         },
         {
             title: '数据展示',
@@ -55,7 +59,10 @@ function tableConfig():any{
             key: 'linkNameType',
             align: 'center',
             render: (a: any, b: any) => {
-                return b.linkNameType || b.linkPageType ? '开' : '关'
+                return b.linkNameType || b.linkPageType ? <div>
+                    {b.linkNameType && <div><span style={{ color: "#5a5a5a" }}>{LinkPageNameTypeEnum[b.linkNameType]}</span></div>}
+                    {b.linkPageType && <div><span style={{ color: "#5a5a5a" }}>{LinkPageTypeEnum[b.linkPageType]}</span></div>}
+                </div> : '关'
             }
         },
         {

+ 1 - 1
src/pages/launchSystemNew/components/targetingModal/index.tsx

@@ -58,7 +58,7 @@ const TargetingModal: React.FC<Props> = (props) => {
             ajax={list}
             dataSource={list?.data?.records}
             loading={list?.loading}
-            scroll={{ y: 600 }}
+            scroll={{ y: 550 }}
             total={list?.data?.total}
             page={list?.data?.current}
             pageSize={list?.data?.size}

+ 14 - 14
src/pages/launchSystemNew/components/targetingTooltip/index.tsx

@@ -127,50 +127,50 @@ const TargetingTooltip: React.FC<Props> = (props) => {
 
     return <div className='targetingTooltip'>
         {content?.geoLocation && <div>
-            地域:<span>{(content?.location && content?.location?.length > 0) && `(${content?.location?.map((key: string) => LocationTypes[key]).toString()})`}{content?.geoLocation?.toString()}</span>
+            <strong>地域:</strong><span>{(content?.location && content?.location?.length > 0) && `(${content?.location?.map((key: string) => LocationTypes[key]).toString()})`}{content?.geoLocation?.toString()}</span>
         </div>}
         {content?.age && <div>
-            年龄:<span>{content?.age}</span>
+            <strong>年龄:</strong><span>{content?.age}</span>
         </div>}
         {content?.gender && <div>
-            性别:<span>{content?.gender === 'MALE' ? '男' : '女'}</span>
+            <strong> 性别:</strong><span>{content?.gender === 'MALE' ? '男' : '女'}</span>
         </div>}
         {(content?.education && content?.education?.length > 0) && <div>
-            学历:<span>{content?.education?.map((key: string) => EducationEnum[key]).toString()}</span>
+            <strong>学历:</strong><span>{content?.education?.map((key: string) => EducationEnum[key]).toString()}</span>
         </div>}
         {(content?.networkType && content?.networkType?.length > 0) && <div>
-            联网方式:<span>{content?.networkType?.map((key: string) => NetworkEnum[key]).toString()}</span>
+            <strong>联网方式:</strong><span>{content?.networkType?.map((key: string) => NetworkEnum[key]).toString()}</span>
         </div>}
         {(content?.devicePrice && content?.devicePrice?.length > 0) && <div>
-            手机价格:<span>{content?.devicePrice?.map((key: string) => DevicePriceEnum[key]).toString()}</span>
+           <strong> 手机价格:</strong><span>{content?.devicePrice?.map((key: string) => DevicePriceEnum[key]).toString()}</span>
         </div>}
         {(content?.userOs && content?.userOs?.length > 0) && <div>
-            手机系统:<span>{content?.userOs?.map((key: string) => UserOsEnum[key]).toString()}</span>
+            <strong>手机系统:</strong><span>{content?.userOs?.map((key: string) => UserOsEnum[key]).toString()}</span>
         </div>}
         {(content?.maritalStatus && content?.maritalStatus?.length > 0) && <div>
-            婚恋:<span>{content?.maritalStatus?.map((key: string) => MaritalStatusEnum[key]).toString()}</span>
+            <strong>婚恋:</strong><span>{content?.maritalStatus?.map((key: string) => MaritalStatusEnum[key]).toString()}</span>
         </div>}
         {content?.deviceBrandModel && <>
             {(content?.deviceBrandModel?.includedList && content?.deviceBrandModel?.includedList?.length > 0) && <div>
-                排除品牌型号:<span>{content?.deviceBrandModel?.includedList?.toString()}</span>
+                <strong>排除品牌型号:</strong><span>{content?.deviceBrandModel?.includedList?.toString()}</span>
             </div>}
             {(content?.deviceBrandModel?.excludedList && content?.deviceBrandModel?.excludedList?.length > 0) && <div>
-                品牌型号:<span>{content?.deviceBrandModel?.excludedList?.toString()}</span>
+                <strong>品牌型号:</strong><span>{content?.deviceBrandModel?.excludedList?.toString()}</span>
             </div>}
         </>}
         {content?.wechatAdBehavior && <>
             {(content?.wechatAdBehavior?.actions && content?.wechatAdBehavior?.actions?.length > 0) && <div>
-                再营销:<span>{content?.wechatAdBehavior?.actions?.map((key: string) => WechatAdBehaviorEnum[key]).toString()}</span>
+               <strong> 再营销:</strong><span>{content?.wechatAdBehavior?.actions?.map((key: string) => WechatAdBehaviorEnum[key]).toString()}</span>
             </div>}
             {(content?.wechatAdBehavior?.excludedActions && content?.wechatAdBehavior?.excludedActions?.length > 0) && <div>
-                排除营销:<span>{content?.wechatAdBehavior?.excludedActions?.map((key: string) => WechatAdBehaviorEnum[key]).toString()}</span>
+                <strong>排除营销:</strong><span>{content?.wechatAdBehavior?.excludedActions?.map((key: string) => WechatAdBehaviorEnum[key]).toString()}</span>
             </div>}
         </>}
         {content?.excludedConvertedAudience && <div>
-            排除已转化用户:<span>{ExcludedDimensionEnum[content?.excludedConvertedAudience?.excludedDimension]}{`(自定义转化行为:${OptimizationGoalEnum[content?.excludedConvertedAudience?.conversionBehaviorList[0]]})`}</span>
+            <strong>排除已转化用户:</strong><span>{ExcludedDimensionEnum[content?.excludedConvertedAudience?.excludedDimension]}{`(自定义转化行为:${OptimizationGoalEnum[content?.excludedConvertedAudience?.conversionBehaviorList[0]]})`}</span>
         </div>}
         {content?.unlimited && <div>
-            不限:<span>{!content?.geoLocation && '地域,'}{content?.unlimited}</span>
+            <strong>不限:</strong><span>{!content?.geoLocation && '地域,'}{content?.unlimited}</span>
         </div>}
     </div>
 }

+ 2 - 1
src/pages/launchSystemNew/launchManage/createAd/ad/modal/leadAd.tsx

@@ -165,6 +165,7 @@ function LeadAdModal(props: Props) {
         <Form
             form={form}
             labelCol={{ span: 5 }}
+            className='ad_form_style'
             initialValues={
                 {
                     promotedObjectType: queryForm.promotedObjectType,
@@ -350,7 +351,7 @@ function LeadAdModal(props: Props) {
                 <Input placeholder='不填默认为不限' style={{ width: 300 }} />
             </Form.Item>
             <Form.Item label={<strong>广告状态</strong>} name="configuredStatus" rules={[{ required: true, message: '请选择广告状态' }]}>
-                <Select placeholder="选择广告状态">
+                <Select placeholder="选择广告状态" style={{width:300}}>
                     {Object.keys(AdStatus).map(key => {
                         return <Select.Option value={key} key={key}>{AdStatus[key]}</Select.Option>
                     })}

+ 1 - 0
src/pages/launchSystemNew/launchManage/createAd/ad/modal/wechat.tsx

@@ -164,6 +164,7 @@ function WeChatAdModal(props: Props) {
         <Form
             form={form}
             labelCol={{ span: 5 }}
+            className='ad_form_style'
             initialValues={
                 {
                     promotedObjectType: queryForm.promotedObjectType,

+ 35 - 33
src/pages/launchSystemNew/launchManage/createAd/adcreativeCol.tsx

@@ -1,30 +1,30 @@
-import { PromotedObjectType, SiteSetEnum } from "@/services/launchAdq/enum"
+import { LinkPageNameTypeEnum, LinkPageTypeEnum, PromotedObjectType, SiteSetEnum } from "@/services/launchAdq/enum"
 import React from "react"
 import { Image, Space } from "antd"
 import { overrideCanvasHeadOptionEnum } from "./creative/modal/config"
 
 
 export const adcreativeTemplate = [
-    {adcreativeTemplateAppellation: "常规大图 1:1", adcreativeTemplateId: 311},
-    {adcreativeTemplateAppellation: "常规视频  4:3", adcreativeTemplateId: 618},
-    {adcreativeTemplateAppellation: "常规多图 1:1 三图", adcreativeTemplateId: 641},
-    {adcreativeTemplateAppellation: "常规多图 1:1 四图", adcreativeTemplateId: 642},
-    {adcreativeTemplateAppellation: "常规多图 1:1 六图", adcreativeTemplateId: 643},
-    {adcreativeTemplateAppellation: "横版视频 16:9", adcreativeTemplateId: 720},
-    {adcreativeTemplateAppellation: "竖版视频 9:16", adcreativeTemplateId: 721},
-    {adcreativeTemplateAppellation: "常规视频 750×1536", adcreativeTemplateId: 1064},
-    {adcreativeTemplateAppellation: "常规视频 16:9", adcreativeTemplateId: 1465},
-    {adcreativeTemplateAppellation: "常规视频 9:16", adcreativeTemplateId: 1480},
-    {adcreativeTemplateAppellation: "卡片广告 横版大图 16:9", adcreativeTemplateId: 1707},
-    {adcreativeTemplateAppellation: "卡片广告 横版视频 16:9", adcreativeTemplateId: 1708},
-    {adcreativeTemplateAppellation: "破框形态 视频合约广告", adcreativeTemplateId: 1885},
-    {adcreativeTemplateAppellation: "横版大图 16:9", adcreativeTemplateId: 711},
-    {adcreativeTemplateAppellation: "竖版大图 9:16", adcreativeTemplateId: 712},
-    {adcreativeTemplateAppellation: "横版视频 16:9", adcreativeTemplateId: 720},
-    {adcreativeTemplateAppellation: "竖版视频 9:16", adcreativeTemplateId: 721},
-    {adcreativeTemplateAppellation: "激励浏览广告", adcreativeTemplateId: 910},
-    {adcreativeTemplateAppellation: "Banner图片 20:7", adcreativeTemplateId: 925},
-    {adcreativeTemplateAppellation: "出框形态 视频合约广告", adcreativeTemplateId: 1945}
+    { adcreativeTemplateAppellation: "常规大图 1:1", adcreativeTemplateId: 311 },
+    { adcreativeTemplateAppellation: "常规视频  4:3", adcreativeTemplateId: 618 },
+    { adcreativeTemplateAppellation: "常规多图 1:1 三图", adcreativeTemplateId: 641 },
+    { adcreativeTemplateAppellation: "常规多图 1:1 四图", adcreativeTemplateId: 642 },
+    { adcreativeTemplateAppellation: "常规多图 1:1 六图", adcreativeTemplateId: 643 },
+    { adcreativeTemplateAppellation: "横版视频 16:9", adcreativeTemplateId: 720 },
+    { adcreativeTemplateAppellation: "竖版视频 9:16", adcreativeTemplateId: 721 },
+    { adcreativeTemplateAppellation: "常规视频 750×1536", adcreativeTemplateId: 1064 },
+    { adcreativeTemplateAppellation: "常规视频 16:9", adcreativeTemplateId: 1465 },
+    { adcreativeTemplateAppellation: "常规视频 9:16", adcreativeTemplateId: 1480 },
+    { adcreativeTemplateAppellation: "卡片广告 横版大图 16:9", adcreativeTemplateId: 1707 },
+    { adcreativeTemplateAppellation: "卡片广告 横版视频 16:9", adcreativeTemplateId: 1708 },
+    { adcreativeTemplateAppellation: "破框形态 视频合约广告", adcreativeTemplateId: 1885 },
+    { adcreativeTemplateAppellation: "横版大图 16:9", adcreativeTemplateId: 711 },
+    { adcreativeTemplateAppellation: "竖版大图 9:16", adcreativeTemplateId: 712 },
+    { adcreativeTemplateAppellation: "横版视频 16:9", adcreativeTemplateId: 720 },
+    { adcreativeTemplateAppellation: "竖版视频 9:16", adcreativeTemplateId: 721 },
+    { adcreativeTemplateAppellation: "激励浏览广告", adcreativeTemplateId: 910 },
+    { adcreativeTemplateAppellation: "Banner图片 20:7", adcreativeTemplateId: 925 },
+    { adcreativeTemplateAppellation: "出框形态 视频合约广告", adcreativeTemplateId: 1945 }
 ]
 
 /**
@@ -37,25 +37,27 @@ const AdcreativeCol: React.FC<Props> = (props) => {
 
     /***************************/
     const { data } = props
-    const { adcreativeName, promotedObjectType, siteSet, adcreativeTemplateId, adcreativeElements, overrideCanvasHeadOption} = data
+    const { adcreativeName, promotedObjectType, siteSet, adcreativeTemplateId, adcreativeElements, overrideCanvasHeadOption, linkNameType, linkPageType } = data
     /***************************/
 
     return <>
-        <div>创意名称: <span>{adcreativeName}</span></div>
-        <div>推广目标: <span>{PromotedObjectType[promotedObjectType]}</span></div>
-        <div>广告版位: <span>{siteSet?.map((item: string) => SiteSetEnum[item]).toString()}</span></div>
-        <div>创意形式: <span>{adcreativeTemplate?.find((item: any) => item?.adcreativeTemplateId === adcreativeTemplateId)?.adcreativeTemplateAppellation || ''}</span></div>
-        {adcreativeElements?.description && <div>创意文案: <span>{adcreativeElements?.description}</span></div>}
-        {adcreativeElements?.title && <div>文案: <span>{adcreativeElements?.title}</span></div>}
-        {adcreativeElements?.imageUrl && <div style={{ display: 'flex', alignItems: 'flex-start',marginBottom:4 }}>创意素材: <Image width={80} src={adcreativeElements?.imageUrl} style={{ borderRadius: 8, overflow: 'hidden', marginLeft: 5 }} /></div>}
-        {adcreativeElements?.imageUrlList && <div style={{ display: 'flex', alignItems: 'flex-start', flexWrap: 'wrap' }}><span style={{ marginRight: 4 }}>创意素材:</span> <Image.PreviewGroup>
+        <div><strong>创意名称:</strong><span style={{color:"#5a5a5a"}}>{adcreativeName}</span></div>
+        <div><strong>推广目标:</strong> <span style={{color:"#5a5a5a"}}>{PromotedObjectType[promotedObjectType]}</span></div>
+        <div><strong>广告版位:</strong> <span style={{color:"#5a5a5a"}}>{siteSet?.map((item: string) => SiteSetEnum[item]).toString()}</span></div>
+        <div><strong>创意形式: </strong><span style={{color:"#5a5a5a"}}>{adcreativeTemplate?.find((item: any) => item?.adcreativeTemplateId === adcreativeTemplateId)?.adcreativeTemplateAppellation || ''}</span></div>
+        {adcreativeElements?.description && <div><strong>创意文案:</strong> <span style={{color:"#5a5a5a"}}>{adcreativeElements?.description}</span></div>}
+        {adcreativeElements?.title && <div><strong>文案:</strong> <span style={{color:"#5a5a5a"}}>{adcreativeElements?.title}</span></div>}
+        {linkNameType && <div><strong>按钮文案:</strong> <span style={{color:"#5a5a5a"}}>{LinkPageNameTypeEnum[linkNameType]}</span></div>}
+        {linkPageType && <div><strong>跳转落地页:</strong> <span style={{color:"#5a5a5a"}}>{LinkPageTypeEnum[linkPageType]}</span></div>}
+        {adcreativeElements?.imageUrl && <div style={{ display: 'flex', alignItems: 'flex-start', marginBottom: 4 }}><strong>创意素材:</strong> <Image width={80} src={adcreativeElements?.imageUrl} style={{ borderRadius: 8, overflow: 'hidden', marginLeft: 5 }} /></div>}
+        {adcreativeElements?.imageUrlList && <div style={{ display: 'flex', alignItems: 'flex-start', flexWrap: 'wrap' }}><span style={{ marginRight: 4 }}><strong>创意素材:</strong></span> <Image.PreviewGroup>
             <Space wrap>
                 {adcreativeElements?.imageUrlList?.map((url: string, index: number) => <Image width={50} src={url} style={{ borderRadius: 4 }} key={'TOP_SLIDER' + index} />)}
             </Space>
         </Image.PreviewGroup></div>}
-        {overrideCanvasHeadOption && <div>素材选项: <span>{overrideCanvasHeadOptionEnum[overrideCanvasHeadOption]}</span></div> }
-        {adcreativeElements?.shortVideoStruct?.shortVideo1Url && <div style={{ display: 'flex', alignItems: 'flex-start' }}><span style={{ marginRight: 4 }}>创意素材:</span> <video src={adcreativeElements?.shortVideoStruct?.shortVideo1Url} width={130} controls></video></div>}
-        {adcreativeElements?.videoUrl && <div style={{ display: 'flex', alignItems: 'flex-start' }}><span style={{ marginRight: 4 }}>创意素材:</span> <video src={adcreativeElements?.videoUrl} width={130} controls></video></div>}
+        {overrideCanvasHeadOption && <div><strong>素材选项:</strong> <span style={{color:"#5a5a5a"}}>{overrideCanvasHeadOptionEnum[overrideCanvasHeadOption]}</span></div>}
+        {adcreativeElements?.shortVideoStruct?.shortVideo1Url && <div style={{ display: 'flex', alignItems: 'flex-start' }}><span style={{ marginRight: 4 }}><strong>创意素材:</strong></span> <video src={adcreativeElements?.shortVideoStruct?.shortVideo1Url} width={130} controls></video></div>}
+        {adcreativeElements?.videoUrl && <div style={{ display: 'flex', alignItems: 'flex-start' }}><span style={{ marginRight: 4 }}><strong>创意素材:</strong></span> <video src={adcreativeElements?.videoUrl} width={130} controls></video></div>}
     </>
 }
 

+ 12 - 12
src/pages/launchSystemNew/launchManage/createAd/adgroupsCol.tsx

@@ -17,18 +17,18 @@ const AdgroupsCol = React.forwardRef((props: Props, ref) => {
     /*************************/
 
     return <>
-        <div>广告名称: <span>{adgroupName}</span></div>
-        <div>推广目标: <span>{PromotedObjectType[promotedObjectType]}</span></div>
-        <div>广告版位: <span>{siteSet?.map((item: string) => SiteSetEnum[item]).toString()}</span></div>
-        <div>投放日期: <span>{endDate ? beginDate + '~' + endDate : beginDate + '~' + '长期投放'}</span></div>
-        {firstDayBeginTime && <div>首日时间: <span>{firstDayBeginTime}</span></div>}
-        <div>出价方式: <span>{BidModeEnum[bidMode]}</span></div>
-        {optimizationGoal && <div>优化目标: <span>{OptimizationGoalEnum[optimizationGoal]}</span></div>}
-        <div>出价类型: <span>{smartBidType === 'SMART_BID_TYPE_CUSTOM' ? '手动出价' : '自动出价'}</span></div>
-        {bidStrategy && <div>出价策略: <span>{BidStrategyEnum[bidStrategy]}</span></div>}
-        <div>广告出价: <span>{bidAmount}{`元/${OptimizationGoalEnum[optimizationGoal] || '千次曝光'}`}</span></div>
-        <div>广告日预算: <span>{dailyBudget || '不限'}</span></div>
-        <div>广告状态: <span>{AdStatus[configuredStatus||'AD_STATUS_SUSPEND']}</span></div>
+        <div><strong>广告名称:</strong> <span style={{color:"#5a5a5a"}}>{adgroupName}</span></div>
+        <div><strong>推广目标: </strong><span style={{color:"#5a5a5a"}}>{PromotedObjectType[promotedObjectType]}</span></div>
+        <div><strong>广告版位:</strong> <span style={{color:"#5a5a5a"}}>{siteSet?.map((item: string) => SiteSetEnum[item]).toString()}</span></div>
+        <div><strong>投放日期:</strong> <span style={{color:"#5a5a5a"}}>{endDate ? beginDate + '~' + endDate : beginDate + '~' + '长期投放'}</span></div>
+        {firstDayBeginTime && <div><strong>首日时间: </strong><span style={{color:"#5a5a5a"}}>{firstDayBeginTime}</span></div>}
+        <div><strong>出价方式: </strong><span style={{color:"#5a5a5a"}}>{BidModeEnum[bidMode]}</span></div>
+        {optimizationGoal && <div><strong>优化目标:</strong> <span style={{color:"#5a5a5a"}}>{OptimizationGoalEnum[optimizationGoal]}</span></div>}
+        <div><strong>出价类型:</strong> <span style={{color:"#5a5a5a"}}>{smartBidType === 'SMART_BID_TYPE_CUSTOM' ? '手动出价' : '自动出价'}</span></div>
+        {bidStrategy && <div><strong>出价策略:</strong> <span style={{color:"#5a5a5a"}}>{BidStrategyEnum[bidStrategy]}</span></div>}
+        <div><strong>广告出价:</strong> <span style={{color:"#5a5a5a"}}>{bidAmount}{`元/${OptimizationGoalEnum[optimizationGoal] || '千次曝光'}`}</span></div>
+        <div><strong>广告日预算:</strong> <span style={{color:"#5a5a5a"}}>{dailyBudget || '不限'}</span></div>
+        <div><strong>广告状态:</strong> <span style={{color:"#5a5a5a"}}>{AdStatus[configuredStatus||'AD_STATUS_SUSPEND']}</span></div>
     </>
 })
 

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

@@ -36,7 +36,6 @@ function Creative(props: Props) {
         getSysAdcreative.run(sysAdcreativeId).then(res => {
             let arr = queryForm.taskMediaMaps || []
             let { createTime, ...params } = res
-            console.log('res=>', params)
             arr[targetKey] = { sysAdcreative: { ...params, isTemplate: false } }
             setQueryForm({ ...queryForm, sysAdcreativeId, taskMediaMaps: arr });
             setCreativeVisible(false);
@@ -71,7 +70,7 @@ function Creative(props: Props) {
     return <Col span={12} className={style.conRightBorder}>
         <div className={style.top}>创意基本信息
             {queryForm.taskMediaMaps && queryForm.taskMediaMaps?.length > 0 && <a onClick={() => {
-                setQueryForm({ ...queryForm, taskMediaMaps: [], sysAdcreativeId: undefined })
+                setQueryForm({ ...queryForm, taskMediaMaps: [], sysAdcreativeId: undefined,pageList:[],adqPageList:[] })
             }}>全部清空</a>}
         </div>
         <div className={style.center}>

+ 206 - 83
src/pages/launchSystemNew/launchManage/createAd/creative/modal/index.tsx

@@ -22,7 +22,84 @@ interface Props {
     type?: 'add' | 'look' | 'edit',//新增,查看,编辑
     dataInfo?: any
 }
-const changgui = [311, 641, 642, 643, 618, 1465, 1064, 1480, 721]
+const changgui = [
+    {
+        "id": 11401259460,
+        "app_id": 0,
+        "company_admin_user_id": 10000006600,
+        "type": 3,
+        "brand_name": "\u70ed\u95e8\u5c0f\u8bf4",
+        "description": "\u5168\u7f51\u70ed\u95e8\u5c0f\u8bf4",
+        "file_uri": "https:\/\/wxsnsencsvp.wxs.qq.com\/141\/20204\/snscosdownload\/SZ\/reserved\/6xykWLEnztJV9MqNeOQWia0nLSB26Kqnnb4PZFhdrEDUuw5CM5oIIbKBjKHreKeliaFq3HNvh2FbLIqcKDZ9EFDg?ck=df49be8f42708c0d8ac92eb56a329cac&idx=1&m=df49be8f42708c0d8ac92eb56a329cac&sha256=481be980e82dc2f5a3fe7a6b7eb5eac704289f155d8deb09dd0e0a588a194457&token=cztXnd9GyrGapkCPG2XUCdmc8GpN7o4mAVYH3Dsic0iaiaffCW6eGpdv5xykaCIP1wlxEwyhBpkgkZgJGcbLeIu6w",
+        "file_uri_local": "\/data\/chuangliang_storage\/public\/material_gdt\/images\/20220823194656-6304be30474a5.jpg",
+        "file_md5": "d41d8cd98f00b204e9800998ecf8427e",
+        "unique_key": "c410c21293f43c54e5d030fe629476de",
+        "unique_key_by_file_url": "87ab824b0e122a889792368da6e21aff",
+        "create_time": "2022-08-18 15:49:06",
+        "create_user_id": 0,
+        "update_time": "2022-08-23 19:46:56",
+        "update_user_id": 0,
+        "is_upload_cos": 0,
+        "main_user_id": 10000006600
+    },
+    {
+        "id": 10000020002,
+        "app_id": 0,
+        "company_admin_user_id": 10000006600,
+        "type": 3,
+        "brand_name": "\u542c\u4e66\u751c\u751c",
+        "description": "\u52a0\u6211\u5fae\u4fe1\u4e00\u8d77\u6536\u542c~",
+        "file_uri": "http:\/\/wxsnsencsvp.wxs.qq.com\/141\/20204\/snscosdownload\/SZ\/reserved\/6xykWLEnztKaHEvzepQhQOyFkdNy5AiceN5NcQewlDQXNspwfRjbfjwHiaxicIzfWUW0re5TN7RdPohbibvGTWOITg?ck=7dfbfec2a56571980e87501eb27308ae&idx=1&m=7dfbfec2a56571980e87501eb27308ae&sha256=aba52a73e40f79a776aefeada66975cf8d79dcad0b997edb1a81302e27028325&token=cztXnd9GyrFBiaHvxEeklKyDIYqSqTgzBbNxPhLabEiaU7bxLrh4n8RQbXibVgbrAfmMuwfMhHzd2c79Xaa0PXsYw",
+        "file_uri_local": "\/data\/chuangliang_storage\/public\/material_gdt\/images\/20220823194720-6304be484765b.jpg",
+        "file_md5": "7dfbfec2a56571980e87501eb27308ae",
+        "unique_key": "43eabfae223f0f56d0e74e11fee07a53",
+        "unique_key_by_file_url": "0060d604211ea2dfef8762c8b0ea1ccc",
+        "create_time": "2022-08-15 18:10:08",
+        "create_user_id": 0,
+        "update_time": "2022-08-23 19:47:20",
+        "update_user_id": 0,
+        "is_upload_cos": 0,
+        "main_user_id": 10000006600
+    },
+    {
+        "id": 10000020001,
+        "app_id": 0,
+        "company_admin_user_id": 10000006600,
+        "type": 3,
+        "brand_name": "\u751c\u751c\u542c\u4e66",
+        "description": "\u5feb\u6765\u4e00\u8d77\u6536\u542c\u5427~",
+        "file_uri": "http:\/\/wxsnsencsvp.wxs.qq.com\/141\/20204\/snscosdownload\/SZ\/reserved\/6xykWLEnztJ649NJWA2QNpQnO60FV3es98fD3ic1nqfE9ADTiawgEjxtT3Qia0sJgkC0Qv1VCpPGv1kXaIdJAhnsA?ck=7dfbfec2a56571980e87501eb27308ae&idx=1&m=7dfbfec2a56571980e87501eb27308ae&sha256=aba52a73e40f79a776aefeada66975cf8d79dcad0b997edb1a81302e27028325&token=6xykWLEnztL4weIvrU6UicTe88syvZWTcg2HIN6RvHKzQdwib2XpiazZwGZWUs4fy8lbJ4ItMh0ubZx22GWImZL5g",
+        "file_uri_local": "",
+        "file_md5": "7dfbfec2a56571980e87501eb27308ae",
+        "unique_key": "c71a7d54bae6974d41650f6ad670c570",
+        "unique_key_by_file_url": "f175c74d37a3e81e0cc08dd310d152de",
+        "create_time": "2022-08-15 18:10:06",
+        "create_user_id": 0,
+        "update_time": "2022-08-15 18:10:06",
+        "update_user_id": 0,
+        "is_upload_cos": 0,
+        "main_user_id": 10000006600
+    },
+    {
+        "id": 10000019780,
+        "app_id": 0,
+        "company_admin_user_id": 10000006600,
+        "type": 3,
+        "brand_name": "\u70ed\u95e8\u5c0f\u8bf4",
+        "description": "\u5168\u7f51\u8d85\u706b\u70ed\u95e8\u5c0f\u8bf4\uff01",
+        "file_uri": "https:\/\/wxsnsencsvp.wxs.qq.com\/141\/20204\/snscosdownload\/SZ\/reserved\/6xykWLEnztJhQ4jPM2vDczvxPaLYQicQkI9lYT97xbicxuktc9kiaLZB7rwbaogBc7tHGAhW5p0fHGj2Ov0sr5EXg?ck=c0cf5f032e0cfa600e27f0a8183891b3&idx=1&m=c0cf5f032e0cfa600e27f0a8183891b3&sha256=be7f5f69ba4925bde4bd70b1687bbbbf4a367d29555b562537cd73d01b64848f&token=cztXnd9GyrHQWaiafRG2RM6bqiblkVM0vsf4ZwjJvzV6Rwf32JwGu5brGOOjQNAyZfxlt066tw84lZia4Pjibwdz7w",
+        "file_uri_local": "\/data\/chuangliang_storage\/public\/material_gdt\/images\/20220815181138-62fa1bda6cea7.jpg",
+        "file_md5": "c0cf5f032e0cfa600e27f0a8183891b3",
+        "unique_key": "9af7aa2f9c40c50b5f333f4c72f8538d",
+        "unique_key_by_file_url": "affd3e3ee54a6d937d7791031bb012bf",
+        "create_time": "2022-08-08 17:36:21",
+        "create_user_id": 0,
+        "update_time": "2022-08-15 18:11:38",
+        "update_user_id": 0,
+        "is_upload_cos": 0,
+        "main_user_id": 10000006600
+    }
+]
 /**创意模板*/
 function CreativePup(props: Props) {
     let { visible, confirmLoading, PupFn, callback, type, dataInfo, queryForm } = props
@@ -160,6 +237,14 @@ function CreativePup(props: Props) {
                         newValues.adcreativeElements = { ...newValues.adcreativeElements, endPage: { ...newValues.adcreativeElements.endPage, endPageDesc: newValues.endPageDesc } }
                         delete newValues[key]
                         break;
+                    case 'brand'://品牌形象
+                        newValues.adcreativeElements = {
+                            ...newValues.adcreativeElements, brand: {
+                                brandName: newValues.brand.split('_')[0],
+                                brandImg: newValues.brand.split('_')[1]
+                            }
+                        }
+                        break;
                 }
             }
             if (!newValues.adcreativeElements) {
@@ -178,6 +263,7 @@ function CreativePup(props: Props) {
             delete newValues.adcreativeElementsType //删除创意形式
             delete newValues.dataShow //删除数据开关
             delete newValues.actionBtn //删除行动开关
+            delete newValues.brand //品牌形象
             // 假如使用了落地页顶部素材替换外部素材
             if (newValues.overrideCanvasHeadOption === 'OPTION_CANVAS_OVERRIDE_CREATIVE') {
                 console.log(adcreative_template?.adcreativeElements)
@@ -276,6 +362,7 @@ function CreativePup(props: Props) {
                                 form.setFieldsValue({ overrideCanvasHeadOption: creativeConfig[id].overrideCanvasHeadOption[0] })
                             }
                         }
+                        templateChange(res[0], ok)
                     }
                 })
             }
@@ -314,7 +401,7 @@ function CreativePup(props: Props) {
     }, [adcreative_template_list])
 
     //每次选中创意设置该展示的界面
-    useEffect(() => {
+    const templateChange = useCallback((adcreative_template, ok?: any) => {
         let states = {
             kp_show: false,
             xd_show: true,
@@ -324,13 +411,13 @@ function CreativePup(props: Props) {
         }
         let values: any = { pageType: 'PAGE_TYPE_CANVAS_WECHAT', }
         if (adcreative_template) {
-            let pageList = adcreative_template?.landingPageConfig?.supportPageTypeList
+            let pageList = adcreative_template?.landingPageConfig?.supportPageTypeList?.filter((i: { description: string | string[] }) => i.description.includes('微信原生推广页'))//当前版本只获取微信原生页,后期改进
             let pageType = pageList?.length ? pageList[0]?.pageType : null
             //数据展示组件
-            if (adcreative_template.adcreativeAttributes.some(item => item.name === 'conversion_data_type' || item.name === 'conversion_target_type')) {
+            if (adcreative_template.adcreativeAttributes.some((item: { name: string }) => item.name === 'conversion_data_type' || item.name === 'conversion_target_type')) {
                 let arr = adcreative_template.adcreativeAttributes?.filter((item: { name: string; }) => item.name === 'conversion_data_type' || item.name === 'conversion_target_type')
                 let newObj: any = {}
-                arr.forEach((item) => {
+                arr.forEach((item: { propertyDetail: { enumDetail: { enumeration: any[] } }; name: string | number }) => {
                     let arr: any[] = mySet(item.propertyDetail.enumDetail.enumeration)
                     newObj[item.name] = arr
                 })
@@ -349,16 +436,17 @@ function CreativePup(props: Props) {
                 let linkNameList = (pageList?.filter((item: { pageType: any; }) => item.pageType === pageType)[0] as any)?.supportLinkNameType?.list
                 let linkPageList = (pageList?.filter((item: { pageType: any; }) => item.pageType === pageType)[0] as any)?.supportLinkPageType?.list
                 if (linkNameList && !linkPageType) {
-                    let linkNameType = linkNameList[0]?.linkNameType
-                    let linkPageType = linkPageList[0]?.linkPageType
-                    values = { ...values, linkNameType, linkPageType, actionBtn: true }
-
+                    if (!ok) {
+                        let linkNameType = linkNameList[0]?.linkNameType
+                        let linkPageType = linkPageList?.some((i: { linkPageType: string }) => i.linkPageType === "LINK_PAGE_TYPE_CANVAS_WECHAT") ? "LINK_PAGE_TYPE_CANVAS_WECHAT" : linkPageList[0]?.linkPageType
+                        values = { ...values, linkNameType, linkPageType, actionBtn: true }
+                    }
                 } else {
                     states = { ...states, xd_show: false }
                 }
             }
             // 视频结束页 end_page
-            if (adcreative_template.adcreativeElements.some(item => item.name === 'end_page')) {
+            if (adcreative_template.adcreativeElements.some((item: { name: string }) => item.name === 'end_page')) {
                 // let endPageType =adcreative_template?.adcreativeElements?.filter(item=>item.name === 'end_page_type')[0]?.enumProperty?.enumeration
                 values = { ...values, endPageType: 'END_PAGE_AVATAR_NICKNAME_HIGHLIGHT' }
                 states = { ...states, sp_show: true }
@@ -366,7 +454,7 @@ function CreativePup(props: Props) {
             setPupState(states)
             form.setFieldsValue(values)
         }
-    }, [adcreative_template])
+    }, [pageType, linkPageType])
     // 版位改变清空数据
     useEffect(() => {
         if (imgMaterialConfig.adcreativeTemplateId && adcreativeTemplateId !== imgMaterialConfig.adcreativeTemplateId) {
@@ -416,6 +504,7 @@ function CreativePup(props: Props) {
                 adcreativeTemplateId,
             }
             getTemplate(adcreativeTemplateId, true)
+            console.log(2222)
             if ([720, 721, 618, 1708].some(n => n === adcreativeTemplateId)) {
                 obj = { ...obj, adcreativeElementsType: '视频' }
             } else {
@@ -512,6 +601,7 @@ function CreativePup(props: Props) {
             message.warning('请先选择视频文件!!!')
         }
     }, [videoMaterialConfig.list])
+    console.log('linkPageList===>', linkPageList, linkPageType)
     return <Modal
         visible={visible}
         title={type === 'add' ? '新建创意' : type === 'look' ? '创意详情' : '编辑创意'}
@@ -534,6 +624,7 @@ function CreativePup(props: Props) {
             form={form}
             labelCol={{ span: 5 }}
             labelWrap={true}
+            className='ad_form_style'
             initialValues={
                 {
                     adcreativeElementsType: '视频',
@@ -583,6 +674,35 @@ function CreativePup(props: Props) {
                         </Form.Item>
                         {/* ============================================================创意内容============================================================= */}
                         <Divider orientation='center'>创意内容</Divider>
+                        {/* =============================================================品牌形象===================================================================== */}
+                        {
+                            queryForm.promotedObjectType === 'PROMOTED_OBJECT_TYPE_LEAD_AD' && <Form.Item label={<strong>品牌形象</strong>} name='brand' rules={[{ required: true, message: '请选择一个头像及昵称跳转页,与广告创意一起展示' }]}>
+                                <Select
+                                    showSearch
+                                    placeholder="请选择一个头像及昵称跳转页,与广告创意一起展示"
+                                    optionFilterProp="children"
+                                    style={{ width: 400 }}
+                                    onChange={() => { }}
+                                    allowClear
+                                    filterOption={(input, option) => {
+                                        return (option!.value as unknown as string).toLowerCase().includes(input.toLowerCase())
+                                    }
+                                    }
+                                >
+                                    {
+                                        changgui?.map(item => {
+                                            return <Select.Option value={item.brand_name + '_' + item.file_uri} key={item.id}>
+                                                <Space>
+                                                    <img src={item.file_uri} style={{ width: 20 }} />
+                                                    <span>{item.brand_name}</span>
+                                                </Space>
+                                            </Select.Option>
+                                        })
+                                    }
+
+                                </Select>
+                            </Form.Item>
+                        }
                         {/* ============================================================素材============================================================= */}
                         {/* 优先展示视频或图片,朋友圈常规不勾选使用外部素材替换内部,隐藏此选项,后期自动将落地页顶部素材添加进入 */}
                         {((overrideCanvasHeadOption !== 'OPTION_CANVAS_OVERRIDE_CREATIVE') || siteSet.every((name: string) => name !== 'SITE_SET_MOMENTS')) && <div style={{ display: 'flex', flexFlow: 'column' }}>
@@ -781,23 +901,19 @@ function CreativePup(props: Props) {
                         }
                         {
                             actionBtn && <>
-                                <div style={{ display: 'flex' }}>
-                                    <p style={{ marginBottom: 5, marginLeft: 177 }}><strong style={{ marginRight: 20 }}>按钮文案</strong></p>
-                                    <Form.Item name='linkNameType'>
-                                        <Select style={{ width: 200 }} showSearch filterOption={(input, option) =>
-                                            (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
-                                        } allowClear>
-                                            {
-                                                linkNameList?.map((item: any) => {
-                                                    return <Select.Option value={item.linkNameType} key={item.linkNameType}>{item.description}</Select.Option>
-                                                })
-                                            }
-                                        </Select>
-                                    </Form.Item>
-                                </div>
-                                <div style={{ display: 'flex' }}>
-                                    <p style={{ marginBottom: 5, marginLeft: 177 }}><strong style={{ marginRight: 20 }}>跳转落地页</strong></p>
-                                    <Form.Item name='linkPageType'>
+                                <Form.Item name='linkNameType' label={<strong>按钮文案</strong>}>
+                                    <Select style={{ width: 200 }} showSearch filterOption={(input, option) =>
+                                        (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
+                                    } allowClear>
+                                        {
+                                            linkNameList?.map((item: any) => {
+                                                return <Select.Option value={item.linkNameType} key={item.linkNameType}>{item.description}</Select.Option>
+                                            })
+                                        }
+                                    </Select>
+                                </Form.Item>
+                                <Form.Item label={<strong>跳转落地页</strong>}>
+                                    <Form.Item name='linkPageType' noStyle>
                                         <Radio.Group style={{ display: 'flex' }}>
                                             {
                                                 linkPageList?.map((item: { linkPageType: string; description: string; }, index: number) => {
@@ -806,7 +922,24 @@ function CreativePup(props: Props) {
                                             }
                                         </Radio.Group>
                                     </Form.Item>
-                                </div>
+                                    {/* 自定义落地页地址 */}
+                                    {linkPageType === "LINK_PAGE_TYPE_DEFAULT" && <Form.Item name='pageUrl' rules={[{ required: true, message: '请输入自定义落地页地址' }]} style={{ marginTop: 10, marginBottom: 0 }}>
+                                        <Input placeholder='请输入自定义落地页地址' style={{ width: 300 }} />
+                                    </Form.Item>}
+                                    {/* 小程序 */}
+                                    {
+                                        linkPageType === "LINK_PAGE_TYPE_MINI_PROGRAM_WECHAT" && <Form.Item noStyle >
+                                            <Form.Item rules={[{ required: true, message: '请输入小程序原始ID' }]} name='miniProgramId' style={{ marginTop: 10, marginBottom: 0 }} >
+                                                <Input placeholder='请输入小程序原始ID' style={{ width: 300 }} />
+                                            </Form.Item>
+                                            <Form.Item rules={[{ required: true, message: '请输入小程序链接' }]} name='miniProgramPath' style={{ marginTop: 10, marginBottom: 0 }}>
+                                                <Input placeholder='请输入小程序链接' style={{ width: 300 }} />
+                                            </Form.Item>
+                                        </Form.Item>
+                                    }
+                                </Form.Item>
+                                {/* 落地页 */}
+
                             </>
                         }
                         {/* ============================================================数据展示============================================================= */}
@@ -815,30 +948,24 @@ function CreativePup(props: Props) {
                         </Form.Item>}
                         {
                             dataShow && <>
-                                <div style={{ display: 'flex' }}>
-                                    <p style={{ marginBottom: 5, marginLeft: 177 }}><strong style={{ marginRight: 20 }}>数据类型</strong></p>
-                                    <Form.Item name='conversionDataType'>
-                                        <Radio.Group>
-                                            {
-                                                conversionList?.conversion_data_type?.map((item: { value: string; description: string; }, index: number) => {
-                                                    return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
-                                                })
-                                            }
-                                        </Radio.Group>
-                                    </Form.Item>
-                                </div>
-                                {conversionList?.conversion_target_type && conversionDataType === 'CONVERSION_DATA_ADMETRIC' && <div style={{ display: 'flex' }}>
-                                    <p style={{ marginBottom: 5, marginLeft: 177 }}><strong style={{ marginRight: 20 }}>转化行为</strong></p>
-                                    <Form.Item name='conversionTargetType'>
-                                        <Radio.Group>
-                                            {
-                                                conversionList?.conversion_target_type?.map((item: { value: string; description: string; }, index: number) => {
-                                                    return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
-                                                })
-                                            }
-                                        </Radio.Group>
-                                    </Form.Item>
-                                </div>}
+                                <Form.Item name='conversionDataType' label={<strong>数据类型</strong>}>
+                                    <Radio.Group>
+                                        {
+                                            conversionList?.conversion_data_type?.map((item: { value: string; description: string; }, index: number) => {
+                                                return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
+                                            })
+                                        }
+                                    </Radio.Group>
+                                </Form.Item>
+                                {conversionList?.conversion_target_type && conversionDataType === 'CONVERSION_DATA_ADMETRIC' && <Form.Item name='conversionTargetType' label={<strong>转化行为</strong>}>
+                                    <Radio.Group>
+                                        {
+                                            conversionList?.conversion_target_type?.map((item: { value: string; description: string; }, index: number) => {
+                                                return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
+                                            })
+                                        }
+                                    </Radio.Group>
+                                </Form.Item>}
                             </>
                         }
                         {/* ============================================================视频结束页============================================================= */}
@@ -847,22 +974,18 @@ function CreativePup(props: Props) {
                         </Form.Item>}
                         {
                             videoOver && <>
-                                <div style={{ display: 'flex', alignItems: 'center', marginBottom: 10 }}>
-                                    <p style={{ marginBottom: 5, marginLeft: 177 }}><strong style={{ marginRight: 20 }}>视频结束页类型</strong></p>
-                                    <Form.Item name='endPageType' style={{ marginBottom: 0 }} >
-                                        <Radio.Group>
-                                            {
-                                                adcreative_template?.adcreativeElements?.filter(item => item.name === 'end_page_type')[0]?.enumProperty?.enumeration?.map((item) => {
-                                                    return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
-                                                })
-                                            }
-                                        </Radio.Group>
-                                    </Form.Item>
-                                </div>
-                                <div className={'my_endPageDesc'}>
-                                    <div style={{ display: 'flex', alignItems: 'center' }} >
-                                        <p style={{ marginBottom: 5, marginLeft: 177 }}><strong style={{ marginRight: 20 }}>结束文案</strong></p>
-                                        <Form.Item name='endPageDesc' rules={[{ required: true, pattern: RegExp("^[^\\<\\>\\&'\\\"\\/\\x08\\x09\\x0A\\x0D\\\\]{1,12}$"), message: '请输入正确的结束页文案' }]} style={{ marginBottom: 0, marginRight: 10 }}>
+                                <Form.Item name='endPageType' label={<strong>视频结束页类型</strong>} >
+                                    <Radio.Group>
+                                        {
+                                            adcreative_template?.adcreativeElements?.filter(item => item.name === 'end_page_type')[0]?.enumProperty?.enumeration?.map((item) => {
+                                                return <Radio.Button value={item.value} key={item.value}>{item.description}</Radio.Button>
+                                            })
+                                        }
+                                    </Radio.Group>
+                                </Form.Item>
+                                <div className={'my_endPageDesc'} >
+                                    <Form.Item label={<strong>结束文案</strong>}>
+                                        <Form.Item name='endPageDesc' rules={[{ required: true, pattern: RegExp("^[^\\<\\>\\&'\\\"\\/\\x08\\x09\\x0A\\x0D\\\\]{1,12}$"), message: '请输入正确的结束页文案' }]} noStyle>
                                             <Input
                                                 placeholder='请输入结束页文案'
                                                 style={{ width: 300 }}
@@ -878,20 +1001,20 @@ function CreativePup(props: Props) {
                                             />
                                         </Form.Item>
                                         <span>{endPageDesc?.length || 0}/12</span>
-                                    </div>
-                                    {
-                                        endPageDescShow && <List
-                                            loading={getTextLsit?.loading}
-                                            size="small"
-                                            style={{ maxHeight: 300, maxWidth: 300, overflowX: 'auto', marginLeft: 253 }}
-                                            bordered
-                                            dataSource={getTextLsit?.data?.returnTexts}
-                                            renderItem={(item: any) => <List.Item onClick={(e: any) => {
-                                                form.setFieldsValue({ endPageDesc: item.text })
-                                                setendPageDescnshow(false)
-                                            }}><span >{item.text}{item.tag && <span className={styles.crt}>{'CTR 高'}</span>}</span></List.Item>}
-                                        />
-                                    }
+                                        {
+                                            endPageDescShow && <List
+                                                loading={getTextLsit?.loading}
+                                                size="small"
+                                                style={{ maxHeight: 300, maxWidth: 300, overflowX: 'auto' }}
+                                                bordered
+                                                dataSource={getTextLsit?.data?.returnTexts}
+                                                renderItem={(item: any) => <List.Item onClick={(e: any) => {
+                                                    form.setFieldsValue({ endPageDesc: item.text })
+                                                    setendPageDescnshow(false)
+                                                }}><span >{item.text}{item.tag && <span className={styles.crt}>{'CTR 高'}</span>}</span></List.Item>}
+                                            />
+                                        }
+                                    </Form.Item>
                                 </div>
                             </>
                         }

+ 5 - 6
src/pages/launchSystemNew/launchManage/createAd/index.tsx

@@ -176,7 +176,7 @@ const CreateAd: React.FC = () => {
             message.error('请设置创意的基本信息')
             return
         }
-        if (!queryForm.taskMediaMaps?.every(item => item.sysPageId || item.pageId)) {
+        if (!queryForm.taskMediaMaps?.every(item => item.sysPageId || item.accountPageIdMap)) {
             message.error('请选择落地页')
             return
         }
@@ -189,13 +189,13 @@ const CreateAd: React.FC = () => {
                     sysAdGroupData: queryForm.sysAdgroup,
                     targetingData: queryForm.sysTargeting,
                     sysAdcreativeData: task.sysAdcreative,
-                    pageData: (queryForm.pageList as any)[index],
+                    pageData: (queryForm.pageList as any)[index] || (queryForm.adqPageList as any)[index]?.find((adq: { adAccountId: any })=>adq.adAccountId === item.adAccountId)?.pageList[0],
                     myId: Number(item.id + '' + index)
                 }
                 data.push(obj)
             })
         })
-        console.log('data--->', data)
+        console.log('tableData--->', data)
         setTableData(data)
     }
 
@@ -230,7 +230,7 @@ const CreateAd: React.FC = () => {
         delete params.sysTargetingId
         delete params.pageList
         delete params.adqPageList
-        console.log('params', params)
+        console.log('paramsSubmit====>', params)
         // return
         createAdBatch.run(params).then(res => {
             if (res) {
@@ -368,8 +368,7 @@ const CreateAd: React.FC = () => {
             }
         }
     }, [queryForm, targetKey])
-
-    console.log(queryForm)
+    console.log('queryForm======>',queryForm)
     return <Space direction="vertical" style={{ width: '100%' }}>
         <Card title={<div className={style.cardTitle}>配置区</div>} className={style.createAd} hoverable>
             <Space>

+ 4 - 4
src/pages/launchSystemNew/launchManage/createAd/targeting/index.tsx

@@ -77,8 +77,8 @@ function TargetIng(props: Props) {
                                 placement="right"
                             >
                                 <div className={style.popoverContent}>
-                                    <div>定向名称: <span>{queryForm?.sysTargeting?.targetingName}</span></div>
-                                    <div>定向描述: <span>{queryForm?.sysTargeting?.description || '<空>'}</span></div>
+                                    <div><strong>定向名称:</strong> <span style={{color:"#5a5a5a"}}>{queryForm?.sysTargeting?.targetingName}</span></div>
+                                    <div><strong>定向描述:</strong> <span style={{color:"#5a5a5a"}}>{queryForm?.sysTargeting?.description || '<空>'}</span></div>
                                 </div>
                             </Popover>}
                             {accountCreateLogs?.map((item: any, index: number) => {
@@ -111,8 +111,8 @@ function TargetIng(props: Props) {
                                 }
                             })}
                         </> : <>
-                            <div>定向名称: <span>{queryForm?.sysTargeting?.targetingName}</span></div>
-                            <div>定向描述: <span>{queryForm?.sysTargeting?.description || '<空>'}</span></div>
+                            <div><strong>定向名称:</strong> <span style={{color:"#5a5a5a"}}>{queryForm?.sysTargeting?.targetingName}</span></div>
+                            <div><strong>定向描述:</strong> <span style={{color:"#5a5a5a"}}>{queryForm?.sysTargeting?.description || '<空>'}</span></div>
                             <TargetingTooltip data={queryForm?.sysTargeting} geoLocationList={geoLocationList} modelList={modelList} />
                         </>}
 

+ 1 - 0
src/pages/launchSystemNew/launchManage/createAd/targeting/modal/index.tsx

@@ -333,6 +333,7 @@ function TargetingPup(props: Props) {
         <Form
             form={form}
             labelCol={{ span: 3 }}
+            className='ad_form_style'
             initialValues={
                 {
                     geoLocationType: '0',

+ 5 - 0
src/pages/launchSystemNew/launchManage/localAd/brand/index.tsx

@@ -0,0 +1,5 @@
+import React from 'react'
+
+function Brand(){
+    return 
+}

+ 49 - 1
src/pages/launchSystemNew/launchManage/taskList/logTableConfig.tsx

@@ -22,6 +22,54 @@ function tableConfig(copyCreative: (data: any) => void, callback: (data: any) =>
                 return <span style={{ fontSize: "12px" }}>{a || '--'}</span>
             }
         },
+        {
+            title: '计划ID',
+            dataIndex: 'campaignIds',
+            key: 'campaignIds',
+            align: 'center',
+            width: 100,
+            render: (a: any[]) => {
+                return <Space>
+                    {
+                        a?.map(id => {
+                            return <a>{id}</a>
+                        })
+                    }
+                </Space>
+            }
+        },
+        {
+            title: '广告ID',
+            dataIndex: 'adgroupIds',
+            key: 'adgroupIds',
+            align: 'center',
+            width: 100,
+            render: (a: any[]) => {
+                return <Space>
+                    {
+                        a?.map(id => {
+                            return <a>{id}</a>
+                        })
+                    }
+                </Space>
+            }
+        },
+        {
+            title: '创意ID',
+            dataIndex: 'adcreativeIds',
+            key: 'adcreativeIds',
+            align: 'center',
+            width: 100,
+            render: (a: any[]) => {
+                return <Space>
+                    {
+                        a?.map(id => {
+                            return <a>{id}</a>
+                        })
+                    }
+                </Space>
+            }
+        },
         {
             title: '商品ID',
             dataIndex: 'productId',
@@ -52,7 +100,7 @@ function tableConfig(copyCreative: (data: any) => void, callback: (data: any) =>
             ellipsis: true,
             render: (a: any, b: any) => {
                 if (a) {
-                    return <AdcreativePopover id={a} name={b?.sysAdcreativeInfo?.adcreativeName}/>
+                    return <AdcreativePopover id={a} name={b?.sysAdcreativeInfo?.adcreativeName} />
                 } else {
                     return <span>--</span>
                 }

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

@@ -138,8 +138,8 @@ function tableConfig(callback: (data: any, type: 'log' | 'page', allData?: any)
                 let errCount = a - (b?.successCount || 0)
                 return <Space style={{ fontSize: "12px", marginLeft: 10 }} size={20}>
                     <span><Badge status="processing" />总条数:{a}条</span>
-                    {b?.successCount ? <span><Badge status="success" />成功:{b?.successCount || 0}条</span> : null}
-                    {errCount ? <span><Badge status="error" />失败:{errCount}条</span> : null}
+                    {<span><Badge status="success" />成功:{b?.successCount || 0}条</span> }
+                    {/* {errCount ? <span><Badge status="error" />创建中:{errCount}条</span> : null} */}
                 </Space>
             }
         }

+ 41 - 17
src/services/launchAdq/enum.ts

@@ -39,7 +39,7 @@ export enum LocationTypes {
   VISITED_IN = '去过',
   LIVE_IN = '常住',
   TRAVEL_IN = '旅行',
-  LIVE_AND_RECENTLY = '常驻且近期'
+  LIVE_AND_RECENTLY = '常驻且近期',
 }
 
 /**计费类型*/
@@ -190,17 +190,17 @@ export enum ExcludedDimensionEnum {
 
 /**广告版位*/
 export enum SiteSetEnum {
-  "SITE_SET_KANDIAN"="腾讯看点",
-  "SITE_SET_MINI_GAME_QQ"="QQ小游戏",
-  "SITE_SET_MINI_GAME_WECHAT"="微信小游戏",
-  "SITE_SET_MOBILE_GAME"="App游戏",
-  "SITE_SET_MOBILE_MYAPP"="应用宝移动",
-  "SITE_SET_MOBILE_UNION"="优量汇",
-  "SITE_SET_MOBILE_YYB"="应用宝",
+  'SITE_SET_KANDIAN' = '腾讯看点',
+  'SITE_SET_MINI_GAME_QQ' = 'QQ小游戏',
+  'SITE_SET_MINI_GAME_WECHAT' = '微信小游戏',
+  'SITE_SET_MOBILE_GAME' = 'App游戏',
+  'SITE_SET_MOBILE_MYAPP' = '应用宝移动',
+  'SITE_SET_MOBILE_UNION' = '优量汇',
+  'SITE_SET_MOBILE_YYB' = '应用宝',
   'SITE_SET_MOMENTS' = '微信朋友圈',
-  "SITE_SET_QQ_MUSIC_GAME"="QQ、腾讯音乐及游戏",
-  "SITE_SET_TENCENT_NEWS"="腾讯新闻",
-  "SITE_SET_TENCENT_VIDEO"="腾讯视频",
+  'SITE_SET_QQ_MUSIC_GAME' = 'QQ、腾讯音乐及游戏',
+  'SITE_SET_TENCENT_NEWS' = '腾讯新闻',
+  'SITE_SET_TENCENT_VIDEO' = '腾讯视频',
   'SITE_SET_WECHAT' = '微信公众号与小程序',
 }
 /***/
@@ -216,7 +216,7 @@ export enum BidModeEnum {
 export enum BidStrategyEnum {
   BID_STRATEGY_AVERAGE_COST = '稳定拿量',
   BID_STRATEGY_TARGET_COST = '优先拿量',
-    BID_STRATEGY_PRIORITY_LOW_COST = '优先低成本',
+  BID_STRATEGY_PRIORITY_LOW_COST = '优先低成本',
   BID_STRATEGY_PRIORITY_CAP_COST = '控制成本上限',
 }
 
@@ -463,9 +463,33 @@ export enum FundStatusEnum {
   FUND_STATUS_CLOSED = '资金账户已销户',
   FUND_STATUS_FROZEN = '资金冻结',
 }
-/**原生推广页顶部素材和广告创意素材之间的替换关系*/ 
+/**原生推广页顶部素材和广告创意素材之间的替换关系*/
 
-export enum OverrideCanvasHeadOptionEnum{
-  OPTION_CREATIVE_OVERRIDE_CANVAS='广告创意素材替换原生推广页顶部素材',
-  OPTION_KEEP_DIFFERENT = '自定义广告创意素材,和原生推广页顶部素材保持两者不同,(仅支持朋友圈非常规创意形式)'
-}
+export enum OverrideCanvasHeadOptionEnum {
+  OPTION_CREATIVE_OVERRIDE_CANVAS = '广告创意素材替换原生推广页顶部素材',
+  OPTION_KEEP_DIFFERENT = '自定义广告创意素材,和原生推广页顶部素材保持两者不同,(仅支持朋友圈非常规创意形式)',
+}
+/**创意形式ID*/
+export const AdcreativeTemplateEnum = {
+  '720': '横版视频',
+  '721': '竖版视频',
+  '722': '贴片视频',
+  '1529': '闪屏视频',
+  '618': '常规视频',
+  '1708': '卡片横版视频',
+  '711':'横版大图',
+  '714':'横版小图',
+  '718':'横版三小图',
+  '727':'卡卷广告',
+  '951':'PC横版大图',
+  '965':'PC横版通栏',
+  '712':'竖版大图',
+  '713':'通栏大图',
+  '910':'激励广告',
+  '925':'Banner图片',
+  '311':'常规大图',
+  '641':'常规三图',
+  '642':'常规四图',
+  '643':'常规六图',
+  '1707':'卡片横版大图'
+};