elemeentui el-table封装

elemeentui el-table封装 

<template>
  <div style="height: 100%;">
    <el-table ref="sneTable"  
    element-loading-text="加载中" 
    element-loading-spinner="el-icon-loading"
      element-loading-background="rgba(45,47,79, 0.8)" 
      :border="border" 
      :stripe="stripe" 
      :height="height"
      :max-height="maxHeight" 
      :size="size" 
      :row-key="rowKey" 
      :data="dataSource" 
      style="width: 99%;font-size: 14px "
      :default-expand-all="isExpandAll" 
      :tree-props="treeProps" 
      :span-method="onSpanMethod"
      @current-change="currentRowChange" 
      @selection-change="selectionChange" 
      @row-click="rowClick"
      @sort-change="sortChange">
      <div slot="empty" class="relative">
        <empty />
      </div>
      <el-table-column v-if="selector" reserve-selection fixed="left" type="selection" header-align="center"
        align="center" width="50" :selectable="checkSelectTable" />
      <el-table-column v-if="index" align="center" fixed="left" type="index" label="序号" width="50"></el-table-column>
      <template v-for="(column, i) in columns">
        <el-table-column v-if="isShow(column)" :key="i" :prop="column.prop" :label="column.label" :width="column.width"
          :min-width="column.minWidth" :sortable="column.sortable || false" :align="column.align || 'left'"
          :fixed="column.fixed" :show-overflow-tooltip="showTooltip">
          <template #default="{ row }">
            <span v-if="!column.slotName">
              {
  {
                row[column.prop] || row[column.prop] === 0
                ? row[column.prop]
                : "--"
              }}
            </span>
            <slot v-else :name="column.slotName" :data="row" />
          </template>
        </el-table-column>
      </template>
    </el-table>
  </div>
</template>
<script setup>
const props = defineProps({
  // 加载
  loading: { type: Boolean, default: false },
  // 是否带边框
  border: { type: Boolean, default: false },
  // 是否带斑马纹
  stripe: { type: Boolean, default: false },
  // 是否有序号
  index: { type: Boolean, default: true },
  // 表格高度 不传默认是计算后的高度
  height: { type: [Number, String], default: null },
  // 表格最大高度
  maxHeight: { type: Number, default: null },
  // 表格大小
  size: { type: String, default: "small" },
  // 唯一标识
  rowKey: { type: String, default: null },
  // 表数据
  dataSource: { type: Array, default: () => [] },
  // 是否多选
  selector: { type: Boolean, default: false },

  // 表头
  columns: { type: [String, Object, Array], required: true },
  // 是否展开
  isExpandAll: { type: Boolean, default: false },
  // 渲染嵌套数据的配置选项
  treeProps: {
    type: Object,
    default: () => { }
  },
  small: { type: Boolean, default: false },
  showTooltip: {
    type: Boolean,
    default: true
  }
})
const emit = defineEmits()
function sortChange({ column, prop, order }) {
  emit("sortChange", { column, prop, order });
}
function onSpanMethod({ rowIndex, columnIndex }) {
  let obj = { rowspan: 1, colspan: 1 };
  emit("onSpanMethod", { rowIndex, columnIndex }, val => {
    obj = val;
  });
  return obj;
}
function isShow(c) {
  return c.show === undefined ? true : c.show;
}
// 当前行变化
function currentRowChange(row) {
  if (row) emit("currentRowChange", row);
}

// 多选
function selectionChange(values) {
  emit("selection-change", values);
}

// 设置多选框(数据增加selectionIsSelect字段,判断当前是否可勾选)
function checkSelectTable(row) {
  return row.selectionIsSelect !== undefined ? row.selectionIsSelect : true;
}
// 点击某一行
function rowClick(row) {
  if (row) emit("row-click", row);
}
</script>

父使用

  <sne-table ref="sRef" :loading="loading" :selector="true" size="mini" row-key="id" height="calc( 100% - 140px )"
         :data-source="noticeList" :columns="columns" @selection-change="handleSelectionChange">
          <template #noticeType="{data}">
            <dict-tag :options="sys_notice_type" :value="data.noticeType" />
          </template>
          <template #status="{ data }">
            <dict-tag :options="sys_notice_status" :value="data.status" />
         </template>
         <template #createTime="{ data }">
            <span>{
  { parseTime(data.createTime, '{y}-{m}-{d}') }}</span>
         </template>
         <template #operate="{ data }">
            <el-button  link type="primary" :icon="EditPen" @click="handleUpdate(data)">修改</el-button>
            <el-button link type="primary" icon="Delete" @click="handleDelete(data)" v-hasPermi="['system:notice:remove']">删除</el-button>
         </template>
      </sne-table>

elemeentuiPlus el-table封装   vue3

