浏览代码

提交代码

朱鑫波 4 年之前
父节点
当前提交
cfab2bfb0c

+ 4 - 4
package.json

@@ -25,7 +25,7 @@
     "codemirror": "^5.46.0",
     "cos-js-sdk-v5": "^0.5.26",
     "dayjs": "^1.8.0",
-    "echarts": "^4.3.0",
+    "echarts": "^4.9.0",
     "element-ui": "^2.13.0",
     "enquire.js": "^2.1.6",
     "html2canvas": "^1.0.0-rc.3",
@@ -48,6 +48,7 @@
     "vue-i18n": "^8.7.0",
     "vue-infinite-scroll": "^2.0.2",
     "vue-layer": "^1.0.2",
+    "vue-lazyload": "^1.3.3",
     "vue-loader": "^15.7.0",
     "vue-ls": "^3.2.0",
     "vue-oss-uploader": "^0.1.10",
@@ -61,8 +62,7 @@
     "vue-waterfall-easy": "^2.4.3",
     "vuedraggable": "^2.20.0",
     "vuex": "^3.0.1",
-    "vuex-class": "^0.3.1",
-    "vue-lazyload": "^1.3.3"
+    "vuex-class": "^0.3.1"
   },
   "devDependencies": {
     "@babel/polyfill": "^7.2.5",
@@ -131,4 +131,4 @@
     "last 2 versions",
     "not ie <= 8"
   ]
-}
+}

+ 1 - 0
src/utils/request.js

@@ -9,6 +9,7 @@ const key = "1"
 
 if (process.env.NODE_ENV == 'development') { 
     axios.defaults.baseURL = '/jeecg-boot'
+    
 } 
 else if (process.env.NODE_ENV == 'debug') { 
 } 

+ 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 - 1
src/views/modules/advertiser/ProjectMemberList.vue

@@ -859,7 +859,7 @@ export default {
       }
     },
     searchQuery() {
-      this.ipagination.current = 1
+      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',
             },
 

+ 252 - 58
src/views/modules/autoLaunch/configLaunchInfo.vue

@@ -133,13 +133,14 @@
                                 <a-select v-decorator="['appId', { rules: [{ required: true, message: '请选择目标应用' }] }]" showSearch allowClear
                                     placeholder="选择应用目标" optionFilterProp="children" style="width: 500px"  
                                    :filterOption="filterOption" @change="appIdChange" :mode="getFormData('singleAppid')==1?'defalut':'multiple'" :maxTagCount='1'>
-                                    <!-- <a-select-option value="0">请选择目标应用</a-select-option> -->
+                                    <a-select-option v-if="getFormData('singleAppid')==0" :value='0' @click="selectAllAppId">选择以下全部</a-select-option>
                                     <a-select-option v-for="appModel in appList" :key="appModel.appId" :value="appModel.appId">
                                         {{ appModel.appName }}&#12288;&nbsp;&#12288; {{ appModel.appVersion }}&#12288;&#12288;&#12288;{{
                                         appModel.platform | platform
                                         }}
                                     </a-select-option>
                                 </a-select>
+                                <a-button type="primary" @click="addApplication" style="margin-left:10px" :loading="tongbuLoading">刷新应用</a-button>
                             </a-form-item>
                         
                         </div>
@@ -179,7 +180,7 @@
                         <div class="hint-item"></div>
                         <div class="label-item">
                         <div class="text-item">转化追踪</div>
-                        <div class="required-item"></div>
+                        <!-- <div class="required-item"></div> -->
                         </div>
                         <div class="input-item">
                             <a-form-item  >
@@ -354,7 +355,7 @@
                                                 <template slot="populationType" slot-scope="populationType"> {{ populationType |customCrowdHandler}} </template>
                                             </a-table>
                                         </a-tab-pane>
-                                       
+                                        <a-button slot="tabBarExtraContent" type='primary' @click="refreshPopulation" :loading='refreshPopulationLoading'>刷新人群包</a-button>
                                     </a-tabs>
                                     
                             </div>  
@@ -380,7 +381,28 @@
                         </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>
