1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <template>
- <el-menu-item :index="handlePath(routeChildren.path)" @click="handleLink">
- <vab-icon
- v-if="routeChildren.meta.icon"
- :icon="['fas', routeChildren.meta.icon]"
- class="vab-fas-icon"
- />
- <vab-remix-icon
- v-if="routeChildren.meta.remixIcon"
- :icon-class="routeChildren.meta.remixIcon"
- class="vab-remix-icon"
- />
- <span>{{ routeChildren.meta.title }}</span>
- <el-tag
- v-if="routeChildren.meta && routeChildren.meta.badge"
- type="danger"
- effect="dark"
- >
- {{ routeChildren.meta.badge }}
- </el-tag>
- </el-menu-item>
- </template>
- <script>
- import { isExternal } from "@/utils/validate";
- import path from "path";
- export default {
- name: "MenuItem",
- props: {
- routeChildren: {
- type: Object,
- default() {
- return null;
- },
- },
- item: {
- type: Object,
- default() {
- return null;
- },
- },
- fullPath: {
- type: String,
- default: "",
- },
- },
- methods: {
- handlePath(routePath) {
- if (isExternal(routePath)) {
- return routePath;
- }
- if (isExternal(this.fullPath)) {
- return this.fullPath;
- }
- return path.resolve(this.fullPath, routePath);
- },
- handleLink() {
- const routePath = this.routeChildren.path;
- const target = this.routeChildren.meta.target;
- if (target === "_blank") {
- if (isExternal(routePath)) {
- window.open(routePath);
- } else if (isExternal(this.fullPath)) {
- window.open(this.fullPath);
- } else if (
- this.$route.path !== path.resolve(this.fullPath, routePath)
- ) {
- let routeData = this.$router.resolve(
- path.resolve(this.fullPath, routePath)
- );
- window.open(routeData.href);
- }
- } else {
- if (isExternal(routePath)) {
- window.location.href = routePath;
- } else if (isExternal(this.fullPath)) {
- window.location.href = this.fullPath;
- } else if (
- this.$route.path !== path.resolve(this.fullPath, routePath)
- ) {
- this.$router.push(path.resolve(this.fullPath, routePath));
- }
- }
- },
- },
- };
- </script>
|