From ef48e4b7a4d34e63ffd2cb23c406f4da6eb72ed7 Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期二, 14 五月 2024 13:42:26 +0800
Subject: [PATCH] 优化消息管理,标准库管理

---
 src/components/view/index-index.vue |  339 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 292 insertions(+), 47 deletions(-)

diff --git a/src/components/view/index-index.vue b/src/components/view/index-index.vue
index 57b55ee..f1b2499 100644
--- a/src/components/view/index-index.vue
+++ b/src/components/view/index-index.vue
@@ -3,7 +3,7 @@
 		width: 100%;
 		height: calc(100% - 50px);
 		overflow-y: auto;
-		padding: 25px 0;
+		padding: 25px 0 10px;
 	}
 
 	.left-1 {
@@ -52,7 +52,7 @@
   }
 
   .right-1{
-    padding: 14px 10px 4px;
+    padding: 10px 10px 4px;
     display: flex;
     align-items: center;
     justify-content: space-between;
@@ -72,7 +72,7 @@
   }
 
   .right-2{
-    padding: 13px 20px;
+    padding: 13px 14px 8px;
     margin-bottom: 16px;
   }
 
@@ -129,21 +129,19 @@
   .list2-item{
     line-height: 22px;
     display: flex;
-    margin-bottom: 13px;
+    margin-bottom: 12px;
     font-size: 14px;
-  }
-  .right-3{
   }
   .right-3-tab{
     display: flex;
     align-items: center;
-    margin-bottom: 16px;
+    margin-bottom: 12px;
   }
   .tab-item{
     width: 50%;
     box-sizing: border-box;
     text-align: center;
-    padding: 16px 0;
+    padding: 14px 0;
     font-size: 20px;
     background: #F5F7FB;
     color: #333333;
@@ -153,7 +151,10 @@
     color: #FF3838;
   }
   .right-3-list{
-    padding: 0 12px 16px;
+    padding: 0 12px 8px;
+    box-sizing: border-box;
+    height: 390px;
+    overflow-y: auto;
   }
   .list3-item{
     padding: 6px 4px;
@@ -175,13 +176,13 @@
     font-size: 14px;
   }
   .left-2{
-    display: flex;
-    align-items: flex-start;
-    margin-bottom: 16px;
+    display: grid;
+    grid-template-columns: repeat(7, 1fr);
+    height: 777px;
   }
   .left-2-item{
-    width: 14.1%;
     border-right: 1px solid #F1F1F1;
+    overflow: hidden !important;
   }
   .left-2-item:nth-last-child(1){
     border-right: 0;
@@ -203,7 +204,7 @@
   .left-item-body{
     box-sizing: border-box;
     padding: 5px;
-    max-height: 711px;
+    height: 693px;
     overflow-y: auto;
   }
   .body-item{
@@ -211,6 +212,15 @@
     border-radius: 16px;
     overflow: hidden;
     margin-bottom: 8px;
+  }
+  .body-item.color0{
+    background: #70A090;
+  }
+  .body-item.color1{
+    background: #EBD476;
+  }
+  .body-item.color2{
+    background: #FF3838;
   }
   .body-item>div{
     height: calc(100% - 16px);
@@ -220,6 +230,18 @@
     display: flex;
     flex-direction: column;
   }
+  .search_thing {
+		height: 50px;
+    margin-bottom: 26px;
+	}
+
+	.search_label {
+		width: 120px;
+		font-size: 14px;
+		text-align: left;
+    margin-bottom: 10px;
+	}
+
 </style>
 
 <template>
@@ -234,21 +256,17 @@
 						</div>
 					</div>
 				</div>
-        <div class="left-2 card">
-          <div class="left-2-item" v-for="(item,index) in 7" :key="index">
+        <div class="left-2 card" v-loading="workLoading" style="overflow: hidden;">
+          <div class="left-2-item" v-for="(item,index) in workDay" :key="index">
             <div class="left-item-title">
-              <span style="font-size: 18px;">25</span>
-              <span style="font-size: 14px;color: #999999;">鏄熸湡鍥�</span>
+              <span style="font-size: 18px;">{{ item }}</span>
+              <span style="font-size: 14px;color: #999999;">{{ weekdays[index] }}</span>
             </div>
             <div class="left-item-body">
-              <div class="body-item" v-for="(m,i) in 8" :key="i">
+              <div class="body-item" v-for="(m,i) in workList[index]" :key="i" :class="{color0:m.type==0,color1:m.type==1,color2:m.type==2}">
                 <div>
-                  <span style="font-size: 12px;margin-bottom: 17px;">濮旀墭璁㈠崟WT20230101 -001妫�娴�</span>
-                  <el-image style="height: 24px;width: 24px;border-radius: 50%;">
-                    <div slot="error" class="image-slot">
-                      <i class="el-icon-picture-outline"></i>
-                    </div>
-                  </el-image>
+                  <span style="font-size: 12px;margin-bottom: 17px;">{{ m.text }}</span>
+                  <span style="display: inline-block;height: 24px;width: 24px;border-radius: 50%;line-height: 24px;text-align: center;background: #C0C4CC;color: #fff;">{{ m.name.charAt(0) }}</span>
                 </div>
               </div>
             </div>
@@ -263,7 +281,7 @@
             </div>
             <div class="mun">
               <p style="font-size: 20px;">254</p>
-              <p style="font-size: 14px;margin-bottom: 10px;">鎴戠殑浠e姙</p>
+              <p style="font-size: 14px;margin-bottom: 10px;">鎴戠殑寰呭姙</p>
             </div>
           </div>
           <div class="right-1-item">
@@ -298,7 +316,7 @@
           <div class="right-2-title">
             <span style="color: #333333;font-size: 16px;">鎴戠殑鏃ョ▼</span>
             <span style="cursor: pointer;font-size: 12px;
-color: #3A7BFA;">娣诲姞鎴戠殑鏃ョ▼</span>
+color: #3A7BFA;" @click="dialogVisible=true">娣诲姞鎴戠殑鏃ョ▼</span>
           </div>
           <div class="right-2-body">
             <div class="calendar" style="width: 49%;">
@@ -319,58 +337,172 @@
                 </template>
               </el-calendar>
             </div>
-            <div class="right-2-list" style="width: 49%;">
-              <div class="list2-item" v-for="(m,i) in 5" :key="i">
-                <span>14:00</span>
-                <el-tooltip style="margin-left: 10px;" effect="dark" content="鍙傚姞LIMS绯荤粺鍩硅浼氳锛屽苟绛句笂绾夸笂绾夸笂绾夸笂绾夸笂绾夸笂绾�" placement="top">
-                  <p class="ellipsis-multiline" >鍙傚姞LIMS绯荤粺鍩硅浼氳锛屽苟绛句笂绾夸笂绾夸笂绾夸笂绾夸笂绾夸笂绾�</p>
+            <div class="right-2-list" style="width: 49%;height: 286px;" v-loading="scheduleLoading">
+              <div class="list2-item" v-for="(m,i) in listScheduleByMe" :key="i">
+                <span>{{ m.scheduleTimes }}</span>
+                <el-tooltip style="margin-left: 10px;" effect="dark" :content="m.text" placement="top">
+                  <p class="ellipsis-multiline" >{{ m.text }}</p>
                 </el-tooltip>
               </div>
+              <span style="color:rgb(153, 153, 153);font-size: 12px;text-align: center;margin: 120px 0;display: inline-block;width: 100%;" v-if="listScheduleByMe.length==0">鏆傛棤</span>
             </div>
           </div>
         </div>
         <div class="right-3 card" style="overflow: hidden;">
           <div class="right-3-tab">
-            <div class="tab-item" style="cursor: pointer;" :class="{active:currentIndex==0}" @click="currentIndex=0">棰勮鎻愰啋 10</div>
-            <div class="tab-item" style="cursor: pointer;" :class="{active:currentIndex==1}" @click="currentIndex=1">閫氱煡閫氬憡 12</div>
+            <div class="tab-item" style="cursor: pointer;" :class="{active:currentIndex==4}" @click="currentIndex=4">棰勮鎻愰啋</div>
+            <div class="tab-item" style="cursor: pointer;" :class="{active:currentIndex==5}" @click="currentIndex=5">閫氱煡閫氬憡</div>
           </div>
-          <div class="right-3-list">
-            <div class="list3-item" v-for="(m,i) in 5" :key="i">
+          <div class="right-3-list" v-loading="listLoading">
+            <scroll-pagination @load="getList" :finishLoding="finishLoding">
+              <div class="list3-item" v-for="(m,i) in list" :key="i">
               <div class="list3-item-title">
                 <img src="../../../static/img/index-tip.svg" alt="">
-                <p>璁惧鍒版湡鎻愰啋</p>
+                <p>{{ m.theme }}</p>
               </div>
               <div class="list3-item-info">
-                <p>缂栧彿<span style="color:#3A7BFA;"> SB20240101-001 </span>鐨勮澶囧皢浜�2023-09-09 11:11:11杩囨湡</p>
-                <p>2023-09-09 09:09:09</p>
+                <p style="width: 73%;-webkit-line-clamp: 1;cursor: pointer;" class="ellipsis-multiline" @click="goNoticeDetail(m)">
+                  <!-- 缂栧彿<span style="color:#3A7BFA;"> SB20240101-001 </span>鐨勮澶囧皢浜�2023-09-09 11:11:11杩囨湡 -->
+                  {{ m.content }}
+                </p>
+                <p>{{ m.createTime }}</p>
               </div>
             </div>
+            </scroll-pagination>
+            <div v-if="list.length<1&&!listLoading" style="color:#909399;font-size:14px;text-align: center;margin-top:80px" >鏆傛棤鏁版嵁</div>
           </div>
         </div>
       </el-col>
     </el-row>
+    <el-dialog title="鏃ョ▼娣诲姞" :visible.sync="dialogVisible" width="400px">
+			<div class="body" style="max-height: 60vh;">
+				<el-row>
+					<el-col class="search_thing" :span="22">
+						<div class="search_label">鏃堕棿锛�</div>
+						<div class="search_input">
+							<el-date-picker
+                v-model="query.time"
+                type="datetime"
+                placeholder="閫夋嫨鏃ユ湡鏃堕棿"
+                size="small"
+                value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;" format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+						</div>
+					</el-col>
+          <el-col class="search_thing" :span="22">
+						<div class="search_label">鍐呭锛�</div>
+						<div class="search_input">
+							<el-input v-model="query.text" size="small" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+						</div>
+					</el-col>
+				</el-row>
+			</div>
+			<span slot="footer" class="dialog-footer">
+				<el-row>
+					<el-button @click="handleCancel">鍙� 娑�</el-button>
+					<el-button type="primary" @click="submit" :loading="loading">纭� 瀹�</el-button>
+				</el-row>
+			</span>
+		</el-dialog>
 	</div>
 </template>
 
 <script>
+  import {
+		getYearAndMonthAndDays
+	} from '../../util/date'
+  import ScrollPagination from '../tool/scroll-paging.vue'
 	export default {
+    components: {
+      ScrollPagination
+    },
 		data() {
 			return {
 				user: {},
 				now: null,
         calendarValue: new Date(),
-        currentIndex:0,
+        currentIndex:4,
+        dialogVisible:false,
+        query:{
+          time:'',
+          text:''
+        },
+        loading:false,
+        workLoading:false,
+        workList:[],
+        workDay:[],
+        weekdays:[],
+        listScheduleByMe:[],
+        scheduleLoading:false,
+        list:[],
+        currentPage:1,
+        pageSize: 8, // 涓�椤�7鏉�
+        total: null,
+        listLoading: true, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue
+        finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡
+        timer:null
 			}
 		},
+    watch:{
+      calendarValue(val){
+        this.getScheduleByMe()
+      },
+      currentIndex(){
+        this.currentPage = 1;
+        this.list = [];
+        this.getList();
+      }
+    },
 		mounted() {
 			this.user = JSON.parse(localStorage.getItem('user'))
 			this.nowTime()
-			// this.getDataList()
 			setInterval(() => {
 				this.nowTime()
 			}, 1000)
+      this.weekdays = this.getWeekdaysForNextWeek()
+      this.init();
+      this.currentPage = 1;
+      this.list = [];
+      this.getList();
+      this.getScheduleByMe()
+      this.timer&&clearInterval(this.timer)
+      this.timer = setInterval(() => {
+        this.init();
+        this.currentPage = 1;
+        this.list = [];
+        this.getList();
+        this.getScheduleByMe()
+      },1000*60*10)
 		},
 		methods: {
+      getList(){
+        if(this.currentPage==1){
+          this.listLoading = true
+        }
+        if(this.list.length==0){
+          this.finishLoding = false;
+        }
+        this.$axios.get(this.$api.informationNotification.page+'?size='+this.pageSize+'&current='+this.currentPage+'&messageType='+this.currentIndex).then(res => {
+          if(res.code === 201){
+            return
+          }
+          let list = res.data.records;
+          this.total = res.data.total;
+          if(list.length==0){
+            this.finishLoding = true;
+          }else{
+            if(list.length<this.pageSize){
+              this.finishLoding = true;
+            }
+            this.list = this.list.concat(list)
+            if(this.total==this.list.length){
+              this.finishLoding = true;
+            }
+            this.currentPage++;
+          }
+          this.listLoading = false
+        })
+      },
 			nowTime() {
 				var date = new Date();
 				var y = date.getFullYear();
@@ -396,11 +528,6 @@
 					m = "0" + m;
 				}
 				this.now = y + "-" + m + "-" + d + "  " + h + ":" + min + ":" + s;
-			},
-			getDataList() {
-				this.$axios.get(this.$api.dataReporting.getDataList).then(res => {
-					this.data = res.data
-				})
 			},
       nextMonth(value) {
         let year = this.calendarValue.getFullYear();// 褰撳墠骞翠唤
@@ -458,6 +585,124 @@
         // 灏嗗緱鍒扮殑骞存湀鏃ユ牸寮忚浆鎹负鏍囧噯鏃堕棿锛屼笌楗夸簡涔堟椂闂存牸寮忕浉鍚屾墠鑳借仈鍔�
         this.calendarValue = new Date(prevtime);
       },
-		}
+      handleCancel(){
+        this.dialogVisible = false;
+        this.query = {
+          time:'',
+          text:''
+        }
+      },
+      submit(){
+        if(!this.query.time){
+          this.$message.error('鏃堕棿鏈~鍐�')
+          return
+        }
+        if(!this.query.text){
+          this.$message.error('鍐呭鏈~鍐�')
+          return
+        }
+        this.loading = true;
+        this.$axios.post(this.$api.report.addSchedule, this.query).then(res => {
+          this.loading = false;
+          if (res.code == 201) {
+            this.$message.error('鎿嶄綔澶辫触')
+            return
+          }
+          this.$message.success('淇濆瓨鎴愬姛')
+          this.handleCancel()
+          this.getScheduleByMe()
+        })
+      },
+      init(){
+        this.workLoading = true;
+        this.$axios.get(this.$api.report.calendarWorkByWeek).then(res => {
+          if (res.code == 201) return
+          this.workLoading = false;
+          this.workList = [];
+          for(let i=0;i<7;i++){
+            this.workList.push(res.data[`work${i}`])
+          }
+          this.workDay = res.data.weekDays.map(m=>{
+            let arr = m.split('-')
+            return arr[2]
+          })
+        })
+      },
+      getWeekdaysForNextWeek() {
+        let weekdays = [];
+        for (let i = 0; i < 7; i++) {
+          let date = new Date();
+          date.setDate(date.getDate() - i); // 浠婂ぉ涔嬪悗鐨勬棩瀛�
+          let day = date.getDay(); // 0-6 浠h〃鏄熸湡鏃ュ埌鏄熸湡鍏�
+          weekdays.push(day);
+        }
+        weekdays.reverse()
+        weekdays = weekdays.map(m=>{
+          let day =''
+          switch (m) {
+            case 0:
+              day = '鏄熸湡澶�'
+              break;
+            case 1:
+              day = '鏄熸湡涓�'
+              break;
+            case 2:
+              day = '鏄熸湡浜�'
+              break;
+            case 3:
+              day = '鏄熸湡涓�'
+              break;
+            case 4:
+              day = '鏄熸湡鍥�'
+              break;
+            case 5:
+              day = '鏄熸湡浜�'
+              break;
+            case 6:
+              day = '鏄熸湡鍏�'
+              break;
+          }
+          return day
+        })
+        return weekdays;
+      },
+      getScheduleByMe(){
+        this.scheduleLoading = true;
+        this.$axios.post(this.$api.report.ScheduleByMe, {
+          date:getYearAndMonthAndDays(this.calendarValue)
+        }).then(res => {
+          this.loading = false;
+          this.scheduleLoading = false;
+          if (res.code == 201) {
+            return
+          }
+          this.listScheduleByMe = res.data.map(m=>{
+            if(m.scheduleTime){
+              let time = m.scheduleTime.split(' ')[1].split(':')
+              m.scheduleTimes = time[0] + ':' + time[1]
+            }else{
+              m.scheduleTimes = ''
+            }
+            return m
+          })
+        })
+      },
+      goNoticeDetail(row){
+      this.$axios.put(this.$api.informationNotification.triggerModificationStatusToRead+'/'+row.id).then(res => {
+        row.num = Math.random(100);
+        this.$bus.$emit("change", JSON.stringify(row));
+        this.$parent.addTab({
+          v: "娑堟伅璇︽儏",
+          i: "el-icon-s-tools",
+          u: "notice-detail",
+          k:35,
+          p: "abcd"
+        },29);
+      })
+    },
+		},
+    deactivated(){
+      this.timer&&clearInterval(this.timer)
+    }
 	}
 </script>

--
Gitblit v1.9.3