ソースを参照

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

wjx 1 週間 前
コミット
ad46ec95a2

+ 2 - 0
src/pages/launchSystemV3/material/cloudNew/const.ts

@@ -48,6 +48,8 @@ export const showField1List = [
     { label: '目标转化率', value: 'material_data_day.conversions_rate', field: 'conversions_rate' },
     { label: '创意关联数', value: 'material_data_day.adgroup_count', field: 'adgroup_count' },
     { label: '创意关联数', value: 'material_data_day.dynamic_creative_count', field: 'dynamic_creative_count' },
+    { label: '广告变现ROI', value: 'material_data_day.ad_monetization_roi', field: 'ad_monetization_roi' },
+    { label: '广告变现金额', value: 'material_data_day.ad_monetization_amount', field: 'ad_monetization_amount' },
     { label: '备注', value: 'description', field: 'description' }
 ]
 

+ 33 - 6
src/pages/launchSystemV3/material/cloudNew/selectCloudComponent.tsx

@@ -1,4 +1,4 @@
-import { Button, message, Modal, Space } from "antd"
+import { Button, Empty, message, Modal, Space } from "antd"
 import React, { useState } from "react"
 import style from './index.less'
 import './global.less'
@@ -7,17 +7,23 @@ import { getVideoImgUrl } from "@/utils/utils"
 import { DeleteOutlined, PlayCircleOutlined } from "@ant-design/icons"
 import PlayVideo from "./playVideo"
 import SelectGroupCloudNew from "./selectGroupCloudNew"
+import MediaList from "./mediaList"
+
+interface Props extends CLOUDNEW.SelectCloudNewProps {
+    tabType: Array<'1' | '2'>
+}
 
 /**
  * 选择素材
  * @param param0 
  * @returns 
  */
