2022-12-05 23:01:12 +08:00
|
|
|
<template>
|
2024-03-23 17:21:39 +08:00
|
|
|
<el-sub-menu :index="menu?.path" :class="subMenuClass" v-if="menu?.children?.length" :key="menu?.path">
|
2022-12-05 23:01:12 +08:00
|
|
|
<template #title>
|
|
|
|
<el-icon>
|
2023-03-04 09:59:23 +08:00
|
|
|
<Icon :name="menu?.meta?.icon" v-if="menu?.meta?.icon" class="text-sm" />
|
2022-12-05 23:01:12 +08:00
|
|
|
</el-icon>
|
|
|
|
<span>{{ menu?.meta?.title }}</span>
|
|
|
|
</template>
|
2023-03-04 09:59:23 +08:00
|
|
|
<slot />
|
2022-12-05 23:01:12 +08:00
|
|
|
</el-sub-menu>
|
|
|
|
|
2024-04-02 10:48:10 +08:00
|
|
|
<el-menu-item v-else class="ct-menu-item" :index="menu?.path" @click="isMiniScreen() && store.changeExpaned()" :key="menu?.path">
|
2022-12-05 23:01:12 +08:00
|
|
|
<el-icon>
|
2023-03-04 09:59:23 +08:00
|
|
|
<Icon :name="menu?.meta?.icon" v-if="menu?.meta?.icon" class="text-sm" />
|
2022-12-05 23:01:12 +08:00
|
|
|
</el-icon>
|
2023-05-28 14:22:01 +08:00
|
|
|
<span v-if="menu?.path.indexOf('https://') !== -1 || menu?.path.indexOf('http://') !== -1">
|
|
|
|
<span @click="openUrl(menu?.path as string)">{{ menu?.meta?.title }}</span>
|
|
|
|
</span>
|
|
|
|
<span v-else>{{ menu?.meta?.title }}</span>
|
2022-12-05 23:01:12 +08:00
|
|
|
</el-menu-item>
|
|
|
|
</template>
|
|
|
|
|
2023-05-28 14:22:01 +08:00
|
|
|
<script lang="ts" setup>
|
2022-12-05 23:01:12 +08:00
|
|
|
import { Menu } from '/admin/types/Menu'
|
2023-05-28 14:22:01 +08:00
|
|
|
import { PropType } from 'vue'
|
2022-12-05 23:01:12 +08:00
|
|
|
import { useAppStore } from '/admin/stores/modules/app'
|
2023-01-12 17:01:44 +08:00
|
|
|
import { isMiniScreen } from '/admin/support/helper'
|
2022-12-05 23:01:12 +08:00
|
|
|
|
|
|
|
const store = useAppStore()
|
|
|
|
|
|
|
|
defineProps({
|
|
|
|
subMenuClass: {
|
|
|
|
type: String,
|
|
|
|
require: true,
|
|
|
|
default: '',
|
|
|
|
},
|
|
|
|
|
|
|
|
menu: {
|
|
|
|
type: Object as PropType<Menu>,
|
|
|
|
require: true,
|
|
|
|
},
|
|
|
|
})
|
2023-05-28 14:22:01 +08:00
|
|
|
|
|
|
|
const openUrl = (path: string) => {
|
|
|
|
const start = path.indexOf('https://') || path.indexOf('http://')
|
|
|
|
window.open(path.substring(start))
|
|
|
|
return false
|
|
|
|
}
|
2022-12-05 23:01:12 +08:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
:deep(.el-menu) {
|
|
|
|
background-color: var(--sider-sub-menu-bg-color);
|
|
|
|
}
|
|
|
|
|
|
|
|
.ct-menu-item:hover {
|
|
|
|
background-color: var(--sider-sub-menu-hover-bg-color) !important;
|
|
|
|
}
|
|
|
|
|
|
|
|
:deep(.children-menu .el-sub-menu__title) {
|
|
|
|
background-color: var(--sider-sub-menu-bg-color) !important;
|
|
|
|
}
|
|
|
|
|
|
|
|
:deep(.el-menu-item-group__title) {
|
|
|
|
padding: 0;
|
|
|
|
}
|
2023-01-12 17:01:44 +08:00
|
|
|
</style>
|