From d40e875d8e025fd09566e919306f5b05755c25cb Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期六, 11 五月 2024 14:51:17 +0800
Subject: [PATCH] x优化班次

---
 src/components/view/b3-classes.vue |  175 ++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 116 insertions(+), 59 deletions(-)

diff --git a/src/components/view/b3-classes.vue b/src/components/view/b3-classes.vue
index 0c851bd..2d9ffd5 100644
--- a/src/components/view/b3-classes.vue
+++ b/src/components/view/b3-classes.vue
@@ -10,6 +10,7 @@
           size="small"
           format="yyyy"
           placeholder="閫夋嫨骞�"
+          @change="refreshTable()"
           style="width: 140px;"
           :clearable="false">
         </el-date-picker>
@@ -18,7 +19,8 @@
         clearable
         placeholder="閫夋嫨鏈�"
         style="width: 140px;margin-left: 16px;"
-        size="small">
+        size="small"
+        @change="refreshTable()">
           <el-option
             v-for="item in monthOptions"
             :key="item.value"
@@ -26,8 +28,8 @@
             :value="item.value">
           </el-option>
         </el-select>
-        <el-input v-model="query.userName" placeholder="璇疯緭鍏ヤ汉鍛樺悕绉�" size="small" style="width: 140px;margin: 0 16px;" clearable ></el-input>
-        <el-select v-model="query.laboratory" placeholder="璇烽�夋嫨瀹為獙瀹�" style="width: 140px;" size="small" clearable >
+        <el-input v-model="query.userName" placeholder="璇疯緭鍏ヤ汉鍛樺悕绉�" size="small" style="width: 140px;margin: 0 16px;" clearable @keyup.enter.native="refreshTable()"></el-input>
+        <el-select v-model="query.laboratory" placeholder="璇烽�夋嫨瀹為獙瀹�" style="width: 140px;" size="small" clearable @change="refreshTable()">
           <el-option
             v-for="item in laboratory"
             :key="item.value"
@@ -47,7 +49,7 @@
     </div>
   </div>
   <div class="center" v-loading="pageLoading">
-    <scroll-pagination @load="init" :finishLoding="finishLoding" v-show="query.month&&list.length>0">
+    <scroll-pagination @load="init" :finishLoding="finishLoding" v-show="query.month&&list.length>0" style="height: 100%;" :key="'123'">
       <div class="clearfix">
         <div class="fixed-left">
           <div class="content-title" style="padding-left: 16px;box-sizing: border-box;">
@@ -99,22 +101,20 @@
         </div>
       </div>
     </scroll-pagination>
-    <scroll-pagination @load="initYear" :finishLoding="finishLoding" v-show="!query.month&&list.length>0" style="width: 100%;">
+    <scroll-pagination @load="initYear" :finishLoding="finishLoding" v-show="!query.month&&yearList.length>0" style="width: 100%;" :key="'111'">
       <div class="clearfix year-table">
       <div class="fixed-left">
         <div class="content-title" style="padding-left: 16px;box-sizing: border-box;">
             浜哄憳鍚嶇О
         </div>
-        <div class="content-user" :class="{hoverType:currentUserIndex==index}" v-for="(item,index) in list" :key="'e'+index" v-on:mouseenter="onMouseEnter(index)"
+        <div class="content-user" :class="{hoverType:currentUserIndex==index}" v-for="(item,index) in yearList" :key="'e'+index" v-on:mouseenter="onMouseEnter(index)"
           v-on:mouseleave="currentUserIndex=null">
             <div class="user-pic">{{ item.name.charAt(0) }}</div>
             <div class="user-info">
               <p style="font-size: 14px;color: #3A7BFA;line-height: 24px;">{{ item.name }}</p>
               <p style="color: #999999;font-size: 12px;transform: scale(0.8) translateX(-20px);white-space: nowrap;width: 150px;overflow-x: show;">鏃�: {{ item.day0 }}, 涓�: {{ item.day1 }}, 澶�: {{ item.day2 }}, 浼�: {{ item.day3 }}, 鍋�: {{ item.day4 }}</p>
               <p style="margin-top: 4px;"><span style="color: #999999;font-size: 12px;display: inline-block;transform: scale(0.8) translateX(-10px);">鍚堣鍑哄嫟: </span><span style="font-size: 16px;
-    color: #FF4902;">{{ query.month?item.monthlyAttendance
-.totalAttendance:item.sidebarAnnualAttendance
-.totalAttendance }}澶�</span></p>
+    color: #FF4902;">{{ item.work_time }}澶�</span></p>
             </div>
           </div>
         </div>
@@ -129,17 +129,17 @@
             </div>
             <div
             class="content-body"
