Explorar o código

Merge branch 'feature/work-test'

朱鑫波 %!s(int64=3) %!d(string=hai) anos
pai
achega
4aa1d84a1f

+ 2 - 0
.env.development

@@ -15,3 +15,5 @@ VUE_APP_BASE_SCRIPT_URL = http://192.168.0.195:31013
 
 #素材大盘相关接口
 VUE_APP_BASE_MATERIAL_URL = http://192.168.0.195:9999/material
+# 字安接口 http://192.168.1.43:9999
+# 测试环境 http://192.168.0.195:9999

+ 1 - 1
.env.production

@@ -14,7 +14,7 @@ VUE_APP_BASE_SCRIPT_URL = http://114.117.193.186:31013
 
 
 #素材大盘相关接口
-VUE_APP_BASE_MATERIAL_URL = http://api.tjyourong.com.cn/material
+VUE_APP_BASE_MATERIAL_URL = http://192.168.0.195:9999/material
 # 泽宇 http://192.168.1.134:9999
 # 测试 http://192.168.0.195:9999
 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 20041
package-lock.json


+ 1 - 0
package.json

@@ -29,6 +29,7 @@
     "cos-js-sdk-v5": "^0.5.26",
     "dayjs": "^1.8.0",
     "echarts": "^4.9.0",
+    "echarts-gl": "^1.1.2",
     "element-ui": "^2.13.0",
     "enquire.js": "^2.1.6",
     "html2canvas": "^1.0.0-rc.3",

BIN=BIN
src/assets/img/head_bg.png


+ 6 - 0
src/assets/img/u2.svg

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="739px" height="357px" xmlns="http://www.w3.org/2000/svg">
+  <g transform="matrix(1 0 0 1 -590 -298 )">
+    <path d="M 959.5 298  C 1166.42 298  1329 376.54  1329 476.5  C 1329 576.46  1166.42 655  959.5 655  C 752.58 655  590 576.46  590 476.5  C 590 376.54  752.58 298  959.5 298  Z " fill-rule="nonzero" fill="#6633ff" stroke="none" fill-opacity="0.0980392156862745" />
+  </g>
+</svg>

+ 6 - 0
src/assets/img/u3.svg

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="639px" height="309px" xmlns="http://www.w3.org/2000/svg">
+  <g transform="matrix(1 0 0 1 -640 -302 )">
+    <path d="M 959.5 302  C 1138.42 302  1279 369.98  1279 456.5  C 1279 543.02  1138.42 611  959.5 611  C 780.58 611  640 543.02  640 456.5  C 640 369.98  780.58 302  959.5 302  Z " fill-rule="nonzero" fill="#6633ff" stroke="none" fill-opacity="0.0980392156862745" />
+  </g>
+</svg>

+ 6 - 0
src/assets/img/u4.svg

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="480px" height="232px" xmlns="http://www.w3.org/2000/svg">
+  <g transform="matrix(1 0 0 1 -720 -330 )">
+    <path d="M 960 330  C 1094.4 330  1200 381.04  1200 446  C 1200 510.96  1094.4 562  960 562  C 825.6 562  720 510.96  720 446  C 720 381.04  825.6 330  960 330  Z " fill-rule="nonzero" fill="#6633ff" stroke="none" fill-opacity="0.0980392156862745" />
+  </g>
+</svg>

BIN=BIN
src/assets/img/wangge2.png


+ 6 - 5
src/components/jeecg/JTreeSelect.vue

@@ -154,11 +154,12 @@
             if(res.success){
               for(let i of res.result){
                 i.value = i.key
-                if(i.leaf==false){
-                  i.isLeaf=false
-                }else if(i.leaf==true){
-                  i.isLeaf=true
-                }
+                i.isLeaf=true
+                // if(i.leaf==false){
+                //   i.isLeaf=false
+                // }else if(i.leaf==true){
+                //   i.isLeaf=true
+                // }
               }
               this.addChildren(pid,res.result,this.treeData)
               this.treeData = [...this.treeData]

+ 2 - 2
src/components/page/GlobalLayout.vue

@@ -679,8 +679,8 @@
         }
 
         .ant-form-item-control {
-          height: 32px;
-          line-height: 32px;
+          // height: 32px;
+          // line-height: 32px;
         }
       }
     }

