From 88e29ed5854ed9e62b719e4804958206c5fd9db1 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期五, 22 十一月 2024 19:30:38 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/layout/components/Navbar.vue |  409 ++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 244 insertions(+), 165 deletions(-)

diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index 466cd98..9a5141b 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -1,49 +1,75 @@
 <template>
-  <div class="navbar">
-    <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
-
-    <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
-    <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
-
-    <div class="right-menu">
-      <template v-if="device!=='mobile'">
-        <search id="header-search" class="right-menu-item" />
-
-        <el-tooltip content="婧愮爜鍦板潃" effect="dark" placement="bottom">
-          <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
-        </el-tooltip>
-
-        <el-tooltip content="鏂囨。鍦板潃" effect="dark" placement="bottom">
-          <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
-        </el-tooltip>
-
-        <screenfull id="screenfull" class="right-menu-item hover-effect" />
-
-        <el-tooltip content="甯冨眬澶у皬" effect="dark" placement="bottom">
-          <size-select id="size-select" class="right-menu-item hover-effect" />
-        </el-tooltip>
-
-      </template>
-
-      <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
-        <div class="avatar-wrapper">
-          <img :src="avatar" class="user-avatar">
-          <i class="el-icon-caret-bottom" />
+    <div class="navbar">
+        <div class="ruoyi-logo">
+            <img src="@/assets/logo/logo.png" alt="" />
+            <span>灏勬椽椤圭洰绠$悊绯荤粺</span>
         </div>
-        <el-dropdown-menu slot="dropdown">
-          <router-link to="/user/profile">
-            <el-dropdown-item>涓汉涓績</el-dropdown-item>
-          </router-link>
-          <el-dropdown-item @click.native="setting = true">
-            <span>甯冨眬璁剧疆</span>
-          </el-dropdown-item>
-          <el-dropdown-item divided @click.native="logout">
-            <span>閫�鍑虹櫥褰�</span>
-          </el-dropdown-item>
-        </el-dropdown-menu>
-      </el-dropdown>
+        <div class="right-menu flex align-center">
+            <template>
+                <search-menu ref="searchMenuRef" />
+                <el-tooltip content="鎼滅储" effect="dark" placement="bottom">
+                    <div
+                        class="right-menu-item hover-effect"
+                        @click="openSearchMenu"
+                    >
+                        <svg-icon
+                            class-name="search-icon"
+                            icon-class="search"
+                        />
+                    </div>
+                </el-tooltip>
+                <!-- 娑堟伅 -->
+                <el-tooltip content="娑堟伅" effect="dark" placement="bottom">
+                    <div class="right-menu-item hover-effect">
+                        <el-popover
+                            placement="bottom"
+                            trigger="click"
+                            transition="el-zoom-in-top"
+                            :width="300"
+                            :persistent="false"
+                        >
+                            <template #reference>
+                                <el-badge
+                                    :value="newNotice > 0 ? newNotice : ''"
+                                    :max="99"
+                                >
+                                    <svg-icon icon-class="message" />
+                                </el-badge>
+                            </template>
+                            <template #default>
+                                <notice></notice>
+                            </template>
+                        </el-popover>
+                    </div>
+                </el-tooltip>
+                <el-tooltip content="鍏ㄥ睆" effect="dark" placement="bottom">
+                    <screenfull
+                        id="screenfull"
+                        class="right-menu-item hover-effect"
+                    />
+                </el-tooltip>
+            </template>
+            <div class="avatar-container">
+                <el-dropdown
+                    class="avatar-container right-menu-item hover-effect"
+                    trigger="click"
+                >
+                    <div class="avatar-wrapper">
+                        <img :src="avatar" class="user-avatar" />
+                        <i class="el-icon-caret-bottom" />
+                    </div>
+                    <el-dropdown-menu slot="dropdown">
+                        <router-link to="/user/profile">
+                            <el-dropdown-item>涓汉涓績</el-dropdown-item>
+                        </router-link>
+                        <el-dropdown-item divided @click.native="logout">
+                            <span>閫�鍑虹櫥褰�</span>
+                        </el-dropdown-item>
+                    </el-dropdown-menu>
+                </el-dropdown>
+            </div>
+        </div>
     </div>
-  </div>
 </template>
 
 <script>
@@ -56,145 +82,198 @@
 import Search from '@/components/HeaderSearch'
 import RuoYiGit from '@/components/RuoYi/Git'
 import RuoYiDoc from '@/components/RuoYi/Doc'
