| | |
| | | <template>
|
| | | <div class="navbar">
|
| | | <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
|
| | |
|
| | | <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
|
| | |
|
| | | <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>
|
| | | <el-dropdown-menu slot="dropdown">
|
| | | <router-link to="/user/profile">
|
| | | <el-dropdown-item>个人中心</el-dropdown-item>
|
| | | </router-link>
|
| | | <el-dropdown-item>
|
| | | <span @click="setting = true">布局设置</span>
|
| | | </el-dropdown-item>
|
| | | <el-dropdown-item divided @click.native="logout">
|
| | | <span>退出登录</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 Screenfull from '@/components/Screenfull'
|
| | | import SizeSelect from '@/components/SizeSelect'
|
| | | import Search from '@/components/HeaderSearch'
|
| | | import RuoYiGit from '@/components/RuoYi/Git'
|
| | | import RuoYiDoc from '@/components/RuoYi/Doc'
|
| | |
|
| | | export default {
|
| | | components: {
|
| | | Breadcrumb,
|
| | | 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
|
| | | })
|
| | | }
|
| | | }
|
| | | },
|
| | | methods: {
|
| | | toggleSideBar() {
|
| | | this.$store.dispatch('app/toggleSideBar')
|
| | | },
|
| | | async logout() {
|
| | | this.$confirm('确定注销并退出系统吗?', '提示', {
|
| | | confirmButtonText: '确定',
|
| | | cancelButtonText: '取消',
|
| | | type: 'warning'
|
| | | }).then(() => {
|
| | | this.$store.dispatch('LogOut').then(() => {
|
| | | location.reload()
|
| | | })
|
| | | })
|
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss" scoped>
|
| | | .navbar {
|
| | | height: 50px;
|
| | | overflow: hidden;
|
| | | position: relative;
|
| | | background: #fff;
|
| | | box-shadow: 0 1px 4px rgba(0,21,41,.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;
|
| | | }
|
| | |
|
| | | .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 {
|
| | | 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;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | </style>
|
| | | <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 flex align-center"> |
| | | <template v-if="device!=='mobile' "> |
| | | <el-select v-model="companyName" |
| | | clearable |
| | | filterable |
| | | reserve-keyword |
| | | placeholder="请选择租户" |
| | | v-if="userId === 1" |
| | | @change="dynamicTenantEvent" |
| | | @clear="dynamicClearEvent"> |
| | | <el-option |
| | | v-for="item in tenantList" |
| | | :key="item.tenantId" |
| | | :label="item.companyName" |
| | | :value="item.tenantId"> |
| | | </el-option> |
| | | <svg-icon slot="prefix" icon-class="company" class="el-input__icon input-icon" /> |
| | | </el-select> |
| | | |
| | | <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> |
| | | <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> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { mapGetters } from 'vuex' |
| | | import Breadcrumb from '@/components/Breadcrumb' |
| | | import TopNav from '@/components/TopNav' |
| | | import Hamburger from '@/components/Hamburger' |
| | | import Screenfull from '@/components/Screenfull' |
| | | import SizeSelect from '@/components/SizeSelect' |
| | | import Search from '@/components/HeaderSearch' |
| | | import RuoYiGit from '@/components/RuoYi/Git' |
| | | import RuoYiDoc from '@/components/RuoYi/Doc' |
| | | import { tenantList } from "@/api/login"; |
| | | import { dynamicClear, dynamicTenant } from "@/api/system/tenant"; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | userId: this.$store.getters.userId, |
| | | tenantId: undefined, |
| | | companyName: undefined, |
| | | tenantList: [], |
| | | userList: [] |
| | | } |
| | | }, |
| | | 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 |
| | | }) |
| | | } |
| | | }, |
| | | topNav: { |
| | | get() { |
| | | return this.$store.state.settings.topNav |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | // 动态切换 |
| | | dynamicTenantEvent(tenantId) { |
| | | if (this.companyName != null && this.companyName !== '') { |
| | | dynamicTenant(tenantId).then(res => { |
| | | this.$tab.closeAllPage() |
| | | this.$router.push('/') |
| | | }); |
| | | } |
| | | }, |
| | | dynamicClearEvent() { |
| | | dynamicClear().then(res => { |
| | | this.$tab.closeAllPage() |
| | | this.$router.push('/') |
| | | }); |
| | | }, |
| | | // 租户列表 |
| | | getTenantList() { |
| | | tenantList().then(res => { |
| | | this.tenantList = res.data; |
| | | }); |
| | | }, |
| | | toggleSideBar() { |
| | | this.$store.dispatch('app/toggleSideBar') |
| | | }, |
| | | async logout() { |
| | | this.$confirm('确定注销并退出系统吗?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$store.dispatch('LogOut').then(() => { |
| | | location.href = process.env.VUE_APP_CONTEXT_PATH + "index"; |
| | | }) |
| | | }).catch(() => {}); |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | |
| | | .flex { |
| | | display: flex; |
| | | } |
| | | |
| | | .align-center { |
| | | align-items: center; |
| | | } |
| | | |
| | | .navbar { |
| | | height: 50px; |
| | | overflow: hidden; |
| | | position: relative; |
| | | background: #fff; |
| | | box-shadow: 0 1px 4px rgba(0,21,41,.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 { |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |