Преглед на файлове

2022-09-06提交(度小满视频库)

朱鑫波 преди 2 години
родител
ревизия
238f3a958b

+ 1 - 1
.env.development

@@ -14,7 +14,7 @@ VUE_APP_BASE_SCRIPT_URL = http://192.168.0.195:31013
 
 
 #素材大盘相关接口
-VUE_APP_BASE_MATERIAL_URL = http://api.tjyourong.com.cn/material
+VUE_APP_BASE_MATERIAL_URL = http://192.168.1.59:9999
 # 字安接口 http://192.168.1.43:9999
 # 测试环境 http://192.168.0.195:9999
 # 西安环境 http://192.168.1.59:7006

+ 178 - 101
src/components/jeecg/JEditor.vue

@@ -1,118 +1,195 @@
 <template>
-  <div class="tinymce-editor">
-    <editor
-      v-model="myValue"
-      :init="init"
-      :disabled="disabled"
-      @onClick="onClick">
-    </editor>
-  </div>
+    <div class="tinymce-editor">
+        <editor v-model="myValue" :init="init" :disabled="disabled" @onClick="onClick" @onChange="onChange"> </editor>
+    </div>
 </template>
 
 <script>
-  import tinymce from 'tinymce/tinymce'
-  import Editor from '@tinymce/tinymce-vue'
-  import 'tinymce/themes/silver/theme'
-  import 'tinymce/plugins/image'
-  import 'tinymce/plugins/link'
-  import 'tinymce/plugins/media'
-  import 'tinymce/plugins/table'
-  import 'tinymce/plugins/lists'
-  import 'tinymce/plugins/contextmenu'
-  import 'tinymce/plugins/wordcount'
-  import 'tinymce/plugins/colorpicker'
-  import 'tinymce/plugins/textcolor'
-  import 'tinymce/plugins/fullscreen'
-  import { uploadAction,getFileAccessHttpUrl } from '@/api/manage'
-  export default {
+import tinymce from 'tinymce/tinymce'
+import Editor from '@tinymce/tinymce-vue'
+import 'tinymce/themes/silver/theme'
+import 'tinymce/plugins/image'
+import 'tinymce/plugins/link'
+import 'tinymce/plugins/media'
+import 'tinymce/plugins/table'
+import 'tinymce/plugins/lists'
+import 'tinymce/plugins/contextmenu'
+import 'tinymce/plugins/wordcount'
+import 'tinymce/plugins/colorpicker'
+import 'tinymce/plugins/textcolor'
+import 'tinymce/plugins/fullscreen'
+import { uploadAction, getFileAccessHttpUrl } from '@/api/manage'
+var COS = require('cos-js-sdk-v5')
+var cos = new COS({
+    SecretId: 'AKIDE6IpMi8fJQRCg1iuWzFajjRs43kbbets',
+    SecretKey: 'tXzuwMfplTTK3c9GFUyETilasvQfePu9',
+})
+export default {
     components: {
-      Editor
+        Editor,
     },
     props: {
-      value: {
-        type: String,
-        required:false
-      },
-      triggerChange:{
-        type: Boolean,
-        default: false,
-        required:false
-      },
-      disabled: {
-        type: Boolean,
-        default: false
-      },
-      plugins: {
-        type: [String, Array],
-        default: 'lists image link media table textcolor wordcount contextmenu fullscreen'
-      },
-      toolbar: {
-        type: [String, Array],
-        default: 'undo redo |  formatselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists link unlink image media table | removeformat | fullscreen',
-        branding:false
-      }
+        value: {
+            type: String,
+            required: false,
+        },
+        triggerChange: {
+            type: Boolean,
+            default: false,
+            required: false,
+        },
+        disabled: {
+            type: Boolean,
+            default: false,
+        },
+        plugins: {
+            type: [String, Array],
+            default: 'paste lists image link media table textcolor wordcount contextmenu fullscreen',
+        },
+        toolbar: {
+            type: [String, Array],
+            default: '',
+            branding: false,
+        },
     },
     data() {
-      return {
-        //初始化配置
-        init: {
-          language_url: '/tinymce/langs/zh_CN.js',
-          language: 'zh_CN',
-          skin_url: '/tinymce/skins/lightgray',
-          height: 300,
-          plugins: this.plugins,
-          toolbar: this.toolbar,
-          branding: false,
-          menubar: false,
-          toolbar_drawer: false,
-          images_upload_handler: (blobInfo, success) => {
-            let formData = new FormData()
-            formData.append('file', blobInfo.blob(), blobInfo.filename());
-            formData.append('biz', "jeditor");
-            formData.append("jeditor","1");
-            uploadAction(window._CONFIG['domianURL']+"/sys/common/upload", formData).then((res) => {
-              if (res.success) {
-                if(res.message == 'local'){
-                  const img = 'data:image/jpeg;base64,' + blobInfo.base64()
-                  success(img)
-                }else{
-                  let img = getFileAccessHttpUrl(res.message)
-                  success(img)
-                }
-              }
-            })
-          }
-        },
-        myValue: this.value
-      }
+        return {
+            //初始化配置
+            init: {
+                selector: '#tinydemo',
+                language_url: '/tinymce/langs/zh_CN.js',
+                language: 'zh_CN',
+                skin_url: '/tinymce/skins/lightgray',
+                height: 300,
+                plugins: ['paste'],
+                toolbar: this.toolbar,
+                branding: true,
+                menubar: false,
+                toolbar_drawer: true,
+                paste_data_images: true,
+                images_upload_credentials: true,
+                //  解决截图,不走图片上传问题
+                urlconverter_callback: (url, node, onSave, name) => {
+                    if (node === 'img' && url.startsWith('blob:')) {
+                        // Do some custom URL conversion
+                        // console.log('urlConverter:', url, node, onSave, name)
+                        tinymce.activeEditor && tinymce.activeEditor.uploadImages()
+                    }
+                    // Return new URL
+                    return url
+                },
+                images_upload_handler: (blobInfo, success) => {
+                    this.cosUpload(blobInfo, success)
+                    // let formData = new FormData()
+                    // formData.append('file', blobInfo.blob(), blobInfo.filename())
+                    // formData.append('biz', 'jeditor')
+                    // formData.append('jeditor', '1')
+
+                    // uploadAction(window._CONFIG['domianURL'] + '/sys/common/upload', formData).then((res) => {
+                    //     console.log(res)
+                    //     if (res.success) {
+                    //         if (res.message == 'local') {
+                    //             const img = 'data:image/jpeg;base64,' + blobInfo.base64()
+                    //             success(img)
+                    //         } else {
+                    //             let img = getFileAccessHttpUrl(res.message)
+                    //             success(img)
+                    //         }
+                    //     }
+                    // })
+                },
+            },
+            myValue: this.value,
+        }
     },
     mounted() {
-      tinymce.init({})
+        tinymce.init(this.init)
     },
     methods: {
+        onClick(e) {
+            this.$emit('onClick', e, tinymce)
+        },
+        //可以添加一些自己的自定义事件,如清空内容
+        clear() {
+            this.myValue = ''
+        },
+        onChange(e) {},
+
+        cosUpload(blobInfo, success) {
+            console.log(success)
+            this.$nextTick(() => {
+                var that = this
+                let date = new Date()
+                let y = date.getFullYear()
+                let MM = date.getMonth() + 1
+                MM = MM < 10 ? '0' + MM : MM
+                let d = date.getDate()
+                d = d < 10 ? '0' + d : d
+                var timeElse = new Date().getTime()
+                var arr = blobInfo.filename().split('.')
 
-      onClick(e) {
-        this.$emit('onClick', e, tinymce)
-      },
-      //可以添加一些自己的自定义事件,如清空内容
-      clear() {
-        this.myValue = ''
-      }
+                var str = ''
+                for (let i = 0; i < arr.length; i++) {
+                    if (i == arr.length - 1) {
+                    } else {
+                        if (i == arr.length - 2) {
+                            str += arr[i]
+                        } else {
+                            str += arr[i] + '.'
+                        }
+                    }
+                }
+                // console.log(str + '-' + timeElse + '.' + arr[arr.length - 1])
+                cos.putObject(
+                    {
+                        Bucket: 'media-1301855440',
+                        /* 必须 */
+                        Region: 'ap-chongqing',
+                        /* 存储桶所在地域,必须字段 */
+                        Key: 'video/' + y + '-' + MM + '-' + d + '/' + str + '-' + timeElse + '.jpg',
+                        /* 必须 */
+                        StorageClass: 'STANDARD',
+                        Body: blobInfo.blob(), // 上传文件对象
+                        onProgress: function (progressData) {
+                            //进度条方法
+                        },
+                        onTaskReady: function (tid) {
+                            // console.log('onTaskReady', tid);
+                        },
+                        onTaskStart: function (info) {
+                            //开始上传
+                            // console.log('onTaskStart', info);
+                        },
+                    },
+                    function (err, data) {
+                        console.log(err, data)
+                        if (err) {
+                            that.$message.error('上传失败!!!' + err)
+                            return
+                        } else {
+                            var img = '//' + data.Location
+                            success(img)
+                        }
+                    }
+                )
+            })
+        },
     },
     watch: {
-      value(newValue) {
-        this.myValue = (newValue == null ? '' : newValue)
-      },
-      myValue(newValue) {
-        if(this.triggerChange){
-          this.$emit('change', newValue)
-        }else{
-          this.$emit('input', newValue)
-        }
-      }
-    }
-  }
-
+        value(newValue) {
+            this.myValue = newValue == null ? '' : newValue
+        },
+        myValue(newValue) {
+            console.log(newValue)
+            console.log(tinymce.editors['tinydemo'])
+            // tinymce.editors['tinydemo'].getContent()
+            if (this.triggerChange) {
+                this.$emit('change', newValue)
+            } else {
+                this.$emit('input', newValue)
+            }
+        },
+    },
+}
 </script>