+                        <div class="input-item">
+                        <a-form-item>
+                            <a-radio-group v-decorator="['isOpen', { initialValue: 0 }]" @change="isOpenChange">
+                                <a-radio-button :value='0'>关闭</a-radio-button>
+                                <a-radio-button :value="1">开启</a-radio-button>                            
+                            </a-radio-group>
+                        </a-form-item>
+                        <div style="width: 400px; margin-top: 24px;" class="inventoryTypes" v-show="getFormData('isOpen')==1">
+                            <div class="inventory-tags-lists-container">
+                                <a-checkbox v-model="noAgeBreak">不可突破年龄</a-checkbox>
+                                <a-checkbox v-model="noGenderBreak">不可突破性别</a-checkbox>
+                                <a-checkbox v-model="noAreaBreak">不可突破地域</a-checkbox>
+                            </div>
+                        </div>                  
+                        </div>
+                    </div>
             </div>
             <div class="ad-range2" v-if="useDirectional==0">
                 <div style="position:relative" class="ad-range2-title">
@@ -521,6 +543,7 @@
                             
 
                                 <a-select-option :value="2">行为数</a-select-option>
+                                <!-- v-if="getFormData('campaignType') == 2 && groupTypeData.isActivate == 1 -->
                                 <a-select-option :value="180"
                                 v-if="getFormData('campaignType') == 2 && groupTypeData.isActivate == 1">激活</a-select-option>
                                 <a-select-option :value="53" v-if="
@@ -554,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>
@@ -563,7 +586,7 @@
                         <div class="input-item">
                         <a-form-item>
                             <a-select v-decorator="['deepConversionType']" allowClear style="width: 200px">
-                                <a-select-option v-for="(items, index) of groupTypeData.deepConversionTypes" :key="index">
+                                <a-select-option v-for="(items, index) of groupTypeData.deepConversionTypes" :key="index" :value='items.deepConversionType'>
                                 {{ items.desc }}</a-select-option>
                             </a-select>
                         </a-form-item>
@@ -637,12 +660,13 @@
                         </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>
                             <!-- <div class="required-item"></div> -->
+                            <!-- {{getFormData('deepConversionBid')}} -->
                         </div>
                         <div class="input-item">
                             <a-form-item>
@@ -699,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>
@@ -835,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="请选择创意分类"
                                 
@@ -855,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="[',', ' ', ',']"
                             >
@@ -1137,10 +1177,10 @@ let retargetColumns=[
     },
     {
         title: '所属账号',
-        dataIndex: 'accountName',
+        dataIndex: 'accountId',
         sorter: true,
         width: '40%',
-        scopedSlots: { customRender: 'accountName' },
+        scopedSlots: { customRender: 'accountId' },
     },
     
 ]
@@ -1158,7 +1198,12 @@ const plainOptions = [
       value: 3,
       label: '视频播放页广告'
     },
+    {
+      value: 5,
+      label: '联盟广告'
+    },
 ];