<template>
  <div style="height: 100%;">
    <!-- element-loading-text="加载中" 
    element-loading-spinner="el-icon-loading"
      element-loading-background="rgba(45,47,79, 0.8)"  -->
    <el-table ref="sneTable"  
      :data="dataSource" 
     
      :row-key="rowKey"
      v-loading="loading"
      :default-expand-all="isExpandAll" 
      :tree-props="treeProps" 
      :border="border" 
      :stripe="stripe" 
      :height="height"
      :max-height="maxHeight" 
      size="default" 
      @row-click="rowClick"
      @selection-change="selectionChange" 
      @sort-change="sortChange"
      @current-change="currentRowChange" 
      :span-method="onSpanMethod"
      style="width: 99%;font-size: 14px ">
      <el-table-column v-if="selector" reserve-selection fixed="left" type="selection" header-align="center"
        align="center" width="50" :selectable="checkSelectTable" />
        <el-table-column v-if="index" align="center" fixed="left" type="index" label="序号" width="50"></el-table-column>
        <template  v-for="(column, i) in columns">
        <el-table-column  v-if="isShow(column)" :prop="column.prop" :label="column.label" :width="column.width"
          :min-width="column.minWidth" :sortable="column.sortable || false" :align="column.align || 'left'"
          :fixed="column.fixed" :show-overflow-tooltip="showTooltip">
          <template #default="{ row }">
            <span v-if="!column.slotName">
            {
  { row[column.prop] ||  row[column.prop] === 0? row[column.prop] :'' }}</span>
            <slot :name="column.slotName" :data="row" />
          </template>
        </el-table-column>
      </template>
    </el-table>
  </div>
</template>
<script setup>
const props = defineProps({
  // 是否带边框
  border: { type: Boolean, default: false },
  // 是否带斑马纹
  stripe: { type: Boolean, default: false },
  // 是否有序号
  index: { type: Boolean, default: true },
  // 表格高度 不传默认是计算后的高度
  height: { type: [Number, String], default: null },
  // 表格最大高度
  maxHeight: { type: Number, default: null },
  // 表格大小
  size: { type: String, default: "large" },
    // 表数据
    dataSource: {type: Array,default: () => []},
     // 加载
    loading: {type: Boolean, default: false},
      // 表头
    columns: { type: [String, Object, Array], required: true },
    // 是否显示tooltip
    showTooltip: {type: Boolean,default: true},
      // 是否多选
  selector: { type: Boolean, default: false },
  // 唯一标识
  rowKey: { type: String, default: null },
    // 是否展开
    isExpandAll: { type: Boolean, default: false },
  // 渲染嵌套数据的配置选项
  treeProps: { type: Object, default: () => { }},
})
const emit = defineEmits()

function onSpanMethod({ rowIndex, columnIndex }) {
  // let obj = { rowspan: 1, colspan: 1 };
  // emit("onSpanMethod", { rowIndex, columnIndex }, val => {obj = val;});
  // return obj;
}
function isShow(c) {
  return c.show === undefined ? true : c.show;
}
// 当前行变化
function currentRowChange(row) {
  // if (row) emit("currentRowChange", row);
}
function sortChange({ column, prop, order }) {
  // emit("sortChange", { column, prop, order });
}
// 多选
function selectionChange(values) {
  emit("selection-change", values);
}

// 设置多选框(数据增加selectionIsSelect字段,判断当前是否可勾选)
function checkSelectTable(row) {
  return row.selectionIsSelect !== undefined ? row.selectionIsSelect : true;
}
// // 点击某一行
function rowClick(row) {
  // if (row) emit("row-click", row);
}
</script>

相关推荐

  1. elemeentui el-table封装

    2024-01-22 14:24:03       31 阅读
  2. vue3中封装table表格

    2024-01-22 14:24:03       14 阅读
  3. Vue基础篇--table封装

    2024-01-22 14:24:03       8 阅读
  4. vue3 element plus el-table封装(二)

    2024-01-22 14:24:03       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-22 14:24:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-22 14:24:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-22 14:24:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-22 14:24:03       20 阅读

热门阅读

  1. -交换机-

    2024-01-22 14:24:03       40 阅读
  2. QT基础篇(13)QT5数据库

    2024-01-22 14:24:03       32 阅读
  3. k8s是什么?一文详解!

    2024-01-22 14:24:03       27 阅读
  4. Liunx运维批处理命令xargs

    2024-01-22 14:24:03       27 阅读
  5. AWS认证SAA-C03每日一题

    2024-01-22 14:24:03       22 阅读
  6. zookeeper源码(06)ZooKeeperServer及子类

    2024-01-22 14:24:03       28 阅读
  7. Vue3与Vue2的区别和优化

    2024-01-22 14:24:03       32 阅读
  8. 计算机通信:FTP协议详解

    2024-01-22 14:24:03       33 阅读
  9. 后渗透利用和跨网段攻击

    2024-01-22 14:24:03       33 阅读
  10. sql 查询时间范围内的数据

    2024-01-22 14:24:03       33 阅读
  11. Access 中SQL的例题

    2024-01-22 14:24:03       29 阅读