Element-ui 表格 (Table) 组件中动态合并单元格

 

  <el-table :data="data" :span-method="objectSpanMethod" border class="tableArea" style="width: 100%;">
                <el-table-column label="id" prop="id" align="center"></el-table-column>
                <el-table-column label="商品类别" prop="productType" align="center" width="200"></el-table-column>
                <el-table-column label="商品数量" prop="amount" align="center"></el-table-column>
                <el-table-column label="商品价格" prop="price" align="center"></el-table-column>
                <el-table-column label="商品名称" prop="productName" width="200px" align="center"></el-table-column>
                <el-table-column label="更新时间" prop="updateTime" align="center"></el-table-column
<script>
export default {
    data() {
        return {

            tableData: [
                {
                    code: '33333333',
                    name: '张三',
                    money: '5000',
                    ftMoney: '333',
                    state: '已分摊'
                }
            ],
            data: [{
                id: "201808300001",
                productType: "纺织品",
                amount: 20,
                productName: "上衣",
                price: "80",
                updateTime: "2018-08-30",
            },
            {
                id: "201808300002",
                productType: "纺织品",
                amount: 20,
                productName: "裤子",
                price: "76",
                updateTime: "2018-08-31",
            },
            {
                id: "201808300003",
                productType: "皮制品",
                amount: 100,
                productName: "挎包",
                price: "150",
                updateTime: "2018-08-31",
            },

            {
                id: "201808300004",
                productType: "皮制品",
                amount: 180,
                productName: "鞋子",
                price: "76",
                updateTime: "2018-08-29",
            },
            {
                id: "201808300005",
                productType: "绸缎",
                amount: 80,
                productName: "旗袍",
                price: "106",
                updateTime: "2018-08-31",
            },
            {
                id: "201808300006",
                productType: "纺织品",
                amount: 20,
                productName: "短裙",
                price: "36",
                updateTime: "2018-08-30",
            },
            {
                id: "201808300007",
                productType: "纺织品",
                amount: 80,
                productName: "短袖",
                price: "36",
                updateTime: "2018-08-30",
            },
            {
                id: "201808300008",
                productType: "纺织品",
                amount: 20,
                productName: "短袖",
                price: "36",
                updateTime: "2018-08-30",
            },
            {
                id: "201808300009",
                productType: "皮制品",
                amount: 20,
                productName: "钱包",
                price: "60",
                updateTime: "2018-08-30",
            },
            {
                id: "201808300011",
                productType: "纺织品",
                amount: 90,
                productName: "手套",
                price: "60",
                updateTime: "2018-08-30",
            },
            {
                id: "201808300012",
                productType: "纺织品",
                amount: 90,
                productName: "袜子",
                price: "36",
                updateTime: "2018-08-30",
            },
            {
                id: "201808300013",
                productType: "饮料",
                amount: 100,
                productName: "雪碧",
                price: "5",
                updateTime: "2018-08-31",
            },
            {
                id: "201808300013",
                productType: "纺织品",
                amount: 100,
                productName: "风衣",
                price: "50",
                updateTime: "2018-08-31",
            },],
            spanArr: []
        };
    },


    components: {

    },
    methods: {
        getSpanArrFunc(data) {
            this.spanArr = []
            let pos
            for (let i = 0; i < data.length; i++) {
                if (i === 0) {
                    this.spanArr.push(1)
                    pos = 0
                } else if (
                    data[i].productType &&
                    data[i].productType === data[i - 1].productType
                ) {
                    this.spanArr[pos] += 1
                    this.spanArr.push(0)
                } else {
                    this.spanArr.push(1)
                    pos = i
                }
            }
        },
        //合并行
        objectSpanMethod({ rowIndex, columnIndex }) {
            if (columnIndex === 1) {
                const _row = this.spanArr[rowIndex]
                const _col = _row > 0 ? 1 : 0
                console.log(_row, _col)
                return {
                    // [0,0] 表示这一行不显示, [2,1]表示行的合并数
                    rowspan: _row,
                    colspan: _col,
                }
            }
        },

    },
    created() {

    },
    mounted() {
        this.getSpanArrFunc(this.data)
    },


    computed: {

    },


    watch: {

        cart: {

            handler(newV) {

            },
            deep: true,

            immediate: true,
        },
    },
};
</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
element-ui表格el-table本身并不支持动态合并单元格(行和列),但可以通过自定义表格的slot-scope和span-method来实现动态合并单元格的功能。首先,我们需要在表格定义时添加span-method属性,并指定一个方法来计算单元格的合并行数和列数。例如: ```html <el-table :data="tableData" :span-method="mergeCells"> ... </el-table> ``` 然后,在methods定义mergeCells方法来计算单元格的合并行数和列数。该方法有四个参数分别是({row, column, rowIndex, columnIndex}),我们可以根据需要通过判断行索引和列索引来返回合适的行数和列数,例如合并第一行的两列可以这样实现: ```javascript methods: { mergeCells({row, column, rowIndex, columnIndex}) { if (rowIndex === 0 && columnIndex < 2) { return { rowspan: 1, colspan: 2 }; } } } ``` 这样就实现了动态合并第一行的两个单元格。如果想要合并其他行或列,可以根据需要进行判断和返回。 给表头添加斜线可以通过自定义表头的样式来实现。可以通过CSS的`::before`或`::after`伪元素来添加斜线样式。例如,给第一列的表头添加斜线可以这样实现: ```html <el-table ...> <el-table-column label="姓名"> <template slot="header" slot-scope="scope"> <div class="header-wrapper"> <div class="header-content"> <span>{{scope.column.label}}</span> </div> </div> </template> </el-table-column> ... </el-table> ``` 然后在样式定义斜线效果: ```css <style> .header-content::before { content: ""; display: block; border-bottom: 1px solid #333; transform: skew(-45deg); width: 80%; margin-left: 10%; } </style> ``` 这样就实现了给第一列的表头添加斜线的效果。可以根据需要调整斜线的样式和位置来达到期望的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬加栤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值