魏志佳 5 роки тому
батько
коміт
dcd68bfe9a

BIN
public/feishu.png


BIN
src/assets/feishu.png


BIN
src/assets/feishuGray.png


+ 73 - 19
src/views/modules/BatchCreate/newDirectedPackage.vue

@@ -68,21 +68,10 @@
                         </a-radio-group>
                     </a-form-model-item>
                     <a-form-model-item label="运营商:" class="optItem">
-                       <a-radio-group default-value="" button-style="solid">
-                            <a-radio-button value="">不限</a-radio-button>
-                            <a-radio-button value="yidong">移动</a-radio-button>
-                            <a-radio-button value="liantong">联通</a-radio-button>
-                            <a-radio-button value="dianxin">电信</a-radio-button>
-                        </a-radio-group>
+                       <radioCheck :checkArr='carrierArr' @getSonValue='getNewUser' />
                     </a-form-model-item>
                     <a-form-model-item label="网络:" class="optItem">
-                       <a-radio-group default-value="" button-style="solid">
-                            <a-radio-button value="">不限</a-radio-button>
-                            <a-radio-button value="wifi">Wi-Fi</a-radio-button>
-                            <a-radio-button value="2G">2G</a-radio-button>
-                            <a-radio-button value="3G">3G</a-radio-button>
-                            <a-radio-button value="4G">4G</a-radio-button>
-                        </a-radio-group>
+                       <radioCheck :checkArr='networkArr' @getSonValue='getNewUser' />
                     </a-form-model-item>
                     <a-form-model-item label="设备类型:" class="optItem">
                        <a-radio-group default-value="" button-style="solid">
@@ -201,6 +190,66 @@ let newUser=[
     }
 ]
 
