From 6cf4bd76a2e660dbd1bf1e223372f5de966994d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8A=9B?= Date: Tue, 19 Oct 2021 21:09:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/styles/index.scss | 1 + src/assets/styles/topbar.scss | 89 ++++++++ src/components/Breadcrumb/index.vue | 81 +++++++ src/components/Hamburger/index.vue | 44 ++++ src/layout/components/Navbar.vue | 119 ++++++++++ src/layout/components/Sidebar/FixiOSBug.js | 24 ++ src/layout/components/{ => Sidebar}/Item.vue | 0 src/layout/components/Sidebar/Link.vue | 37 ++++ src/layout/components/Sidebar/Logo.vue | 82 +++++++ src/layout/components/Sidebar/SidebarItem.vue | 79 +++++++ src/layout/components/Sidebar/index.vue | 49 +++++ src/layout/components/TopMenus.vue | 31 --- src/layout/components/Topbar.vue | 207 ++++++++++++++++++ src/layout/components/index.js | 4 +- src/layout/index.vue | 39 +++- src/router/index.js | 1 + src/router/routers.js | 11 +- src/settings.js | 6 + src/store/getters.js | 3 +- src/store/modules/permission.js | 9 +- src/views/home.vue | 0 21 files changed, 875 insertions(+), 41 deletions(-) create mode 100644 src/assets/styles/topbar.scss create mode 100644 src/components/Breadcrumb/index.vue create mode 100644 src/components/Hamburger/index.vue create mode 100644 src/layout/components/Navbar.vue create mode 100644 src/layout/components/Sidebar/FixiOSBug.js rename src/layout/components/{ => Sidebar}/Item.vue (100%) create mode 100644 src/layout/components/Sidebar/Link.vue create mode 100644 src/layout/components/Sidebar/Logo.vue create mode 100644 src/layout/components/Sidebar/SidebarItem.vue create mode 100644 src/layout/components/Sidebar/index.vue delete mode 100644 src/layout/components/TopMenus.vue create mode 100644 src/layout/components/Topbar.vue create mode 100644 src/views/home.vue diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss index bf9f180..3e02dd2 100644 --- a/src/assets/styles/index.scss +++ b/src/assets/styles/index.scss @@ -5,6 +5,7 @@ @import 'sidebar'; @import 'btn'; @import 'eladmin'; +@import 'topbar.scss'; body { height: 100%; diff --git a/src/assets/styles/topbar.scss b/src/assets/styles/topbar.scss new file mode 100644 index 0000000..1419a57 --- /dev/null +++ b/src/assets/styles/topbar.scss @@ -0,0 +1,89 @@ +.top-nav { + // margin-left: $sideBarWidth; + width: 100%; + background-color: #304156; + position: fixed; + top: 0; + left: 0; + z-index: 1001; + overflow: hidden; + + .log { + padding: 0 20px; + line-height: 56px; + font-size: 24px; + font-weight: bold; + color: rgb(191, 203, 217); + float: left; + } + .el-menu { + float: left; + border: none!important; + background-color: #304156; + + .nav-item { + display: inline-block; + .el-menu-item { + color: rgb(191, 203, 217); + &:hover { + background-color: $subMenuHover !important; + } + &:focus { + background-color: $subMenuHover !important; + // color: $subMenuActiveText !important; + } + } + } + } + + .right-menu { + float: right; + height: 100%; + + &: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 .3s; + + &:hover { + background: rgba(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; + } + } + } + } +} diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000..204ea59 --- /dev/null +++ b/src/components/Breadcrumb/index.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/Hamburger/index.vue b/src/components/Hamburger/index.vue new file mode 100644 index 0000000..368b002 --- /dev/null +++ b/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue new file mode 100644 index 0000000..a0e8fe1 --- /dev/null +++ b/src/layout/components/Navbar.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/src/layout/components/Sidebar/FixiOSBug.js b/src/layout/components/Sidebar/FixiOSBug.js new file mode 100644 index 0000000..c41f7ea --- /dev/null +++ b/src/layout/components/Sidebar/FixiOSBug.js @@ -0,0 +1,24 @@ +export default { + computed: { + device() { + return this.$store.state.app.device + } + }, + mounted() { + this.fixBugIniOS() + }, + methods: { + fixBugIniOS() { + const $subMenu = this.$refs.subMenu + if ($subMenu) { + const handleMouseleave = $subMenu.handleMouseleave + $subMenu.handleMouseleave = (e) => { + if (this.device === 'mobile') { + return + } + handleMouseleave(e) + } + } + } + } +} diff --git a/src/layout/components/Item.vue b/src/layout/components/Sidebar/Item.vue similarity index 100% rename from src/layout/components/Item.vue rename to src/layout/components/Sidebar/Item.vue diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..442f157 --- /dev/null +++ b/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000..e40e6f4 --- /dev/null +++ b/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..e836529 --- /dev/null +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..b64f46e --- /dev/null +++ b/src/layout/components/Sidebar/index.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/layout/components/TopMenus.vue b/src/layout/components/TopMenus.vue deleted file mode 100644 index ade8167..0000000 --- a/src/layout/components/TopMenus.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/src/layout/components/Topbar.vue b/src/layout/components/Topbar.vue new file mode 100644 index 0000000..6386335 --- /dev/null +++ b/src/layout/components/Topbar.vue @@ -0,0 +1,207 @@ + + + diff --git a/src/layout/components/index.js b/src/layout/components/index.js index ed5e4bb..8a15045 100644 --- a/src/layout/components/index.js +++ b/src/layout/components/index.js @@ -1,2 +1,4 @@ export { default as AppMain } from './AppMain' -export { default as TopMenus } from './TopMenus' +export { default as Navbar } from './Navbar' +export { default as Sidebar } from './Sidebar' +export { default as Topbar } from './Topbar' diff --git a/src/layout/index.vue b/src/layout/index.vue index 4525f01..58c366d 100644 --- a/src/layout/index.vue +++ b/src/layout/index.vue @@ -1,24 +1,51 @@ diff --git a/src/router/index.js b/src/router/index.js index 3807bee..50ab8af 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -79,6 +79,7 @@ export const loadMenus = (next, to) => { const rewriteRoutes = filterAsyncRouter(rdata, true) rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) // 存储路由 + store.dispatch('SetNavMenus', sidebarRoutes) store.dispatch('GenerateRoutes', rewriteRoutes).then(() => { /* * 在addRoutes()之后第一次访问被添加的路由会白屏, diff --git a/src/router/routers.js b/src/router/routers.js index 7d4cd97..9ee8fe6 100644 --- a/src/router/routers.js +++ b/src/router/routers.js @@ -34,7 +34,16 @@ export const constantRouterMap = [ }, { path: '/', - component: Layout + component: Layout, + redirect: '/dashboard', + children: [ + { + path: 'dashboard', + component: (resolve) => require(['@/views/home'], resolve), + name: 'Dashboard', + meta: { title: '首页', icon: 'index', affix: true, noCache: true } + } + ] } ] diff --git a/src/settings.js b/src/settings.js index 0b67bfd..9b1166b 100644 --- a/src/settings.js +++ b/src/settings.js @@ -9,12 +9,18 @@ module.exports = { // 记住密码状态下的密码在Cookie中存储的天数,默认1天s passCookieExpires: 1, + // 是否保持一个子菜单的展开 + uniqueOpened: true, + // token key TokenKey: 'YXK-ADMIN-TOKEN', // 请求超时时间,毫秒(默认2分钟) timeout: 1200000, + // 是否显示logo + sidebarLogo: true, + // 是否显示设置底部信息 showFooter: true, diff --git a/src/store/getters.js b/src/store/getters.js index 6de172b..a373502 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -21,7 +21,8 @@ const getters = { qiNiuUploadApi: state => state.api.qiNiuUploadApi, sqlApi: state => state.api.sqlApi, swaggerApi: state => state.api.swaggerApi, - sidebarRouters: state => state.permission.sidebarRouters + sidebarRouters: state => state.permission.sidebarRouters, + navMenus: state => state.permission.navMenus } export default getters diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js index 97d6524..70ed46a 100644 --- a/src/store/modules/permission.js +++ b/src/store/modules/permission.js @@ -7,7 +7,8 @@ const permission = { state: { routers: constantRouterMap, addRouters: [], - sidebarRouters: [] + sidebarRouters: [], + navMenus: [] }, // 同步更改状态 mutations: { @@ -17,6 +18,9 @@ const permission = { }, SET_SIDEBAR_ROUTERS: (state, routers) => { state.sidebarRouters = constantRouterMap.concat(routers) + }, + SET_NAV_MENUS: (state, routers) => { + state.navMenus = routers } }, // 发送异步请求拿到数据 @@ -26,6 +30,9 @@ const permission = { }, SetSidebarRouters({ commit }, sidebarRouter) { commit('SET_SIDEBAR_ROUTERS', sidebarRouter) + }, + SetNavMenus({ commit }, sidebarRouter) { + commit('SET_NAV_MENUS', sidebarRouter) } } } diff --git a/src/views/home.vue b/src/views/home.vue new file mode 100644 index 0000000..e69de29