+ 5 - 0
src/config/router.config.js

@@ -115,5 +115,10 @@ export const constantRouterMap = [
     name: 'errorPage',
     component: () => import(/* webpackChunkName: "fail" */ '@/views/errorPage')
   },
+  {
+    path: '/boss-data-kanban',
+    name: 'bossDataKanban',
+    component: () => import(/* webpackChunkName: "fail" */ '@/views/bossDataKanban/index')
+  },
 
 ]

+ 7 - 0
src/mixins/videoMaterialMixin.js

@@ -117,6 +117,13 @@
        if(params.stateDate){
          params.stateDate = moment(params.stateDate).format('YYYY-MM-DD')
        }
+       if(params.createTimeDate&&params.createTimeDate.length>0){
+        // params.createTime = moment(params.createTime).format('YYYY-MM-DD')
+        params.startTime = moment(params.createTimeDate[0]).format('YYYY-MM-DD')
+        params.endTime = moment(params.createTimeDate[1]).format('YYYY-MM-DD')
+        params.createTimeDate = null
+      }
+       
        // if(params.endDate){
        //   params.endDate = moment(params.endDate).format('YYYY-MM-DD')
        // }

+ 41 - 6
src/permission.js

@@ -8,27 +8,35 @@ import { ACCESS_TOKEN } from '@/store/mutation-types'
 import { generateIndexRouter } from "@/utils/util"
 import warterMark from './warterMark'
 import { mapGetters, mapMutations, mapActions } from 'vuex'
+import { cmpPos } from 'codemirror'
 NProgress.configure({ showSpinner: false }) // NProgress Configuration
 
 
