Browse Source

Merge remote-tracking branch 'origin/master'

syh 4 năm trước cách đây
mục cha
commit
70a50f0c31

+ 4 - 3
src/components/layouts/TabLayout.vue

@@ -82,13 +82,14 @@
       this.activePage = this.$route.fullPath
 
       if(!this.linkList.includes("/account/stepForm")){
+          
           localStorage.removeItem("step")
           localStorage.removeItem("campaignId")
           localStorage.removeItem("pans")
           localStorage.removeItem("pansKey")
           localStorage.removeItem("appId")
       }
-      if(!this.linkList.includes("/account/advertisingGroup")){
+      if(!this.linkList.includes("/account/advertisingGroup")&&!this.linkList.includes("/account/stepForm")){
           localStorage.removeItem("advertisingGroup")
           localStorage.removeItem("advertisingGroupKey")
       }
@@ -114,11 +115,11 @@
           localStorage.removeItem("pansKey")
           localStorage.removeItem("appId")
         }
-        if(!this.linkList.includes("/account/advertisingGroup")){
+        if(!this.linkList.includes("/account/advertisingGroup")&&!this.linkList.includes("/account/stepForm")){
           localStorage.removeItem("advertisingGroup")
           localStorage.removeItem("advertisingGroupKey")
         }
-        if(!this.linkList.includes("/account/originality")){
+        if(!this.linkList.includes("/account/originality")&&!this.linkList.includes("/account/stepForm")){
           localStorage.removeItem("originality")
           localStorage.removeItem("originalityKey")
         }

+ 37 - 11
src/components/uploadFile.vue

@@ -6,8 +6,8 @@
   <div class="upload-file">
     <a-upload name="file" :multiple="multiple" list-type="picture-card" class="avatar-uploader"
       action="https://media-1301855440.cos.ap-chongqing.myqcloud.com/" :before-upload="beforeUpload"
-      @change="handleChange" :accept="uploadType+'/*'" :file-list="fileList" :remove="removeFile"
-      @preview="handlePreview" :disabled="loadingElse||disabled">
+      @change="handleChange" :accept="uploadType+'/'+(uploadType=='image'?'jpeg,image/jpg':'mp4')" :file-list="fileList"
+      :remove="removeFile" @preview="handlePreview" :disabled="loadingElse||disabled">
       <div v-if="uploadType=='image'?fileList.length < fileCount:fileList.length<1">
         <a-progress v-if='loadingElse' :percent="percent" :show-info="false" />
         <div class="ant-upload-text">
@@ -41,6 +41,7 @@
     SecretKey: 'tXzuwMfplTTK3c9GFUyETilasvQfePu9',
   });
   var i = 0
+  const oneKB = 1024
 
   function getBase64(file) {
     return new Promise((resolve, reject) => {
@@ -87,7 +88,23 @@
       value: {
         type: [String, Array],
         required: true
-      }
+      },
+      size: {
+        type: Number,
+        default () {
+          if (this.uploadType == 'image') {
+            return 2048
+          } else {
+            return 102400
+          }
+        }
+      },
+      onOversize: {
+        type: Function,
+        default () {
+          alert(`请选择${this.size}KB内的文件!`)
+        }
+      },
     },
     data() {
       return {
@@ -177,15 +194,24 @@
       beforeUpload(file) {
         this.percent = 0
         this.loadingElse = true
-        this.checkFile(file).then(res => {
-          this.cosUpload(file)
-
-        }).catch(() => {
+        const fileOvesize = (file.size > this.size * oneKB)
+        console.log(fileOvesize)
+        if (fileOvesize) {
+          this.onOversize()
           this.loadingElse = false
-        })
-        return new Promise(function (resolve, reject) {
-          reject()
-        })
+          return
+        } else {
+          this.checkFile(file).then(res => {
+            this.cosUpload(file)
+
+          }).catch(() => {
+            this.loadingElse = false
+          })
+          return new Promise(function (resolve, reject) {
+            reject()
+          })
+
+        }
 
       },
       clearAll() {

+ 87 - 29
src/views/modules/kuaishouapp/account/editGroup.vue

@@ -46,7 +46,8 @@
         <creat-application ref="application" />
       </a-form-item>
       <a-form-item label=" " class="else-label" :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
-        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }" v-if="campaignType == '2'&&showSite&&(getPlatForm(getData('appId'))=='1'||getPlatForm(getData('appId'))=='2')">
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }"
+        v-if="campaignType == '2'&&showSite&&(getPlatForm(getData('appId'))=='1'||getPlatForm(getData('appId'))=='2')">
         <a-select v-model="siteId" showSearch allowClear placeholder="选择应用下载详情页" optionFilterProp="children"
           :filterOption="filterOption">
           <a-select-option v-for="appModel in siteList" :key="appModel.siteId" :value="appModel.siteId">
@@ -77,6 +78,18 @@
           优先从系统应用商店下载
         </a-checkbox>
       </a-form-item>
+      <a-form-item label=" " :labelCol="{ lg: { span: 7}, sm: { span: 7 } }"
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 16 } }" class="else-label" v-if="allForm.useAppMarket">
+        请勾选投放应用已上架的应用商店(默认全选)
+        <a-checkbox-group v-model="allForm.appStore">
+          <a-checkbox value="huawei">华为</a-checkbox>
+          <a-checkbox value="oppo">OPPO</a-checkbox>
+          <a-checkbox value="vivo">VIVO</a-checkbox>
+          <a-checkbox value="xiaomi">小米</a-checkbox>
+          <a-checkbox value="meizu">魅族</a-checkbox>
+          <a-checkbox value="smartisan">锤子</a-checkbox>
+        </a-checkbox-group>
+      </a-form-item>
       <div style="text-align:center;font-size:16px;margin-bottom:10px">
         目标人群
       </div>
