Skip to content

Commit 3edbb20

Browse files
committed
feat: 优化表格组件
1 parent 8ea4bb2 commit 3edbb20

File tree

4 files changed

+94
-61
lines changed

4 files changed

+94
-61
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
中文 | [英文](https://github.com/FightingDesign/fighting-design/blob/master/CHANGELOG.en-US.md)
44

5+
## 0.66.2 (2023-12-20)
6+
7+
- 新增 `f-tabale` 组件 `select``on-select` 配置项
8+
59
## 0.66.1 (2023-12-19)
610

711
- 修复 `f-pagination` 组件在 `total` 小于 `page-size` 时候显示页码错误的问题

docs/components/table.md

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@
396396
key: 'introduce'
397397
}
398398
])
399-
const data = ref([
399+
const data2 = ref([
400400
{
401401
name: '卡莉斯塔',
402402
age: '22',
@@ -661,6 +661,71 @@
661661

662662
:::
663663

664+
## 多选的
665+
666+
`select` 配置项,配合 `on-select` 回调可实现表格选择
667+
668+
::: demo
669+
670+
<template #source>
671+
<f-table :data="data" :columns="columns" select :on-select="onSelect" />
672+
</template>
673+
674+
```html
675+
<template>
676+
<f-table :data="data" :columns="columns" select :on-select="onSelect" />
677+
</template>
678+
679+
<script lang="ts" setup>
680+
import { ref } from 'vue'
681+
import type { TableSelect } from 'fighting-design'
682+
683+
const onSelect: TableSelect = values => {
684+
console.log(values)
685+
}
686+
687+
const columns = ref([
688+
{
689+
title: '姓名',
690+
key: 'name'
691+
},
692+
{
693+
title: '年龄',
694+
key: 'age'
695+
},
696+
{
697+
title: '介绍',
698+
key: 'introduce'
699+
}
700+
])
701+
702+
const data = ref([
703+
{
704+
name: '卡莉斯塔',
705+
age: '22',
706+
introduce: '她的被动可以在发动攻击后进行小距离的跳跃'
707+
},
708+
{
709+
name: '艾希',
710+
age: '16',
711+
introduce: '拥有强大减速和控制能力的远程射手'
712+
},
713+
{
714+
name: '李青',
715+
age: '34',
716+
introduce: '非常优秀的打野英雄'
717+
},
718+
{
719+
name: '贾克斯',
720+
age: '109',
721+
introduce: '取得优势的武器可以输出成吨的伤害'
722+
}
723+
])
724+
</script>
725+
```
726+
727+
:::
728+
664729
## Attributes
665730

666731
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
@@ -782,6 +847,10 @@ type TableSelect = (value: TableData) => void
782847
import demo1Vue from './demos/table/demo1.vue'
783848
import { FButton, FMessage } from 'fighting-design'
784849
850+
const onSelect = values => {
851+
console.log(values)
852+
}
853+
785854
const columns = ref([
786855
{
787856
title: '姓名',

packages/fighting-design/table/src/table.vue

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@
6565
/** 是否选中所有 */
6666
const isSelectAll = computed({
6767
get: (): boolean => {
68+
if (!formatData.value.length) {
69+
return false
70+
}
6871
return (formatData.value || []).every(item => item._select)
6972
},
7073
set: (value: boolean): boolean => {
@@ -127,22 +130,21 @@
127130
https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/colgroup
128131
-->
129132
<colgroup>
130-
<col v-if="num" />
131-
<col v-if="select" />
133+
<col v-if="select" :width="50" :span="1" />
134+
<col v-if="num" :width="50" :span="1" />
132135
<col
133136
v-for="(column, index) in columns"
134137
:key="index"
135-
:span="index + 1"
136138
:width="column.width"
137139
/>
138140
</colgroup>
139141

140142
<thead :align="align">
141143
<tr>
142-
<th v-if="num">#</th>
143144
<th v-if="select">
144-
<f-checkbox v-model="isSelectAll" />
145+
<f-checkbox v-model="isSelectAll" :disabled="!formatData.length" />
145146
</th>
147+
<th v-if="num">#</th>
146148
<th v-for="(column, index) in columns" :key="index">
147149
<!-- 如果是一个函数,则调用方法 -->
148150
<template v-if="isFunction(column.title)">
@@ -164,8 +166,8 @@
164166
<!-- 有数据 -->
165167
<table v-if="formatData && formatData.length" class="f-table__table">
166168
<colgroup>
167-
<col v-if="num" />
168-
<col v-if="select" />
169+
<col v-if="select" :width="50" :span="1" />
170+
<col v-if="num" :width="50" :span="1" />
169171
<col
170172
v-for="(column, index) in columns"
171173
:key="index"
@@ -177,10 +179,10 @@
177179
<!-- 在没有限制高度时候展示的表头 -->
178180
<thead v-if="!isHead" :align="align">
179181
<tr>
180-
<th v-if="num">#</th>
181182
<th v-if="select">
182-
<f-checkbox v-model="isSelectAll" />
183+
<f-checkbox v-model="isSelectAll" :disabled="!formatData.length" />
183184
</th>
185+
<th v-if="num">#</th>
184186
<th v-for="(column, index) in columns" :key="index">
185187
<!-- 如果是一个函数,则调用方法 -->
186188
<template v-if="isFunction(column.title)">
@@ -196,13 +198,12 @@
196198
</thead>
197199

198200
<!-- 主要渲染内容的表体 -->
199-
<tbody ref="tableRef" :align="align">
201+
<tbody :align="align">
200202
<tr v-for="(item, m) in formatData" :key="m">
201-
<!-- 序号列表 -->
202-
<td v-if="num">{{ m + 1 }}</td>
203203
<td v-if="select">
204204
<f-checkbox v-model="item._select" :on-change="checkboxChange" />
205205
</td>
206+
<td v-if="num">{{ m + 1 }}</td>
206207

207208
<!-- 主内容 -->
208209
<td v-for="(column, i) in columns" :key="i">
@@ -232,6 +233,7 @@
232233
<!-- 有数据 -->
233234
<table class="f-table__table">
234235
<colgroup>
236+
<col v-if="select" :width="50" :span="1" />
235237
<col v-if="num" />
236238
<col
237239
v-for="(column, index) in columns"
@@ -244,6 +246,9 @@
244246
<!-- 在没有限制高度时候展示的表头 -->
245247
<thead v-if="!isHead" :align="align">
246248
<tr>
249+
<th v-if="select">
250+
<f-checkbox v-model="isSelectAll" :disabled="!formatData.length" />
251+
</th>
247252
<th v-if="num">#</th>
248253
<th v-for="(column, index) in columns" :key="index">
249254
<!-- 如果是一个函数,则调用方法 -->

start/src/App.vue

Lines changed: 3 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,5 @@
1-
<template>
2-
<f-table :data="data" :columns="columns" select :on-select="onSelect" />
3-
</template>
1+
<script lang="ts" setup></script>
42

5-
<script lang="ts" setup>
6-
import { ref } from 'vue'
7-
import type { TableSelect } from 'fighting-design'
3+
<template></template>
84

9-
const onSelect: TableSelect = values => {
10-
console.log(values)
11-
}
12-
13-
const columns = ref([
14-
{
15-
title: '姓名',
16-
key: 'name'
17-
},
18-
{
19-
title: '年龄',
20-
key: 'age'
21-
},
22-
{
23-
title: '介绍',
24-
key: 'introduce'
25-
}
26-
])
27-
28-
const data = ref([
29-
{
30-
name: '卡莉斯塔',
31-
age: '22',
32-
introduce: '她的被动可以在发动攻击后进行小距离的跳跃'
33-
},
34-
{
35-
name: '艾希',
36-
age: '16',
37-
introduce: '拥有强大减速和控制能力的远程射手'
38-
},
39-
{
40-
name: '李青',
41-
age: '34',
42-
introduce: '非常优秀的打野英雄'
43-
},
44-
{
45-
name: '贾克斯',
46-
age: '109',
47-
introduce: '取得优势的武器可以输出成吨的伤害'
48-
}
49-
])
50-
</script>
5+
<style lang="scss" scoped></style>

0 commit comments

Comments
 (0)