资讯专栏INFORMATION COLUMN

基于element-ui表格的二次封装实现

3403771864 / 868人阅读

  项目中element的表格,每次都cv很麻烦,可以用表格进行了二次封装,写一个Table组件。

  首先,下面是表格样式

  <el-table
  :data="tableData"
  :header-cell-style="headerStyle"
  :height="height"
  :border="border"
  @selection-change="handleSelectionChange"
  >
  <el-table-column
  v-if='selection'
  type="selection"
  width="55">
  </el-table-column>
  <el-table-column
  v-for="v in tableProp"
  :key="v.label"
  :prop="v.code"
  :sortable='v.sortable'
  :label="v.label"
  :width="v.width"
  >
  <template slot-scope="scope">
  <div v-if='!v.code'>
  {{ scope.row[scope.column.property] }}
  </div>
  <div v-else>
  <slot name="row" :row="scope.row"></slot>
  </div>
  </template>
  <el-table-column
  v-for="(item, i) in v.data"
  :key="i"
  :sortable='item.sortable'
  align="center"
  :width="item.width"
  :prop="item.code"
  :label="item.label"
  >
  <template slot-scope="scope">
  <div v-if='!v.code'>
  {{ scope.row[scope.column.property] }}
  </div>
  <div v-else>
  <slot name="row" :row="scope.row"></slot>
  </div>
  </template>
  </el-table-column>
  </el-table-column>
  <el-table-column label="操作" v-if='ishandle'>
  <template slot-scope="scope">
  <slot name="edit" :row="scope.row" :index="scope.$index"></slot>
  </template>
  </el-table-column>
  </el-table>

  tableData为当前显示的数据,tableProp为表头的名称,可以为多级也可以为单级,区别为data是否存在,headerStyle为表头样式,height为表的高度,sortable以该列为基准的排序,border是否显示边框,handleSelectionChange多选,selection是否显示多选,ishandle是否显示操作,下面使用插槽进行写操作

  export default {
  props: {
  height: {
  type: Number,
  default: 220,
  },
  ishandle:{
  type: Boolean,
  default: false,
  },
  border:{
  type: Boolean,
  default: false,
  },
  tableProp: {
  type: Array,
  default: () => [
  {
  code: 'index',
  label: '指标',
  width: 100,
  },
  {
  code: 'PAC',
  label: 'PAC',
  width: 120,
  data:{
  code: 'PAB',
  label: 'PAB',
  width: 60,
  }
  },
  {
  code: 'PAM',
  label: 'PAM',
  width: 60,
  code:true,
  },
  {
  code: 'POWER_CONSUMPTION',
  label: '综合电耗(kW·h)',
  width: 50,
  },
  {
  code: 'WATER_CONSUMPTION',
  label: '自用水率(%)',
  },
  ],
  },
  tableData: {
  type: Array,
  default:() => [
  {
  index:1,
  PAC:'1'
  PAM:'1',
  POWER_CONSUMPTION:'1',
  WATER_CONSUMPTION:'1'
  }
  ]
  },
  Style:{
  type:String,
  default:'font-size: 12px;padding:0;line-height: inherit;font-weight: 500;color: #6A7474;'
  }
  },
  data() {
  return {
  show: false,
  };
  },
  methods: {
  // 样式
  headerStyle() {
  return this.Style;
  },
  // 多选
  handleSelectionChange(val){
  this.$emit('SelectionChange',val)
  }
  },
  };

  第二步加分页

  <el-pagination
  :background='background'
  :layout="layout"
  :total="total"
  :page-size="pageSize"
  :current-page.sync="current"
  :page-sizes="pageSizes"
  @size-change="handleSizeChange"
  @current-change="handleCurrentChange"
  :hide-on-single-page='singlepage'
  >
  </el-pagination>

  background背景是否显示,layout组件布局,子组件名用逗号分隔,total总条数,pageSizes每页显示个数选择器的选项设置,current当前页码,pageSize每页显示条目个数,singlepage只有一页时是否隐藏,handleSizeChangepageSize 改变时会触发,handleCurrentChange改变时会触发

  export default {
  props: {
  background: {
  type: Boolean,
  default: false,
  },
  layout:{
  type: String,
  default: 'total, sizes, prev, pager, next, jumper',
  },
  total:{
  type: Number,
  default: 100,
  },
  pageSize:{
  type: Number,
  default: 10,
  },
  pageSizes:{
  type: Array,
  default: () => [10, 20, 30, 40, 50, 100],
  },
  singlepage: {
  type: Boolean,
  default: false,
  },
  current:{
  type: Number,
  default: 1,
  },
  },
  methods: {
  // pageSize 改变时会触发
  handleSizeChangepageSize (val) {
  this.$emit('handleSizeChangepageSize ',val)
  },
  // currentPage 改变时会触发
  handleCurrentChange(val){
  this.$emit('handleCurrentChange',val)
  }
  },
  };

  在页面中使用

  先引入Table.vue页面

  <Table
  :height="90"
  class="left-top-table"
  :tableData="tableIndex"
  :tableProp="tableProp"
  @handleCurrentChange='handleCurrentChange'
  @handleSizeChangepageSize ='handleSizeChangepageSize '
  >
  <template slot="edit" slot-scope="scope">
  <el-button size="mini" @click="handleEdit(scope.index, scope.row)"
  >编辑</el-button
  >
  </template>
  </Table>
  //pageSize 改变时会触发
  handleCurrentChange(val){
  ....
  }
  // currentPage 改变时会触发
  handleSizeChangepageSize (val){
  ....
  }
  // 编辑方法
  handleEdit(index,row){
  ....
  }

  上述只是大概的雏形,有些微变动可以依照需求更改。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127666.html

