element中table表单合并封装

 先看效果

 代码如下:有备注

<template>
    <div style="margin: 10px">
        <!-- 合并列组件 -->
        <h2>合并列组件</h2>
        <table2
            :tableList="tableList"
            :tableData="tableData"
            merge
            :amendTableData="amendTableData"
            sortIndex="qymc"
            :config="{ columnIndex: [1, 2] }"
            :slotShow="{
                show: true,
                index: [4, 5, 6]
            }"
        >
            <!-- <template v-slot="{ cellIndex, row }">
                <el-button @click="showDetail(scope)">{{
                    row[Object.keys(row)[cellIndex - 1]]
                }}</el-button>
            </template> -->
            <el-table-column>
                <template v-slot="{ cellIndex, row }">
                    <el-button @click="showDetail(scope)">{{
                        row[Object.keys(row)[cellIndex - 1]]
                    }}</el-button>
                </template>
            </el-table-column>
        </table2>
    </div>
</template>
<script setup>
import table2 from '@/components/liuxiongfei/table/index.vue';
function showDetail(val, row) {
    console.log(val, row, 'xxxxxxxxx');
}
// 序号修改函数
function amendTableData(Nosort, i) {
    tableData[i].index = Nosort;
}
const tableList = [
    { prop: 'index', label: '序号' }, //序号合并传prop=index
    { prop: 'xzqh', label: '行政区划' },
    { prop: 'qymc', label: '企业名称' },
    { prop: 'pkmc', label: '排口名称' },
    { prop: 'bjlx', label: '报警类型' },
    { prop: 'hjbjcs', label: '合计报警次数' },
    { prop: 'bjyz', label: '报警因子' },
    { prop: 'cz', label: '操作' }
];
const tableData = [
    {
        xzqh: '元和街道',
        qymc: '江苏奥达服饰有限公司',
        pkmc: '废水0#排口',
        bjlx: '水环境-日数据超标',
        hjbjcs: '0',
        bjyz: 'co0'
    },
    {
        xzqh: '元和街道',
        qymc: '江苏奥达服饰有限公司',
        pkmc: '废水1#排口1',
        bjlx: '水环境-日数据超标1',
        hjbjcs: '1',
        bjyz: 'co1'
    },
    {
        xzqh: '元和街道',
        qymc: '江苏奥达服饰有限公司2',
        pkmc: '废水2#排口2',
        bjlx: '水环境-日数据超标2',
        hjbjcs: '2',
        bjyz: 'co2'
    },
    {
        xzqh: '元和街道3',
        qymc: '江苏奥达服饰有限公司3',
        pkmc: '废水3#排口3',
        bjlx: '水环境-日数据超标3',
        hjbjcs: '3',
        bjyz: 'co3'
    },
    {
        xzqh: '元和街道3',
        qymc: '江苏奥达服饰有限公司4',
        pkmc: '废水4#排口4',
        bjlx: '水环境-日数据超标4',
        hjbjcs: '4',
        bjyz: 'co4'
    },
    {
        xzqh: '元和街道5',
        qymc: '江苏奥达服饰有限公司5',
        pkmc: '废水5#排口5',
        bjlx: '水环境-日数据超标5',
        hjbjcs: '5',
        bjyz: 'co5'
    },
    {
        xzqh: '元和街道6',
        qymc: '江苏奥达服饰有限公司6',
        pkmc: '废水6#排口6',
        bjlx: '水环境-日数据超标6',
        hjbjcs: '6',
        bjyz: 'co6'
    },
    {
        xzqh: '元和街道7',
        qymc: '江苏奥达服饰有限公司7',
        pkmc: '废水7#排口7',
        bjlx: '水环境-日数据超标7',
        hjbjcs: '7',
        bjyz: 'co7'
    },
    {
        xzqh: '元和街道8',
        qymc: '江苏奥达服饰有限公司8',
        pkmc: '废水8#排口8',
        bjlx: '水环境-日数据超标8',
        hjbjcs: '8',
        bjyz: 'co8'
    },
    {
        xzqh: '元和街道9',
        qymc: '江苏奥达服饰有限公司9',
        pkmc: '废水9#排口9',
        bjlx: '水环境-日数据超标9',
        hjbjcs: '9',
        bjyz: 'co9'
    },
    {
        xzqh: '元和街道10',
        qymc: '江苏奥达服饰有限公司10',
        pkmc: '废水10#排口10',
        bjlx: '水环境-日数据超标10',
        hjbjcs: '9',
        bjyz: 'co10'
    }
];
</script>
<style scoped></style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
可以参考下面的代码,这是一个基于Vue 2.0和Element UI的格和搜索条件的公共组件: ```vue <template> <div> <el-form v-if="showFilter" :inline="true" :model="filterForm" class="demo-form-inline"> <el-form-item v-for="item in filterItems" :label="item.label" :key="item.prop"> <el-input v-if="item.type === 'input'" v-model="filterForm[item.prop]" :placeholder="item.placeholder"></el-input> <el-select v-if="item.type === 'select'" v-model="filterForm[item.prop]" :placeholder="item.placeholder"> <el-option v-for="option in item.options" :key="option.value" :label="option.label" :value="option.value"></el-option> </el-select> </el-form-item> <el-form-item> <el-button type="primary" @click="filter">查询</el-button> <el-button @click="resetFilter">重置</el-button> </el-form-item> </el-form> <el-table :data="tableData" :columns="tableColumns" :highlight-current-row="highlightCurrentRow" :row-class-name="rowClassName" :row-style="rowStyle" :row-key="rowKey" :header-cell-style="headerCellStyle" :default-sort="defaultSort" :show-header="showHeader" :show-summary="showSummary" :sum-text="sumText" :summary-method="summaryMethod" :border="border" :stripe="stripe" :size="size" :fit="fit" :empty-text="emptyText" :loading="loading" :row-selection="rowSelection" :expand-row-keys="expandRowKeys" :tree-props="treeProps" @row-click="rowClick" @row-dblclick="rowDblclick" @current-change="currentChange" @select="select" @select-all="selectAll" @selection-change="selectionChange" @cell-mouse-enter="cellMouseEnter" @cell-mouse-leave="cellMouseLeave" @cell-click="cellClick" @cell-dblclick="cellDblclick" @header-click="headerClick" @header-contextmenu="headerContextmenu" @sort-change="sortChange" @filter-change="filterChange" @expand-change="expandChange" @select-toggle-all="selectToggleAll" @select-toggle-row="selectToggleRow" @row-contextmenu="rowContextmenu" @header-dragend="headerDragend" @row-dragend="rowDragend" @row-dragenter="rowDragenter" @row-dragleave="rowDragleave" @row-dragover="rowDragover" @row-drop="rowDrop" ref="table"> <slot></slot> </el-table> <div v-if="showPagination" class="demo-pagination"> <el-pagination :page-size="pagination.pageSize" :total="pagination.total" :current-page.sync="pagination.currentPage" :page-sizes="[10, 20, 50, 100]" @size-change="handleSizeChange" @current-change="handleCurrentChange"></el-pagination> </div> </div> </template> <script> export default { name: 'TableWithFilter', props: { tableData: { type: Array, required: true }, tableColumns: { type: Array, required: true }, pagination: { type: Object, default: () => { return { pageSize: 10, total: 0, currentPage: 1 } } }, filterItems: { type: Array, default: () => [] }, showFilter: { type: Boolean, default: true }, showPagination: { type: Boolean, default: true }, highlightCurrentRow: Boolean, rowClassName: Function, rowStyle: [Object, Function], rowKey: [String, Function], headerCellStyle: [Object, Function], defaultSort: Object, showHeader: { type: Boolean, default: true }, showSummary: Boolean, sumText: String, summaryMethod: Function, border: Boolean, stripe: Boolean, size: String, fit: { type: Boolean, default: true }, emptyText: String, loading: Boolean, rowSelection: Object, expandRowKeys: Array, treeProps: Object }, data() { return { filterForm: {} } }, methods: { filter() { this.$refs.table.setCurrentRow(null) this.$emit('filter', this.filterForm) }, resetFilter() { this.filterForm = {} this.filter() }, handleSizeChange(val) { this.$emit('size-change', val) }, handleCurrentChange(val) { this.$emit('current-change', val) }, rowClick(row, column, event) { this.$emit('row-click', row, column, event) }, rowDblclick(row, event) { this.$emit('row-dblclick', row, event) }, currentChange(currentRow, oldCurrentRow) { this.$emit('current-change', currentRow, oldCurrentRow) }, select(selection, row) { this.$emit('select', selection, row) }, selectAll(selection) { this.$emit('select-all', selection) }, selectionChange(selection) { this.$emit('selection-change', selection) }, cellMouseEnter(row, column, cell, event) { this.$emit('cell-mouse-enter', row, column, cell, event) }, cellMouseLeave(row, column, cell, event) { this.$emit('cell-mouse-leave', row, column, cell, event) }, cellClick(row, column, cell, event) { this.$emit('cell-click', row, column, cell, event) }, cellDblclick(row, column, cell, event) { this.$emit('cell-dblclick', row, column, cell, event) }, headerClick(column, event) { this.$emit('header-click', column, event) }, headerContextmenu(column, event) { this.$emit('header-contextmenu', column, event) }, sortChange({ column, prop, order }) { this.$emit('sort-change', { column, prop, order }) }, filterChange(filters) { this.$emit('filter-change', filters) }, expandChange(row, expandedRows) { this.$emit('expand-change', row, expandedRows) }, selectToggleAll(selection) { this.$emit('select-toggle-all', selection) }, selectToggleRow(row, selected) { this.$emit('select-toggle-row', row, selected) }, rowContextmenu(row, event) { this.$emit('row-contextmenu', row, event) }, headerDragend(newWidth, oldWidth, column, event) { this.$emit('header-dragend', newWidth, oldWidth, column, event) }, rowDragend(newIndex, oldIndex, row, event) { this.$emit('row-dragend', newIndex, oldIndex, row, event) }, rowDragenter(dropPosition, drag, event) { this.$emit('row-dragenter', dropPosition, drag, event) }, rowDragleave(dropPosition, drag, event) { this.$emit('row-dragleave', dropPosition, drag, event) }, rowDragover(dropPosition, drag, event) { this.$emit('row-dragover', dropPosition, drag, event) }, rowDrop(dropPosition, drag, event) { this.$emit('row-drop', dropPosition, drag, event) } } } </script> <style scoped> .demo-form-inline .el-form-item { margin-right: 20px; } .demo-pagination { margin-top: 20px; text-align: right; } </style> ``` 使用方法: ```vue <template> <div> <table-with-filter :table-data="tableData" :table-columns="tableColumns" :pagination="pagination" :filter-items="filterItems"></table-with-filter> </div> </template> <script> import TableWithFilter from '@/components/TableWithFilter' export default { components: { TableWithFilter }, data() { return { tableData: [], tableColumns: [{ prop: 'name', label: '名称' }, { prop: 'age', label: '年龄' }], pagination: { pageSize: 10, total: 0, currentPage: 1 }, filterItems: [{ prop: 'name', label: '名称', placeholder: '请输入名称', type: 'input' }, { prop: 'age', label: '年龄', placeholder: '请选择年龄', type: 'select', options: [{ label: '18岁以下', value: '<=18' }, { label: '19-30岁', value: '19-30' }, { label: '31岁以上', value: '>=31' }] }] } }, methods: { fetchData() { // 获取数据并更新tableData和pagination.total }, handleFilter(params) { // 处理搜索条件 }, handleSizeChange(size) { this.pagination.pageSize = size this.fetchData() }, handleCurrentChange(page) { this.pagination.currentPage = page this.fetchData() } } } </script> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个好好的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值