+import SearchMenu from './TopBar/search.vue';
+import Notice from './Notice/index.vue';
 
 export default {
-  components: {
-    Breadcrumb,
-    TopNav,
-    Hamburger,
-    Screenfull,
-    SizeSelect,
-    Search,
-    RuoYiGit,
-    RuoYiDoc
-  },
-  computed: {
-    ...mapGetters([
-      'sidebar',
-      'avatar',
-      'device'
-    ]),
-    setting: {
-      get() {
-        return this.$store.state.settings.showSettings
-      },
-      set(val) {
-        this.$store.dispatch('settings/changeSetting', {
-          key: 'showSettings',
-          value: val
-        })
-      }
+    data() {
+        return {
+            newNotice: 0
+        }
     },
-    topNav: {
-      get() {
-        return this.$store.state.settings.topNav
-      }
-    }
-  },
-  methods: {
-    toggleSideBar() {
-      this.$store.dispatch('app/toggleSideBar')
+    components: {
+        Breadcrumb,
+        TopNav,
+        Hamburger,
+        Screenfull,
+        SizeSelect,
+        Search,
+        RuoYiGit,
+        RuoYiDoc,
+        SearchMenu,
+        Notice
     },
-    async logout() {
-      this.$confirm('纭畾娉ㄩ攢骞堕��鍑虹郴缁熷悧锛�', '鎻愮ず', {
-        confirmButtonText: '纭畾',
-        cancelButtonText: '鍙栨秷',
-        type: 'warning'
-      }).then(() => {
-        this.$store.dispatch('LogOut').then(() => {
-          location.href = '/index';
-        })
-      }).catch(() => {});
+    computed: {
+        ...mapGetters([
+            'sidebar',
+            'avatar',
+            'device'
+        ]),
+        setting: {
+            get() {
+                return this.$store.state.settings.showSettings
+            },
+            set(val) {
+                this.$store.dispatch('settings/changeSetting', {
+                    key: 'showSettings',
+                    value: val
+                })
+            }
+        },
+        topNav: {
+            get() {
+                return this.$store.state.settings.topNav
+            }
+        }
+    },
+    methods: {
+        toggleSideBar() {
+            this.$store.dispatch('app/toggleSideBar')
+        },
+        async logout() {
+            this.$confirm('纭畾娉ㄩ攢骞堕��鍑虹郴缁熷悧锛�', '鎻愮ず', {
+                confirmButtonText: '纭畾',
+                cancelButtonText: '鍙栨秷',
+                type: 'warning'
+            }).then(() => {
+                this.$store.dispatch('LogOut').then(() => {
+                    location.href = '/index';
+                })
+            }).catch(() => { });
+        },
+        openSearchMenu() {
+            this.searchMenuRef.value?.openSearch();
+        },
     }
-  }
 }
 </script>
 
 <style lang="scss" scoped>
+::v-deep.el-select .el-input__wrapper {
+    height: 30px;
+}
+
+::v-deep .el-badge__content.is-fixed {
+    top: 12px;
+}
+
+.flex {
+    display: flex;
+}
+
+.align-center {
+    align-items: center;
+}
+
+.ruoyi-logo {
+    float: left;
+    line-height: 54px;
+    font-weight: 400;
+    font-size: 24px;
+    font-style: italic;
+    font-family: PangMenZhengDao;
+    // color: #ffffff;
+    // width: 220px;
+    display: flex;
+    align-items: center;
+    > img {
+        margin: 0 10px 0 21px;
+    }
+    > div {
+        margin: 0 0 0 21px;
+    }
+    .down {
+        margin-top: 22px;
+        color: #ffffff;
+    }
+}
 .navbar {
-  height: 50px;
-  overflow: hidden;
-  position: relative;
-  background: #fff;
-  box-shadow: 0 1px 4px rgba(0,21,41,.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;
-    cursor: pointer;
-    transition: background .3s;
-    -webkit-tap-highlight-color:transparent;
-
-    &:hover {
-      background: rgba(0, 0, 0, .025)
-    }
-  }
-
-  .breadcrumb-container {
-    float: left;
-  }
-
-  .topmenu-container {
-    position: absolute;
-    left: 50px;
-  }
-
-  .errLog-container {
-    display: inline-block;
-    vertical-align: top;
-  }
-
-  .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 {
+    .hamburger-container {
+        line-height: 46px;
+        height: 100%;
+        float: left;
         cursor: pointer;
-        transition: background .3s;
+        transition: background 0.3s;
+        -webkit-tap-highlight-color: transparent;
 
         &:hover {
-          background: rgba(0, 0, 0, .025)
+            background: rgba(0, 0, 0, 0.025);
         }
-      }
     }
 
-    .avatar-container {
-      margin-right: 30px;
-
-      .avatar-wrapper {
-        margin-top: 5px;
-        position: relative;
-
-        .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;
-        }
-      }
+    .breadcrumb-container {
+        float: left;
     }
-  }
+
+    .topmenu-container {
+        position: absolute;
+        left: 50px;
+    }
+
+    .errLog-container {
+        display: inline-block;
+        vertical-align: top;
+    }
+
+    .right-menu {
+        float: right;
+        height: 100%;
+        line-height: 50px;
+        display: flex;
+
+        &: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: 40px;
+            margin-top: 10px;
+
+            .avatar-wrapper {
+                margin-top: 5px;
+                position: relative;
+
+                .user-avatar {
+                    cursor: pointer;
+                    width: 40px;
+                    height: 40px;
+                    border-radius: 10px;
+                    margin-top: 10px;
+                }
+
+                i {
+                    cursor: pointer;
+                    position: absolute;
+                    right: -20px;
+                    top: 25px;
+                    font-size: 12px;
+                }
+            }
+        }
+    }
 }
 </style>

--
Gitblit v1.8.0