103 lines
3.1 KiB
Vue
103 lines
3.1 KiB
Vue
|
<script setup lang="ts">
|
|||
|
import { computed } from "vue";
|
|||
|
import { clone } from "@pureadmin/utils";
|
|||
|
import { transformI18n } from "@/plugins/i18n";
|
|||
|
import ElTreeLine from "@/components/ReTreeLine";
|
|||
|
import { extractPathList, deleteChildren } from "@/utils/tree";
|
|||
|
import { usePermissionStoreHook } from "@/store/modules/permission";
|
|||
|
|
|||
|
defineOptions({
|
|||
|
name: "LineTree"
|
|||
|
});
|
|||
|
|
|||
|
const menusTree = clone(usePermissionStoreHook().wholeMenus, true);
|
|||
|
const menusData = computed(() => {
|
|||
|
return deleteChildren(menusTree);
|
|||
|
});
|
|||
|
const expandedKeys = extractPathList(menusData.value);
|
|||
|
const dataProps = {
|
|||
|
value: "uniqueId",
|
|||
|
children: "children"
|
|||
|
};
|
|||
|
</script>
|
|||
|
|
|||
|
<template>
|
|||
|
<el-card shadow="never">
|
|||
|
<template #header>
|
|||
|
<div class="card-header">
|
|||
|
<p class="font-medium">
|
|||
|
扩展 Elemenet Plus 的树形组件包括虚拟树组件,支持连接线
|
|||
|
</p>
|
|||
|
<el-link
|
|||
|
class="mt-2"
|
|||
|
href="https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/able/line-tree.vue"
|
|||
|
target="_blank"
|
|||
|
>
|
|||
|
代码位置 src/views/able/line-tree.vue
|
|||
|
</el-link>
|
|||
|
</div>
|
|||
|
</template>
|
|||
|
|
|||
|
<el-row :gutter="24">
|
|||
|
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" class="mb-[20px]">
|
|||
|
<el-card shadow="never">
|
|||
|
<template #header>
|
|||
|
<div class="card-header">普通树结构</div>
|
|||
|
</template>
|
|||
|
<div class="max-h-[550px] overflow-y-auto">
|
|||
|
<el-tree
|
|||
|
:data="menusData"
|
|||
|
:props="dataProps"
|
|||
|
show-checkbox
|
|||
|
default-expand-all
|
|||
|
node-key="uniqueId"
|
|||
|
:indent="30"
|
|||
|
><template v-slot:default="{ node }">
|
|||
|
<el-tree-line :node="node" :showLabelLine="true">
|
|||
|
<template v-slot:node-label>
|
|||
|
<span class="text-sm">
|
|||
|
{{ transformI18n(node.data.meta.title) }}
|
|||
|
</span>
|
|||
|
</template>
|
|||
|
</el-tree-line>
|
|||
|
</template>
|
|||
|
</el-tree>
|
|||
|
</div>
|
|||
|
</el-card>
|
|||
|
</el-col>
|
|||
|
|
|||
|
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
|||
|
<el-card shadow="never">
|
|||
|
<template #header>
|
|||
|
<div class="card-header">虚拟树结构</div>
|
|||
|
</template>
|
|||
|
<div class="max-h-[550px] overflow-y-auto">
|
|||
|
<el-tree-v2
|
|||
|
:data="menusData"
|
|||
|
:props="dataProps"
|
|||
|
show-checkbox
|
|||
|
:height="550"
|
|||
|
:default-expanded-keys="expandedKeys"
|
|||
|
>
|
|||
|
<template v-slot:default="{ node }">
|
|||
|
<el-tree-line
|
|||
|
:node="node"
|
|||
|
:treeData="menusData"
|
|||
|
:showLabelLine="true"
|
|||
|
:indent="30"
|
|||
|
>
|
|||
|
<template v-slot:node-label>
|
|||
|
<span class="text-sm">
|
|||
|
{{ transformI18n(node.data.meta.title) }}
|
|||
|
</span>
|
|||
|
</template>
|
|||
|
</el-tree-line>
|
|||
|
</template>
|
|||
|
</el-tree-v2>
|
|||
|
</div>
|
|||
|
</el-card>
|
|||
|
</el-col>
|
|||
|
</el-row>
|
|||
|
</el-card>
|
|||
|
</template>
|