@@ -113,23 +126,20 @@
         </a-radio-group>
       </a-form-item>
       <a-form-item label=" " :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
-        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }" class="else-label" v-if="allForm.dayBudget == '1'">
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }" class="else-label" v-show="allForm.dayBudget == '1'">
         <a-input placeholder="不小于100,不超过100000000,仅支持输入自然数" v-decorator="[
             'dayBudget',
-            {
-              rules: [{ required: true, message: '请填写预算' }, { validator: budgetValue }]
-            }
           ]" />
       </a-form-item>
       <a-form-item label="投放方式" :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
         :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }">
-        <a-radio-group buttonStyle="solid" v-decorator="['speed', { initialValue: 1 }]">
+        <a-radio-group buttonStyle="solid" v-decorator="['speed']">
           <a-radio-button :value="1">正常投放</a-radio-button>
           <a-radio-button :value="2">平滑投放</a-radio-button>
         </a-radio-group>
         <br />
         <span>
-          {{ getData('speed') == '2' ? '平滑匀速投放' : '尽快展示广告消耗预算' }}
+          {{ getData('speed') == 2 ? '平滑匀速投放' : '尽快展示广告消耗预算' }}
         </span>
       </a-form-item>
       <a-form-item label="排期" :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
@@ -173,7 +183,7 @@
       <a-form-item label="场景广告位" :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
         :wrapperCol="{ lg: { span: 17 }, sm: { span: 17 } }">
         <!-- v-decorator="['speed', { initialValue: '1' }]" -->
-        <a-radio-group buttonStyle="solid" :disabled="typeCopy=='edit'" v-decorator="['sceneId', { initialValue: 1 }]">
+        <a-radio-group buttonStyle="solid" :disabled="typeCopy=='edit'" v-model="allForm.sceneIdAll">
           <a-radio-button :value="1">优选广告位</a-radio-button>
           <a-radio-button :value="2">按场景选择广告位</a-radio-button>
         </a-radio-group>
@@ -182,7 +192,7 @@
 
       </a-form-item>
       <a-form-item label=" " :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
-        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }" class="else-label" v-if="getData('sceneId') == 2">
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }" class="else-label" v-if="allForm.sceneIdAll == 2">
         <a-checkbox-group :disabled="typeCopy=='edit'" :defaultValue="[7]" v-model="allForm.sceneId">
           <a-checkbox :value="7">信息流广告</a-checkbox>
           <a-checkbox :value="6">上下滑大屏广告</a-checkbox>
@@ -249,8 +259,8 @@
                           ? '不得低于1元,不得高于项目最高出价' + maxBid + '元'
                           : '不得低于1元,不得高于项目最高出价' + maxBid + '元'
                       }}</span>
-                       <span style="color:red;font-weight:700" v-else-if="item.bidType==2&&item.cpaBid&&item.cpaBid>1">
-                          行为出价大于1元,请注意!!!
+                      <span style="color:red;font-weight:700" v-else-if="item.bidType==2&&item.cpaBid&&item.cpaBid>1">
+                        行为出价大于1元,请注意!!!
                       </span>
                     </a-form-item>
                     <a-form-item label="深度转化出价" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
@@ -282,6 +292,17 @@
         确定
       </a-button>
     </template>
+    <a-modal v-model="visibleFail" title="错误信息" :footer="null">
+      <div v-if="visibleData">
+        失败条数:{{ visibleData.failCount }}
+        <div style="margin-top:20px">
+          <p v-for="(item, index) of visibleData.failInfo" :key="index">
+            <span>名称:{{ item.campaignName?item.campaignName:item.unitName }}</span><br />
+            <span>错误信息:{{ item.failMessage }}</span>
+          </p>
+        </div>
+      </div>
+    </a-modal>
   </a-modal>
 </template>
 
