# m-table m-table-column

# 介绍

本组件是对 el-table 二次封装,增加默认值 stripeborderhighlightCurrentRow 等属性;改写 @sort-change 事件的返回参数,如 ascending 改为 ascdescending 改为 desc, 以使其返回结构与后端 api 接口参数一致。

# 目录结构

...
└─ src
   └─ components
      └─ MTable              # 表格
         ├─ index.js         # 注册入口
         ├─ index.vue        # 表格组件
         ├─ column           # m-table-column
         └─ poster           # 表格中海报图
...

# 使用注释

/**
 * m-table
 * @module components/MTable
 * @desc 对 element-ui 的 el-table 组件二次封装
 * @param {array} data - 显示的数据,同el-table
 * @param {string, number} [height] - table 高度
 * @param {boolean} [stripe] - 是否为斑马纹 table,默认值 true
 * @param {boolean} [border] - 是否带有纵向边框,默认值 true
 * @param {boolean} [highlightCurrentRow] - 是否要高亮当前行,默认值 true
 * @param {object} [sort] - 手动对 Table 进行排序,同 el-table
 * @param {string} [sort.sortby] - 排序字段
 * @param {string} [sort.order] - 排序顺序,asc,desc
 * @param {string} [sortby] - 调用后端排序的字段,逗号分隔,对el-table的sortby方法进行了改写
 * @param {function} [spanMethod] - 合并行或列的计算方法,同 el-table
 * 
 * @example
 * <m-table v-loading="loading"
 *   :data="list"
 *   :sort.sync="sort"
 *   @sort-change="getData(true)"
 *   sortby="year, vote_count"
 * >
 *    <m-table-column>...</m-table-column>
 * </m-table>
 */

# 源码

<template>
  <el-table
    :data="data"
    :sort="sort"
    :border="border"
    :stripe="stripe"
    :height="height"
    :highlight-current-row="highlightCurrentRow"
    @sort-change="sortChangeHandle"
    :span-method="spanMethod"
    :sortby="sortby"
  >
    <slot />
  </el-table>
</template>
export default {
  name: "MTable",
  props: {
    data: {
      type: Array,
      default: () => [],
    },
    height: {
      type: [String, Number],
      default: "100%",
    },
    stripe: {
      type: Boolean,
      default: true,
    },
    border: {
      type: Boolean,
      default: true,
    },
    highlightCurrentRow: {
      type: Boolean,
      default: true,
    },
    spanMethod: {},
    sort: {},
    sortby: {},
  },
  methods: {
    sortChangeHandle({ column, prop, order }) {
      const orderby = order
        ? order === "ascending"
          ? "asc"
          : order === "descending"
          ? "desc"
          : order
        : order;

      // 如果是多级属性,则取最后一个
      // e.g movie.year 取 year
      if (prop) {
        prop = prop.split(".")[prop.split(".").length - 1];
      }

      this.$emit("update:sort", { sortby: prop, order: orderby });

      this.$emit("sort-change", { column, prop, order });
    },
  },
};

# m-table-column

m-table 配套使用,替代 el-table-column,设置默认 align="center", header-align="center",增加 lineClamp 属性,可设置内容显示行数。

/**
 * m-table
 * @module components/MTable/column
 * @desc 对 element-ui 的 el-table-column 组件二次封装,只可在el-table中使用
 * @param {string} prop - 对应列内容的字段名,也可以使用 property 属性
 * @param {string} label - 显示的标题
 * @param {boolean, string} [sortable] - 对应列是否可以排序
 * @param {boolean} [width] - 对应列的宽度
 * @param {boolean} [minWidth] - 对应列的最小宽度
 * @param {object} [align] - 对齐方式,默认值为 center
 * @param {object} [headerAlign] - header 对齐方式,默认值为 center
 * @param {string} [fixed] - 列是否固定在左侧或者右侧,true 表示固定在左侧
 * @param {string} [showOverflowTooltip] - 当内容过长被隐藏时显示 tooltip
 * @param {string} [className] - 自定义类名
 * @param {number} [lineClamp] - 超过指定行数后显示... 默认值4
 * 
 * @example
 * <m-table-column prop="name" label="列名" width="160" />
 */
上次更新: 6/24/2022, 12:10:54 AM