@58fe/p5
Version:
pc端vue组件
468 lines (421 loc) • 11.5 kB
Markdown
<script>
module.exports = {
data() {
return {
columns: [
{
label: '姓名',
key: 'name'
},
{
label: '年龄',
key: 'age'
},
{
label: '住址',
key: 'address'
},
{
label: '电话',
key: 'phone'
}
],
data: [
{
name: '张三',
age: 24,
address: '北京市朝阳区',
phone: '17837283728'
},
{
name: '李四',
age: 24,
address: '上海市红桥区',
phone: '18787283762'
},
{
name: '王二麻子',
age: 24,
address: '黑龙江省哈尔滨',
phone: '13289872736'
},
{
name: '小淘气',
age: 24,
address: '重庆',
phone: '19727389983'
}
],
data2: [
{
name: '张三',
age: 24,
address: '北京市朝阳区',
phone: '17837283728'
},
{
name: '李四',
age: 24,
address: '上海市红桥区',
phone: '18787283762'
},
{
name: '王二麻子',
age: 24,
address: '黑龙江省哈尔滨',
phone: '13289872736'
},
{
name: '小淘气',
age: 24,
address: '重庆',
phone: '19727389983'
},
{
name: '张三',
age: 24,
address: '北京市朝阳区',
phone: '17837283728'
},
{
name: '李四',
age: 24,
address: '上海市红桥区',
phone: '18787283762'
},
{
name: '王二麻子',
age: 24,
address: '黑龙江省哈尔滨',
phone: '13289872736'
},
{
name: '小淘气',
age: 24,
address: '重庆',
phone: '19727389983'
}
],
columns3: [
{
label: '姓名',
key: 'name',
fixed: 'left',
width: '120'
},
{
label: '年龄',
key: 'age',
width: '120'
},
{
label: '住址',
key: 'address',
width: '120'
},
{
label: '电话',
key: 'phone',
width: '120'
},
{
label: '年龄2',
key: 'age',
width: '120'
},
{
label: '住址2',
key: 'address',
width: '120'
},
{
label: '电话2',
key: 'phone',
width: '120'
},
{
label: '年龄3',
key: 'age',
width: '120'
},
{
label: '住址3',
key: 'address',
width: '120'
},
{
label: '电话3',
key: 'phone',
width: '120'
}
],
columns4: [
{
label: '姓名',
key: 'name',
fixed: 'left',
width: '120'
},
{
label: '年龄',
key: 'age',
width: '120'
},
{
label: '住址',
key: 'address',
width: '120'
},
{
label: '电话',
key: 'phone',
width: '120'
},
{
label: '年龄2',
key: 'age',
width: '120'
},
{
label: '住址2',
key: 'address',
width: '120'
},
{
label: '电话2',
key: 'phone',
width: '120'
},
{
label: '年龄3',
key: 'age',
width: '120'
},
{
label: '住址3',
key: 'address',
width: '120'
},
{
label: '电话3',
key: 'phone',
fixed: 'right',
width: '120'
}
],
columns5: [
{
label: '姓名',
key: 'name',
sortable: true
},
{
label: '年龄',
key: 'age'
},
{
label: '住址',
key: 'address'
},
{
label: '电话',
key: 'phone'
}
],
columns6: [
{
label: '姓名',
key: 'name',
render: (h, params) => {
return h('div', [
h('strong', params.row.name)
]);
}
},
{
label: '年龄',
key: 'age'
},
{
label: '住址',
key: 'address'
},
{
label: '电话',
key: 'phone'
},
{
label: '操作',
key: 'action',
render: (h, params) => {
return h('div', [
h('Button', {
props: {
type: 'primary',
size: 'small'
},
style: {
marginRight: '5px'
},
on: {
click: () => {
// this.show(params.index)
}
}
}, 'View'),
h('Button', {
props: {
type: 'danger',
size: 'small'
},
on: {
click: () => {
// console.log(params.index);
// console.log(this.data6);
this.data6.splice(params.index, 1);
}
}
}, 'Delete')
]);
}
}
],
data6: [
{
name: '张三',
age: 24,
address: '北京市朝阳区',
phone: '17837283728'
},
{
name: '李四',
age: 24,
address: '上海市红桥区',
phone: '18787283762'
},
{
name: '王二麻子',
age: 24,
address: '黑龙江省哈尔滨',
phone: '13289872736'
},
{
name: '小淘气',
age: 24,
address: '重庆',
phone: '19727389983'
}
],
data7: []
}
},
methods: {
ontablechecked(data) {
console.log(data);
},
sort(callback) {
console.log(callback);
}
}
}
</script>
## table 表格
### 引入
```javascript
import { table } from '@58fe/p5';
```
引用的组件使用过程中,可以加前缀`p5-`进行使用,`p5-table`
### 基本用法
目前只支持,左边固定,右侧固定,中间滑动
:::demo 按钮
```html
<p5-table :data="data" :columns="columns"></p5-table>
```
:::
### 带边框表格
`border`参数设置为true即可
:::demo 按钮
```html
<p5-table :data="data" :columns="columns" :border=true></p5-table>
```
:::
### 固定表头
设置`max-height`最大表格高度,超过高度后可滚动
:::demo 按钮
```html
<p5-table :data="data2" :columns="columns" :max-height="200"></p5-table>
```
:::
### 固定列
`columns`参数中,想要固定的列设置`fixed`值为`left`or`right`,即可固定
:::demo 按钮
```html
<p5-table :data="data2" :columns="columns3"></p5-table>
```
:::
### 同时固定表头和列
`columns`参数中,想要固定的列设置`fixed`值为`left`or`right`,即可固定
:::demo 按钮
```html
<p5-table :data="data2" :columns="columns3" :max-height="200"></p5-table>
```
:::
### 同时固定表头和列 两侧固定
`columns`参数中,想要固定的列设置`fixed`值为`left`or`right`,即可固定
:::demo 按钮
```html
<p5-table :data="data2" :columns="columns4" :max-height="200"></p5-table>
```
:::
### 排序
`columns`参数中,想要设置排序的列设置参数`sortable`值为`true`,点击排序触发`sort`事件。若只设置一列排序,返回参数为对象形式。
`callbackData: {key: 'name',sort: 'asc'}`,其中`sort`值`asc`为升序`decs`为降序`normal`不排序,若设置多列排序,返回参数对象数组`callbackData: [{key: 'name',sort: 'asc'}, {key: 'age',sort: 'desc'}]`。
:::demo 按钮
```html
<p5-table :data="data" :columns="columns5" @sort="sort"></p5-table>
```
:::
### 自定义操作
在`column`内增加`render`函数,该函数提供两个参数`h`渲染函数,同vue的h,第二个参数为当前行的对象数据。
:::demo 按钮
```html
<p5-table :data="data6" :columns="columns6"></p5-table>
```
:::
### 暂无数据
:::demo 按钮
```html
<p5-table :data="data7" :columns="columns6"></p5-table>
```
:::
### 带多选框
:::demo 按钮
```html
<p5-table :data="data" :columns="columns" :has-checkbox=true @ontablechecked="ontablechecked"></p5-table>
```
:::
### 参数
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| -------- | ------------ | ----------- | ------------ | ------- |
| data | 表格数据 | Array | —— | [] |
| columns | 表格头(下面有具体的colums参数说明)| Array | —— | [] |
| maxHeight | 最大高度(超出后,表格滚动) | Number | —— | —— |
| border | 全包围border | Boolean | —— | false |
| hasCheckbox | 是否需要多选框 | Boolean | —— | false |
| isAllCheckedCustom | 是否默认选中全部 | Boolean | —— | false |
<br/>
<br/>
#### colums
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| -------- | ------------ | ----------- | ------------ | ------- |
| label | 表格当前列文案 | String | —— | —— |
| key | 表格当前列key值,对应data中的key | String/Number | —— | —— |
| width | 表格当前列的宽度(默认不填为平均分) | Number/String | —— | —— |
| fixed | 表格头(下面有具体的colums参数说明)| Array | —— | —— |
| sortable | 支持排序功能 | Boolean | —— | ——|
| render | 渲染函数(同vue内的渲染函数,包含两个参数,h/params,`params:{index, row, column}`,index为索引值,row当前行的数据,column当前列的数据) | Function | —— | —— |
#### Events
| 参数 | 说明 | 类型 | 参数 |
| -------- | ------------ | ----------- | ------------ |
| sort | 点击排序图标后触发 | Function | `{key: "${当前要排序的key}", sort: "none"}` sort值为`asc、desc、none` |
| ontablechecked | 点击多选框后触发 | Function | 当前选中状态下的data数组 |