# JTable 支持列自定义及可拖拽列宽的表格
## JTable参数配置
| 参数 | 类型 | 必填 | 说明 |
|--------------|--------|-----|----------------------------------------------------------------|
| tableKey | String | ✔ | 全局`JTable`唯一,持久化存储自定义列配置 |
| columns | Array | ✔ | **需要配合`.sync`获取最新的数据**,具体项见下表 |
| settingStyle | Object | | 自定义列配置表的样式 |
| settingScroll | Object | | 自定义列配置表的滚动配置 |
| scroll | Object | | 表格滚动配置,建议使用拖拽属性`resizable`时设置`scroll.x`,**需要配合`.sync`获取最新的数据** |
| columnMinWidth | Number | | 所有列共用的最小宽度,在没有`width`和`minWidth`时的冻结列和拖拽列的最小宽度 |
## columns参数配置
| 参数 | 类型 | 必填 | 说明 |
|-------------------|----------------|----|--------------------------------|
| hideSettingColumn | Boolean | | 是否在自定义列配置表中隐藏 |
| disabledHide | Boolean | | 是否禁用自定义列配置表中的隐藏复选框 |
| disabledFreeze | Boolean | | 是否禁用自定义列配置表中的冻结复选框 |
| fixed | String、Boolean | | 默认的冻结列,只能为`true`或`'left'`其他不生效 |
| width | Number | | 列宽,只能是数字 |
| minWidth | Number | | 最小列宽,只能是数字,在冻结列和拖拽列时生效 |
| resizable | Boolean | | 是否启用拖拽,需要表格显示边框`bordered` |
## JTable的方法
### clearAllCacheSetting
用于清理所有JTable的缓存
- `参数:` 无
- `返回值:` 无
### clearSetting
用于清理当前表的缓存
- `参数:` 无
- `返回值:` 无
### resteColumns
还原初始的配置
- `参数:` 无
- `返回值:` 无
## FAQ
### 方法如何调用?
在[示例](#示例)中,设定了一个 `ref="table"` 的属性,那么在vue中就可以使用`this.$refs.table`获取到该表格的实例,并调取其中的方法。
假如我要调取`resteColumns`方法,就可以这么写:`this.$refs.table.resteColumns()`
### `columns`和`scroll`为什么要使用`.sync`
保证父组件和子组件数据同步
`columns`自定义列配置后会同步,
`scroll`拖拽后会把最新的总宽度同步
### 对原`a-table`的使用有哪些限制
- 操作列的`dataIndex`或`key`必须为`action`
- 带有设置的列不能使用`scopedSlots.filterIcon` 和 `scopedSlots.filterDropdown`(没有操作列时,设置在最后一列)
- `scroll.x`和`width`必须是数字,不支持百分比
- 使用作用域插槽,需要使用解构赋值,里面有三个参数`{text, record, index}`,可参考[示例](#示例)写法
### 拖拽后没有设置宽度的列会被缩小
- 设置scroll.x配置一个默认宽度即可
### 出现空白列
- 设置至少一列没有width(没有width不能被拖拽)
- 建议没有`width`的列不能手动控制隐藏和冻结,使用`disabledHide`和`disabledFreeze`或者`hideSettingColumn`
### `resizable`没有效果
- 需要设置`resizable: true`,要有`width`,且不能有`fixed`
### 自定义列的弹框会消失
- 因为冻结列的出现或消失会刷新表格结构导致弹框丢失
- 设置一个冻结列始终存在,不可被手动控制隐藏和取消冻结即可
### 注意事项
- `table-key`该属性为全局每个表的唯一属性,建议使用路由+命名的方式,如[示例](#示例)中设置
- 固定头和列(ant-design-vue自带的问题) :若列头与内容不对齐或出现列重复,请指定固定列的宽度 width。如果指定 width 不生效或出现白色垂直空隙,请尝试建议留一列不设宽度以适应弹性布局,或者检查是否有超长连续字段破坏布局。
建议指定 scroll.x 为大于表格宽度的固定值。注意,且非固定列宽度之和不要超过 `scroll.x`。
## 示例
```vue
重置表格配置
清空本表缓存
清空全局JTable缓存
{{ text }}
Name
{{ tag.toUpperCase() }}
onDelete(record.key)"
>
Delete
Footer:{{ currentPageData }}
```