From 083c818af77d33d619dba3dc20f94e996225a1c7 Mon Sep 17 00:00:00 2001
From: value <z1292839451@163.com>
Date: 星期四, 16 五月 2024 10:28:39 +0800
Subject: [PATCH] 增加人事系统对接

---
 src/view/index.vue |  226 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 190 insertions(+), 36 deletions(-)

diff --git a/src/view/index.vue b/src/view/index.vue
index 40bd6df..b9ff928 100644
--- a/src/view/index.vue
+++ b/src/view/index.vue
@@ -12,11 +12,12 @@
 		height: 48px;
 		display: flex;
 		align-items: center;
-		padding: 0 30px;
+		padding: 0 24px;
 	}
 
 	.logo {
-		width: 130px;
+		width: 118px;
+		height: 40px;
 	}
 
 	.logo img {
@@ -52,6 +53,12 @@
 	.user span {
 		font-size: 14px;
 	}
+  .el-dropdown{
+    display: flex;
+    align-items: center;
+    color: #000;
+    cursor: pointer;
+  }
 
 	.left {
 		height: calc(100vh - 48px - 40px);
@@ -161,8 +168,7 @@
 	}
 
 	.tag>.el-icon-s-unfold,
-	.el-icon-s-fold,
-	.el-icon-delete {
+	.el-icon-s-fold{
 		font-size: 16px;
 		cursor: pointer;
 		margin: 0 8px;
@@ -210,12 +216,17 @@
 	.active_tab i {
 		display: inline;
 		color: #3A7BFA;
+		border-radius: 50%;
+	}
+
+	.active_tab i:hover{
+		background-color: rgba(0, 0, 0, 0.08);
 	}
 
 	.component_view {
 		height: calc(100vh - 84px);
-		width: calc(100% - 52px);
-		padding: 0 26px;
+		width: calc(100% - 40px);
+		padding: 0 20px;
 		background: rgb(245, 247, 251);
 	}
 
@@ -225,12 +236,12 @@
 	}
 
 	.right_key_menu {
-		width: 120px;
+		width: 130px;
 		position: absolute;
 		top: 0;
 		left: 0;
 		display: none;
-		z-index: 999;
+		z-index: 9998;
 		padding: 0;
 	}
 
@@ -244,7 +255,7 @@
 	}
 
 	.right_key_menu li i {
-		margin-right: 14px;
+		margin-right: 10px;
 	}
 
 	.right_key_menu li:hover {
@@ -258,18 +269,42 @@
 		cursor: auto !important;
 		margin: 8px 12px;
 	}
+
+  .search_thing {
+    display: flex;
+    align-items: center;
+    height: 50px;
+  }
+
+  .search_label {
+    width: 90px;
+    font-size: 14px;
+    text-align: right;
+  }
+
+  .search_input {
+    width: calc(100% - 120px);
+  }
 </style>
 <style></style>
 <template>
 	<div class="all" @click="closeRightKey">
 		<div class="title">
 			<div class="logo">
-				<!-- <img src="../../static/img/logo 1.png" /> -->
+				<img src="../../static/img/logo1.png" />
 			</div>
 			<div class="label">LIMS瀹為獙瀹ょ鐞嗙郴缁�</div>
 			<div class="user">
-				<el-avatar :size="26">{{ userName.substring(0, 1) }}</el-avatar>
-				<span>{{ userName }}</span>
+        <el-badge :is-dot="newMsg" style="cursor: pointer;margin-right: 10px;">
+          <i class="el-icon-bell" style="font-size: 20px;" @click="openNotice"></i>
+        </el-badge>
+        <el-dropdown trigger="click" @command="handleCommand">
+          <el-avatar :size="26">{{ userName.substring(0, 1) }}</el-avatar>
+				  <span>{{ userName }}</span>
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item>淇敼瀵嗙爜</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
 				<img src="../../static/img/閫�鍑�.png" @click="out" title="閫�鍑鸿处鍙�" />
 			</div>
 		</div>
@@ -280,7 +315,7 @@
 					<i :class="a.i"></i>
 					<div>{{a.v}}</div>
 				</div>
-				<el-popover placement="right-start" trigger="click" v-if="a.self != true && getPower(a.p)">
+				<el-popover ref="popoverName" placement="right-start" trigger="click" v-if="a.self != true && getPower(a.p)">
 					<div :class="`box ${activeBox == a.k ? 'active_box' : ''}`" slot="reference">
 						<i :class="a.i"></i>
 						<div style="text-align: center;">{{ a.v }}</div>
@@ -298,7 +333,6 @@
 						</div>
 					</div>
 				</el-popover>
-				</el-popover>
 			</div>
 		</div>
 		<div class="right" :style="`width: calc(100% - ${leftOpen?'92':'0'}px);`">
@@ -311,7 +345,6 @@
 						<i class="el-icon-close" @click="removeTab(ai)" v-if="tabActive!=0"></i>
 					</div>
 				</div>
-				<i class="el-icon-delete" @click="allDel" title="鍒犻櫎鎵�鏈夋爣绛鹃〉"></i>
 			</div>
 			<div class="component_view">
 				<component class="com_index" v-for="(com, index) in tabs" :is="com.u" :key="com.k" v-show="com.k == tabActive"
@@ -324,13 +357,43 @@
 			<el-col :span="24">
 				<el-card :body-style="{padding: '6px'}">
 					<ul>
-						<li style="color: red;" @click="removeTab(activeIndex)"><i class="el-icon-close"></i>鍏抽棴</li>
+						<li @click="removeTab(activeIndex)" v-show="menuId!=0"><i class="el-icon-close"></i>鍏抽棴</li>
+						<li @click="allDel"><i class="el-icon-delete"></i>鍏抽棴鎵�鏈�</li>
+						<li @click="rightDel(activeIndex)"><i class="el-icon-d-arrow-right"></i>鍏抽棴鍙充晶椤电</li>
 						<el-divider></el-divider>
 						<li @click="refreshTable"><i class="el-icon-refresh"></i>鍒锋柊</li>
 					</ul>
 				</el-card>
 			</el-col>
 		</div>
+    <!-- 淇敼瀵嗙爜 -->
+    <el-dialog
+      title="淇敼瀵嗙爜"
+      :visible.sync="editVisible"
+      width="400px"
+      :before-close="handleClose">
+      <el-row>
+        <el-col class="search_thing" :span="24">
+          <div class="search_label"><span class="required-span">* </span>鏃у瘑鐮侊細</div>
+          <div class="search_input">
+            <el-input v-model="query.oldPassword" size="small" clearable show-password></el-input>
+          </div>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col class="search_thing" :span="24">
+          <div class="search_label"><span class="required-span">* </span>鏂板瘑鐮侊細</div>
+          <div class="search_input">
+            <el-input v-model="query.newPassWord" size="small" clearable show-password></el-input>
+          </div>
+        </el-col>
+      </el-row>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="handleClose">鍙� 娑�</el-button>
+        <el-button type="primary" @click="handleEdit">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <notice ref="notice" @goNoticeDetail="checkForUnreadData()" />
 	</div>
 </template>
 
@@ -345,12 +408,12 @@
 		const componentConfig = requireComponent(fileName);
 		comObj[names] = componentConfig.default || componentConfig;
 	});