@@ -314,6 +335,8 @@
     },
     data() {
       return {
+        visibleFail: false,
+        visibleData: null,
         checkedTrue: false,
         nameValue: '',
         visible: false,
@@ -347,6 +370,7 @@
         campaignType: '2',
         maxBid: 0,
         allForm: {
+          sceneIdAll: 1,
           dayBudget: '0',
           time: '1',
           scheduleTime: '1',
@@ -356,7 +380,10 @@
           fail: [],
           success: [],
           sceneId: [7],
-          useAppMarket: false
+          useAppMarket: false,
+          appStore: ['huawei', 'oppo', 'vivo', 'xiaomi',
+            'meizu', 'smartisan'
+          ]
         },
         typeCopy: "edit",
         dataList: [],
@@ -429,7 +456,7 @@
           } else {
             this.allForm.group[index].showTipCheck = false
           }
-        } 
+        }
       },
       getScheduleTime(item) {
         this.allForm.scheduleTimeData = item
@@ -572,13 +599,18 @@
               ...res.result.target
             }
             //   dataJson.useAppMarket = dataJson.useAppMarket==0?false:true
-            dataJson.dayBudget = dataJson.dayBudget / 1000
-            dataJson.sceneId = JSON.parse(dataJson.sceneId)[0] == 1 ? 1 : 2
+
+            this.allForm.sceneIdAll = JSON.parse(dataJson.sceneId).filter(item => item == 1).length > 0 ? 1 : 2
             this.allForm.useAppMarket = dataJson.useAppMarket ? (dataJson.useAppMarket == 0 ? false : true) : false
-            this.allForm.sceneId = dataJson.sceneId == 1 ? [7] : JSON.parse(res.result.baseInfo
+            this.allForm.appStore = this.allForm.useAppMarket ? JSON.parse(dataJson.appStore) : ['huawei', 'oppo',
+              'vivo', 'xiaomi',
+              'meizu', 'smartisan'
+            ]
+            this.allForm.sceneId = this.allForm.sceneIdAll == 1 ? [7] : JSON.parse(res.result.baseInfo
               .sceneId)
             console.log(this.allForm.sceneId, 1111111)
             this.allForm.dayBudget = dataJson.dayBudget == 0 ? '0' : '1'
+            dataJson.dayBudget = dataJson.dayBudget / 1000
             this.allForm.time = dataJson.endTime ? '2' : '1'
             this.timeRange = [moment(dataJson.beginTime), moment(dataJson.endTime)]
             this.allForm.scheduleTime = dataJson.scheduleTime.indexOf('1') != -1 ? '2' : '1'
@@ -640,11 +672,29 @@
             this.populationData.allForm.noAgeBreak = dataJson.noAgeBreak + ''
             this.populationData.allForm.noGenderBreak = dataJson.noGenderBreak + ''
             this.populationData.allForm.noAreaBreak = dataJson.noAreaBreak + ''
-
+            this.populationData.allForm.checkArr = this.populationData.allForm.appType == '2' ? JSON.parse(dataJson
+              .appIds) : []
             this.$nextTick(() => {
+              console.log(dataJson)
               this.form.setFieldsValue(pick(dataJson, ['appId', 'urlType', 'url', 'dayBudget', 'speed',
-                'showMode', 'sceneId'
+                'showMode'
               ]))
+              //   this.form.setFieldsValue({
+              //     appId: dataJson.appId
+              //   })
+              //   this.form.setFieldsValue({
+              //     dayBudget: dataJson.dayBudget
+              //   })
+              //   this.form.setFieldsValue({
+              //     speed: dataJson.speed
+              //   })
+              //   this.form.setFieldsValue({
+              //     showMode: dataJson.showMode
+              //   })
+              //   console.log(dataJson.sceneId)
+              //   this.form.setFieldsValue({
+              //     sceneId: dataJson.sceneId
+              //   })
             })
           }
         })
@@ -672,7 +722,7 @@
             })[0]
             var json = {
               ...values,
-              sceneId: values.sceneId == 1 ? [values.sceneId] : this.allForm.sceneId,
+              sceneId: this.allForm.sceneIdAll == 1 ? [this.allForm.sceneIdAll] : this.allForm.sceneId,
               dayBudget: values.dayBudget * 1000
             }
             var params = {
@@ -689,8 +739,12 @@
             }
             if (this.allForm.useAppMarket == true || this.allForm.useAppMarket == false) {
               params.useAppMarket = this.allForm.useAppMarket ? 1 : 0
+              if (this.allForm.useAppMarket == true) {
+                params.appStore = this.allForm.appStore
+              }
             }
