Git Product home page Git Product logo

aftablecolumn's Introduction

简介

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

安装

npm install af-table-column

使用

注意: 需要事先引入 VueElement-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>

因为组件暂时不能考虑到所有的自定义情况并计算元素实际宽度

配置项

  1. fontRate: 自适应列宽时三种字符的字体比例
字符 字段 默认值
汉字 CHAR_RATE 1.1
数字 NUM_RATE 0.65
其他 OTHER_RATE 0.5
  1. 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>

备注: 可缺省任意字段, 组件将使用默认值.

aftablecolumn's People

Contributors

legendjaden avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

aftablecolumn's Issues

建议字体大小可配置

我的表格表头部分的字体大小是16px,并且字体有加粗,导致自适应的效果不太完美,如果字体大小部分可以在使用组件时配置就更好了。同时表示感谢,解我燃眉之急。

表头也会强制不换行吗

在数据并不长 表头比较长的情况下 会因为表头撑开导致表格宽度特别大 留白很多 不太合理

间距

每个td之间的间距如何控制 有个class为cell的左右间距都改未0了 间距还是很大

自适应表格失效

当这个表格之前还有一个数据不同的表格的时候,这个表格就失去了自适应效果。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.