zhuxinbo 5 gadi atpakaļ
vecāks
revīzija
0b9a21497b

+ 71 - 40
src/views/modules/achievements/optimize.vue

@@ -26,7 +26,7 @@
                 :total="dataCount.totalCost + ''"
                 style="border: 1px solid #e8e8e8;"
               >
-                <a-tooltip title="指标说明" slot="action">
+                <a-tooltip title="当前所有账户下的消耗总计" slot="action">
                   <a-icon type="info-circle-o" />
                 </a-tooltip>
                 <template slot="footer"> </template>
@@ -39,7 +39,7 @@
                 :total="dataCount.personalTask + ''"
                 style="border: 1px solid #e8e8e8;"
               >
-                <a-tooltip title="指标说明" slot="action">
+                <a-tooltip title="每季度需要完成的消耗量" slot="action">
                   <a-icon type="info-circle-o" />
                 </a-tooltip>
                 <template slot="footer"> </template>
@@ -48,7 +48,7 @@
             <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
               <chart-card
                 :loading="loading"
-                title="提点比例"
+                title="根据消耗任务完成度计算"
                 :total="dataCount.royaltyRatio ? dataCount.royaltyRatio : '0‰'"
                 style="border: 1px solid #e8e8e8;"
               >
@@ -65,7 +65,7 @@
                 :total="dataCount.totalRoyalty + ''"
                 style="border: 1px solid #e8e8e8;"
               >
-                <a-tooltip title="指标说明" slot="action">
+                <a-tooltip title="目前为止,可以获得的绩效金额" slot="action">
                   <a-icon type="info-circle-o" />
                 </a-tooltip>
                 <template slot="footer"> </template>
@@ -79,13 +79,21 @@
             :loading="loading"
             size="middle"
             :pagination="false"
+            @expand="expand"
           >
             <span slot-scope="text" slot="videoUrl">
               <video class="video" :src="text" controls="controls" style="height:200px">
                 您的浏览器不支持 video 标签。
               </video>
             </span>
-            <a-table slot="expandedRowRender" :columns="innerColumns" :dataSource="innerData" :pagination="false">
+            <a-table
+              slot="expandedRowRender"
+              slot-scope="record"
+              :columns="innerColumns"
+              :dataSource="record.innerData"
+              :loading="childrenLoading"
+              size="middle"
+            >
             </a-table>
           </a-table>
           <template class="ant-card-actions" slot="actions" v-if="dataList.length > 3">
@@ -147,7 +155,7 @@
     </a-row>
     <a-modal title="人员排名" :visible="visible" @ok="handleOk('visible')" @cancel="handleCancel('visible')">
       <a-list itemLayout="horizontal" :dataSource="dataRanking">
-        <a-list-item slot="renderItem" slot-scope="item, index">
+        <a-list-item slot="renderItem" slot-scope="item">
           <a-list-item-meta style="width:50%">
             {{ item }}
             <div slot="description">总消耗:{{ item.totalCost }}</div>