+let networkArr=[
+    {
+        value:'',
+        title:'不限'
+    },
+    {
+        value:'WIFI',
+        title:'wifi'
+    },
+    {
+        value:'2G',
+        title:'2G'
+    },
+    {
+        value:'3G',
+        title:'3G'
+    },
+    {
+        value:'4G',
+        title:'4G'
+    },
+]
+
+let carrierArr=[
+    {
+        value:'',
+        title:'不限'
+    },
+    {
+        value:'MOBILE',
+        title:'移动'
+    },
+    {
+        value:'UNICOM',
+        title:'联通'
+    },
+    {
+        value:'TELCOM',
+        title:'电信'
+    },
+]
+let platformArr=[
+    {
+        value:'',
+        title:'不限'
+    },
+    {
+        value:'MOBILE',
+        title:'移动'
+    },
+    {
+        value:'UNICOM',
+        title:'联通'
+    },
+    {
+        value:'TELCOM',
+        title:'电信'
+    },
+]
+
 export default {
     components:{
         radioCheck,
@@ -247,6 +296,9 @@ export default {
             plainOptions,
 
             newUser,//新用户的每一项值
+            networkArr,//网络
+            carrierArr,//运营商
+
         }
     },
     methods: {
@@ -298,7 +350,7 @@ export default {
         //获取新用户的选中值
         getNewUser(val){
             console.log(val);
-            
+
         },
     },
 }
@@ -428,19 +480,21 @@ export default {
             }
         }
         .rightBox{
-            position: absolute;
-            top: 40px;
+            position: fixed;
+            top: 22%;
             right: 20px;
-            width: 200px;
+            width: 230px;
+            // height: 500px;
+            max-height: 450px;
             border: 1px solid #ddd;
             border-radius: 10px;
             font-size: 12px;
-            
+            overflow: auto;
             .topBox,.bottomBox{
                 padding: 10px 15px;
                 background-color: #f9f9f9;
                 border-bottom: 1px solid #eee;
-                border-radius: 10px;
+                border-radius: 10px 10px 0 0;
                 .title{
                     background-color: #f9f9f9;
                     font-size: 14px;

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

@@ -63,7 +63,7 @@ export default {
     border-radius: 5px;
     height: 32px;
     .item{
-        // min-width: 80px;
+        min-width: 60px;
         padding: 0px 15px;
         text-align: center;
         display: inline-block;

+ 143 - 121
src/views/modules/Statistics/performanceRelated/performanceRelated.vue

@@ -131,12 +131,39 @@
                     :scroll="{ y: 500 }"
                     >
                         <span slot="cost" slot-scope="cost">{{ cost | decimalsHandle }}</span>
+                        <span slot="materialCost" slot-scope="materialCost">{{ materialCost | decimalsHandle }}</span>
+                        <span slot="personCost" slot-scope="personCost">{{ personCost | decimalsHandle }}</span>
+                        <span slot="percent" slot-scope="percent">{{ percent | toPercentage }}</span>
+                        <div slot="urls" slot-scope="test,records">
+                            <img
+                            :src="records.url+'?x-oss-process=video/snapshot,t_0,m_fast'"
+                            alt
+                            style="width:100px"
+                            @click="openVideo(records.url)"
+                            
+                            />
+                        </div>
+                        <span slot="mediaType" slot-scope="text">
+                            <span v-if="text==1">头条</span>
+                            <span v-if="text==2">快手</span>
+                            <span v-if="text==3">头条内广</span>
+                            <span v-if="text==4">快手内广</span>
+                        </span>
                     </a-table>
                 </div>
                
             </a-modal>
         </div>
         
+        <a-modal v-model="Videovisible" title="视频详情" @ok="videoOk" :footer="null" width="50%">
+            <video
+                @click.stop
+                class="video"
+                :src="videoUrl"
+                controls="controls"
+                style="height:600px;width:100%"
+            >您的浏览器不支持 video 标签。</video>
+        </a-modal>
     </div>
 </template>
 
@@ -309,7 +336,7 @@ const saleDetailColumns = [
         dataIndex: 'quarters',
         align: 'center',
         scopedSlots: { customRender: 'quarters' },
-        sorter:()=>{},
+        
         width:110
     },
     {
@@ -317,7 +344,7 @@ const saleDetailColumns = [
         dataIndex: 'projectName',
         align: 'center',
         scopedSlots: { customRender: 'projectName' },
-        sorter:()=>{},
+        
         width:120
     },
     {
@@ -325,7 +352,7 @@ const saleDetailColumns = [
         dataIndex: 'authName',
         align: 'center',
         scopedSlots: { customRender: 'authName' },
-        sorter:()=>{},
+       
         width:120,
     },
     {
@@ -333,7 +360,7 @@ const saleDetailColumns = [
         dataIndex: 'projectName',
         align: 'center',
         scopedSlots: { customRender: 'projectName' },
-        sorter:()=>{},
+       
         width:100
     },
     {
@@ -341,7 +368,7 @@ const saleDetailColumns = [
         dataIndex: 'authName',
         align: 'center',
         scopedSlots: { customRender: 'authName' },
-        sorter:()=>{},
+        
         width:100,
     },
     {
@@ -349,7 +376,7 @@ const saleDetailColumns = [
         dataIndex: 'cost',
         align: 'center',
         scopedSlots: { customRender: 'cost' },
-        sorter:()=>{},
+        
         width:200,
   },
     {
@@ -367,21 +394,7 @@ const designDetailColumns = [
         dataIndex: 'medialType',
         align: 'center',
         scopedSlots: { customRender: 'medialType' },
-        width:80,
-        customRender: (value, row, index) => {
-          const obj = {
-            children: value,
-            attrs: {},
-          };
-          if (index%5 === 0) {
-            obj.attrs.rowSpan = 5;
-          }
-          else{
-            obj.attrs.rowSpan = 0;
-          }
-         
-          return obj;
-        },
+        width:100,
     },
     {
         title: '项目',
@@ -389,104 +402,51 @@ const designDetailColumns = [
         align: 'center',
         scopedSlots: { customRender: 'projectName' },
         width:100,
-        customRender: (value, row, index) => {
-          const obj = {
-            children: value,
-            attrs: {},
-          };
-          if (index%5 === 0) {
-            obj.attrs.rowSpan = 5;
-          }
-          else{
-            obj.attrs.rowSpan = 0;
-          }
-         
-          return obj;
-        },
+        
     },
     {
         title: '视频',
-        dataIndex: 'url',
+        dataIndex: 'urls',
         align: 'center',
-        scopedSlots: { customRender: 'url' },
-        width:120,
-        customRender: (value, row, index) => {
-          const obj = {
-            children: value,
-            attrs: {},
-          };
-          if (index%5 === 0) {
-            obj.attrs.rowSpan = 5;
-          }
-          else{
-            obj.attrs.rowSpan = 0;
-          }
-         
-          return obj;
-        },
+        scopedSlots: { customRender: 'urls' },
+        width:140,        
     },
     {
-        title: '消耗',
-        dataIndex: 'cost',
+        title: '素材消耗',
+        dataIndex: 'materialCost',
         align: 'center',
-        scopedSlots: { customRender: 'cost' },
+        scopedSlots: { customRender: 'materialCost' },
         sorter:()=>{},
-        width:100,
-        customRender: (value, row, index) => {
-          const obj = {
-            children: value,
-            attrs: {},
-          };
-          if (index%5 === 0) {
-            obj.attrs.rowSpan = 5;
-          }
-          else{
-            obj.attrs.rowSpan = 0;
-          }
-         
-          return obj;
-        },
+        width:100,        
     },
     {
-        title: '设计负责人',
-        dataIndex: 'authName',
+        title: '个人消耗',
+        dataIndex: 'personCost',
         align: 'center',
-        scopedSlots: { customRender: 'authName' },
-        width:100,
-        customRender: (value, row, index) => {
-          const obj = {
-            children: value,
-            attrs: {},
-          };
-          if (index%5 === 0) {
-            obj.attrs.rowSpan = 5;
-          }
-          else{
-            obj.attrs.rowSpan = 0;
-          }
-         
-          return obj;
-        },
+        scopedSlots: { customRender: 'personCost' },
+        sorter:()=>{},
+        width:100,        
     },
     {
-        title: '职位',
-        dataIndex: 'cost',
+        title: '设计负责人',
+        dataIndex: 'leaderName',
         align: 'center',
-        scopedSlots: { customRender: 'cost' },
-        width:50,
-  },
+        scopedSlots: { customRender: 'leaderName' },
+        width:110,
+    },
     {
-        title: '姓名',
-        dataIndex: 'cost',
+        title: '职位',
+        dataIndex: 'jobName',
         align: 'center',
-        scopedSlots: { customRender: 'cost' },
-        width:50,
-  },
+        scopedSlots: { customRender: 'jobName' },
+        width:80,
+    },
+    
     {
         title: '绩效占比',
-        dataIndex: 'cost',
+        dataIndex: 'percent',
         align: 'center',
-        scopedSlots: { customRender: 'cost' },
+        scopedSlots: { customRender: 'percent' },
   },
 ]
     
@@ -515,7 +475,9 @@ export default {
             tableWidth: '',//设置表格的列宽
             loading:false,
 
-
+            //是否打开视频
+            Videovisible: false,
+            videoUrl: '',
 
             visibleDetail:false, //明细表的开关
             detailData:[],
@@ -585,29 +547,80 @@ export default {
 
         //点击查看明细按钮的事件
         opendetail(text, record) {
-            console.log(text, record)
+            console.log(text, record);
             this.visibleDetail = true
             this.detailData = []
             this.loadingDetail=true
-            postAction('/ctop/performance/show/operateDetail', {
-                year:record.year,
-                quarter:record.quarter,
-                userId:record.userId,
-                mediaType:record.mediaType
-            }).then(res => {
-                // let resArr = []
-                this.loadingDetail=false
-                console.log(res)
-                if (res.success) {
-                    let result = res.result
-                    // this.detailData.push({ ...result, key: 1 })
-                    result.map((item, index) => {
-                        item.key = index;
-                        item.quarters=record.quarters
-                    })
-                    this.detailData = result
-                }
-            })
+            if(record.department=='运营部'){
+                this.columns=this.columnsFixd;
+                this.detailColumns=this.operateDetailColumns;
+                postAction('/ctop/performance/show/operateDetail', {
+                    year:record.year,
+                    quarter:record.quarter,
+                    userId:record.userId,
+                    mediaType:record.mediaType
+                }).then(res => {
+                    // let resArr = []
+                    this.loadingDetail=false
+                    console.log(res)
+                    if (res.success) {
+                        let result = res.result
+                        // this.detailData.push({ ...result, key: 1 })
+                        result.map((item, index) => {
+                            item.key = index;
+                            item.quarters=record.quarters
+                        })
+                        this.detailData = result
+                    }
+                })
+            }else if(record.department=='设计部'){
+                this.columns=this.elseColumns;
+                this.detailColumns=this.designDetailColumns;
+                postAction('/ctop/performance/show/designDetail/1/10', {
+                    year:record.year,
+                    quarter:record.quarter,
+                    userId:record.userId,
+                    mediaType:record.mediaType
+                }).then(res => {
+                    // let resArr = []
+                    this.loadingDetail=false
+                    console.log(res)
+                    if (res.success) {
+                        let result = res.result.list
+                        // this.detailData.push({ ...result, key: 1 })
+                        result.map((item, index) => {
+                            item.key = index;
+                            item.quarters=record.quarters
+                        })
+                        this.detailData = result
+                    }
+                })
+            }else if(record.department=='销售部'){
+                this.columns=this.elseColumns;
+                this.detailColumns=this.saleDetailColumns;
+                postAction('/ctop/performance/show/operateDetail', {
+                    year:record.year,
+                    quarter:record.quarter,
+                    userId:record.userId,
+                    mediaType:record.mediaType
+                }).then(res => {
+                    // let resArr = []
+                    this.loadingDetail=false
+                    console.log(res)
+                    if (res.success) {
+                        let result = res.result
+                        // this.detailData.push({ ...result, key: 1 })
+                        result.map((item, index) => {
+                            item.key = index;
+                            item.quarters=record.quarters
+                        })
+                        this.detailData = result
+                    }
+                })
+            }
+
+            
+            
         },
 
         //获取选择框的信息
@@ -723,6 +736,15 @@ export default {
                 this.ipagination.total = res.result.total   
             })
         },
+
+        //打开视频
+        openVideo(val) {
+            this.Videovisible = true
+            this.videoUrl = val
+        },
+        videoOk() {
+            this.Videovisible = false
+        },
     },
     mounted() {
         this.getInfoHttp();

+ 86 - 15
src/views/user/Login.vue

@@ -66,10 +66,9 @@
             <a-col :span="10">
               <j-graphic-code @success="generateCode" style="float: right"></j-graphic-code>
             </a-col>
-          </a-row>
+          </a-row>     
         </a-tab-pane>
       </a-tabs>
-
       <a-form-item v-if="customActiveKey != 'tab1'">
         <a-checkbox v-model="formLogin.rememberMe">自动登陆</a-checkbox>
         <router-link :to="{ name: 'alteration' }" class="forge-password" style="float: right;">
@@ -81,20 +80,26 @@
         </router-link>
         -->
       </a-form-item>
-
       <a-form-item style="margin-top:24px" v-if="customActiveKey != 'tab1'">
-        <a-button
-          size="large"
-          type="primary"
-          htmlType="submit"
-          class="login-button"
-          :loading="loginBtn"
-          @click.stop.prevent="handleSubmit"
-          :disabled="loginBtn"
-          >确定
-        </a-button>
+          <a-button
+            size="large"
+            type="primary"
+            htmlType="submit"
+            class="login-button"
+            :loading="loginBtn"
+            
+            @click.stop.prevent="handleSubmit"
+            :disabled="loginBtn"
+            >确定
+          </a-button>
       </a-form-item>
-
+      <div class="otherLogin" v-if="customActiveKey != 'tab1'"><span class="titleTip">其他登录方式</span></div>
+      <div class="feishu" @click="FSlogin" v-if="customActiveKey != 'tab1'">
+          <span class="FSicon" >
+            <img src="@/assets/feishu.png" alt="">
+          </span>
+          <span class="FSinfo">使用飞书快捷登录</span>
+      </div>
       <!-- <div class="user-login-other">
         <span>其他登陆方式</span>
         <a><a-icon class="item-icon" type="alipay-circle"></a-icon></a>
@@ -103,7 +108,7 @@
         <router-link class="register" :to="{ name: 'register' }">
           注册账户
         </router-link>
-      </div>-->
+      </div> -->
     </a-form>
 
     <two-step-captcha
@@ -459,6 +464,10 @@ export default {
           username: this.$route.params.username
         })
       })
+    },
+
+    FSlogin(){
+      console.log('FSlogin')
     }
   }
 }
@@ -509,6 +518,68 @@ export default {
       float: right;
     }
   }
+  .otherLogin{
+    margin-top: 60px;
+    font-size: 14px;
+    color: #999;
+    height: 20px;
+    line-height: 20px;
+    text-align: center;
+    position: relative;
+    .titleTip::before{
+      content: '';
+      display: block;
+      width:120px ;
+      height: 1px;
+      background-color: #ccc;
+      position: absolute;
+      top: 10px;
+      left: 5px;
+    }
+    .titleTip::after{
+      content: '';
+      display: block;
+      width:120px ;
+      height: 1px;
+      background-color: #ccc;
+      position: absolute;
+      top: 10px;
+      right: 5px;
+    }
+  }
+
+  .feishu{
+    text-align: center;
+    cursor: pointer;
+    margin-top: 15px;
+    padding: 5px 0;
+    // border: 1px solid #ccc;
+    border-radius: 10px;
+    .FSicon{
+        display: inline-block;
+        width: 40px;
+        height: 40px;       
+        background-color:#fff;
+        border-radius: 50%;      
+        padding: 6px;
+        img{
+          height: 100%;
+        }
+    }
+    .FSinfo{
+      display: inline-block;
+      height: 40px;
+      line-height: 40px;
+      margin-left: 15px;
+      font-size: 16px;
+      font-weight: 500;
+      // color: rgb(0,127,255);
+    }
+
+  }
+  .feishu:hover{
+    color:rgb(0,127,255)
+  }
 }
 </style>
 <style>

+ 5 - 17
vue.config.js

@@ -72,25 +72,13 @@ module.exports = {
         // target: 'http://192.168.2.115:8080', //请求本地 需要jeecg-boot后台项目  祚云
         // target: 'http://192.168.1.54:8080', //请求本地 需要jeecg-boot后台项目  孙震
         // target: 'http://192.168.1.165:8088', //请求本地 需要jeecg-boot后台项目  毕洁泉
-<<<<<<< HEAD
-        // target: 'http://192.168.1.165:8848', //请求本地 需要jeecg-boot后台项目  毕洁泉        
-        target: 'http://192.168.1.251:80', //请求本地 需要jeecg-boot后台项目 
-=======
-        // target: 'http://192.168.1.165:8848', //请求本地 需要jeecg-boot后台项目  毕洁泉
-        // target: 'http://api.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目 
-        // target: 'https://trac.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目 
-
-        // target: 'http://192.168.0.53:8088', //请求本地 需要jeecg-boot后台项目  毕洁泉
-        // target: 'http://192.168.1.251:8088', //请求本地 需要jeecg-boot后台项目 
-
-        target: 'http://adsp.tjyourong.com.cn/', //请求本地 需要jeecg-boot后台项目 
-
->>>>>>> 6541ecb6478d2b04143cf8314d3ef2816f6f3d89
+        target: 'http://192.168.1.165:8848', //请求本地 需要jeecg-boot后台项目  毕洁泉        
+        // target: 'http://192.168.1.251:80', //请求本地 需要jeecg-boot后台项目 
         ws: false,
         changeOrigin: true,
-        pathRewrite: {
-            '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
-        }
+        // pathRewrite: {
+        //     '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
+        // }
       },
     },
     // before(app) {