-const whiteList = ['/user/login', '/user/register', '/user/register-result', '/user/alteration', '/user/transfer-local', '/errorPage', '/user/new-batch', '/user/lookPreview', 'http://192.168.0.111:8088/jeecg-boot/sys/feishu/url', '/user/FStransfer','/creat-config','/create-launch'] // no redirect whitelist
+const whiteList = ['/user/login', '/user/register', '/user/register-result', '/user/alteration', '/user/transfer-local', '/errorPage', '/user/new-batch', '/user/lookPreview', 'http://192.168.0.111:8088/jeecg-boot/sys/feishu/url', '/user/FStransfer', '/creat-config', '/create-launch', '/boss-data-kanban'] // no redirect whitelist
 
 router.beforeEach((to, from, next) => {
   NProgress.start() // start progress bar
   //if (whiteList.indexOf(to.path) !== -1) {
-    // 在免登录白名单,直接进入
-   // next()
- //}
+  // 在免登录白名单,直接进入
+  // next()
+  //}
+  console.log(to,from)
   if (Vue.ls.get(ACCESS_TOKEN)) {
+    console.log(store.getters.userInfo.id);
     /* has token */
-
+   
     if (to.path === '/user/login') {
-      warterMark.out()
+      warterMark.out();
+     
       next({ path: '/dashboard/workplace' })
+     
       NProgress.done()
     } else {
+
       // warterMark.set(store.getters.userInfo.roleName)
+
       if (store.getters.permissionList.length === 0) {
+       
         store.dispatch('GetPermissionList').then(res => {
           const menuData = res.result.menu;
           localStorage.setItem("roleCode", res.result.roleCode)
@@ -48,6 +56,19 @@ router.beforeEach((to, from, next) => {
               next({ ...to, replace: true })
             } else {
               // 跳转到目的路由
+              if( to.path === '/dashboard/analysis' && from.path == '/'){
+                if (store.getters.userInfo.id == '4aba62011120ac565c7f2b9f8f4aa96b' || store.getters.userInfo.id == 'e9ca23d68d884d4ebb19d07889727dae') {
+                  const a = document.createElement('a');
+                                      document.body.appendChild(a);
+                                      a.style.display = 'none';
+                                      a.href = 'http://192.168.0.195:9001/boss-data-kanban';
+                                      a.target = '_blank'
+                                      a.click();
+                                      document.body.removeChild(a);
+                  // let tempPage = window.open('', '_blank');
+                  // tempPage.location="/boss-data-kanban";
+                }
+              }
               next({ path: redirect })
             }
           })
@@ -66,6 +87,20 @@ router.beforeEach((to, from, next) => {
         warterMark.set(store.getters.userInfo.realname)
         next()
       }
+      if( to.path === '/dashboard/analysis' && from.path == '/'){
+        if (store.getters.userInfo.id == '4aba62011120ac565c7f2b9f8f4aa96b' || store.getters.userInfo.id == 'e9ca23d68d884d4ebb19d07889727dae') {
+          const a = document.createElement('a');
+                              document.body.appendChild(a);
+                              a.style.display = 'none';
+                              a.href = 'http://192.168.0.195:9001/boss-data-kanban';
+                              a.target = '_blank'
+                              a.click();
+                              document.body.removeChild(a);
+          // let tempPage = window.open('', '_blank');
+          // tempPage.location="/boss-data-kanban";
+          return
+        }
+      }
     }
   } else {
     if (whiteList.indexOf(to.path) !== -1) {

+ 2 - 2
src/utils/request.js

@@ -21,9 +21,9 @@ else if (process.env.NODE_ENV === 'debug') {
 else if (process.env.NODE_ENV === 'production') {
 	// axios.defaults.baseURL = 'http://apipre.tjyourong.com.cn/jeecg-boot'; // 预生产
 	// axios.defaults.baseURL = 'http://gateway.tjyourong.com.cn/jeecg-boot';//测试
-	axios.defaults.baseURL = 'http://api.tjyourong.com.cn/jeecg-boot'; // 生产环境
+	// axios.defaults.baseURL = 'http://api.tjyourong.com.cn/jeecg-boot'; // 生产环境
 	// axios.defaults.baseURL = 'http://gateway.tjyourong.com.cn/jeecg-boot'; // 测试环境
-	// axios.defaults.baseURL = 'http://192.168.0.195:9999/jeecg-boot'; // 测试环境
+	axios.defaults.baseURL = 'http://192.168.0.195:9999/jeecg-boot'; // 测试环境
 	// axios.defaults.baseURL = 'http://192.168.1.134:9999/jeecg-boot'; // 泽宇环境
 
 }

+ 278 - 0
src/views/bossDataKanban/chart.js

@@ -0,0 +1,278 @@
+/**
+ * 绘制3d图
+ * @param pieData 总数据
+ * @param internalDiameterRatio:透明的空心占比
+ * @param distance 视角到主体的距离
+ * @param alpha 旋转角度
+ * @param pieHeight 立体的高度
+ * @param opacity 饼或者环的透明度
+ */
+ const getPie3D = (pieData, internalDiameterRatio, distance, alpha, pieHeight, opacity = 1) => {
+    const series = []
+    let sumValue = 0
+    let startValue = 0
+    let endValue = 0
+    let legendData = []
+    let legendBfb = []
+    const k = 1 - internalDiameterRatio
+    pieData.sort((a, b) => {
+      return b.value - a.value
+    })
+    // 为每一个饼图数据,生成一个 series-surface 配置
+    for (let i = 0; i < pieData.length; i++) {
+      sumValue += pieData[i].value
+      const seriesItem = {
+        name:
+            typeof pieData[i].name === 'undefined'
+              ? `series${i}`
+              : pieData[i].name,
+        type: 'surface',
+        parametric: true,
+        wireframe: {
+          show: false
+        },
+        pieData: pieData[i],
+        pieStatus: {
+          selected: false,
+          hovered: false,
+          k: k
+        },
+        center: ['10%', '50%']
+      }
+      if (typeof pieData[i].itemStyle !== 'undefined') {
+        const itemStyle = {}
+        itemStyle.color =
+            typeof pieData[i].itemStyle.color !== 'undefined'
+              ? pieData[i].itemStyle.color
+              : opacity
+        itemStyle.opacity =
+            typeof pieData[i].itemStyle.opacity !== 'undefined'
+              ? pieData[i].itemStyle.opacity
+              : opacity
+        seriesItem.itemStyle = itemStyle
+      }
+      series.push(seriesItem)
+    }
+   
+    // 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数,
+    // 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。
+    legendData = []
+    legendBfb = []
+    for (let i = 0; i < series.length; i++) {
+      endValue = startValue + series[i].pieData.value
+      series[i].pieData.startRatio = startValue / sumValue
+      series[i].pieData.endRatio = endValue / sumValue
+      series[i].parametricEquation = getParametricEquation(
+        series[i].pieData.startRatio,
+        series[i].pieData.endRatio,
+        false,
+        false,
+        k,
+        series[i].pieData.value
+      )
+      startValue = endValue
+      const bfb = fomatFloat(series[i].pieData.value / sumValue, 4)
+      legendData.push({
+        name: series[i].name,
+        value: bfb
+      })
+      legendBfb.push({
+        name: series[i].name,
+        value: bfb
+      })
+    }
+    const boxHeight = getHeight3D(series, pieHeight) // 通过pieHeight设定3d饼/环的高度,单位是px
+    // 准备待返回的配置项,把准备好的 legendData、series 传入。
+    const option = {
+      legend: {
+        show: false,
+        data: legendData,
+        orient: 'vertical',
+        left: 10,
+        top: 10,
+        itemGap: 10,
+        textStyle: {
+          color: '#A1E2FF'
+        },
+        icon: 'circle',
+        formatter: function (param) {
+          const item = legendBfb.filter(item => item.name === param)[0]
+          const bfs = fomatFloat(item.value * 100, 2) + '%'
+          return `${item.name}  ${bfs}`
+        }
+      },
+      labelLine: {
+        show: true,
+        lineStyle: {
+          color: '#fff'
+        }
+      },
+      label: {
+        show: true,
+        position: 'outside',
+        formatter: '{b} \n{c} {d}%'
+      },
+    //   tooltip: {
+    //     backgroundColor: '#033b77',
+    //     borderColor: '#21f2c4',
+    //     textStyle: {
+    //       color: '#fff',
+    //       fontSize: 13
+    //     },
+    //     formatter: params => {
+    //       if (
+    //         params.seriesName !== 'mouseoutSeries' &&
+    //           params.seriesName !== 'pie2d'
+    //       ) {
+    //         const bfb = (
+    //           (option.series[params.seriesIndex].pieData.endRatio -
+    //               option.series[params.seriesIndex].pieData.startRatio) *
+    //             100
+    //         ).toFixed(2)
+    //         return (
+    //           `${params.seriesName}<br/>` +
+    //           `<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${params.color};"></span>` +
+    //           `${bfb}%`
+    //         )
+    //       }
+    //     }
+    //   },
+      xAxis3D: {
+        min: -1,
+        max: 1
+      },
+      yAxis3D: {
+        min: -1,
+        max: 1
+      },
+      zAxis3D: {
+        min: -1,
+        max: 1
+      },
+      grid3D: {
+        show: false,
+        width:'80%',
+        height:'80%',
+        left:'10%',
+        top:'10%',
+        boxHeight: boxHeight, // 圆环的高度
+        viewControl: {
+          // 3d效果可以放大、旋转等
+          alpha:40, // 角度
+          distance:400, // 调整视角到主体的距离,类似调整zoom
+          rotateSensitivity: 0, // 设置为0无法旋转
+          zoomSensitivity: 0, // 设置为0无法缩放
+          panSensitivity: 0, // 设置为0无法平移
+          autoRotate: false // 自动旋转
+        }
+      },
+      series: series
+    }
+    return option
+  }
+   
+  /**
+   * 生成扇形的曲面参数方程,用于 series-surface.parametricEquation
+   */
+  const getParametricEquation = (startRatio, endRatio, isSelected, isHovered, k, h) => {
+    // 计算
+    const midRatio = (startRatio + endRatio) / 2
+    const startRadian = startRatio * Math.PI * 2
+    const endRadian = endRatio * Math.PI * 2
+    const midRadian = midRatio * Math.PI * 2
+    // 如果只有一个扇形,则不实现选中效果。
+    if (startRatio === 0 && endRatio === 1) {
+      isSelected = false
+    }
+    // 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3)
+    k = typeof k !== 'undefined' ? k : 1 / 3
+    // 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0)
+    const offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0
+    const offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0
+    // 计算高亮效果的放大比例(未高亮,则比例为 1)
+    const hoverRate = isHovered ? 1.05 : 1
+    // 返回曲面参数方程
+    return {
+      u: {
+        min: -Math.PI,
+        max: Math.PI * 3,
+        step: Math.PI / 32
+      },
+      v: {
+        min: 0,
+        max: Math.PI * 2,
+        step: Math.PI / 20
+      },
+      x: function (u, v) {
+        if (u < startRadian) {
+          return (
+            offsetX +
+            Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate
+          )
+        }
+        if (u > endRadian) {
+          return (
+            offsetX + Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate
+          )
+        }
+        return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate
+      },
+      y: function (u, v) {
+        if (u < startRadian) {
+          return (
+            offsetY +
+            Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate
+          )
+        }
+        if (u > endRadian) {
+          return (
+            offsetY + Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate
+          )
+        }
+        return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate
+      },
+      z: function (u, v) {
+        if (u < -Math.PI * 0.5) {
+          return Math.sin(u)
+        }
+        if (u > Math.PI * 2.5) {
+          return Math.sin(u) * h * 0.1
+        }
+        return Math.sin(v) > 0 ? 1 * h * 0.1 : -1
+      }
+    }
+  }
+   
+  /**
+   * 获取3d丙图的最高扇区的高度
+   */
+  const getHeight3D = (series, height) => {
+    series.sort((a, b) => {
+      return b.pieData.value - a.pieData.value
+    })
+    return (height * 25) / series[0].pieData.value
+  }
+   
+  /**
+   * 格式化浮点数
+   */
+  const fomatFloat = (num, n) => {
+    let f = parseFloat(num)
+    if (isNaN(f)) {
+      return false
+    }
+    f = Math.round(num * Math.pow(10, n)) / Math.pow(10, n) // n 幂
+    let s = f.toString()
+    let rs = s.indexOf('.')
+    // 判定如果是整数,增加小数点再补0
+    if (rs < 0) {
+      rs = s.length
+      s += '.'
+    }
+    while (s.length <= rs + n) {
+      s += '0'
+    }
+    return s
+  }
+   
+  export { getPie3D, getParametricEquation }

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1751 - 0
src/views/bossDataKanban/index.vue


+ 25 - 2
src/views/dashboard/Analysis.vue

@@ -70,6 +70,8 @@
 </style>
 <template>
   <div class="page-header-index-wide analysis">
+    <a-button  type='primary' style="position:absolute;z-index: 99;right: 28px;top: 133px;" @click="dataKanBan"
+    v-if="userInfoId">数据看板</a-button>
     <div v-if="roleCode == 'operator'">
       <a-row :gutter="24">
         <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
@@ -220,7 +222,7 @@
 
     <Workbench v-else-if="roleCode == 'clip'" />
     <Workbench v-else-if="roleCode == 'plane'" />
-
+    
     <a-tabs default-active-key="1" v-else-if="roleCode == 'admin'" class="only-there">
       <a-tab-pane key="1" tab="快手">
         <statistics />
@@ -228,7 +230,6 @@
       <a-tab-pane key="2" tab="头条">
         <newHome />
       </a-tab-pane>
-
     </a-tabs>
     <!-- 更新公告 -->
     <a-modal v-model="visible" title="" @ok="handleOk" :closable='false' :footer="null" id="updateInfo">
@@ -282,6 +283,7 @@
   import LineChartMultid from '@/components/chart/LineChartMultid'
   import HeadInfo from '@/components/tools/HeadInfo.vue'
   import { getAction, postAction, downFile, downFilePost } from '@/api/manage';
+  import { mapActions, mapGetters } from 'vuex'
   import Trend from '@/components/Trend'
   import {
     getLoginfo,
@@ -336,6 +338,7 @@
         visible:false,//更新通知消息提示框
         updateTime:['2021-03-03'],
         versionId:0,//存储版本号 判断通知什么时候显示
+        userInfoId:false,
       }
     },
     created() {
@@ -344,7 +347,26 @@
       }, 1000)
       this.initLogInfo()
     },
+
     methods: {
+      ...mapGetters(['userInfo']),
+      getUserId(){
+        if (this.userInfo().id == '4aba62011120ac565c7f2b9f8f4aa96b' || this.userInfo().id == 'e9ca23d68d884d4ebb19d07889727dae') {
+          this.userInfoId = true;
+        }else{
+          this.userInfoId = false;
+        }
+      },
+      // 跳转数据看板
+      dataKanBan(){
+                    const a = document.createElement('a');
+                    document.body.appendChild(a);
+                    a.style.display = 'none';
+                    a.href = 'http://192.168.0.195:9001/boss-data-kanban';
+                    a.target = '_blank'
+                    a.click();
+                    document.body.removeChild(a);
+      },
       initLogInfo() {
         getLoginfo(null).then(res => {
           if (res.success) {
@@ -389,6 +411,7 @@
             }
            
         })
+        this.getUserId();
     },
   }
 </script>

+ 1 - 0
src/views/modules/account-config/account-config.vue

@@ -627,6 +627,7 @@ export default {
             });
         },
         handleQueryList(event) {
+            this.tablePag.page = 1;
             event.preventDefault();
             this.controlLoading = true;
             this.handleInitTable();

+ 3 - 1
src/views/modules/autoLaunch/trusteeship/creatMaterialTest.vue

@@ -62,7 +62,9 @@
                                                     { label: '优选广告位', value: 1 },
                                                     { label: '上下滑大屏广告', value: 6 },
 
-                                                    { label: '快手联盟优选', value: 10 }
+                                                    { label: '快手联盟优选', value: 10 },
+
+                                                    { label: '激励视频广告', value: 24 }
                                                 ]"
                                                 v-decorator="[
                                                     'sceneIds',

+ 342 - 0
src/views/modules/material/comment/uploadFilePopilar.vue

@@ -0,0 +1,342 @@
+<style></style>
+<style lang="scss" scoped></style>
+<template>
+    <div class="upload-file">
+        <a-upload
+            name="file"
+            :multiple="multiple"
+            list-type="picture-card"
+            class="avatar-uploader"
+            action="https://media-1301855440.cos.ap-chongqing.myqcloud.com/"
+            :before-upload="beforeUpload"
+            @change="handleChange"
+            :accept="uploadType + '/' + (uploadType == 'image' ? 'jpeg,image/jpg' : 'mp4')"
+            :file-list="fileList"
+            :remove="removeFile"
+            @preview="handlePreview"
+            :disabled="loadingElse || disabled"
+        >
+            <div v-if="fileList.length < fileCount || fileList.length < 1">
+                <a-progress v-if="loadingElse" :percent="percent" :show-info="false" />
+                <div class="ant-upload-text">点击上传</div>
+            </div>
+        </a-upload>
+        <div style="color: red" v-if="sizeCheck">
+            {{ uploadType == 'image' ? '请上传jpg格式的图片,并且大小在2m之内' : '请上传mp4格式,大小在100m之内' }}
+        </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>
+        </a-modal>
+    </div>
+</template>
+
+<script>
+import { stopOtherVideo, closeAllVideoFun } from '@/utils/videoControl' // 停止除当前外的其他视频播放,及停止所有视频播放的方法
+import { mapGetters } from 'vuex'
+import moment from 'moment'
+
+import BMF from 'browser-md5-file'
+
+import qs from 'qs'
+var COS = require('cos-js-sdk-v5')
+var cos = new COS({
+    SecretId: 'AKIDE6IpMi8fJQRCg1iuWzFajjRs43kbbets',
+    SecretKey: 'tXzuwMfplTTK3c9GFUyETilasvQfePu9',
+})
+var i = 0
+const oneKB = 1024
+
+function getBase64(file) {
+    return new Promise((resolve, reject) => {
+        const reader = new FileReader()
+        reader.readAsDataURL(file)
+        reader.onload = () => resolve(reader.result)
+        reader.onerror = (error) => reject(error)
+    })
+}
+export default {
+    name: 'upload-file',
+    components: {},
+    props: {
+        uploadType: {
+            //上传类型  值为  image/video,同时目录名称也是这样
+            type: String,
+            default() {
+                return 'image'
+            },
+        },
+        multiple: {
+            // true 可以批量上传  false 不可以
+            type: Boolean,
+            default() {
+                return true
+            },
+        },
+        fileCount: {
+            //最大上传数量
+            type: Number,
+            default() {
+                return 10
+            },
+        },
+        checkFile: {
+            //返回promise方法,判读文件是否上传过,进行上传拦截
+            type: Function,
+            default() {
+                return Promise.resolve()
+            },
+        },
+        disabled: {
+            type: Boolean,
+            default() {
+                return false
+            },
+        },
+        value: {
+            required: true,
+            default() {
+                return ''
+            },
+        },
+        size: {
+            type: Number,
+            default() {
+                if (this.sizeCheck) {
+                    if (this.uploadType == 'image') {
+                        return 2048
+                    } else {
+                        return 102400
+                    }
+                }
+            },
+        },
+        sizeCheck: {
+            type: Boolean,
+            default() {
+                return true
+            },
+        },
+        onOversize: {
+            type: Function,
+            default() {
+                alert(`请选择${this.size}KB内的文件!`)
+            },
+        },
+    },
+    data() {
+        return {
+            fileList: [],
+            loadingElse: false,
+            imageUrl: '',
+            percent: 0,
+            previewVisible: false,
+            previewImage: '',
+        }
+    },
+    filters: {},
+    computed: {},
+    mounted() {},
+    watch: {
+        //    fileListAll
+        value: {
+            immediate: true,
+            handler(n, o) {
+                this.$nextTick(() => {
+                    if (this.fileList && this.fileList.length == 0) {
+                        if (typeof n == 'object') {
+                            this.fileList = n.map((item, index) => {
+                                return {
+                                    uid: index + 1,
+                                    name: index + 1,
+                                    status: 'done',
+                                    url: item,
+                                }
+                            })
+                        } else {
+                            if (n === '') {
+                                this.fileList = []
+                            } else {
+                                this.fileList = []
+                                var data = {
+                                    uid: 1,
+                                    name: '回显',
+                                    status: 'done',
+                                    url: n,
+                                }
+                                this.fileList.push(data)
+                            }
+                        }
+                    } else {
+                        if (n.length == 0 || n == '') {
+                            this.clearAll()
+                        }
+                    }
+                })
+            },
+            deep: true,
+        },
+    },
+    methods: {
+        handleCancel() {
+            closeAllVideoFun()
+            this.previewVisible = false
+        },
+        handleChange(info) {
+            if (info.file.status === 'uploading') {
+                this.loading = true
+                return
+            }
+            if (info.file.status === 'done') {
+                // Get this url from response in real world.
+                getBase64(info.file.originFileObj, (imageUrl) => {
+                    this.imageUrl = imageUrl
+                    this.loading = false
+                })
+            }
+        },
+        removeFile(file) {
+            // console.log(file)
+            var index = this.fileList.findIndex((v) => v.uid === file.uid)
+            this.fileList.splice(index, 1)
+            this.$emit('removeUpload', file)
+        },
+        async handlePreview(file) {
+            if (!file.url && !file.preview) {
+                file.preview = await getBase64(file.originFileObj)
+            }
+            this.previewImage = file.url || file.preview
+            this.previewVisible = true
+        },
+        beforeUpload(file) {
+            this.percent = 0
+            this.loadingElse = true
+            const fileOvesize = file.size > this.size * oneKB
+            // console.log(fileOvesize)
+            if (fileOvesize && this.sizeCheck) {
+                this.onOversize()
+                this.loadingElse = false
+                return
+            } else {
+                this.checkFile(file)
+                    .then((res) => {
+                        this.cosUpload(file)
+                    })
+                    .catch(() => {
+                        this.loadingElse = false
+                    })
+                return new Promise(function (resolve, reject) {
+                    reject()
+                })
+            }
+        },
+        clearAll() {
+            this.fileList = []
+        },
+        cosUpload(file) {
+            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 = file.name.split('.')
+
+            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:
+                        '/external-videos/' +
+                        y +
+                        '' +
+                        MM +
+                        '' +
+                        d +
+                        '/' +
+                        str +
+                        '-' +
+                        timeElse +
+                        '.' +
+                        arr[arr.length - 1],
+                    /* 必须 */
+                    StorageClass: 'STANDARD',
+                    Body: file, // 上传文件对象
+                    onProgress: function (progressData) {
+                        //进度条方法
+
+                        that.percent = progressData.percent * 100
+                    },
+                    onTaskReady: function (tid) {
+                        // console.log('onTaskReady', tid);
+                    },
+                    onTaskStart: function (info) {
+                        //开始上传
+                        // console.log('onTaskStart', info);
+                    },
+                },
+                function (err, data) {
+                    if (err) {
+                        that.loadingElse = false
+                        that.$message.error('上传失败!!!' + err)
+                        return
+                    }
+                    // alert('成功')
+                    that.loadingElse = false
+                    if (that.fileList.length < that.fileCount) {
+                        that.fileList.push({
+                            uid: file.name,
+                            name: file.name,
+                            status: 'done',
+                            url: '//' + data.Location,
+                        })
+
+                        // that.$emit('overUpload', that.fileList.map(item => {
+                        //                 return item.url
+                        //               }))
+                        that.$emit('overUpload', that.fileList)
+
+                        if (that.multiple) {
+                            let urlList = that.fileList.map((item) => {
+                                return item.url
+                            })
+
+                            that.$emit('update:value', urlList)
+                        } else {
+                            that.$emit(
+                                'update:value',
+                                that.fileList.map((item) => {
+                                    return item.url
+                                })[0]
+                            )
+                        }
+                    } else {
+                        that.$message.error('上传已达上限' + that.fileCount + '张')
+                    }
+                }
+            )
+        },
+    },
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>

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

@@ -81,7 +81,7 @@ li.chouzhen.first:before {
   background: rgba(0, 0, 0, 0.5);
   border-radius: 2px;
 }
-.table-page-search-wrapper {
+.video-metarial-table {
   .el-cascader .el-input {
     cursor: pointer;
     height: 100%;
@@ -354,7 +354,7 @@ a {
 <template>
   <a-card :bordered="false" class="only-video-material-disable">
     <!-- 查询区域 -->
-    <div class="table-page-search-wrapper">
+    <div class="table-page-search-wrapper video-metarial-table">
       <a-form layout="inline" :selfUpdate="true">
         <a-row :gutter="24">
           <a-col :md="8" :sm="8">

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 3253 - 0
src/views/modules/material/videoPopular.vue


+ 16 - 1
src/views/user/Login.vue

@@ -159,7 +159,7 @@
 //import md5 from "md5"
 import api from '@/api'
 import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
-import { mapActions } from 'vuex'
+import { mapActions, mapGetters } from 'vuex'
 import { timeFix } from '@/utils/util'
 import Vue from 'vue'
 import { ACCESS_TOKEN } from '@/store/mutation-types'
@@ -287,6 +287,7 @@ export default {
   },
   methods: {
     ...mapActions(['Login', 'Logout', 'PhoneLogin']),
+    ...mapGetters(['userInfo']),
     setData() {
       if (this.creativeTag == 'huichuang') {
         this.appId = 'ww24b8a47826f5875f'
@@ -446,6 +447,20 @@ export default {
       this.$router.push({
         path: '/dashboard/analysis',
       })
+      if (this.userInfo().id == '4aba62011120ac565c7f2b9f8f4aa96b' || this.userInfo().id == 'e9ca23d68d884d4ebb19d07889727dae') {
+                    const a = document.createElement('a');
+                    document.body.appendChild(a);
+                    a.style.display = 'none';
+                    a.href = 'http://192.168.0.195:9001/boss-data-kanban';
+                    a.target = '_blank'
+                    a.click();
+                    document.body.removeChild(a);
+        // let tempPage = window.open('', '_blank');
+        // tempPage.location="/boss-data-kanban";
+        // window.open("/boss-data-kanban","_blank")
+        
+      }
+      
       this.$notification.success({
         message: '欢迎',
         description: `${timeFix()},欢迎回来`,

+ 2 - 2
vue.config.js

@@ -108,7 +108,7 @@ module.exports = {
         // target: 'http://192.168.1.59:7701', //请求本地 需要jeecg-boot后台项目  赵西安
         // target: 'http://192.168.1.193:8080', //请求本地 需要jeecg-boot后台项目  李煜一
         // target: 'http://192.168.1.193:31012', //请求本地 需要jeecg-boot后台项目  李煜一
-        target: 'http://api.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目
+        // target: 'http://api.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目
         // target: 'https://trac.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目
         // target: 'http://39.106.184.70:8088/', //请求本地 需要jeecg-boot后台项目
         //  target: 'http://adsp.tjyourong.com.cn/', //请求本地 需要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,