el-table实现行内编辑功能

<template>
    <div class="rowEdit">
        <div class="crud-opts">
              <div class="crud-opts-left">
                            <el-button
                                    class="filter-item"
                                    size="mini"
                                    type="text"
                                    icon="el-icon-my-add"
                                    @click="edit()"
                            >
                                编辑
                            </el-button>
                            <el-button
                                    class="filter-item"
                                    size="mini"
                                    type="text"
                                    icon="el-icon-my-publish"
                                    @click="cancle"
                            >取消
                            </el-button>
                            <el-button
                                    class="filter-item"
                                    type="text"
                                    icon="el-icon-my-delete"
                                    size="mini"
                                    @click="save"
                            >
                                保存
                            </el-button>
                        </div>
        </div>
        <!--表格渲染-->
        <el-table ref="table" :height="tableHeight"
                  v-loading="loading"
                  :data="tabledatas"
                  @selection-change="selectItem"
                  @row-click="onSelectOp"
                  style="width: 100%;">
 
            <el-table-column
                    type="selection"
                    width="55"
                    :reserve-selection="false"
            ></el-table-column>
            <el-table-column prop="dydjbm" label="电压等级">
                <template scope="scope">
                    <el-select v-model="scope.row.dydjbm" v-show="scope.row.show"  placeholder="请选择">
                        <el-option
                                v-for="item in dydjbm"
                                :key="item.value"
                                :label="item.label"
                                :value="item.label">
                        </el-option>
                    </el-select>
                    <span v-show="!scope.row.show">{{scope.row.dydjbm}}</span>
                </template>
            </el-table-column>
            <el-table-column prop="name" label="地址">
                <template scope="scope">
                    <el-input size="small" v-model="scope.row.name" v-show="scope.row.show" placeholder="请输入内容"></el-input>
                    <span v-show="!scope.row.show">{{scope.row.name}}</span>
                </template>
            </el-table-column>
        </el-table>
    </div>
</template>
 
<script>
    export default {
      
        data(){
            return{
                dydjbm: [{
                    value: '选项1',
                    label: '黄金糕'
                }, {
                    value: '选项2',
                    label: '双皮奶'
                }],
                tabledatas: [],
                selectlist: []
            }
        },
        methods:{
            /**
                单个去勾选时触发自定义的selectItem函数
                @selection-change事件会默认传行数据进去,
                用selectItem(rows)的rows接收就好,rows所选行数据的数组
            */
            selectItem(rows) {
                if (rows.length > 1) {
                    var newRows = rows.filter((it, index) => {
                        if (index == rows.length - 1) {
                            this.$refs.table.toggleRowSelection(it, true);
                            return true;
                        } else {
                            this.$refs.table.toggleRowSelection(it, false);
                            return false;
                        }
                    });
                    this.selectlist = newRows;
                } else {
                    this.selectlist = rows;
                }
            },
            /**
                点击那一行数据触发的事件默认传点击那行的数据,自定义onSelectOp(row)函数,
                用row来接收点击的那行数据,
                先把所有的选项清空this.$refs.multipleTable.clearSelection();
 
                再把点击的那行勾选this.$refs.multipleTable.toggleRowSelection(row, true);
                把自定义数组清空this.selectlist = [];
                把新勾选的数据push进数组this.selectlist.push(row);
           */
            onSelectOp(row) {
                this.$refs.table.clearSelection();
                this.$refs.table.toggleRowSelection(row, true);
                this.selectlist = [];
                this.selectlist.push(row);
            },
            // 编辑
            edit(row){
                this.selectlist[0].show=true
            },
            //保存
            save(){
                this.selectlist[0].show = false
            },
            //取消
            cancle(){
                this.selectlist[0].show = false
            }
 
        },
        created(){
            // 发请求去后台拿数据,如果有api,就正常请求,
            //我这里是demo,就简单给list赋值了,原理一样。
            // getlistApi().then(res => {
            // let list = res.data.list
            let list = [
                {
                dydjbm: '2016-05-02',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1518 弄',
            }, {
                dydjbm: '2016-05-04',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1518 弄'
            }, {
                dydjbm: '2016-05-01',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1518 弄',
            }, {
                dydjbm: '2016-05-03',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1518 弄'
            }]
            list.forEach(element => {
                element["show"] = false
            });
            this.tabledatas = list
        }
    }
</script>
 
<style>
 
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值