-	import menu from '../../static/js/menu.js';
 	import menus from '../../static/js/menu.js'
 	import nullFace from '../view/404.vue'
+  import notice from './notice.vue'
 	comObj['nullFace'] = nullFace
 	export default {
-		components: comObj,
+		components: {...comObj,notice},
 		data() {
 			return {
 				userName: "value",
@@ -359,15 +422,15 @@
 				activeBox: 0,
 				activeP: 0,
 				tabActive: 0,
-				tabs: [{
-					k: 0,
-					v: "涓汉棣栭〉",
-					i: "font icon-a-Group1124",
-					u: "nullFace"
-				}],
+				tabs: [],
 				upIndex: 0,
 				activeIndex: 0,
-				power: []
+				power: [],
+        editVisible:false,
+        query:{},
+        newMsg:false,
+        timer:null,
+        menuId: 0
 			};
 		},
 		created() {
@@ -376,9 +439,41 @@
 		mounted() {
 			this.userName = JSON.parse(localStorage.getItem("user")).name;
 			this.power = JSON.parse(sessionStorage.getItem('power'))
+			this.tabs = JSON.parse(localStorage.getItem('tabs'))
+			if (this.tabs == undefined || this.tabs == null) {
+				this.tabs = [{
+					k: 0,
+					v: "涓汉棣栭〉",
+					i: "font icon-a-Group1124",
+					u: "index-index"
+				}]
+			}
+			this.tabActive = JSON.parse(localStorage.getItem('tabActive'))
+			if (this.tabActive == undefined || this.tabActive == null) {
+				this.tabActive = 0
+			}
+			this.activeP = JSON.parse(localStorage.getItem('activeP'))
+			if (this.activeP == undefined || this.activeP == null) {
+				this.activeP = 0
+			}
+			this.activeBox = JSON.parse(localStorage.getItem('activeBox'))
+			if (this.activeBox == undefined || this.activeBox == null) {
+				this.activeBox = 0
+			}
 			this.getPower()
+      this.timer&&clearInterval(this.timer);
+      this.checkForUnreadData()
+      this.timer = setInterval(()=>{
+        this.checkForUnreadData()
+      },30000)
 		},
 		methods: {
+			saveClick(){
+				localStorage.setItem('tabs', JSON.stringify(this.tabs))
+				localStorage.setItem('tabActive', JSON.stringify(this.tabActive))
+				localStorage.setItem('activeP', JSON.stringify(this.activeP))
+				localStorage.setItem('activeBox', JSON.stringify(this.activeBox))
+			},
 			addTab(ob, self) {
 				this.activeBox = self == -1 ? ob.k : self
 				this.activeP = ob.k; //0
@@ -390,16 +485,25 @@
 					}
 				});
 				if (num == -1) {
-					if(ob.u == "") ob.u = "nullFace"
+					if (ob.u == "") ob.u = "nullFace"
 					this.tabs.push(ob);
 				}
+				this.$refs['popoverName'].forEach(a=>{
+					a.doClose()
+				})
+				this.saveClick()
 			},
 			removeTab(index) {
 				this.tabs.splice(index, 1);
 				let data = this.tabs[this.tabs.length - 1]
-				this.activeP = data.k;
-				this.tabActive = data.k;
-				this.activeBox = data.k
+				this.upTabActive(data.k)
+			},
+			rightDel(index){
+				for (var i = this.tabs.length - 1; i > index; i--) {
+					this.tabs.splice(i, 1);
+				}
+				let data = this.tabs[this.tabs.length - 1]
+				this.upTabActive(data.k)
 			},
 			allDel() {
 				this.activeBox = 0
@@ -407,10 +511,11 @@
 				this.tabActive = 0
 				this.tabs = [{
 					k: 0,
-					v: " 棣栭〉",
+					v: "涓汉棣栭〉",
 					i: "font icon-a-Group1124",
 					u: "index-index"
 				}]
+				this.saveClick()
 			},
 			upTabActive(num) {
 				this.tabActive = num;
@@ -423,10 +528,15 @@
 						}
 					})
 				}
