vue-table-module
Version:
表格组件,支持合并单元格,表格滚动,自定义单元格显示内容
379 lines (343 loc) • 8.53 kB
Markdown
# 简介
表格组件,支持合并单元格,表格滚动,自定义单元格显示内容
# 安装
```
npm install vue-table-module
```
# 注册
在 main.js中引入并注册
```
import Vue from 'vue'
import App from './App.vue'
import VueTableModule from 'vue-table-module'
import 'vue-table-module/vue-table-module.css'
Vue.use(VueTableModule)
Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#app')
```
# 使用
## 一、基础用法
```
<template>
<div style="width: 200px;height: 200px;">
<vue-table
:tableData="tableData"
:tableColums="tableColums"
/>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
{
grade: '一年级',
class: '一班',
name: '王小虎',
nativePlace: '重庆',
},
{
grade: '一年级',
class: '一班',
name: '李晓红',
nativePlace: '四川',
},
], // 必传 表格数据
tableColum: [
{
name: '年级', // 必传 列名称
code: 'grade', // 必传 列code
align: 'center', // 可选 对齐方式 默认左对齐 left 可选值 left/center/right
width: '100px', // 可选 对应列的宽度
minWidth: '60px', // 可选 对应列的最小宽度
showOverflowTooltip: true, // 可选 当内容过长被隐藏时显示 tooltip
render: (row, column, $index) => {
// row 行数据
// 列数据
// 行的索引
return row.date
}, // 可选 自定义单元格渲染
},
{
name: '班级',
code: 'class'
},
{
name: '姓名',
code: 'name'
},
{
name: '籍贯',
code: 'nativePlace',
},
], // 必传 表格列配置数据
}
}
}
</script>
```
## 二、样式配置
### 序号、表格滚动、边框
hasIndex 是否显示序号 默认false不显示
hasIndexStyle 序号样式 默认false
indexName 序号列名称 默认序号
styleType 表格样式 默认line 可选值(line、border)
isScroll 表格是否滚动 默认false不滚动
scrollOptions 表格滚动参数配置
```
<template>
<div style="width: 200px;height: 200px;">
<vue-table
:hasIndex="true"
:hasIndexStyle="true"
indexName="排名"
:tableData="tableData"
:tableColums="tableColums"
:isScroll="true"
styleType="border"
/>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
{
grade: '一年级',
class: '一班',
name: '王小虎',
nativePlace: '重庆',
},
{
grade: '一年级',
class: '一班',
name: '李晓红',
nativePlace: '四川',
},
], // 必传 表格数据
tableColums: [
{
name: '年级', // 必传 列名称
code: 'grade', // 必传 列code
align: 'center', // 可选 对齐方式 默认左对齐 left
width: '100px', // 可选 对应列的宽度
minWidth: '60px', // 可选 对应列的最小宽度
showOverflowTooltip: true, // 可选 当内容过长被隐藏时显示 tooltip
},
{
name: '班级',
code: 'class'
},
{
name: '姓名',
code: 'name'
},
{
name: '籍贯',
code: 'nativePlace',
},
], // 必传 表格列配置数据
scrollOptions: {
step: 0.5, // 数值越大速度滚动越快
limitMoveNum: 5, // 开始无缝滚动的数据量
hoverStop: true, // 是否开启鼠标悬停stop
direction: 1, // 0向下 1向上 2向左 3向右
openWatch: true, // 开启数据实时监控刷新dom
singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
}, // 可选 表格滚动参数配置
}
}
}
</script>
```
## 三、功能
### 1、合并单元格
rowSpanCodeList 合并行配置
columnSpanCodeList 合并列配置
```
<template>
<div style="width: 200px;height: 200px;">
<vue-table
:tableData="tableData"
:tableColums="tableColums"
:rowSpanCodeList="rowSpanCodeList"
:columnSpanCodeList="columnSpanCodeList"
/>
</div>
</template>
<script>
export default {
data() {
return {
rowSpanCodeList: ['grade', 'class',], // 可选 需要合并行的code
columnSpanCodeList: [
['nativePlace', 'address'],
['chinese', 'math']
], // 可选 需要合并列的code
tableData: [
{
grade: '一年级',
class: '一班',
name: '王小虎',
nativePlace: '重庆',
address: '重庆',
chinese: '通过',
math: '通过',
},
{
grade: '一年级',
class: '一班',
name: '李晓红',
nativePlace: '四川',
address: '重庆',
chinese: '否',
math: '通过',
},
], // 必传 表格数据
tableColums: [
{
name: '年级', // 必传 列名称
code: 'grade', // 必传 列code
},
{
name: '班级',
code: 'class'
},
{
name: '姓名',
code: 'name'
},
{
name: '籍贯',
code: 'nativePlace',
},
{
name: '现住址',
code: 'address'
},
{
name: '语文',
code: 'chinese',
align: 'center'
},
{
name: '数学',
code: 'math'
},
{
name: '备注',
code: 'remark',
},
{
name: '操作',
code: 'operation',
},
], // 必传 表格列配置数据
}
}
}
</script>
```
### 2、自定义单元格显示内容
通过具名插槽的方式自定义单元格显示内容
插槽名称为列code
插槽可接收参数 row, column, $index
row 行数据
column 列数据
$index 行的索引
```
<template>
<div style="width: 200px;height: 200px;">
<vue-table
:tableData="tableData"
:tableColums="tableColums"
>
<div slot="name" slot-scope="{row, column, $index}">
<div v-if="$index === 0" style="color: rgb(204, 112, 20);">
{{ row[column.property] }}
</div>
<div v-else>{{ row[column.property] }}</div>
</div>
<div slot="remark" slot-scope="{row, column}">
<el-input size="mini" v-model="row[column.property]" placeholder="请输入"></el-input>
</div>
<div slot="operation">
<el-button type="text">编辑</el-button>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
{
grade: '一年级',
class: '一班',
name: '王小虎',
nativePlace: '重庆',
address: '重庆',
chinese: '通过',
math: '通过',
},
{
grade: '一年级',
class: '一班',
name: '李晓红',
nativePlace: '四川',
address: '重庆',
chinese: '否',
math: '通过',
},
], // 必传 表格数据
tableColums: [
{
name: '年级', // 必传 列名称
code: 'grade', // 必传 列code
},
{
name: '班级',
code: 'class'
},
{
name: '姓名',
code: 'name'
},
{
name: '籍贯',
code: 'nativePlace',
},
{
name: '现住址',
code: 'address'
},
{
name: '语文',
code: 'chinese',
align: 'center'
},
{
name: '数学',
code: 'math'
},
{
name: '备注',
code: 'remark',
},
{
name: '操作',
code: 'operation',
},
], // 必传 表格列配置数据
}
}
}
</script>
```