@@ -196,35 +204,29 @@ for (let i = 0; i < 12; i += 1) {
 
 const columns = [
   {
-    title: '素材',
-    dataIndex: 'videoUrl',
-    key: 'videoUrl',
+    title: '项目',
+    dataIndex: 'projectName',
+    key: 'projectName',
     align: 'center',
-    scopedSlots: { customRender: 'videoUrl' },
+    scopedSlots: { customRender: 'projectName' },
     width: 200
   },
   {
-    title: '素材跑量',
-    dataIndex: 'videoCost',
-    key: 'videoCost',
-    align: 'center'
-  },
-  {
-    title: '封面点击数',
-    dataIndex: 'pageClickCount',
-    key: 'pageClickCount',
+    title: '年份',
+    dataIndex: 'year',
+    key: 'year',
     align: 'center'
   },
   {
-    title: '封面曝光数',
-    dataIndex: 'pageExposureCount',
-    key: 'pageExposureCount',
+    title: '季度',
+    dataIndex: 'quarter',
+    key: 'quarter',
     align: 'center'
   },
   {
-    title: '行为数',
-    dataIndex: 'behaviorCount',
-    key: 'behaviorCount',
+    title: '总消耗',
+    dataIndex: 'totalCost',
+    key: 'totalCost',
     align: 'center'
   }
 ]
@@ -253,6 +255,7 @@ export default {
       visitInfo: [],
       visitFields: ['ip', 'visit'],
       loading: false,
+      childrenLoading: false,
       rankList: [],
       tabListNoTitle: [
         {
@@ -288,27 +291,21 @@ export default {
       innerColumns: [
         {
           title: '素材账户',
-          dataIndex: 'videoAccount',
-          key: 'videoAccount',
+          dataIndex: 'accountName',
+          key: 'accountName',
           align: 'center'
         },
         {
-          title: '投放账户',
-          dataIndex: 'servingAccount',
-          key: 'servingAccount',
-          align: 'center'
-        },
-        {
-          title: '跑量',
-          dataIndex: 'cost',
-          key: 'cost',
+          title: '总消耗',
+          dataIndex: 'totalCost',
+          key: 'totalCost',
           align: 'center'
         }
       ],
-      innerData: [
-        { key: 1, videoAccount: 'aabbcc', servingAccount: 'ttyyhh', cost: 34234.43 },
-        { key: 2, videoAccount: 'aabbcc', servingAccount: 'ttyyhh', cost: 34234.43 }
-      ],
+      //   innerData: [
+      //     { key: 1, videoAccount: 'aabbcc', servingAccount: 'ttyyhh', cost: 34234.43 },
+      //     { key: 2, videoAccount: 'aabbcc', servingAccount: 'ttyyhh', cost: 34234.43 }
+      //   ],
       dataRanking: [],
       visible: false,
       visibleVideo: false
@@ -329,6 +326,30 @@ export default {
     onTabChange(key, type) {
       console.log(key, type)
       this[type] = key
+    },
+    expand(expanded, record) {
+      var param = {}
+      param.projectId = record.projectId
+      this.childrenLoading = true
+      if (expanded) {
+        getAction('/ctop/performance/account/list', param).then(res => {
+          if (res.success) {
+            record.innerData = res.data.map((item, index) => {
+              return {
+                ...item,
+                key: index
+              }
+            })
+            this.childrenLoading = false
+          }
+          if (res.code === 510) {
+            this.$message.warning(res.message)
+          }
+          this.childrenLoading = false
+        })
+      } else {
+        record.innerData = []
+      }
     }
   },
   created() {
@@ -343,6 +364,16 @@ export default {
       }
     })
 
+    getAction('/ctop/performance/project/list', { appType: 2 }).then(res => {
+      if (res.success) {
+        this.dataList = res.data.map(item => {
+          return {
+            ...item,
+            innerData: []
+          }
+        })
+      }
+    })
     //   /ctop/materialInfo/report
   }
 }

+ 344 - 0
src/views/modules/achievements/optimizeManager.vue

@@ -0,0 +1,344 @@
+<style>
+.design .ant-list-item-content {
+  display: flex;
+  justify-content: space-around;
+}
+.design .ant-table-middle tr.ant-table-expanded-row td > .ant-table-wrapper {
+  margin: -12px -9px -13px;
+}
+</style>
+<template>
+  <div class="design">
+    <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')"
+        >
+          <!-- 媒体任务:{{ dataCount.mediaTask }}元 -->
+          <a-row :gutter="24" style="margin-top:15px">
+            <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
+              <chart-card
+                :loading="loading"
+                title="媒体总消耗(元)"
+                :total="dataCount.mediaTotalCost + ''"
+                style="border: 1px solid #e8e8e8;"
+              >
+                <!-- <a-tooltip title="当前所有账户下的消耗总计" slot="action">
+                  <a-icon type="info-circle-o" />
+                </a-tooltip> -->
+                <template slot="footer"> </template>
+              </chart-card>
+            </a-col>
+            <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
+              <chart-card
+                :loading="loading"
+                title="季度任务(元)"
+                :total="dataCount.mediaTask + ''"
+                style="border: 1px solid #e8e8e8;"
+              >
+                <!-- <a-tooltip title="每季度需要完成的消耗量" slot="action">
+                  <a-icon type="info-circle-o" />
+                </a-tooltip> -->
+                <template slot="footer"> </template>
+              </chart-card>
+            </a-col>
+            <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
+              <chart-card
+                :loading="loading"
+                title="下属总消耗(元)"
+                :total="dataCount.memberTotalCost ? dataCount.memberTotalCost : '0'"
+                style="border: 1px solid #e8e8e8;"
+              >
+                <!-- <a-tooltip title="指标说明" slot="action">
+                  <a-icon type="info-circle-o" />
+                </a-tooltip> -->
+                <template slot="footer"> </template>
+              </chart-card>
+            </a-col>
+            <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
+              <chart-card
+                :loading="loading"
+                title="当前可获绩效"
+                :total="dataCount.totalRoyalty + ''"
+                style="border: 1px solid #e8e8e8;"
+              >
+                <!-- <a-tooltip title="目前为止,可以获得的绩效金额" slot="action">
+                  <a-icon type="info-circle-o" />
+                </a-tooltip> -->
+                <template slot="footer"> </template>
+              </chart-card>
+            </a-col>
+          </a-row>
+          <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>
+          </a-table>
+          <template class="ant-card-actions" slot="actions" v-if="dataList.length > 3">
+            <div @click="getAll('visibleVideo')">查看更多</div>
+          </template>
+        </a-card>
+      </a-col>
+    </a-row>
+    <a-row :gutter="24">
+      <!-- <a-col :span="8">
+        <a-card :loading="loading" :bordered="false" title="当前可获得绩效" :style="{ marginTop: '24px' }">
+          <div style="height:250px;text-align:center;line-height:230px;font-size:80px">
+            {{ dataCount.performance }}
+          </div>
+        </a-card>
+      </a-col> -->
+      <a-col :span="24">
+        <a-card :loading="loading" :bordered="false" title="消耗排行" :style="{ marginTop: '24px' }">
+          <div style="height:200px">
+            <a-list itemLayout="horizontal" :dataSource="dataRanking">
+              <a-list-item slot="renderItem" slot-scope="item, index">
+                <a-list-item-meta style="width:50%">
+                  <div slot="description"></div>
+                  <a slot="title" style="font-size:16px"
+                    ><span style="display:inline-block;width:100px">{{ item.realName }}</span
+                    ><span style="margin-left:20px">总消耗:{{ item.totalCost }}</span></a
+                  >
+                  <a-avatar slot="avatar" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />
+                </a-list-item-meta>
+                <div></div>
+                <div style="text-align:center">
+                  <img
+                    v-if="index == 0"
+                    src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1576727589&di=a65392c20b9187cab794c2d5c0bb836b&imgtype=jpg&er=1&src=http%3A%2F%2F58pic.ooopic.com%2F58pic%2F12%2F83%2F98%2F42R58PICEnd.jpg"
+                    alt=""
+                    style="height:40px;"
+                  />
+                  <img
+                    v-if="index == 1"
+                    src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1576137652175&di=d648da94b779e32a96233faa7b6ae64b&imgtype=0&src=http%3A%2F%2Fwww.51pptmoban.com%2Fd%2Ffile%2F2017%2F05%2F31%2F14c7fdd5e99d7159b9fc21dbba2d5583.png"
+                    alt=""
+                    style="height:40px;"
+                  />
+                  <img
+                    v-if="index == 2"
+                    src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=748734891,2113250735&fm=26&gp=0.jpg"
+                    alt=""
+                    style="height:40px"
+                  />
+                </div>
+              </a-list-item>
+            </a-list>
+          </div>
+          <template class="ant-card-actions" slot="actions">
+            <div @click="getAll('visible')">查看更多</div>
+          </template>
+        </a-card>
+      </a-col>
+    </a-row>
+    <a-modal title="人员排名" :visible="visible" @ok="handleOk('visible')" @cancel="handleCancel('visible')">
+      <a-list itemLayout="horizontal" :dataSource="dataRanking">
+        <a-list-item slot="renderItem" slot-scope="item">
+          <a-list-item-meta style="width:50%">
+            {{ item }}
+            <div slot="description">总消耗:{{ item.totalCost }}</div>
+            <a slot="title" href="https://vue.ant.design/">{{ item.realName }}</a>
+            <a-avatar slot="avatar" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />
+          </a-list-item-meta>
+          <div></div>
+        </a-list-item>
+      </a-list>
+    </a-modal>
+    <a-modal
+      title="下属运营明细"
+      :visible="visibleVideo"
+      @ok="handleOk('visibleVideo')"
+      @cancel="handleCancel('visibleVideo')"
+      :width="800"
+    >
+      <a-table :columns="columns" :dataSource="dataList" bordered :loading="loading" size="middle" :pagination="false">
+      </a-table>
+    </a-modal>
+  </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 } from '@/api/manage'
+import { mapGetters } from 'vuex'
+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',
+    scopedSlots: { customRender: 'realName' },
+    width: 200
+  },
+  {
+    title: '年份',
+    dataIndex: 'year',
+    key: 'year',
+    align: 'center'
+  },
+  {
+    title: '季度',
+    dataIndex: 'quarter',
+    key: 'quarter',
+    align: 'center'
+  },
+  {
+    title: '总消耗',
+    dataIndex: 'totalCost',
+    key: 'totalCost',
+    align: 'center'
+  },
+  {
+    title: '总提成',
+    dataIndex: 'totalRoyalty',
+    key: 'totalRoyalty',
+    align: 'center'
+  }
+]
+
+export default {
+  name: 'design',
+  components: {
+    ATooltip,
+    ACol,
+    ChartCard,
+    MiniArea,
+    MiniBar,
+    MiniProgress,
+    RankList,
+    Bar,
+    Trend,
+    LineChartMultid,
+    HeadInfo
+  },
+
+  data: function() {
+    return {
+      title: '工作台',
+      loginfo: {},
+      barData,
+      visitInfo: [],
+      visitFields: ['ip', 'visit'],
+      loading: false,
+      childrenLoading: false,
+      rankList: [],
+      tabListNoTitle: [
+        {
+          key: 'kuaishou',
+          tab: '快手'
+        },
+        {
+          key: 'toutiao',
+          tab: '头条'
+        }
+      ],
+      noTitleKey: 'kuaishou',
+      dataCount: {
+        effiVideoCount: 70, //有效数
+        videoCount: 200, //素材总数
+        effiRate: 40, //有效率
+        performance: 20000, //当前绩效
+        cost: 20000 // 总消耗
+      },
+      a: '',
+      columns,
+      dataList: [
+        {
+          key: 1,
+          videoUrl:
+            'https://ctop-media.oss-cn-beijing.aliyuncs.com/video/2019-12-14/%E9%AB%98%E6%B8%85-1576318874426.mp4',
+          videoCost: 34.56,
+          pageClickCount: 1200,
+          pageExposureCount: 3939,
+          behaviorCount: 5000
+        }
+      ],
+      innerColumns: [
+        {
+          title: '素材账户',
+          dataIndex: 'accountName',
+          key: 'accountName',
+          align: 'center'
+        },
+        {
+          title: '总消耗',
+          dataIndex: 'totalCost',
+          key: 'totalCost',
+          align: 'center'
+        }
+      ],
+      //   innerData: [
+      //     { key: 1, videoAccount: 'aabbcc', servingAccount: 'ttyyhh', cost: 34234.43 },
+      //     { key: 2, videoAccount: 'aabbcc', servingAccount: 'ttyyhh', cost: 34234.43 }
+      //   ],
+      dataRanking: [],
+      visible: false,
+      visibleVideo: false
+    }
+  },
+  methods: {
+    ...mapGetters(['nickname', 'avatar', 'userInfo']),
+    getAll(item) {
+      this[item] = true
+    },
+    handleOk(item) {
+      this[item] = false
+    },
+    handleCancel(item) {
+      console.log('Clicked cancel button')
+      this[item] = false
+    },
+    onTabChange(key, type) {
+      console.log(key, type)
+      this[type] = key
+    }
+  },
+  created() {
+    getAction('/ctop/optimizerRoleInfo/manager/detail', { appType: 2 }).then(res => {
+      console.log(res)
+      this.dataCount = res
+      this.dataList = res.memberDetails
+    })
+    getAction('/ctop/performanceOptimizer/ranking/list').then(res => {
+      console.log(res)
+      if (res.success) {
+        this.dataRanking.push(...res.data)
+      }
+    })
+
+    //   /ctop/materialInfo/report
+  }
+}
+</script>

