瀏覽代碼

'改盯盘'

魏志佳 4 年之前
父節點
當前提交
f959e772df
共有 43 個文件被更改,包括 4529 次插入788 次删除
  1. 3 0
      package.json
  2. 1 1
      src/views/modules/BatchCreate/TouTiaoBatch.vue
  3. 1 1
      src/views/modules/BatchCreate/newCreate.vue
  4. 1 1
      src/views/modules/BatchCreate/newDirectedPackage.vue
  5. 0 1
      src/views/modules/BatchCreate/newPlan.vue
  6. 0 1
      src/views/modules/LaunchHousekeeper/newProject.vue
  7. 0 1
      src/views/modules/LaunchHousekeeper/setProjectBudget.vue
  8. 0 1
      src/views/modules/LaunchHousekeeper/setProjectConvert.vue
  9. 0 1
      src/views/modules/LaunchHousekeeper/setProjectCreate.vue
  10. 0 1
      src/views/modules/LaunchHousekeeper/setProjectDirectional.vue
  11. 1 1
      src/views/modules/Statistics/KSAccountReport.vue
  12. 1 1
      src/views/modules/Statistics/accountReport.vue
  13. 1 0
      src/views/modules/Statistics/components/Treeselect.vue
  14. 0 1
      src/views/modules/Statistics/mediaReport.vue
  15. 6 1
      src/views/modules/Statistics/refuseDataCreatNew.vue
  16. 1 1
      src/views/modules/advertiser/ProjectMemberList.vue
  17. 1 2
      src/views/modules/advertiser/UserAllocationList.vue
  18. 0 154
      src/views/modules/advertiser/modules/Treeselect.vue
  19. 759 0
      src/views/modules/autoLaunch/accelerateExplorationList.vue
  20. 1 1
      src/views/modules/autoLaunch/appIdList.vue
  21. 1 1
      src/views/modules/autoLaunch/autoLaunchReport.vue
  22. 100 8
      src/views/modules/autoLaunch/configLaunchInfo.vue
  23. 32 2
      src/views/modules/autoLaunch/configLaunchList.vue
  24. 0 1
      src/views/modules/autoLaunch/createStrategy.vue
  25. 1 1
      src/views/modules/autoLaunch/groupList.vue
  26. 1 1
      src/views/modules/autoLaunch/materialAndBid.vue
  27. 0 1
      src/views/modules/autoLaunch/newAppId.vue
  28. 1 1
      src/views/modules/autoLaunch/planList.vue
  29. 0 1
      src/views/modules/autoLaunch/setDirectional.vue
  30. 1 1
      src/views/modules/autoLaunch/strategyList.vue
  31. 1569 0
      src/views/modules/columnConst/stockWatch.js
  32. 21 39
      src/views/modules/earlyWarningRules/pushTreeSelect.vue
  33. 1 1
      src/views/modules/kuaishouapp/account/accountIndex.vue
  34. 39 34
      src/views/modules/kuaishouapp/account/editGroup.vue
  35. 39 35
      src/views/modules/kuaishouapp/account/editGroupNew.vue
  36. 1 1
      src/views/modules/kuaishouapp/batchCreation/campaignList.vue
  37. 590 0
      src/views/modules/kuaishouapp/newBatch/result.vue
  38. 0 1
      src/views/modules/kuaishouapp/populationAnalysis/index.vue
  39. 1 1
      src/views/modules/material/musicTab.vue
  40. 1286 478
      src/views/modules/stockWatch/accountPage.vue
  41. 9 4
      src/views/modules/stockWatch/modules/customColumn.vue
  42. 58 4
      src/views/modules/stockWatch/modules/selectComponent.vue
  43. 1 1
      src/views/modules/workBench/designLeader/index.vue

+ 3 - 0
package.json

@@ -12,17 +12,20 @@
   "dependencies": {
     "@antv/data-set": "^0.10.2",
     "@femessage/upload-to-ali": "^1.8.1",
+    "@jeecg/antd-online-beta220": "^1.0.1",
     "@riophae/vue-treeselect": "^0.4.0",
     "@tinymce/tinymce-vue": "^2.0.0",
     "ali-oss": "^6.1.1",
     "ant-design-vue": "^1.3.9",
     "apexcharts": "^3.6.5",
+    "area-data": "^5.0.6",
     "axios": "^0.18.0",
     "babel-loader": "^8.0.6",
     "blueimp-md5": "^2.11.0",
     "browser-md5-file": "^1.1.1",
     "clipboard": "^2.0.4",
     "codemirror": "^5.46.0",
+    "core-js": "^2.6.12",
     "cos-js-sdk-v5": "^0.5.26",
     "dayjs": "^1.8.0",
     "echarts": "^4.9.0",

+ 1 - 1
src/views/modules/BatchCreate/TouTiaoBatch.vue

@@ -1675,7 +1675,7 @@ export default {
 
     }
     
-    .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+    .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #333;
     }

+ 1 - 1
src/views/modules/BatchCreate/newCreate.vue

@@ -825,7 +825,7 @@
 }
 
   .ant-tooltip-inner,
-  .ant-tooltip,
+
   .ant-tooltip-arrow::before {
     background-color: #fff;
     color: #333;

+ 1 - 1
src/views/modules/BatchCreate/newDirectedPackage.vue

@@ -362,7 +362,7 @@
             }
         }
     }
-    .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+    .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #666;
         font-size: 12px;

+ 0 - 1
src/views/modules/BatchCreate/newPlan.vue

