m0_56789428 2021-08-09 11:10 采纳率: 97.2%
浏览 99
已结题

实现多表格添加点击按钮,添加一行,删除一行

页面多个表格,填写的内容怎么保存到数据库。然后我添加了点击按钮,怎么实现各种表格能增加行数?表格字段数,字段名都不一样

  • 写回答

1条回答 默认 最新

  • 山河已无恙 云原生领域优质创作者 2021-08-09 11:16
    关注

    嗯,问题有些模糊,可以详细说说么?下面是一些参考。


    表格数据变化直接更新绑定的变量就可以,多个表格,你可以调对应的方法实现。保存数据库需要在生命周期里写AjAX。
    类似这样的


    img

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="UTF-8">
        <!-- import CSS -->
        <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
        <!-- import Vue before Element -->
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
        <!-- import JavaScript -->
        <script src="https://unpkg.com/element-ui/lib/index.js"></script>
        <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    </head>
    
    <body style="display: flex;justify-content: center;width: 100%;">
        <div id="app">
            <el-card>
                <el-table :data="tableData" style="width: 100%" :row-class-name="tableRowClassName"
                    @cell-dblclick="editdbClick">
                    <el-table-column prop="date" label="日期" width="180">
                        <template slot-scope="scope">
                            <el-select v-show="!showEdit[scope.$index]" popper-class="role-option" v-model="scope.row.date"
                                placeholder="请选择" size="small" @change="dateHandleChange">
                                <el-option v-for="item in optionData" :key="item.name" :label="item.name"
                                    :value="item.value"></el-option>
                            </el-select>
                            <span style="line-height: 32px;"
                                v-show="showEdit[scope.$index]">{{ optionDataf(scope.row.date)}} </span>
                        </template>
                    </el-table-column>
                    <el-table-column prop="name" label="姓名" width="180">
                        <template slot-scope="scope">
                            <el-select v-show="!showEdit[scope.$index] && scope.row.date != '2' " popper-class="role-option"
                                v-model="scope.row.name" placeholder="请选择" size="small">
                                <el-option v-for="item in optionName" :key="item.name" :label="item.name"
                                    :value="item.value"></el-option>
                            </el-select>
                            <span style="line-height: 32px;"
                                v-show="showEdit[scope.$index]">{{optionNamef(scope.row.name) }} </span>
                        </template>
                    </el-table-column>
                    <el-table-column prop="addr" width="180" label="地址">
                        <template slot-scope="scope">
                            <el-select v-show="!showEdit[scope.$index]" popper-class="role-option" v-model="scope.row.addr"
                                placeholder="请选择" size="small">
                                <el-option v-for="item in optionsAddr(scope.row)" :key="item.name" :label="item.name"
                                    :value="item.value"></el-option>
                            </el-select>
                            <span style="line-height: 32px;"
                                v-show="showEdit[scope.$index]">{{optionsAddrf(scope.row.addr) }}
                            </span>
                        </template>
                    </el-table-column>
                    <el-table-column label="操作" width="100" header-align="right">
                        <template slot-scope="scope">
                            <div style="display: flex;justify-content: space-between;">
                                <el-link icon="el-icon-plus" size="mini" type="primary"
                                    @click="handleAdd(scope.$index, scope.row)" :underline="false"
                                    style="font-size: 14px;margin-left: 40px"></el-link>
                                <el-link icon="el-icon-delete" size="mini" @click="handleDelete(scope.$index, scope.row)"
                                    type="danger" :underline="false"></el-link>
                            </div>
                        </template>
                    </el-table-column>
                </el-table>
            </el-card>
        </div>
    </body>
    <script>
     /**
        * @description: 双击行视图手动切换,通过双击表格实现编辑的表格的切换
        * @author: Liruilong
        */
        new Vue({
            el: '#app',
            data() {
                return {
                    optionData: [{ value: "1", name: "2016-05-03" }, { value: "2", name: "2016-05-04" }, { value: "3", name: "2016-05-05" }],
                    optionName: [{ value: "1", name: " 王小虎" }, { value: "2", name: "王小龙" }, { value: "3", name: "王小狗" }],
                    optionAddr: [{ value: "1", name: "北凉" }, { value: "2", name: "西北道" }, { value: "3", name: "泰安城" }],
                    tableData: [{
                        date: '1',
                        name: '1',
                        addr: '1',
                    }],
                    optionAddrMapper: new Map(),
                    date: '',
                    name: '',
                    address: '',
                    showEdit: [false],
                }
            },
            created() {
    
            },
            mounted() {
                // 模拟ajax初始化数据集
                this.optionAddrMapper.set("1", [{ value: "1", name: "北凉" }, { value: "2", name: "西北道" }, { value: "3", name: "泰安城" }]);
            },
            methods: {
                optionDataf(id) {
                    let name = id;
                    this.optionData.forEach((element) => {
    
                        if (element.value == id) {
                            name = element.name;
                        }
                    });
                    return name;
                },
                optionNamef(id) {
                    let name = id;
                    this.optionName.forEach((element) => {
                        if (element.value == id) {
                            name = element.name;
                        }
                    });
                    return name;
                },
                optionsAddrf(id) {
                    let name = id;
                    if (this.optionAddrMapper) {
                        this.optionAddrMapper.forEach((value, key) => {
                            value.forEach((e) => {
                                if (e.value == id) {
                                    name = e.name;
                                }
                            })
                        });
                    } else {
                        this.optionAddr.forEach(e => {
                            if (e.value == id) {
                                name = e.name;
                            }
                        });
                    }
                    return name;
                },
                editdbClick(row, column, cell, event) {
    
                    if ((row.date && row.name && row.addr) || (row.date && row.addr)) {
                        this.$set(this.showEdit, row.index, !this.showEdit[row.index])
                    }
    
                },
                // openShow(index){
                //     this.showEdit.forEach( (e) =>{
                //         if(e != index){
                //             this.$set(this.showEdit, e, false)
                //         }
                       
                //     })
                // },
                saveClick(row, column, cell, event) {
                },
                optionsAddr(row) {
                    return this.optionAddrMapper.get(row.date);
                },
                //联动处理//模拟ajax调用接口获取数据.日期选择会联动地址
                dateHandleChange(val) {
                    // 模拟根据日期得到地址的数据集 这里写ajax ,必须是同步的请求。
                    this.optionAddrMapper.set("1", [{ value: "1", name: "北凉" }, { value: "2", name: "西北道" }, { value: "3", name: "泰安城" }]);
                    this.optionAddrMapper.set("2", [{ value: "9", name: "西域" }, { value: "8", name: "苗疆" }, { value: "7", name: "剑气长城" }]);
                    this.optionAddrMapper.set("3", [{ value: "10", name: "圣贤林" }, { value: "11", name: "青冥天下" }, { value: "12", name: "藕花福地" }]);
                },
                // 添加操作。默认会保存当前行的数据,并添加一条新数据
                handleAdd(index, row) {
                    let data = this.tableData[this.tableData.length - 1];
                    if (((row.date && row.name && row.addr) || (row.date && row.addr)) && ((data.date && data.name && data.addr) || (data.date && data.addr))) {
                        this.$set(this.showEdit, row.index, true)
                        this.tableData.push({
                            date: '',
                            name: '',
                            addr: ''
                        });
                        this.$set(this.showEdit, row.index + 1, false)
                    }
                },
                handleDelete(index, row) {
                    debugger
                    if (index > 0) {
                        this.tableData.splice(index, 1);
                    }
                },
                tableRowClassName({ row, rowIndex }) {
                    row.index = rowIndex;
                    if ((rowIndex + 1) % 2 === 1) {
                        return 'warning-row';
                    } else {
                        return 'success-row';
                    }
                    return '';
                }
            },
            props: {},
            computed: {},
    
            created() {
    
            },
            watch: {},
            filters: {
    
            },
    
        })
    </script>
    <style>
        .el-table .warning-row {
            background: oldlace;
        }
    
        .el-table .success-row {
            background: #f0f9eb;
        }
    </style>
    
    </html>
    
    

    可以参考: https://blog.csdn.net/sanhewuyang/article/details/109671135 https://blog.csdn.net/sanhewuyang/article/details/109671135

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月24日
  • 已采纳回答 8月16日
  • 创建了问题 8月9日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持