+ 71 - 6
src/views/modules/kuaishouapp/account/stepForm/Step2.vue

@@ -6,6 +6,21 @@
 .plug-timer-grid th {
   line-height: 25px;
 }
+.group-creat .ant-form-item-required::before {
+  display: inline-block;
+  margin-right: 4px;
+  color: #f5222d;
+  font-size: 14px;
+  font-family: SimSun, sans-serif;
+  line-height: 1;
+  content: '';
+}
+.else-label .ant-form-item-label label::after {
+  content: '';
+  position: relative;
+  top: -0.5px;
+  margin: 0 8px 0 2px;
+}
 </style>
 <template>
   <a-card :body-style="{ padding: '24px 32px' }" :bordered="false" class="group-creat">
@@ -17,7 +32,7 @@
         v-if="campaignType == '2'"
       >
         <a-select
-          v-model="appId"
+          v-decorator="['appId', { rules: [{ required: true, message: '请选择目标应用' }] }]"
           showSearch
           allowClear
           placeholder="选择应用目标"
@@ -39,6 +54,34 @@
         <creat-application ref="application" />
       </a-form-item>
       <a-form-item
+        label="转化类型"
+        :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }"
+        v-if="campaignType == '3'"
+      >
+        <a-radio-group
+          buttonStyle="solid"
+          v-decorator="['url_type', { rules: [{ required: true, message: '请选择目标应用' }], initialValue: '1' }]"
+          @change="getPeople"
+        >
+          <a-radio-button value="1">淘宝商品</a-radio-button>
+          <a-radio-button value="2">淘客商品</a-radio-button>
+        </a-radio-group>
+      </a-form-item>
+      <a-form-item
+        :label="campaignType == '3' ? ' ' : '链接'"
+        :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }"
+        v-if="campaignType != '2'"
+        :class="{ elseLabel: campaignType == '3' }"
+      >
+        <!-- 请填写以http://或者https://开头的落地页地址,长度不超过1000个字符 -->
+        <a-input
+          placeholder="请填写链接"
+          v-decorator="['url', { rules: [{ required: true, message: ' ' }, { validator: handleConfirmValue }] }]"
+        />
+      </a-form-item>
+      <a-form-item
         label="自定义人群"
         :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
         :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }"
@@ -299,10 +342,23 @@ export default {
   },
   methods: {
     handleConfirmValue(rule, value, callback) {
-      if (this.dayBudget == '' || this.dayBudget < 100 || this.dayBudget >= 100000000) {
-        callback('请输入正确预算金额')
+      if (this.campaignType == '3') {
+        if (value == '') {
+          callback('请填写链接')
+        }
+      } else if (this.campaignType == '4') {
+        if (/(http|https):\/\/([\w.]+\/?)\S*/.test(value) && value != '' && value.length < 10000) {
+          callback()
+        } else {
+          callback('链接不能为空且开头为http://或https://,并且长度小于10000')
+        }
+      } else if (this.campaignType == '5') {
+        if (/(http|https):\/\/([\w.]+\/?)\S*/.test(value) && value != '' && value.length < 10000) {
+          callback()
+        } else {
+          callback('链接不能为空且开头为http://或https://,并且长度小于10000')
+        }
       }
-      callback()
     },
     handleConfirmBid(rule, value, callback) {
       if (this.bid == 0 || this.bid <= 0.2 || this.bid >= 100) {
@@ -374,7 +430,12 @@ export default {
     },
     handleSubmit(e) {
       e.preventDefault()
-      this.nextStep()
+
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          console.log('Received values of form: ', values)
+        }
+      })
     },
     onChange(value) {
       console.log(value)
@@ -434,9 +495,13 @@ export default {
           this.campaignType = res.result.records[0].campaignType
         }
       })