-<style scoped>
-</style>
+<style scoped></style>

+ 3 - 3
src/components/uploadFile.vue

@@ -12,7 +12,7 @@
       action="https://media-1301855440.cos.ap-chongqing.myqcloud.com/"
       :before-upload="beforeUpload"
       @change="handleChange"
-      :accept="uploadType + '/' + (uploadType == 'image' ? 'jpeg,image/jpg' : 'mp4')"
+      :accept="uploadType == 'script'?'.doc,.txt,.pdf':uploadType + '/' + (uploadType == 'image' ? 'jpeg,image/jpg' : 'mp4')"
       :file-list="fileList"
       :remove="removeFile"
       @preview="handlePreview"
@@ -24,11 +24,11 @@
       </div>
     </a-upload>
     <div style="color: red" v-if="sizeCheck">
-      {{ uploadType == 'image' ? '请上传jpg格式的图片,并且大小在2m之内' : '请上传mp4格式,大小在'+(size/1024)+'m之内' }}
+      {{ uploadType == 'image' ? '请上传jpg格式的图片,并且大小在2m之内' : uploadType == 'video'?'请上传mp4格式,大小在'+(size/1024)+'m之内':'' }}
     </div>
     <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
       <img alt="example" style="width: 100%" :src="previewImage" v-if="uploadType == 'image'" />
-      <video :src="previewImage" v-else style="width: 100%" controls="controls">您的浏览器不支持 video 标签。</video>
+      <video :src="previewImage" v-else-if="uploadType == 'video'" style="width: 100%" controls="controls">您的浏览器不支持 video 标签。</video>
     </a-modal>
   </div>
 </template>

+ 11 - 8
src/views/dashboard/Analysis.vue

@@ -73,6 +73,7 @@
     <!--  -->
 
     <operateStatistics v-if="roleCode == 'operator' || roleCode == 'operationAssistant'"/>
+    <onlyOneDashboard v-else-if="userInfo().id == '228c45f913924639bf20c79ce5dadb16'||userInfo().id == 'b161b7d9793942f980dbfe8c931cd1b0'||userInfoId" />
     <managerStatistics v-else-if="userInfoId || roleCode == 'CompanyManager'"/>
     <groupKeepManage v-else-if="roleCode == 'kuaishouOperationManager'||roleCode == 'kuaishouDirector'"/>
     <newHome v-else-if=" roleCode == 'touTiaoOperationManager'||roleCode == 'bytedanceDirector'" />
@@ -157,6 +158,7 @@
   import newHome from '@/views/modules/Statistics/newHome.vue'
   import Workbench from '@/views/dashboard/Workbench.vue'
   import Statistics from '@/views/modules/Statistics/Statistics.vue'
