elementUI对table表格二次封装(slot支持某一列自定义;支持通过filter函数处理行数据;支持通过func判断操作列某个功能按钮是否展示)

13 篇文章 0 订阅
5 篇文章 0 订阅
<template>
    <div>
        <el-table
            v-loading="loading"
            :size="size"
            :data="tableData"
            tooltip-effect="dark"
            style="width: 100%"
            border
            width="100%"
            @selection-change="handleSelectionChange"
            ref="multipleTable"
        >
            <el-table-column v-if="multipleSelectionAble" :selectable="selectable" type="selection" width="55"></el-table-column>
            <el-table-column type="index" label="序号" width="70" v-if="showSortId"></el-table-column>
            <el-table-column
                v-for="(column,index) in tableProps"
                :key="index"
                :prop="column.prop"
                :label="column.label"
                :width="widthValue(column.width, column)"
                :min-width="widthValue(column.minWidth)"
            >
                <template slot-scope="scope">
                    <span
                        v-if="!column.slot"
                    >{{ column.filter ? column.filter(scope.row[column.prop]) : scope.row[column.prop] }}</span>
                    <slot v-else :name="column.prop" v-bind:row="scope.row"></slot>
                </template>
            </el-table-column>
            <el-table-column
                v-if="actions && actions.length > 0"
                label="操作"
                fixed="right"
                :min-width="widthValue(actionWidth)"
            >
                <template slot-scope="scope">
                    <template v-for="(action,index) in actions">
                        <el-button
                            v-if="action.judgeShow?action.judgeShow(scope.row):true"
                            :key="index"
                            @click="onAction(action.handler,scope.row,scope.$index)"
                            type="text"
                            size="mini"
                        >{{action.name}}</el-button>
                    </template>
                </template>
            </el-table-column>
        </el-table>
        <el-pagination
            v-if="pageData"
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="pageData.pageNum"
            :page-sizes="pageSizes"
            :page-size="pageData.pageSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="pageData.total"
        ></el-pagination>
    </div>
</template>

<script>
export default {
    name: 'elTables',
    props: {
        /** table表格数据 */
        tableData: { type: Array, default () { return [] } },
        /** table表格的props。 prop label必填 filter是过滤器 slot是使用插槽
         * 格式例子:[{ prop: 'name', label: '名称', slot: true,  minWidth: '100', width: '100', filter: function(){}}]
         *  slot 使用
         * <el-tables :tableProps="tableProps" :tableData="tableData" :actions="actions" :loading="loading" :actionWidth="90" :showSortId="true"
            @action="onAction">
                <template v-slot:字段名称="slotProps">     // 字段名称  是使用slot一列的prop字段名称 比如 prop: 'name' 则取name
                    行内容读取: slotProps.row.字段名称
                </template>
            </el-tables>
         */
        tableProps: { type: Array },
        /** 数据加载时的loading */
        loading: { type: Boolean, default () { return false } },
        /**
         * 通常是操作那一列
         * 格式[{ name: '查看', handler: 'onView', judgeShow: function (row) {}}]
         * handler 自定义回调, judgeShow 函数,返回true,false, 用于根据条件判断是否展示
         */
        actions: { type: Array, default () { return [] } },
        /** 操作那一列宽度 */
        actionWidth: {},
        /** 是否多选可选 */
        multipleSelectionAble: { type: Boolean, default () { return false } },
        selectable: { type: Function, default () { return function (row, index) { return true } } },
        /** 是否展示序号 */
        showSortId: { type: Boolean, default () { return false } },
        /** 行号 */
        tableIndex: { type: Number, default () { return 0 } },
        /** table的size */
        size: { type: String, default () { return 'small' } },
        /** 分页信息,如果为null则不展示分页
         * 有值的话格式{
            * pageNum: 1,
            * pageSize: 10,
            * total: 10
         * }
         */
        pageData: {
            type: Object,
            value: null
        }
    },
    data () {
        return {
            pageSizes: [2, 5, 10, 20, 50, 100] // 根据自己系统自定义
        }
    },
    methods: {
        handleSizeChange (val) {
            let { pageNum, pageSize, total } = this.pageData
            pageNum = val > pageSize && val * (pageNum - 1) >= total ? 1 : pageNum
            this.$emit('pagInfo', {
                ...this.pageData,
                pageNum: pageNum,
                pageSize: val
            })
        },
        handleCurrentChange (val) {
            this.$emit('pagInfo', {
                ...this.pageData,
                pageNum: val
            })
        },
        widthValue (width, column) {
            return width && width - 0 > 0 ? width : ''
        },
        onAction (handler, row, index) {
            this.$emit('action', handler, row, index, this.tableIndex)
        },
        handleSelectionChange (val) {
            this.$emit('multipleSelection', val)
        }
    }
}
</script>