-            if (this.showSite&&(this.getPlatForm(this.getData('appId'))=='1'||this.getPlatForm(this.getData('appId'))=='2')) {
+            if (this.showSite && (this.getPlatForm(this.getData('appId')) == '1' || this.getPlatForm(this.getData(
+                'appId')) == '2')) {
               params.appJson = {
                 isUpdate: true,
                 siteId: this.siteId
@@ -728,12 +782,19 @@
               params.groupArr = [groupArr]
               postAction('/kuaishou/batch/copyUnit', params).then(res => {
                 if (res.success) {
-                  var that = this
-                  setTimeout(() => {
-                    that.visible = false
-                    that.loading = false
-                    that.$emit('getList', localStorage.getItem('advertisingGroupKey'))
-                  }, 1000)
+                  if (res.result.failCount > 0) {
+                    this.visibleFail = true
+                    this.visibleData = res.result
+                    this.loading = false
+                  } else {
+                    var that = this
+                    setTimeout(() => {
+                      that.visible = false
+                      that.loading = false
+                      that.$emit('getList', localStorage.getItem('advertisingGroupKey'))
+                    }, 1000)
+                  }
+
                 } else {
                   this.$message.error(res.message)
                 }
@@ -842,9 +903,6 @@
           }
         })
       },
-      getData(className) {
-        return this.form.getFieldValue(className)
-      }
     },
     mounted: function () {
       this.getAppList()

+ 32 - 11
src/views/modules/kuaishouapp/account/editGroupNew.vue

@@ -77,6 +77,18 @@
           优先从系统应用商店下载
         </a-checkbox>
       </a-form-item>
+      <a-form-item label=" " :labelCol="{ lg: { span: 7}, sm: { span: 7 } }"
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 16 } }" class="else-label" v-if="allForm.useAppMarket">
+        请勾选投放应用已上架的应用商店(默认全选)
+        <a-checkbox-group v-model="allForm.appStore">
+          <a-checkbox value="huawei">华为</a-checkbox>
+          <a-checkbox value="oppo">OPPO</a-checkbox>
+          <a-checkbox value="vivo">VIVO</a-checkbox>
+          <a-checkbox value="xiaomi">小米</a-checkbox>
+          <a-checkbox value="meizu">魅族</a-checkbox>
+          <a-checkbox value="smartisan">锤子</a-checkbox>
+        </a-checkbox-group>
+      </a-form-item>
       <div style="text-align:center;font-size:16px;margin-bottom:10px">
         目标人群
       </div>
@@ -173,7 +185,7 @@
       <a-form-item label="场景广告位" :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
         :wrapperCol="{ lg: { span: 17 }, sm: { span: 17 } }">
         <!-- v-decorator="['speed', { initialValue: '1' }]" -->
-        <a-radio-group buttonStyle="solid" v-decorator="['sceneId', { initialValue: 1 }]">
+        <a-radio-group buttonStyle="solid" v-model="allForm.sceneIdAll">
           <a-radio-button :value="1">优选广告位</a-radio-button>
           <a-radio-button :value="2">按场景选择广告位</a-radio-button>
         </a-radio-group>
@@ -182,7 +194,7 @@
 
       </a-form-item>
       <a-form-item label=" " :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
-        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }" class="else-label" v-if="getData('sceneId') == 2">
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }" class="else-label" v-if="allForm.sceneIdAll == 2">
         <a-checkbox-group :defaultValue="[7]" v-model="allForm.sceneId">
           <a-checkbox :value="7">信息流广告</a-checkbox>
           <a-checkbox :value="6">上下滑大屏广告</a-checkbox>
@@ -369,6 +381,7 @@
         campaignType: '2',
         maxBid: 0,
         allForm: {
+          sceneIdAll: 1,
           dayBudget: '0',
           time: '1',
           scheduleTime: '1',
@@ -378,7 +391,10 @@
           fail: [],
           success: [],
           sceneId: [7],
-          useAppMarket: false
+          useAppMarket: false,
+          appStore: ['huawei', 'oppo', 'vivo', 'xiaomi',
+            'meizu', 'smartisan'
+          ]
         },
         typeCopy: "typeOne",
         dataList: [],
@@ -603,9 +619,13 @@
             }
             //   dataJson.useAppMarket = dataJson.useAppMarket==0?false:true
             dataJson.dayBudget = dataJson.dayBudget / 1000
-            dataJson.sceneId = JSON.parse(dataJson.sceneId)[0] == 1 ? 1 : 2
+            this.allForm.sceneIdAll = JSON.parse(dataJson.sceneId).filter(item => item == 1).length > 0 ? 1 : 2
             this.allForm.useAppMarket = dataJson.useAppMarket ? (dataJson.useAppMarket == 0 ? false : true) : false
