shuyilink-ui
Version:
shuyilink UI组件库
385 lines (356 loc) • 7.01 kB
Markdown
### 定制表格组件技术文档
#### 简介
**目的:** 定制表格组件开发是为解决三方表格组件在性能低的平台下,出现渲染慢、卡顿现象。
**思路:** 该组件基于div + flex布局,模拟表格布局及操作。实行单层数据传递,减少组件多层嵌套、数据传递监听带来的性能损耗。
**优化:** 尽可能传入配置数据,减少单组件内部计算及样式重排重绘,提升大数据量情况下的性能。
#### 安装
```js
npm install shuyilink-ui
```
#### 引入组件
```js
import Vue from 'vue'
import ShuyilinkUI from 'shuyilink-ui'
import 'shuyilink-ui/shuyilink-ui.css'
Vue.use(ShuyilinkUI)
```
#### 插入组件
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
/>
<script>
export default {
data: {
return {
tableData: [],
tableSetting: []
}
},
mounted() {
this.getTableTitles()
},
methods: {
getTableTitles() {
this.tableSetting = [
{
label: '呼叫人',
val: 'callStaffName'
},
{
label: '被呼叫人',
width: 100,
val: 'calledStaffName'
},
{
label: '呼叫时间',
width: 160,
val: 'callTime'
}
]
}
}
}
</script>
```
#### 配置参数 [props]
- **data:**
type: Array
default: []
接口获取的表格数据列表,格式如下:
```js
[
{id: '', productName: '', productCode: '', ...},
...
]
```
- **setting:** 表格配置
type: Array
default: []
示例
```js
[
{
label: '产品名称', // 表头标题
width: 60, // 单元格列宽: Number || String
val: 'productName', // 取值属性
fixed: true, // 是否固定列
fixedLeft: 90, // 固定左侧距离(左侧固定)
fixedRight: 60, // 固定右侧距离(右侧固定)
fixedLast: true, // 是否为单侧最后一个固定项
template: true // 是否为html字符串模板
},
...
]
```
- **selectionMultiple:** 是否为多选
type: Boolean
default: false
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
selection-multiple
/>
```
- **selectionToggle:** 单选情况下: 是否可切换选择/不选择
type: Boolean
default: true
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
:selection-toggle="false"
/>
```
- **selectionAllShow:** 是否显示表头全勾选框
type: Boolean
default: false
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
selection-all-show
/>
```
- **selectionShow:** 是否显示勾选列
type: Boolean
default: false
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
selection-show
/>
```
- **selectionFixed:** 勾选列固定左侧
type: Boolean
default: false
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
selection-fixed
/>
```
- **selectionHighlight:** 勾选高亮当前行
type: Boolean
default: false
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
click-to-select
selection-highlight
/>
```
- **indexShow:** 是否显示索引列
type: Boolean
default: true
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
:index-show="false"
/>
```
- **indexFixed:** 索引列固定左侧
type: Boolean
default: false
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
index-fixed
/>
```
- **highlightCurrentRow:** 是否高亮当前行
type: Boolean
default: false
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
highlight-current-row
/>
```
- **clickToSelect:** 点击行的时候是否要选中行
type: Boolean
default: false
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
click-to-select
/>
```
- **height:** 表格高度
type: String
default: '' // 样式表默认100%
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
height="500px"
/>
```
- **scrollSize:** 表格主体滚动条尺寸 [宽度, 高度]
type: Array
default: [10, 10] // 默认宽高10px
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
:scroll-size="[20, 20]"
/>
```
- **indexText:** 索引列表头文字
type: String
default: 'NO.'
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
index-text="序号"
/>
```
- **cellWrap:** 表格主体单元格字符换行
type: Boolean
default: false
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
cell-wrap
/>
```
- **headWrap:** 表格头部单元格字符换行
type: Boolean
default: false
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
head-wrap
/>
```
#### 事件触发
- **row-click:** 行点击
参数: row 当前行数据
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
-click="rowClick"
/>
<script>
export default {
data() {
return {
clickedRow: null
}
},
methods: {
rowClick(row) {
this.clickedRow = row
}
}
}
</script>
```
- **select:** 选择/取消选择
参数: selectedRows 勾选的列表
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
selection-show
="select"
/>
<script>
export default {
data() {
return {
checkRow: {}
}
},
methods: {
// 选择行中的复选框
select(selectedRows) {
this.checkRow = selectedRows.length ? selectedRows[0] : {}
},
}
}
</script>
```
- **select-all:** 全选/全不选
参数: selectAllChecked 全选状态
示例
```vue
<sy-table
:data="tableData"
:setting="tableSetting"
selection-show
selection-all-show
selection-multiple
="select"
-all="selectAll"
/>
<script>
export default {
data() {
return {
selectedRows: []
}
},
methods: {
// 列表勾选
select() {
this.selectedRows = this.tableData.filter(item => item.checked)
},
// 选择全选/全不选
selectAll(selectedRows) {
this.selectedRows = selectedRows
}
}
}
</script>
```
#### 样式调整
需针对子组件样式穿透,进行表格样式重置修改
以下component-root-class样式名为当前组件根样式类名
- 表头
```scss
.component-root-class ::v-deep .div-table .div-table-head .item .col {
height: 80px;
font-size: 12px;
...
}
```
- 表格主体单元格
```scss
.component-root-class ::v-deep .div-table .div-table-body .item .col {
height: 80px;
font-size: 16px;
...
}
```
更多样式调整请参看表格样式源码