95 lines
1.9 KiB
Vue
95 lines
1.9 KiB
Vue
<template>
|
||
<view class="tree-container">
|
||
<view v-for="(node, index) in data" :key="index" class="tree-node">
|
||
<!-- 修改:添加库存数显示 -->
|
||
<view class="node-content" @click="handleNodeClick(node)">
|
||
<text class="node-label">{{ node[defaultProps.label] }}</text>
|
||
<!-- 关键:只在最后一级节点显示库存数 -->
|
||
<text v-if="!node[defaultProps.children] && node.storageNum" class="storage-num">
|
||
({{ node.storageNum }})
|
||
</text>
|
||
</view>
|
||
<!-- 始终显示子节点 -->
|
||
<view class="children-container">
|
||
<leo-tree :data="node[defaultProps.children]" :defaultProps="defaultProps" @node-click="handleNodeClick"></leo-tree>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
name: 'leoTree',
|
||
props: {
|
||
data: {
|
||
type: Array,
|
||
default: () => []
|
||
},
|
||
defaultProps: {
|
||
type: Object,
|
||
default: () => ({
|
||
id: 'id',
|
||
children: 'children',
|
||
label: 'label'
|
||
})
|
||
},
|
||
// 添加默认展开所有节点的属性
|
||
defaultExpandAll: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
},
|
||
methods: {
|
||
handleNodeClick(node) {
|
||
this.$emit('node-click', node)
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
.tree-container {
|
||
width: 100%;
|
||
}
|
||
|
||
.tree-node {
|
||
padding: 4rpx 0;
|
||
}
|
||
|
||
.node-content {
|
||
display: flex;
|
||
align-items: center;
|
||
padding: 12rpx 16rpx;
|
||
cursor: pointer;
|
||
font-size: 28rpx;
|
||
/* 添加:让标签和库存数在一行显示 */
|
||
justify-content: space-between;
|
||
}
|
||
|
||
.node-content:hover {
|
||
background-color: #f5f7fa;
|
||
}
|
||
|
||
.node-label {
|
||
flex: 1;
|
||
color: #333;
|
||
}
|
||
|
||
/* 新增:库存数样式 */
|
||
.storage-num {
|
||
font-size: 28rpx;
|
||
color: #666;
|
||
margin-left: 10rpx;
|
||
}
|
||
|
||
/* 移除三角图标样式 */
|
||
.arrow-icon {
|
||
display: none !important;
|
||
}
|
||
|
||
.children-container {
|
||
padding-left: 32rpx;
|
||
border-left: 1rpx solid #e8e8e8;
|
||
margin-left: 16rpx;
|
||
}
|
||
</style> |