-            this.allForm.sceneId = dataJson.sceneId == 1 ? [7] : JSON.parse(res.result.baseInfo
+            this.allForm.appStore = this.allForm.useAppMarket ? JSON.parse(dataJson.appStore) : ['huawei', 'oppo',
+              'vivo', 'xiaomi',
+              'meizu', 'smartisan'
+            ]
+            this.allForm.sceneId = this.allForm.sceneIdAll == 1 ? [7] : JSON.parse(res.result.baseInfo
               .sceneId)
             this.allForm.dayBudget = dataJson.dayBudget == 0 ? '0' : '1'
             this.allForm.time = dataJson.endTime ? '2' : '1'
@@ -669,10 +689,11 @@
             this.populationData.allForm.noAgeBreak = dataJson.noAgeBreak + ''
             this.populationData.allForm.noGenderBreak = dataJson.noGenderBreak + ''
             this.populationData.allForm.noAreaBreak = dataJson.noAreaBreak + ''
-
+            this.populationData.allForm.checkArr = this.populationData.allForm.appType == '2' ? JSON.parse(dataJson
+              .appIds) : []
             this.$nextTick(() => {
               this.form.setFieldsValue(pick(dataJson, ['appId', 'urlType', 'url', 'dayBudget', 'speed',
-                'showMode', 'sceneId'
+                'showMode'
               ]))
             })
           }
@@ -692,7 +713,7 @@
 
             var json = {
               ...values,
-              sceneId: values.sceneId == 1 ? [values.sceneId] : this.allForm.sceneId,
+              sceneId: this.allForm.sceneIdAll == 1 ? [this.allForm.sceneIdAll] : this.allForm.sceneId,
               dayBudget: values.dayBudget * 1000
             }
             var params = {
@@ -709,6 +730,9 @@
             }
             if (this.allForm.useAppMarket == true || this.allForm.useAppMarket == false) {
               params.useAppMarket = this.allForm.useAppMarket ? 1 : 0
+              if (this.allForm.useAppMarket == true) {
+                params.appStore = this.allForm.appStore
+              }
             }
             if (this.showSite && (this.getPlatForm(this.getData('appId')) == '1' || this.getPlatForm(this.getData(
                 'appId')) == '2')) {
@@ -917,9 +941,6 @@
           }
         })
       },
-      getData(className) {
-        return this.form.getFieldValue(className)
-      }
     },
     mounted: function () {
       this.getAppList()

+ 0 - 1
src/views/modules/kuaishouapp/account/originality.vue

@@ -326,7 +326,6 @@
           }
         })
         getAction('/kuaishou/batch/getVideoDetail', {
-          accountId: localStorage.getItem('accountId'),
           photoId: item.photoId
         }).then(res => {
           if (res.success) {

+ 27 - 8
src/views/modules/kuaishouapp/account/stepForm/Step2.vue

@@ -58,7 +58,8 @@
       </a-form-item>
 
       <a-form-item label="转化目标" :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
-        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }" v-if="campaignType == 2||campaignType == 4||campaignType == 5">
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }"
+        v-if="campaignType == 2||campaignType == 4||campaignType == 5">
         <span v-if="convertId&&!convert" style="display:block;font-size:16px">已选择转化目标: {{convertId.label}}</span>
         <a-button type="primary" @click="showConvert">{{convertId?'更换转化目标':'选择转化目标'}}</a-button>
       </a-form-item>
@@ -104,6 +105,19 @@
           优先从系统应用商店下载
         </a-checkbox>
       </a-form-item>
+      <a-form-item label=" " :labelCol="{ lg: { span: 7}, sm: { span: 7 } }"
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 16 } }" class="else-label" v-if="getData('useAppMarket')">
+        请勾选投放应用已上架的应用商店(默认全选)
+        <a-checkbox-group v-model="allForm.appStore">
+          <a-checkbox value="huawei">华为</a-checkbox>
+          <a-checkbox value="oppo">OPPO</a-checkbox>
+          <a-checkbox value="vivo">VIVO</a-checkbox>
+          <a-checkbox value="xiaomi">小米</a-checkbox>
+          <a-checkbox value="meizu">魅族</a-checkbox>
+          <a-checkbox value="smartisan">锤子</a-checkbox>
+        </a-checkbox-group>
+      </a-form-item>
+
       <div style="text-align:center;font-size:16px;margin-bottom:10px">
         目标人群
       </div>
@@ -266,7 +280,8 @@
                       <a-input-number v-model="item.bid" @change="showTip(index)"
                         :style="{ borderColor: item.showTipCheck ? 'red' : '#d9d9d9' }" style="width:100%">
                       </a-input-number>
-                      <span style="color:red" v-if="item.showTipCheck&&item.bidType==180">不得低于0.2元,不得高于项目最高出价{{ maxBid }}元</span>
+                      <span style="color:red"
+                        v-if="item.showTipCheck&&item.bidType==180">不得低于0.2元,不得高于项目最高出价{{ maxBid }}元</span>
                     </a-form-item>
                     <a-form-item label="目标成本" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
                       :wrapperCol="{ lg: { span: 18 }, sm: { span: 17 } }" v-else>
@@ -279,7 +294,7 @@
                           : '不得低于1元,不得高于项目最高出价' + maxBid + '元'
                       }}</span>
                       <span style="color:red;font-weight:700" v-else-if="item.bidType==2&&item.cpaBid&&item.cpaBid>1">
-                          行为出价大于1元,请注意!!!     
+                        行为出价大于1元,请注意!!!
                       </span>
                     </a-form-item>
                     <a-form-item label="深度转化出价" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