+  import onlyOneDashboard from './onlyOneDashboard'
   const rankList = []
   for (let i = 0; i < 7; i++) {
     rankList.push({
@@ -190,7 +192,8 @@
       Statistics,
       managerStatistics,
       operateStatistics,
-      groupKeepManage
+      groupKeepManage,
+      onlyOneDashboard
     },
     data() {
       return {
@@ -230,14 +233,14 @@
       },
       // 跳转数据看板
       dataKanBan(){
-                    const a = document.createElement('a');
-                    document.body.appendChild(a);
-                    a.style.display = 'none';
-                    a.href = 'http://adsp.c-top.com.cn/boss-data-kanban';
+        const a = document.createElement('a');
+        document.body.appendChild(a);
+        a.style.display = 'none';
+        a.href = 'http://adsp.c-top.com.cn/boss-data-kanban';
 
-                    a.target = '_blank'
-                    a.click();
-                    document.body.removeChild(a);
+        a.target = '_blank'
+        a.click();
+        document.body.removeChild(a);
       },
       initLogInfo() {
         getLoginfo(null).then(res => {

Файловите разлики са ограничени, защото са твърде много
+ 1765 - 0
src/views/dashboard/onlyOneDashboard.vue


+ 2 - 1
src/views/modules/Statistics/saleStatistics/index.vue

@@ -810,11 +810,12 @@ export default {
                     if (res.success) {
                         this.dataDimensionList = res.result
                         this.dataDimensionValue = res.result[0].companyId
+                        console.log(this.userInfo())
                         if (
                             this.userInfo().id != 'b161b7d9793942f980dbfe8c931cd1b0' &&
                             this.userInfo().id != '228c45f913924639bf20c79ce5dadb16'
                         ) {
-                            if (this.userInfo().roleName != '管理员') {
+                            if (this.userInfo().roleName != '管理员'&&this.userInfo().roleName != '销售AM') {
                                 this.disabledValue = true
                             } else {
                                 this.disabledValue = false

+ 134 - 10
src/views/modules/advertiser/ProjectMemberList.vue

@@ -87,6 +87,9 @@
           mediaId == 1 ? '头条' : mediaId == 2 ? '快手' : mediaId == 3 ? '头条内广' : mediaId == 4 ? '快手内广':mediaId== 5 ? '千川' :'磁力金牛'
         }}</span>
         <span slot="action" slot-scope="text, record">
+          <a @click="handleSync(record)" v-if="noTitleKey == 'myProject'&&(userInfo().id=='a6abfea0f27843bf8595a234410afb04'
+          ||userInfo().id=='e9ca23d68d884d4ebb19d07889727dae')">推送素材</a>
+          <a-divider type="vertical" v-if="noTitleKey == 'myProject'"/>
           <a @click="handleEdit(record)">{{ noTitleKey == 'myProject' ? '查看成员' : '账号绑定' }}</a>
           <a-divider type="vertical" />
           <a @click="addParams(record)">{{ noTitleKey == 'myProject' ? '新增人员' : '查看账户' }}</a>
@@ -109,7 +112,6 @@
       :maskClosable="false"
       :title="title"
       v-model="visible"
-      @ok="handleOk"
       width="800px"
       class="close-account-my-project"
     >
@@ -202,13 +204,13 @@
             :wrapper-col="{ xs: { span: 24 }, sm: { span: 16 } }"
           >
             <a-date-picker 
-				v-model="dateValue"
-				style="width: 180px;"
-				:allowClear="false"
-				format="YYYY-MM-DD"
-				:disabled-date="disabledDate"
-				@change="handleCostTimeChange" 
-			/>
+              v-model="dateValue"
+              style="width: 180px;"
+              :allowClear="false"
+              format="YYYY-MM-DD"
+              :disabled-date="disabledDate"
+              @change="handleCostTimeChange" 
+            />
           </a-form-item>
           <a-form-item
             label="开户代理商:"
@@ -350,7 +352,6 @@
       :maskClosable="false"
       :title="titleAccount"
       v-model="visibleAccount"
-      @ok="handleOk"
       width="800px"
       class="close-account-my-project"
     >
@@ -395,6 +396,34 @@
         </span>
       </a-table>
     </a-modal>
+
+        <!--  查看项目下的账号 -->
+    <a-modal
+      :maskClosable="false"
+      title="推送素材"
+      v-model="visibleMaterial"
+      @ok="handleOk"
+      width="800px"
+    >
+      <a-input-search
+        :style="{width:'150px',marginBottom:'15px'}"
+        placeholder="请输入项目名称"
+        v-model="keyWordMaterial"
+        @search="getMaterialListPageNo"
+      ></a-input-search>
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columnsMaterial"
+        :dataSource="dataMaterial"
+        :pagination="ipaginationMaterial"
+        :rowSelection="{selectedRowKeys: selectedRowKeys,onChange: onSelectChange}"
+        :loading="loadingMaterial"
+      >
+      </a-table>
+    </a-modal>
   </a-card>
 </template>
 
@@ -577,6 +606,7 @@ export default {
       // 表头
       visible: false,
       keyWord: '',
+      keyWordMaterial:'',
       mode: 'authorization',
       mediaId: '2',
       accountName: '',
@@ -646,6 +676,58 @@ export default {
           this.ipaginationAccount.current = current
         },
       },
+      visibleMaterial:false,
+      thisProjectId:null,
+      selectedRowKeys:[],
+      selectedRows: [],
+      ipaginationMaterial: {
+        current: 1,
+        pageSize: 10,
+        //   pageSizeOptions: ['10', '20', '30'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 共' + total + '条'
+        },
+        showQuickJumper: true,
+        //   showSizeChanger: true,
+        total: 0,
+        onChange: (current) => {
+          // 切换分页时的回调,
+          // 当在页面定义change事件时,切记要把此处的事件清除,因为这两个事件重叠了,可能到时候会导致一些莫名的bug
+          this.ipaginationMaterial.current = current
+          
+          this.getMaterialList()
+        },
+      },
+      loadingMaterial: false,
+      dataMaterial:[],
+      columnsMaterial:[
+        {
+          title: '项目名称',
+          align: 'center',
+          dataIndex: 'projectName',
+        },
+        {
+          title: '广告主名称',
+          align: 'center',
+          dataIndex: 'advertiserId_dictText',
+        },
+        {
+          title: '产品名称',
+          align: 'center',
+          dataIndex: 'productId_dictText',
+        },
+
+        {
+          title: '运营负责人',
+          align: 'center',
+          dataIndex: 'responsibleId_dictText',
+        },
+        {
+          title: '设计负责人',
+          align: 'center',
+          dataIndex: 'designResponsibleId_dictText',
+        },
+      ],
       loadingAccount: false,
       projectVisible: false,
       columnsProject: [
@@ -762,6 +844,10 @@ export default {
     },
   },
   methods: {
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
     changeData(data) {
       if (data.length > 1 && data.findIndex((item) => item == 1) == 0) {
         data.splice(
@@ -913,7 +999,17 @@ export default {
       })
     },
     handleOk(e) {
-      this.visible = false
+      this.postDataAction('/ctop/materialInfo/materialSync',{projectId:this.thisProjectId,toProjectIds:this.selectedRowKeys}).then(res=>{
+        if(res.success){
+          this.visibleMaterial = false
+          this.thisProjectId = null
+          this.selectedRowKeys = []
+          this.keyWordMaterial = ''
+          this.$message.success(res.message)
+        }else{
+          this.$message.error(res.message)
+        }
+      })
     },
     handleOkAdd(e) {
       var params = {}
@@ -962,6 +1058,34 @@ export default {
       }
     },
     handleAdd() {},
+    handleSync(item){
+      this.dataMaterial = []
+      this.visibleMaterial = true
+      this.thisProjectId = item.id
+      this.getMaterialList()
+    },
+    getMaterialListPageNo(){
+      this.ipaginationMaterial.current = 1
+      this.getMaterialList()
+    },
+    getMaterialList(){
+      this.loadingMaterial = true
+      getAction('/ctop/project/responsibleListV2', {
+        userId: this.userInfo().id,
+        pageSize: this.ipaginationMaterial.pageSize,
+        pageNo: this.ipaginationMaterial.current,
+        projectName: this.keyWordMaterial,
+      }).then((res) => {
+        this.loadingMaterial = false
+        if (res.code == 0) {
+          
+          this.dataMaterial = res.result.records
+          this.ipaginationMaterial.total = res.result.total
+        }else{
+
+        }
+      })
+    },
     handleEdit(item) {
       if (this.noTitleKey == 'myProject') {
         this.title = item.projectName

+ 8 - 5
src/views/modules/advertiser/UserAllocationList.vue

@@ -202,9 +202,10 @@
           :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
           :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }"
         >
-          <a-date-picker
+          {{!!getData('transferorDate')?moment(getData('transferorDate')).add(1,"days").format("YYYY-MM-DD"):'-'}}
+          <!-- <a-date-picker
             v-decorator="['assigneeDate', { rules: [{ required: true, message: '请选择受让人绩效截止日期' }] }]"
-          />
+          /> -->
         </a-form-item>
         <!-- 
         <a-form-item
@@ -495,6 +496,9 @@ export default {
         }
       })
     },
+    getData(className) {
+      return this.form.getFieldValue(className)
+    },
     getParticipateList(value) {
       // getAction('/ctop/projectMember/participateList', {
       //   userId: this.userInfo().id,
@@ -585,9 +589,7 @@ export default {
             ...values,
           }
           params.transferorDate = moment(values.transferorDate).format('YYYY-MM-DD')
-          params.assigneeDate = moment(values.assigneeDate)
-            // .add(1, 'day')
-            .format('YYYY-MM-DD')
+          params.assigneeDate = moment(values.transferorDate).add(1,"days").format("YYYY-MM-DD")
           params.projectId = this.projectId
           params.accountId = this.accountId
           params.status = 0
@@ -597,6 +599,7 @@ export default {
               this.visibleAdd = false
               this.form.resetFields()
             } else {
+              this.confirmLoading = false
               this.$message.error(res.message)
             }
           })

+ 135 - 3
src/views/modules/autoLaunchRevision/createLaunch.vue

@@ -1197,6 +1197,14 @@ li.chouzhen.first:before {
                                     </span>
                                     <span v-else>-</span>
                                 </a-descriptions-item>
+                                <a-descriptions-item label="试玩名称" :span="3">
+                                    <span v-if="showCreativeData&&showCreativeData.playableIds">
+                                        <span v-for="(item, index) in showCreativeData.playableIds" :key="index">
+                                            {{ item.label }}{{ index === showCreativeData.playableIds.length - 1 ? '' : ';' }}
+                                        </span>
+                                    </span>
+                                    <span v-else>-</span>
+                                </a-descriptions-item>
                                 <a-descriptions-item label="广告语" :span="3">
                                     <span v-if="showCreativeData">
                                         <span v-for="(item, index) in descriptionList" :key="index">
@@ -2532,6 +2540,82 @@ li.chouzhen.first:before {
                 </a-row>
                 <a-row :gutter="16">
                     <a-col :span="16">
+                        <a-form-item label="是否选择试玩">
+                            <a-radio-group
+                                button-style="solid"
+                                v-decorator="['playableIdType', { rules: [{ required: true }], initialValue: 1 }]"
+                                @change="getPlayableList"
+                            >
+                                <a-radio-button :value="1">关闭</a-radio-button>
+                                <a-radio-button :value="0">开启</a-radio-button>
+                            </a-radio-group>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="16" v-if="getFormData('formOriginality', 'playableIdType')  == 0">
+                    <a-col :span="16">
+                        <a-form-item label="选择试玩">
+                            <a-select
+                                mode="multiple"
+                                v-decorator="[
+                                    'playableIds',
+                                    { rules: [{ required: true, message: '请选择试玩' }] }
+                                ]"
+                                showSearch
+                                allowClear
+                                placeholder="请选择试玩"
+                                optionFilterProp="children"
+                                :filterOption="filterOption"
+                                labelInValue
+                            >
+                                <a-select-option
+                                    v-for="appModel in playableList"
+                                    :key="appModel.play_id"
+                                    :value="appModel.play_id"
+                                >
+                                    {{ appModel.play_name }}
+                                </a-select-option>
+                            </a-select>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="16" v-if="getFormData('formOriginality', 'playableIdType')  == 0">
+                    <a-col :span="16">
+                        <a-form-item label="示例按钮">
+                            <a-select
+                                v-decorator="[
+                                    'playButton',
+                                    { rules: [{ required: true, message: '请选择示例按钮' }] , initialValue: '立即试玩'}
+                                ]"
+                                showSearch
+                                allowClear
+                                placeholder="请选择示例按钮"
+                                optionFilterProp="children"
+                                :filterOption="filterOption"
+                            >
+                                <a-select-option value="立即试玩">
+                                    立即试玩
+                                </a-select-option>
+                                <a-select-option value="试玩一下">
+                                    试玩一下
+                                </a-select-option>
+                                <a-select-option value="立即体验">
+                                    立即体验
+                                </a-select-option>
+                                <a-select-option value="免装试玩">
+                                    免装试玩
+                                </a-select-option>
+                                <a-select-option value="免装体验">
+                                    免装体验
+                                </a-select-option>
+                            </a-select>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+
+
+                <a-row :gutter="16">
+                    <a-col :span="16">
                         <a-form-item label="行动号召">
                             <a-select
                                 mode="multiple"
@@ -3017,6 +3101,7 @@ export default {
             unitCntMax: 600,
             creativeCntMax: 15,
             actionBarTextList: [],
+            playableList:[],
             descriptionList: [{ value: '' }],
             fieldNames: {
                 label: 'category_name',
@@ -3562,6 +3647,22 @@ export default {
                                 : [{ value: res.result.description }]
                         res.result.sceneId = JSON.parse(res.result.sceneId)
                         data.actionBarText = data.actionBarText.split(',')
+                        var playableJsonArr = []
+                        if(!!data.playableIds){
+                            data.playableIdType = !!data.playableIds? 0 : 1
+                            
+                            var playableJson = JSON.parse(data.playableIds).ids.split(',')
+                            playableJsonArr = playableJson.map((item,index)=>{
+                                return {
+                                    key:item,
+                                    label:JSON.parse(data.playableIds).name[index]
+                                }
+                            })
+                        }
+                       
+                        data.playableIds = !!data.playableIds?playableJsonArr:undefined
+                        
+                        data.playButton = !!data.playButton?data.playButton:undefined
                         this.convertCunId = !!data.convertId?{key:data.convertId,label:data.convertId}:null
                         this.showCreativeData = pick(
                             data,
@@ -3577,7 +3678,10 @@ export default {
                             'smartCover',
                             'actionBarText',
                             'creativeCategory',
-                            'creativeTag'
+                            'creativeTag',
+                            'playableIdType',
+                            'playableIds',
+                            'playButton'
                         )
                         // this.appDetail = { platformOs: data.platformOs, singleAppid: 1 }
                         this.useChannel = res.result.useChannel ? (res.result.useChannel == 1 ? true : false) : false
@@ -3754,7 +3858,16 @@ export default {
                                 useAppMarket: this.appDetail.useAppMarket,
                                 schemaUri: this.appDetail.schemaUri ? this.appDetail.schemaUri : '',
                                 siteId: this.appDetail.siteId ? this.appDetail.siteId : '',
-                                url: this.appDetail.url ? this.appDetail.url : ''
+                                url: this.appDetail.url ? this.appDetail.url : '',
+                                playableIds:this.showCreativeData.playableIdType == 0 ?
+                                JSON.stringify(
+                                {ids: this.showCreativeData.playableIds.map(item=>{
+                                    return item.key
+                                }).join(),name: this.showCreativeData.playableIds.map(item=>{
+                                    return item.label
+                                })})
+                                :'',
+                                playButton:this.showCreativeData.playableIdType == 0 ?this.showCreativeData.playButton:''
                             }
                             if (this.budgetType === '2') {
                                 params.campaignDayBudget = params.campaignDayBudget * 1000
@@ -3899,6 +4012,20 @@ export default {
         removeDescription(index) {
             this.descriptionList.splice(index, 1)
         },
+        //获取试玩列表
+        getPlayableList() {
+            this.playableList = []
+            let that = this
+
+                this.getAction('/kuaishou/batch/getPlayableList', {
+                    accountId: that.getFormData('formProject', 'accountId')
+                    
+                }).then(res => {
+                    if (res.success) {
+                        that.playableList = res.result.details
+                    }
+                })
+        },
         // 获取行动号召按钮
         getActionBarText() {
             this.actionBarTextList = []
@@ -4621,7 +4748,7 @@ export default {
         originalityEdit() {
             this.optimizeVisible = true
             this.getActionBarText()
-
+            this.getPlayableList()
             this.getAction('/kuaishou/batch/getCreativeCategory', {
                 accountId: this.getFormData('formProject', 'accountId')
             }).then(result => {
@@ -4643,6 +4770,11 @@ export default {
                     this.unitCntMax = 600
                     this.creativeCntMax = 15
                     this.formOriginality.setFieldsValue(this.showCreativeData)
+                    if(this.showCreativeData.playableIds.length>0){
+                        setTimeout(()=>{
+                            this.formOriginality.setFieldsValue({playableIds:this.showCreativeData.playableIds,playButton:this.showCreativeData.playButton})
+                        },100)
+                    }
                 }
             })
         },

+ 1 - 0
src/views/modules/creative-copywrit/creative-copywrit.vue

@@ -3402,6 +3402,7 @@ export default {
             this.waterLoading = true;
             let params = qs.stringify({
                 id: this.id,
+                userId: this.userInfo().id,
                 watermarkTemplateId: this.size
             });
             postAction('/ctop/materialInfo/watermark', params).then(res => {

Файловите разлики са ограничени, защото са твърде много
+ 2676 - 0
src/views/modules/material/dxmMaterial.vue


+ 1 - 0
src/views/modules/material/excellentMaterial.vue

@@ -532,6 +532,7 @@
       getWater() {
         var params = qs.stringify({
           id: this.id,
+          userId: this.userInfo().id,
           watermarkTemplateId: this.size
         })
         postAction('/ctop/materialInfo/watermark', params).then(res => {

+ 4 - 3
src/views/modules/material/videoMaterial.vue

@@ -584,14 +584,14 @@ a {
         @click="tongbu('4')"
         >一键同步快手内广</a-button
       >
-      <a-button
+      <!-- <a-button
         v-if="active === '1'"
         type="primary"
         @click="handleAllChangeFace"
       >
         换脸列表
       </a-button
-      >
+      > -->
     </div>
 
     <a-tabs @change="callbackTwo" v-model="active" type="card" id="material-card">
@@ -805,7 +805,7 @@ a {
                       </div>
                       <a href="javascript:;" style="margin-right: 20px">驳回</a>
                     </a-popconfirm>
-                    <a v-show="active === '1'" style="margin-right: 20px" @click="handleChangeFace(items)">换脸</a>
+                    <!-- <a v-show="active === '1'" style="margin-right: 20px" @click="handleChangeFace(items)">换脸</a> -->
                     <a-popconfirm
                       @confirm="okEditShow(items, '1')"
                       v-show="active != '1' && active != '3'"
@@ -3677,6 +3677,7 @@ export default {
       var params = qs.stringify({
         id: this.id,
         watermarkTemplateId: this.size,
+        userId:this.userInfo().id
       })
       postAction('/ctop/materialInfo/watermark', params).then((res) => {
         if (res.success) {

+ 1 - 0
src/views/modules/material/videoPopular.vue

@@ -3003,6 +3003,7 @@ export default {
             this.waterLoading = true
             var params = qs.stringify({
                 id: this.id,
+                userId: this.userInfo().id,
                 watermarkTemplateId: this.size,
             })
             postAction('/ctop/materialInfo/watermark', params).then((res) => {

+ 287 - 270
src/views/modules/stockWatch/modules/new-keepManage/group-keepManage.vue

@@ -89,6 +89,7 @@
                             <li><span style="margin-left: 31px">消耗:</span> {{ sectionCost | formatNum }}</li>
                             <li>人均带户: {{ userAverageAccount | formatNum }}</li>
                             <li>人均消耗: {{ userAveragecost | formatNum }}</li>
+                            <li>在投项目数量:{{ projectNum }}</li>
                         </ul>
                     </div>
                 </a-card>
@@ -144,6 +145,55 @@
                 </a-card>
             </a-col>
         </a-row>
+        <a-row :gutter="24" style="margin-bottom: 20px">
+            <a-col>
+                <a-card>
+                    <div slot="title">
+                        <span style="font-weight: bolder">运营组数据</span>
+                    </div>
+                    <div class="person-content-title" slot="extra">
+                        <div class="content-title-acount"></div>
+                        <div class="content-title-checkout">
+                            <span style="margin-right: 20px">
+                                <a-range-picker
+                                    v-model="dateMiddleGroup"
+                                    format="YYYY-MM-DD"
+                                    :ranges="dateRanges"
+                                    @change="dateMiddleChangeGroup"
+                                />
+                            </span>
+                            <span>
+                                <a-button @click="exportClickGroup">导 出</a-button>
+                            </span>
+                        </div>
+                    </div>
+                    <a-table
+                        size="middle"
+                        :dataSource="groupList"
+                        :columns="columnGroup"
+                        bordered
+                        id="outTable"
+                        :pagination="groupIpagination"
+                        :loading="groupLoading"
+                        ref="accountTable"
+                    >
+                        <a slot="userName" slot-scope="text, record" @click="userNameClick(record)">{{ text }}</a>
+                        <span slot="newEffectNum" slot-scope="text">
+                            <span v-if="text">{{ text }}</span>
+                            <span v-else>0</span>
+                        </span>
+                        <span slot="newCampaignNum" slot-scope="text">
+                            <span v-if="text">{{ text }}</span>
+                            <span v-else>0</span>
+                        </span>
+                        <span slot="newUnitNum" slot-scope="text">
+                            <span v-if="text">{{ text }}</span>
+                            <span v-else>0</span>
+                        </span>
+                    </a-table>
+                </a-card>
+            </a-col>
+        </a-row>
         <a-row :gutter="24">
             <a-col>
                 <a-card>
@@ -155,14 +205,14 @@
                             <!-- <span class="title-checkout-custom"
                                 ><a @click="exportExcel" :loading="visibleLoading">导出数据</a></span
                             > -->
-                           
                         </div>
                         <div class="content-title-checkout">
-
-                             <a-button @click="exportExcel" :loading="visibleLoading" style="margin-right:20px"> 导出数据 </a-button>
-                            <span style="margin-right: 20px">
+                            <a-button @click="exportExcel" :loading="visibleLoading" style="margin-right: 20px">
+                                导出数据
+                            </a-button>
+                            <!-- <span style="margin-right: 20px">
                                 <a-button type="link" @click="customColumn"> 自定义列 </a-button>
-                            </span>
+                            </span> -->
                             <span style="margin-right: 20px">
                                 <a-range-picker
                                     v-model="dateMiddleProject"
@@ -170,12 +220,12 @@
                                     @change="dateMiddleProjectChange"
                                 />
                             </span>
-                            <span>
+                            <!-- <span>
                                 <a-radio-group v-model="projectAccount" @change="projectAccountChange">
                                     <a-radio-button value="a"> 项目 </a-radio-button>
                                     <a-radio-button value="b"> 账户 </a-radio-button>
                                 </a-radio-group>
-                            </span>
+                            </span> -->
                         </div>
                     </div>
                     <a-table
@@ -190,8 +240,74 @@
                         ref="accountTable"
                         :scroll="{ x: scrollX }"
                     >
-                        <a slot="projectName" slot-scope="text, record" @click="projectNameClick(record)">{{ text }}</a>
-                        <a slot="accountName" slot-scope="text, record" @click="accountNameClick(record)">{{ text }}</a>
+                        <!-- <a slot="projectName" slot-scope="text, record" @click="projectNameClick(record)">{{ text }}</a>
+                        <a slot="accountName" slot-scope="text, record" @click="accountNameClick(record)">{{ text }}</a> -->
+                        <div slot="jl" slot-scope="text, record">
+                            {{
+                                record.adSceneDate.findIndex((item) => {
+                                    return item.adSceneName == '激励视频广告'
+                                }) > -1
+                                    ? record.adSceneDate.find((item) => {
+                                          return item.adSceneName == '激励视频广告'
+                                      }).adSceneCost
+                                    : '-'
+                            }}
+                        </div>
+                        <div slot="kp" slot-scope="text, record">
+                            {{
+                                record.adSceneDate.findIndex((item) => {
+                                    return item.adSceneName == '开屏广告'
+                                }) > -1
+                                    ? record.adSceneDate.find((item) => {
+                                          return item.adSceneName == '开屏广告'
+                                      }).adSceneCost
+                                    : '-'
+                            }}
+                        </div>
+                        <div slot="ss" slot-scope="text, record">
+                            {{
+                                record.adSceneDate.findIndex((item) => {
+                                    return item.adSceneName == '搜索广告'
+                                }) > -1
+                                    ? record.adSceneDate.find((item) => {
+                                          return item.adSceneName == '搜索广告'
+                                      }).adSceneCost
+                                    : '-'
+                            }}
+                        </div>
+                        <div slot="lm" slot-scope="text, record">
+                            {{
+                                record.adSceneDate.findIndex((item) => {
+                                    return item.adSceneName == '联盟'
+                                }) > -1
+                                    ? record.adSceneDate.find((item) => {
+                                          return item.adSceneName == '联盟'
+                                      }).adSceneCost
+                                    : '-'
+                            }}
+                        </div>
+                        <div slot="sxh" slot-scope="text, record">
+                            {{
+                                record.adSceneDate.findIndex((item) => {
+                                    return item.adSceneName == '上下滑大屏广告'
+                                }) > -1
+                                    ? record.adSceneDate.find((item) => {
+                                          return item.adSceneName == '上下滑大屏广告'
+                                      }).adSceneCost
+                                    : '-'
+                            }}
+                        </div>
+                        <div slot="xxl" slot-scope="text, record">
+                            {{
+                                record.adSceneDate.findIndex((item) => {
+                                    return item.adSceneName == '信息流广告'
+                                }) > -1
+                                    ? record.adSceneDate.find((item) => {
+                                          return item.adSceneName == '信息流广告'
+                                      }).adSceneCost
+                                    : '-'
+                            }}
+                        </div>
                     </a-table>
                 </a-card>
             </a-col>
@@ -247,6 +363,7 @@ export default {
             echartsDataProject: [],
             projectAccount: 'a',
             dateMiddleProject: [moment(), moment()],
+            dateMiddleGroup: [moment(), moment()],
             echartsIpagination: {
                 current: 1,
                 pageSize: 5,
@@ -291,6 +408,11 @@ export default {
                     scopedSlots: { customRender: 'userName' },
                 },
                 {
+                    title: '项目数量',
+                    align: 'center',
+                    dataIndex: 'projectNum',
+                },
+                {
                     title: '账户数量',
                     align: 'center',
                     dataIndex: 'accountNum',
@@ -308,13 +430,6 @@ export default {
                     dataIndex: 'rate',
                 },
                 {
-                    title: '有效素材数',
-                    align: 'center',
-                    dataIndex: 'newEffectNum',
-                    sorter: (a, b) => a.newEffectNum - b.newEffectNum,
-                    scopedSlots: { customRender: 'newEffectNum' },
-                },
-                {
                     title: '新上计划数',
                     align: 'center',
                     dataIndex: 'newCampaignNum',
@@ -331,65 +446,87 @@ export default {
                     scopedSlots: { customRender: 'newUnitNum' },
                 },
             ],
-            columnsProject: [
-                {
-                    title: '项目名称',
-                    align: 'center',
-                    dataIndex: 'projectName',
-                    scopedSlots: { customRender: 'projectName' },
+            groupList: [],
+            groupLoading: false,
+            groupIpagination: {
+                current: 1,
+                pageSize: 5,
+                //   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.groupIpagination.current = current
+                    this.groupIpagination.pageSize = pageSize
+                    this.getGroupList()
                 },
+            },
+            columnGroup: [
                 {
-                    title: '账户数量',
+                    title: '运营经理',
                     align: 'center',
-                    dataIndex: 'accountNum',
+                    dataIndex: 'realname',
+                    scopedSlots: { customRender: 'realname' },
                 },
                 {
-                    title: '运营人员',
+                    title: '运营数量',
                     align: 'center',
-                    dataIndex: 'userNum',
+                    dataIndex: 'operationNum',
                 },
                 {
-                    title: '花费',
+                    title: '日均消耗',
                     align: 'center',
-                    dataIndex: 'totalCost',
-                    sorter: (a, b) => a.totalCost - b.totalCost,
+                    dataIndex: 'averageDayCost',
                 },
                 {
-                    title: '花费环比',
+                    title: '人均消耗',
                     align: 'center',
-                    dataIndex: 'yearOnYear',
+                    dataIndex: 'averagePeopleCost',
                 },
                 {
-                    title: '花费同比',
+                    title: '花费',
                     align: 'center',
-                    dataIndex: 'equallyRate',
+                    dataIndex: 'totalCost',
+                    sorter: true,
+                    sorter: (a, b) => a.totalCost - b.totalCost,
                 },
                 {
-                    title: '上新素材数',
+                    title: '花费环比',
                     align: 'center',
-                    dataIndex: 'newVideoNum',
+                    dataIndex: 'yearOnYearCost',
                 },
                 {
-                    title: '爆款素材数',
+                    title: '项目数',
                     align: 'center',
-                    dataIndex: 'newHotNum',
+                    dataIndex: 'projectNum',
+                    scopedSlots: { customRender: 'projectNum' },
                 },
                 {
-                    title: '有效素材数',
+                    title: '账户数',
                     align: 'center',
-                    dataIndex: 'newEffectNum',
+                    dataIndex: 'accountNum',
+                    scopedSlots: { customRender: 'accountNum' },
                 },
                 {
-                    title: '激活数',
+                    title: '平均账户消耗',
                     align: 'center',
-                    dataIndex: 'activation',
+                    dataIndex: 'averageAccountCost',
+                    scopedSlots: { customRender: 'averageAccountCost' },
                 },
                 {
-                    title: '激活单价',
+                    title: '基建数量',
                     align: 'center',
-                    dataIndex: 'activationPrice',
+                    dataIndex: 'unitNum',
+                    scopedSlots: { customRender: 'unitNum' },
                 },
             ],
+            columnsProject: keepPersonData.setNoDeleteColumns(),
             echartsData: [],
             timeData: [],
             lengthData: [],
@@ -398,6 +535,7 @@ export default {
             yestadyNum: 1,
             dataName: '',
             todayCost: '',
+            projectNum: '',
             compare: '',
             sectionCost: '',
             userAverageAccount: '',
@@ -439,9 +577,10 @@ export default {
     },
     mounted() {
         this.getQueryNewlyData()
-        this.showColumn()
+        // this.showColumn()
         this.getOperationGroupData()
         this.getOperateDetails()
+        this.getGroupList()
         this.getItemList()
         this.clientWidth = document.documentElement.clientWidth - 224
     },
@@ -484,9 +623,9 @@ export default {
                 let downloadElement = document.createElement('a')
                 let href = window.URL.createObjectURL(blob) //创建下载的链接
                 downloadElement.href = href
-                downloadElement.download = `${this.dateMiddleProject[0].format('YYYY-MM-DD')}~${this.dateMiddleProject[1].format(
+                downloadElement.download = `${this.dateMiddleProject[0].format(
                     'YYYY-MM-DD'
-                )}报表.xlsx` //下载后文件名
+                )}~${this.dateMiddleProject[1].format('YYYY-MM-DD')}报表.xlsx` //下载后文件名
                 document.body.appendChild(downloadElement)
                 downloadElement.click() //点击下载
                 document.body.removeChild(downloadElement) //下载完成移除元素
@@ -510,6 +649,7 @@ export default {
             ).then((res) => {
                 this.echartsLoading = false
                 if (res.code == 0) {
+                    // columnsProject
                     this.echartsDataProject = res.result.list
                     this.echartsIpaginationProject.total = res.result.total
                 }
@@ -560,61 +700,10 @@ export default {
             this.titleList = '账户列表'
             this.columnsFixd = keepPersonData.setNoDeleteProjectColumns()
             this.listNum = keepPersonData.setNoDeleteProjectColumns()
-            // this.columnsProject = [
-            //     {
-            //         title: '账户名称',
-            //         align: "center",
-            //         dataIndex: 'accountName',
-            //         scopedSlots: { customRender: 'accountName' },
-            //     },{
-            //         title: '账户ID',
-            //         dataIndex: 'accountId',
-            //         scopedSlots: { customRender: 'accountId' },
-            //         align: 'center',
-            //     }, {
-            //         title: '运营人员名称',
-            //         align: "center",
-            //         dataIndex: 'userName'
-            //     }, {
-            //         title: '花费',
-            //         align: "center",
-            //         dataIndex: 'totalCost',
-            //         sorter: (a, b) => a.totalCost - b.totalCost,
-            //     }, {
-            //         title: '花费环比',
-            //         align: "center",
-            //         dataIndex: 'yearOnYear',
-            //     }, {
-            //         title: '花费同比',
-            //         align: "center",
-            //         dataIndex: 'equallyRate',
-            //     }, {
-            //         title: '激活数',
-            //         align: "center",
-            //         dataIndex: 'activation',
-            //     },
-            //     {
-            //         title: '激活单价',
-            //         align: "center",
-            //         dataIndex: 'activationPrice',
-            //     }, {
-            //         title: '行为数',
-            //         align: "center",
-            //         dataIndex: 'keyAction',
-            //     }, {
-            //         title: '封面曝光数',
-            //         align: "center",
-            //         dataIndex: 'photoShow',
-            //     }, {
-            //         title: '封面点击数',
-            //         align: "center",
-            //         dataIndex: 'photoClick',
-            //     },
-            // ],
             this.projectAccount = 'b'
             this.projectId = row.projectId
             this.echartsIpaginationProject.current = 1
-            this.showColumn()
+            // this.showColumn()
             this.$nextTick(() => {
                 this.echartsLoading = true
                 this.getAccountData()
@@ -627,135 +716,17 @@ export default {
                 this.columnsFixd = keepPersonData.setNoDeleteColumns()
                 this.listNum = keepPersonData.setNoDeleteColumns()
                 this.projectId = ''
-                ;(this.columnsProject = [
-                    {
-                        title: '项目名称',
-                        align: 'center',
-                        dataIndex: 'projectName',
-                        scopedSlots: { customRender: 'projectName' },
-                    },
-                    {
-                        title: '账户数量',
-                        align: 'center',
-                        dataIndex: 'accountNum',
-                    },
-                    {
-                        title: '运营人员',
-                        align: 'center',
-                        dataIndex: 'userNum',
-                    },
-                    {
-                        title: '花费',
-                        align: 'center',
-                        dataIndex: 'totalCost',
-                        sorter: (a, b) => a.totalCost - b.totalCost,
-                    },
-                    {
-                        title: '花费环比',
-                        align: 'center',
-                        dataIndex: 'yearOnYear',
-                    },
-                    {
-                        title: '花费同比',
-                        align: 'center',
-                        dataIndex: 'equallyRate',
-                    },
-                    {
-                        title: '上新素材数',
-                        align: 'center',
-                        dataIndex: 'newVideoNum',
-                    },
-                    {
-                        title: '爆款素材数',
-                        align: 'center',
-                        dataIndex: 'newHotNum',
-                    },
-                    {
-                        title: '有效素材数',
-                        align: 'center',
-                        dataIndex: 'newEffectNum',
-                    },
-                    {
-                        title: '激活数',
-                        align: 'center',
-                        dataIndex: 'activation',
-                    },
-                    {
-                        title: '激活单价',
-                        align: 'center',
-                        dataIndex: 'activationPrice',
-                    },
-                ]),
-                    (this.echartsIpaginationProject.current = 1)
-                this.showColumn()
+                this.columnsProject = [...this.columnsFixd]
+                this.echartsIpaginationProject.current = 1
+                // this.showColumn()
                 this.getItemList()
             } else {
                 this.titleList = '账户列表'
                 this.columnsFixd = keepPersonData.setNoDeleteProjectColumns()
                 this.listNum = keepPersonData.setNoDeleteProjectColumns()
                 console.log(this.columnsFixd)
-                ;(this.columnsProject = [
-                    {
-                        title: '账户名称',
-                        align: 'center',
-                        dataIndex: 'accountName',
-                        scopedSlots: { customRender: 'accountName' },
-                    },
-                    {
-                        title: '账户ID',
-                        dataIndex: 'accountId',
-                        scopedSlots: { customRender: 'accountId' },
-                        align: 'center',
-                        fixed: 'left',
-                    },
-                    {
-                        title: '运营人员名称',
-                        align: 'center',
-                        dataIndex: 'userName',
-                    },
-                    {
-                        title: '花费',
-                        align: 'center',
-                        dataIndex: 'totalCost',
-                        sorter: (a, b) => a.totalCost - b.totalCost,
-                    },
-                    {
-                        title: '花费环比',
-                        align: 'center',
-                        dataIndex: 'yearOnYear',
-                    },
-                    {
-                        title: '花费同比',
-                        align: 'center',
-                        dataIndex: 'equallyRate',
-                    },
-                    {
-                        title: '激活数',
-                        align: 'center',
-                        dataIndex: 'activation',
-                    },
-                    {
-                        title: '激活单价',
-                        align: 'center',
-                        dataIndex: 'activationPrice',
-                    },
-                    {
-                        title: '行为数',
-                        align: 'center',
-                        dataIndex: 'keyAction',
-                    },
-                    {
-                        title: '封面曝光数',
-                        align: 'center',
-                        dataIndex: 'photoShow',
-                    },
-                    {
-                        title: '封面点击数',
-                        align: 'center',
-                        dataIndex: 'photoClick',
-                    },
-                ]),
-                    this.showColumn()
+                this.columnsProject = [...this.columnsFixd]
+                // this.showColumn()
                 this.echartsIpaginationProject.current = 1
                 this.getAccountData()
             }
@@ -806,6 +777,11 @@ export default {
                     } else {
                         this.userAveragecost = '暂无数据'
                     }
+                    if (res.result.projectNum) {
+                        this.projectNum = res.result.projectNum
+                    } else {
+                        this.projectNum = '暂无数据'
+                    }
                 }
             })
         },
@@ -831,6 +807,28 @@ export default {
             })
         },
 
+        // 运营组数据
+        getGroupList() {
+            let params = {
+                startTime: this.dateMiddleGroup[0].format('YYYY-MM-DD'),
+                endTime: this.dateMiddleGroup[1].format('YYYY-MM-DD'),
+                userId: this.userInfo().id,
+                pageNum: this.groupIpagination.current,
+                pageSize: this.groupIpagination.pageSize,
+            }
+            this.getAction(
+                process.env.VUE_APP_BASE_STARE_URL +
+                    '/kuaiShouOpreate/kuaiShouMaterialStareController/getOperationGroupData',
+                params
+            ).then((res) => {
+                this.groupLoading = false
+                if (res.code == 0) {
+                    this.groupList = res.result.list
+                    this.groupIpagination.total = res.result.total
+                }
+            })
+        },
+
         sortDataoperate(pagination, filters, sorter, { currentDataSource }) {
             this.echartsLoadingYun = true
             // console.log(pagination, filters, sorter)
@@ -843,6 +841,11 @@ export default {
             this.echartsIpagination.current = 1
             this.getOperateDetails()
         },
+        dateMiddleChangeGroup() {
+            this.groupLoading = true
+            this.groupIpagination.current = 1
+            this.getGroupList()
+        },
         // 导出
         exportClick() {
             let params = {
@@ -858,6 +861,20 @@ export default {
                 params.startTime
             }&endTime=${params.endTime}&userId=${params.userId}&pageNum=${params.pageNum}&pageSize=${params.pageSize}`
         },
+        exportClickGroup() {
+            let params = {
+                startTime: this.dateMiddleGroup[0].format('YYYY-MM-DD'),
+                endTime: this.dateMiddleGroup[1].format('YYYY-MM-DD'),
+                userId: this.userInfo().id,
+                pageNum: this.groupIpagination.current,
+                pageSize: this.groupIpagination.pageSize,
+            }
+            window.location.href = `${
+                process.env.VUE_APP_BASE_STARE_URL
+            }${'/kuaiShouOpreate/kuaiShouMaterialStareController/exportOperationGroupData'}?startTime=${
+                params.startTime
+            }&endTime=${params.endTime}&userId=${params.userId}&pageNum=${params.pageNum}&pageSize=${params.pageSize}`
+        },
         getQueryNewlyData() {
             let params = {
                 startTime: this.dateEchart[0].format('YYYY-MM-DD'),
@@ -1259,57 +1276,57 @@ export default {
 
         changeColumn(val) {
             this.columnsProject = [...val]
-            if (
-                this.columnsProject.length > this.columnsFixd.length &&
-                this.columnsProject.length <= this.columnsFixd.length
-            ) {
-                this.columnsProject.forEach((element, index) => {
-                    if (index < this.columnsProject.length - 1) {
-                        element.width = 'auto'
-                        element.fixed = false
-                    }
-                })
+            // if (
+            //     this.columnsProject.length > this.columnsFixd.length &&
+            //     this.columnsProject.length <= this.columnsFixd.length
+            // ) {
+            //     this.columnsProject.forEach((element, index) => {
+            //         if (index < this.columnsProject.length - 1) {
+            //             element.width = 'auto'
+            //             element.fixed = false
+            //         }
+            //     })
 
-                this.scrollX = 0
-            } else if (this.columnsProject.length > this.columnsFixd.length) {
-                this.columnsProject.forEach((element, index) => {
-                    if (index < this.columnsFixd.length) {
-                        if (element.dataIndex == 'accountNum') {
-                            element.width = 100
-                            element.fixed = 'left'
-                        } else if (element.dataIndex == 'userNum') {
-                            element.width = 100
-                            element.fixed = 'left'
-                        } else if (element.dataIndex == 'yearOnYear') {
-                            element.width = 100
-                            element.fixed = 'left'
-                        } else if (element.dataIndex == 'equallyRate') {
-                            element.width = 100
-                            element.fixed = 'left'
-                        } else {
-                            element.width = 150
-                            element.fixed = 'left'
-                        }
-                    } else {
-                        element.width = 'auto'
-                        element.fixed = false
-                    }
-                })
+            //     this.scrollX = 0
+            // } else if (this.columnsProject.length > this.columnsFixd.length) {
+            //     this.columnsProject.forEach((element, index) => {
+            //         if (index < this.columnsFixd.length) {
+            //             if (element.dataIndex == 'accountNum') {
+            //                 element.width = 100
+            //                 element.fixed = 'left'
+            //             } else if (element.dataIndex == 'userNum') {
+            //                 element.width = 100
+            //                 element.fixed = 'left'
+            //             } else if (element.dataIndex == 'yearOnYear') {
+            //                 element.width = 100
+            //                 element.fixed = 'left'
+            //             } else if (element.dataIndex == 'equallyRate') {
+            //                 element.width = 100
+            //                 element.fixed = 'left'
+            //             } else {
+            //                 // element.width = 150
+            //                 // element.fixed = 'left'
+            //             }
+            //         } else {
+            //             element.width = 'auto'
+            //             element.fixed = false
+            //         }
+            //     })
 
-                this.scrollX = 1000 + 150 * (this.columnsProject.length - this.columnsFixd.length)
-            } else if (this.columnsProject.length == this.columnsFixd.length) {
-                this.columnsProject.forEach((element, index) => {
-                    element.width = 'auto'
-                    element.fixed = false
-                })
-                this.scrollX = false
-            } else {
-                this.scrollX = 0
-                this.columnsProject.forEach((element) => {
-                    element.width = 'auto'
-                    element.fixed = false
-                })
-            }
+            //     this.scrollX = 1500 + 200 * (this.columnsProject.length - this.columnsFixd.length)
+            // } else if (this.columnsProject.length == this.columnsFixd.length) {
+            //     this.columnsProject.forEach((element, index) => {
+            //         element.width = 'auto'
+            //         element.fixed = false
+            //     })
+            //     this.scrollX = false
+            // } else {
+            //     this.scrollX = 0
+            //     this.columnsProject.forEach((element) => {
+            //         element.width = 'auto'
+            //         element.fixed = false
+            //     })
+            // }
 
             let arr = JSON.stringify(this.columnsProject)
             this.postDataAction('/toutiao/videoReportDaily/saveOrUpdateColumnJson', {

+ 204 - 126
src/views/modules/stockWatch/modules/new-keepManage/new-keep-data.js

@@ -2,71 +2,163 @@
  * @file 盯盘基础展示数据
  * @author zhuxinbo(zhuxinbo@c-top.com.cn)
  */
- import moment from 'moment'
- class keepPersonServer {
-     constructor() {}
- 
-     // 固定不可删除的列
-     setNoDeleteColumns() {
-         return [
-             {
-                 title: '项目名称',
-                 dataIndex: 'projectName',
-                 scopedSlots: { customRender: 'projectName' },
-                 align: 'center',
-                 key: 'date',
-                 width: 200,
-                 fixed: 'left',
-             },
-             {
-                 title: '账户数量',
-                 dataIndex: 'accountNum',
-                 align: 'center',
-                 width: 100,
-                 fixed: 'left',
-             },
-             {
-                 title: '运营人员',
-                 dataIndex: 'userNum',
-                 scopedSlots: { customRender: 'userNum' },
-                 align: 'center',
-                 width: 100,
-                 fixed: 'left',
-             },
-             {
-                 title: '消耗(元)',
-                 dataIndex: 'totalCost',
-                 align: 'center',
-                 width: 100,
-                 fixed: 'left',
-                 sorter: (a, b) => a.totalCost - b.totalCost,
-             },
-             {
-                 title: '花费环比',
-                 dataIndex: 'yearOnYear',
-                 width: 150,
-                 tip: '',
-                 align: 'center',
-                 
-             },{
+import moment from 'moment'
+class keepPersonServer {
+    constructor() { }
+
+    // 固定不可删除的列
+    setNoDeleteColumns() {
+        return [
+            {
+                title: '项目名称',
+                dataIndex: 'projectName',
+                scopedSlots: { customRender: 'projectName' },
+                align: 'center',
+                key: 'date',
+                width: 200,
+                fixed: 'left',
+            },
+            {
+                title: '账户数量',
+                dataIndex: 'accountNum',
+                align: 'center',
+                width: 100,
+                fixed: 'left',
+            },
+            {
+                title: '运营人员',
+                dataIndex: 'userNum',
+                scopedSlots: { customRender: 'userNum' },
+                align: 'center',
+                width: 100,
+                fixed: 'left',
+            },
+            {
+                title: '消耗(元)',
+                dataIndex: 'totalCost',
+                align: 'center',
+                width: 100,
+                fixed: 'left',
+                sorter: (a, b) => a.totalCost - b.totalCost,
+            },
+            {
+                title: '花费环比',
+                dataIndex: 'yearOnYear',
+                width: 150,
+                tip: '',
+                align: 'center',
+
+            }, {
                 title: '花费同比',
                 dataIndex: 'equallyRate',
                 width: 150,
                 tip: '',
                 align: 'center',
-                
-            },{
+
+            }, {
                 title: '爆款素材数',
                 dataIndex: 'newHotNum',
                 width: 150,
                 tip: '',
                 align: 'center',
-                
+
+            },
+            {
+                title: '上传素材数',
+                dataIndex: 'adspNum',
+                width: 150,
+                tip: '',
+                align: 'center',
+
+            },
+            {
+                title: '上新素材数',
+                dataIndex: 'mediaNum',
+                width: 150,
+                tip: '',
+                align: 'center',
+
+            },
+            {
+                title: '基建数量',
+                dataIndex: 'newUnitNum',
+                width: 150,
+                tip: '',
+                align: 'center',
+
             },
-         ]
-     }
+            {
+                title: '托管基建数',
+                dataIndex: 'trustUnitNum',
+                width: 150,
+                tip: '',
+                align: 'center',
 
-     setNoDeleteProjectColumns() {
+            },
+            {
+                title: '激励视频广告',
+                dataIndex: 'jl',
+                width: 150,
+                tip: '',
+                align: 'center',
+
+                scopedSlots: { customRender: 'jl' },
+
+            },
+            {
+                title: '开屏广告',
+                dataIndex: 'kp',
+                width: 150,
+                tip: '',
+                align: 'center',
+
+                scopedSlots: { customRender: 'kp' },
+
+            },
+            {
+                title: '搜索广告',
+                dataIndex: 'ss',
+                width: 150,
+                tip: '',
+                align: 'center',
+
+                scopedSlots: { customRender: 'ss' },
+
+            },
+            {
+                title: '上下划大屏广告',
+                dataIndex: 'sxh',
+                width: 150,
+                tip: '',
+                align: 'center',
+
+                scopedSlots: { customRender: 'sxh' },
+
+            },
+            {
+                title: '联盟',
+                dataIndex: 'lm',
+                width: 150,
+                tip: '',
+                align: 'center',
+
+                scopedSlots: { customRender: 'lm' },
+
+            },
+            {
+                title: '信息流',
+                dataIndex: 'xxl',
+                width: 150,
+                tip: '',
+                align: 'center',
+
+                scopedSlots: { customRender: 'xxl' },
+
+            },
+        ]
+    }
+
+    setNoDeleteProjectColumns() {
         return [
             {
                 title: '账户名称',
@@ -74,46 +166,33 @@
                 scopedSlots: { customRender: 'accountName' },
                 align: 'center',
                 key: 'date',
-                width: 200,
-                fixed: 'left',
-            },{
+            }, {
                 title: '账户ID',
                 dataIndex: 'accountId',
                 scopedSlots: { customRender: 'accountId' },
                 align: 'center',
-                width: 100,
-                fixed: 'left',
             },
             {
                 title: '运营人员',
                 dataIndex: 'userName',
                 align: 'center',
-                width: 100,
-                fixed: 'left',
             },
             {
                 title: '消耗(元)',
                 dataIndex: 'totalCost',
                 scopedSlots: { customRender: 'totalCost' },
                 align: 'center',
-                width: 100,
-                fixed: 'left',
-                sorter: (a, b) => a.totalCost - b.totalCost,
             },
             {
                 title: '花费环比',
                 dataIndex: 'yearOnYear',
                 align: 'center',
-                width: 100,
-                fixed: 'left',
-            },{
+            }, {
                 title: '花费同比',
                 dataIndex: 'equallyRate',
                 align: 'center',
-                width: 100,
-                fixed: 'left',
             },
-            
+
         ]
     }
     setNoActionProjectColumns() {
@@ -126,21 +205,21 @@
                 key: 'date',
                 width: 200,
                 fixed: 'left',
-            },{
+            }, {
                 title: '账户ID',
                 dataIndex: 'accountId',
                 scopedSlots: { customRender: 'accountId' },
                 align: 'center',
                 width: 100,
                 fixed: 'left',
-            },{
+            }, {
                 title: '预算',
                 dataIndex: 'warningAmount',
                 scopedSlots: { customRender: 'warningAmount' },
                 align: 'center',
                 width: 100,
                 fixed: 'left',
-            },{
+            }, {
                 title: '余额',
                 dataIndex: 'balance',
                 scopedSlots: { customRender: 'balance' },
@@ -170,101 +249,100 @@
                 align: 'center',
                 width: 100,
                 fixed: 'left',
-            },{
+            }, {
                 title: '花费同比',
                 dataIndex: 'equallyRate',
                 align: 'center',
                 width: 100,
                 fixed: 'left',
             },
-            
+
         ]
     }
-    groupDeliveryIndexShow(){
-        return[
+    groupDeliveryIndexShow() {
+        return [
             {
                 title: '消耗(元)',
                 dataIndex: 'cost',
                 align: 'center',
                 scopedSlots: { customRender: 'cost' },
-                
+
             }
         ]
     }
-    
-    groupDelivery(){
+
+    groupDelivery() {
         return [
             {
                 title: '状态操作',
                 dataIndex: 'putStatus',
                 align: 'center',
                 scopedSlots: { customRender: 'putStatus' },
-                },
-                {
+            },
+            {
                 title: '组名称',
                 dataIndex: 'unitName',
                 align: 'center',
-                width:350,
-                },{
+                width: 350,
+            }, {
                 title: '消耗(元)',
                 dataIndex: 'charge',
                 align: 'center',
                 sorter: (a, b) => a.charge - b.charge,
-                },{
+            }, {
                 title: '出价',
                 dataIndex: 'bid',
                 align: 'center',
                 scopedSlots: { customRender: 'bid' },
                 sorter: (a, b) => a.bid - b.bid,
-                },{
+            }, {
                 title: '激活数',
                 dataIndex: 'activation',
                 align: 'center',
                 sorter: (a, b) => a.activation - b.activation,
-                },{
+            }, {
                 title: '激活成本',
                 dataIndex: 'actionCost',
                 align: 'center',
                 sorter: (a, b) => a.actionCost - b.actionCost,
-                },{
-                    title: '操作建议',
-                    dataIndex: 'operationAgree',
-                    key: 'operationAgree',
-                    align: 'center',
-                    scopedSlots: { customRender: 'operationAgree' },
-                    },{
-                    title: '操作',
-                    dataIndex: 'operator',
-                    key: 'operator',
-                    align: 'center',
-                    scopedSlots: { customRender: 'operator' },
-                    },
+            }, {
+                title: '操作建议',
+                dataIndex: 'operationAgree',
+                key: 'operationAgree',
+                align: 'center',
+                scopedSlots: { customRender: 'operationAgree' },
+            }, {
+                title: '操作',
+                dataIndex: 'operator',
+                key: 'operator',
+                align: 'center',
+                scopedSlots: { customRender: 'operator' },
+            },
         ]
     }
-     // 默认初始展示列
-     setDefaultColumns() {
-         return [
-             
-         ]
-     }
- 
-     //时间段筛选
-     setTimeRange() {
-         return {
-             昨天: [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
-             // 今天: [moment(), moment()],
-     
-             近三天: [moment().subtract(3, 'days'), moment().subtract(1, 'days')],
-             近一周: [moment().subtract(7, 'days'), moment().subtract(1, 'days')],
-             近14天: [moment().subtract(14, 'days'), moment().subtract(1, 'days')],
-             近一月: [moment().subtract(1, 'months'), moment().subtract(1, 'days')],
-             近半年: [moment().subtract(6, 'months'), moment().subtract(1, 'days')],
-             近一年: [moment().subtract(12, 'months'), moment().subtract(1, 'days')],
-         }
-     }
- 
- 
- }
- 
- export default new keepPersonServer();
- 
+    // 默认初始展示列
+    setDefaultColumns() {
+        return [
+
+        ]
+    }
+
+    //时间段筛选
+    setTimeRange() {
+        return {
+            昨天: [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
+            // 今天: [moment(), moment()],
+
+            近三天: [moment().subtract(3, 'days'), moment().subtract(1, 'days')],
+            近一周: [moment().subtract(7, 'days'), moment().subtract(1, 'days')],
+            近14天: [moment().subtract(14, 'days'), moment().subtract(1, 'days')],
+            近一月: [moment().subtract(1, 'months'), moment().subtract(1, 'days')],
+            近半年: [moment().subtract(6, 'months'), moment().subtract(1, 'days')],
+            近一年: [moment().subtract(12, 'months'), moment().subtract(1, 'days')],
+        }
+    }
+
+
+}
+
+export default new keepPersonServer();

+ 1 - 0
src/views/modules/workBench/orderDetail.vue

@@ -1873,6 +1873,7 @@ export default {
         getWater() {
             var params = qs.stringify({
             id: this.id,
+            userId: this.userInfo().id,
             watermarkTemplateId: this.size
             })
             postAction('/ctop/materialInfo/watermark', params).then(res => {

+ 2 - 2
vue.config.js

@@ -95,7 +95,7 @@ module.exports = {
     open: true,
     proxy: {
       '/jeecg-boot': {
-        target: 'http://192.168.1.72:7001', //请求本地 需要jeecg-boot后台项目  蒙蒙
+        // target: 'http://192.168.1.72:7001', //请求本地 需要jeecg-boot后台项目  蒙蒙
         // target: 'http://192.168.1.3:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
         // target: 'http://192.168.1.3:7001', //请求本地 需要jeecg-boot后台项目  蒙蒙
         // target: 'http://192.168.0.59:8088', //请求本地 需要jeecg-boot后台项目  英豪
@@ -119,7 +119,7 @@ module.exports = {
         // target:'http://gateway.tjyourong.com.cn', //测试
         // target:'http://apipre.tjyourong.com.cn', //预生产
         // target: 'http://192.168.1.134:7001', //请求本地 需要jeecg-boot后台项目  周泽宇
-        // target:'http://192.168.0.195:9999/',
+        target:'http://192.168.0.195:9999/',
         // target:'http://gateway.tjyourong.com.cn/',//测试
 
         ws: false,