+    },
+    getData(className) {
+      return this.form.getFieldValue(className)
     }
   },
-  mounted: function() {
+  //   watch
+  activated: function() {
     this.$nextTick(() => {
       this.step = localStorage.getItem('step')
       this.getAppList()

+ 163 - 1
src/views/modules/kuaishouapp/account/stepForm/stepModule/targetedPopulation.vue

@@ -16,6 +16,23 @@
   line-height: 1;
   content: '';
 }
+.else-label .ant-form-item-label label::after {
+  content: '';
+  position: relative;
+  top: -0.5px;
+  margin: 0 8px 0 2px;
+}
+</style>
+<style scoped>
+ul {
+  padding-left: 0;
+}
+li {
+  list-style: none;
+}
+li:hover {
+  background: #f2f2f2;
+}
 </style>
 <template>
   <a-form :form="form" class="module-form" @submit="handleSubmit">
@@ -180,6 +197,100 @@
         </a-checkbox-group>
       </div>
     </a-form-item>
+    <a-form-item
+      label="设备价格"
+      :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
+      :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }"
+    >
+      <a-radio-group buttonStyle="solid" v-model="allForm.price">
+        <a-radio-button value="0">不限</a-radio-button>
+        <a-radio-button value="1">选择价格</a-radio-button>
+      </a-radio-group>
+      <div v-if="allForm.price == '1'" style="width:120%">
+        <a-checkbox-group
+          v-decorator="['device_price', { rules: [{ required: true, message: '请选择设备价格' }] }]"
+          style="width:120%"
+        >
+          <a-checkbox value="1">1500以下</a-checkbox>
+          <a-checkbox value="2">1501~2000</a-checkbox>
+          <a-checkbox value="3">2001~2500</a-checkbox>
+          <a-checkbox value="4">2501~3000</a-checkbox>
+          <a-checkbox value="5">3001~3500</a-checkbox>
+          <a-checkbox value="6">3501~4000</a-checkbox>
+          <a-checkbox value="7">4001~4500</a-checkbox>
+          <a-checkbox value="8">4501~5000</a-checkbox>
+          <a-checkbox value="9">5001~5500</a-checkbox>
+          <a-checkbox value="10">5500以上</a-checkbox>
+        </a-checkbox-group>
+      </div>
+    </a-form-item>
+    <a-form-item
+      label="APP行为"
+      :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
+      :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }"
+      v-if="getData('platform_os') == '1'"
+    >
+      <a-radio-group buttonStyle="solid" v-model="allForm.appType" @change="getAppType">
+        <a-radio-button value="0">不限</a-radio-button>
+        <a-radio-button value="1">按分类</a-radio-button>
+        <a-radio-button value="2">按APP名称</a-radio-button>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item
+      label=" "
+      :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
+      :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }"
+      v-if="getData('platform_os') == '1' && allForm.appType == '1'"
+      class="else-label"
+    >
+      {{ getData('app_interest') }}
+      <el-cascader
+        ref="cascader"
+        v-decorator="['app_interest', { rules: [{ required: true, message: '请选择分类' }] }]"
+        :options="optionsApp"
+        :props="optionPropsApp"
+        clearable
+        filterable
+        style="width:100%"
+      ></el-cascader>
+    </a-form-item>
+    <a-form-item
+      label=" "
+      :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
+      :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }"
+      v-if="getData('platform_os') == '1' && allForm.appType == '2'"
+      class="else-label"
+    >
+      {{ getData('app_ids') }}
+      <div style="position:relative;">
+        <a-input placeholder="请输入搜索内容" @change="getAppAll" style="width:100%;position:relative;" />
+        <div
+          style="width:100%;position:absolute;z-index:10;height:200px;background:white;overflow:auto;box-shadow: 0 2px 8px 0 rgba(0,0,0,.15);"
+          v-show="optionsApp.length > 0"
+        >
+          <ul>
+            <li><a-checkbox style="float:left" @change="onCheckAllChange"></a-checkbox>全选</li>
+            <a-checkbox-group @change="onChangeCheck" v-model="checkArr" class="home-card">
+              <li v-for="item of optionsApp" :key="item.app_id">
+                <a-checkbox :value="item.app_id" style="float:left"></a-checkbox>{{ item.app_name }}
+              </li>
+            </a-checkbox-group>
+          </ul>
+        </div>
+      </div>
+    </a-form-item>
+    <a-form-item
+      label="APP行为"
+      :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
+      :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }"
+      v-if="getData('platform_os') == '1'"
+    >
+      <a-radio-group buttonStyle="solid" v-model="allForm.appType" @change="getAppType">
+        <a-radio-button value="0">不限</a-radio-button>
+        <a-radio-button value="1">按分类</a-radio-button>
+        <a-radio-button value="2">按APP名称</a-radio-button>
+      </a-radio-group>
+    </a-form-item>
   </a-form>
 </template>
 
@@ -220,6 +331,8 @@ export default {
       },
       step: 0,
       loading: false,
+      checkArr: [],
+      checkAll: false,
       allForm: {
         regionType: 'noLimit',
         region: [
@@ -229,7 +342,9 @@ export default {
         ageType: 'noLimit',
         ages_range: [],
         age: [],
-        device: '0'
+        device: '0',
+        price: '0',
+        appType: '0'
       },
       options: [],
       optionsAll: [],
@@ -239,6 +354,13 @@ export default {
         children: 'children',
         multiple: true
       },
+      optionsApp: [],
+      optionPropsApp: {
+        value: 'tagId',
+        label: 'tagName',
+        children: 'children',
+        multiple: true
+      },
       getApp: '0'
     }
   },