@@ -517,7 +532,8 @@
           groupTypeData: null,
           fail: [],
           success: [],
-          sceneId: [7]
+          sceneId: [7],
+          appStore: ['huawei', 'oppo', 'vivo', 'xiaomi', 'meizu', 'smartisan']
         },
         convertType: '1',
         dataList: []
@@ -594,7 +610,7 @@
       },
       addGroup() {
         this.allForm.group.push({
-          bidType: this.campaignType == '2' && this.allForm.groupTypeData.isActivate == '1'?180:2,
+          bidType: this.campaignType == '2' && this.allForm.groupTypeData.isActivate == '1' ? 180 : 2,
           bid: '',
           cpaBid: '',
           showTipCheck: false,
@@ -649,13 +665,13 @@
           } else {
             this.allForm.group[index].showTipCheck = false
           }
-        } else  {
+        } else {
           if (this.allForm.group[index].cpaBid < 1 || this.allForm.group[index].cpaBid > this.maxBid) {
             this.allForm.group[index].showTipCheck = true
           } else {
             this.allForm.group[index].showTipCheck = false
           }
-        } 
+        }
       },
       getScheduleTime(item) {
         this.allForm.scheduleTimeData = item
@@ -826,6 +842,9 @@
             }
             if (values.useAppMarket == true || values.useAppMarket == false) {
               params.useAppMarket = values.useAppMarket ? 1 : 0
+              if (values.useAppMarket == true) {
+                params.appStore = this.allForm.appStore
+              }
             }
             console.log(params)
             if (this.checkedTrue) {
@@ -853,7 +872,7 @@
                     })
                   )
                   localStorage.setItem('pans', dataJson)
-                  localStorage.setItem('appId',this.getData('appId'))
+                  localStorage.setItem('appId', this.getData('appId'))
                 }
               } else {
                 this.loading = false

+ 198 - 7
src/views/modules/kuaishouapp/account/stepForm/Step3.vue

@@ -29,6 +29,15 @@
       z-index: 100;
     }
   }
+
+  .onlny-click-track {
+    .ant-list-item-content {
+      width: 60%;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+    }
+  }
 </style>
 <style scoped lang="scss">
   .actor-photo-list {
@@ -170,8 +179,15 @@
                         </a-form-item>
                         <a-form-item label="广告语">
                           <a @click="showTitle(index,bestIndex)">推荐广告语</a>
+
+
                           <a-textarea class="rending" placeholder="请输入广告语" v-model.trim="item.description"
                             :autosize="{ minRows: 2, maxRows: 6 }"></a-textarea>
+                          <span v-if="item.description.length>30" style="color:red">广告语长度不能超过30个字符</span>
+                          <br>
+                          <a @click="cunTitle(index,bestIndex)">收藏</a>
+                          <a @click="showCunTitle(index,bestIndex)" style="margin-left:10px">收藏列表</a>
+                          <br>
                           <a-tag v-for="(itemTag,indexTag) of tags" :key="indexTag"
                             @click="getChange(item, itemTag, index)">{{itemTag.name}}</a-tag>
                         </a-form-item>
@@ -226,6 +242,8 @@
                 }
               ]" placeholder="请输入第三方检测链接">
             </a-input>
+            <a v-if="getData('clickTrackUrl')" @click="clickTrackUrlShow=true" style="margin-right:10px">收藏监测链接</a>
+            <a @click="getClickTrackUrlList()">监测链接列表</a>
           </a-form-item>
         </a-form>
       </a-tab-pane>
@@ -289,8 +307,8 @@
         </a-button>
       </template>
       <a-form-item label="" class="add-image-material">
-        <uploadFile v-if="addVideoVisible" :checkFile="file" :value.sync="urlList.url" @overUpload="overUpload" :fileCount="10"
-          uploadType="video" :multiple="false" />
+        <uploadFile v-if="addVideoVisible" :checkFile="file" :value.sync="urlList.url" @overUpload="overUpload"
+          :fileCount="10" uploadType="video" :multiple="false" />
 
         <!-- <upload-to-ali v-model="urlList.url" :customDomain="customDomain" preview :region="region" :bucket="bucket"
           :accept="acceptVideo" :max="10" :size="1024000" :accessKeyId="accessKeyId" :accessKeySecret="accessKeySecret"
@@ -397,7 +415,62 @@
             <a-list size="large" bordered :dataSource="title">
               <a-list-item slot="renderItem" slot-scope="item">
                 <a slot="actions" @click="okTitle(item)">选择</a>
