stk-table-vue 0.0.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -5
- package/lib/src/StkTable/StkTable.vue.d.ts +367 -335
- package/lib/src/StkTable/const.d.ts +1 -0
- package/lib/src/StkTable/types/index.d.ts +73 -60
- package/lib/src/StkTable/useColResize.d.ts +18 -18
- package/lib/src/StkTable/useFixedCol.d.ts +20 -0
- package/lib/src/StkTable/useFixedStyle.d.ts +20 -20
- package/lib/src/StkTable/useKeyboardArrowScroll.d.ts +17 -14
- package/lib/src/StkTable/useThDrag.d.ts +14 -14
- package/lib/src/StkTable/useVirtualScroll.d.ts +73 -73
- package/lib/src/StkTable/utils.d.ts +23 -23
- package/lib/stk-table-vue.js +1490 -1269
- package/lib/style.css +294 -286
- package/package.json +1 -1
- package/src/StkTable/StkTable.vue +149 -64
- package/src/StkTable/const.ts +1 -0
- package/src/StkTable/style.less +191 -237
- package/src/StkTable/types/index.ts +15 -2
- package/src/StkTable/useFixedCol.ts +91 -0
- package/src/StkTable/useKeyboardArrowScroll.ts +24 -10
- package/src/StkTable/useVirtualScroll.ts +50 -10
- package/src/vite-env.d.ts +1 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# StkTable (Sticky Table)
|
|
2
2
|
|
|
3
3
|
Vue3 简易虚拟滚动表格。用于实时数据展示,新数据行高亮渐暗动效。
|
|
4
|
-
js体积(未压缩
|
|
4
|
+
js体积(未压缩46kb)
|
|
5
5
|
|
|
6
6
|
## Feature TODO:
|
|
7
7
|
* [x] 高亮行,单元格。
|
|
@@ -9,20 +9,30 @@ js体积(未压缩41kb)
|
|
|
9
9
|
* [x] 列固定。
|
|
10
10
|
* [x] 表头拖动更改顺序。
|
|
11
11
|
* [x] 表头列宽拖动调整宽度。
|
|
12
|
+
* [x] 排序
|
|
13
|
+
- [x] 基本表头点击排序
|
|
14
|
+
- [] 支持配置 `null` | `undefined` 永远排最后。
|
|
15
|
+
- [] 支持配置 string 使用 `String.prototype.localCompare` 排序。
|
|
12
16
|
* 多级表头。
|
|
13
17
|
- [x] 支持最多`2级`表头。
|
|
14
18
|
- [x] 支持更多级表头
|
|
19
|
+
- [] 多级表头border-left 问题。
|
|
15
20
|
- [] 多级表头固定列横向滚动
|
|
16
21
|
- [] 横向虚拟滚动。
|
|
17
22
|
* [x] 支持table-layout: fixed 配置。
|
|
18
23
|
* 鼠标悬浮在表格上,键盘滚动虚拟表格。
|
|
19
24
|
- [x] 键盘 `ArrowUp`/`ArrowDown`/`ArrowLeft`/`ArrowRight` 按键支持。
|
|
20
|
-
- [] 键盘 `PageUp`/ `PageDown` 按键支持。
|
|
25
|
+
- [x] 键盘 `PageUp`/ `PageDown` 按键支持。
|
|
21
26
|
* [x] 斑马纹。
|
|
22
|
-
* [] 列固定阴影。
|
|
27
|
+
* [x] 列固定阴影。
|
|
28
|
+
- [] 多级表头固定列阴影。
|
|
29
|
+
- [] sticky column 动态计算阴影位置。
|
|
23
30
|
* [] 不传row-key 时,自动按序号生成id。
|
|
24
31
|
* [] 列筛选。
|
|
25
32
|
* [] 非虚拟滚动时,大数据分批加载。
|
|
33
|
+
* [x] vue2支持。
|
|
34
|
+
- `props.optimizeVue2Scroll` 优化vue2虚拟滚动流畅度。
|
|
35
|
+
|
|
26
36
|
|
|
27
37
|
## Usage
|
|
28
38
|
> npm install stk-table-vue
|
|
@@ -42,8 +52,22 @@ stkTable.value.setHighlightDimCell(rowId, colId) // highlight cell
|
|
|
42
52
|
</template>
|
|
43
53
|
|
|
44
54
|
```
|
|
55
|
+
|
|
56
|
+
### Vue2 Usage
|
|
57
|
+
vue2 支持源码引入使用。依赖`less`。
|
|
58
|
+
```html
|
|
59
|
+
<script>
|
|
60
|
+
import { StkTable } from 'stk-table-vue/src/StkTable/index'
|
|
61
|
+
</script>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## Notice
|
|
66
|
+
注意,组件会改动 `props.columns` 中的对象。如果多个组件 `columns` 数组元素存在引用同一个 `StkTableColumn` 对象。则考虑赋值 `columns` 前进行深拷贝。
|
|
67
|
+
|
|
45
68
|
## API
|
|
46
|
-
### StkTable Component
|
|
69
|
+
### StkTable Component
|
|
70
|
+
#### Props
|
|
47
71
|
```ts
|
|
48
72
|
export type StkProps = {
|
|
49
73
|
width?: string;
|
|
@@ -61,6 +85,8 @@ export type StkProps = {
|
|
|
61
85
|
theme?: 'light' | 'dark';
|
|
62
86
|
/** 行高 */
|
|
63
87
|
rowHeight?: number;
|
|
88
|
+
/** 表头行高。default = rowHeight */
|
|
89
|
+
headerRowHeight?: number | null;
|
|
64
90
|
/** 虚拟滚动 */
|
|
65
91
|
virtual?: boolean;
|
|
66
92
|
/** x轴虚拟滚动 */
|
|
@@ -116,10 +142,114 @@ export type StkProps = {
|
|
|
116
142
|
* 传入方法表示resize后的回调
|
|
117
143
|
*/
|
|
118
144
|
autoResize?: boolean | (() => void);
|
|
145
|
+
/** 是否展示固定列阴影。默认不展示。 */
|
|
146
|
+
fixedColShadow?: boolean;
|
|
147
|
+
/** 优化vue2 滚动 */
|
|
148
|
+
optimizeVue2Scroll?: boolean;
|
|
119
149
|
};
|
|
120
150
|
```
|
|
151
|
+
#### Emits
|
|
152
|
+
```js
|
|
153
|
+
{
|
|
154
|
+
/**
|
|
155
|
+
* 排序变更触发
|
|
156
|
+
* ```(col: StkTableColumn<DT>, order: Order, data: DT[])```
|
|
157
|
+
*/
|
|
158
|
+
(e: 'sort-change', col: StkTableColumn<DT>, order: Order, data: DT[]): void;
|
|
159
|
+
/**
|
|
160
|
+
* 一行点击事件
|
|
161
|
+
* ```(ev: MouseEvent, row: DT)```
|
|
162
|
+
*/
|
|
163
|
+
(e: 'row-click', ev: MouseEvent, row: DT): void;
|
|
164
|
+
/**
|
|
165
|
+
* 选中一行触发。ev返回null表示不是点击事件触发的
|
|
166
|
+
* ```(ev: MouseEvent | null, row: DT)```
|
|
167
|
+
*/
|
|
168
|
+
(e: 'current-change', ev: MouseEvent | null, row: DT): void;
|
|
169
|
+
/**
|
|
170
|
+
* 行双击事件
|
|
171
|
+
* ```(ev: MouseEvent, row: DT)```
|
|
172
|
+
*/
|
|
173
|
+
(e: 'row-dblclick', ev: MouseEvent, row: DT): void;
|
|
174
|
+
/**
|
|
175
|
+
* 表头右键事件
|
|
176
|
+
* ```(ev: MouseEvent)```
|
|
177
|
+
*/
|
|
178
|
+
(e: 'header-row-menu', ev: MouseEvent): void;
|
|
179
|
+
/**
|
|
180
|
+
* 表体行右键点击事件
|
|
181
|
+
* ```(ev: MouseEvent, row: DT)```
|
|
182
|
+
*/
|
|
183
|
+
(e: 'row-menu', ev: MouseEvent, row: DT): void;
|
|
184
|
+
/**
|
|
185
|
+
* 单元格点击事件
|
|
186
|
+
* ```(ev: MouseEvent, row: DT, col: StkTableColumn<DT>)```
|
|
187
|
+
*/
|
|
188
|
+
(e: 'cell-click', ev: MouseEvent, row: DT, col: StkTableColumn<DT>): void;
|
|
189
|
+
/**
|
|
190
|
+
* 表头单元格点击事件
|
|
191
|
+
* ```(ev: MouseEvent, col: StkTableColumn<DT>)```
|
|
192
|
+
*/
|
|
193
|
+
(e: 'header-cell-click', ev: MouseEvent, col: StkTableColumn<DT>): void;
|
|
194
|
+
/**
|
|
195
|
+
* 表格滚动事件
|
|
196
|
+
* ```(ev: Event, data: { startIndex: number; endIndex: number })```
|
|
197
|
+
*/
|
|
198
|
+
(e: 'scroll', ev: Event, data: { startIndex: number; endIndex: number }): void;
|
|
199
|
+
/**
|
|
200
|
+
* 表格横向滚动事件
|
|
201
|
+
* ```(ev: Event)```
|
|
202
|
+
*/
|
|
203
|
+
(e: 'scroll-x', ev: Event): void;
|
|
204
|
+
/**
|
|
205
|
+
* 表头列拖动事件
|
|
206
|
+
* ```(dragStartKey: string, targetColKey: string)```
|
|
207
|
+
*/
|
|
208
|
+
(e: 'col-order-change', dragStartKey: string, targetColKey: string): void;
|
|
209
|
+
/**
|
|
210
|
+
* 表头列拖动开始
|
|
211
|
+
* ```(dragStartKey: string)```
|
|
212
|
+
*/
|
|
213
|
+
(e: 'th-drag-start', dragStartKey: string): void;
|
|
214
|
+
/**
|
|
215
|
+
* 表头列拖动drop
|
|
216
|
+
* ```(targetColKey: string)```
|
|
217
|
+
*/
|
|
218
|
+
(e: 'th-drop', targetColKey: string): void;
|
|
219
|
+
/** v-model:columns col resize 时更新宽度*/
|
|
220
|
+
(e: 'update:columns', cols: StkTableColumn<DT>[]): void;
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
#### Expose
|
|
225
|
+
```js
|
|
226
|
+
defineExpose({
|
|
227
|
+
/** 初始化横向纵向虚拟滚动 */
|
|
228
|
+
initVirtualScroll,
|
|
229
|
+
/** 初始化横向虚拟滚动 */
|
|
230
|
+
initVirtualScrollX,
|
|
231
|
+
/** 初始化纵向虚拟滚动 */
|
|
232
|
+
initVirtualScrollY,
|
|
233
|
+
/** 设置当前选中行 */
|
|
234
|
+
setCurrentRow,
|
|
235
|
+
/** 设置高亮渐暗单元格 */
|
|
236
|
+
setHighlightDimCell,
|
|
237
|
+
/** 设置高亮渐暗行 */
|
|
238
|
+
setHighlightDimRow,
|
|
239
|
+
/** 表格排序列dataIndex */
|
|
240
|
+
sortCol,
|
|
241
|
+
/** 设置排序 */
|
|
242
|
+
setSorter,
|
|
243
|
+
/** 重置排序 */
|
|
244
|
+
resetSorter,
|
|
245
|
+
/** 滚动至 */
|
|
246
|
+
scrollTo,
|
|
247
|
+
/** 获取表格数据 */
|
|
248
|
+
getTableData,
|
|
249
|
+
});
|
|
250
|
+
```
|
|
121
251
|
|
|
122
|
-
### StkTableColumn
|
|
252
|
+
### StkTableColumn 列配置
|
|
123
253
|
``` ts
|
|
124
254
|
type Sorter<T> = boolean | ((data: T[], option: { order: Order; column: any }) => T[]);
|
|
125
255
|
/** 表格列配置 */
|
|
@@ -184,6 +314,7 @@ export type StkTableColumn<T extends Record<string, any>> = {
|
|
|
184
314
|
no-data-full
|
|
185
315
|
col-resizable
|
|
186
316
|
auto-resize
|
|
317
|
+
fixed-col-shadow
|
|
187
318
|
:col-min-width="10"
|
|
188
319
|
:headless="false"
|
|
189
320
|
:data-source="dataSource"
|
|
@@ -196,6 +327,7 @@ export type StkTableColumn<T extends Record<string, any>> = {
|
|
|
196
327
|
@cell-click="onCellClick"
|
|
197
328
|
@header-cell-click="onHeaderCellClick"
|
|
198
329
|
@scroll="onTableScroll"
|
|
330
|
+
@scroll-x="onTableScrollX"
|
|
199
331
|
@col-order-change="onColOrderChange"
|
|
200
332
|
/>
|
|
201
333
|
</template>
|