<style scoped>
</style>

使用

<el-tables :tableProps="tableProps" :tableData="tableData" :actions="actions" :loading="loading" :actionWidth="90" @action="onAction" :pageData="pageData" @pagInfo="pagInfo">
</el-tables>

部分参数格式
在这里插入图片描述
操作列回调和使用
在这里插入图片描述

### 回答1: 在 R 中,你可以使用 apply 函数来对一个矩阵或数据框的行或进行操作。如果你想对一列进行操作,可以使用 apply 函数的第二个参数 `MARGIN` 来指定。当 `MARGIN=1` 时,表示对行进行操作;当 `MARGIN=2` 时,表示对进行操作。例如,下面的代码演示了如何对一个数据框的某一列进行求和操作: ``` # 创建数据框 df <- data.frame(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9)) # 对第二进行求和操作 sum_b <- sum(df[, 2]) ``` 如果你想对某一个函数进行操作,可以使用 `sapply()` 函数。例如,下面的代码演示了如何对一个数据框的某一列进行平均值操作: ``` # 创建数据框 df <- data.frame(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9)) # 对第三进行平均值操作 mean_c <- sapply(df[, 3], mean) ``` ### 回答2: R语言中可以使用apply函数一列所有行进行某一操作。apply函数是一个非常常用的函数,用于对矩阵或数据框的行或进行操作。 apply函数的基本用法是apply(X, MARGIN, FUN),其中X表示输入的矩阵或数据框,MARGIN表示要应用函数的维度,1表示行,2表示,FUN表示要应用的函数。 假设有一个数据框df,其中有三A、B、C,共有n行。现在我们想要对B的所有行进行某一操作,可以使用apply函数实现: result <- apply(df$B, 1, FUN) 其中,df$B表示选择数据框df的B,1表示应用函数的维度即行,FUN表示要进行的操作。这样,我们可以得到对B所有行进行某一操作后的结果。 需要注意的是,FUN可以是内置函数,也可以是自定义函数。此外,apply函数支持对多维数组的操作,通过调整MARGIN的值可以指定对应的维度。 总之,使用R语言中的apply函数可以方便地对一列所有行进行某一操作。 ### 回答3: R 语言中,可以使用 apply 函数对数据框的一列进行某一操作。 apply 函数的基本语法如下: apply(X, MARGIN, FUN, ...) 其中, - X:要进行操作的数据框或矩阵; - MARGIN:指定对行(1)或(2)进行操作; - FUN:要进行的操作,可以是自定义函数或内置的函数; - ...:其他参数。 假设有一个数据框 df,其中包含了一列数值数据。我们想要对这一列数据进行求和操作。 首先,可以定义一个自定义的求和函数 sum_func: sum_func <- function(x) { return(sum(x)) } 然后,使用 apply 函数对 df 的进行求和操作: result <- apply(df, 2, sum_func) 这样,result 将返回一个包含求和结果的向量,其中每个元素对应 df 中的一列数据的求和结果。 另外,如果要对数据框的进行其他操作,可以修改 sum_func 函数为其他需要的操作。apply 函数的 MARGIN 参数可以根据需要设定为 1 或 2,来指定操作的维度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值