@@ -246,6 +368,21 @@ export default {
     count() {}
   },
   methods: {
+    onChangeCheck(checkedList) {
+      if (checkedList.length == 0) {
+        this.checkAll = false
+      }
+    },
+    onCheckAllChange() {
+      if (this.checkAll) {
+        this.checkArr = []
+      } else {
+        this.checkArr = this.optionsApp.map(item => {
+          return item.app_id
+        })
+      }
+      this.checkAll = !this.checkAll
+    },
     handleSubmit(e) {
       e.preventDefault()
       this.form.validateFields((err, values) => {
@@ -301,6 +438,31 @@ export default {
       })
       console.log(dataElse)
     },
+    getAppAll(e) {
+      console.log(e.target.value)
+      if (e.target.value !== '') {
+        getAction('/kuaishou/batch/getAppSearch', {
+          accountId: localStorage.getItem('accountId'),
+          appName: e.target.value
+        }).then(res => {
+          this.optionsApp = res.result
+        })
+      } else {
+        this.optionsApp = []
+      }
+    },
+    getAppType(e) {
+      console.log(e.target.value)
+      this.optionsApp = []
+      if (e.target.value == '1') {
+        getAction('/kuaishou/batch/getTargetList', { tagType: 'APP_INTEREST' }).then(res => {
+          console.log(res)
+          if (res.success) {
+            this.optionsApp = res.result
+          }
+        })
+      }
+    },
     getData(className) {
       return this.form.getFieldValue(className)
     }

+ 3 - 3
src/views/modules/material/checkMatemal.vue

@@ -33,7 +33,7 @@
             @change="onChangeCheck"
           >
             <li v-for="(item, index) of dataSource" :key="index">
-              <a-checkbox :value="item.url" style="position:absolute"></a-checkbox
+              <a-checkbox :value="item" style="position:absolute"></a-checkbox
               ><video class="video" :src="item.url" controls="controls" style="min-height:160px">
                 您的浏览器不支持 video 标签。
               </video>
@@ -93,14 +93,14 @@ export default {
   methods: {
     showCheck(typeName, keyNumber, item) {
       this.dataSource = []
-      console.log(keyNumber)
+      console.log(keyNumber,item)
       this.visibleMatemal = true
       this.queryParam.userId = this.userInfo().id
       this.queryParam.type = typeName
       this.active = typeName
 
       if (typeName == 'VIDEO_PART') {
-        this.checkArr = item.VIDEO_PART
+        this.checkArr = []
         this.joinVideo = {
           head: '',
           content: item.VIDEO_PART,

+ 181 - 25
src/views/modules/material/fragmentMatemal.vue

@@ -222,7 +222,7 @@ a {
 
     <a-tabs @change="callbackTwo" v-model="active" type="card" id="material-card">
       <a-tab-pane :tab="item.tab" v-for="item of examinelList" :key="item.value">
-        <div v-if="item.value != 'join' && item.value != 'success'">
+        <div v-if="item.value != 'join' && item.value != 'job' && item.value != 'success'">
           <div v-if="dataSource.length > 0">
             <a-checkbox-group @change="onChangeCheck" v-model="checkArr" class="home-card">
               <div class="home-item" v-for="(items, index) in dataSource" :key="index" @click="showDetail(items)">
@@ -287,7 +287,7 @@ a {
             />
           </div>
         </div>
-        <div v-else>
+        <div v-else-if="item.value == 'join'">
           <div style="margin-bottom:20px">
             <a-button @click="addMatemal" type="primary" icon="plus" style="margin-right:15px">新增一行</a-button>
             <a-button type="primary" @click="joinMatemal">开始拼接</a-button>
@@ -299,7 +299,7 @@ a {
             </span>
             <span slot="VIDEO_HEAD" slot-scope="text, record, index">
               <div v-if="text != ''" style="position:relative">
-                <video class="video" :src="text" controls="controls" style="height:160px">
+                <video class="video" :src="text.url" controls="controls" style="height:160px">
                   您的浏览器不支持 video 标签。
                 </video>
                 <a-icon
@@ -316,16 +316,16 @@ a {
               <div>
                 <video
                   class="video"
-                  :src="item"
+                  :src="item.url"
                   controls="controls"
                   style="height:160px"
                   v-for="item of text"
-                  :key="item"
+                  :key="item.id"
                   draggable="true"
-                  @dragstart="handleDragStart($event, item)"
-                  @dragover.prevent="handleDragOver($event, item)"
-                  @dragenter="handleDragEnter($event, item)"
-                  @dragend="handleDragEnd($event, item)"
+                  @dragstart="handleDragStart($event, item.code)"
+                  @dragover.prevent="handleDragOver($event, item.code)"
+                  @dragenter="handleDragEnter($event, item.code)"
+                  @dragend="handleDragEnd($event, item.code)"
                 >
                   > 您的浏览器不支持 video 标签。
                 </video>
@@ -336,7 +336,7 @@ a {
             </span>
             <span slot="VIDEO_TAIL" slot-scope="text, record, index">
               <div v-if="text != ''" style="position:relative">
-                <video class="video" :src="text" controls="controls" style="height:160px">
+                <video class="video" :src="text.url" controls="controls" style="height:160px">
                   您的浏览器不支持 video 标签。
                 </video>
                 <a-icon
@@ -351,6 +351,64 @@ a {
             </span>
           </a-table>
         </div>
+        <div v-else-if="item.value == 'job'">
+          <a-table :columns="columnsJob" :dataSource="dataSource" :pagination="false" :loading="loading" bordered>
+            <span slot="status" slot-scope="text">
+              {{ text == 'TranscodeSuccess' ? '已完成' : '提交中' }}
+            </span>
+          </a-table>
+        </div>
+        <div v-else-if="item.value == 'success'">
+          <a-button @click="dirVideoGetPublish" type="primary">发布到项目</a-button>
+          <div v-if="dataSource.length > 0">
+            <a-checkbox-group @change="onChangeCheck" v-model="checkArr" class="home-card">
+              <div class="home-item" v-for="(items, index) in dataSource" :key="index" @click="showDetailElse(items)">
+                <div class="home-right">
+                  <span
+                    style="color: #999; fontSize: 16px;padding-bottom:10px;display:block;width:100%;overflow: hidden;text-overflow: ellipsis;"
+                  >
+                    {{ items.jobId }}
+                  </span>
+                  <div style="display:flex;justify-content:center;width:100%;height:200px;position:relative">
+                    <video
+                      :src="items.videoUrl"
+                      @canplay="a(items)"
+                      style="height:200px;max-width:100%;position:absolute;z-index:10;"
+                    />
+                    <img
+                      src="./timg.gif"
+                      v-if="!items.showVideo"
+                      alt=""
+                      style="height:200px;max-width:100%;position:absolute;z-index:11;"
+                      @click.stop
+                    />
+                  </div>
+                  <span style="color: black; fontSize: 16px;padding-top:10px;display:block;width:100%" @click.stop>
+                    {{ items.createTime | getDate }}
+                    <a-checkbox :value="items.videoId" style="float:right"></a-checkbox
+                  ></span>
+                </div>
+              </div>
+            </a-checkbox-group>
+            <a-pagination
+              size="small"
+              :showTotal="ipagination.showTotal"
+              style="float:right"
+              v-if="dataSource.length > 0"
+              showQuickJumper
+              :pageSize.sync="ipagination.pageSize"
+              :total="ipagination.total"
+              v-model="ipagination.current"
+              @change="getDataSource"
+            />
+          </div>
+          <div v-else style="width:100%;height:400px;display:flex;justify-content: center;align-items: center;">
+            <img
+              src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1575627350102&di=02972956f2243933bffc0d85099adbfe&imgtype=jpg&src=http%3A%2F%2Fimg0.imgtn.bdimg.com%2Fit%2Fu%3D1095310825%2C1528244349%26fm%3D214%26gp%3D0.jpg"
+              alt=""
+            />
+          </div>
+        </div>
       </a-tab-pane>
     </a-tabs>
     <a-modal title="添加素材" v-model="visible" @ok="handleOk" @cancel="close" :maskClosable="false">
@@ -454,6 +512,30 @@ a {
       </a-form>
     </a-modal>
 
+    <a-modal
+      title="发布到项目"
+      v-model="visiblePublish"
+      @ok="handleOkPublich"
+      @cancel="closePublish"
+      :maskClosable="false"
+    >
+      <a-form :form="form">
+        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="选择项目">
+          <a-select
+            v-decorator="[
+              'projectId', // 给表单赋值或拉取表单时,该input对应的key
+              { rules: [{ required: true, message: '请选择项目!' }] }
+            ]"
+            @change="getProjectId"
+          >
+            <a-select-option :value="item.projectId" v-for="item of dataElse" :key="item.id">
+              {{ item.projectName }}
+            </a-select-option>
+          </a-select>
+        </a-form-item>
+      </a-form>
+    </a-modal>
+
     <a-modal title="素材详情" v-model="visibleDetail" width="70%">
       <div style="display:flex;height:700px">
         <div
@@ -572,6 +654,31 @@ export default {
           align: 'center'
         }
       ],
+      columnsJob: [
+        {
+          title: '',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 50,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          }
+        },
+        {
+          title: '任务Id',
+          dataIndex: 'jobId',
+          scopedSlots: { customRender: 'jobId' },
+          align: 'center'
+        },
+        {
+          title: '状态',
+          dataIndex: 'status',
+          scopedSlots: { customRender: 'status' },
+          align: 'center'
+        }
+      ],
+      dataJob: [],
       dataList: [{ key: 1, VIDEO_HEAD: '', VIDEO_PART: [], VIDEO_TAIL: '' }],
       inputVisible: false,
       inputValue: '',
@@ -595,6 +702,7 @@ export default {
       show: true,
       visible: false,
       visibleDetail: false,
+      visiblePublish: false,
       activeKey: 'video',
       active: 'VIDEO_HEAD',
       examinelList: [
@@ -602,6 +710,7 @@ export default {
         { value: 'VIDEO_PART', tab: '片段' },
         { value: 'VIDEO_TAIL', tab: '片尾' },
         { value: 'join', tab: '视频拼接' },
+        { value: 'job', tab: '任务列表' },
         { value: 'success', tab: '成品' }
       ],
       // 表头
@@ -739,6 +848,7 @@ export default {
       this.setDir()
     },
     joinMatemal() {
+      console.log(this.dataList)
       var data = this.dataList.filter(item => {
         return item.VIDEO_PART.length > 0
       })
@@ -747,13 +857,15 @@ export default {
         //    {"startPart":"","endPart":"","parts":["",""]}
         var params = this.dataList.map(item => {
           return {
-            startPart: item.VIDEO_HEAD,
-            parts: item.VIDEO_PART,
-            endPart: item.VIDEO_TAIL
+            startPart: item.VIDEO_HEAD.id,
+            parts: item.VIDEO_PART.map(item => {
+              return item.id
+            }),
+            endPart: item.VIDEO_TAIL.id
           }
         })
-        // params = qs.stringify({ videoMergeList: params })
-        postAction('/ctop/materialpart/merge', { videoMergeList: params }).then(res => {
+        // var paramsString = qs.stringify({ videoMergeList: params })
+        postAction('/ctop/materialpart/merge', params).then(res => {
           console.log(res)
         })
       } else {
@@ -765,6 +877,9 @@ export default {
       console.log(this.defaultDir)
       this.setDir()
     },
+    dirVideoGetPublish() {
+      this.visiblePublish = true
+    },
     setDir() {
       let date = new Date()
       let y = date.getFullYear()
@@ -844,8 +959,7 @@ export default {
       this.onChangeCheck(this.checkArr)
     },
     searchRe() {
-      this.queryParam.projectId = ''
-      this.queryParam.createTime = ''
+      this.queryParam = { projectId: '', createTime: '' }
       this.loadData()
     },
     getList(value) {
@@ -937,6 +1051,11 @@ export default {
         this.detail = res
       })
     },
+    showDetailElse(item) {
+      this.visibleDetail = true
+      this.showUrl = item.videoUrl
+      this.id = item.id
+    },
     okEditShow(item, editStatus) {
       if (editStatus == '2') {
         var params = {}
@@ -1026,6 +1145,27 @@ export default {
         })
       }
     },
+    handleOkPublich() {
+      console.log(this.checkArr)
+      this.form.validateFieldsAndScroll((err, values) => {
+        console.log(values)
+        if (!err) {
+          var params = {}
+          params.materialIds = this.checkArr
+          params.projectId = values.projectId
+          postAction('/ctop/materialInfo/batchEdit', params).then(res => {
+            if (res.success) {
+              this.visiblePublish = false
+            } else {
+              that.$message.error(res.message)
+            }
+          })
+        }
+      })
+    },
+    closePublish() {
+      this.visiblePublish = false
+    },
     handleOk() {
       this.form.validateFieldsAndScroll((err, values) => {
         if (err) {
@@ -1094,14 +1234,30 @@ export default {
     callbackTwo(key) {
       this.checkArr = []
 
-      this.queryParam.type = key
-      this.loadData()
-      if (key == 'VIDEO_HEAD') {
-        this.checkArr[0] = this.joinVideo.head
-      } else if (key == 'VIDEO_TAIL') {
-        this.checkArr[0] = this.joinVideo.foot
-      } else if (key == 'VIDEO_PART') {
-        this.checkArr = this.joinVideo.content
+      //   if (key == 'VIDEO_HEAD') {
+      //     this.checkArr[0] = this.joinVideo.head
+      //   } else if (key == 'VIDEO_TAIL') {
+      //     this.checkArr[0] = this.joinVideo.foot
+      //   } else if (key == 'VIDEO_PART') {
+      //     this.checkArr = this.joinVideo.content
+      //   } else
+      if (key == 'job') {
+        this.queryParam.type = ''
+        this.queryParam.jobId = ''
+        this.queryParam.status = ''
+        this.url.list = '/ctop/videoMergeTask/list'
+        this.loadData()
+      } else if (key == 'success') {
+        this.queryParam.type = ''
+        this.queryParam.status = 'TranscodeSuccess'
+        // this.queryParam.jobId = '8ed27f6a9e7b456db0dde2ac4081e6c9'
+        // this.url.list = '/ctop/videoPart/list'
+        this.url.list = '/ctop/videoMergeTask/list'
+        this.loadData()
+      } else {
+        this.url.list = '/ctop/materialInfo/list'
+        this.queryParam.type = key
+        this.loadData()
       }
       if (this.form.getFieldValue('projectId')) {
         this.form.setFieldsValue({ projectId: '' })

+ 2 - 2
src/views/modules/material/materialList.vue

@@ -374,7 +374,7 @@ a {
             @loaded="overUpload"
           ></upload-to-ali>
         </a-form-item>
-        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="水印素材上传">
+        <!-- <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="水印素材上传">
           <upload-to-ali
             v-model="watermarkUrl.url"
             :customDomain="customDomain"
@@ -390,7 +390,7 @@ a {
             :dir="activeKey == 'image' ? dirImg : dirVideo"
             @loaded="overUpload"
           ></upload-to-ali>
-        </a-form-item>
+        </a-form-item> -->
 
         <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" :label="role.roleName">
           <span>{{ userInfo().realname }}</span>

+ 129 - 136
src/views/modules/material/videoMaterial.vue

@@ -395,23 +395,6 @@ a {
             @loaded="overUpload"
           ></upload-to-ali>
         </a-form-item>
-        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="水印素材上传">
-          <upload-to-ali
-            v-model="watermarkUrl.url"
-            :customDomain="customDomain"
-            preview
-            :region="region"
-            :bucket="bucket"
-            :accept="acceptVideo"
-            :max="10"
-            :size="1024000"
-            :accessKeyId="accessKeyId"
-            :accessKeySecret="accessKeySecret"
-            :before-upload="fileWater"
-            :dir="dirVideo"
-            @loaded="overUpload"
-          ></upload-to-ali>
-        </a-form-item>
         <div>
           <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="策划" v-if="activeKey == 'video'">
             <a-select
@@ -512,126 +495,133 @@ a {
         </div>
         <div style="flex:3;padding:10px;box-sizing:border-box;">
           <a-form v-if="detail" class="detail">
-            <a-form-item
-              label="视频时长"
-              :label-col="{ span: 6 }"
-              :wrapper-col="{ span: 18 }"
-              v-if="activeKey == 'video'"
-            >
-              {{ detail.parameter.second }}秒
-            </a-form-item>
-            <a-form-item label="尺寸" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
-              {{ detail.parameter.width }}*{{ detail.parameter.height }}
-            </a-form-item>
-            <a-form-item label="大小" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
-              {{ detail.parameter.size }}
-            </a-form-item>
-            <a-form-item label="策划" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
-              {{ detail.ascription.planName }}
-            </a-form-item>
-            <a-form-item label="拍摄" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
-              {{ detail.ascription.shotName }}
-            </a-form-item>
-            <a-form-item
-              label="剪辑"
-              :label-col="{ span: 6 }"
-              :wrapper-col="{ span: 18 }"
-              v-if="detail.ascription.clipName"
-            >
-              {{ detail.ascription.clipName }}
-            </a-form-item>
-            <a-form-item label="标签" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
-              <a-tag v-for="(item, index) of detail.tag" :key="index">{{ item }}</a-tag>
-            </a-form-item>
-            <a-form-item label="水印素材下载" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="name">
-              <a-button type="primary" @click="downloadByBlob" v-if="showUrlWater">下载</a-button>
-              <span v-else>水印素材生成中......</span>
-            </a-form-item>
-            <a-form-item label="水印素材链接" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="showUrlWater">
-              <a-input v-model="showUrlWater" type="text" readonly/>
-            </a-form-item>
-            <a-form-item label="生成水印素材" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
-              <a-select :defaultValue="1" style="width:50%" v-model="size">
-                <a-select-option :value="item.id" :key="item.id" v-for="item of sizeType">{{
-                  item.name
-                }}</a-select-option>
-              </a-select>
-              <a-button type="primary" @click="getWater">生成</a-button>
-            </a-form-item>
-            <a-form-item label="审核人" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="active == '2'">
-              {{ detail.auditorName }}
-            </a-form-item>
-            <a-form-item label="广告语" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="active == '1'">
-              {{ creativeCopywriter ? creativeCopywriter : '无广告语' }}
-            </a-form-item>
-            <a-form-item label="驳回原因" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="active == '2'">
-              {{ refuseReason ? refuseReason : '无原因' }}
-            </a-form-item>
-            <a-form-item label="截图" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="active == '2'">
-              <upload-to-ali
-                v-if="refuseFile"
-                disabled
-                v-model="refuseFile"
-                :customDomain="customDomain"
-                multiple
-                preview
-                :region="region"
-                :bucket="bucket"
-                :accept="acceptImage"
-                :max="10"
-                :size="1024000"
-                :accessKeyId="accessKeyId"
-                :accessKeySecret="accessKeySecret"
-                :dir="dirImg"
-              ></upload-to-ali>
-              <div v-else>无截图</div>
-            </a-form-item>
-            <a-form-item
-              label="审核"
-              :label-col="{ span: 6 }"
-              :wrapper-col="{ span: 18 }"
-              v-if="
-                active != '2' &&
-                  (role.roleCode == 'operator' ||
-                    role.roleCode == 'kuaishouOperationManager' ||
-                    role.roleCode == 'admin')
-              "
-            >
-              <a-button type="primary" @click="edit(null, '0', '1')" v-if="active == '0'" style="margin-right:10px"
-                >通过审核</a-button
+            <div v-if="detail.parameter.id">
+              <a-form-item
+                label="视频时长"
+                :label-col="{ span: 6 }"
+                :wrapper-col="{ span: 18 }"
+                v-if="activeKey == 'video'"
               >
-              <a-popconfirm @confirm="okEdit">
-                <div slot="title">
-                  <div>
-                    驳回原因:
-                    <a-textarea
-                      placeholder="请输入原因"
-                      v-model="refuseReason"
-                      :autosize="{ minRows: 3, maxRows: 10 }"
-                    />
-                  </div>
-                  <div>
-                    截图:
-                    <upload-to-ali
-                      v-model="refuseFile"
-                      :customDomain="customDomain"
-                      multiple
-                      preview
-                      :region="region"
-                      :bucket="bucket"
-                      :accept="acceptImage"
-                      :max="10"
-                      :size="1024000"
-                      :accessKeyId="accessKeyId"
-                      :accessKeySecret="accessKeySecret"
-                      :dir="dirImg"
-                    ></upload-to-ali>
+                {{ detail.parameter.second }}秒
+              </a-form-item>
+              <a-form-item label="尺寸" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
+                {{ detail.parameter.width }}*{{ detail.parameter.height }}
+              </a-form-item>
+              <a-form-item label="大小" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
+                {{ detail.parameter.size }}
+              </a-form-item>
+              <a-form-item label="策划" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
+                {{ detail.ascription.planName }}
+              </a-form-item>
+              <a-form-item label="拍摄" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
+                {{ detail.ascription.shotName }}
+              </a-form-item>
+              <a-form-item
+                label="剪辑"
+                :label-col="{ span: 6 }"
+                :wrapper-col="{ span: 18 }"
+                v-if="detail.ascription.clipName"
+              >
+                {{ detail.ascription.clipName }}
+              </a-form-item>
+              <a-form-item label="标签" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
+                <a-tag v-for="(item, index) of detail.tag" :key="index">{{ item }}</a-tag>
+              </a-form-item>
+              <a-form-item label="水印素材下载" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="name">
+                <a-button type="primary" @click="downloadByBlob" v-if="showUrlWater">下载</a-button>
+                <span v-else>水印素材生成中......</span>
+              </a-form-item>
+              <a-form-item
+                label="水印素材链接"
+                :label-col="{ span: 6 }"
+                :wrapper-col="{ span: 18 }"
+                v-if="showUrlWater"
+              >
+                <a-input v-model="showUrlWater" type="text" readonly />
+              </a-form-item>
+              <a-form-item label="生成水印素材" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
+                <a-select :defaultValue="1" style="width:50%" v-model="size">
+                  <a-select-option :value="item.id" :key="item.id" v-for="item of sizeType">{{
+                    item.name
+                  }}</a-select-option>
+                </a-select>
+                <a-button type="primary" @click="getWater">生成</a-button>
+              </a-form-item>
+              <a-form-item label="审核人" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="active == '2'">
+                {{ detail.auditorName }}
+              </a-form-item>
+              <a-form-item label="广告语" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="active == '1'">
+                {{ creativeCopywriter ? creativeCopywriter : '无广告语' }}
+              </a-form-item>
+              <a-form-item label="驳回原因" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="active == '2'">
+                {{ refuseReason ? refuseReason : '无原因' }}
+              </a-form-item>
+              <a-form-item label="截图" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" v-if="active == '2'">
+                <upload-to-ali
+                  v-if="refuseFile"
+                  disabled
+                  v-model="refuseFile"
+                  :customDomain="customDomain"
+                  multiple
+                  preview
+                  :region="region"
+                  :bucket="bucket"
+                  :accept="acceptImage"
+                  :max="10"
+                  :size="1024000"
+                  :accessKeyId="accessKeyId"
+                  :accessKeySecret="accessKeySecret"
+                  :dir="dirImg"
+                ></upload-to-ali>
+                <div v-else>无截图</div>
+              </a-form-item>
+              <a-form-item
+                label="审核"
+                :label-col="{ span: 6 }"
+                :wrapper-col="{ span: 18 }"
+                v-if="
+                  active != '2' &&
+                    (role.roleCode == 'operator' ||
+                      role.roleCode == 'kuaishouOperationManager' ||
+                      role.roleCode == 'admin')
+                "
+              >
+                <a-button type="primary" @click="edit(null, '0', '1')" v-if="active == '0'" style="margin-right:10px"
+                  >通过审核</a-button
+                >
+                <a-popconfirm @confirm="okEdit">
+                  <div slot="title">
+                    <div>
+                      驳回原因:
+                      <a-textarea
+                        placeholder="请输入原因"
+                        v-model="refuseReason"
+                        :autosize="{ minRows: 3, maxRows: 10 }"
+                      />
+                    </div>
+                    <div>
+                      截图:
+                      <upload-to-ali
+                        v-model="refuseFile"
+                        :customDomain="customDomain"
+                        multiple
+                        preview
+                        :region="region"
+                        :bucket="bucket"
+                        :accept="acceptImage"
+                        :max="10"
+                        :size="1024000"
+                        :accessKeyId="accessKeyId"
+                        :accessKeySecret="accessKeySecret"
+                        :dir="dirImg"
+                      ></upload-to-ali>
+                    </div>
                   </div>
-                </div>
-                <a-button type="primary">驳回</a-button>
-                <!-- @click="edit(null, '0', '2')" -->
-              </a-popconfirm>
-            </a-form-item>
+                  <a-button type="primary">驳回</a-button>
+                  <!-- @click="edit(null, '0', '2')" -->
+                </a-popconfirm>
+              </a-form-item>
+            </div>
           </a-form>
         </div>
       </div>
@@ -652,7 +642,7 @@ import { mapGetters } from 'vuex'
 import moment from 'moment'
 
 import BMF from 'browser-md5-file'
-
+import { stopOtherVideo, closeAllVideoFun } from '@/utils/videoControl'
 import accountCheck from './accountCheck'
 export default {
   name: 'YardList',
@@ -782,6 +772,9 @@ export default {
       }
     })
   },
+  updated() {
+    stopOtherVideo()
+  },
   watch: {
     $route: function(n, o) {
       if (n.path == '/modules/material/videoMaterial') {

+ 6 - 0
src/views/system/UserList.vue

@@ -12,6 +12,12 @@
             </a-form-item>
           </a-col>
 
+
+          <a-col :md="6" :sm="12">
+            <a-form-item label="姓名">
+              <a-input placeholder="请输入姓名查询" v-model="queryParam.realname"></a-input>
+            </a-form-item>
+          </a-col>
           <a-col :md="6" :sm="8">
             <a-form-item label="性别">
               <a-select v-model="queryParam.sex" placeholder="请选择性别查询">

+ 3 - 3
vue.config.js

@@ -65,11 +65,11 @@ module.exports = {
        },*/
       '/jeecg-boot': {
         // target: 'http://39.97.120.42:8080', //请求本地 需要jeecg-boot后台项目  生产环境
-        target: 'http://39.106.184.70:8080', //请求本地 需要jeecg-boot后台项目
-        // target: 'http://192.168.2.130:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
+        // target: 'http://39.106.184.70:8080', //请求本地 需要jeecg-boot后台项目
+        target: 'http://192.168.2.130:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
         // target: 'http://192.168.2.133:8080', //请求本地 需要jeecg-boot后台项目  英豪
         // target: 'http://192.168.2.132:8080', //请求本地 需要jeecg-boot后台项目
-        // target: 'http://192.168.2.185:8080', //请求本地 需要jeecg-boot后台项目  祚云
+        // target: 'http://192.168.2.174:8080', //请求本地 需要jeecg-boot后台项目  祚云
         ws: false,
         changeOrigin: true
       },