@@ -1335,7 +1335,6 @@ export default {
 
 
 .ant-tooltip-inner,
-.ant-tooltip,
 .ant-tooltip-arrow::before {
   background-color: #fff;
   color: #333;

+ 0 - 1
src/views/modules/LaunchHousekeeper/newProject.vue

@@ -547,7 +547,6 @@ export default {
 
 
 .ant-tooltip-inner,
-.ant-tooltip,
 .ant-tooltip-arrow::before {
   background-color: #fff;
   color: #333;

+ 0 - 1
src/views/modules/LaunchHousekeeper/setProjectBudget.vue

@@ -555,7 +555,6 @@ export default {
 
 
 .ant-tooltip-inner,
-.ant-tooltip,
 .ant-tooltip-arrow::before {
   background-color: #fff;
   color: #333;

+ 0 - 1
src/views/modules/LaunchHousekeeper/setProjectConvert.vue

@@ -585,7 +585,6 @@ export default {
 
 
 .ant-tooltip-inner,
-.ant-tooltip,
 .ant-tooltip-arrow::before {
   background-color: #fff;
   color: #333;

+ 0 - 1
src/views/modules/LaunchHousekeeper/setProjectCreate.vue

@@ -1292,7 +1292,6 @@ let MonitoringTypeColumns=[
 }
 
   .ant-tooltip-inner,
-  .ant-tooltip,
   .ant-tooltip-arrow::before {
     background-color: #fff;
     color: #333;

+ 0 - 1
src/views/modules/LaunchHousekeeper/setProjectDirectional.vue

@@ -857,7 +857,6 @@ export default {
 
 
 .ant-tooltip-inner,
-.ant-tooltip,
 .ant-tooltip-arrow::before {
   background-color: #fff;
   color: #333;

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

@@ -1424,7 +1424,7 @@ export default {
 }
 </script>
 <style lang="scss">
-     .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+     .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #333;
     }

+ 1 - 1
src/views/modules/Statistics/accountReport.vue

@@ -1350,7 +1350,7 @@ export default {
 }
 </script>
 <style lang="scss">
-     .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+     .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #333;
     }

+ 1 - 0
src/views/modules/Statistics/components/Treeselect.vue

@@ -117,6 +117,7 @@ export default {
         }
       },
       deep: true,
+      immediate:true
     },
   },
   methods: {

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

@@ -742,7 +742,6 @@
 </style>
 <style lang="scss">
   .ant-tooltip-inner,
-  .ant-tooltip,
   .ant-tooltip-arrow::before {
     background-color: #fff;
     color: #666;

+ 6 - 1
src/views/modules/Statistics/refuseDataCreatNew.vue

@@ -672,7 +672,12 @@
       stopOtherVideo()
     },
     mounted: function () {
-      this.$nextTick(() => {})
+      this.$nextTick(() => {});
+      // console.log(this.$route);
+      if(this.$route.query){
+          this.appId=this.$route.query.accountId;
+          this.addUserKey()
+      }
     }
   }
 </script>

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

@@ -70,7 +70,7 @@
             <a
               @click="projectLook(record)"
               v-if="noTitleKey == 'myProject'"
-              :disabled="record.needExamine == 0"
+              :disabled="record.needExamine == 0||record.needExamine == null"
             >待办事项</a>
           </a-badge>
         </span>

+ 1 - 2
src/views/modules/advertiser/UserAllocationList.vue

@@ -300,7 +300,7 @@ import { JeecgListMixin } from '@/mixins/JeecgListMixin'
 import { mapGetters } from 'vuex'
 import { httpAction, getAction, deleteAction } from '@/api/manage'
 
-import treeSelect from './modules/Treeselect'
+
 import moment from 'moment'
 import { postAction } from '../../../api/manage'
 import qs from 'qs'
@@ -309,7 +309,6 @@ export default {
   mixins: [JeecgListMixin],
   components: {
     UserAllocationModal,
-    treeSelect,
   },
   data() {
     return {

+ 0 - 154
src/views/modules/advertiser/modules/Treeselect.vue

@@ -1,154 +0,0 @@
-<style lang="scss" scoped>
-.select-project {
-  width: 50%;
-}
-</style>
-<template>
-  <div class="select-project">
-    <treeselect
-      :multiple="multiple"
-      :disable-branch-nodes="!multiple"
-      :disable-fuzzy-matching="true"
-      :options="options"
-      :load-options="loadOptions"
-      placeholder="请选择项目"
-      v-model="value"
-      :value-consists-of="valueConsistsOf"
-      @select="update"
-      @input="emitValue"
-      :limit="2"
-      :limitText="
-        count => {
-          return '隐藏' + count + '条'
-        }
-      "
-      noChildrenText="该广告主下暂无项目"
-      noOptionsText="暂无项目"
-    />
-  </div>
-</template>
-
-<script>
-// import the component
-import Treeselect from '@riophae/vue-treeselect'
-// import the styles
-import '@riophae/vue-treeselect/dist/vue-treeselect.css'
-import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
-
-import { getAction, postAction } from '@/api/manage'
-import { mapGetters } from 'vuex'
-// We just use `setTimeout()` here to simulate an async operation
-// instead of requesting a real API server for demo purpose.
-
-export default {
-  data: () => ({
-    value: null,
-    valueConsistsOf: 'LEAF_PRIORITY',
-    options: [],
-    mediaId: ''
-  }),
-  props: {
-    multiple: {
-      type: Boolean,
-      default() {
-        return true
-      }
-    },
-    appId: {}
-  },
-  components: { Treeselect },
-  watch: {
-    $route(n, o) {},
-    appId: {
-      handler(n, o) {
-        console.log(n)
-        if (n.length == 0) {
-          if (this.multiple) {
-            this.value = []
-          } else {
-            this.value = ''
-          }
-        }
-      },
-      deep: true
-    }
-  },
-  methods: {
-    ...mapGetters(['nickname', 'avatar', 'userInfo']),
-    update(node, id) {
-      console.log(node, id)
-
-      getAction('/ctop/project/getProjectByAdvertiserAndMediaId', {
-        advertiserId: node.id,
-        mediaId: this.mediaId
-      }).then(res => {
-        console.log(res)
-        if (res.code == 0) {
-          if (res.result.length > 0) {
-            node.children = res.result.map(item => {
-              return {
-                id: item.id,
-                label: item.projectName
-              }
-            })
-          } else {
-          }
-        } else {
-          new Error('Failed to load options: network error.')
-        }
-      })
-    },
-    emitValue() {
-      this.$emit('update:appId', this.value)
-    },
-    getChildren() {},
-    loadOptions({ action, parentNode, callback }) {
-      // Typically, do the AJAX stuff here.
-      // Once the server has responded,
-      // assign children options to the parent node & call the callback.
-      if (action === LOAD_CHILDREN_OPTIONS) {
-        getAction('/ctop/project/getProjectByAdvertiserAndMediaId', {
-          advertiserId: parentNode.id,
-          mediaId: this.mediaId
-        }).then(res => {
-          console.log(res)
-          if (res.code == 0) {
-            if (res.result.length > 0) {
-              parentNode.children = res.result.map(item => {
-                return {
-                  id: item.id,
-                  label: item.projectName
-                }
-              })
-              callback()
-            } else {
-              parentNode.children = []
-              callback()
-            }
-          } else {
-            callback(new Error('Failed to load options: network error.'))
-          }
-        })
-      }
-    },
-    getParticipateList(mediaId) {
-      this.mediaId = mediaId
-      this.value = null
-      getAction('/ctop/advertiser/getAdvertiserByCompany', { userId: this.userInfo().id }).then(res => {
-        console.log(res)
-        if (res.code == 0) {
-          this.options = res.result.map(item => {
-            return {
-              id: item.id,
-              label: item.name,
-              children: null
-            }
-          })
-        }
-      })
-    }
-  },
-
-  mounted() {}
-}
-</script>

+ 759 - 0
src/views/modules/autoLaunch/accelerateExplorationList.vue

@@ -0,0 +1,759 @@
+<template>
+    <div class="toutiaoBatch">
+        
+        
+        <div class="toolbox-automate-rules-create-content_title">
+            <h3>加速探索列表</h3>
+            <!-- <a-button type='primary' @click="goNewConfigInfo" class="goNewConfigInfo">新建配置信息</a-button> -->
+        </div>
+        
+        <div class="topOptions">
+            <div >
+                <Treeselect :appId.sync="accountId" :multiple="false"  request="2,4"   ref="treeSelect" style="margin-bottom:8px;width:600px " />               
+            </div>
+            <span class="optionBtn">
+                <a-button type='primary' @click="search" class="searchBtn">查询</a-button>
+            </span>
+        </div>
+        <div class="tableArea">
+            <!-- <div class="tableOption" v-if="selectedRowKeys.length">
+                
+                
+               :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+            </div> -->
+            <div class="table">
+                <a-table
+                    :columns="columns"
+                    :data-source="data"
+                    bordered
+                    :pagination="ipagination"
+                    :loading="loading"
+                    @change="sort"
+                    :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>
+                    <span slot="authName" slot-scope="text">
+                        <!-- <a href="javascript:;" >{{text}}</a> -->
+                        {{text || '-'}}
+                    </span>
+                    <span slot="time" slot-scope="text,record">
+                        {{record.startTime}}至{{record.endTime}}
+                    </span>
+                    <span slot="operator" slot-scope="text,record">
+                        <a href="javascript:;"  @click="goPlanList(record)">编辑</a>
+                        <a-divider type="vertical" />
+                        <a href="javascript:;"  @click="deleteRecord(record)">删除</a>
+                        <a-divider type="vertical" />
+                        <a-popover v-model="record.show" trigger="click" placement="topRight" @visibleChange='visibleChange'>
+                            <div slot="content">
+                                    <span style='font-weight:700;margin-right:15px;font-size:15px'>修改后重提</span>
+                                    <a-radio-group v-model="examineAgainType" >
+                                        <a-radio :value="1">修改广告语</a-radio>
+                                        <a-radio :value="0">修改封面</a-radio>
+                                    </a-radio-group>
+                                    <a-button type='default' @click="examineAgainCancel(record)" size='small' style='margin-right:10px'>取消</a-button>
+                                    <a-button type='primary' @click="examineAgainOk(record)" size='small'  class="ok">重提</a-button>
+                            </div>
+                            <a href="javascript:;"  type='primary' @click="()=>{record.show=true}">一键重提</a>
+                            
+                        </a-popover>
+                        <a-divider type="vertical" />
+                        <a-popover v-model="record.visible" trigger="click" placement="topLeft" @visibleChange='visibleChange'>
+                            <span slot="title">出价</span>
+                            <template  slot="content" style="width:300px;">
+                                <div style="margin:5px 0 0">
+                                    <span ><a-input-number :min="0" v-model="newBid" :step="0.1" placeholder="请输入出价" size="small" style='margin-right:20px;width:120px' /></span>
+                                    <p style="color:red;font-size:12px;height:16px;padding:5px 0">{{bidErrorMessage}}</p>
+                                </div>
+                                
+                                <div>
+                                    <a-button type='default' @click="bidChangeCancel(record)" size='small' style='margin-right:10px'>取消</a-button>
+                                    <a-button type='primary' @click="bidChangeOk(record)" size='small' class="ok">修改</a-button>
+                                </div>
+                                
+                            </template>
+                            <a href="javascript:;"  type='primary' @click="()=>{record.visible=true}">修改出价</a>
+                        </a-popover>
+                    </span>
+
+                </a-table>
+            </div>
+        </div>
+        
+       
+              
+    <!-- </a-spin> -->
+    </div>
+</template>
+
+<script>
+import moment from 'moment';
+import { getAction, postAction, downFile, downFilePost,deleteAction } from '@/api/manage';
+// import { JeecgListMixin } from '@/mixins/ipagination'
+// import editableCell from './editableCell'
+import Treeselect from '@/views/modules/Statistics/components/Treeselect.vue'
+import qs from 'qs'
+let typeValue='预算'
+
+
+const strategyColumns = [
+  
+  {
+    title: '广告组名称',
+    dataIndex: 'name',
+    key: 'name',
+    align: 'center',
+    scopedSlots: { customRender: 'name' },
+    width:200,
+    fixed: 'left'
+  },
+   {
+    title: '广告组ID',
+    dataIndex: 'authName',
+    key: 'authName',
+    align: 'center',
+    scopedSlots: { customRender: 'authName' }, 
+    width:150,
+    fixed: 'left'  
+  },
+  {
+    title: '所属广告账户',
+    dataIndex: 'accountId',
+    key: 'accountId',
+    align: 'center',
+    scopedSlots: { customRender: 'accountId' },   
+    width:200,
+    fixed: 'left' 
+  },
+  
+  {
+    title: '所属项目',
+    dataIndex: 'createTime',
+    key: 'createTime',
+    align: 'center',
+    scopedSlots: { customRender: 'createTime' },
+    width:150,
+    fixed: 'left' 
+  },
+  {
+    title: '探索状态',
+    dataIndex: 'createTsime',
+    key: 'createTime',
+    align: 'center',
+    scopedSlots: { customRender: 'createTime' },
+
+  },
+  {
+    title: '探索预算',
+    dataIndex: 'createTimes',
+    key: 'createTime',
+    align: 'center',
+    scopedSlots: { customRender: 'createTime' },
+    
+  },
+  {
+        title: '优化目标',
+        dataIndex: 'cpaBid',
+        align: 'center',    
+        scopedSlots: { customRender: 'cpaBid' },
+        // sorter:() => {}
+    },
+ 
+    {
+          title: '消耗(元)',
+          dataIndex: 'cost',
+          width:150,
+          tip: '广告在投放期间的花费总额',
+          align: 'center',
+          scopedSlots: { customRender: 'cost' },
+        //   sorter: () => {}
+        },
+        {
+          title: '封面曝光数',
+          dataIndex: 'photoShow',
+          tip: '广告在瀑布流被观看次数',
+          align: 'center',       
+          scopedSlots: { customRender: 'photoShow' },
+        //   sorter:() => {}
+        },
+        {
+          title: '封面点击数',
+          dataIndex: 'photoClick',
+          tip: '用户点击封面进入视频播放页的次数(数据会进行反作弊去重)',
+          align: 'center',
+        
+          scopedSlots: { customRender: 'photoClick' },
+        //   sorter: () => {}
+        },
+        {
+          title: '封面点击率',
+          dataIndex: 'clickRate',
+          tip: '封面点击数占封面展示数百分比',
+          align: 'center',    
+          scopedSlots: { customRender: 'clickRate' },
+        //   sorter:() => {}
+        },
+        {
+          title: '封面点击单价',
+          dataIndex: 'clickCost',
+          tip: '封面点击数占封面展示数百分比',
+          align: 'center',    
+          scopedSlots: { customRender: 'clickCost' },
+        //   sorter:() => {}
+        },
+        {
+          title: '转化数',
+          dataIndex: 'aclick',
+          tip: '用户进入视频播放页观看的次数(数据会进行反作弊去重)',
+          align: 'center',
+       
+          scopedSlots: { customRender: 'aClick' },
+        //   sorter:() => {}
+        },
+        {
+          title: '转化成本',
+          dataIndex: 'bclick',
+          tip: '用户在视频播放页单击转化按钮的次数/展示数*100%',
+          align: 'center',
+        
+          scopedSlots: { customRender: 'bClick' },
+        //   sorter:() => {}
+        },
+        
+        {
+          title: '转化率',
+          dataIndex: 'bClickRate',
+          tip: '行为数占素材曝光数百分比',
+          align: 'center',    
+          scopedSlots: { customRender: 'bClickRate' },
+        //   sorter:() => {}
+        },
+ {
+    title: '操作',
+    dataIndex: 'status',
+    key: 'status',
+    align: 'center',
+    scopedSlots: { customRender: 'status' },
+    width:150,
+    fixed:'right'
+  },
+
+];
+
+const publicColumns = [    
+    
+]
+
+export default {
+    name:'strategy-list',
+    components: {
+        // editableCell,
+        Treeselect,
+    },
+    // mixins: [JeecgListMixin],
+    data() {
+        return {
+            selectedRecord:{},
+            bidErrorMessage:'',
+            examineAgainType:1,
+            newBid:undefined,
+            examineAgain:false,
+            accountId:[],
+            accountList:[],
+            strategyState:undefined,
+            strategyName:'',
+            strategyId:undefined,
+            accountId:[],
+            scrollX:2500,
+            ipagination: {
+                current: 1,
+                pageSize: 10,
+                //   pageSizeOptions: ['10', '20', '30'],
+                showTotal: (total, range) => {
+                    return range[0] + "-" + range[1] + " 共" + total + "条"
+                },
+                showQuickJumper: true,
+                showSizeChanger:true,
+                pageSizeOptions: ['10', '30', '50'],
+                total: 0,
+                onChange: (current, pageSize) => {
+                    // 切换分页时的回调,
+                    // 当在页面定义change事件时,切记要把此处的事件清除,因为这两个事件重叠了,可能到时候会导致一些莫名的bug
+                    this.ipagination.current = current;
+                    this.ipagination.pageSize= pageSize;
+                }
+            },
+           
+            spinning:false,
+            moment,
+           
+            optionId:'',//input输入的id或关键词
+          
+           
+            selectDisable:true,
+            optValue:undefined,//操作设置的值 删除 暂停 开启
+            visible: false,//出价里的弹出框
+
+            //主页的表格
+            data:[],
+            columns:[...strategyColumns,...publicColumns],
+            selectedRowKeys:[],
+            
+            loading:false,
+            editID:0,
+
+            url: {               
+                list:'/ctop/aiKuaishouAdvertiserStrategy/list',
+                delete:'/ctop/aiKuaishouAdvertiserStrategy/delete',
+            },
+
+
+            xiugaiData:[],//存分别修改时候的数组
+        }
+    },
+    computed: {
+        hasSelected() {
+        return this.selectedRowKeys.length > 0;
+        },
+    },
+    methods: {
+        // 加速探索OK事件
+        targethandleOk(e){
+            this.targetVisible=true
+        },
+        //状态改变
+        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;
+            this.selectedRecord=record
+        },
+        visibleChange(){
+            this.bidErrorMessage='';
+            this.examineAgainType=1;
+            this.newBid=undefined;
+            
+        },
+        bidChangeCancel(record){
+            record.visible=false;
+            this.newBid=undefined;
+            this.bidErrorMessage=''
+        },
+        bidChangeOk(record){
+            if(this.newBid){
+                record.visible=false;
+                postAction('/ai/batchUpdate/updateGroupBid',{
+                    accountId:record.accountId,
+                    bid:this.newBid*1000
+                }).then(res=>{
+                    console.log(res)
+                    if(res.code==0){
+                        this.$message.success(res.message)
+                        this.newBid=undefined;
+                        this.getStrategyList()
+                    }
+                    
+                })
+            }else{
+                this.bidErrorMessage='请正确填写出价'
+                // this.$message.error('请正确填写出价')
+            }
+            
+        },
+
+        examineAgainCancel(record){
+            record.show=false;
+            this.examineAgainType=1
+        },
+        examineAgainOk(record){
+            record.show=false;
+            postAction('/kuaishou/creative/again',{
+                accountId:record.accountId,
+                updateType:this.examineAgainType
+            }).then(res=>{
+                console.log(res);
+                if(res.code==0){
+                    this.$message.success('正在重提中,您可稍后查看结果')
+                }else{
+                    this.$message.success(res.message)
+                }
+                this.examineAgainType=1
+            })
+            
+        },
+        onSelectChange(selectedRowKeys) {
+            console.log('selectedRowKeys changed: ', selectedRowKeys);
+            this.selectedRowKeys = selectedRowKeys;
+        },
+        goNewConfigInfo(){
+            this.$router.push('/autoLaunch/configLaunchInfo')
+        },
+        goPlanList(record){
+            console.log(record)
+            this.$parent.currentStrategyId=record.id;
+            this.$router.push(`/autoLaunch/configLaunchInfo?id=${record.id}`)
+        },
+        deleteRecord(record){
+            this.loading=true
+            deleteAction(this.url.delete,{
+                id:record.id
+            }).then(res=>{
+                this.loading=false
+                if(res.success){
+                    this.$message.success(res.message);
+                    this.getStrategyList()
+                }else{
+                    this.$message.success(res.message);
+                }
+            })
+        },
+        filterOption(input, option) {
+            return (
+                option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+            );
+        },
+        
+        //查询按钮事件
+        search(){
+            this.ipagination.current=1;
+            this.getStrategyList()            
+        },
+        //点击分页
+        sort(pagination, filters, sorter, { currentDataSource }){
+            console.log(pagination)
+            this.ipagination.current=pagination.current;
+
+            this.ipagination.pageSize=pagination.pageSize;
+            this.getStrategyList()
+        },
+
+        getStrategyList(){
+            this.loading = true
+            console.log(this.accountId)
+            getAction(this.url.list,{
+                strategyId:this.strategyId==undefined?null:this.strategyId,
+                accountId:this.accountId,
+                pageNo:this.ipagination.current,
+                pageSize:this.ipagination.pageSize
+            }).then((res)=>{
+                this.data=[]
+                console.log(res)
+                this.loading = false
+                if(res.success){
+
+                    this.ipagination.total = res.result.total
+                    
+                    res.result.records.forEach((item)=>{
+                        item.key=item.id;
+                        item.show=false;
+                        item.visible=false;
+                        item.spin=false;
+                        item.openProgramCreateSpin=false;
+                    })
+
+                    this.data = res.result.records;
+                    this.selectedRowKeys=[];
+                }
+            })
+        },
+      
+    },
+    mounted() {
+       
+        this.getStrategyList()
+    },
+    
+    activated() {
+        this.getStrategyList()
+    },
+    beforeDestroy() {
+
+    },
+    filters: {
+        toPercentage(val) {
+            if(val){
+                if(typeof val != 'string'){
+                    return (val * 100).toFixed(2) + '%'
+                }else{
+                    return val
+                }
+            }else if(typeof val =='string'){
+                    return val
+                }
+            else{
+                return 0
+            }
+        },
+        //保留两位小数并且变成货币格式
+        decimalsHandle(val){
+
+            if(val && typeof val !='string'){
+                if(val>=0){
+                    val=parseFloat(val).toFixed(2);
+                    let numberStr = val.toString()
+                    let str = numberStr.split('.')
+
+                    let str0=str[0].split('').reverse();
+                    for (let i = 0; i < str0.length; i++) {
+                        if ((i + 1) % 4 === 0) {
+                            str0.splice(i, 0, ',')
+                        }
+                    }
+                    str0.reverse()
+                    let handleResult = ''
+                    for (let j = 0; j < str0.length; j++) {
+                        handleResult += str0[j]
+                    }
+
+                    return handleResult+'.'+str[1]
+                }else{
+                    val=parseFloat(val).toFixed(2);
+                    let numberStr = val.toString()
+                    let str = numberStr.split('.')
+
+                    let str0=str[0].substr(1).split('').reverse();
+                    for (let i = 0; i < str0.length; i++) {
+                        if ((i + 1) % 4 === 0) {
+                            str0.splice(i, 0, ',')
+                        }
+                    }
+                    str0.reverse()
+                    let handleResult = ''
+                    for (let j = 0; j < str0.length; j++) {
+                        handleResult += str0[j]
+                    }
+
+                    return '-'+handleResult+'.'+str[1]
+                }
+
+            }else if(typeof val =='string'){
+                return val
+            }
+            else{
+                return 0
+            }
+        },
+        //变成货币格式
+        formatCurrency(val){
+            if((val||val==0)&& typeof val !='string'){
+                let numberStr = val.toString()
+                let str = numberStr.split('').reverse()
+                for (let i = 0; i < str.length; i++) {
+                    if ((i + 1) % 4 === 0) {
+                    str.splice(i, 0, ',')
+                    }
+                }
+                str.reverse()
+                let handleResult = ''
+                for (let j = 0; j < str.length; j++) {
+                    handleResult += str[j]
+                }
+                return handleResult
+            }else if(typeof val =='string'){
+                    return val
+            }
+            else{
+                return '-'
+            }
+
+        },
+        
+        
+    }
+}
+</script>
+<style lang="scss">
+    #closeIcon{
+         color: #0E74D2;
+    }
+    .toutiaoBatch{
+        .ant-tag .anticon-close {      
+            color: #1890ff;        
+        }
+        .ant-tag .anticon-close:hover{      
+            color: rgba(0, 0, 0, 0.85);    
+        }
+
+    }
+    
+    .ant-tooltip-inner,.ant-tooltip-arrow::before{
+        background-color: #fff;
+        color: #333;
+    }
+    #batchModal{
+        .rules,.totalPrice{
+            font-weight: 600;
+        }
+
+        .selectePlan{
+            font-size: 14px;
+            font-weight: 700;
+            color: #333;
+            padding: 20px 0;
+        }
+        .totalPrice{
+            margin-left: 20px;
+        }
+        .modifyTable{
+            margin-top: 20px;
+            width: 100%;
+            height: 400px;
+            overflow: auto;
+            font-weight: 600;
+        }
+    }
+    #copyModal{
+        .ant-modal-header{
+            text-align: center;
+        }
+        .copyTip{
+            font-size: 12px;
+            color: #999;
+        }
+        .copyName{
+            width: 118px;
+            display: inline-block;
+            text-align: right;
+            .copyKeyStart{
+                color: red;
+            }
+        }
+        // font-weight: 600;
+    }
+</style>
+<style lang="scss" scoped>
+.toutiaoBatch{
+    .breadcrumb{
+            height: 22px;
+            font-size: 12px;
+            font-family: PingFangSC-Regular, PingFang SC;
+            font-weight: 400;
+            color: #000000;
+            line-height: 22px;
+        }
+    background-color: #fff;
+    padding: 10px 20px;
+    position: relative;
+    width: 100%;
+    .OptinItem{
+        display: inline-block;
+        margin-right: 15px;
+        margin-top: 15px;
+        .ok{
+            margin-right: 15px;
+        }
+    }
+    .OptinItem:first-child{
+        margin-right: 10px;
+    }
+    .topOptions{
+        padding: 15px 0;
+        display: flex;
+        justify-content: space-between;
+        .topOpt{
+            width: 100%;
+            margin-bottom: 10px;
+        }
+    }
+    .optionBtn{
+        // display: inline-block;
+        float: right;
+        // .searchBtn{
+            // margin-right: 10px;
+        // }
+    }
+    .tableArea{
+        .tableOption{
+            padding: 20px 0;
+        }
+    }
+    .toolbox-automate-rules-create-content_title {
+        background-color: #fff;
+        display: flex;
+        flex-flow: row nowrap;
+        justify-content: flex-start;
+        align-items: center;
+        margin-bottom: 28px;
+        position: relative;
+        h3 {
+            font-size: 22px;
+            margin: 0;
+            font-weight: 400;
+            height: 30px;
+            line-height: 30px;
+        }
+        .goNewConfigInfo{
+            position: absolute;
+            right: 0;
+            top: 4px;
+        }
+    }
+
+}
+
+</style>

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

@@ -529,7 +529,7 @@ export default {
 
     }
     
-    .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+    .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #333;
     }

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

@@ -1987,7 +1987,7 @@ const publicColumns = [
 .autoLaunchReport{
 
 
-     .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+     .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #333;
     }

+ 100 - 8
src/views/modules/autoLaunch/configLaunchInfo.vue

@@ -35,10 +35,10 @@
                     <a-form-item >
                         <a-radio-group   v-decorator="['campaignType',{initialValue:2 }]" @change="campaignTypeChange">
                             <a-radio-button :value="2">提升应用安装</a-radio-button>
-                            <a-radio-button :value="3">获取电商下单</a-radio-button>                                   
-                            <a-radio-button :value="4">推广品牌活动</a-radio-button>                                   
-                            <a-radio-button :value="5">收集销售线索</a-radio-button>                                   
-                            <a-radio-button :value="7">提高应用活跃</a-radio-button>                                   
+                            <a-radio-button :value="3" :disabled='true'>获取电商下单</a-radio-button>                                   
+                            <a-radio-button :value="4" :disabled='true'>推广品牌活动</a-radio-button>                                   
+                            <a-radio-button :value="5" :disabled='true'>收集销售线索</a-radio-button>                                   
+                            <a-radio-button :value="7" :disabled='true'>提高应用活跃</a-radio-button>                                   
                         </a-radio-group>
                     </a-form-item>
                 </div>
@@ -296,14 +296,79 @@
                         </div>
                         <div class="input-item">
                             <a-form-item>
-                                 <a-radio-group  v-decorator="['platformOs', {initialValue:1 }]" >
+                                 <a-radio-group  v-decorator="['platformOs', {initialValue:1 }]" @change="platformOsChange">
                                     <a-radio-button :value="0">不限</a-radio-button>
                                     <a-radio-button :value="1">Android</a-radio-button>
                                     <a-radio-button :value="2">IOS</a-radio-button>
                                 </a-radio-group>
                             </a-form-item>
+
+                            <!-- <div style="margin-top:24px"  v-if="getFormData('platformOs')!=0">
+                                <div v-if="getFormData('platformOs')==1">
+                                    <a-form-item>
+                                    <a-radio-group v-decorator="['androidOsv',{initialValue: 3,}]">
+                                        <a-radio :value="3">不限</a-radio>
+                                        <a-radio :value="4">4X+</a-radio>
+                                        <a-radio :value="5">5x+</a-radio>
+                                        <a-radio :value="6">6x+</a-radio>
+                                        <a-radio :value="7">7x+</a-radio>
+                                    </a-radio-group>
+                                    </a-form-item>
+                                </div>
+                                <div v-if="getFormData('platformOs')==2">
+                                    <a-form-item>
+                                    <a-radio-group  v-decorator="['iosOsv',{initialValue: 6,}]">
+                                        <a-radio :value="6">不限</a-radio>
+                                        <a-radio :value="7">7X+</a-radio>
+                                        <a-radio :value="8">8x+</a-radio>
+                                        <a-radio :value="9">9x+</a-radio>
+                                        <a-radio :value="10">10x+</a-radio>
+                                    </a-radio-group>
+                                    </a-form-item>
+                                </div>
+                                
+                            </div> -->
                         </div>
                     </div>
+                    <!-- <div class="row-item" v-if="getFormData('platformOs')!=2">
+                        <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-model="deviceBrand">
+                                <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-if="deviceBrand==1">
+                            <div class="inventory-tags-lists-header" style="padding-left:15px">
+                                
+                            <div class="inventory-tags-lists-name"><strong>品牌名称</strong></div>
+                            </div>
+                            <div class="inventory-tags-lists-container" >
+                                <a-checkbox-group
+                                    v-decorator="['deviceBrand', { rules: [{ required: true, message: '请选择设备品牌' }] }]"
+                                >
+                                <a-checkbox :value="1" style="margin-bottom: 8px">OPPO</a-checkbox>
+                                <a-checkbox :value="2" style="margin-bottom: 8px">VIVO</a-checkbox>
+                                <a-checkbox :value="3" style="margin-bottom: 8px">华为</a-checkbox>
+                                <a-checkbox :value="4" style="margin-bottom: 8px">小米</a-checkbox>
+                                <a-checkbox :value="5" style="margin-bottom: 8px">荣耀</a-checkbox>
+                                <a-checkbox :value="6" style="margin-bottom: 8px">三星</a-checkbox>
+                                <a-checkbox :value="7" style="margin-bottom: 8px">金立</a-checkbox>
+                                <a-checkbox :value="8" style="margin: 0 0 8px 0">魅族</a-checkbox>
+                                <a-checkbox :value="9" style="margin-bottom: 8px">乐视</a-checkbox>
+                                <a-checkbox :value="10" style="margin-bottom: 8px">其他</a-checkbox>
+                                <a-checkbox :value="11" v-if="getFormData('platformOs') == 0" style="margin-bottom: 8px">苹果</a-checkbox>
+                                </a-checkbox-group>
+                            </div>
+                        </div>                  
+                        
+                        </div>
+                    </div> -->
                     <div class="row-item">
                         <div class="hint-item"></div>
                             <div class="label-item">
@@ -830,7 +895,8 @@
                         </div>
                         <div class="input-item">
                         <a-form-item>
-                            <a-input v-decorator="['clickTrackUrl']" />
+                            <a-input v-decorator="['clickTrackUrl']"  @focus="clickTrackUrlFocus"  @blur="clickTrackUrlBlur"/>
+                            <span v-show="clickTrackUrlTip" style="font-size:14px;color:red;">填写点击检测连接的话,开始播放链接必须填写</span>
                         </a-form-item>
                         </div>
                     </div>
@@ -1231,6 +1297,8 @@ export default {
     },
     data() {
         return {
+            clickTrackUrlTip:false,
+            deviceBrand:0,
             tongbuLoading:false,
             refreshPopulationLoading:false,
             noAreaBreak:false,
@@ -1457,6 +1525,12 @@ export default {
             },
     },
     methods: {
+        platformOsChange(e){
+            console.log(e);
+            this.deviceBrand=0;
+            this.sysType=e.target.value;
+            this.sysTypeChange(e)
+        },
         refreshPopulation(){
             if(this.accountId){
                 this.refreshPopulationLoading = true
@@ -2002,6 +2076,10 @@ export default {
                          values.creativeCategory=undefined
                     }
                     
+                    if(this.deviceBrand==0){
+                        
+                    }
+                    values.deviceBrand=this.deviceBrand==0?'[0]':JSON.stringify(values.deviceBrand)
                     values.accountId = this.accountId
                    
                     values.creativeTag=values.creativeTag?JSON.stringify(values.creativeTag):undefined
@@ -2267,6 +2345,11 @@ export default {
                             res.result.creativeCategory=res.result.creativeCategory?[res.result.creativeCategory]:[];
                         }
                     }
+                    values.deviceBrand=this.deviceBrand==0?'[0]':JSON.stringify(values.deviceBrand)
+                    if(res.result.deviceBrand){
+                        
+                        this.deviceBrand=res.result.deviceBrand.indexOf(0)>-1?0:1;
+                    }
                     setTimeout(()=>{                       
                         this.form.setFieldsValue({
                              ...res.result,
@@ -2274,7 +2357,8 @@ export default {
                             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)
+                            appId:res.singleAppid?JSON.parse(res.result.appIdArray)[0]:JSON.parse(res.result.appIdArray),
+                            deviceBrand:res.result.deviceBrand?JSON.parse(res.result.deviceBrand):[],
                         })
                     },0)
                     if((res.result.ocpxActionType == 180 || res.result.ocpxActionType == 53) && this.groupTypeData.deepConversionTypes&&this.groupTypeData.deepConversionTypes.length > 0){
@@ -2388,6 +2472,15 @@ export default {
                     
                 }
             })
+        },
+
+        clickTrackUrlFocus(){
+            // console.log('focus')
+            this.clickTrackUrlTip=true;
+        },
+        clickTrackUrlBlur(){
+            // console.log('blur')
+            this.clickTrackUrlTip=false;
         }
     },
     created() {
@@ -2509,7 +2602,6 @@ export default {
 
 
 .ant-tooltip-inner,
-.ant-tooltip,
 .ant-tooltip-arrow::before {
   background-color: #fff;
   color: #333;

+ 32 - 2
src/views/modules/autoLaunch/configLaunchList.vue

@@ -99,7 +99,36 @@
             </div>
         </div>
         
-       
+       <!-- 加速坍缩 -->
+        <a-modal v-model="targetVisible" title="加速探索" @ok="targethandleOk">
+            <div class="linkBody">
+                <a-row>
+                    <a-col :span="4">
+                        <p style="text-align:right">加速探索预算:</p>
+                    </a-col>
+                    <a-col :span="18">
+                        <a-input-number :min="100"  :step="0.01"  />
+                    </a-col>
+                </a-row>
+                <p></p>
+                <a-row>
+                    <a-col :span="4">
+                        <p style="text-align:right">最多探索量:
+                            <a-tooltip>
+                                <template slot="title">
+                                该广告账户中加速探索的广告组数量的最大值
+                                </template>
+                                <a-icon type="question-circle" />
+                            </a-tooltip>
+                        </p>
+                    </a-col>
+                    <a-col :span="18">
+                        <a-input-number :min="1" :max="10" :step="1"  />
+                    </a-col>
+                </a-row>
+                
+            </div>
+        </a-modal>
               
     <!-- </a-spin> -->
     </div>
@@ -190,6 +219,7 @@ export default {
     // mixins: [JeecgListMixin],
     data() {
         return {
+            targetVisible:false,
             selectedRecord:{},
             bidErrorMessage:'',
             examineAgainType:1,
@@ -555,7 +585,7 @@ export default {
 
     }
     
-    .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+    .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #333;
     }

+ 0 - 1
src/views/modules/autoLaunch/createStrategy.vue

@@ -367,7 +367,6 @@ export default {
 
 
 .ant-tooltip-inner,
-.ant-tooltip,
 .ant-tooltip-arrow::before {
   background-color: #fff;
   color: #333;

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

@@ -977,7 +977,7 @@ export default {
 
     }
     
-    .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+    .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #333;
     }

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

@@ -1982,7 +1982,7 @@ const publicColumns = [
 .autoLaunchReport{
 
 
-     .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+     .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #333;
     }

+ 0 - 1
src/views/modules/autoLaunch/newAppId.vue

@@ -375,7 +375,6 @@ export default {
 
 
 .ant-tooltip-inner,
-.ant-tooltip,
 .ant-tooltip-arrow::before {
   background-color: #fff;
   color: #333;

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

@@ -986,7 +986,7 @@ export default {
 
     }
     
-    .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+    .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #333;
     }

+ 0 - 1
src/views/modules/autoLaunch/setDirectional.vue

@@ -1775,7 +1775,6 @@ export default {
     //     line-height: 32px;
     // }
 .ant-tooltip-inner,
-.ant-tooltip,
 .ant-tooltip-arrow::before {
   background-color: #fff;
   color: #333;

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

@@ -974,7 +974,7 @@ export default {
 
     }
     
-    .ant-tooltip-inner,.ant-tooltip,.ant-tooltip-arrow::before{
+    .ant-tooltip-inner,.ant-tooltip-arrow::before{
         background-color: #fff;
         color: #333;
     }

File diff suppressed because it is too large
+ 1569 - 0
src/views/modules/columnConst/stockWatch.js


+ 21 - 39
src/views/modules/earlyWarningRules/pushTreeSelect.vue

@@ -81,7 +81,7 @@ export default {
   },
   methods: {
     ...mapGetters(['nickname', 'avatar', 'userInfo']),
-  
+
     emitValue() {
       this.$emit('update:appId', this.value)
     },
@@ -90,52 +90,34 @@ export default {
       // Typically, do the AJAX stuff here.
       // Once the server has responded,
       // assign children options to the parent node & call the callback.
-      if (action === LOAD_CHILDREN_OPTIONS) {
-        getAction('/ctop/userAllocation/getAccountList', { projectId: parentNode.id, userId: this.userInfo().id }).then(
-          (res) => {
-            console.log(res)
-            if (res.code == 0) {
-              if (res.result.length > 0) {
-                parentNode.children = res.result.map((i) => {
-                  return {
-                    id: i.accountId,
-                    label:
-                      (i.userName.length == 2
-                        ? i.userName + '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0'
-                        : i.userName.length == 3
-                        ? i.userName + '\xa0\xa0\xa0\xa0'
-                        : i.userName) +
-                      '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0' +
-                      i.accountId +
-                      '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0' +
-                      i.authName,
-                  }
-                })
-                callback()
-              } else {
-                parentNode.children = []
-                callback()
-              }
-            } else {
-              callback(new Error('Failed to load options: network error.'))
-            }
-          }
-        )
-      }
     },
     getParticipateList() {
       //我参与的
-      getAction('/ctop/projectMember/participateListV2', {
+      this.postDataAction('/ctop/projectMember/participateListByMediaId', {
         userId: this.userInfo().id,
-        pageSize: 1000000,
-        pageNo: 1,
       }).then((res) => {
         if (res.code == 0) {
-          this.options = res.result.records.map((item) => {
+          this.options = res.result.map((item) => {
             return {
-              id: item.projectId,
+              id: item.projectId + 'projectId',
               label: item.projectName + '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0' + item.advertiserName,
-              children: null,
+              children: item.accountList
+                ? item.accountList.map((i) => {
+                    return {
+                      id: i.accountId,
+                      label:
+                        (i.userName.length == 2
+                          ? i.userName + '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0'
+                          : i.userName.length == 3
+                          ? i.userName + '\xa0\xa0\xa0\xa0'
+                          : i.userName) +
+                        '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0' +
+                        i.accountId +
+                        '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0' +
+                        i.authName,
+                    }
+                  })
+                : [],
             }
           })
         }

+ 1 - 1
src/views/modules/kuaishouapp/account/accountIndex.vue

@@ -1222,7 +1222,7 @@ export default {
   computed: {},
   activated() {
     this.manyTwo = this.many
-    this.$refs.treeSelect.getParticipateList()
+    // this.$refs.treeSelect.getParticipateList()
     if (this.appId == '') {
       return
     } else {

+ 39 - 34
src/views/modules/kuaishouapp/account/editGroup.vue

@@ -623,6 +623,45 @@
         this.$refs.application.showApplication()
       },
       handleOk(item, type, campaignId, unitNameCopy, isUpdateTrackUrl, clickTrackUrl) {
+        this.getAppList()
+        this.getCampaignList()
+        this.getMould()
+        getAction('/kuaishou/batch/getIsActivate', {
+          accountId: localStorage.getItem('accountId')
+        }).then(res => {
+          if (res.success) {
+            this.allForm.groupTypeData = res.result
+          }
+        })
+
+        getAction('/kuaishou/batch/getWhiteList',{
+          accountId:localStorage.getItem('accountId')
+        }).then(res=>{
+          if(res.success){
+            console.log(res)
+            if(res.result){
+              if(res.result.alliance_account == 1){
+                this.allianceAccount = true
+              }else{
+                this.allianceAccount = false
+              }
+            }else{
+              this.allianceAccount = false
+            }
+          }
+        })
+
+        getAction('/kuaishou/batch/getProjectMaxBid', {
+          accountId: localStorage.getItem('accountId')
+        }).then(res => {
+          if (res.success) {
+            this.maxBid = res.result / 1000
+          }
+        })
+
+
+
+
         this.checkedTrue = false
         this.nameValue = ''
         this.visible = true
@@ -991,41 +1030,7 @@
       },
     },
     activated: function () {
-      this.getAppList()
-      this.getCampaignList()
-      this.getMould()
-      getAction('/kuaishou/batch/getIsActivate', {
-        accountId: localStorage.getItem('accountId')
-      }).then(res => {
-        if (res.success) {
-          this.allForm.groupTypeData = res.result
-        }
-      })
 
-      getAction('/kuaishou/batch/getWhiteList',{
-        accountId:localStorage.getItem('accountId')
-      }).then(res=>{
-        if(res.success){
-          console.log(res)
-          if(res.result){
-            if(res.result.alliance_account == 1){
-              this.allianceAccount = true
-            }else{
-              this.allianceAccount = false
-            }
-          }else{
-            this.allianceAccount = false
-          }
-        }
-      })
-
-      getAction('/kuaishou/batch/getProjectMaxBid', {
-        accountId: localStorage.getItem('accountId')
-      }).then(res => {
-        if (res.success) {
-          this.maxBid = res.result / 1000
-        }
-      })
     }
   }
 </script>

+ 39 - 35
src/views/modules/kuaishouapp/account/editGroupNew.vue

@@ -636,6 +636,44 @@
         this.$refs.application.showApplication()
       },
       handleOk(item, type, campaignId, unitNameCopy, count, isUpdateTrackUrl, clickTrackUrl) {
+        this.getAppList()
+        this.getCampaignList()
+        this.getMould()
+        getAction('/kuaishou/batch/getIsActivate', {
+          accountId: localStorage.getItem('accountId')
+        }).then(res => {
+          if (res.success) {
+            this.allForm.groupTypeData = res.result
+          }
+        })
+
+        getAction('/kuaishou/batch/getWhiteList',{
+          accountId:localStorage.getItem('accountId')
+        }).then(res=>{
+          if(res.success){
+            console.log(res)
+            if(res.result){
+              if(res.result.alliance_account == 1){
+                this.allianceAccount = true
+              }else{
+                this.allianceAccount = false
+              }
+            }else{
+              this.allianceAccount = false
+            }
+          }
+        })
+
+        getAction('/kuaishou/batch/getProjectMaxBid', {
+          accountId: localStorage.getItem('accountId')
+        }).then(res => {
+          if (res.success) {
+            this.maxBid = res.result / 1000
+          }
+        })
+
+
+
         this.checkedTrue = false
         this.nameValue = ''
         this.visible = true
@@ -1024,41 +1062,7 @@
       },
     },
     activated: function () {
-      this.getAppList()
-      this.getCampaignList()
-      this.getMould()
-      getAction('/kuaishou/batch/getIsActivate', {
-        accountId: localStorage.getItem('accountId')
-      }).then(res => {
-        if (res.success) {
-          this.allForm.groupTypeData = res.result
-        }
-      })
-
-      getAction('/kuaishou/batch/getWhiteList',{
-        accountId:localStorage.getItem('accountId')
-      }).then(res=>{
-        if(res.success){
-          console.log(res)
-          if(res.result){
-            if(res.result.alliance_account == 1){
-              this.allianceAccount = true
-            }else{
-              this.allianceAccount = false
-            }
-          }else{
-            this.allianceAccount = false
-          }
-        }
-      })
-
-      getAction('/kuaishou/batch/getProjectMaxBid', {
-        accountId: localStorage.getItem('accountId')
-      }).then(res => {
-        if (res.success) {
-          this.maxBid = res.result / 1000
-        }
-      })
+     
     }
   }
 </script>

+ 1 - 1
src/views/modules/kuaishouapp/batchCreation/campaignList.vue

@@ -1095,7 +1095,7 @@ export default {
   computed: {},
   activated() {
     this.manyTwo = this.many
-    this.$refs.treeSelect.getParticipateList()
+    // this.$refs.treeSelect.getParticipateList()
     if (this.appId == '') {
       return
     } else {

+ 590 - 0
src/views/modules/kuaishouapp/newBatch/result.vue

@@ -0,0 +1,590 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+          <a-col :md="8" :sm="8">
+            <a-form-item label="广告主开户主体名称">
+              <!-- <a-input placeholder="请输入广告主开户主体名称" v-model="queryParam.name"></a-input> -->
+              <a-select
+                labelInValue
+                v-model="allIdUser"
+                placeholder="请选择广告主开户主体名称"
+                @keyup.enter.native="searchQueryOne"
+                @focus="getList"
+                showSearch
+                optionFilterProp="children"
+                :filterOption="filterOption"
+                @search="getList"
+              >
+                <a-select-option :value="item.id" v-for="(item, index) of list" :key="index">
+                  {{ item.name }}
+                </a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="8" :sm="8">
+            <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQueryOne" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchRe" icon="reload" style="margin-left: 8px">重置</a-button>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 操作按钮区域 -->
+    <!-- <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+    </div>-->
+    <a-tabs @change="callbackTwo" v-model="active">
+      <a-tab-pane key="advertiser" tab="广告主列表"></a-tab-pane>
+      <a-tab-pane key="product" tab="产品列表">
+        <a-tag
+          color="blue"
+          style="height: 30px; line-height: 30px; font-size: 14px; margin-bottom: 20px"
+          v-if="queryParam.advertiserId"
+        >
+          {{ advertiserName }}
+          <a-icon type="close" @click="clear('advertiserId')" />
+        </a-tag>
+        <a-row :gutter="24" style="margin-bottom: 20px">
+          <a-col :md="8" :sm="8">
+            <a-input placeholder="请输入产品名称" v-model="queryParam.productName"></a-input>
+          </a-col>
+          <a-col :md="8" :sm="8">
+            <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQueryOne" icon="search">查询</a-button>
+            </span>
+          </a-col>
+        </a-row>
+      </a-tab-pane>
+      <a-tab-pane key="project" tab="项目列表">
+        <a-tag
+          color="blue"
+          style="height: 30px; line-height: 30px; font-size: 14px; margin-bottom: 20px"
+          v-if="queryParam.productId"
+        >
+          {{ advertiserName ? advertiserName + ' / ' + productName : productName }}
+          <a-icon type="close" @click="clear('productId')" />
+        </a-tag>
+        <a-row :gutter="24" style="margin-bottom: 20px">
+          <a-col :md="8" :sm="8">
+            <a-input placeholder="请输入项目名称" v-model="queryParam.projectName"></a-input>
+          </a-col>
+          <a-col :md="8" :sm="8">
+            <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQueryOne" icon="search">查询</a-button>
+            </span>
+          </a-col>
+        </a-row>
+      </a-tab-pane>
+      <a-button type="primary" slot="tabBarExtraContent" @click="addNew">新增</a-button>
+    </a-tabs>
+
+    <div>
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        @change="handleTableChange"
+      >
+        <span slot="ocpxActionType" slot-scope="text">
+          <div v-if="text">
+            <span v-for="(item, index) of JSON.parse(text)" :key="index"
+              >{{ item | ocpxActionType }}{{ index == JSON.parse(text).length - 1 ? '' : ',' }}</span
+            >
+          </div>
+          <div v-else>-</div>
+
+          <!-- {{ text | ocpxActionType }} -->
+        </span>
+        <span slot="bidType" slot-scope="text">
+          <div v-if="text && JSON.parse(text).length > 0">
+            <span v-for="(item, index) of JSON.parse(text)" :key="index"
+              >{{ item | bidType }}{{ index == JSON.parse(text).length - 1 ? '' : ',' }}</span
+            >
+          </div>
+          <div v-else>-</div>
+        </span>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+            <a>删除</a>
+          </a-popconfirm>
+        </span>
+        <span slot="actionProduct" slot-scope="text, record">
+          <a @click="handleEditElse(record, 'product')">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+            <a>删除</a>
+          </a-popconfirm>
+        </span>
+        <span slot="actionProject" slot-scope="text, record">
+          <a @click="handleEditElse(record, 'project')">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+            <a>删除</a>
+          </a-popconfirm>
+        </span>
+        <span slot="maxBid" slot-scope="text">{{ text / 1000 }}</span>
+        <span slot="maxDeepCpaBid" slot-scope="text">{{ text / 1000 }}</span>
+        <a slot="name" slot-scope="text, record" @click="toProduct(record, 'product')">{{ text }}</a>
+        <a slot="productName" slot-scope="text, record" @click="toProduct(record, 'project')">{{ text }}</a>
+      </a-table>
+    </div>
+    <!-- table区域-begin -->
+
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <j-select-user ref="userForm" @ok="modalFormOk"></j-select-user>
+  </a-card>
+</template>
+
+<script>
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import JTreeSelect from '@/components/jeecg/JTreeSelect'
+import AFormItem from 'ant-design-vue/es/form/FormItem'
+import JSelectDepart from '@/components/jeecgbiz/JSelectDepart'
+import JSelectUserByDep from '@/components/jeecgbiz/JSelectUserByDep'
+import JSelectUser from '@/components/jeecgbiz/JSelectUser'
+import { postAction, getAction } from '@/api/manage'
+import { mapActions, mapGetters } from 'vuex'
+
+const advertiserColumns = [
+  {
+    title: '广告主开户主体名称',
+    align: 'center',
+    dataIndex: 'name',
+    scopedSlots: { customRender: 'name' },
+  },
+  {
+    title: '联系人姓名',
+    align: 'center',
+    dataIndex: 'contact',
+  },
+  {
+    title: '联系人手机',
+    align: 'center',
+    dataIndex: 'mobile',
+  },
+  {
+    title: '联系人邮箱',
+    align: 'center',
+    dataIndex: 'email',
+  },
+  {
+    title: '操作',
+    dataIndex: 'action',
+    align: 'center',
+    scopedSlots: { customRender: 'action' },
+  },
+]
+const productColumns = [
+  {
+    title: '产品名',
+    align: 'center',
+    dataIndex: 'productName',
+    scopedSlots: { customRender: 'productName' },
+  },
+  {
+    title: '广告主名称',
+    align: 'center',
+    dataIndex: 'advertiserId_dictText',
+  },
+  {
+    title: '创建人',
+    align: 'center',
+    dataIndex: 'userId_dictText',
+  },
+  {
+    title: '行业',
+    align: 'center',
+    dataIndex: 'industryId_dictText',
+  },
+  {
+    title: '状态',
+    align: 'center',
+    dataIndex: 'productStatus',
+    customRender: function (text) {
+      if (text == 0) {
+        return '启动'
+      } else if (text == 1) {
+        return '暂停'
+      } else if (text == 2) {
+        return '删除'
+      }
+    },
+  },
+  {
+    title: '操作',
+    dataIndex: 'actionProduct',
+    align: 'center',
+    scopedSlots: { customRender: 'actionProduct' },
+  },
+]
+const projectColumns = [
+  {
+    title: '项目名称',
+    align: 'center',
+    dataIndex: 'projectName',
+  },
+  {
+    title: '产品名',
+    align: 'center',
+    dataIndex: 'productId_dictText',
+  },
+  {
+    title: '广告主名称',
+    align: 'center',
+    dataIndex: 'advertiserId_dictText',
+  },
+  {
+    title: '最高出价',
+    align: 'center',
+    dataIndex: 'maxBid',
+    scopedSlots: {
+      customRender: 'maxBid',
+    },
+  },
+  {
+    title: '最高转化出价',
+    align: 'center',
+    dataIndex: 'maxDeepCpaBid',
+    scopedSlots: {
+      customRender: 'maxDeepCpaBid',
+    },
+  },
+  {
+    title: '优化目标',
+    align: 'center',
+    dataIndex: 'bidType',
+    scopedSlots: {
+      customRender: 'bidType',
+    },
+  },
+  {
+    title: '转化目标',
+    align: 'center',
+    dataIndex: 'ocpxActionType',
+    scopedSlots: {
+      customRender: 'ocpxActionType',
+    },
+  },
+  {
+    title: '供应商',
+    align: 'center',
+    dataIndex: 'supplierCode_dictText',
+  },
+  {
+    title: '销售',
+    align: 'center',
+    dataIndex: 'saleId_dictText',
+  },
+  {
+    title: '运营负责人',
+    align: 'center',
+    dataIndex: 'responsibleId_dictText',
+  },
+  {
+    title: '设计负责人',
+    align: 'center',
+    dataIndex: 'designResponsibleId_dictText',
+  },
+  {
+    title: '操作',
+    dataIndex: 'actionProject',
+    align: 'center',
+    scopedSlots: {
+      customRender: 'actionProject',
+    },
+  },
+]
+export default {
+  name: 'AdvertiserList',
+  mixins: [JeecgListMixin],
+  components: {
+    AFormItem,
+    JTreeSelect,
+    JSelectUserByDep,
+    JSelectDepart,
+    JSelectUser,
+  },
+  data() {
+    return {
+      list: [],
+      allIdUser: {},
+      departDisabled: false, //是否是我的部门调用该页面
+      users: this.userInfo().realname, //用户名称
+      departmentId: this.userInfo().departId, //部门id
+      description: '广告主信息表管理页面',
+      visible: false,
+      accountName: '',
+      password: '',
+      mode: 'login',
+      showLogin: true,
+      showAuthorization: false,
+      authorizationType: 'kuaishou',
+      loginType: 'kuaishou',
+      form: this.$form.createForm(this),
+      active: 'advertiser',
+      advertiserName: '',
+      advertiserId: '',
+      productName: '',
+      examinelList: [
+        {
+          value: '0',
+          tab: '广告主列表',
+        },
+        {
+          value: '1',
+          tab: '产品列表',
+        },
+        {
+          value: '2',
+          tab: '项目列表',
+        },
+      ],
+      // 表头
+      columns: advertiserColumns,
+      url: {
+        list: '/ctop/advertiser/list',
+        delete: '/ctop/advertiser/delete',
+        deleteBatch: '/ctop/advertiser/deleteBatch',
+        exportXlsUrl: 'ctop/advertiser/exportXls',
+        importExcelUrl: 'ctop/advertiser/importExcel',
+        bindAccountLoginUrl: '/ctop/bindAccountLogin/login',
+        bindAuthorizationUrl: '/ctop/bindAccountAuth/authorization',
+        getLoginInfo: '/ctop/bindAccount/getLoginInfo',
+        userId: '/sys/user/generateUserId', // 引入生成添加用户情况下的url
+        userWithDepart: '/sys/user/userDepartList', // 引入为指定用户查看部门信息需要的url
+      },
+    }
+  },
+  computed: {
+    importExcelUrl: function () {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+    },
+  },
+  created() {
+    // this.queryParam.userId = this.userInfo().id
+    this.getList(null)
+  },
+  methods: {
+    filterOption(input, option) {
+      return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+    },
+    getList(value) {
+      var params = {}
+      // params.userId = this.userInfo().id
+      params.pageSize = 50
+      params.pageNo = 1
+      params.name = value
+      console.log(params)
+      getAction('/ctop/advertiser/list', params)
+        .then((res) => {
+          if (res.success) {
+            console.log(res)
+            this.list = res.result.records
+          } else {
+            this.$message.warning(res.message)
+          }
+        })
+        .finally(() => {})
+    },
+    handleEditElse(item, type) {
+      if (type == 'product') {
+        this.$refs.modalFormTwo.edit(item)
+        this.$refs.modalFormTwo.title = '编辑'
+        this.$refs.modalFormTwo.disableSubmit = false
+      } else if (type == 'project') {
+        this.$refs.modalFormThree.edit(item)
+        this.$refs.modalFormThree.title = '编辑'
+        this.$refs.modalFormThree.disableSubmit = false
+      }
+    },
+    clear(type) {
+      this.queryParam.name = null
+      this.queryParam.advertiserId = null
+      this.queryParam.productId = null
+      this.queryParam.id = null
+      this.queryParam.productName = null
+      this.queryParam.projectName = null
+      this.allIdUser = {}
+      this.loadData(1)
+    },
+    addNew() {
+      if (this.active == 'advertiser') {
+        this.$refs.modalForm.add()
+        this.$refs.modalForm.title = '新增'
+        this.$refs.modalForm.disableSubmit = false
+      } else if (this.active == 'product') {
+        if (this.queryParam.advertiserId) {
+          this.$refs.modalFormTwo.add({ advertiserId: this.queryParam.advertiserId })
+        } else {
+          this.$refs.modalFormTwo.add()
+        }
+        this.$refs.modalFormTwo.title = '新增'
+        this.$refs.modalFormTwo.disableSubmit = false
+      } else if (this.active == 'project') {
+        this.$refs.modalFormThree.add({
+          advertiserId: this.queryParam.advertiserId
+            ? this.queryParam.advertiserId
+            : this.advertiserId
+            ? this.advertiserId
+            : undefined,
+          productId: this.queryParam.productId ? this.queryParam.productId : undefined,
+        })
+        this.$refs.modalFormThree.title = '新增'
+        this.$refs.modalFormThree.disableSubmit = false
+      }
+    },
+    toProduct(item, key) {
+      if (key == 'product') {
+        this.queryParam.advertiserId = item.id
+        this.advertiserName = item.name
+        this.queryParam.productId = null
+        this.productName = null
+        this.queryParam.productName = null
+        this.callbackTwo('product')
+      } else if (key == 'project') {
+        this.queryParam.productId = item.id
+        this.productName = item.productName
+        this.advertiserId = item.advertiserId
+        this.queryParam.projectName = null
+        this.callbackTwo('project')
+      }
+    },
+    callbackTwo(key) {
+      this.active = key
+      if (key == 'advertiser') {
+        this.columns = advertiserColumns
+        this.url.list = '/ctop/advertiser/list'
+        this.url.delete = '/ctop/advertiser/delete'
+      } else if (key == 'product') {
+        this.columns = productColumns
+        this.url.list = '/ctop/product/list'
+        this.url.delete = '/ctop/product/delete'
+      } else if (key == 'project') {
+        this.columns = projectColumns
+        this.url.list = '/ctop/project/list'
+        this.url.delete = '/ctop/project/delete'
+      }
+      this.searchQueryOne()
+    },
+    ...mapGetters(['nickname', 'avatar', 'userInfo']),
+    searchRe() {
+      this.queryParam.name = null
+      this.queryParam.advertiserId = null
+      this.queryParam.productId = null
+      this.queryParam.id = null
+      this.queryParam.productName = null
+      this.queryParam.projectName = null
+      this.allIdUser = {}
+      this.callbackTwo('advertiser')
+    },
+    searchQueryOne() {
+      console.log(this.allIdUser)
+      if (this.allIdUser.key) {
+        if (this.active == 'advertiser') {
+          this.queryParam.advertiserId = null
+          this.queryParam.id = this.allIdUser.key
+        } else {
+          this.queryParam.id = null
+          this.queryParam.advertiserId = this.allIdUser.key
+        }
+        this.advertiserName = this.allIdUser.label
+      } else {
+        // this.queryParam.advertiserId = null
+        // this.queryParam.productId = null
+        // this.queryParam.id = null
+      }
+      this.searchQuery()
+    },
+    handleSubmit() {
+      let params = {}
+      params.advertiserId = this.record.id
+      params.advertiser_name = this.record.name
+      params.userId = this.userInfo().id
+      params.userName = this.userInfo().realname
+      params.projectId = this.record.projectId
+      params.projectName = this.record.projectName
+
+      // 触发表单验证
+      this.form.validateFields((err) => {
+        if (!err) {
+          if (this.mode == 'login') {
+            params.accountName = this.accountName
+            params.password = this.password
+            params.loginType = this.loginType
+            if (this.loginType == 'kuaishou') {
+              params.mediaId = 2
+            } else if (this.loginType == 'bytedance') {
+              params.mediaId = 1
+            }
+            postAction(this.url.bindAccountLoginUrl, params).then((res) => {
+              if (res.success) {
+                alert('绑定成功')
+                this.accountName = ''
+                this.password = ''
+                this.loginType = ''
+              } else {
+                alert(res.message)
+              }
+            })
+          }
+          // 授权登录
+          if (this.mode == 'authorization') {
+            params.authorizationType = this.authorizationType
+            if (this.authorizationType == 'kuaishou') {
+              params.mediaId = 2
+            } else if (this.authorizationType == 'bytedance') {
+              params.mediaId = 1
+            }
+            postAction(this.url.bindAuthorizationUrl, params).then((res) => {
+              if (res.success) {
+                window.open(res.message, '_blank')
+              } else {
+                alert('绑定失败')
+              }
+            })
+          }
+        }
+      })
+    },
+
+    onChageLogin() {
+      console.log(this.mode)
+      if (this.mode == 'login') {
+        this.showLogin = true
+        this.showAuthorization = false
+      } else {
+        this.showLogin = false
+        this.showAuthorization = true
+      }
+    },
+    showModal(record) {
+      this.record = record
+      this.visible = true
+    },
+
+    handleCancel() {
+      this.close()
+    },
+  },
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>

+ 0 - 1
src/views/modules/kuaishouapp/populationAnalysis/index.vue

@@ -1287,7 +1287,6 @@ export default {
 
 <style lang="scss">
 .ant-tooltip-inner,
-.ant-tooltip,
 .ant-tooltip-arrow::before {
   background-color: #fff;
   color: #333;

+ 1 - 1
src/views/modules/material/musicTab.vue

@@ -172,7 +172,7 @@ export default {
 }
 </style>
 <style lang="less">
-.ant-tabs-bar {
+.music-tab .ant-tabs-bar {
   margin: 0 0 12px 0;
   /* height: 55px; */
   border-bottom: 1px solid #e8e8e8;

File diff suppressed because it is too large
+ 1286 - 478
src/views/modules/stockWatch/accountPage.vue


+ 9 - 4
src/views/modules/stockWatch/modules/customColumn.vue

@@ -130,10 +130,15 @@ export default {
     },
     //弹出框确定
     handleOk(e) {
-      this.loading = false
-      this.visibleOk = false
-      this.$emit('closeCustomColumn', false)
-      this.$emit('changeColumn', this.mylistNum)
+      if(this.mylistNum.length<5){
+        this.$message.error('此处自定义列必须选择五项数据')
+      }else{
+        this.loading = false
+        this.visibleOk = false
+        this.$emit('closeCustomColumn', false)
+        this.$emit('changeColumn', this.mylistNum)
+      }
+      
     },
     //取消按钮
     handleCancel() {

+ 58 - 4
src/views/modules/stockWatch/modules/selectComponent.vue

@@ -31,7 +31,7 @@
 </template>
 
 <script>
-import  {TTcustomFields ,KScustomFields}  from '../../columnConst/accountConst'
+import  {TTcustomFields ,KScustomFields}  from '../../columnConst/stockWatch.js'
 // let customFields=customFields
 export default {
   props: ['showCol','fixedCol','mediaType'],
@@ -48,7 +48,34 @@ export default {
   watch: {
     
     showCol(n) {
-      // console.log(n)
+      console.log(n)
+      if(n.length>=5){
+        this.customFields.map((it, ind) => {
+          it.specificFields.map((i, d) => {
+            // if (i.dataIndex === item.dataIndex) {
+              i.disabled=true;
+            // }
+          })
+        })
+        
+      }else{
+        this.customFields.map((it, ind) => {
+          it.specificFields.map((i, d) => {
+            // if (i.dataIndex === item.dataIndex) {
+              i.disabled=false;
+            // }
+          })
+        })
+        this.fixedCol.map((item, index) => {
+          this.customFields.map((it, ind) => {
+            it.specificFields.map((i, d) => {
+              if (i.dataIndex === item.dataIndex) {
+                i.disabled=true;
+              }
+            })
+          })
+        })
+      }
       //
       if (this.showCol.length == this.fixedCol.length) {
 
@@ -109,6 +136,7 @@ export default {
         })
       })
     })
+    
     this.fixedCol.map((item, index) => {
       this.customFields.map((it, ind) => {
         it.specificFields.map((i, d) => {
@@ -119,7 +147,33 @@ export default {
       })
     })
 
-
+    if(this.showCol.length>=5){
+        this.customFields.map((it, ind) => {
+          it.specificFields.map((i, d) => {
+            // if (i.dataIndex === item.dataIndex) {
+              i.disabled=true;
+            // }
+          })
+        })
+        
+      }else{
+        this.customFields.map((it, ind) => {
+          it.specificFields.map((i, d) => {
+            // if (i.dataIndex === item.dataIndex) {
+              i.disabled=false;
+            // }
+          })
+        })
+        this.fixedCol.map((item, index) => {
+          this.customFields.map((it, ind) => {
+            it.specificFields.map((i, d) => {
+              if (i.dataIndex === item.dataIndex) {
+                i.disabled=true;
+              }
+            })
+          })
+        })
+      }
     // console.log(this.customFields);
     
   },
@@ -139,7 +193,7 @@ export default {
     //全选框   判断是否全选
     isSelectAll(e, val) {
       //像父元素传递
-      console.log(e, val)
+      // console.log(e, val)
       let arr=JSON.parse(JSON.stringify(this.customFields[val].specificFields))
       let valArr={
         flag:true,

+ 1 - 1
src/views/modules/workBench/designLeader/index.vue

@@ -20,7 +20,7 @@ export default {
 
     data() {
         return {
-            currentTabComponent:'designleaderPlatform',
+            currentTabComponent:'designleaderPlatform',//当前加载的组件名称
             orderStatus:undefined,//跳转到订单详情时需要里面的参数  status订单参数 role 当前角色
             role:'designLeader',
             materialStatus:undefined,