zhuxinbo 5 éve
szülő
commit
c049f6e790

BIN
dist.zip


+ 2 - 1
src/views/modules/Statistics/toutiaoAccount.vue

@@ -475,7 +475,8 @@
           if (that.active == 9) {
             params.startDate = this.allValue[0]
             params.endDate = this.allValue[1]
-            getAction('/ctop/bytedanceCreativeDailyReport/bytedanceCreativeDailyReportList', params).then(res => {
+            params.userId = this.userInfo().id
+            postAction('/ctop/bytedanceCreativeDailyReport/bytedanceCreativeDailyReportList', params).then(res => {
               if (res.success) {
                 if (res.result.length > 0) {
                   this.data = res.result

+ 3 - 1
src/views/modules/Statistics/toutiaoMaterialStatistics.vue

@@ -496,8 +496,10 @@
           if (this.active == 9) {
             params.startDate = this.allValue[0]
             params.endDate = this.allValue[1]
+            params.userId = this.userInfo().id
+            // params.userId="8a6e8536c5794799b5a78e8dbe995a13"
           }
-          getAction('/ctop/bytedanceCreativeDailyReport/bytedanceCreativeDailyReportList', params).then(res => {
+          postAction('/ctop/bytedanceCreativeDailyReport/bytedanceCreativeDailyReportList', params).then(res => {
             if (res.success) {
               this.data = res.result.map((item, index) => {
                 return {

+ 141 - 0
src/views/modules/achievements/adminDetail.vue

@@ -0,0 +1,141 @@
+<style>
+</style>
+<template>
+  <div class="admin-detail">
+    <a-row :gutter="10" style="margin-top:10px">
+      <a-col :span="24">
+        <a-card style="width:100%;">
+          <a-table :columns="columns" :dataSource="dataList" bordered :loading="loading" size="middle"
+            :pagination="false">
+            <span slot-scope="text" slot="url">
+              <video class="video" :src="text" controls="controls" style="height:200px">
+                您的浏览器不支持 video 标签。
+              </video>
+            </span>
+
+          </a-table>
+        </a-card>
+      </a-col>
+    </a-row>
+  </div>
+</template>
+
+<script>
+  import ChartCard from '@/components/ChartCard'
+  import ACol from 'ant-design-vue/es/grid/Col'
+  import ATooltip from 'ant-design-vue/es/tooltip/Tooltip'
+  import MiniArea from '@/components/chart/MiniArea'
+  import MiniBar from '@/components/chart/MiniBar'
+  import MiniProgress from '@/components/chart/MiniProgress'
+  import RankList from '@/components/chart/RankList'
+  import Bar from '@/components/chart/Bar'
+  import LineChartMultid from '@/components/chart/LineChartMultid'
+  import HeadInfo from '@/components/tools/HeadInfo.vue'
+
+  import Trend from '@/components/Trend'
+
+  import {
+    getAction,
+    postAction
+  } from '@/api/manage'
+  import {
+    mapGetters
+  } from 'vuex'
+
+  import qs from 'qs'
+
+  const barData = []
+  for (let i = 0; i < 12; i += 1) {
+    barData.push({
+      x: `${i + 1}月`,
+      y: Math.floor(Math.random() * 1000) + 200
+    })
+  }
+
+  const columns = [{
+      title: '视频',
+      dataIndex: 'url',
+      key: 'url',
+      align: 'center',
+      scopedSlots: {
+        customRender: 'url'
+      },
+      width: 200
+    },
+    {
+      title: '素材名称',
+      dataIndex: 'materialName',
+      key: 'materialName',
+      align: 'center'
+    },
+    {
+      title: '水印素材名称',
+      dataIndex: 'watermarkMaterialName',
+      key: 'watermarkMaterialName',
+      align: 'center'
+    },
+    {
+      title: 'md5',
+      dataIndex: 'code',
+      key: 'code',
+      align: 'center'
+    },
+  ]
+
+  export default {
+    name: 'admin-info',
+    components: {
+      ATooltip,
+      ACol,
+    },
+
+    data: function () {
+      return {
+        title: '工作台',
+        loginfo: {},
+        barData,
+        visitInfo: [],
+        visitFields: ['ip', 'visit'],
+        loading: false,
+        rankList: [],
+        tabListNoTitle: [{
+            key: 'kuaishou',
+            tab: '快手'
+          },
+          {
+            key: 'toutiao',
+            tab: '头条'
+          }
+        ],
+        noTitleKey: 'kuaishou',
+        a: '',
+        columns,
+        dataList: [],
+      }
+    },
+    methods: {
+      ...mapGetters(['nickname', 'avatar', 'userInfo']),
+    },
+    created() {
+      var userId = localStorage.getItem('detailUserId')
+      var appType = localStorage.getItem('appType') == 'kuaishou' ? 2 : 1
+      postAction('/ctop/performance2/getEffiVideoList', {
+        "year": 2019,
+        "quarter": 4,
+        "userId": userId,
+        "appType": appType
+      }).then(res => {
+        if (res.success) {
+          this.dataList = res.result.map((item, index) => {
+            return {
+              ...item,
+              key: index,
+            }
+          })
+        } else {
+          this.$message.error(res.message)
+        }
+      })
+    }
+  }
+</script>

+ 191 - 0
src/views/modules/achievements/adminInfo.vue

@@ -0,0 +1,191 @@
+<style>
+  .admin-info .ant-list-item-content {
+    display: flex;
+    justify-content: space-around;
+  }
+
+  .admin-info .ant-table-middle tr.ant-table-expanded-row td>.ant-table-wrapper {
+    margin: -12px -9px -13px;
+  }
+</style>
+<template>
+  <div class="admin-info">
+    <a-row :gutter="10" style="margin-top:10px">
+      <a-col :span="24">
+        <a-card style="width:100%;" :tabList="tabListNoTitle" :activeTabKey="noTitleKey"
+          @tabChange="key => onTabChange(key, 'noTitleKey')">
+          <a-table :columns="columns" :dataSource="dataList" bordered :loading="loading" size="middle"
+            :pagination="false">
+            <span slot-scope="text" slot="videoUrl">
+              <video class="video" :src="text" controls="controls" style="height:200px">
+                您的浏览器不支持 video 标签。
+              </video>
+            </span>
+            <span slot="action" slot-scope="text,record">
+              <a :disabled="record.effiVideoCount == 0" @click="toDetail(record)">查看详情</a>
+            </span>
+          </a-table>
+        </a-card>
+      </a-col>
+    </a-row>
+  </div>
+</template>
+
+<script>
+  import ChartCard from '@/components/ChartCard'
+  import ACol from 'ant-design-vue/es/grid/Col'
+  import ATooltip from 'ant-design-vue/es/tooltip/Tooltip'
+  import MiniArea from '@/components/chart/MiniArea'
+  import MiniBar from '@/components/chart/MiniBar'
+  import MiniProgress from '@/components/chart/MiniProgress'
+  import RankList from '@/components/chart/RankList'
+  import Bar from '@/components/chart/Bar'
+  import LineChartMultid from '@/components/chart/LineChartMultid'
+  import HeadInfo from '@/components/tools/HeadInfo.vue'
+
+  import Trend from '@/components/Trend'
+
+  import {
+    getAction,
+    postAction
+  } from '@/api/manage'
+  import {
+    mapGetters
+  } from 'vuex'
+
+  import qs from 'qs'
+
+  const barData = []
+  for (let i = 0; i < 12; i += 1) {
+    barData.push({
+      x: `${i + 1}月`,
+      y: Math.floor(Math.random() * 1000) + 200
+    })
+  }
+
+  const columns = [{
+      title: '姓名',
+      dataIndex: 'realname',
+      key: 'realname',
+      align: 'center',
+      width: 200
+    },
+    {
+      title: '角色',
+      dataIndex: 'roleName',
+      key: 'roleName',
+      align: 'center'
+    },
+    {
+      title: '有效视频数量',
+      dataIndex: 'effiVideoCount',
+      key: 'effiVideoCount',
+      align: 'center'
+    },
+    {
+      title: '总视频数量',
+      dataIndex: 'videoCount',
+      key: 'videoCount',
+      align: 'center'
+    },
+    {
+      title: '消耗',
+      dataIndex: 'cost',
+      key: 'cost',
+      align: 'center'
+    },
+    {
+      title: '操作',
+      dataIndex: 'action',
+      key: 'action',
+      align: 'center',
+      scopedSlots: {
+        customRender: 'action'
+      },
+    },
+  ]
+
+  export default {
+    name: 'admin-info',
+    components: {
+      ATooltip,
+      ACol,
+    },
+
+    data: function () {
+      return {
+        title: '工作台',
+        loginfo: {},
+        barData,
+        visitInfo: [],
+        visitFields: ['ip', 'visit'],
+        loading: false,
+        rankList: [],
+        tabListNoTitle: [{
+            key: 'kuaishou',
+            tab: '快手'
+          },
+          {
+            key: 'toutiao',
+            tab: '头条'
+          }
+        ],
+        noTitleKey: 'kuaishou',
+        a: '',
+        columns,
+        dataList: [],
+      }
+    },
+    methods: {
+      ...mapGetters(['nickname', 'avatar', 'userInfo']),
+      onTabChange(key, type) {
+        console.log(key, type)
+        this[type] = key
+        if (key == 'kuaishou') {
+          this.getKuaishouList()
+        } else if (key == 'toutiao') {
+          this.getToutiaoList()
+        }
+      },
+      toDetail(item) {
+          localStorage.setItem('detailUserId',item.userId)
+          localStorage.setItem('appType',this.noTitleKey)
+          this.$router.replace({ path: '/achievements/adminDetail' })
+      },
+      getKuaishouList() {
+        postAction('/ctop/performance2/kuaishouPerformanceInfoNow', '').then(res => {
+          console.log(res)
+          if (res.success) {
+            this.dataList = res.result.map((item, index) => {
+              return {
+                ...item,
+                key: index,
+              }
+            })
+          } else {
+            this.$message.error(res.message)
+          }
+        })
+      },
+
+      getToutiaoList() {
+        postAction('/ctop/performance2/toutiaoPerformanceInfoNow', '').then(res => {
+          console.log(res)
+          if (res.success) {
+            this.dataList = res.result.map((item, index) => {
+              return {
+                ...item,
+                key: index,
+              }
+            })
+          } else {
+            this.$message.error(res.message)
+          }
+        })
+      }
+    },
+    created() {
+      this.getKuaishouList()
+    }
+  }
+</script>

+ 8 - 0
src/views/modules/advertiser/ProjectList.vue

@@ -54,6 +54,8 @@
         @change="handleTableChange"
       >
         <span slot="maxBid" slot-scope="text">{{ text / 1000 }}</span>
+        <span slot="maxDeepCpaBid" slot-scope="text">{{ text / 1000 }}</span>
+        
         <span slot="action" slot-scope="text, record">
           <a @click="handleEdit(record)">编辑</a>
 
@@ -104,6 +106,12 @@ export default {
           scopedSlots: { customRender: 'maxBid' }
         },
         {
+          title: '最高转化出价',
+          align: 'center',
+          dataIndex: 'maxDeepCpaBid',
+          scopedSlots: { customRender: 'maxDeepCpaBid' }
+        },
+        {
           title: '运营负责人',
           align: 'center',
           dataIndex: 'responsibleName'

+ 38 - 1
src/views/modules/advertiser/modules/ProjectModal.vue

@@ -33,9 +33,41 @@
             }}</a-select-option>
           </a-select>
         </a-form-item>
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="客户类型">
+          <a-select
+            v-decorator="['advertiserType', validatorRules.advertiserId]"
+          >
+            <a-select-option :value="1">自拓客户</a-select-option>
+            <a-select-option :value="2">公司客户</a-select-option>
+            <a-select-option :value="3">代理商</a-select-option>
+          </a-select>
+          <!-- 1:自拓客户 2:公司客户  3:代理商 -->
+        </a-form-item>
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="销售" v-if="getFormFieldValue('advertiserType')==1||getFormFieldValue('advertiserType')==2">
+          <a-select
+            showSearch
+            optionFilterProp="children"
+            style="width: 100%"
+            @focus="handleFocus"
+            @blur="handleBlur"
+            @change="handleChange"
+            :filterOption="filterOption"
+            v-decorator="['saleId', { rules: [{ required: true, message: '请选择销售' }] }]"
+          >
+            <a-select-option
+              v-for="appModel in options"
+              :key="appModel.userId + new Date().getTime()"
+              :value="appModel.userId"
+              >{{ appModel.realName }}&#12288;&#12288;{{ appModel.roleName }}</a-select-option
+            >
+          </a-select>
+        </a-form-item>
         <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="最高出价">
           <a-input placeholder="请输入最高出价" v-decorator="['maxBid', validatorRules.maxBid]" addonAfter="元" />
         </a-form-item>
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="最高转化出价">
+          <a-input placeholder="最高转化出价" v-decorator="['maxDeepCpaBid', validatorRules.maxBid]" addonAfter="元" />
+        </a-form-item>
         <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="运营负责人">
           <a-select
             showSearch
@@ -182,6 +214,7 @@ export default {
       this.form.resetFields()
       this.model = Object.assign({}, params)
       this.model.maxBid = this.model.maxBid ? this.model.maxBid / 1000 : 0
+      this.model.maxDeepCpaBid = this.model.maxDeepCpaBid ? this.model.maxDeepCpaBid / 1000 : 0
       this.visible = true
       this.$nextTick(() => {
         this.form.setFieldsValue(
@@ -191,9 +224,12 @@ export default {
             'advertiserId',
             'responsibleName',
             'maxBid',
+            'maxDeepCpaBid',
             'userId',
             'designResponsibleId',
-            'responsibleId'
+            'responsibleId',
+            'advertiserType',
+            'saleId'
           )
         )
         // this.resId = record.responsibleId
@@ -229,6 +265,7 @@ export default {
           var data = values.advertiserId
           let formData = Object.assign(this.model, values)
           formData.maxBid = formData.maxBid * 1000
+          formData.maxDeepCpaBid = formData.maxDeepCpaBid*1000
           //时间格式化
           formData.advertiserId = data.key
           formData.advertiserName = data.label

BIN
src/views/modules/material/douyin.jpg


BIN
src/views/modules/material/douyinhui.jpg


BIN
src/views/modules/material/kuaishou.jpg


+ 21 - 0
src/views/modules/material/videoMaterial.vue

@@ -248,6 +248,27 @@
                     @canplay="a(items)"
                     style="height:200px;max-width:100%;position:absolute;z-index:10;"
                   /> -->
+                  <div style="width: 100px;position: absolute;left: 0;z-index:1000">
+                    <a-tooltip placement="top">
+                      <template slot="title">
+                        <span>{{items.kuaishouEffiType==1?'快手有效视频':'已经同步到快手平台'}}</span>
+                      </template>
+                      <img style="width:30px;height:30px;" v-if="items.kuaishouVideoIsUp==1"
+                      :style="{filter:items.kuaishouEffiType==1?'grayscale(0%)':'grayscale(100%)'}"
+                      src="./kuaishou.jpg">
+                    </a-tooltip>
+                    <a-tooltip placement="top">
+                      <template slot="title">
+                        <span>{{items.toutiaoEffiType==1?'抖音有效视频':'已经同步到抖音平台'}}</span>
+                      </template>
+                      <img v-if="items.toutiaoVideoIsUp==1&&items.toutiaoEffiType==1"
+                      
+                      style="width:30px;height:30px;margin-left:5px;" src="./douyin.jpg" alt="">
+                      <img v-else-if="items.toutiaoVideoIsUp==1&&items.toutiaoEffiType==0"
+                      style="width:30px;height:30px;margin-left:5px;" src="./douyinhui.jpg" alt="">
+                    </a-tooltip>
+                    
+                  </div>
                   <img :src="items.url + '?x-oss-process=video/snapshot,t_00000,m_fast'" alt=""
                     style="height:200px;max-width:100%;position:absolute;z-index:10;" />
                   <!-- <img