liuxiaona 1 year ago
parent
commit
7923d61a60
36 changed files with 5802 additions and 91 deletions
  1. 1 1
      dist/assets/index.ff86c505.js
  2. 1 1
      dist/assets/index.22d1014a.css
  3. 1 1
      dist/index.html
  4. 1 1
      dist/js/_dialog/_dialog.496a3147.js
  5. 1 1
      dist/js/_input/_input.94932971.js
  6. 1 1
      dist/js/_select/_select.16f85516.js
  7. 1 1
      dist/js/adTask/index.fc459026.js
  8. 0 1
      dist/js/api/api.4a0d03d1.js
  9. 1 0
      dist/js/api/api.78351f92.js
  10. 1 1
      dist/js/basisMoudle/accountManage.9da534e6.js
  11. 1 1
      dist/js/basisMoudle/error.45bc241a.js
  12. 1 1
      dist/js/basisMoudle/home.a8668516.js
  13. 1 1
      dist/js/basisMoudle/login.254f5f97.js
  14. 1 1
      dist/js/businessMoudle/adqManage.204819e5.js
  15. 1 1
      dist/js/collectClip/index.0e00a4f4.js
  16. 1 0
      dist/js/configArea/index.beb9112f.js
  17. 0 1
      dist/js/configArea/index.c5ad50b6.js
  18. 1 1
      dist/js/gdtList/index.c6ae3826.js
  19. 1 1
      dist/js/index/index.3605e8be.js
  20. 1 1
      dist/js/index/index.3da6b35c.js
  21. 1 1
      dist/js/layout/index.c9eab6fa.js
  22. 1 1
      dist/js/layout/index_head.c601c5d0.js
  23. 1 1
      dist/js/materialBlock/materialBlock.7a050dd1.js
  24. 1 1
      dist/js/materialLibrary/index.b301b70e.js
  25. 1 1
      dist/js/menuPermission/menuList.5c5b6fd2.js
  26. 1 1
      dist/js/miniprogram/index.aabdeba8.js
  27. 1 1
      dist/js/noData/noData.672c22d9.js
  28. 1 1
      dist/js/tableInfo/tableInfo.c6aac612.js
  29. 1 1
      dist/js/taskList/index.591ef728.js
  30. 1 1
      dist/js/timeScreen/timeScreen.d0ef5a6e.js
  31. 1 1
      dist/js/weekTime/weekTime.5ec6fe0a.js
  32. 25 23
      src/components/businessMoudle/batchGdt/configArea/basicInfo/index.vue
  33. 17 2
      src/components/businessMoudle/batchGdt/configArea/index.vue
  34. 0 3
      src/components/businessMoudle/batchGdt/configArea/ts/adBasic.ts
  35. 5646 0
      src/components/businessMoudle/batchGdt/configArea/ts/mock.ts
  36. 85 34
      src/components/businessMoudle/batchGdt/configArea/ts/preview.ts

File diff suppressed because it is too large
+ 1 - 1
dist/assets/index.ff86c505.js


File diff suppressed because it is too large
+ 1 - 1
dist/assets/index.22d1014a.css


+ 1 - 1
dist/index.html

@@ -6,7 +6,7 @@
6 6
     <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
7 7
     <title>广告系统</title>
8 8
       <script src="//open.thunderurl.com/thunder-link.js"></script>
9
-    <script type="module" crossorigin src="./assets/index.ff86c505.js"></script>
9
+    <script type="module" crossorigin src="./assets/index.45aac075.js"></script>
10 10
     <link rel="modulepreload" href="./js/@vue/@vue.e7eafc10.js">
11 11
     <link rel="modulepreload" href="./js/vue-router/vue-router.647267ed.js">
12 12
     <link rel="modulepreload" href="./js/axios/axios.27022086.js">

File diff suppressed because it is too large
+ 1 - 1
dist/js/_dialog/_dialog.496a3147.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/_input/_input.94932971.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/_select/_select.16f85516.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/adTask/index.fc459026.js


File diff suppressed because it is too large
+ 0 - 1
dist/js/api/api.4a0d03d1.js


File diff suppressed because it is too large
+ 1 - 0
dist/js/api/api.78351f92.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/basisMoudle/accountManage.9da534e6.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/basisMoudle/error.45bc241a.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/basisMoudle/home.a8668516.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/basisMoudle/login.254f5f97.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/businessMoudle/adqManage.204819e5.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/collectClip/index.0e00a4f4.js


