<template>
<div class="menu-cascader-second">
<div :class="['menu-cascader-second-title']" :style="{ width }">
{{ renderMenuTitle(menu) }}
</div>
<div class="menu-cascader-second-item-wrap" :style="{ width }">
<SecondCascaderMenuItem
v-for="leaf in menu.children || []"
:key="leaf.id"
:menu="leaf"
:active-menu="activeMenu"
:on-menu-click="onMenuClick || ((menu) => {})"
/>
</div>
</div>
</template>
<script setup lang="ts">
import { type TreeMenuItem } from 'cube-front/core/stores/menu';
import { renderMenuTitle } from 'cube-front/core/utils/menuHelpers';
import SecondCascaderMenuItem from './SecondCascaderMenuItem.vue';
import { computed } from 'vue';
/**
* 二级层å èœå•组件Props接å£å®šä¹‰
*/
interface SecondCascaderMenuProps {
/** èœå•项 */
menu: TreeMenuItem;
/** 宽度 */
width: string;
/** å•行èœå•é¡¹æ•°é‡ */
menuItemColumns: number;
/** 激活èœå•项 */
activeMenu?: TreeMenuItem;
/** èœå•点击回调函数 */
onMenuClick?: (menu: TreeMenuItem) => void;
}
const props = defineProps<SecondCascaderMenuProps>();
const menuItemColumns = computed(() => props.menuItemColumns);
</script>
<style lang="scss" scoped>
.menu-cascader-second {
padding-bottom: 16px;
.menu-cascader-second-title {
letter-spacing: 0;
height: 40px;
margin-left: 16px;
padding-left: 20px;
color: #333;
font-weight: 700;
border-bottom: 1px solid #f1f1f1;
font-size: 16px;
line-height: 40px;
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
white-space: nowrap;
}
.menu-cascader-second-item-wrap {
margin-top: 8px;
display: grid;
grid-template-columns: repeat(v-bind(menuItemColumns), 1fr);
width: 100%;
gap: 0;
}
}
</style>
|