mirror of
https://gitee.com/ccnetcore/Yi
synced 2026-04-24 02:16:36 +08:00
84 lines
1.7 KiB
Vue
84 lines
1.7 KiB
Vue
<template>
|
|
<v-list-group :group="group" :prepend-icon="item.menuIcon" eager v-bind="$attrs">
|
|
<template v-slot:activator>
|
|
<v-list-item-icon
|
|
v-if="!item.menuIcon && !item.avatar"
|
|
class="text-caption text-uppercase text-center my-2 align-self-center"
|
|
style="margin-top: 14px"
|
|
>
|
|
{{ title }}
|
|
</v-list-item-icon>
|
|
|
|
<v-list-item-avatar v-if="item.avatar">
|
|
<v-img :src="item.avatar" />
|
|
</v-list-item-avatar>
|
|
|
|
<v-list-item-content v-if="item.menuName">
|
|
<v-list-item-title v-text="item.menuName" />
|
|
</v-list-item-content>
|
|
</template>
|
|
|
|
<template v-for="(child, i) in item.children">
|
|
<default-list-group
|
|
v-if="child.children"
|
|
:key="`sub-group-${i}`"
|
|
:item="child"
|
|
/>
|
|
|
|
<default-list-item
|
|
v-if="!child.children"
|
|
:key="`child-${i}`"
|
|
:item="child"
|
|
/>
|
|
</template>
|
|
</v-list-group>
|
|
</template>
|
|
|
|
<script>
|
|
// Utilities
|
|
// import { get } from 'vuex-pathify'
|
|
|
|
export default {
|
|
name: "DefaultListGroup",
|
|
|
|
components: {
|
|
DefaultListItem: () => import("./ListItem"),
|
|
},
|
|
|
|
props: {
|
|
item: {
|
|
type: Object,
|
|
default: () => ({}),
|
|
},
|
|
},
|
|
|
|
computed: {
|
|
group() {
|
|
return this.genGroup(this.item.children);
|
|
},
|
|
title() {
|
|
const matches = this.item.menuName.match(/\b(\w)/g);
|
|
if (matches != null) {
|
|
return matches.join("");
|
|
}
|
|
},
|
|
},
|
|
|
|
methods: {
|
|
genGroup(items) {
|
|
return items
|
|
.reduce((acc, cur) => {
|
|
if (!cur.router) return acc;
|
|
|
|
acc.push(
|
|
cur.children ? this.genGroup(cur.children) : cur.router.slice(1, -1)
|
|
);
|
|
|
|
return acc;
|
|
}, [])
|
|
.join("|");
|
|
},
|
|
},
|
|
};
|
|
</script>
|