+
 export default {
     components: {
         // selectCheckAll,
@@ -1171,6 +1216,11 @@ export default {
     },
     data() {
         return {
+            tongbuLoading:false,
+            refreshPopulationLoading:false,
+            noAreaBreak:false,
+            noGenderBreak:false,
+            noAgeBreak:false,
             regionList:[],
             editRecordId:'',
             spinning:false,
@@ -1197,7 +1247,7 @@ export default {
                 children: 'child',
             },
             createOptions: [],
-            appStore: ['huawei', 'oppo', 'vivo', 'xiaomi', 'meizu', 'smartisan'],
+            appStore: ["huawei", "oppo", "vivo", "xiaomi", "meizu", "smartisan"],
             sysType:1,
             indeterminateDirectional:false,
             checkAllDirectional:false,
@@ -1318,13 +1368,8 @@ export default {
                 //     }
                 // })
                 this.getAppList()
-                getAction('/kuaishou/batch/getIsActivate', {
-                    accountId: this.accountId
-                }).then(res => {
-                    if (res.success) {
-                        this.groupTypeData = res.result
-                    }
-                })
+                
+               
 
                 getAction('/kuaishou/batch/getCreativeCategory', {
                     accountId:this.accountId,
@@ -1339,7 +1384,8 @@ export default {
             }else{
 
             }
-        }
+        },
+        
     },
     computed: {
             
@@ -1383,8 +1429,71 @@ export default {
             },
     },
     methods: {
+        refreshPopulation(){
+            if(this.accountId){
+                this.refreshPopulationLoading = true
+                // this.$refs.application.showApplication()
+                getAction('/kuaishou/batch/pullPopulationList', {
+                    accountId: this.accountId
+                }).then(res => {
+                    if (res.success) {
+                        this.refreshPopulationLoading = false
+                        this.$message.success(res.message)
+                        this.retargetTabChange()
+                    } else {
+                        this.refreshPopulationLoading = false
+                        this.$message.error(res.message)
+                    }
+                })
+            }else{
+                this.$message.error('请先选择账户')
+            }
+        },
+        addApplication() {
+            if(this.accountId){
+                this.tongbuLoading = true
+                // this.$refs.application.showApplication()
+                getAction('/kuaishou/batch/syncAppList', {
+                accountId: this.accountId
+                }).then(res => {
+                if (res.success) {
+                    this.tongbuLoading = false
+                    this.$message.success(res.message)
+                    this.getAppList()
+                } else {
+                    this.tongbuLoading = false
+                    this.$message.error(res.message)
+                }
+                })
+            }else{
+                this.$message.error('请先选择账户')
+            }
+            
+        },
+        getIsActivate(val){
+            let params={};
+                params.accountId=this.accountId;
+                params.campaignType=this.getFormData('campaignType');
+                params.appId=val
+                
+                getAction('/kuaishou/batch/getIsActivate',params).then(res => {
+                    if (res.success) {
+                        this.groupTypeData = res.result
+                    }
+                })
+        },
+
+        isOpenChange(e){
+            this.noAreaBreak=false;
+            this.noGenderBreak=false;
+            this.noAgeBreak=false;
+        },
+        selectAllAppId(){
+           
+            console.log(this.getFormData('appId'))
+        },
         singleAppidChange(e){
-            console.log(e.target.value,this.getFormData('appId'));
+            // console.log(e.target.value,this.getFormData('appId'));
             this.form.setFieldsValue({
                 appId:undefined
             })
@@ -1489,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()
             }
         },
@@ -1540,7 +1651,38 @@ export default {
             this.siteList=[]
             
             // this.getPageList(val)
+            if(this.getFormData('singleAppid')==0){
+                if(val.indexOf(0)>-1){
+                    let appidArr=this.appList.map(item=>{
+                        return item.appId
+                    })
+                    // setTimeout(()=>{
+                        
+                    //     this.form.setFieldsValue({
+                    //         appId:appidArr
+                    //     })
+                    // },0)
+                    this.$nextTick(()=>{
+                        this.form.setFieldsValue({
+                            appId:appidArr
+                        })
+                    })
+                
+                }
+            }
             
+           if(val!=undefined || val.length>0){
+                if(this.getFormData('campaignType')==2){
+                    
+                    if(this.getFormData('singleAppid')==1){
+                        this.getIsActivate(val)
+                    }else{
+                        this.getIsActivate(val[0])
+                    }
+                    
+                }
+               
+           }
         },
         disabledDate(current) {
            
@@ -1624,7 +1766,7 @@ export default {
                                 ele.key=ele.orientationId   
                                 ele.id= ele.orientationId 
                                 ele.name=ele.orientationName+"("+ele.orientationId+")"
-                                ele.accountName=this.accountInfo.title
+                                // ele.accountName=this.accountInfo.title
                                 ele.accountId=this.accountId               
                             })
                             // this.retargetData=res.data;
@@ -1759,7 +1901,7 @@ export default {
         this.$nextTick(()=>{
   
             this.form.validateFields((err, values) => {
-                   
+                console.log(values) 
                 if (!err) {                   
                     this.goNextloading=true;
                     if(this.district!='NONE'){
@@ -1815,10 +1957,15 @@ export default {
                     // }
                     if(this.sysType==1&&this.getData('useAppMarket')){
                         values.appStore=JSON.stringify(this.appStore)
+                    }else if(this.sysType==1&&!this.getData('useAppMarket')){
+                        values.appStore="[]"
                     }
                     if(values.cpaBid){
                         values.cpaBid=parseInt(values.cpaBid*1000)
                     }
+                    if(values.deepConversionBid){
+                        values.deepConversionBid=parseInt(values.deepConversionBid*1000)
+                    }
                  
                     if(values.creativeCategory&&values.creativeCategory.length>0){
                         values.creativeCategory=values.creativeCategory[values.creativeCategory.length-1]
@@ -1829,6 +1976,11 @@ export default {
                     values.accountId = this.accountId
                    
                     values.creativeTag=values.creativeTag?JSON.stringify(values.creativeTag):undefined
+
+                    values.noAreaBreak=this.noAreaBreak?1:0
+                    values.noGenderBreak=this.noGenderBreak?1:0
+                    values.noAgeBreak=this.noAgeBreak?1:0
+
                     console.log('Received values of form: ', values)
                     let url=''
                     if(this.editRecordId){
@@ -2039,17 +2191,49 @@ 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
+                        }).then(res => {
+                            if (res.success) {
+                                this.groupTypeData = res.result
+                                resolve()
+                            }
+                        })
+                    }).then(r=>{
+
+                    
                     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,
                         appId:res.singleAppid?JSON.parse(res.result.appIdArray)[0]:JSON.parse(res.result.appIdArray)
                     })
+                    if((this.getFormData('ocpxActionType') == 180 || this.getFormData('ocpxActionType') == 53) && this.groupTypeData.deepConversionTypes&&this.groupTypeData.deepConversionTypes.length > 0){
+                        setTimeout(()=>{
+                        this.form.setFieldsValue({
+                            deepConversionType:res.result.deepConversionType,
+                        })
+                        if(res.result.deepConversionBid!=null){
+                            this.form.setFieldsValue({
+                                deepConversionBid:res.result.deepConversionBid/1000,  
+                            }) 
+                        }
+                    },0)
+                    }
+                    
+                    console.log(this.getFormData('deepConversionBid'))
+                    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.ageArr=[];
                     this.ageArr=JSON.parse(JSON.stringify(ageArr))
+                    
                     let agesRange=res.result.agesRange?JSON.parse(res.result.agesRange):[]
                     if(agesRange.length>0){
                         agesRange.forEach((item,index)=>{                   
@@ -2111,11 +2295,15 @@ export default {
 
                     
                     this.spinning=false;
+                                                     
+               
+                    })
                 })
             }
         },
 
         getpopulationlist(){
+            this.retargetDataAll=[]
             getAction('/kuaishou/batch/getPopulationList',{
                 accountId:this.accountId
             }).then((res)=>{
@@ -2130,13 +2318,22 @@ export default {
                         ele.accountId=this.accountId               
                     })
                     // this.retargetData=res.data;
-                    this.retargetDataAll=[...this.retargetDataAll,...res.result];
+                    // this.retargetDataAll=[...this.retargetDataAll,...res.result];
+                     this.retargetDataAll=[...res.result];
                     
                 }
             })
         }
     },
-    
+    created() {
+        if(this.$route){
+            let editRecordId=this.$route.query.id;
+            if(editRecordId){
+                this.editRecordId=editRecordId;
+                this.editEchoPage()
+            }
+        }
+    },
     mounted() {
         this.accountHttp()
         
@@ -2146,13 +2343,7 @@ export default {
         
         this.strategyName ='[预设]_'+ strategyNamepart+'_' + moment().format('MM_DD_hh:mm') ;
         this.getActionBarText()
-        if(this.$route){
-            let editRecordId=this.$route.query.id;
-            if(editRecordId){
-                this.editRecordId=editRecordId;
-                this.editEchoPage()
-            }
-        }
+        
         
     },
 
@@ -2178,55 +2369,55 @@ export default {
         customCrowdHandler(val){
             let str=''
             switch (val) {
-                case '1':
+                case 1:
                     str='上传人群'
                     break;
-                case '2':
+                case 2:
                     str='广告人群'
                     break;
-                case '3':
+                case 3:
                     str='主题专区'
                     break;
-                case '4':
+                case 4:
                     str='逻辑规则'
                     break;
-                case '5':
+                case 5:
                     str='人群扩展'
                     break;
-                case '6':
+                case 6:
                     str='平台定制'
                     break;
-                case '7':
+                case 7:
                     str='定制付费'
                     break;
-                case '8':
+                case 8:
                     str='网红粉丝类别'
                     break;
-                case '9':
+                case 9:
                     str='内容付费行为'
                     break;
-                case '10':
+                case 10:
                     str='移动应用安装'
                     break;
-                case '11':
+                case 11:
                     str='快手使用活跃度'
                     break;
-                case '12':
+                case 12:
                     str='行业分类'
                     break;
-                case '13':
+                case 13:
                     str='商业兴趣'
                     break;
-                case '14':
+                case 14:
                     str='固化标签'
                     break;
-                case '15':
+                case 15:
                     str='行业偏好'
                     break;
-                case '16':
+                case 16:
                     str='第三方标签'
                     break;
-                case '17':
+                case 17:
                     str='产品关键词'
                     break;
             
@@ -2297,6 +2488,9 @@ export default {
     .ant-checkbox-wrapper:first-child {
         padding: 0 15px 5px;
     }
+    .ant-checkbox-wrapper + .ant-checkbox-wrapper {
+        margin-left: 0px; 
+    }
   }
 }
 </style>

+ 82 - 9
src/views/modules/autoLaunch/configLaunchList.vue

@@ -32,7 +32,22 @@
                     :scroll="{'x':scrollX}"
                     
                 >
-
+                    <span slot="status" slot-scope="text,record">
+                        <a-spin :spinning="record.spin" size="small" >
+                            <div class="spin-content">
+                                <a-switch size="default" :checked='text==1'  @change="switchChange(text,record)"/>
+                            </div>
+                        </a-spin>    
+                        
+                    </span>
+                    <span slot="openProgramCreate" slot-scope="text,record">
+                        <a-spin :spinning="record.openProgramCreateSpin" size="small" >
+                            <div class="spin-content">
+                                <a-switch size="default" :checked='text==1'  @change="openProgramCreateSwitchChange(text,record)"/>
+                            </div>
+                        </a-spin>    
+                        
+                    </span>
                     <span slot="cpaBid" slot-scope="text">
                         {{text/1000}}
                     </span>
@@ -102,15 +117,15 @@ let typeValue='预算'
 
 const strategyColumns = [
   
-//   {
-//     title: 'ID',
-//     dataIndex: 'id',
-//     key: 'id',
-//     align: 'center',
-//     scopedSlots: { customRender: 'id' },
-//     width:110,
+  {
+    title: '开关',
+    dataIndex: 'status',
+    key: 'status',
+    align: 'center',
+    scopedSlots: { customRender: 'status' },
+    width:110,
     
-//   },
+  },
    {
     title: '所属账户名称',
     dataIndex: 'authName',
@@ -142,6 +157,14 @@ const strategyColumns = [
         scopedSlots: { customRender: 'cpaBid' },
         // sorter:() => {}
     },
+//   {
+//         title: '是否开启程序化创建',
+//         dataIndex: 'openProgramCreate',
+//         align: 'center',    
+//         scopedSlots: { customRender: 'openProgramCreate' },
+//         sorter:() => {},
+//         width:180,
+//     },
  {
     title: '操作',
     dataIndex: 'operator',
@@ -231,6 +254,54 @@ export default {
         },
     },
     methods: {
+        //状态改变
+        switchChange(text,record){
+            // this.spinning=true;
+            console.log(text,record)
+            record.spin=true;
+            
+            
+            let status=text==1?0:1;
+            getAction(`/ctop/aiKuaishouAdvertiserStrategy/oprateStatus`,{
+                id:record.id,
+                status
+            }).then((res)=>{
+                
+                    record.spin=false;
+                if(res.success){
+                    this.getStrategyList()
+                    this.$message.success(res.message)
+                }else{
+                    this.$message.error(res.message)
+                }
+            })
+           
+
+        },
+        //是否开启程序化创意状态改变
+        openProgramCreateSwitchChange(text,record){
+            // this.spinning=true;
+            console.log(text,record)
+            record.openProgramCreateSpin=true;
+            
+            
+            let status=text==1?0:1;
+            getAction(`/ctop/aiKuaishouAdvertiserStrategy/oprateCreativeStatus`,{
+                id:record.id,
+                status
+            }).then((res)=>{
+                
+                    record.openProgramCreateSpin=false;
+                if(res.success){
+                    this.getStrategyList()
+                    this.$message.success(res.message)
+                }else{
+                    this.$message.error(res.message)
+                }
+            })
+           
+
+        },
         examineAgainMethod(record){
             console.log(record)
             this.examineAgain=true;
@@ -355,6 +426,8 @@ export default {
                         item.key=item.id;
                         item.show=false;
                         item.visible=false;
+                        item.spin=false;
+                        item.openProgramCreateSpin=false;
                     })
 
                     this.data = res.result.records;

+ 3 - 7
src/views/modules/autoLaunch/newAppId.vue

@@ -277,17 +277,14 @@ export default {
         beforeUpload(file) {
             // ${this.form.project}
             if (process.env.NODE_ENV == 'development') { 
-                this.uploadAction= `http://139.186.151.174:8804/jeecg-boot/ai/aiKuaiShouAppInfo/importAppExcel?accountId=${this.accountId}&platform=${this.platform}&imageToken=${this.urlListImage.imageToken}`
+                this.uploadAction= `/jeecg-boot/ai/aiKuaiShouAppInfo/importAppExcel?accountId=${this.accountId}&platform=${this.platform}&imageToken=${this.urlListImage.imageToken}`
             } 
             else if (process.env.NODE_ENV == 'debug') { 
             } 
             else if (process.env.NODE_ENV == 'production') { 
-              
-               this.uploadAction= `http://api.tjyourong.com.cn/jeecg-boot/ai/aiKuaiShouAppInfo/importAppExcel?accountId=${this.accountId}&platform=${this.platform}&imageToken=${this.urlListImage.imageToken}`
-              // this.uploadAction= `http://139.186.151.174:8804//jeecg-boot/ai/aiKuaiShouAppInfo/importAppExcel?accountId=${this.accountId}&platform=${this.platform}&imageToken=${this.urlListImage.imageToken}`
+
+              this.uploadAction= `${this.axios.defaults.baseURL}/ai/aiKuaiShouAppInfo/importAppExcel?accountId=${this.accountId}&platform=${this.platform}&imageToken=${this.urlListImage.imageToken}`
             }
-           
-            //  this.uploadAction= `http://api.tjyourong.com.cn/jeecg-boot/ai/aiKuaiShouAppInfo/importAppExcel?accountId=${this.accountId}&platform=${this.platform}&imageToken=${this.urlListImage.imageToken}`
 
             this.loadDisabled = true
             const size = (Number(file.size) / (1024 * 1024)).toFixed(2)
@@ -366,7 +363,6 @@ export default {
   mounted() {
     this.accountHttp()
    
-    
   },
 }
 </script>

+ 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:() => {}
+        },
       ]
     },
     {

文件差异内容过多而无法显示
+ 1532 - 0
src/views/modules/stockWatch/accountPage.vue


+ 9 - 2
src/views/modules/workBench/materialList.vue

@@ -1497,9 +1497,16 @@ export default {
 
 
         beforeUpload(file) {
-
+            if (process.env.NODE_ENV == 'development') { 
+                this.uploadAction= `/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.materialId}&projectId=${this.currentMaterial.projectId}`
+            } 
+            else if (process.env.NODE_ENV == 'debug') { 
+            } 
+            else if (process.env.NODE_ENV == 'production') { 
+              this.uploadAction= `${this.axios.defaults.baseURL}/platform/file/uploadScript?materialId=${this.currentMaterial.materialId}&projectId=${this.currentMaterial.projectId}`
+            }
             // this.uploadAction= `http://api.tjyourong.com.cn/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.materialId}&projectId=${this.currentMaterial.projectId}`
-            this.uploadAction= `http://139.186.151.174:8804/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.materialId}&projectId=${this.currentMaterial.projectId}`
+            // this.uploadAction= `http://139.186.151.174:8804/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.materialId}&projectId=${this.currentMaterial.projectId}`
             // this.uploadAction= `http://192.168.1.43:8088/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.materialId}&projectId=${this.currentMaterial.projectId}`
             this.loadDisabled = true
             const size = (Number(file.size) / (1024 * 1024)).toFixed(2)

+ 10 - 2
src/views/modules/workBench/orderDetail.vue

@@ -1884,9 +1884,17 @@ export default {
 
 
         beforeUpload(file) {
-            // this.uploadAction= `http://api.tjyourong.com.cn/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.id}&projectId=${this.currentMaterial.projectId}`
+            if (process.env.NODE_ENV == 'development') { 
+                this.uploadAction= `/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.id}&projectId=${this.currentMaterial.projectId}`
+            } 
+            else if (process.env.NODE_ENV == 'debug') { 
+            } 
+            else if (process.env.NODE_ENV == 'production') { 
+              this.uploadAction= `${this.axios.defaults.baseURL}/platform/file/uploadScript?materialId=${this.currentMaterial.id}&projectId=${this.currentMaterial.projectId}`
+            }
+            //  this.uploadAction= `http://api.tjyourong.com.cn/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.id}&projectId=${this.currentMaterial.projectId}`
             // this.uploadAction= `http://192.168.1.43:8088/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.id}&projectId=${this.currentMaterial.projectId}`
-            this.uploadAction= `http://139.186.151.174:8804/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.id}&projectId=${this.currentMaterial.projectId}`
+            // this.uploadAction= `http://139.186.151.174:8804/jeecg-boot/platform/file/uploadScript?materialId=${this.currentMaterial.id}&projectId=${this.currentMaterial.projectId}`
 
             this.loadDisabled = true
             const size = (Number(file.size) / (1024 * 1024)).toFixed(2)

+ 9 - 1
src/views/modules/workBench/placeOrder.vue

@@ -716,7 +716,15 @@ export default {
         beforeUpload(file) {
             // ${this.form.project}
             // this.uploadAction= `http://api.tjyourong.com.cn/jeecg-boot/platform/file/uploadAttachment?projectId=${this.form.project}`
-            this.uploadAction= `http://139.186.151.174:8804/jeecg-boot/platform/file/uploadAttachment?projectId=${this.form.project}`
+            // this.uploadAction= `http://139.186.151.174:8804/jeecg-boot/platform/file/uploadAttachment?projectId=${this.form.project}`
+            if (process.env.NODE_ENV == 'development') { 
+                this.uploadAction= `/jeecg-boot/platform/file/uploadAttachment?projectId=${this.form.project}`
+            } 
+            else if (process.env.NODE_ENV == 'debug') { 
+            } 
+            else if (process.env.NODE_ENV == 'production') { 
+              this.uploadAction= `${this.axios.defaults.baseURL}/platform/file/uploadAttachment?projectId=${this.form.project}`
+            }
             this.loadDisabled = true
             const size = (Number(file.size) / (1024 * 1024)).toFixed(2)
             const fileName = file.name

+ 3 - 3
vue.config.js

@@ -68,7 +68,7 @@ module.exports = {
     open : true,
     proxy: {
       '/jeecg-boot': {
-        //  target: 'http://192.168.1.8:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
+          // target: 'http://192.168.1.8:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
         // target: 'http://192.168.0.59:8088', //请求本地 需要jeecg-boot后台项目  英豪
         // target: 'http://192.168.1.188:8088', //请求本地 需要jeecg-boot后台项目  英豪
         // target: 'http://192.168.2.115:8080', //请求本地 需要jeecg-boot后台项目  祚云
@@ -85,7 +85,7 @@ module.exports = {
         //  target: 'http://adsp.tjyourong.com.cn/', //请求本地 需要jeecg-boot后台项目
         // target: 'http://192.168.1.251/', //请求本地 需要jeecg-boot后台项目
         // target:'http://118.24.244.213:8804',
-        target:'http://139.186.151.174:8804', //测试
+       target:'http://139.186.151.174:8804', //测试
 
         ws: false,
 
@@ -106,5 +106,5 @@ module.exports = {
   },
 
   lintOnSave: undefined,
-//   publicPath:'./'
+//   publicPath:'./',
 }

+ 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日
+
+- 基础题
+  - 
+
+- 附加题
+
+
+