-            v-for="(item,index) in list"
+            v-for="(item,index) in yearList"
             :key="'c'+index"
             v-on:mouseenter="onMouseEnter(index)"
             v-on:mouseleave="currentUserIndex=null"
             :style="`display: grid;
             grid-template-columns: repeat(${monthList.length}, 1fr);`"
             >
-              <div class="content-body-item" v-for="(m,i) in monthList.length" :key="'d'+i" :class="{hoverType:currentUserIndex==index}">
-                <p style="color:rgb(153, 153, 153);font-size: 12px;">鍚堣鍑哄嫟锛�<span style="font-size: 14px;color:#000">12</span></p>
+              <div class="content-body-item" v-for="(m,i) in item.monthList" :key="'d'+i" :class="{hoverType:currentUserIndex==index}">
+                <p style="color:rgb(153, 153, 153);font-size: 12px;">鍚堣鍑哄嫟锛�<span style="font-size: 14px;color:#000">{{ m.totalMonthAttendance }}</span></p>
                 <p style="color:rgb(153, 153, 153);font-size: 12px;">
-                  鏃�: 12, 涓�: 12, 澶�: 12, 浼�: 12, 鍋�: 12
+                  鏃�: {{ m.day0 }}, 涓�:  {{ m.day1 }}, 澶�:  {{ m.day2 }}, 浼�:  {{ m.day3 }}, 鍋�:  {{ m.day4 }}
                 </p>
               </div>
             </div>
@@ -148,23 +148,23 @@
       </div>
     </div>
     </scroll-pagination>
-    <span style="color:#909399;font-size:14px;position: absolute;left:50%;top: 50%;transform: translate(-59%,-50%);" v-if="list.length==0">鏆傛棤鏁版嵁</span>
+    <span style="color:#909399;font-size:14px;position: absolute;left:50%;top: 50%;transform: translate(-59%,-50%);" v-if="(query.month&&list.length==0)||(!query.month&&yearList.length==0)">鏆傛棤鏁版嵁</span>
   </div>
   <el-dialog title="鎺掔彮" :visible.sync="schedulingVisible" width="400px">
     <div class="search_thing">
-      <div class="search_label" style="width:90px">鍛ㄦ锛�</div>
-      <div class="search_input">
+      <div class="search_label" style="width:90px"><span style="color: red;margin-right: 4px;">*</span>鍛ㄦ锛�</div>
+      <div class="search_input" style="width: calc(100% - 90px);">
         <el-date-picker
           v-model="schedulingQuery.week"
           type="week"
           format="yyyy 绗� WW 鍛�"
-          placeholder="閫夋嫨鍛ㄦ" style="width: 203px;">
+          placeholder="閫夋嫨鍛ㄦ" style="width: 100%">
         </el-date-picker>
       </div>
     </div>
     <div class="search_thing">
-      <div class="search_label" style="width:90px">浜哄憳鍚嶇О锛�</div>
-      <div class="search_input">
+      <div class="search_label" style="width:90px"><span style="color: red;margin-right: 4px;">*</span>浜哄憳鍚嶇О锛�</div>
+      <div class="search_input" style="width: calc(100% - 90px);">
         <el-select v-model="schedulingQuery.userId" placeholder="璇烽�夋嫨" style="width: 100%;" multiple clearable collapse-tags >
           <el-option
             v-for="item in personList"
@@ -176,8 +176,8 @@
       </div>
     </div>
     <div class="search_thing">
-      <div class="search_label" style="width:90px">鐝锛�</div>
-      <div class="search_input">
+      <div class="search_label" style="width:90px"><span style="color: red;margin-right: 4px;">*</span>鐝锛�</div>
+      <div class="search_input" style="width: calc(100% - 90px);">
         <el-select v-model="schedulingQuery.shift" placeholder="璇烽�夋嫨" style="width: 100%;">
           <el-option
             v-for="item in classType"
@@ -285,31 +285,43 @@
       total: '',
       pageLoading: false, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue
       finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡
-      monthList:[]
+      monthList:[],
+      yearList:[]
     }
   },
   watch: {
-    'query.year'(val){
-      this.monthList = []
-      if(val.getFullYear()==new Date().getFullYear()){
-        for(let i=new Date().getMonth()+1;i>0;i--){
-          this.monthList.push(i)
-        }
-      }else{
-        for (let i=12;i>0;i--) {
-          this.monthList.push(i)
-        }
-      }
-      this.monthList.reverse()
-    }
+    // 'query.year'(val){
+    //   this.monthList = []
+    //   if(val.getFullYear()==new Date().getFullYear()){
+    //     for(let i=new Date().getMonth()+1;i>0;i--){
+    //       this.monthList.push(i)
+    //     }
+    //   }else{
+    //     for (let i=12;i>0;i--) {
+    //       this.monthList.push(i)
+    //     }
+    //   }
+    //   this.monthList.reverse()
+    // },
+    // 'query.month'(val){
+    //   if(!val){
+    //     this.currentPage = 1;
+    //     this.yearList = []
+    //     this.initYear()
+    //   }
+    // }
   },
   mounted(){
     this.selectEnumByCategory()
     this.obtainItemParameterList()
     this.getUsers()
-    this.init()
+    if(this.query.month){
+      this.init()
+    }else{
+      this.initYear()
+    }
     this.monthList = []
-    for(let i=new Date().getMonth()+1;i>0;i--){
+    for(let i=12;i>0;i--){
       this.monthList.push(i)
     }
     this.monthList.reverse()
@@ -318,6 +330,7 @@
   methods: {
     refresh(){
       this.list = [];
+      this.yearList = []
       this.currentPage = 1
       this.query = {
         userName:'',
@@ -325,12 +338,21 @@
         year:new Date(),
         month:new Date().getMonth()+1
       }
-      this.init()
+      if(this.query.month){
+        this.init()
+      }else{
+        this.initYear()
+      }
     },
     refreshTable(){
-      this.list = [];
       this.currentPage = 1
-      this.init()
+      if(this.query.month){
+        this.list = [];
+        this.init()
+      }else{
+        this.yearList = []
+        this.initYear()
+      }
     },
     init(){
       if(this.currentPage==1){
@@ -358,20 +380,6 @@
             }
             return item
           });
-          // 鍙充晶鏃ユ湡鑾峰彇
-          // if(this.currentPage==1){
-          //   if(list&&list.length>0){
-          //     this.weeks = [];
-          //     list[0].list&&list[0].list.forEach(item=>{
-          //       let obj = {
-          //         weekNum:item.weekly,
-          //         week:item.headerTime.split(' ')[1],
-          //         day:item.headerTime.split(' ')[0]
-          //       }
-          //       this.weeks.push(obj)
-          //     })
-          //   }
-          // }
           let headerList = res.data.headerList;
           this.weeks = [];
           headerList.forEach(item=>{
@@ -394,10 +402,59 @@
             }
             this.currentPage++;
           }
-          console.log(this.list)
         })
     },
-    initYear(){},
+    initYear(){
+      // pageYear
+      if(this.currentPage==1){
+        this.pageLoading = true
+      }
+      let year = this.query.year.getFullYear()
+      this.$axios.post(this.$api.performanceShift.pageYear, {
+        size:this.pageSize,
+        current:this.currentPage,
+        time:year+'-01-01 00:00:00',
+        userName:this.query.userName,
+        laboratory:this.query.laboratory,
+        }).then(res => {
+          this.pageLoading = false
+          if (res.code == 201) return
+          this.total = res.data.total
+          let list = res.data.records.map(item=>{
+            for (let key in item.year) {
+              let type = this.getDayByDic(key)
+              if(type!=undefined||type!=null){
+                item[`day${type}`] = item.year[key]
+              }
+            }
+            item.monthList = []
+            for (let m in item.month) {
+              let obj = {}
+              for (let key in item.month[m]) {
+                let type = this.getDayByDic(key)
+                if(type!=undefined||type!=null){
+                  obj[`day${type}`] = item.month[m][key]
+                }
+              }
+              obj.totalMonthAttendance = item.month[m].totalMonthAttendance
+              item.monthList.push(obj)
+            }
+            return item
+          });
+          if(list.length==0){
+            this.finishLoding = true;
+          }else{
+            if(list.length<this.pageSize){
+              this.finishLoding = true;
+            }
+            this.yearList = this.yearList.concat(list)
+            if(this.total==this.yearList.length){
+              this.finishLoding = true;
+            }
+            this.currentPage++;
+          }
+        })
+    },
     getPower() {
       let power = JSON.parse(sessionStorage.getItem('power'))
       let add = false
@@ -563,17 +620,17 @@
 }
 .center {
   width: 100%;
-  height: calc(100% - 40px );
+  height: calc(100% - 50px );
   background-color: #fff;
   overflow-y: auto;
   display: flex;
 }
 >>>.scroll-pagination{
   overflow-y: scroll;
-  scrollbar-width: none; /* 瀵逛簬 Firefox 鍜� IE 鐨勫吋瀹瑰啓娉� */
+  scrollbar-width: none;
 }
 >>>.scroll-pagination::-webkit-scrollbar {
-  display: none; /* 瀵逛簬 Chrome, Safari 鍜� Opera 鐨勫啓娉� */
+  display: none;
 }
 .fixed-left {
   float: left;

--
Gitblit v1.9.3