针灸质控中心平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

213 lines
5.7 KiB

<template>
<div v-if="!item.hidden">
<template
v-if="
hasOneShowingChild(item.children, item) &&
(!onlyOneChild.children || onlyOneChild.noShowingChildren) &&
!item.alwaysShow
"
>
<app-link
v-if="onlyOneChild.meta"
:to="resolvePath(onlyOneChild.path, onlyOneChild.query)"
>
<el-menu-item
:index="resolvePath(onlyOneChild.path)"
:class="{ 'submenu-title-noDropdown': !isNest }"
>
<div v-if="itmeIcon[onlyOneChild.meta.title]" class="div-img">
<img :src="itmeIcon[onlyOneChild.meta.title]" alt="" />
</div>
<div v-if="itmeIcon[onlyOneChild.meta.title]" class="div-img-gl">
<img :src="itmeIcon1[onlyOneChild.meta.title]" alt="" />
</div>
<item
:icon="onlyOneChild.meta.icon || (item.meta && item.meta.icon)"
:title="onlyOneChild.meta.title"
/>
</el-menu-item>
</app-link>
</template>
<el-submenu
v-else
ref="subMenu"
:index="resolvePath(item.path)"
popper-append-to-body
>
<template slot="title">
<div class="header">
<div v-if="itmeIcon[item.meta.title]" class="div-img">
<img :src="itmeIcon[item.meta.title]" alt="" />
</div>
<div v-if="itmeIcon1[item.meta.title]" class="div-img-gl">
<img :src="itmeIcon[item.meta.title]" alt="" />
</div>
<item
v-if="item.meta"
:icon="item.meta && item.meta.icon"
:title="item.meta.title"
/>
</div>
</template>
<sidebar-item
v-for="(child, index) in item.children"
:key="child.path + index"
:is-nest="true"
:item="child"
:base-path="resolvePath(child.path)"
class="nest-menu"
/>
</el-submenu>
</div>
</template>
<script>
import path from "path";
import { isExternal } from "@/utils/validate";
import Item from "./Item";
import AppLink from "./Link";
import FixiOSBug from "./FixiOSBug";
export default {
name: "SidebarItem",
components: { Item, AppLink },
mixins: [FixiOSBug],
props: {
// route object
item: {
type: Object,
required: true,
},
isNest: {
type: Boolean,
default: false,
},
basePath: {
type: String,
default: "",
},
sideTheme: {},
},
data() {
this.onlyOneChild = null;
return {
itmeIcon: {
首页: require("@/assets/images/home_N@1x.png"),
患者档案: require("@/assets/images/dangan_n@1x.png"),
诊疗档案: require("@/assets/images/zhenliao_n@1x.png"),
随访档案: require("@/assets/images/suifang_n@1x.png"),
我的: require("@/assets/images/me_n@1x.png"),
},
itmeIcon1: {
首页: require("@/assets/images/home_S@1x.png"),
患者档案: require("@/assets/images/dangan_s@1x.png"),
诊疗档案: require("@/assets/images/zhenliao_s@1x.png"),
随访档案: require("@/assets/images/suifang_s@1x.png"),
我的: require("@/assets/images/me_s@1x.png"),
},
};
},
methods: {
hasOneShowingChild(children = [], parent) {
if (!children) {
children = [];
}
const showingChildren = children.filter((item) => {
if (item.hidden) {
return false;
}
// Temp set(will be used if only has one showing child)
this.onlyOneChild = item;
return true;
});
// When there is only one child router, the child router is displayed by default
if (showingChildren.length === 1) {
return true;
}
// Show parent if there are no child router to display
if (showingChildren.length === 0) {
this.onlyOneChild = { ...parent, path: "", noShowingChildren: true };
return true;
}
return false;
},
resolvePath(routePath, routeQuery) {
if (isExternal(routePath)) {
return routePath;
}
if (isExternal(this.basePath)) {
return this.basePath;
}
if (routeQuery) {
let query = JSON.parse(routeQuery);
return { path: path.resolve(this.basePath, routePath), query: query };
}
return path.resolve(this.basePath, routePath);
},
},
};
</script>
<style scoped>
.div-img-gl {
display: none;
}
.nest-menu .el-menu-item {
height: 40px !important;
line-height: 40px !important;
margin-bottom: 5px;
}
#app .sidebar-container .nest-menu .is-active {
background-color: #fff !important;
}
#app .sidebar-container .nest-menu .el-menu-item {
padding: 0 !important;
min-width: 60px !important;
}
#app .sidebar-container .nest-menu .is-active:hover {
color: #fff !important;
}
>>> .el-submenu__title {
padding: 0 !important;
height: 90px !important;
line-height: 26px !important;
}
>>> .el-submenu.is-active .el-submenu__title .header {
border-radius: 6px;
color: #fff;
}
>>> .el-submenu .el-submenu__title .header {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
>>> .el-submenu .el-submenu__title .el-icon-arrow-down {
display: none;
}
</style>
<style>
#app .sidebar-container .theme-dark .is-active > .el-submenu__title {
color: #70483e !important;
background-color: #70483e !important;
}
#app .sidebar-container .theme-dark .is-active {
background-color: #5a332a;
}
#app .sidebar-container .el-menu {
box-sizing: border-box;
padding: 6px !important;
}
#app .sidebar-container .el-submenu .el-menu--inline {
padding: 0px !important;
background-color: #5a332a;
}
#app .sidebar-container .el-submenu__title:hover .header {
background-color: #5a3a32 !important;
}
</style>