-                {{ item }}</a-list-item>
+
+
+                {{ item }}
+              </a-list-item>
+            </a-list>
+          </a-card>
+        </a-col>
+      </a-row>
+    </a-modal>
+    <a-modal title="收藏标题" v-model="cunTitleVisible" :width="1000" :footer="null">
+      <a-row :gutter="10">
+        <a-col :sm="24" style="margin-bottom: 20px;z-index: 10">
+          <a-card class="search-box" style="over-flow:auto">
+            <a-list size="large" bordered :dataSource="cunTitleList">
+              <a-list-item slot="renderItem" slot-scope="item">
+
+                <div slot="actions">
+                  <a @click="okTitleCun(item)">选择</a>
+                  <a-divider type="vertical" />
+                  <a @click="removeTitleCun(item)">删除</a>
+                </div>
+                {{ item.title }}
+              </a-list-item>
+            </a-list>
+          </a-card>
+        </a-col>
+      </a-row>
+    </a-modal>
+    <a-modal title="监测链接名称" v-model="clickTrackUrlShow">
+      <template slot="footer">
+        <a-button key="submit" :disabled="trackUrlName==''&&(!showTrackUrlNameElse)" type="primary"
+          @click="clickTrackUrlOk">
+          确定
+        </a-button>
+      </template>
+      <a-input placeholder="请输入监测链接名称" v-model="trackUrlName" @blur="changeTrackUrlName" style="width: 100%" />
+      <span style="color:red" v-if="!showTrackUrlNameElse">名称重复</span>
+
+    </a-modal>
+    <a-modal title="监测链接列表" v-model="clickTrackUrlList" :width="1000" :footer="null">
+      <a-row :gutter="10" class="onlny-click-track">
+        <a-col :sm="24" style="margin-bottom: 20px;z-index: 10">
+          <a-card class="search-box" style="over-flow:auto">
+            <a-list size="large" bordered :dataSource="trackUrlList">
+              <a-list-item slot="renderItem" slot-scope="item" :title="item.trackUrl" style="line-height:50px">
+
+                <div slot="actions">
+                  <a @click="okClickTrackUrl(item)">选择</a>
+                  <a-divider type="vertical" />
+                  <a @click="removeClickTrackUrl(item)">删除</a>
+                </div>
+
+
+                {{ item.trackName }}
+                <a-input v-model="item.trackUrl" readonly style="margin:10px"></a-input>
+              </a-list-item>
             </a-list>
           </a-card>
         </a-col>
@@ -409,7 +482,8 @@
 <script>
   import {
     getAction,
-    postAction
+    postAction,
+    deleteAction
   } from '@/api/manage'
   import {
     mapGetters
@@ -425,7 +499,6 @@
   import checkMatemal from './stepModule/checkMatemal'
   import BMF from 'browser-md5-file'
   import uploadFile from '@/components/uploadFile.vue'
-
   let nowIndex = 0
   let bestIndex = 0
   let showRemove = false
@@ -439,8 +512,15 @@
     },
     data() {
       return {
+        showTrackUrlNameElse: true,
+        clickTrackUrlShow: false,
+        clickTrackUrlList: false,
+        trackUrlList: [],
+        trackUrlName: "",
         showSite: true,
         titleVisible: false,
+        cunTitleVisible: false,
+        cunTitleList: [],
         options: [],
         data: [],
         value: '',
@@ -559,6 +639,64 @@
       }
     },
     methods: {
+      ...mapGetters(["nickname", "avatar", "userInfo"]),
+      changeTrackUrlName() {
+        var params = {}
+        params.accountId = localStorage.getItem('accountId')
+        params.userId = this.userInfo().id
+        params.trackName = this.trackUrlName
+        getAction('/kuaishou/kuaiShouTrackUrlCollection/checkTrackName', params).then(res => {
+          this.showTrackUrlNameElse = res.result
+
+        })
+      },
+      clickTrackUrlOk() {
+        var params = {}
+        params.accountId = localStorage.getItem('accountId')
+        params.userId = this.userInfo().id
+        params.trackName = this.trackUrlName
+        params.trackUrl = this.getData('clickTrackUrl')
+        postAction('/kuaishou/kuaiShouTrackUrlCollection/add', params).then(res => {
+          if (res.success) {
+            this.clickTrackUrlShow = false
+            this.trackUrlName = ""
+            this.$message.success('添加成功')
+          } else {
+            this.$message.error(res.message)
+          }
+        })
+      },
+      okClickTrackUrl(item) {
+        this.clickTrackUrlList = false
+        this.form.setFieldsValue({
+          clickTrackUrl: item.trackUrl
+        })
+      },
+      removeClickTrackUrl(item) {
+        deleteAction('/kuaishou/kuaiShouTrackUrlCollection/delete', {
+          id: item.id
+        }).then(res => {
+          if (res.success) {
+            this.getClickTrackUrlList()
+          }
+        })
+      },
+      getClickTrackUrlList() {
+        this.clickTrackUrlList = true
+
+        var params = {}
+        params.accountId = localStorage.getItem('accountId')
+        params.userId = this.userInfo().id
+        params.pageNo = 1
+        params.pageSize = 500
+        getAction('/kuaishou/kuaiShouTrackUrlCollection/list', params).then(res => {
+          if (res.success) {
+            this.trackUrlList = res.result.records
+          } else {
+            this.$message.error(res.message)
+          }
+        })
+      },
       showTitle(index, bestIndex) {
         nowIndex = index
         bestIndex = bestIndex
@@ -572,6 +710,57 @@
         this.value = ""
         this.title = []
       },
+      cunTitle(nowIndex, lastIndex) {
+        if (this.pans[lastIndex].list[nowIndex].description == '') {
+          this.$message.error('请填写广告语后再进行收藏')
+        } else {
+          var params = {}
+          params.accountId = localStorage.getItem('accountId')
+          params.userId = this.userInfo().id
+          params.title = this.pans[lastIndex].list[nowIndex].description
+          postAction('/kuaishou/kuaiShouTitleCollection/add', params).then(res => {
+            if (res.success) {
+              this.$message.success('收藏成功')
+            } else {
+              this.$message.error(res.message)
+            }
+          })
+        }
+
+      },
+      showCunTitle(index, bestIndex) {
+        nowIndex = index
+        bestIndex = bestIndex
+        this.cunTitleVisible = true
+        this.getCunTitle()
+      },
+      getCunTitle() {
+        var params = {}
+        params.accountId = localStorage.getItem('accountId')
+        params.userId = this.userInfo().id
+        params.pageNo = 1
+        params.pageSize = 500
+        getAction('/kuaishou/kuaiShouTitleCollection/list', params).then(res => {
+          if (res.success) {
+            console.log(res.result)
+            this.cunTitleList = res.result.records
+          }
+        })
+      },
+      removeTitleCun(item) {
+        deleteAction('/kuaishou/kuaiShouTitleCollection/delete', {
+          id: item.id
+        }).then(res => {
+          if (res.success) {
+            this.getCunTitle()
+          }
+        })
+      },
+      okTitleCun(item) {
+        this.pans[bestIndex].list[nowIndex].description = item.title
+        this.cunTitleVisible = false;
+        this.cunTitleList = []
+      },
       searchQuery() {
         // /ctop/creativeTitle/titleSuggestion
         console.log(this.value)
@@ -704,7 +893,8 @@
             }
           })
           getAction('/ctop/MaterialImageInfo/list', {
-            videoId: item.video.signature
+            videoId: item.video.signature,
+            status: 1
           }).then(res => {
             // console.log(res)
             if (res.success) {
@@ -1274,7 +1464,8 @@
           }
         })
         getAction('/ctop/MaterialImageInfo/list', {
-          videoId: this.checkVideo[0].signature
+          videoId: this.checkVideo[0].signature,
+          status: 1
         }).then(res => {
           // console.log(res)
           if (res.success) {

+ 11 - 6
src/views/modules/kuaishouapp/account/stepForm/stepModule/targetedPopulation.vue

@@ -398,7 +398,7 @@ li:hover {
           <a-button @click="clearAll">清空</a-button>
           <br />
           <a-tag v-for="item of checkArr" :key="item" closable :afterClose="() => log(item)">
-            {{ showAppName(item) }}
+            {{ showAppName(item)?showAppName(item):item }}
           </a-tag>
         </div>
       </div>
@@ -718,7 +718,7 @@ export default {
           this.allForm.noAreaBreak = n.noAreaBreak == '0' ? false : true
           this.selectedRowKeys = n.population ? n.population : []
           this.selectedRowKeysNo = n.excludePopulation ? n.excludePopulation : []
-
+          this.checkArr = n.allForm.checkArr
           this.targeted = n.excludePopulation ? (n.population ? '4' : '3') : '2'
           this.people = n.excludePopulation ? '3' : n.population ? '3' : '2'
           this.getPeople().then(res => {
@@ -993,10 +993,15 @@ export default {
       }
     },
     showAppName(appId) {
-      var data = this.checkOptions.filter(item => {
-        return item.appId == appId
-      })
-      return data[0].appName
+        if(this.checkOptions.length>0){
+            var data = this.checkOptions.filter(item => {
+                return item.appId == appId
+            })
+            return data[0].appName
+        }else{
+            return null
+        }
+     
     },
     log(appId) {
       var index = this.checkArr.findIndex(item => item === appId)

+ 1 - 1
vue.config.js

@@ -57,7 +57,7 @@ module.exports = {
     proxy: {
       '/jeecg-boot': {
         // target: 'http://192.168.1.90:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
-        target: 'http://192.168.1.72:8088', //请求本地 需要jeecg-boot后台项目  英豪
+        // target: 'http://192.168.1.72:8088', //请求本地 需要jeecg-boot后台项目  英豪
         // target: 'http://192.168.2.115:8080', //请求本地 需要jeecg-boot后台项目  祚云
         // target: 'http://192.168.1.94:8804', //请求本地 需要jeecg-boot后台项目  孙震
         // target: 'http://192.168.1.51:8088', //请求本地 需要jeecg-boot后台项目  毕洁泉