赞
踩
<template> <div class="elTableModule"> <el-table :data="tabOptions.tableData" border style="width: 100%;"> /* 使用插槽去自定义表格最左边一列的内容,例如表格需加入多选框列时*/ <slot name="tableLeftSlot"></slot> <el-table-column v-for="(item,index) in tabOptions.headerColumn" :key="'tableHeader'+index" :prop="item.prop" :label="item.label" :width="item.width"> <template slot-scope="{ row }"> /* 判断是否有需特殊处理的字段内容,如果有则使用插槽在具体页面中去处理,插槽名为需处理的字段名*/ <slot v-if='item.slot' :name="item.prop" :row="row"></slot> /* 当某些字段为空时,用“--”去显示*/ <span v-else v-text="row[item.prop] ? row[item.prop] : '--'"></span> </template> </el-table-column> /* 使用插槽去自定义表格最右边一列的内容,例如表格操作列*/ <slot name="tableRightSlot"></slot> </el-table> </div> </template> <script> export default { name:'', props: { tabOptions: { // 表格数据 tableData: [], // 表头的配置 包括:标题名,标题prop, width等, headerColumn: [], }, }, data() { return { } }, methods:{ } } </script> <style scoped="scoped"> /* 表格内文字居中显示*/ /deep/.el-table .cell{ text-align: center; } /* 表头背景色以及表头字体颜色设置*/ /deep/.el-table__header th{ background-color: #EFF9FE !important; color: #2E6ED2; } </style>
<template> <div class="tableList"> <!-- 表格 --> <elTable :tabOptions='TabOptions'> /*插槽-性别处理(slot名为需处理的字段名)*/ <template slot-scope="scope" slot="gender"> <span v-if="scope.row.gender==0">女</span> <span v-if="scope.row.gender==1">男</span> </template> /* 插槽-身高处理(slot名为需处理的字段名)*/ <template slot-scope="scope" slot="height"> <span>{{scope.row.height}}cm</span> </template> /* 使用名叫tableRightSlot的插槽加操作列*/ <el-table-column slot="tableRightSlot" fixed="right" label="操作" min-width="150"> <template slot-scope="scope"> <el-button @click="info(scope.row)">查看详情</el-button> </template> </el-table-column> </elTable > </div> </template> <script> import elTable from '@/components/common/el-table.vue'; export default { name: '', // 组件挂载 components: { elTable , }, data() { return { // 表格配置参数 TabOptions:{ //列表数据 tableData:[{id:'1111',name:'Jones',gender:1,height:1.78},{id:'222',name:'Jack',gender:1,,height:1.85},{id:'3333',name:'Lucy',gender:0,height:1.68}], //表头参数(注意:需特殊处理的字段要加上 slot:true,以便表格组件识别处理) headerColumn:[ {label: '编号',prop: 'date', width: '120'}, {label: '名字',prop: 'date', width: '120'}, {label: '性别',prop: 'gender', width: '180',slot:true}, {label: '身高',prop: 'height', width: '180',slot:true} ] }, } }, created() { }, methods:{ //查看详情 info(row){ } } </script> <style scoped="scoped"> </style>
3.表格数据格式化(当无数据时用“- -”代替)
<el-table v-loading="loading" :data="tableData">
<el-table-column align="center" min-width=200 prop="name" label="名称" :formatter="formatTableData"></el-table-column>
</el-table>
methods:{
formatTableData(row, column, cellValue, index) {
if (cellValue !== null && cellValue !== "" && cellValue !== undefined) {
return cellValue;
} else {
return "--";
}
},
}
二、封装elementui可编辑表格
可编辑表格组件
table-edit.vue
<template> <div> <el-table :data="tableOptions.tableData" @cell-click="cellCilck" @cell-mouse-leave="cellMouseLeave" height="250" border style="width: 100%"> <el-table-column v-for="(item,index) in tableOptions.options" :key="index" align="center" :prop="item.prop" :label="item.label" :width="item.labelWidth"> <template slot-scope="{row}"> <!-- 自定义的字段 --> <div v-if="item.isSlot"> <slot :name="item.prop" :row="row"></slot> </div> <div v-else> <el-input v-if="row.isClickProperty == item.prop" v-model="row[item.prop]" placeholder="请输入内容" @change="valChange"></el-input> <span v-else>{{row[item.prop]}}</span> </div> </template> </el-table-column> </el-table> </div> </template> <script> export default { props:{ tableOptions:{ type:Object, default(){ return {} } } }, data(){ return{} }, methods:{ //单击单元格开启编辑 cellCilck(row, column, cell, event){ this.$set(row, "isClickProperty", column.property); }, //鼠标离开单元格,编辑关闭 cellMouseLeave(row, column, cell, event){ this.$set(row, "isClickProperty", ""); }, //编辑单元格值变化 valChange(val){ this.$emit("editTable",val) } } } </script>
table.vue
<template> <div> <table-edit :tableOptions="tableOption" @editTable="editTable"> <template slot-scope="{row}" slot="isOK"> <el-checkbox v-model="row.isOK"></el-checkbox> </template> </table-edit> </div> </template> <script> import tableEdit from "@/components/table-edit.vue" export default { components:{ tableEdit }, data(){ return{ tableData:[ {date1:"张三",date2:"男",date3:"18",date4:"1.74cm",isOK:true}, {date1:"李四",date2:"男",date3:"19",date4:"1.80cm",isOK:false}, ], tableOption:{ tableData:[], //表格数据 options:[] //表格配置项信息(表头,label宽度等) }, option: [ {prop:"isOK",label:"是否选择",labelWidth:"",isSlot:true}, {prop:"date1",label:"姓名",labelWidth:""}, {prop:"date2",label:"性别",labelWidth:""}, {prop:"date3",label:"年龄",labelWidth:""}, {prop:"date4",label:"身高",labelWidth:""}, ], } }, created(){ this.setTabel(); }, methods:{ setTabel(){ this.tableOption.tableData = this.tableData; this.tableOption.options = this.option; }, editTable(val){ //接收编辑后的值 console.log(val) console.log(this.tableOption.tableData) } } } </script> <style lang="scss" scoped> </style>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。