-const SelectCloudComponent: React.FC<CLOUDNEW.SelectCloudNewProps> = ({ visible, defaultParams, num, isGroup, onChange, onClose, accountCreateLogs, putInType, title }) => {
+const SelectCloudComponent: React.FC<Props> = ({ tabType, visible, defaultParams, num, isGroup, onChange, onClose, accountCreateLogs, putInType, title }) => {
 
     /************************************/
     const [checkedFolderList, setCheckedFolderList] = useState<any[]>([])
     const [active, setActive] = useState<number>()
+    const [SCKType, setSCKType] = useState<string>(tabType[0])
     /************************************/
 
 
@@ -30,7 +36,19 @@ const SelectCloudComponent: React.FC<CLOUDNEW.SelectCloudNewProps> = ({ visible,
     }
 
     return <Modal
-        title={<strong>{title || '素材库'}</strong>}
+        title={<div className={'SCK_header'}>
+            {[{ label: title || '云端素材库', value: '1' }, { label: '本地素材库', value: '2' }].filter(item => tabType.includes(item.value as any)).map(item => <div
+                className={item.value === SCKType ? 'selected' : ''}
+                key={item.value}
+                onClick={() => {
+                    setSCKType(item.value)
+                    if (isGroup) {
+                        setCheckedFolderList([])
+                    }
+                }}>
+                {item.label}
+            </div>)}
+        </div>}
         open={visible}
         onCancel={onClose}
         width={1400}
@@ -56,10 +74,10 @@ const SelectCloudComponent: React.FC<CLOUDNEW.SelectCloudNewProps> = ({ visible,
                 <Button type="primary" onClick={handleOk} disabled={checkedFolderList.length === 0}>确定</Button>
             </Space>
         </div>}
-        className={`modalResetCss selectModal`}
+        className={`modalResetCss selectModal SCK`}
         bodyStyle={{ backgroundColor: '#f1f4fc', height: 700, overflow: 'hidden', padding: '10px' }}
     >
-        <SelectGroupCloudNew
+        {SCKType === '1' ? <SelectGroupCloudNew
             num={num}
             defaultParams={defaultParams}
             checkedFolderList={checkedFolderList}
@@ -67,7 +85,16 @@ const SelectCloudComponent: React.FC<CLOUDNEW.SelectCloudNewProps> = ({ visible,
             accountCreateLogs={accountCreateLogs}
             putInType={putInType}
             active={active}
-        />
+        /> : SCKType === '2' ? <MediaList
+            num={num}
+            defaultParams={defaultParams}
+            checkedFolderList={checkedFolderList}
+            setCheckedFolderList={setCheckedFolderList}
+            active={active}
+            uploadVisible={false}
+            setUploadVisible={() => {}}
+        /> : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description="请选择其它TAB"/>}
+
     </Modal>
 }
 

+ 7 - 0
src/pages/launchSystemV3/material/cloudNew/selectComponentsUnitSearch.tsx

@@ -68,6 +68,9 @@ const SelectComponentsUnitSearch: React.FC<Props> = ({ type, defaultParams, acco
             if ('createTime' === key && value?.length === 2) {
                 params.createTimeMin = moment(value?.[0]).format('YYYY-MM-DD')
                 params.createTimeMax = moment(value?.[1]).format('YYYY-MM-DD')
+            } else if ('costTime' === key && value?.length === 2) {
+                params.costStartTime = moment(value?.[0]).format('YYYY-MM-DD')
+                params.costEndTime = moment(value?.[1]).format('YYYY-MM-DD')
             } else {
                 params[key] = value
             }
@@ -163,6 +166,9 @@ const SelectComponentsUnitSearch: React.FC<Props> = ({ type, defaultParams, acco
                 <Col><Form.Item name={'createTime'}>
                     <DatePicker.RangePicker style={{ width: 260 }} placeholder={['创建时间开始', '创建时间结束']} />
                 </Form.Item></Col>
+                <Col><Form.Item name={'costTime'}>
+                    <DatePicker.RangePicker style={{ width: 260 }} placeholder={['消耗时间开始', '消耗时间结束']} />
+                </Form.Item></Col>
                 <Col><Form.Item>
                     <Space>
                         <Button onClick={() => form.resetFields()}>重置</Button>
@@ -175,6 +181,7 @@ const SelectComponentsUnitSearch: React.FC<Props> = ({ type, defaultParams, acco
         {/* 选择素材 */}
         {(selectVideoVisible && selectCloudData) && <SelectCloudComponent
             {...selectCloudData}
+            tabType={['1']}
             accountCreateLogs={[{ accountId: accountId }]}
             visible={selectVideoVisible}
             isGroup={materialConfig?.isGroup}

+ 10 - 6
src/pages/launchSystemV3/material/cloudNew/selectGroupCloudNew.tsx

@@ -188,7 +188,7 @@ const SelectGroupCloudNew: React.FC<CLOUDNEW.SelectGroupCloudNewProps> = ({ num,
                                             if (getPageRemoteImageDataList?.data?.records) {
                                                 let newCheckedFolderList: any[] = JSON.parse(JSON.stringify(checkedFolderList))
                                                 const data: any[] = getPageRemoteImageDataList?.data?.records
-    
+
                                                 if (e.target.checked) { // 全选
                                                     const selectIds = newCheckedFolderList.map(item => item.id)
                                                     const remainData = data.filter(item => {
@@ -274,15 +274,15 @@ const SelectGroupCloudNew: React.FC<CLOUDNEW.SelectGroupCloudNewProps> = ({ num,
                                                             allowClear
                                                             onChange={(value) => {
                                                                 setSortData({ ...sortData, sortField: value as any })
-                                                                addOnlyData.run({ data: JSON.stringify({ showField, sortData: { ...sortData, sortField: value as any }}), type: 'MODE_FIELD_ENT_1' })
+                                                                addOnlyData.run({ data: JSON.stringify({ showField, sortData: { ...sortData, sortField: value as any } }), type: 'MODE_FIELD_ENT_1' })
                                                             }}
                                                         />
-                                                        <Radio.Group 
-                                                            value={sortData.sortType} 
+                                                        <Radio.Group
+                                                            value={sortData.sortType}
                                                             onChange={(e) => {
                                                                 setSortData({ ...sortData, sortType: e.target.value })
-                                                                addOnlyData.run({ data: JSON.stringify({ showField, sortData: { ...sortData, sortType: e.target.value }}), type: 'MODE_FIELD_ENT_1' })
-                                                            }} 
+                                                                addOnlyData.run({ data: JSON.stringify({ showField, sortData: { ...sortData, sortType: e.target.value } }), type: 'MODE_FIELD_ENT_1' })
+                                                            }}
                                                             buttonStyle="solid"
                                                         >
                                                             <Radio.Button value={true}>正序</Radio.Button>
@@ -359,6 +359,10 @@ const SelectGroupCloudNew: React.FC<CLOUDNEW.SelectGroupCloudNewProps> = ({ num,
                                                                             return <Paragraph key={field} style={{ fontSize: 12, marginBottom: 1 }}>下单成本:{(item?.order_cost === null || item?.order_cost === undefined) ? '--' : item?.order_cost}</Paragraph>
                                                                         case 'material_data_day.ctr':
                                                                             return <Paragraph key={field} style={{ fontSize: 12, marginBottom: 1 }}>点击率:{(item?.ctr === null || item?.ctr === undefined) ? '--' : (item?.ctr * 100).toFixed(2) + '%'}</Paragraph>
+                                                                        case 'material_data_day.ad_monetization_roi':
+                                                                            return <Paragraph key={field} style={{ fontSize: 12, marginBottom: 1 }}>广告变现ROI:{(item?.ad_monetization_roi === null || item?.ad_monetization_roi === undefined) ? '--' : (item?.ad_monetization_roi * 100).toFixed(2) + '%'}</Paragraph>
+                                                                        case 'material_data_day.ad_monetization_amount':
+                                                                            return <Paragraph key={field} style={{ fontSize: 12, marginBottom: 1 }}>广告变现金额:{(item?.ad_monetization_amount === null || item?.ad_monetization_amount === undefined) ? '--' : item?.ad_monetization_amount}</Paragraph>
                                                                         case 'material_data_day.conversions_rate':
                                                                             return <Paragraph key={field} style={{ fontSize: 12, marginBottom: 1 }}>目标转化率:{(item?.conversions_rate === null || item?.conversions_rate === undefined) ? '--' : (item?.conversions_rate * 100).toFixed(2) + '%'}</Paragraph>
                                                                         case 'material_data_day.adgroup_count':

+ 7 - 4
src/pages/launchSystemV3/tencenTasset/manageComponent/addComponents.tsx

@@ -71,25 +71,27 @@ const AddComponents: React.FC<Props> = ({ type, putInType, accountId, visible, o
                         return {
                             componentSubType: cur.componentSubType,
                             materialIdList: item.map((i: { id: any; }) => i.id),
-                            componentType: 'imageList'
+                            componentType: 'imageList',
+                            materialSourceType: item?.[0]?.materialType === 1 ? 1 : 2
                         }
                     } else if (cur?.componentSubType?.includes('VIDEO')) {
                         return {
                             componentSubType: cur.componentSubType,
                             materialId: item.id,
                             componentType: 'video',
-                            coverUrl: item.key_frame_image_url
+                            coverUrl: item.key_frame_image_url,
+                            materialSourceType: item.materialType === 1 ? 1 : 2
                         }
                     }
                     return {
                         componentSubType: cur.componentSubType,
                         materialId: item.id,
-                        componentType: 'image'
+                        componentType: 'image',
+                        materialSourceType: item.materialType === 1 ? 1 : 2
                     }
                 }))
                 return pre
             }, [])
-            console.log(params);
             addBatchCreativeComponent.run({
                 adAccountId: accountId,
                 creativeComponentDetailDTOS: params
@@ -302,6 +304,7 @@ const AddComponents: React.FC<Props> = ({ type, putInType, accountId, visible, o
         {/* 选择素材 */}
         {(selectVideoVisible && selectCloudData) && <SelectCloudComponent
             {...selectCloudData}
+            tabType={['1', '2']}
             accountCreateLogs={[{ accountId: accountId }]}
             visible={selectVideoVisible}
             isGroup={materialConfig?.isGroup}

+ 6 - 0
src/pages/launchSystemV3/tencenTasset/manageComponent/index.tsx

@@ -284,6 +284,12 @@ const ManageComponent: React.FC = () => {
                             value={queryParams?.createTimeMin && queryParams?.createTimeMax ? [moment(queryParams?.createTimeMin), moment(queryParams?.createTimeMax)] as any : undefined}
                             onChange={(_, option) => setQueryParams({ ...queryParams, createTimeMin: option[0], createTimeMax: option[1], pageNum: 1 })}
                         />
+                        <DatePicker.RangePicker
+                            placeholder={['消耗时间开始', '消耗时间结束']}
+                            style={{ width: 250 }}
+                            value={queryParams?.costStartTime && queryParams?.costEndTime ? [moment(queryParams?.costStartTime), moment(queryParams?.costEndTime)] as any : undefined}
+                            onChange={(_, option) => setQueryParams({ ...queryParams, costStartTime: option[0], costEndTime: option[1], pageNum: 1 })}
+                        />
                     </div>}
                     refreshAjax={() => getCreativeComponentList.refresh()}
                     rowKey="componentId"

+ 1 - 0
src/pages/launchSystemV3/tencenTasset/manageComponent/tableConfig.tsx

@@ -120,6 +120,7 @@ function columns12(del: (id: number[], accountId: number) => void): { label: str
                     align: 'center',
                     label: '基础字段',
                     default: 8,
+                    sorter: true,
                     render(value: any) {
                         return <span style={{ fontSize: 12 }}>{value || '--'}</span>
                     },

+ 2 - 0
src/services/adqV3/global.ts

@@ -1193,6 +1193,8 @@ export interface GetCreativeComponentProps {
     componentCustomName?: string
     sortColumn?: string
     sortAsc?: boolean
+    costStartTime?: string
+    costEndTime?: string
 }
 
 /**