From b4668a820cb11703613c59d6529898e230be0b28 Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期一, 04 八月 2025 14:57:18 +0800 Subject: [PATCH] bug修改 --- src/layout/components/Navbar.vue | 311 ++++++++++++++++++++++++++++----------------------- 1 files changed, 170 insertions(+), 141 deletions(-) diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index 8774f9e..e9918c7 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -1,170 +1,199 @@ <template> - <div class="navbar"> - <hamburger - :is-active="sidebar.opened" - class="hamburger-container" - @toggleClick="toggleSideBar" - /> + <div class="navbar"> + <hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> - <breadcrumb class="breadcrumb-container" /> - <!-- 鍥哄畾鍙充笂瑙� --> - <!-- <h3 style="position: fixed; top: 0; font-size: 16px; color: #5a5e66; " :style="'right:' + orgCss() ">{{ getOrgName() }}</h3> --> + <breadcrumb class="breadcrumb-container" /> + <!-- 鍥哄畾鍙充笂瑙� --> + <!-- <h3 style="position: fixed; top: 0; font-size: 16px; color: #5a5e66; " :style="'right:' + orgCss() ">{{ getOrgName() }}</h3> --> - <div class="right-menu"> - <el-dropdown trigger="click" ref="eldrop" style="margin-right:20px"> - <div class="avatar-wrapper" style="font-size:20px"> - {{ selectStaff.org.name }} - <i class="el-icon-caret-bottom"></i> - </div> - <el-dropdown-menu slot="dropdown" align="center"> - <el-dropdown-item - v-for="item in staffs" - @click.native="changeStaff(item)" - :key="item.id" - > - {{ item.org.name }} - </el-dropdown-item> - </el-dropdown-menu> - </el-dropdown> - <el-dropdown class="avatar-container" trigger="click"> - <div class="avatar-wrapper"> - {{ '鎮ㄥソ锛�' + getUserName() }} - <i class="el-icon-caret-bottom"></i> - </div> - <el-dropdown-menu slot="dropdown" class="user-dropdown"> - <el-dropdown-item @click.native="logout"> - <span style="display: block">閫�鍑虹櫥褰�</span> - </el-dropdown-item> - </el-dropdown-menu> - </el-dropdown> + <div class="right-menu"> + <el-dropdown trigger="click" ref="eldrop" style="margin-right: 20px"> + <div class="avatar-wrapper" style="font-size: 20px"> + {{ selectStaff ? selectStaff.org.name : "" }}-{{ + selectStaff && selectStaff.sysRole ? selectStaff.sysRole.name : "" + }} + <i class="el-icon-caret-bottom"></i> </div> + <el-dropdown-menu slot="dropdown" align="center"> + <el-dropdown-item v-for="item in staffs" @click.native="changeStaff(item)" :key="item.id"> + {{ item ? item.org.name : "" }}-{{ item && item.sysRole ? item.sysRole.name : "" }} + </el-dropdown-item> + </el-dropdown-menu> + </el-dropdown> + <el-dropdown class="avatar-container" trigger="click"> + <div class="avatar-wrapper"> + {{ "鎮ㄥソ锛�" + getUserName() }} + <i class="el-icon-caret-bottom"></i> + </div> + <el-dropdown-menu slot="dropdown" class="user-dropdown"> + <el-dropdown-item @click.native="logout"> + <span style="display: block">閫�鍑虹櫥褰�</span> + </el-dropdown-item> + </el-dropdown-menu> + </el-dropdown> </div> + </div> </template> <script> -import { mapGetters } from 'vuex' -import Breadcrumb from '@/components/Breadcrumb' -import Hamburger from '@/components/Hamburger' +import { mapGetters } from "vuex"; +import Breadcrumb from "@/components/Breadcrumb"; +import Hamburger from "@/components/Hamburger"; export default { - data() { - return { - selectStaff: JSON.parse(localStorage.getItem("selectStaff")), - staffs: JSON.parse(localStorage.getItem("staffs")) - } + inject: ["reload"], // 渚濊禆娉ㄥ叆 + data() { + return { + selectStaff: { org: {} }, + staffs: [], + }; + }, + components: { + Breadcrumb, + Hamburger, + }, + computed: { + ...mapGetters(["sidebar", "avatar"]), + }, + methods: { + changeStaff(item) { + this.selectStaff = item; + localStorage.setItem("selectStaff", JSON.stringify(item)); + // this.$router.go(0) + this.reload(); }, - components: { - Breadcrumb, - Hamburger + orgCss() { + return ( + JSON.parse(localStorage.getItem("user")).name.length * 20 + 100 + "px" + ); }, - computed: { - ...mapGetters([ - 'sidebar', - 'avatar' - ]) + getOrgName() { + return JSON.parse(localStorage.getItem("selectStaff")).org.name; }, - methods: { - changeStaff(item) { - this.selectStaff = item - localStorage.setItem("selectStaff", JSON.stringify(item)) - this.$router.go(0) - }, - orgCss() { - return JSON.parse(localStorage.getItem("user")).name.length * 20 + 100 + 'px'; - }, - getOrgName() { - return JSON.parse(localStorage.getItem("user")).staffs[0].org.name; - }, - getUserName() { - return JSON.parse(localStorage.getItem("user")).name; - }, - toggleSideBar() { - this.$store.dispatch('app/toggleSideBar') - }, - async logout() { - // await this.$store.dispatch('user/logout') - this.$router.push(`/login`) - } - } -} + getUserName() { + return JSON.parse(localStorage.getItem("user")).name; + }, + toggleSideBar() { + this.$store.dispatch("app/toggleSideBar"); + }, + async logout() { + // await this.$store.dispatch('user/logout') + this.$router.push(`/login`); + }, + loadStaffs() { + const selectStaff = JSON.parse(localStorage.getItem("selectStaff")); + if (selectStaff) { + this.selectStaff = selectStaff; + } + const staffs = JSON.parse(localStorage.getItem("staffs")); + + console.log('Navbar-created'); + if (staffs) { + this.staffs = staffs; + } + }, + beforeCreate() { + const user = JSON.parse(localStorage.getItem("user")); + if (!user) { + this.$router.push(`/login`); + } + }, + }, + created() { + this.loadStaffs(); + }, + mounted() { + this.$EventBus.$on("updateStaffs", (data) => { + + this.loadStaffs(); + }); + }, +}; </script> <style lang="scss" scoped> .navbar { - height: 50px; - overflow: hidden; - position: relative; - background: #fff; - box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); + height: 50px; + overflow: hidden; + position: relative; + background: #fff; + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); - .hamburger-container { - line-height: 46px; - height: 100%; - float: left; + .hamburger-container { + line-height: 46px; + height: 100%; + float: left; + cursor: pointer; + transition: background 0.3s; + -webkit-tap-highlight-color: transparent; + + &:hover { + background: rgba(0, 0, 0, 0.025); + } + } + + .breadcrumb-container { + float: left; + } + + .right-menu { + float: right; + height: 100%; + line-height: 50px; + + &:focus { + outline: none; + } + + .right-menu-item { + display: inline-block; + padding: 0 8px; + height: 100%; + font-size: 18px; + color: #5a5e66; + vertical-align: text-bottom; + + &.hover-effect { cursor: pointer; transition: background 0.3s; - -webkit-tap-highlight-color: transparent; &:hover { - background: rgba(0, 0, 0, 0.025); + background: rgba(0, 0, 0, 0.025); } + } } - .breadcrumb-container { - float: left; + .avatar-container { + margin-right: 50px; + + .avatar-wrapper { + margin-top: 5px; + position: relative; + cursor: pointer; + + .user-avatar { + cursor: pointer; + width: 40px; + height: 40px; + border-radius: 10px; + } + + .el-icon-caret-bottom { + cursor: pointer; + position: absolute; + right: -20px; + top: 25px; + font-size: 12px; + } + } } + } +} - .right-menu { - float: right; - height: 100%; - line-height: 50px; - - &:focus { - outline: none; - } - - .right-menu-item { - display: inline-block; - padding: 0 8px; - height: 100%; - font-size: 18px; - color: #5a5e66; - vertical-align: text-bottom; - - &.hover-effect { - cursor: pointer; - transition: background 0.3s; - - &:hover { - background: rgba(0, 0, 0, 0.025); - } - } - } - - .avatar-container { - margin-right: 50px; - - .avatar-wrapper { - margin-top: 5px; - position: relative; - cursor: pointer; - - .user-avatar { - cursor: pointer; - width: 40px; - height: 40px; - border-radius: 10px; - } - - .el-icon-caret-bottom { - cursor: pointer; - position: absolute; - right: -20px; - top: 25px; - font-size: 12px; - } - } - } - } +.el-dropdown-menu { + max-height: 400px; + /*璁剧疆鑿滃崟楂樺害涓�200px*/ + overflow-y: auto; + /*璁剧疆婊氬姩鏉�*/ } </style> -- Gitblit v1.8.0