wjx 10 mēneši atpakaļ
vecāks
revīzija
11871401c3

+ 10 - 4
src/pages/launchSystemV3/components/GoodsModal/index.tsx

@@ -92,13 +92,13 @@ const GoodsModal: React.FC<Props> = (props) => {
 
     /** 一键设置 */
     const setOnekey = () => {
-        let marketingAssetNameList: string[] = data[selectAdz - 1]['productList']?.map((item: { marketingAssetName: string }) => item.marketingAssetName) || []
+        let marketingIdList: number[] = data[selectAdz - 1]['productList']?.map((item: { marketingAssetId: number }) => item.marketingAssetId) || []
         let newData: PULLIN.AccountCreateLogsProps[] = JSON.parse(JSON.stringify(data))
         const hide = message.loading(`正在设置...`, 0, () => {
             message.success('设置成功');
         });
         let dataAjax = newData?.filter(item => item.accountId !== data[selectAdz - 1].accountId)?.map(item => item?.accountId).map(accountId => {
-            return getByRemotemarketingAssetContentApi({ pageNum: 1, pageSize: 5, accountId: accountId, marketingAssetNameList })
+            return getByRemotemarketingAssetContentApi({ pageNum: 1, pageSize: 10, accountId: accountId, marketingIdList })
         })
         Promise.all(dataAjax).then(res => {
             if (res?.length > 0) {
@@ -156,7 +156,7 @@ const GoodsModal: React.FC<Props> = (props) => {
                     {data?.length > 1 && <Button disabled={!data[selectAdz - 1]['productList']?.length} onClick={setOnekey} type="link" loading={getByRemotemarketingAssetContent.loading}>
                         <Space>
                             <span>一键设置</span>
-                            <Tooltip color="#FFF" overlayInnerStyle={{ color: '#000' }} title="设置其它账号有相同名称的商品为那个账号的商品(注意需要用户商品称相同,否则不设置)">
+                            <Tooltip color="#FFF" overlayInnerStyle={{ color: '#000' }} title="设置其它账号有相同产品Id为那个账号的产品(注意需要产品Id相同,否则不设置)">
                                 <QuestionCircleOutlined />
                             </Tooltip>
                         </Space>
@@ -178,6 +178,12 @@ const GoodsModal: React.FC<Props> = (props) => {
                     }}
                     rowKey={'marketingAssetId'}
                     rowSelection={{
+                        getCheckboxProps(record) {
+                            let length = data[selectAdz - 1]?.productList?.length || 0
+                            return {
+                                disabled: length >= 10 && data[selectAdz - 1]?.productList?.every((item: any) => item?.marketingAssetId !== record?.marketingAssetId)
+                            }
+                        },
                         type: 'checkbox',
                         selectedRowKeys: data[selectAdz - 1]?.productList?.map((item: any) => item?.marketingAssetId),
                         onChange: onChangeTable
@@ -189,7 +195,7 @@ const GoodsModal: React.FC<Props> = (props) => {
                 />
             </div>
             <div className={style.center}>
-                <Title level={5}>已选:{data[selectAdz - 1]?.productList?.length || 0}</Title>
+                <Title level={5}>已选:{data[selectAdz - 1]?.productList?.length || 0}/10</Title>
                 <div className={style.select_content}>
                     {data[selectAdz - 1]?.productList?.map(item => <div key={item.marketingAssetId}>
                         <Text ellipsis={{ tooltip: true }} className={style.marketingAssetName}>{item.marketingAssetName}</Text>

+ 1 - 0
src/pages/launchSystemV3/tencentAdPutIn/const.ts

@@ -429,6 +429,7 @@ export enum PAGE_TYPE_ENUM {
 export enum CONVERSION_DATA_ENUM {
 	CONVERSION_DATA_ADMETRIC = "转化数据量",
 	CONVERSION_DATA_PRODUCT_DATA = "商品数据",
+	CONVERSION_DATA_FRIEND_FOLLOW = "好友关注量",
 	CONVERSION_DATA_DEFAULT = '不使用'
 }
 

+ 1 - 1
src/pages/launchSystemV3/tencentAdPutIn/create/Ad/index.tsx

@@ -33,6 +33,7 @@ const Ad: React.FC = () => {
             <div className={style.detail}>
                 <div className={style.detail_body}>
                     {(adgroups && Object.keys(adgroups).length > 0) ? <>
+                        <p style={{ fontWeight: 'bold', color: configuredStatus === 'AD_STATUS_NORMAL' ? '#52c41a' : '#FF4D4F' }}>广告状态:{AD_STATUS_ENUM[configuredStatus]}</p>
                         <p>营销目的:{MARKETING_GOAL_ENUM[marketingGoal]}</p>
                         <p style={{ fontWeight: 'bold', color: '#000' }}>推广产品类型:{MARKETING_TARGET_TYPE_ENUM[marketingAssetOuterSpec?.marketingTargetType]}</p>
                         <p>营销载体类型:{MARKETING_CARRIER_TYPE_ENUM[marketingCarrierType]}</p>
@@ -60,7 +61,6 @@ const Ad: React.FC = () => {
                         <p style={{ fontWeight: 'bold', color: '#000' }}>投放日期:{beginDate} 至 {endDate}</p>
                         <p>投放时段:{timeSeries.includes('0') ? <TimeSeriesLook timeSeries={timeSeries} /> : '全天'}</p>
                         <p>首日开始时间:{firstDayBeginTime ? firstDayBeginTime : '关闭'}</p>
-                        <p style={{ fontWeight: 'bold', color: '#000' }}>广告状态:{AD_STATUS_ENUM[configuredStatus]}</p>
                         <p>广告名称:{adgroupName}</p>
                     </> : <div className={style.ad_config}>
                         {accountCreateLogs?.length > 0 ?

+ 3 - 2
src/pages/launchSystemV3/tencentAdPutIn/create/Dynamic/creativeTemplateContent.tsx

@@ -17,6 +17,7 @@ const CreativeTemplateContent: React.FC<{ automaticSiteEnabled: boolean }> = ({
     const { creativeComponents, form, adgroups: { siteSet } } = useContext(DispatchDynamic)!;
     const pageType = Form.useWatch(['jumpInfo', 'pageType'], form)
     const pageSpec = Form.useWatch('pageSpec', form)
+    const deliveryMode = Form.useWatch('deliveryMode', form)
     const linkName = Form.useWatch(['textLink', 'value', 'linkName'], form)
     /******************************************/
 
@@ -98,7 +99,7 @@ const CreativeTemplateContent: React.FC<{ automaticSiteEnabled: boolean }> = ({
                                                 style={{ marginBottom: 0 }}
                                             >
                                                 <Radio.Group>
-                                                    <Radio value="OPTION_KEEP_DIFFERENT">不替换原生推广页顶部素材</Radio>
+                                                    {deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' && <Radio value="OPTION_KEEP_DIFFERENT">不替换原生推广页顶部素材</Radio>}
                                                     <Radio value="OPTION_CREATIVE_OVERRIDE_CANVAS">使用外层创意素材替换原生推广页顶部素材</Radio>
                                                 </Radio.Group>
                                             </Form.Item>
@@ -108,7 +109,7 @@ const CreativeTemplateContent: React.FC<{ automaticSiteEnabled: boolean }> = ({
                                 </Space>
                             ))}
                             {pageSpec?.length < jumpInfoNumber && <Form.Item>
-                                <Button type="dashed" onClick={() => add({ pageType: pageSpec?.[0]?.pageType || 'PAGE_TYPE_WECHAT_CANVAS', overrideCanvasHeadOption: 'OPTION_CANVAS_OVERRIDE_CREATIVE' })} block icon={<PlusOutlined />}>
+                                <Button type="dashed" disabled onClick={() => add({ pageType: pageSpec?.[0]?.pageType || 'PAGE_TYPE_WECHAT_CANVAS', overrideCanvasHeadOption: 'OPTION_CANVAS_OVERRIDE_CREATIVE' })} block icon={<PlusOutlined />}>
                                     还可以添加 {jumpInfoNumber - pageSpec?.length} 组
                                 </Button>
                             </Form.Item>}

+ 3 - 3
src/pages/launchSystemV3/tencentAdPutIn/create/Dynamic/index.tsx

@@ -91,10 +91,10 @@ const Dynamic: React.FC = () => {
         <div className={style.detail}>
             <div className={style.detail_body}>
                 {dynamicData && Object.keys(dynamicData).length > 0 && <>
+                    <p style={{ fontWeight: 'bold', color: configuredStatus === 'AD_STATUS_NORMAL' ? '#52c41a' : '#FF4D4F' }}>创意状态:{AD_STATUS_ENUM[configuredStatus]}</p>
                     <p>创意名称:{dynamicCreativeName}</p>
-                    <p style={{ fontWeight: 'bold', color: '#000' }}>创意状态:{AD_STATUS_ENUM[configuredStatus]}</p>
-                    <p>投放模式:{DELIVERY_MODE_ENUM[deliveryMode]}</p>
-                    <p>创意形式:{creativeTemplateAppellation || creativeTemplateId}</p>
+                    <p style={{ fontWeight: 'bold', color: '#000' }}>投放模式:{DELIVERY_MODE_ENUM[deliveryMode]}</p>
+                    <p>{(creativeTemplateAppellation || creativeTemplateId) && `创意形式:${creativeTemplateAppellation || creativeTemplateId}`}</p>
                     {brand?.length > 0 && <>
                         <p style={{ fontWeight: 'bold', color: '#000' }}>品牌形象跳转:{PAGE_TYPE_ENUM[brand?.[0]?.value?.jumpInfo?.pageType]}</p>
                         {['PAGE_TYPE_H5_PROFILE'].includes(brand?.[0]?.value?.jumpInfo?.pageType) ? <>

+ 8 - 5
src/pages/launchSystemV3/tencentAdPutIn/create/Dynamic/newDynamic.tsx

@@ -380,8 +380,7 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
     }
 
     useEffect(() => {
-        if (value && Object.keys(value).length > 0 && oldCreativeTemplateStyle && adcreativeTemplateList?.length > 0) {
-            getTemplate(value.creativeTemplateId)
+        if (value && Object.keys(value).length > 0 && adcreativeTemplateList?.length > 0 && ((value.deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' && oldCreativeTemplateStyle) || value.deliveryMode === 'DELIVERY_MODE_COMPONENT')) {
             const {
                 creativeComponents: {
                     brand,
@@ -395,6 +394,11 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
             let dynamicValues: any = {
                 ...surplusValues
             }
+            if (value.deliveryMode === 'DELIVERY_MODE_CUSTOMIZE') {
+                getTemplate(value.creativeTemplateId)
+                dynamicValues.creativeTemplateStyle = oldCreativeTemplateStyle === '视频' ? 'video' : 'image'
+            } 
+            // else getTemplate()
             // 卡片广告
             let isCardDynamic = dynamicValues?.creativeTemplateId && [1707, 1708].includes(dynamicValues.creativeTemplateId)
             let cardType: string[] = []
@@ -456,7 +460,6 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
                 cardType = ['not']
             }
             dynamicValues.cardType = cardType
-            dynamicValues.creativeTemplateStyle = oldCreativeTemplateStyle === '视频' ? 'video' : 'image'
             form.setFieldsValue({ ...dynamicValues })
         }
     }, [value, oldCreativeTemplateStyle, adcreativeTemplateList])
@@ -488,7 +491,7 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
             onFinish={handleOk}
             initialValues={{
                 deliveryMode: 'DELIVERY_MODE_CUSTOMIZE',
-                configuredStatus: 'AD_STATUS_SUSPEND'
+                configuredStatus: 'AD_STATUS_NORMAL'
             }}
         >
             <Spin spinning={getCreativeTemplateList.loading || getCreativeDetails.loading}>
@@ -519,7 +522,7 @@ const NewDynamic: React.FC<Props> = ({ value, visible, onClose, onChange, creati
 
                         {Object.keys(creativeComponents).length > 0 && <>
                             {/* 创意内容 */}
-                            <CreativeTemplateContent automaticSiteEnabled={automaticSiteEnabled}/>
+                            <CreativeTemplateContent automaticSiteEnabled={automaticSiteEnabled} />
                             {/* 营销组件 */}
                             <CreativeConversionAssistant automaticSiteEnabled={automaticSiteEnabled} />
                             {/* 创意设置 */}

+ 56 - 5
src/pages/launchSystemV3/tencentAdPutIn/create/Material/addMaterial.tsx

@@ -1,5 +1,5 @@
 import { MinusCircleOutlined, PlusOutlined } from "@ant-design/icons"
-import { Button, Card, Form, Modal, Popconfirm, Space, message } from "antd"
+import { Button, Card, Dropdown, Form, Menu, Modal, Popconfirm, Space, message } from "antd"
 import React, { useEffect, useState } from "react"
 import styles from './index.less'
 import VideoNews from "@/pages/launchSystemNew/components/newsModal/videoNews"
@@ -11,13 +11,14 @@ import VideoFrameSelect from "@/pages/launchSystemV3/components/VideoFrameSelect
 interface Props {
     creativeTemplateId: number
     materialData: any
+    deliveryMode: string,
     value?: any,
     visible?: boolean
     onClose?: () => void
     onChange?: (value: any) => void
 }
 
-const AddMaterial: React.FC<Props> = ({ creativeTemplateId, materialData, visible, value, onChange, onClose }) => {
+const AddMaterial: React.FC<Props> = ({ creativeTemplateId, materialData, deliveryMode, visible, value, onChange, onClose }) => {
 
     /*********************************/
     const { init } = useModel('useLaunchAdq.useBdMediaPup')
@@ -177,13 +178,61 @@ const AddMaterial: React.FC<Props> = ({ creativeTemplateId, materialData, visibl
             <Form.List name="dynamicGroup">
                 {(fields, { add, remove }) => (<>
                     {fields.map((field, num) => (<Card
-                        title={<strong style={{ fontSize: 18 }}>创意组{num + 1}</strong>}
+                        title={<Space>
+                            <strong style={{ fontSize: 18 }}>创意组{num + 1}</strong>
+                            {deliveryMode === 'DELIVERY_MODE_COMPONENT' && <>
+                                <Dropdown
+                                    overlay={<Menu>
+                                        <Menu.Item onClick={() => { console.log('添加9:16视频') }}>添加9:16视频</Menu.Item>
+                                        <Menu.Item onClick={() => { console.log('添加16:9视频') }}>添加16:9视频</Menu.Item>
+                                        <Menu.Item onClick={() => { console.log('添加9:16(720*1280)图片') }}>添加9:16(720*1280)图片</Menu.Item>
+                                        <Menu.Item onClick={() => { console.log('添加16:9(1280*720)图片') }}>添加16:9(1280*720)图片</Menu.Item>
+                                        <Menu.Item onClick={() => { console.log('添加1:1(800*800)图片') }}>添加1:1(800*800)图片</Menu.Item>
+                                        <Menu.Item onClick={() => { console.log('添加20:7(960*334)图片') }}>添加20:7(960*334)图片</Menu.Item>
+                                        <Menu.Item onClick={() => {
+                                            init({ mediaType: 'IMG', num: 15, cloudSize: [[
+                                                { relation: '=', width: 800, height: 800 },
+                                                { relation: '=', width: 1280, height: 720 },
+                                                { relation: '=', width: 720, height: 1280 },
+                                                { relation: '=', width: 960, height: 334 },
+                                                { relation: '=', width: 480, height: 320 },
+                                            ]], maxSize: 400 * 1024 })
+                                            setMaterialConfig({
+                                                ...materialConfig,
+                                                type: 'image',
+                                                max: 15,
+                                                index: 99999,
+                                                adcreativeTemplateId: creativeTemplateId
+                                            })
+                                            setTimeout(() => {
+                                                setSelectVideoVisible(true)
+                                            }, 100)
+                                        }}>添加3:2(480*320)图片</Menu.Item>
+                                    </Menu>}
+                                    placement="bottomLeft"
+                                    arrow
+                                >
+                                    <Button type="primary">添加图片/视频</Button>
+                                </Dropdown>
+                                <Dropdown
+                                    overlay={<Menu>
+                                        <Menu.Item onClick={() => { console.log('1:1 六图') }}>1:1 六图</Menu.Item>
+                                        <Menu.Item onClick={() => { console.log('1:1 三图') }}>1:1 三图</Menu.Item>
+                                        <Menu.Item onClick={() => { console.log('1:1 四图') }}>1:1 四图</Menu.Item>
+                                    </Menu>}
+                                    placement="bottomLeft"
+                                    arrow
+                                >
+                                    <Button type="primary">上传组图</Button>
+                                </Dropdown>
+                            </>}
+                        </Space>}
                         className="cardResetCss"
                         key={field.key}
                         style={{ marginTop: 10, marginBottom: 10 }}
                     >
                         <Space size={30} style={{ width: '100%' }} className={styles.space}>
-                            {Object.keys(materialData)?.map(key => {
+                            {deliveryMode === 'DELIVERY_MODE_CUSTOMIZE' ? Object.keys(materialData)?.map(key => {
                                 let m = materialData[key]
                                 let children = m.children
 
@@ -302,7 +351,9 @@ const AddMaterial: React.FC<Props> = ({ creativeTemplateId, materialData, visibl
 
                                     return null
                                 })
-                            })}
+                            }) : <div>
+                                11111111111111
+                            </div>}
                             {fields?.length > 1 && <MinusCircleOutlined className={styles.clear} onClick={() => remove(field.name)} style={{ marginBottom: 24, color: 'red' }} />}
                         </Space>
                     </Card>))}

+ 2 - 1
src/pages/launchSystemV3/tencentAdPutIn/create/Material/index.tsx

@@ -12,7 +12,7 @@ const Material: React.FC = () => {
     /***************************************/
     const { materialData, addelivery, setAddelivery, clearData } = useContext(DispatchAddelivery)!;
     const { dynamic, dynamicMaterialDTos } = addelivery
-    const { creativeTemplateId } = dynamic
+    const { creativeTemplateId, deliveryMode } = dynamic
 
     const [newVisible, setNewVisible] = useState<boolean>(false)
     const [mType, setMtype] = useState<string>()
@@ -73,6 +73,7 @@ const Material: React.FC = () => {
             creativeTemplateId={creativeTemplateId}
             value={dynamicMaterialDTos}
             materialData={materialData}
+            deliveryMode={deliveryMode}
             visible={newVisible}
             onClose={() => {
                 setNewVisible(false)

+ 1 - 1
src/services/adqV3/global.ts

@@ -57,7 +57,7 @@ export async function getByRemotemarketingAssetContentApi(data: {
     accountId: number,
     pageNum: number,
     pageSize: number,
-    marketingAssetNameList: string[]
+    marketingIdList: number[]
 }) {
     return request(api + `/adq/v3/marketingAssets/marketingAssetContent/getByRemote`, {
         method: 'POST',