vue2 根据树形数据结构,生成表格支持合并表格

根据树形结构数据生成table表格,支持合并表格。

<template>

    <div>

        <table border="1">

            <thead>

                <tr>

                    <!-- 循环渲染表头 -->

                    <th v-for="header in th" :key="header">{{ header }}</th>

                </tr>

            </thead>

            <tbody>

                <!-- 循环渲染列表数据 -->

                <template v-for="(item, index) in list">

                    <tr :key="index">

                        <!-- 第一列,根据子项数量确定 rowspan -->

                        <td :rowspan="getRowSpan(item)">{{ item.label }}</td>

                        <!-- 第二列,如果没有子项则显示 sum -->

                        <td v-if="!item.children">{{ item.sum }}</td>

                    </tr>

                    <template v-if="item.children">

                        <template v-for="(child, childIndex) in item.children">

                            <tr v-if="!child.children" :key="childIndex">

                                <!-- 子项的第一列和第二列 -->

                                <td>{{ child.label }}</td>

                                <td>-</td>

                                <td>{{ child.sum }}</td>

                            </tr>

                            <tr v-else>

                                <!-- 子项有孙子项时只显示第一列,并设置 rowspan -->

                                <td :rowspan="getRowSpan(child)">{{ child.label }}</td>

                            </tr>

                            <template v-if="child.children">

                                <template v-for="(grandChild, grandChildIndex) in child.children">

                                    <tr :key="'gc-' + grandChildIndex">

                                        <!-- 孙子项的第一列和第二列 -->

                                        <td>{{ grandChild.label }}</td>

                                        <td>{{ grandChild.sum }}</td>

                                    </tr>

                                </template>

                            </template>

                        </template>

                    </template>

                </template>

            </tbody>

        </table>

    </div>

</template>

<script>

export default {

    data() {

        return {

            // 表头数据

            th: ["客户来源", "测试数量数"],

            // 主要数据列表

            list: [

                {

                    label: "用户录入",

                    sum: 266,

                    children: [

                        { label: "未出现", sum: 136 },

                        {

                            label: "已清理", sum: 0, children: [

                                { label: "互联网", sum: 0 },

                                { label: "局域网", sum: 1 }

                            ]

                        },

                        { label: "无需核实", sum: 130 }

                    ]

                },

                {

                    label: "流量发现",

                    sum: 496,

                    children: [

                        { label: "已核实", sum: 337 },

                        {

                            label: "已忽略",

                            sum: 1,

                            children: [

                                { label: "互联网", sum: 0 },

                                { label: "局域网", sum: 1 }

                            ]

                        },

                        {

                            label: "新出现",

                            sum: 158,

                            children: [

                                { label: "互联网", sum: 127 },

                                { label: "局域网", sum: 31 }

                            ]

                        }

                    ]

                }

            ]

        };

    },

    methods: {

        // 递归计算 rowspan 的值

        getRowSpan(item) {

            let count = 1;

            if (item.children) {

                for (let child of item.children) {

                    count += this.getRowSpan(child);

                }

            }

            return count;

        }

    }

};

</script>

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
树形结构表格是一种常见的数据结构,它可以用来表示层次结构的数据。在树形结构表格中,每个节点可以包含多个子节点,而子节点又可以继续包含子节点,形成一棵树状结构。 一般来说,树形结构表格有两种形式:一种是左侧有树形结构,右侧有数据表格;另一种是树形结构和数据表格合并在一起,通过缩进表示节点的级别。 下面是一个树形结构表格的例子,以左侧有树形结构、右侧有数据表格的形式展示: ``` +------+-----------------+-------+ | 编号 | 名称 | 数量 | +------+-----------------+-------+ | 1 | 电子产品 | - | | 1.1 | 手机 | 10000 | | 1.2 | 平板电脑 | 5000 | | 2 | 家具 | - | | 2.1 | 沙发 | 2000 | | 2.2 | 餐桌椅 | 3000 | | 3 | 食品 | - | | 3.1 | 饼干 | 1000 | | 3.2 | 巧克力 | 500 | +------+-----------------+-------+ ``` 在这个例子中,左侧的树形结构表示了三个节点,分别是电子产品、家具和食品,其中电子产品节点下面有手机和平板电脑两个子节点,家具节点下面有沙发和餐桌椅两个子节点,食品节点下面有饼干和巧克力两个子节点。右侧的数据表格则列出了每个节点对应的数据,包括编号、名称和数量。其中,电子产品、家具和食品节点的数量为“-”,表示它们本身不是具体的商品,而只是分类节点。 树形结构表格可以方便地展示层次结构的数据,并且可以通过节点的展开和折叠来控制显示的层级。在实际应用中,树形结构表格常用于商品分类、组织架构等场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值