可以使用af-table-column支持table自适应列宽功能

作者:cn-jack 557 浏览 1 评论 发布时间:2019-12-24 10:54:39

https://github.com/legendJaden/AFTableColumn

af-table-column
简介
基于 element-ui 组件库的 el-table-column 组件, 支持自适应列宽功能

安装
npm install af-table-column
使用
注意: 需要事先引入 Vue  Element-UI 依赖库, 并在 <el-table></el-table> 组件下使用该组件

// main.js
import Vue from 'vue'
import ElementUI from 'element-ui'
import AFTableColumn from 'af-table-column'

Vue.use(AFTableColumn)
默认用法, 全部自适应列宽
// list.vue
<template>
  <el-table :data="data">

    <af-table-column label="列1" prop="field1"></af-table-column>
    <af-table-column label="列2" prop="field2"></af-table-column>

    <!--也支持简单的自定义内容-->
    <af-table-column label="列3">
      <template slot-scope="scope">
        <div>自定义显示值31: {{ scope.row.field31 }}</div>
        <div>自定义显示值32: {{ scope.row.field32 }}</div>
      </template>
    </af-table-column>
    <af-table-column label="操作">
      <template slot-scope="scope">
        <el-button @click="removeItem">删除</el-button>
      </template>
    </af-table-column>

  </el-table>
</template>
部分不适应列宽, 两种写法:
// list.vue
<template>
  <el-table :data="data">
    <!--1. 设置 fit 属性为 false-->
    <af-table-column label="列1" prop="field1" :fit="false"></af-table-column>

    <!--2. 使用 `ElementUI` 原有的 `el-table-column`-->
    <el-table-column label="列2" prop="field2"></el-table-column>
  </el-table>
</template>
部分自适应列宽:
// list.vue
// 实现仅有 2 自适应
<template>
  <!-- table 上设置 autoFit 属性为 false-->
  <el-table :data="data" :autoFit="false">
    <af-table-column label="列1" prop="field1"></af-table-column>

    <!-- column 上设置 fit 属性为 true-->
    <af-table-column label="列2" prop="field2" fit></af-table-column>
  </el-table>
</template>

<!--或者其他列使用 ElementUI 原有的 el-table-column-->
<template>
  <el-table :data="data">
    <el-table-column label="列1" prop="field1"></el-table-column>
    <af-table-column label="列2" prop="field2"></af-table-column>
  </el-table>
</template>
暂不支持的用法: column 的自定义内容中存在过于复杂的组件, :

<el-table>
  <af-table-column>
    <template slot-scope="scope">

      <el-form>
        <el-form-item label="输入框" prop="inputField">
          <el-input v-model="formData.inputField"></el-input>
        </el-form-item>
        <el-form-item label="选择框" prop="selectField">
          <el-select v-model="formData.selectField">
            <el-option :label="选项1" :value="value1"></el-option>
            <el-option :label="选项2" :value="value2"></el-option>
            <el-option :label="选项3" :value="value3"></el-option>
          </el-select>
        </el-form-item>
      </el-form>

    </template>
  </af-table-column>
</el-table>
因为组件暂时不能考虑到所有的自定义情况并计算元素实际宽度

配置项
fontRate: 自适应列宽时三种字符的字体比例
字符  字段  默认值
汉字  CHAR_RATE   1.1
数字  NUM_RATE    0.65
其他  OTHER_RATE  0.5
fontSize: 字体大小px值, 用于计算各种字符占的像素宽度, 默认为 14
注意: 此字段并非控制样式的 font-size

// 全局配置
// main.js
// 定义字体比例
const fontRate = {
  CHAR_RATE: 1.1, // 汉字比率
  NUM_RATE: 0.65, // 数字
  OTHER_RATE: 0.8 // 除汉字和数字以外的字符的比率
}
const fontSize = 16
// 注册组件
Vue.use(AFTableColumn, { fontRate, fontSize })

// 局部配置
// 以上字段也可作为组件的属性, 用于单独设置对应列
// list.vue
<template>
  <el-table>
    <af-table-column :fontSize="20" label="列1" prop="field1"></af-table-column>
    <af-table-column :fontRate="fontRate" label="列2" prop="field2"></af-table-column>
  </el-table>
</template>
<script>
  export default {
    data () {
      return {
        fontRate: {
          OTHER_RATE: 1.5
        },
      }
    }
  }
</script>
备注: 可缺省任意字段, 组件将使用默认值.

Loading...
评论列表 1条评论
社区小助手
2020-05-04 18:14:50

厉害