wjx 2 anni fa
parent
commit
510a3934ec

+ 2 - 2
config/proxy.ts

@@ -10,8 +10,8 @@
  export default {
   dev: {
     '/api/': {
-      target: 'http://test.api.zanxiangwl.com',
-      // target: 'http://api.zanxiangwl.com',
+      // target: 'http://test.api.zanxiangwl.com',
+      target: 'http://api.zanxiangwl.com',
       changeOrigin: true,
       pathRewrite: { '/api': '' },
     },

+ 9 - 2
src/pages/launchSystemNew/adq/ad/index.tsx

@@ -150,7 +150,7 @@ const Ad: React.FC<Props> = (props) => {
             onClose={() => { setUpdate({ visible: false, title: '' }) }}
         />}
         {/* 复制广告 */}
-        {copyData.visible && <Copy selectedRows={selectedRows} {...copyData} onClose={() => setCopyData({ visible: false })} onChange={() => { setCopyData({ visible: false }); listAjax.refresh(); setSelectedRows([]) }}/>}
+        {copyData.visible && <Copy selectedRows={selectedRows} {...copyData} onClose={() => setCopyData({ visible: false })} onChange={() => { setCopyData({ visible: false }); listAjax.refresh(); setSelectedRows([]) }} />}
         <TableData
             isCard={false}
             columns={() => tableConfig(onChange, tableIdClick)}
@@ -323,7 +323,14 @@ const Ad: React.FC<Props> = (props) => {
             rowSelection={{
                 selectedRowKeys: selectedRows.map(item => item.adgroupId.toString()),
                 getCheckboxProps: (record: any) => ({
-                    disabled: model ? record.status === 'STATUS_DELETED' : record.status === 'STATUS_DELETED' || !(!model && record?.promotedObjectType === 'PROMOTED_OBJECT_TYPE_WECHAT_OFFICIAL_ACCOUNT' && record?.optimizationGoal === 'OPTIMIZATIONGOAL_FOLLOW')
+                    disabled: model ?
+                        record.status === 'STATUS_DELETED' :
+                        record.status === 'STATUS_DELETED' ||
+                        !(!model &&
+                            record?.promotedObjectType === 'PROMOTED_OBJECT_TYPE_WECHAT_OFFICIAL_ACCOUNT' &&
+                            record?.optimizationGoal === 'OPTIMIZATIONGOAL_FOLLOW' &&
+                            record?.deepConversionSpec?.deepConversionWorthSpec?.goal === 'GOAL_1DAY_PURCHASE_ROAS'
+                        )
                 }),
                 onChange: (selectedRowKeys: any, selectedRows: any) => {
                     setSelectedRows(selectedRows)

+ 2 - 1
src/pages/launchSystemNew/adq/ad/tableConfig.tsx

@@ -133,7 +133,8 @@ function tableConfig(
             title: '出价',
             dataIndex: 'bidAmount',
             key: 'bidAmount',
-            width: 140,
+            width: 150,
+            ellipsis: true,
             render: (a: string, b: { bidMode: string, optimizationGoal: string }) => {
                 return `${BidModeEnum[b?.bidMode]} ${a}元/${b?.bidMode === 'BID_MODE_CPM' ? '千次曝光' : b?.bidMode === 'BID_MODE_CPC' ? '点击' : OptimizationGoalEnum[b?.optimizationGoal]}`
             }

+ 72 - 37
src/pages/launchSystemNew/adq/ad/updateAd.tsx

@@ -1,11 +1,11 @@
-import { Checkbox, DatePicker, Form, Input, message, Modal, notification, Radio, Space, TimePicker, Tooltip } from "antd"
+import { Checkbox, DatePicker, Form, Input, message, Modal, notification, Radio, Select, Space, TimePicker, Tooltip } from "antd"
 import React, { useEffect, useState } from "react"
 import TimeInSelect from "../../components/timeInSelect"
 import moment from "moment"
 import { getTimeSeriesList } from "./const";
 import { editAdqAdgroupsDataApi } from "@/services/launchAdq/adq";
 import { useAjax } from "@/Hook/useAjax";
-import { BidStrategyEnum } from "@/services/launchAdq/enum";
+import { BidStrategyEnum, GoalRoasEnum } from "@/services/launchAdq/enum";
 import { QuestionCircleOutlined } from "@ant-design/icons";
 import { RangePickerProps } from "antd/lib/date-picker";
 const { RangePicker } = DatePicker;
@@ -42,47 +42,57 @@ const UpdateAd: React.FC<Props> = ({ title = '修改广告', visible, onChange,
 
     const handleOk = () => {
         form.validateFields().then(values => {
-            // console.log(values);
+            console.log(values);
             let newValues = JSON.parse(JSON.stringify(values))
             let field = newValues.field
             let adgroupsUpdateDatetimeDTO = {}  // 排期
             let adgroupsUpdateBidAmountDTO = {} // 出价
+            let deepConversionSpec = {} // ROI
             if (timeSeriesType === 'allDayLong') {
                 newValues.timeSeries = getTimeSeriesList()
             }
-            field.forEach((key: string) => {
-                switch (key) {
-                    case 'dateType':
-                        if (newValues.dateType === '2') {
-                            adgroupsUpdateDatetimeDTO['beginDate'] = moment(newValues.date).format('YYYY-MM-DD')
-                            adgroupsUpdateDatetimeDTO['endDate'] = ''
-                        } else {
-                            adgroupsUpdateDatetimeDTO['beginDate'] = moment(newValues.date[0]).format('YYYY-MM-DD')
-                            adgroupsUpdateDatetimeDTO['endDate'] = moment(newValues.date[1]).format('YYYY-MM-DD')
-                        }
-                        break
-                    case 'timeType':
-                        // if (timeSeriesType === 'timeInterValS') {
-                        //     if (newValues.firstDayBeginTime && moment(newValues.firstDayBeginTime).format('HH:mm:ss') !== '00:00:00') {
-                        //         message.error('1111')
-                        //         return
-                        //     }
-                        // }
-                        if (newValues.timeSeries) {
-                            adgroupsUpdateDatetimeDTO['timeSeries'] = newValues.timeSeries.join('')
-                        }
-                        if (newValues.firstDayBeginTime) {
-                            adgroupsUpdateDatetimeDTO['firstDayBeginTime'] = moment(newValues.firstDayBeginTime).format('HH:mm:ss')
-                        }
-                        break
-                    case 'bidSType':
-                        adgroupsUpdateBidAmountDTO['bidStrategy'] = newValues.bidStrategy
-                        adgroupsUpdateBidAmountDTO['bidAmount'] = newValues.bidAmount * 100
-                        break
+
+            if (title === '批量修改深度优化') {
+                deepConversionSpec['deepConversionType'] = newValues.deepConversionType
+                deepConversionSpec['deepConversionWorthSpec'] = {
+                    expectedRoi: newValues.deepBidAmount,
+                    goal: newValues.goal
                 }
-            })
+            } else {
+                field?.forEach((key: string) => {
+                    switch (key) {
+                        case 'dateType':
+                            if (newValues.dateType === '2') {
+                                adgroupsUpdateDatetimeDTO['beginDate'] = moment(newValues.date).format('YYYY-MM-DD')
+                                adgroupsUpdateDatetimeDTO['endDate'] = ''
+                            } else {
+                                adgroupsUpdateDatetimeDTO['beginDate'] = moment(newValues.date[0]).format('YYYY-MM-DD')
+                                adgroupsUpdateDatetimeDTO['endDate'] = moment(newValues.date[1]).format('YYYY-MM-DD')
+                            }
+                            break
+                        case 'timeType':
+                            // if (timeSeriesType === 'timeInterValS') {
+                            //     if (newValues.firstDayBeginTime && moment(newValues.firstDayBeginTime).format('HH:mm:ss') !== '00:00:00') {
+                            //         message.error('1111')
+                            //         return
+                            //     }
+                            // }
+                            if (newValues.timeSeries) {
+                                adgroupsUpdateDatetimeDTO['timeSeries'] = newValues.timeSeries.join('')
+                            }
+                            if (newValues.firstDayBeginTime) {
+                                adgroupsUpdateDatetimeDTO['firstDayBeginTime'] = moment(newValues.firstDayBeginTime).format('HH:mm:ss')
+                            }
+                            break
+                        case 'bidSType':
+                            adgroupsUpdateBidAmountDTO['bidStrategy'] = newValues.bidStrategy
+                            adgroupsUpdateBidAmountDTO['bidAmount'] = newValues.bidAmount * 100
+                            break
+                    }
+                })
+            }
             // console.log('params--->', adgroupsUpdateDatetimeDTO);
-            editAdqAdgroupsData.run({ adgroupIds: selectedRows.map((item: { adgroupId: number }) => item.adgroupId), adgroupsUpdateDatetimeDTO, adgroupsUpdateBidAmountDTO }).then(res => {
+            editAdqAdgroupsData.run({ adgroupIds: selectedRows.map((item: { adgroupId: number }) => item.adgroupId), adgroupsUpdateDatetimeDTO, adgroupsUpdateBidAmountDTO, deepConversionSpec }).then(res => {
                 if (res) {
                     message.success(`修改完成.成功: ${res.success},失败: ${res.fail}`)
                     if (res?.fail) {
@@ -124,7 +134,10 @@ const UpdateAd: React.FC<Props> = ({ title = '修改广告', visible, onChange,
                 timeSeries: getTimeSeriesList(),
                 firstDayBeginTime: moment('2023-02-24 00:00:00'),
                 bidStrategy: 'BID_STRATEGY_TARGET_COST',
-                bidAmount: 1000
+                bidAmount: 1000,
+                optimizationMode: 'DEEP_CONVERSION_TARGET',
+                deepConversionType: 'DEEP_CONVERSION_WORTH',
+                goal: 'GOAL_1DAY_PURCHASE_ROAS'
             }}
         >
 
@@ -161,7 +174,7 @@ const UpdateAd: React.FC<Props> = ({ title = '修改广告', visible, onChange,
                     {dateType === '1' ? <Form.Item name='date' rules={[{ required: true, message: '请选择日期' }]}>
                         <RangePicker style={{ marginLeft: 125 }} disabledDate={disabledDate}></RangePicker>
                     </Form.Item> : <Form.Item name='date' style={{ marginLeft: 125 }} rules={[{ required: true, message: '请选择日期' }]}>
-                        <DatePickers disabledDate={disabledDate}/>
+                        <DatePickers disabledDate={disabledDate} />
                     </Form.Item>}
                 </>}
                 {field?.includes('timeType') && <>
@@ -206,7 +219,29 @@ const UpdateAd: React.FC<Props> = ({ title = '修改广告', visible, onChange,
                     </Form.Item>
                 </>}
             </> : <>
-
+                <Form.Item label={<strong>深度优化方式</strong>} name='optimizationMode' rules={[{ required: true, message: '请选择深度优化方式' }]}>
+                    <Radio.Group disabled>
+                        <Radio.Button value="DEEP_CONVERSION_TARGET">深度目标优化</Radio.Button>
+                    </Radio.Group>
+                </Form.Item>
+                <Form.Item label={<strong>深度优化类型</strong>} name='deepConversionType' rules={[{ required: true, message: '请选择深度优化类型' }]}>
+                    <Radio.Group disabled onChange={() => {
+                        form.setFieldsValue({
+                            goal: undefined,
+                            deepBidAmount: undefined
+                        })
+                    }}>
+                        <Radio.Button value="DEEP_CONVERSION_WORTH">优化 ROI</Radio.Button>
+                    </Radio.Group>
+                </Form.Item>
+                <Form.Item label={<strong>深度优化目标</strong>} name='goal' rules={[{ required: true, message: '请选择深度优化目标' }]}>
+                    <Select style={{ width: 380 }} placeholder='请选择'>
+                        {Object.keys(GoalRoasEnum).filter(key => ['GOAL_1DAY_PURCHASE_ROAS']?.includes(key)).map(key => <Select.Option value={key} key={key}>{GoalRoasEnum[key]}</Select.Option>)}
+                    </Select>
+                </Form.Item>
+                <Form.Item label={<strong>期望ROI</strong>} name='deepBidAmount' rules={[{ required: true, message: '请输入期望ROI' }]}>
+                    <Input style={{ width: 380 }} placeholder={`期望ROI目标范围0.001~1000,输入0.05,表示ROI目标为5%`} />
+                </Form.Item>
             </>}
         </Form>
     </Modal>