yufei0306
7 months ago
4 changed files with 152 additions and 3 deletions
@ -0,0 +1,109 @@ |
|||
<script lang="tsx"> |
|||
import { defineComponent, computed } from 'vue' |
|||
import { useRouter } from 'vue-router' |
|||
import { useAppStore } from '@/store/modules/app' |
|||
import { isUrl } from '@/utils/is' |
|||
import { pathResolve } from '@/utils/routerHelper' |
|||
import type { RouteMeta } from 'vue-router' |
|||
import { ElMenu, ElMenuItem } from 'element-plus' |
|||
import { usePermissionStore } from '@/store/modules/permission' |
|||
import { hasOneShowingChild } from '@/layout/components/Menu/src/helper' |
|||
import { useRenderMenuTitle } from '@/layout/components/Menu/src/components/useRenderMenuTitle' |
|||
// 头部工具 |
|||
import { useDesign } from '@/hooks/web/useDesign' |
|||
const { getPrefixCls, variables } = useDesign() |
|||
const appStore = useAppStore() |
|||
const layout = computed(() => appStore.getLayout) |
|||
|
|||
const prefixCls = getPrefixCls('tool-header') |
|||
const permissionStore = usePermissionStore() |
|||
const routers = computed(() => |
|||
unref(layout) === 'cutMenu' ? permissionStore.getMenuTabRouters : permissionStore.getRouters |
|||
) |
|||
|
|||
const getPath = (route) => { |
|||
let routePath = route.path |
|||
if(routePath.startsWith('/')){ |
|||
routePath = route.path |
|||
}else{ |
|||
routePath = '/'+route.path |
|||
} |
|||
if(route.redirect){ |
|||
return route.redirect |
|||
}else if(route.children){ |
|||
return routePath+getPath(route.children[0]) |
|||
}else{ |
|||
return routePath |
|||
} |
|||
} |
|||
|
|||
export default defineComponent({ |
|||
name: 'CategoryHeader', |
|||
setup() { |
|||
console.log('useRouter()',useRouter()) |
|||
const { push } = useRouter() |
|||
// backgroundColor="var(--left-menu-bg-color)" |
|||
// textColor="var(--left-menu-text-color)" |
|||
return () => ( |
|||
<div |
|||
id={`${variables.namespace}-tool-header`} |
|||
class={[ |
|||
prefixCls, |
|||
'h-[var(--top-tool-height)] relative px-[var(--top-tool-p-x)] flex items-center justify-between', |
|||
'dark:bg-[var(--el-bg-color)]' |
|||
]} |
|||
> |
|||
<ElMenu style="width:100%" |
|||
mode="horizontal" |
|||
backgroundColor="white" |
|||
textColor="var(--left-menu-bg-color)" |
|||
activeTextColor="var(--left-menu-text-active-color)" |
|||
> |
|||
{{ |
|||
default: () => { |
|||
const { renderMenuTitle } = useRenderMenuTitle() |
|||
const categoryRouters = unref(routers).filter(item=>item.meta.hidden!=true&&item.path!='/') |
|||
console.log('categoryRouters==',categoryRouters) |
|||
{/* default: () => renderMenuTitle(onlyOneChild ? onlyOneChild?.meta : meta) */} |
|||
return categoryRouters.map((v) => { |
|||
const meta = (v.meta ?? {}) as RouteMeta |
|||
const { onlyOneChild } = hasOneShowingChild(v.children, v) |
|||
const fullPath = isUrl(v.path) ? v.path : pathResolve('/', v.path) // getAllParentPath<AppRouteRecordRaw>(allRouters, v.path).join('/') |
|||
|
|||
return ( |
|||
<ElMenuItem index={fullPath} onClick={()=>{ |
|||
console.log(v) |
|||
appStore.setCategoryRoutePath(v.path) |
|||
}}> |
|||
{{ |
|||
default: () => renderMenuTitle(meta.title?meta:onlyOneChild?.meta) |
|||
}} |
|||
</ElMenuItem> |
|||
) |
|||
}) |
|||
} |
|||
}} |
|||
</ElMenu> |
|||
|
|||
</div> |
|||
) |
|||
} |
|||
}) |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
$prefix-cls: #{$namespace}-tool-header; |
|||
|
|||
.#{$prefix-cls} { |
|||
transition: left var(--transition-time-02); |
|||
} |
|||
|
|||
::v-deep(.el-menu--horizontal>.el-menu-item){ |
|||
border-radius: 5px; |
|||
height: 40px; |
|||
margin-right: 10px; |
|||
background: linear-gradient(to top left,var(--left-menu-bg-color),var(--left-menu-text-color)); |
|||
} |
|||
|
|||
</style> |
|||
|
Loading…
Reference in new issue