Vue+elementUI 表格 增删改查 纯前端 最终版
<!-- 通讯录页 --> <template> <div class="page-item page-callrecords"> <div class="page-content" ref="pageTab"> <div class="page-tab"> <el-form :model="selectForm" ref="selectForm" label-width="80px" class="form"> <el-form-item label="姓名:" class="form-item"> <el-input v-model="selectForm.name" placeholder="请输入姓名"></el-input> </el-form-item> <el-form-item label="电话:" class="form-item"> <el-input v-model="selectForm.phone" placeholder="请输入电话1或电话2"></el-input> </el-form-item> <!-- <el-form-item label="分类" class="form-item"> <el-select v-model="form.classify" placeholder="选择" class="form-item"> <el-option label="分类一" value="shanghai"></el-option> <el-option label="分类二" value="beijing"></el-option> </el-select> </el-form-item> --> <el-form-item> <el-button type="primary" icon="el-icon-search" class="form-btn" @click="onSelect()">搜索</el-button> </el-form-item> <el-button type="primary" icon="el-icon-plus" class="form-btn" @click="onAddRow()">添加</el-button> </el-form> <!-- 表格试视图 v-if="cutLayout"--> <el-table :data="tableDataList" style="width: 100%;" :max-height="tabHeight" border :header-cell-style="{ background: '#00abbe', color: '#fff' }" > <!-- <el-table-column type="selection" width="40"></el-table-column> --> <el-table-column prop="id" label="id" width="50" align="center"></el-table-column> <!-- <el-table-column style="color: #828282" align="center" prop="classify" label="分类"></el-table-column> --> <el-table-column align="center" prop="name" label="姓名"></el-table-column> <el-table-column align="center" prop="phone1" min-width="170" label="电话1"> </el-table-column> <el-table-column align="center" prop="phone2" min-width="170" label="电话2"> </el-table-column> <el-table-column align="center" prop="address" width="226" min-width="170" label="地址"> </el-table-column> <el-table-column align="center" prop="remark" label="备注"></el-table-column> <el-table-column align="center" label="操作" width="190"> <template slot-scope="scope"> <!-- size="small" --> <el-button size="mini" class="operation-btn" round @click="handleEdit(scope.$index, scope.row)" >编辑</el-button> <el-button size="mini" class="operation-btn operation-btn-delete" round type="danger" @click="handleDelete(scope.$index, scope.row )" >删除</el-button> </template> </el-table-column> </el-table> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage4" :page-sizes="[5, 10, 20, 30]" :page-size="5" layout="prev, pager, next, sizes, total, jumper" :total="total" ></el-pagination> </div> </div> <!-- 新增 编辑 窗口 --> <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" class="change-pwd" style="width:1300px;" > <table> <tr> <td width="100px;"> </td> <td> <el-form :model="dialogForm" ref="dialogForm"> <el-form-item label="姓名:" class="form-item"> <el-input v-model="dialogForm.name" placeholder="请输入姓名"></el-input> </el-form-item> <el-form-item label="电话1" class="form-item"> <el-input v-model="dialogForm.phone1" placeholder="请输入电话1"></el-input> </el-form-item> <el-form-item label="电话2" class="form-item"> <el-input v-model="dialogForm.phone2" placeholder="请输入电话2"></el-input> </el-form-item> <el-form-item label="地址" class="form-item"> <el-input v-model="dialogForm.address" placeholder="请输入地址"></el-input> </el-form-item> <el-form-item label="备注" class="form-item"> <el-input v-model="dialogForm.remark" placeholder="请输入备注"></el-input> </el-form-item> </el-form> <div> <el-button @click="dialogCancel()">取消</el-button> <el-button type="primary" v-on:click="dialogSave()" :loading="addLoading" >保存</el-button> </div> </td> </tr> </table> </el-dialog> </div> </template> <script> //import { mapState } from 'vuex' var _index; //定义一个全局变量,以获取行数据的行号 export default { name: '', components: {}, props: {}, data() { return { dialogTitle:'',//对话框标题 dialogVisible: false,//是否显示新增窗口 dialogForm: [],//对话框中的form 新增和编辑 pageCurrentNum:'',//当前页码 addLoading: false, selectForm: { //查询条件的form name: '', phone: '', classify: '' }, tableData: [ { id: '100', classify: '分类一', name: '刘加料', phone1: '1381111111', phone2: '12877777', address: '中国', remark: '备注2', operation: '' }, { id: '101', classify: '分类二', name: '王国为', phone1: '1392222222', phone2: '12888888888', address: '中国', remark: '备注1', operation: '' }, { id: '102', classify: '分类一', name: '刘辚中', phone1: '1392274422', phone2: '12887777788', address: '中国', remark: '备注1', operation: '' }, { id: '103', classify: '分类二', name: '刘珍从', phone1: '13922456562', phone2: '12883534888', address: '中国', remark: '备注3', operation: '' }, { id: '104', classify: '分类二', name: '李国为', phone1: '1392234222', phone2: '1282348888', address: '中国', remark: '备注1', operation: '' }, { id: '105', classify: '分类一', name: '王五中', phone1: '1392226786722', phone2: '109834588', address: '中国', remark: '备注1', operation: '' }, { id: '106', classify: '分类二', name: '贺炜洁', phone1: '1392222222', phone2: '12888888888', address: '中国', remark: '备注3', operation: '' }, { id: '107', classify: '分类一', name: '刘加料', phone1: '1381111111', phone2: '12877777', address: '中国', remark: '备注2', operation: '' }, { id: '108', classify: '分类二', name: '王标准', phone1: '1392222222', phone2: '12888888888', address: '中国', remark: '备注1', operation: '' }, { id: '109', classify: '分类一', name: '刘宵厅', phone1: '1392112422', phone2: '1288327788', address: '中国', remark: '备注1', operation: '' }, { id: '110', classify: '分类二', name: '刘材料', phone1: '139786456562', phone2: '122344888', address: '中国', remark: '备注3', operation: '' }, { id: '111', classify: '分类二', name: '李杰杰', phone1: '139223422', phone2: '128234823288', address: '中国', remark: '备注1', operation: '' }, { id: '112', classify: '分类一', name: '王为要', phone1: '1392222346722', phone2: '102334588', address: '中国', remark: '备注1', operation: '' }, { id: '113', classify: '分类二', name: '贺炒菜', phone1: '1392222222', phone2: '12888888888', address: '中国', remark: '备注3', operation: '' }, { id: '114', classify: '分类一', name: '刘加料', phone1: '1381111111', phone2: '12877777', address: '中国', remark: '备注2', operation: '' }, { id: '115', classify: '分类二', name: '王国为', phone1: '1392222222', phone2: '12888888888', address: '中国', remark: '备注1', operation: '' }, { id: '116', classify: '分类一', name: '王口水', phone1: '1392274422', phone2: '12887777788', address: '中国', remark: '备注1', operation: '' }, { id: '117', classify: '分类二', name: '刘中断', phone1: '13922456562', phone2: '12883534888', address: '中国', remark: '备注3', operation: '' }, { id: '118', classify: '分类二', name: '张灯具', phone1: '1392234222', phone2: '1282348888', address: '中国', remark: '备注1', operation: '' }, { id: '119', classify: '分类一', name: '张材要', phone1: '1392226786722', phone2: '109834588', address: '中国', remark: '备注1', operation: '' }, { id: '120', classify: '分类二', name: '王可数', phone1: '1392222222', phone2: '12888888888', address: '中国', remark: '备注3', operation: '' }, { id: '121', classify: '分类一', name: '李尖凿', phone1: '1381111111', phone2: '12877777', address: '中国', remark: '备注2', operation: '' }, { id: '122', classify: '分类二', name: '王顶替', phone1: '1392222222', phone2: '12888888888', address: '中国', remark: '备注1', operation: '' }, { id: '123', classify: '分类一', name: '赵酒店', phone1: '1392112422', phone2: '1288327788', address: '中国', remark: '备注1', operation: '' }, { id: '124', classify: '分类二', name: '王灯光', phone1: '139786456562', phone2: '122344888', address: '中国', remark: '备注3', operation: '' }, { id: '125', classify: '分类二', name: '刘耧杰', phone1: '139223422', phone2: '128234823288', address: '中国', remark: '备注1', operation: '' }, { id: '126', classify: '分类一', name: '李安', phone1: '1392222346722', phone2: '102334588', address: '中国', remark: '备注1', operation: '' }, { id: '127', classify: '分类二', name: '王为菜', phone1: '1392222222', phone2: '12888888888', address: '中国', remark: '备注3', operation: '' } ], tableDataList: [], tableDataSelect: [], currentPage4: 1, tabHeight: 1080, total: 20, pagetRowNum: 5,//每页显示的行数 //cutLayout: false, } }, computed: { //...mapState(['tableDataAllPage']) }, watch: {}, beforeCreate() {}, beforeUpdate() { this.tabHeight = this.$refs.pageTab.offsetHeight - 137 }, beforeMount() {}, mounted() { let _this = this window.onresize = function() { if (_this.$refs.pageTab) { _this.tabHeight = _this.$refs.pageTab.offsetHeight - 137 } } this.ListLoadData();//初始化列表 }, methods: { handleSizeChange(val) { //每页显示条数 变化事件 console.log(`每页的行数 ${val} 条`) this.pagetRowNum= val; this.ListLoadData();//改变每页的行数则 重新计算列表 }, handleCurrentChange(val) { //页码 变化事件 console.log(`当前页: ${val-1}`) this.tableDataList = this.tableDataAllPage[val-1].list; this.pageCurrentNum=val;//当前页码 }, //初始化 列表数据 ListLoadData(){ //-------获取 列表数据 -------Sina API--Axios跨域 Get请求-------------------------------- var dataLength=0; dataLength=this.tableData.length; console.log( "总行数: "+this.tableData.length + " " +dataLength ); /* 分页算法 */ this.tableDataAllPage=[]; this.total=dataLength;//总行数 var pageCount=Math.ceil(dataLength/this.pagetRowNum);//页数=总行数/每页的行数 console.log( "页数: "+pageCount ); //遍历所有的分组 var i=0; var y=0 for(var x=1;x<=pageCount;x++){ var tabData={"list":[]}; //console.log("第 "+x+"页---------------------------------------------"); for(y;y<dataLength;y++){//for(var y in response.data){ //console.log("插入数据: "+ y ); var objList={"id":this.tableData[y].id,"classify":this.tableData[y].classify ,"name":this.tableData[y].name ,"phone1":this.tableData[y].phone1,"phone2":this.tableData[y].phone2 ,"address":this.tableData[y].address,"remark":this.tableData[y].remark ,"operation":this.tableData[y].operation }; tabData.list.push(objList); //console.log("插入数据: "+response.data[y].userID+" "+response.data[y].userName+" "+response.data[y].userExten+""); i++; if(i>=x*this.pagetRowNum){//当数页码 * 每页的行数 //console.log("当数页码: "+ i +" " + x*this.pagetRowNum ); y++;//加一 break; } } this.tableDataAllPage.push(tabData); } this.tableDataList = this.tableDataAllPage[0].list; //-------------------------------------------------------------- }, //查询 onSelect() { console.log('onSelect 查询 ' + this.selectForm.name +" " + this.selectForm.phone); var url = 'http://192.168.1.75:5011/httpCli?action=query'+"&name="+this.selectForm.name+"&phone="+this.selectForm.phone ; this.$http.get(url).then((data) => { console.log(data) //this.tableform = data.body; }).catch((err) => { console.log(err) }) /* this.tableDataSelect=this.tableData; var i=0;var len=this.tableData.length; for(i;i<len;i++){ if(this.selectForm.name!=""){ if(this.selectForm.name!=this.tableData[i].name){ console.log('onSelect name去除 ' + i +" " + this.tableData[i].name); this.tableData.splice(i, 1); } } if(this.selectForm.phone!=""){ if(this.selectForm.phone!=this.tableData[i].phone1){ this.tableData.splice(i, 1); console.log('onSelect phone1去除 ' + i +" " + this.tableData[i].phone1); } } }*/ }, //新增数据 onAddRow() { _index=-1;//-1为新增 this.dialogTitle='新增'; this.dialogVisible = true; this.dialogForm = { name: '', phone1: '', phone2: '', address: '', remark: '' } }, //编辑数据-------------------------------------------------------- handleEdit(index, row) { console.log("handleEdit index:"+index+" name:"+row.name); this.dialogTitle='编辑'; this.dialogVisible = true; this.dialogForm = Object.assign({}, row); _index = index;//用于判断是新增还是编辑 //取到这一栏的值,也就是明白是在那一栏进行操作,从而将编辑后的数据存到表格中 }, //取消按扭 dialogCancel() { this.dialogVisible = false;//对话框 不显示 }, //对话框 保存按钮 dialogSave(){ if(_index==-1){ this.sumbitAddRow(); //保存 新增 }else{ this.sumbitEditRow();//保存 编辑 } }, //将新增的数据添加到表格中 sumbitAddRow() { console.log( "name: "+ this.dialogForm.name); var new_id=this.tableData[this.tableData.length-1].id; new_id= parseInt(new_id) + 1;//id 自动加 1 console.log( "new_id "+ new_id); this.tableform = this.tableform || [] this.tableData.push({ id: new_id, name: this.dialogForm.name, phone1: this.dialogForm.phone1, phone2: this.dialogForm.phone2, address: this.dialogForm.address, remark: this.dialogForm.remark, }) //storage.set('url', this.url); this.ListLoadData();//重新加载 数据 this.handleCurrentChange(this.tableDataAllPage.length);//页码变化事件 跳到最后一页 this.dialogVisible = false;//对话框 不显示 }, //保存编辑 sumbitEditRow() { console.log("sumbitEditRow _index:"+_index+" name:"+this.dialogForm.name); this.dialogVisible = false;//对话框 不显示 //更新当前列表的行内容 var editData_index = _index;//当前页的行号 this.tableDataList[editData_index].name = this.dialogForm.name; this.tableDataList[editData_index].phone1 = this.dialogForm.phone1; this.tableDataList[editData_index].phone2 = this.dialogForm.phone2; this.tableDataList[editData_index].address = this.dialogForm.address; this.tableDataList[editData_index].remark = this.dialogForm.remark; //同步更新 原始数据 var edit_id=this.tableDataList[editData_index].id; var i=0; for(i;i<this.tableData.length;i++){ //console.log("遍历数据: "+ this.tableData[i].name ); if(this.tableData[i].id==edit_id){ this.tableData[i].name = this.dialogForm.name; this.tableData[i].phone1 = this.dialogForm.phone1; this.tableData[i].phone2 = this.dialogForm.phone2; this.tableData[i].address = this.dialogForm.address; this.tableData[i].remark = this.dialogForm.remark; } } // }, //删除数据------------------------------------------------- handleDelete(index, row) { console.log("handleDelete index:"+index+" name:"+row.name); this.$confirm('确认要删除该数据, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { //删除 //第一步 取这个 id 所在的 行号 var i=0;var del_index=-1; for(i;i<this.tableData.length;i++){ //console.log("遍历数据: "+ this.tableData[i].name ); if(this.tableData[i].id==row.id){ del_index=i; } } console.log( "删除前 总行数: "+this.tableData.length + " " ); this.tableData.splice(del_index, 1); console.log( "删除后 总行数: "+this.tableData.length + " " ); this.ListLoadData();//重新加载 数据 //console.log( "当前页: "+this.pageCurrentNum + " " ); this.handleCurrentChange(this.pageCurrentNum);//跳转至 当前页 this.$message({ type: 'success', message: '删除成功!', }); }).catch((err) => { if(err!='cancel'){ this.$message({ type: 'error', message: '删除失败! '+ err }); } }) }, //--------------------------------------------------------------- } } </script> <style lang="scss"> @import './AddressGridView.scss'; </style>