Procházet zdrojové kódy

'提交上线02-24v1.1.4'

魏志佳 před 4 roky
rodič
revize
bd37833aab

+ 1 - 0
src/views/modules/Statistics/KSAccountReport.vue

@@ -1094,6 +1094,7 @@ export default {
     //请求table的数据
     tableHttp(params){
       this.loading=true;
+      this.tableData=[]
           postAction('/ctop/kuaishou/dailyPage/report/list', {
               mediaId:this.mediaId,
               discount:this.discount,

+ 19 - 4
src/views/modules/Statistics/components/ratioModal.vue

@@ -5,7 +5,7 @@ th div {
 </style>
 <template>
   <div class="data-display-statistics">
-    <a-modal title="环比展示" v-model="visible" @ok="handleOk" width="90%">
+    <a-modal title="环比展示" v-model="visible" @ok="handleOk" width="90%" :footer='null'>
       <div v-if="url">
         <video class="video" :src="url" controls="controls" style="height:200px;" v-show="showVideo">
           您的浏览器不支持 video 标签。
@@ -42,6 +42,10 @@ th div {
             <span v-if="record.statDate == '环比'">{{ conversionPrice | getBo }}</span>
             <span v-else>{{ conversionPrice | toFixtwo }}</span>
           </span>
+           <span slot="play3sRate" slot-scope="play3sRate,record">
+             <span v-if="record.statDate == '环比'">{{ play3sRate }}</span>
+            <span v-else>{{ play3sRate | getBo }}</span>
+           </span>
         </a-table>
       </a-card>
     </a-modal>
@@ -145,7 +149,15 @@ const columnsDetail = [
     key: 'conversionPrice',
     scopedSlots: { customRender: 'conversionPrice' },
     align: 'center'
-  }
+  },
+  {
+    title: '3s播放率',
+    dataIndex: 'play3sRate',
+    key: 'play3sRate',
+    scopedSlots: { customRender: 'play3sRate' },
+    align: 'center',
+    
+  },
 ]
 export default {
   name: 'ration-modal',
@@ -227,7 +239,8 @@ export default {
               conversionPrice: res.result.chainRatio.conversionPriceProportion,
               actionRatio: res.result.chainRatio.actionRatioProportion,
               actionCost: res.result.chainRatio.actionCostProportion,
-              photoShow: (res.result.chainRatio.showProportion * 100).toFixed(2) + '%'
+              photoShow: (res.result.chainRatio.showProportion * 100).toFixed(2) + '%',
+              play3sRate: (res.result.chainRatio.conversionPlay3sRate * 100).toFixed(2) + '%'
             }
             this.dataDetail.push(now)
             this.dataDetail.push(yesterday)
@@ -240,7 +253,9 @@ export default {
         }
       })
     },
-    handleOk() {}
+    handleOk() {
+      this.visible = true
+    }
   },
   watch: {},
   distoryed() {}

+ 19 - 2
src/views/modules/Statistics/materialStatistics.vue

@@ -93,7 +93,7 @@
             size="middle"
             :customRow="rowClick"
             :loading="loading"
-            :scroll="{ x: 2300 }"
+            :scroll="{ x: 2600 }"
           >
             <div slot="url" slot-scope="url">
               <video @click.stop class="video" :src="url" controls="controls" style="height:200px;width:112.5px">
@@ -106,6 +106,7 @@
             <span slot="photoClickCost" slot-scope="photoClickCost">{{ photoClickCost | toFixtwo }}</span>
             <span slot="actionCost" slot-scope="actionCost">{{ actionCost | toFixtwo }}</span>
             <span slot="conversionPrice" slot-scope="conversionPrice">{{ conversionPrice | toFixtwo }}</span>
+            <span slot="play3sRate" slot-scope="play3sRate">{{ play3sRate | getBo }}</span>
             <span slot="operation" slot-scope="text,record">
                 <a href="javascript:;" @click.stop="showRelevantPeople(record)">查看相关人员</a>
             </span>
@@ -248,6 +249,14 @@ const columns = [
     sorter: (a, b) => a.conversionPrice - b.conversionPrice
   },
   {
+    title: '3s播放率',
+    dataIndex: 'play3sRate',
+    key: 'play3sRate',
+    scopedSlots: { customRender: 'play3sRate' },
+    align: 'center',
+    sorter: (a, b) => a.play3sRate - b.play3sRate
+  },
+  {
     title:'相关人员',
     dataIndex:'operation',
     key:'operation',
@@ -341,7 +350,15 @@ const columnsDetail = [
     key: 'conversionPrice',
     scopedSlots: { customRender: 'conversionPrice' },
     align: 'center'
-  }
+  },
+  {
+    title: '3s播放率',
+    dataIndex: 'play3sRate',
+    key: 'play3sRate',
+    scopedSlots: { customRender: 'play3sRate' },
+    align: 'center',
+    
+  },
 ]
 export default {
   name: 'data-display-statistics',

+ 44 - 2
src/views/modules/Statistics/newPlanStatic/newPlanStatic.vue

@@ -304,6 +304,10 @@
             </a-tab-pane>
             <a-tab-pane :key="2" :tab="(tabKey==1||tabKey==2&&value==1)?'有效计划数':'有效推广组'">       
             </a-tab-pane>
+
+            <a-button slot="tabBarExtraContent" @click="exportExcel" :loading="exportloading" v-show="tabKey==2">
+              导出报表
+            </a-button>
           </a-tabs>
           <a-table :columns="columns" :dataSource="dataTable" :pagination="false" :loading="loading" bordered>             
           </a-table> 
@@ -325,7 +329,7 @@ import moment from 'moment'
 import countTo from 'vue-count-to'
 import lifting from '../components/lifting'
 import {  getKsAccountReport, getKsDetail, getReportList } from '@api/video.js'
-import { getAction, postAction } from '@/api/manage'
+import { getAction, postAction ,downFile, downFilePost } from '@/api/manage'
 
 import timeCheck from '../components/timeCheck'
 
@@ -747,8 +751,9 @@ export default {
      datePick
   },
 
-  data: function() {
+  data() {
     return {
+      exportloading:false,
       value:2,
       KSaccountList:[],
       TTaccountList:[],
@@ -794,6 +799,43 @@ export default {
     }
   },
   methods: {
+    //导出报表
+        exportExcel() {
+            this.exportloading=true;
+            let url='';
+            let nameType=''
+            if(this.value==2){
+              url='/ctop/kuaishou/newGroup/report/excel'
+            }else{
+              url='/ctop/kuaishou/newPlan/report/excel'
+            }
+            if(this.value==2){
+                nameType='广告组'
+            }else if(this.value==1){
+                nameType='广告计划'
+            }
+            downFilePost(url,{
+              accountIds:this.accountId,
+              userId:this.operate || '',
+              startDate:this.dateValue[0].format('YYYY-MM-DD'),
+              endDate:this.dateValue[1].format('YYYY-MM-DD'),
+              target:this.tableTab=='1'?'new':'valid',
+              order:this.order
+            }).then(res => {
+                this.exportloading=false;
+                let blob = new Blob([res], {
+                    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+                })
+                let downloadElement = document.createElement('a')
+                let href = window.URL.createObjectURL(blob) //创建下载的链接
+                downloadElement.href = href
+                downloadElement.download = moment().format('YYYY-MM-DD') + nameType+'.xlsx' //下载后文件名
+                document.body.appendChild(downloadElement)
+                downloadElement.click() //点击下载
+                document.body.removeChild(downloadElement) //下载完成移除元素
+                window.URL.revokeObjectURL(href) //释放掉blob对象
+            })
+        },
     dataTypeChange(e){
       console.log(e.target.value)
         if(this.value==2){

+ 3 - 1
src/views/modules/advertiser/ProjectList.vue

@@ -300,7 +300,9 @@ export default {
         324: '唤起应用',
         715: '微信复制优化目标',
         716: '多转化事件',
-        396:'注册优化目标'
+        396:'注册优化目标',
+        731:'广告观看5次',
+        732:'广告观看10次',
       }
       return data[sta]
     },

+ 1 - 0
src/views/modules/advertiser/ProjectMemberList.vue

@@ -858,6 +858,7 @@ export default {
       }
     },
     searchQuery() {
+      this.ipagination.current=1
       if (this.noTitleKey == 'participation') {
         this.getParticipateList()
       } else {

+ 2 - 0
src/views/modules/advertiser/modules/projectListModal.vue

@@ -115,6 +115,8 @@
 
                  <a-select-option :value="715">微信复制优化目标</a-select-option>
                  <a-select-option :value="716">多转化事件</a-select-option>
+                 <a-select-option :value="731">广告观看5次</a-select-option>
+                 <a-select-option :value="732">广告观看10次</a-select-option>
               </a-select>
             </a-form-item>
           </div>

+ 1 - 1
src/views/modules/autoLaunch/appIdList.vue

@@ -244,7 +244,7 @@ export default {
             editID:0,
 
             url: {               
-                list:'/ai/aiKuaiShouAppInfo/list',
+                list:'/ai/aiKuaiShouAppInfo/pageList',
                 delete:'/ctop/aiKuaishouAdvertiserStrategy/delete',
             },
 

+ 36 - 14
src/views/modules/autoLaunch/configLaunchInfo.vue

@@ -577,7 +577,7 @@
                         </a-form-item>
                         </div>
                     </div>
-                    <div class="row-item" v-if="(getFormData('ocpxActionType') == 180 || getFormData('ocpxActionType') == 53) &&groupTypeData.deepConversionTypes&&groupTypeData.deepConversionTypes.length > 0 ">
+                    <div class="row-item" v-if="(getFormData('ocpxActionType') == 180 || getFormData('ocpxActionType') == 53) && groupTypeData.deepConversionTypes && groupTypeData.deepConversionTypes.length > 0 ">
                         <div class="hint-item"></div>
                         <div class="label-item">
                         <div class="text-item">深度转化目标</div>
@@ -660,7 +660,7 @@
                         </div>    
                     </div>
                     
-                    <div class="row-item" v-if="(getFormData('ocpxActionType') == 180 || getFormData('ocpxActionType') == 53) &&groupTypeData.deepConversionTypes&&groupTypeData.deepConversionTypes.length > 0 ">
+                    <div class="row-item" v-if="(getFormData('ocpxActionType') == 180 || getFormData('ocpxActionType') == 53) && groupTypeData.deepConversionTypes && groupTypeData.deepConversionTypes.length > 0 ">
                         <div class="hint-item">
                         </div>
                         <div class="label-item">
@@ -723,6 +723,22 @@
                     <div class="row-item">
                         <div class="hint-item"></div>
                         <div class="label-item">
+                        <div class="text-item">创意制作方式</div>
+                        <div class="required-item"></div>
+                        </div>
+                        <div class="input-item">
+                        <a-form-item>
+                            <a-radio-group v-decorator="['openProgramCreate', { initialValue:2 }]">
+                                <a-radio-button :value='2'>不限</a-radio-button>
+                                <a-radio-button :value="0">自定义</a-radio-button>                            
+                                <a-radio-button :value="1">程序化</a-radio-button>                            
+                            </a-radio-group>
+                        </a-form-item>                       
+                        </div>
+                    </div>
+                    <div class="row-item">
+                        <div class="hint-item"></div>
+                        <div class="label-item">
                         <div class="text-item">是否开启历史素材挖掘</div>
                         <div class="required-item"></div>
                         </div>
@@ -859,7 +875,7 @@
                         <a-form-item >
                             <a-cascader
                                 :options="createOptions"
-                                v-decorator="['creativeCategory',{ rules: [{ required: whiteList.creative_category_switch, message: '创意分类必填' }] }]"
+                                v-decorator="['creativeCategory',{ rules: [{ initialValue:[],required: whiteList.creative_category_switch==1, message: '创意分类必填' }] }]"
                                 :fieldNames="fieldNames"
                                 placeholder="请选择创意分类"
                                 
@@ -879,7 +895,7 @@
                             mode="tags"
                             style="width: 100%"
                             placeholder="按回车生成标签"
-                            v-decorator="['creativeTag', { validator: creativeTagValid }]"
+                            v-decorator="['creativeTag',{rules: [ {initialValue:[],required: whiteList.creative_category_switch==1, validator: creativeTagValid }]}]"
                             dropdownClassName="display-none-selset"
                             :token-separators="[',', ' ', ',']"
                             >
@@ -1182,6 +1198,10 @@ const plainOptions = [
       value: 3,
       label: '视频播放页广告'
     },
+    {
+      value: 5,
+      label: '联盟广告'
+    },
 ];
 
 export default {
@@ -1578,13 +1598,15 @@ export default {
 
 
         creativeTagValid(rule, value, callback) {
-            if (value.length > 10) {
-                callback('创意标签最多填写10个,请删减')
-            } else if(value.length == 0){
-                if(this.whiteList.creative_category_switch==1){
+            console.log(rule, value, callback)
+            if(value.length == 0 || value==undefined){
+                // console.log(1)
                    callback('创意标签必须填写') 
-                }
-            }else {
+                
+            }else if (value.length > 10) {
+                callback('创意标签最多填写10个,请删减')
+            }else{
+                // console.log(2)
                 callback()
             }
         },
@@ -2169,8 +2191,8 @@ export default {
                     
                     this.accountId=res.result.accountId;
                     this.description=res.result.description
-                    res.result.creativeCategory=[parseInt(res.result.creativeCategory/10000),parseInt(res.result.creativeCategory/100),res.result.creativeCategory]
-
+                    res.result.creativeCategory=res.result.creativeCategory?[parseInt(res.result.creativeCategory/10000),parseInt(res.result.creativeCategory/100),res.result.creativeCategory]:[]
+                    //  res.result.creativeTag=res.result.creativeTag?res.result.creativeTag:[]
                     new Promise((resolve,reject)=>{
                         getAction('/kuaishou/batch/getIsActivate', {
                             accountId: this.accountId
@@ -2185,7 +2207,7 @@ export default {
                     
                     this.form.setFieldsValue({
                         ...res.result,
-                        creativeTag:res.result.creativeTag?JSON.parse(res.result.creativeTag):undefined,
+                        creativeTag:res.result.creativeTag?JSON.parse(res.result.creativeTag):[],
                         useAppMarket:res.result.useAppMarket==1?true:false,
                         isOpen:res.result.isOpen?res.result.isOpen:0,
                         cpaBid:res.result.cpaBid/1000,
@@ -2208,7 +2230,7 @@ export default {
                     this.noAreaBreak=res.result.noAreaBreak?true:false
                     this.noGenderBreak=res.result.noGenderBreak?true:false
                     this.noAgeBreak=res.result.noAgeBreak?true:false
-                    // this.appStore=res.result.appStore?JSON.parse(res.result.appStore):this.appStore
+                    this.appStore=res.result.appStore?JSON.parse(res.result.appStore):this.appStore
                     this.ageArr=[];
                     this.ageArr=JSON.parse(JSON.stringify(ageArr))
                     

+ 8 - 8
src/views/modules/autoLaunch/configLaunchList.vue

@@ -157,14 +157,14 @@ const strategyColumns = [
         scopedSlots: { customRender: 'cpaBid' },
         // sorter:() => {}
     },
-  {
-        title: '是否开启程序化创建',
-        dataIndex: 'openProgramCreate',
-        align: 'center',    
-        scopedSlots: { customRender: 'openProgramCreate' },
-        // sorter:() => {}
-        width:180,
-    },
+//   {
+//         title: '是否开启程序化创建',
+//         dataIndex: 'openProgramCreate',
+//         align: 'center',    
+//         scopedSlots: { customRender: 'openProgramCreate' },
+//         sorter:() => {},
+//         width:180,
+//     },
  {
     title: '操作',
     dataIndex: 'operator',

+ 8 - 0
src/views/modules/columnConst/accountConst.js

@@ -1218,6 +1218,14 @@ export const KScustomFields= [
           scopedSlots: { customRender: 'eventCreditGrantAppRate' },
           sorter:() => {}
         },
+        {
+          title: '3s播放率',
+          dataIndex: 'play3sRate',
+          tip: '3s播放数/素材曝光数',
+          align: 'center',    
+          scopedSlots: { customRender: 'play3sRate' },
+          sorter:() => {}
+        },
       ]
     },
     {

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 895 - 11
src/views/modules/stockWatch/accountPage.vue


+ 162 - 0
面试题.md

@@ -0,0 +1,162 @@
+#  2月22日 
+
+- 基础题
+  - 编写一个方法,该方法接收两个参数,分别为 k 和 一个无序的纯数字数组。该方法在执行后,会返回数组中第 k 大的数字。特别注意,如果数组中,有两位数值一样的数字,同数值数字排名并列。如 [3,1,3,2,5,4,5] 中,第 1 大的数字为 5,第2大的数字为 4,第5大的数字为 1?
+  - `__proto__`  和 prototype 之前有什么关系?
+  - call(), .apply() .bind() 的区别和作用?bind 方法如何来实现?
+
+- 附加题
+  - `JS`中基础数据类型有哪几种?了解包装对象么?
+  - 2、如何判断this?箭头函数的this是什么?
+
+# 2月23日
+
+- 基础题 
+  - 如何中断ajax请求?
+  - 什么是同步?什么是异步?
+  - 什么是宏任务?什么是微任务?
+
+- 附加题
+
+# 2月24日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 2月25日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 2月26日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 2月27日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 2月28日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月1日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月2日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月3日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月3日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月4日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月5日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月6日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月7日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月8日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月9日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月10日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月11日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月12日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月13日
+
+- 基础题
+  - 
+
+- 附加题
+
+# 3月14日
+
+- 基础题
+  - 
+
+- 附加题
+
+
+