美文网首页前端开发那些事儿
vue+elementUI 可编辑表格

vue+elementUI 可编辑表格

作者: JiangChengWei | 来源:发表于2020-06-29 14:20 被阅读0次

    elementUI表格属性:highlight-current-row(是否要高亮当前行)



    el-table 配置属性 highlight-current-row 后 点击行触发 row-click 事件,会给当前行添加一个current-row 样式属性



    思路:在需要编辑操作的列中设置span(显示数据)及input(编辑数据)通过current-row样式属性配置的权重控制显隐达到只读/编辑的效果。
    html部分
            <el-button type="primary" size="small" @click="isEdit=!isEdit">{{isEdit?'只读':'编辑'}}</el-button>
            <el-table :data="userList" highlight-current-row :class="isEdit?'tb-edit':'tb-show'">
                <el-table-column label="姓名" prop="name"></el-table-column>
                <el-table-column label="成绩">
                    <template slot-scope="scope">
                        <el-input size="small" v-model="scope.row.result" @blur="handleInputBlurResult({index:scope.$index,result:scope.row.result})" @keyup.enter.native="handleInputBlurResult({index:scope.$index,result:scope.row.result})"></el-input>
                        <span :class="scope.row.result<60?'c-red':'c-green'">{{scope.row.result||0}}</span>
                    </template>
                </el-table-column>
                <el-table-column label="评级" prop="level">
                    <template slot-scope="scope">
                        {{scope.row.level||"-"}}
                    </template>
                </el-table-column>
            </el-table>
    
    js部分
        data: function () {
            return {
                isEdit: false, // 控制表格只读/编辑状态
                userList: [{ // 列表数据
                        name: '瓜瓜',
                        result: 0,
                        level: ''
                    },
                    {
                        name: '康康',
                        result: 0,
                        level: ''
                    }, {
                        name: '军军',
                        result: 0,
                        level: ''
                    }, {
                        name: '江江',
                        result: 0,
                        level: ''
                    }
                ]
            }
        },
        methods: {
            /** 
             * 成绩输入回车/失去焦点统计
             * @param {Number} index 行索引
             * @param {Number} result 成绩
             */
            handleInputBlurResult({
                index,
                result = 0
            }) {
                let level = '';
                if (result >= 85) { //计算对应评级
                    level = 'A';
                } else if (result >= 60) {
                    level = 'B';
                } else {
                    level = 'C';
                }
                this.userList[index].level = level; //数据回填
            }
        }
    
    css部分
    <style lang="less">
    .c-red {
        color: #F56C6C;
    }
    .c-green {
        color: #67C23A;
    }
    .tb-edit {
        .el-input {
            display: none
        }
        .current-row {
            .el-input {
                display: block
            }
            .el-input+span {
                display: none
            }
        }
    }
    .tb-show {
        .el-input {
            display: none
        }
    }
    </style>
    

    demo中我额外添加了isEdit(控制el-table的class:tb-edit / tb-show)来控制表格的 只读/编辑 模式。以及输入数值之后的扩展方法 handleInputBlurResult 根据输入成绩值设置评级。

    当然不局限于使用input做文本编辑,还可以添加各种其他控件进行赋值操作,关键点在于设置控件的显隐。

    相关文章

      网友评论

        本文标题:vue+elementUI 可编辑表格

        本文链接:https://www.haomeiwen.com/subject/jomofktx.html