| | |
| | | <template> |
| | | <el-container class="layout"> |
| | | <app-header></app-header> |
| | | <app-header :menu-path="activeMenuPath"></app-header> |
| | | <el-container class="layout-body"> |
| | | <el-aside width="228px" class="layout-aside"> |
| | | <div class="aside-caption">业务导航</div> |
| | |
| | | </el-aside> |
| | | <el-main class="layout-main"> |
| | | <div class="mdi-tabbar"> |
| | | <div class="mdi-caption"><i class="el-icon-document-copy"></i><span>工作区</span></div> |
| | | <div ref="tabScroll" class="mdi-tabs-scroll"> |
| | | <div class="mdi-tabs"> |
| | | <div |
| | |
| | | canCloseOthers() { |
| | | const keepCount = this.activeDoc && this.activeDoc.pinned ? 1 : 2 |
| | | return this.openDocs.length > keepCount |
| | | }, |
| | | activeMenuPath() { |
| | | const path = this.findMenuPath(this.menus, this.$route.path) |
| | | if (path.length) return path |
| | | return this.$route.meta.title ? [this.$route.meta.title] : [] |
| | | } |
| | | }, |
| | | watch: { |
| | |
| | | if (!this.openDocs.some(doc => doc.pinned)) { |
| | | this.openDocs.unshift({ ...HOME_DOC }) |
| | | } |
| | | }, |
| | | findMenuPath(items, targetPath, trail = []) { |
| | | for (const item of items || []) { |
| | | const nextTrail = [...trail, item.name] |
| | | if (item.url === targetPath) return nextTrail |
| | | const childPath = this.findMenuPath(item.children, targetPath, nextTrail) |
| | | if (childPath.length) return childPath |
| | | } |
| | | return [] |
| | | }, |
| | | resolveTitle(route) { |
| | | if (route.path.startsWith('/reports/')) { |
| | |
| | | word-break: break-word; |
| | | } |
| | | .mdi-tabbar { display: flex; flex: 0 0 40px; align-items: stretch; height: 40px; padding-top: 5px; border-bottom: 1px solid #cfdae5; background: #e3eaf1; } |
| | | .mdi-caption { display: flex; flex: 0 0 auto; align-items: center; gap: 6px; padding: 0 12px; border-right: 1px solid rgba(125, 147, 169, .22); color: #64788d; font-size: 12px; } |
| | | .mdi-caption i { color: #2c7fb8; font-size: 15px; } |
| | | .mdi-tabs-scroll { flex: 1; min-width: 0; overflow-x: auto; overflow-y: hidden; } |
| | | .mdi-tabs { display: inline-flex; align-items: flex-end; min-width: 100%; height: 100%; padding: 0 4px; } |
| | | .mdi-tab { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 6px; max-width: 220px; height: 34px; margin-right: 2px; padding: 0 9px; border: 1px solid transparent; border-bottom: 0; border-radius: 4px 4px 0 0; color: #5c6f82; background: rgba(255, 255, 255, .42); cursor: pointer; font-size: 13px; user-select: none; } |