File diff suppressed because it is too large
+ 1 - 0
dist/js/configArea/index.beb9112f.js


File diff suppressed because it is too large
+ 0 - 1
dist/js/configArea/index.c5ad50b6.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/gdtList/index.c6ae3826.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/index/index.3605e8be.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/index/index.3da6b35c.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/layout/index.c9eab6fa.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/layout/index_head.c601c5d0.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/materialBlock/materialBlock.7a050dd1.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/materialLibrary/index.b301b70e.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/menuPermission/menuList.5c5b6fd2.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/miniprogram/index.aabdeba8.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/noData/noData.672c22d9.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/tableInfo/tableInfo.c6aac612.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/taskList/index.591ef728.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/timeScreen/timeScreen.d0ef5a6e.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/weekTime/weekTime.5ec6fe0a.js


+ 25 - 23
src/components/businessMoudle/batchGdt/configArea/basicInfo/index.vue

@@ -389,32 +389,36 @@ const deep_conversion_behavior_spec_fillBack = reactive({
389 389
 })
390 390
 const computed_deep_conversion_behavior_spec_fillBack = () => {
391 391
   let retrunNum = {min: '', max: ''}
392
-  if (form.deep_conversion_type == 'DEEP_CONVERSION_BEHAVIOR' && deep_conversion_behavior_spec.rate) {
393
-    let price_obj = {
394
-      min: ((form.bid_range_1?.min ? form.bid_range_1.min : 0) / Number(deep_conversion_behavior_spec.rate)).toFixed(2),
395
-      max: ((form.bid_range_1?.max ? form.bid_range_1.max : 0) / Number(deep_conversion_behavior_spec.rate)).toFixed(2)
396
-    }
397
-    deep_conversion_behavior_spec.min = price_obj.min
398
-    deep_conversion_behavior_spec.max = price_obj.max
399
-    retrunNum = price_obj
400
-    deep_conversion_behavior_spec_fillBack.min = retrunNum.min;
401
-    deep_conversion_behavior_spec_fillBack.max = retrunNum.max;
402
-  } 
403
-  watch_deep_conversion()
404
-  get_site_table(1, 'deep_bit_site')
392
+  nextTick(()=>{
393
+    if (form.deep_conversion_type == 'DEEP_CONVERSION_BEHAVIOR' && deep_conversion_behavior_spec.rate) {
394
+      let price_obj = {
395
+        min: ((form.bid_range_1?.min ? form.bid_range_1.min : 0) / Number(deep_conversion_behavior_spec.rate)).toFixed(2),
396
+        max: ((form.bid_range_1?.max ? form.bid_range_1.max : 0) / Number(deep_conversion_behavior_spec.rate)).toFixed(2)
397
+      }
398
+      deep_conversion_behavior_spec.min = price_obj.min
399
+      deep_conversion_behavior_spec.max = price_obj.max
400
+      retrunNum = price_obj
401
+      deep_conversion_behavior_spec_fillBack.min = retrunNum.min;
402
+      deep_conversion_behavior_spec_fillBack.max = retrunNum.max;
403
+    } 
404
+    watch_deep_conversion()
405
+    get_site_table(1, 'deep_bit_site')
406
+  })
405 407
 }
406 408
 
407 409
 const deep_conversion_behavior_spec_fillBack2 = ref('')
408 410
 const computed_deep_conversion_behavior_spec_fillBack2 = () => {
409 411
   let retrunNum: any = ''
410
-  if (form.deep_conversion_type == 'DEEP_CONVERSION_BEHAVIOR' && deep_conversion_behavior_spec.rate) {
411
-    let price = (form.bid_amount / Number(deep_conversion_behavior_spec.rate)).toFixed(2)
412
-    deep_conversion_behavior_spec.price = price
413
-    retrunNum = price
414
-    deep_conversion_behavior_spec_fillBack2.value = retrunNum
415
-  }
416
-  watch_deep_conversion()
417
-  get_site_table(1, 'deep_bit_site')
412
+  nextTick(()=>{
413
+    if (form.deep_conversion_type == 'DEEP_CONVERSION_BEHAVIOR' && deep_conversion_behavior_spec.rate) {
414
+      let price = (form.bid_amount / Number(deep_conversion_behavior_spec.rate)).toFixed(2)
415
+      deep_conversion_behavior_spec.price = price
416
+      retrunNum = price
417
+      deep_conversion_behavior_spec_fillBack2.value = retrunNum
418
+    }
419
+    watch_deep_conversion()
420
+    get_site_table(1, 'deep_bit_site')
421
+  })
418 422
 }
419 423
 /**获取默认值 */
420 424
 const form: any = reactive(props.dataFillBack || {})
@@ -681,14 +685,12 @@ const onChangeKey = ({ val, key }) => {
681 685
 const changeOptimizationGoal = () => {
682 686
   optimizationGoal_1.value.forEach((item)=>{
683 687
     if(item.goal == form.optimization_goal){
684
-      console.log(form.deep_conversion_type)
685 688
       let deep_info:any[] = []
686 689
       if(form.deep_conversion_type == 'DEEP_CONVERSION_BEHAVIOR'){//优化转化行为
687 690
         deep_info = _.cloneDeep(item.deep_behaviors) || []
688 691
       }else if (form.deep_conversion_type == 'DEEP_CONVERSION_WORTH') {//优化ROI
689 692
         deep_info = _.cloneDeep(item.deep_worths) || []
690 693
       }
691
-      console.log(deep_info)
692 694
       deep_info = deep_info.filter((v)=>{
693 695
         return v.name && v.name != '' && v.goal && v.goal != ''
694 696
       })

+ 17 - 2
src/components/businessMoudle/batchGdt/configArea/index.vue

@@ -169,6 +169,7 @@ import { previewCompute } from './ts/preview'
169 169
 import { materialDeclare, handleMultiple } from './ts/material'
170 170
 import { IOuterConfigRule, basicInfoDeclare, handleAdBasic} from './ts/adBasic'
171 171
 import handleJudge from './ts/judgeEvent'
172
+import { mockEvent } from './ts/mock'
172 173
 const { proxy } = getCurrentInstance() as any;
173 174
 // 全局方法定义
174 175
 const NumberHandle = proxy.$NumberHandle
@@ -176,6 +177,7 @@ const emit = defineEmits<{
176 177
   (event: "openPreEvent", val: boolean,arr:any): void; //打开预览区
177 178
 }>();
178 179
 
180
+const isMock = ref(false)
179 181
 // S 参数声明
180 182
 const {
181 183
   basicInfoData
@@ -380,7 +382,7 @@ const previewObj = reactive<reactiveTableAndAny>({
380 382
   basicInfoData: {},//广告基本信息
381 383
 })
382 384
 const openPreAreaEvent = () => {
383
-  if(!judgeEvent(-1)){ return }
385
+  if(!judgeEvent(-1) && !isMock.value){ return }
384 386
   openPreAreaLoading.value = true
385 387
   computeCount(()=>{
386 388
     openPreEvent()
@@ -531,7 +533,20 @@ const updateHaveContent = (id:number,chooseNum?:number,minusFlag?:boolean,clearF
531 533
 }
532 534
 /**计算广告数、计划数、账号数 并获取计划列表信息 */
533 535
 const computeCount = (cb?) => {
534
-  if( !judgeEvent(7, true) ) return; // 创意文案之前未填写,则不进行下面逻辑
536
+  if(isMock.value){
537
+    let { pageInfo_mock, cMaterial_mock, basicInfoData_mock }  = mockEvent()
538
+    for(let key in pageInfo_mock) {
539
+      pageInfo[key] = pageInfo_mock[key]
540
+    }
541
+    for(let key in cMaterial_mock) {
542
+      cMaterial[key] = cMaterial_mock[key]
543
+    }
544
+    for(let key in basicInfoData_mock) {
545
+      basicInfoData[key] = basicInfoData_mock[key]
546
+    }
547
+  }else{
548
+    if( !judgeEvent(7, true) ) return; // 创意文案之前未填写,则不进行下面逻辑
549
+  }
535 550
   previewCompute(pageInfo, cMaterial, basicInfoData).then((res:any)=>{
536 551
     pageInfo.num_total.accNum = res.num_total.accNum;
537 552
     pageInfo.num_total.planNum = res.num_total.planNum;

+ 0 - 3
src/components/businessMoudle/batchGdt/configArea/ts/adBasic.ts

@@ -132,7 +132,6 @@ export function handleAdBasic({
132 132
   }
133 133
   /**广告信息外部配置获取 */
134 134
   const getButtonBasicOuter = (res) => {
135
-    console.log(res)
136 135
     for (let i in basicInfoData.outerConfig) {
137 136
       basicInfoData.outerConfig[i].enabled = false
138 137
     }
@@ -173,7 +172,6 @@ export function handleAdBasic({
173 172
     'other'?: string
174 173
   }
175 174
   const basicOuterClose = ({ key, val, type, other }: IBasicOuterClose) => {
176
-    console.log(key, val, type)
177 175
     basicInfoData.outerConfig[key].visible = false;
178 176
     if (type == 'submit') {
179 177
       basicInfoData.outerConfig[key].value = val ? val : {};
@@ -182,7 +180,6 @@ export function handleAdBasic({
182 180
         basicInfoData.outerConfig[key].other = other
183 181
       }
184 182
     }
185
-    console.log(basicInfoData.outerConfig)
186 183
   }
187 184
 
188 185
   const isCompleteEvent = (data) => {

File diff suppressed because it is too large
+ 5646 - 0
src/components/businessMoudle/batchGdt/configArea/ts/mock.ts


+ 85 - 34
src/components/businessMoudle/batchGdt/configArea/ts/preview.ts

@@ -8,12 +8,15 @@ export const previewCompute = (pageInfo, cMaterial, basicInfoData_cr,) => {
8 8
 
9 9
     basicInfoData = _.cloneDeep(basicInfoData_cr)
10 10
 
11
-    console.log('定向包:', pageInfo.directObj)
12
-    console.log('创意素材:', cMaterial.resResult)
13
-    console.log('创意文案:', pageInfo.copywriterInfoData.data)
14
-    console.log('落地页:', pageInfo.copyLandPageInfoData)
15
-    console.log('规则配置:', pageInfo.RuleConfigObj)
16
-    console.log('外部配置:', basicInfoData.outerConfig)
11
+    console.log('pageInfo', pageInfo)
12
+    console.log('cMaterial', cMaterial)
13
+    console.log('basicInfoData_cr', basicInfoData_cr)
14
+    // console.log('定向包:', pageInfo.directObj)
15
+    // console.log('创意素材:', cMaterial.resResult)
16
+    // console.log('创意文案:', pageInfo.copywriterInfoData.data)
17
+    // console.log('落地页:', pageInfo.copyLandPageInfoData)
18
+    // console.log('规则配置:', pageInfo.RuleConfigObj)
19
+    // console.log('外部配置:', basicInfoData.outerConfig)
17 20
 
18 21
     let accNum = pageInfo.accIdsList.length;
19 22
 
@@ -32,7 +35,7 @@ export const previewCompute = (pageInfo, cMaterial, basicInfoData_cr,) => {
32 35
               if (main_1.id == i) {
33 36
                 pageInfo.copyLandPageInfoData.data[i].forEach((item) => {
34 37
                   main_2.ad_list.push({
35
-                    self_land_page: item
38
+                    self_land_page: _.cloneDeep(item)
36 39
                   })
37 40
                 });
38 41
               }
@@ -42,7 +45,7 @@ export const previewCompute = (pageInfo, cMaterial, basicInfoData_cr,) => {
42 45
       })
43 46
     }
44 47
     // 创意素材
45
-    let ad_show_list_scyc = JSON.parse(JSON.stringify(ad_show_list))
48
+    let ad_show_list_scyc = _.cloneDeep(ad_show_list)
46 49
     ad_show_list.forEach((item) => {
47 50
       for (let i = 0; i < item.chooseList.length; i++) {
48 51
         let v_item = item.chooseList[i]
@@ -53,18 +56,21 @@ export const previewCompute = (pageInfo, cMaterial, basicInfoData_cr,) => {
53 56
       let item = ad_show_list[index]
54 57
       for (let v_index = 0; v_index < item.chooseList.length; v_index++) {
55 58
         let v_item = item.chooseList[v_index]
56
-        cMaterial.resResult.forEach((main) => {
57
-          if (item.id == main.account_id) {
59
+        cMaterial.resResult.forEach((main2) => {
60
+          if (item.id == main2.account_id) {
58 61
             let ad_list: any = _.cloneDeep(ad_show_list_scyc[index].chooseList[v_index].ad_list);
59 62
             let common_obj = {
60 63
               ad_name: basicInfoData.fillBack.ad_name,
61 64
               bid_amount: '我是广告出价',
65
+              deep_bid_amount: '我是深度出价',
66
+              deep_roi: '我是期望ROI',
62 67
               // bid_amount_optimization_goal: '优化目标',
63 68
               targeting_id: v_item.targeting_id,
64 69
               targeting_name: v_item.targeting_name
65 70
             }
66 71
             if (ad_list.length > 0) {
67 72
               ad_list.forEach((v) => {
73
+                let main = _.cloneDeep(main2)
68 74
                 if (v.self_land_page) {
69 75
                   main['page_spec']['mini_program_spec']['mini_program_id'] = v.self_land_page.appid
70 76
                   main['page_spec']['mini_program_spec']['mini_program_path'] = v.self_land_page.applink
@@ -74,10 +80,10 @@ export const previewCompute = (pageInfo, cMaterial, basicInfoData_cr,) => {
74 80
                     main['link_page_spec']['mini_program_spec']['mini_program_path'] = v.self_land_page.applink
75 81
                   }
76 82
                 }
77
-                v_item.ad_list.push(Object.assign(common_obj, { adcreatives_info: main }))
83
+                v_item.ad_list.push(Object.assign(_.cloneDeep(common_obj), { adcreatives_info: main }))
78 84
               })
79 85
             } else {
80
-              v_item.ad_list.push(Object.assign(common_obj, { adcreatives_info: main }))
86
+              v_item.ad_list.push(Object.assign(common_obj, { adcreatives_info: main2 }))
81 87
             }
82 88
           }
83 89
         });
@@ -130,23 +136,25 @@ export const previewCompute = (pageInfo, cMaterial, basicInfoData_cr,) => {
130 136
     });
131 137
     ad_show_list.forEach((item, index) => {
132 138
       acc_plan_ad_count[item.id] = { 'plan_count': 0, 'ad_count': 0, }
139
+      let common_obj = {
140
+        'account_id': item.id,
141
+        'campaign_name': pageInfo.RuleConfigObj.campaign_name,
142
+        'daily_budget': Number(pageInfo.RuleConfigObj.daily_budget),
143
+        'total_budget': Number(pageInfo.RuleConfigObj.total_budget),
144
+        'campaign_status': pageInfo.RuleConfigObj.campaign_status,
145
+        'speed_mode': pageInfo.RuleConfigObj.speed_mode,
146
+      }
133 147
       item.chooseList.forEach((item_1) => {
134 148
         adNum += item_1.ad_list.length;
135 149
         acc_plan_ad_count[item.id].ad_count += item_1.ad_list.length;
136
-        let common_obj = {
137
-          'account_id': item.id,
138
-          'campaign_name': pageInfo.RuleConfigObj.campaign_name,
139
-          'daily_budget': Number(pageInfo.RuleConfigObj.daily_budget),
140
-          'total_budget': Number(pageInfo.RuleConfigObj.total_budget),
141
-          'campaign_status': pageInfo.RuleConfigObj.campaign_status,
142
-          'speed_mode': pageInfo.RuleConfigObj.speed_mode,
143
-        }
144 150
         if (item_1.ad_list.length > ad_max) {
145 151
           function lun(num) {
152
+            let max_ad_list = _.cloneDeep(item_1.ad_list)
146 153
             planNum += 1
147 154
             acc_plan_ad_count[item.id].plan_count += 1;
148
-            last_ad_show_list[index].chooseList.push(Object.assign(common_obj, { 'ad_list': item_1.ad_list.slice(num, (num + ad_max)) }))
149
-            if ((num + ad_max) < item_1.ad_list.length) {
155
+            let list = Object.assign(_.cloneDeep(common_obj), { 'ad_list': max_ad_list.slice(num, (num + ad_max)) })
156
+            last_ad_show_list[index].chooseList.push(list)
157
+            if ((num + ad_max) < max_ad_list.length) {
150 158
               lun(num + ad_max)
151 159
             }
152 160
           }
@@ -231,7 +239,9 @@ export const previewCompute = (pageInfo, cMaterial, basicInfoData_cr,) => {
231 239
           }
232 240
           item_ad.adcreatives_info.adcreative_name = handleName(item_ad.adcreatives_info.adcreative_name, wildcard)
233 241
           item_ad.ad_name = handleName(item_ad.ad_name, Object.assign(wildcard, { 'dynamic': (Number(basicInfoData.fillBack.dynamic_num) + ad_count) }))
234
-          item_ad.bid_amount = getBidAmount(ad_count, adNum)
242
+          item_ad.bid_amount = getBidAmount(ad_count, adNum, 'bid_amount')
243
+          item_ad.deep_bid_amount = getBidAmount(ad_count, adNum, 'deep_bid_amount')
244
+          item_ad.deep_roi = getBidAmount(ad_count, adNum, 'deep_roi')
235 245
           item_ad.optimization_goal_name = basicInfoData.fillBack.optimization_goal_name
236 246
           ad_count++;
237 247
           // E 计划名、广告名、素材名
@@ -286,20 +296,61 @@ export const previewCompute = (pageInfo, cMaterial, basicInfoData_cr,) => {
286 296
   })
287 297
 }
288 298
 
289
-/**获取出价  ad_count为第几个广告,ad_total广告总数*/
290
-const getBidAmount = (ad_count, ad_total) => {
299
+/**获取出价 、 深度优化出价 、 期望ROi  ad_count为第几个广告,ad_total广告总数*/
300
+const getBidAmount = (ad_count, ad_total, type) => {
301
+  if(ad_total <= 0){
302
+    return 0
303
+  }
304
+  let regular_way = '';
305
+  let min:number = 0;
306
+  let max:number = 0;
307
+  if ( type == 'bid_amount' ) {//出价
308
+    if( basicInfoData.fillBack.bid_way == 1 ){
309
+      regular_way = basicInfoData.fillBack.bid_amount
310
+    }
311
+    if ( basicInfoData.fillBack.bid_way == 3 || basicInfoData.fillBack.bid_way == 2 ) {
312
+      max = Number(basicInfoData.fillBack.bid_range.split('-')[1])
313
+      min = Number(basicInfoData.fillBack.bid_range.split('-')[0])
314
+    }
315
+  }
316
+  if( type == 'deep_bid_amount' && basicInfoData.fillBack.deep_conversion_behavior_spec) {//深度出价
317
+    let spec = JSON.parse( basicInfoData.fillBack.deep_conversion_behavior_spec )
318
+    if( basicInfoData.fillBack.bid_way == 1 ){
319
+      regular_way = spec.price
320
+    }
321
+    if ( basicInfoData.fillBack.bid_way == 3 || basicInfoData.fillBack.bid_way == 2 ) {
322
+      min = Number(spec?.min);
323
+      max = Number(spec?.max);
324
+    }
325
+  }
326
+  if( type == 'deep_roi' && basicInfoData.fillBack.deep_conversion_worth_spec) {//期望roi
327
+    let spec = JSON.parse( basicInfoData.fillBack.deep_conversion_worth_spec )
328
+    if( basicInfoData.fillBack.bid_way == 1 ){
329
+      regular_way = spec.roi
330
+    }
331
+    if ( basicInfoData.fillBack.bid_way == 3 || basicInfoData.fillBack.bid_way == 2 ) {
332
+      min = Number(spec?.min);
333
+      max = Number(spec?.max);
334
+    }
335
+  }
291 336
   if (basicInfoData.fillBack.bid_way == 1) {//固定出价
292
-    return basicInfoData.fillBack.bid_amount
337
+    return regular_way
338
+  }
339
+  if (basicInfoData.fillBack.bid_way == 2) {//随机出价
340
+    return parseFloat((Math.random() * (max - min) + min).toFixed(2))
293 341
   }
294
-  if (basicInfoData.fillBack.bid_way == 2 || basicInfoData.fillBack.bid_way == 3) {
295
-    let max = Number(basicInfoData.fillBack.bid_range.split('-')[1])
296
-    let min = Number(basicInfoData.fillBack.bid_range.split('-')[0])
297
-    if (basicInfoData.fillBack.bid_way == 2) {//随机出价
298
-      return parseFloat((Math.random() * (max - min) + min).toFixed(2))
342
+  if (basicInfoData.fillBack.bid_way == 3) { //阶梯出价
343
+    if(max == min && min == 0 ) {
344
+      return 0
345
+    }
346
+    if(ad_total == 1) {
347
+      return min
299 348
     }
300
-    if (basicInfoData.fillBack.bid_way == 3) { //阶梯出价
301
-      let step = parseFloat(((max - min) / (ad_total - 1)).toFixed(2));// 计算等差差值
302
-      return parseFloat((min + ad_count * step).toFixed(2))
349
+    let step = parseFloat(((max - min) / (ad_total - 1)).toFixed(2));// 计算等差差值
350
+    let last_num = parseFloat((min + ad_count * step).toFixed(2))
351
+    if( last_num > max ) {
352
+      last_num = max
303 353
     }
354
+    return last_num
304 355
   }
305 356
 }