相关文章

  • 基于Vue+element-ui 的Table二次封装

    摘要:本人第一次写这个写的不好还望指出来作为一个由于公司产品的升级然促使我从一个后端人员自学变成前端的开发人员公司做的数据管理系统所以离不开表格了然后表格样式统一啥的就想到封装一个里面的了效果图表格组件的引入与使用监测数据表格 本人第一次写这个 写的不好还望指出来作为一个由于公司产品的升级然促使我从一个后端人员自学变成前端的开发人员 !公司做的数据管理系统所以离不开表格了 然后表格样式统一啥...

    you_De 评论0 收藏0
  • axios基于常见业务场景二次封装(更新)

    摘要:时隔一年再次更新下根据项目下常见业务场景对的二次封装功能实现兼容浏览器避免缓存减少或更新重复请求接口域名使用环境变量全局状态可关闭的全局错误提醒可开启携带全局分页参数拦截器请求拦截器请求开始请求出错响应拦截器请求结束请求错误处理网络请求中, 时隔一年再次更新下根据vue项目下常见业务场景对axios的二次封装 功能实现:1.兼容ie浏览器避免缓存2.减少或更新重复请求3.接口域名使用环...

    dailybird 评论0 收藏0
  • vue封装element-ui的table组件,灵活配置表头实现表格内编辑,按钮,链接等功能。

    摘要:一封装的组件定义表格高度全屏增加前台分页功能。表格内编辑后,自动选中该行。单元格内数据样式单元格内按钮,可多个。触发组件绑定函数,参数按钮名称,按钮样式,按钮事件标识。单元格是否可点击的判断函数,可进行复杂的函数判断。 vue-bxz-table 一、封装element-ui的table组件: 定义表格高度全屏 增加前台分页功能。 自定义表头,循环输出整体表结构。 表格内编辑(输入框...

    henry14 评论0 收藏0
  • D2 Crud,一款简单易用的表格组件

    摘要:是一套基于和的表格组件。将的功能进行了封装,并增加了表格的增删改查数据校验表格内编辑等常用的功能。大部分功能可由配置实现,在实现并扩展了表格组件功能的同时,降低了开发难度,减少了代码量,大大简化了开发流程。 D2-Crud 是一套基于Vue.js 2.2.0+ 和 Element UI 2.0.0+ 的表格组件。D2-Crud 将 Element 的功能进行了封装,并增加了表格的增删改...

    fevin 评论0 收藏0
  • 手摸手,带你用vue撸后台 系列三(实战篇)

    摘要:社区的认可目前已经是相关最多的开源项目了,体现出了社区对其的认可。监听事件手动维护列表这样我们就简单的完成了拖拽排序。 完整项目地址:vue-element-admin 系类文章一:手摸手,带你用vue撸后台 系列一(基础篇)系类文章二:手摸手,带你用vue撸后台 系列二(登录权限篇)系类文章三:手摸手,带你用vue撸后台 系列三(实战篇)系类文章四:手摸手,带你用vue撸后台 系列...

    Channe 评论0 收藏0

发表评论

0条评论

3403771864

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<