+				this.saveClick()
 			},
 			out() {
 				sessionStorage.clear();
 				localStorage.removeItem("autoenter");
+				localStorage.removeItem("tabs")
+				localStorage.removeItem("tabActive")
+				localStorage.removeItem("activeP")
+				localStorage.removeItem("activeBox")
 				this.$router.push("/enter");
 			},
 			// 鍏抽棴鍙抽敭鑿滃崟
@@ -437,7 +547,8 @@
 			},
 			// 鍙抽敭鑿滃崟
 			rightKeyMenu(id, e) {
-				if (id == 0) return
+				// if (id == 0) return
+        this.menuId = id
 				this.activeIndex = id
 				var x = e.clientX + 'px'
 				var y = e.clientY + 'px'
@@ -477,13 +588,56 @@
 			groupCount(g1, gs) {
 				if (g1 == undefined) return 24
 				let count = 0
-				gs.forEach(a=>{
-					if(a.g == g1) count++
+				gs.forEach(a => {
+					if (a.g == g1) count++
 				})
 				if (count > 4) return 8
 				if (count > 1) return 12
 				if (count == 1) return 24
-			}
-		}
+			},
+      // 淇敼瀵嗙爜-鎵撳紑寮圭獥
+      handleCommand(e){
+        this.editVisible = true;
+      },
+      handleEdit(){
+        if (!this.query.oldPassword) {
+          this.$message.error('璇峰~鍐欐棫瀵嗙爜')
+          return
+        }
+        if (!this.query.newPassWord) {
+          this.$message.error('璇峰~鍐欐棫瀵嗙爜')
+          return
+        }
+        this.$axios.post(this.$api.user.upUserPassword, {...this.query}).then(res => {
+            if (res.code == 201) {
+              this.$message.error('淇敼澶辫触')
+              return
+            }
+            this.$message.success('淇敼鎴愬姛')
+            this.editVisible = false
+            this.query = {}
+            this.out();
+          })
+      },
+      handleClose(){
+        this.editVisible = false
+        this.query = {}
+      },
+      openNotice(){
+        this.$refs.notice.open()
+        this.$refs.notice.handleType()
+      },
+      checkForUnreadData(){
+        this.$axios.get(this.$api.informationNotification.checkForUnreadData).then(res => {
+          if (res.code == 201) {
+            return
+          }
+          this.newMsg = res.data
+        })
+      }
+		},
+    destroyed() {
+      this.timer&&clearInterval(this.timer);
+    }
 	};
-</script>
\ No newline at end of file
+</script>

--
Gitblit v1.9.3