@king-design/intact 3.4.3-beta.2 → 3.4.4
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/components/button/demos/disabled.md +14 -3
- package/components/button/demos/group.md +3 -3
- package/components/button/group.ts +5 -0
- package/components/button/group.vdt +2 -2
- package/components/button/index.md +2 -1
- package/components/button/index.vdt +1 -1
- package/components/button/styles.ts +18 -5
- package/components/dialog/styles.ts +3 -3
- package/components/dropdown/item.ts +7 -2
- package/components/editable/demos/textarea.md +53 -0
- package/components/editable/index.md +7 -1
- package/components/editable/index.spec.ts +27 -0
- package/components/editable/index.ts +4 -1
- package/components/editable/index.vdt +13 -4
- package/components/editable/styles.ts +1 -1
- package/components/ellipsis/demos/hoverable.md +23 -0
- package/components/ellipsis/index.ts +4 -1
- package/components/ellipsis/index.vdt +3 -1
- package/components/input/demos/size.md +9 -1
- package/components/input/styles.ts +12 -2
- package/components/menu/styles.ts +0 -3
- package/components/select/demos/immutable.md +7 -6
- package/components/select/index.spec.ts +31 -0
- package/components/select/useImmutable.ts +1 -1
- package/components/switch/styles.ts +5 -0
- package/components/table/cell.ts +3 -2
- package/components/table/cell.vdt +13 -4
- package/components/table/column.ts +2 -0
- package/components/table/column.vdt +4 -3
- package/components/table/demos/asyncTree.md +73 -0
- package/components/table/demos/ellipsis.md +29 -0
- package/components/table/demos/fixFooter.md +52 -0
- package/components/table/demos/footer.md +38 -0
- package/components/table/demos/tree.md +22 -10
- package/components/table/index.md +5 -0
- package/components/table/row.ts +27 -17
- package/components/table/row.vdt +4 -2
- package/components/table/styles.ts +27 -3
- package/components/table/table.ts +8 -2
- package/components/table/table.vdt +18 -3
- package/components/table/useColumns.ts +24 -1
- package/components/table/useTree.ts +9 -2
- package/components/tip/demos/icon.md +53 -0
- package/components/tip/demos/size.md +39 -0
- package/components/tip/index.md +2 -0
- package/components/tip/index.ts +17 -1
- package/components/tip/index.vdt +38 -5
- package/components/tip/styles.ts +84 -3
- package/components/tooltip/demos/always.md +6 -0
- package/components/tooltip/demos/content.md +17 -2
- package/components/tooltip/index.spec.ts +21 -2
- package/components/tooltip/tooltip.ts +4 -1
- package/components/transfer/index.vdt +2 -4
- package/components/tree/demos/loading.md +3 -0
- package/components/treeSelect/demos/basic.md +1 -0
- package/components/treeSelect/index.vdt +1 -0
- package/components/upload/demos/files.md +1 -0
- package/components/upload/index.vdt +4 -1
- package/components/upload/styles.ts +1 -0
- package/es/components/button/group.d.ts +1 -0
- package/es/components/button/group.js +4 -0
- package/es/components/button/group.vdt.js +3 -2
- package/es/components/button/index.vdt.js +1 -1
- package/es/components/button/styles.js +6 -6
- package/es/components/diagram/shapes/callout.d.ts +1 -1
- package/es/components/diagram/shapes/circle.d.ts +1 -1
- package/es/components/diagram/shapes/document.d.ts +1 -1
- package/es/components/diagram/shapes/ellipse.d.ts +1 -1
- package/es/components/diagram/shapes/hexagon.d.ts +1 -1
- package/es/components/diagram/shapes/image.d.ts +1 -1
- package/es/components/diagram/shapes/parallelogram.d.ts +1 -1
- package/es/components/diagram/shapes/rectangle.d.ts +1 -1
- package/es/components/diagram/shapes/square.d.ts +1 -1
- package/es/components/diagram/shapes/text.d.ts +1 -1
- package/es/components/dialog/styles.js +3 -3
- package/es/components/dropdown/item.js +5 -2
- package/es/components/editable/index.d.ts +2 -0
- package/es/components/editable/index.js +4 -2
- package/es/components/editable/index.spec.js +39 -0
- package/es/components/editable/index.vdt.js +17 -6
- package/es/components/editable/styles.d.ts +1 -0
- package/es/components/editable/styles.js +3 -0
- package/es/components/ellipsis/index.d.ts +1 -0
- package/es/components/ellipsis/index.js +4 -2
- package/es/components/ellipsis/index.vdt.js +3 -1
- package/es/components/input/styles.js +11 -1
- package/es/components/menu/styles.js +1 -1
- package/es/components/select/index.spec.js +47 -0
- package/es/components/switch/styles.js +1 -1
- package/es/components/table/cell.d.ts +2 -0
- package/es/components/table/cell.vdt.js +18 -5
- package/es/components/table/column.d.ts +1 -0
- package/es/components/table/column.js +1 -0
- package/es/components/table/column.vdt.js +16 -12
- package/es/components/table/row.d.ts +3 -1
- package/es/components/table/row.js +24 -15
- package/es/components/table/row.vdt.js +6 -2
- package/es/components/table/styles.d.ts +49 -0
- package/es/components/table/styles.js +3 -2
- package/es/components/table/table.d.ts +4 -0
- package/es/components/table/table.js +4 -1
- package/es/components/table/table.vdt.js +29 -4
- package/es/components/table/useColumns.d.ts +9 -0
- package/es/components/table/useColumns.js +29 -1
- package/es/components/table/useTree.d.ts +1 -1
- package/es/components/table/useTree.js +30 -2
- package/es/components/tip/index.d.ts +6 -1
- package/es/components/tip/index.js +12 -1
- package/es/components/tip/index.vdt.js +25 -5
- package/es/components/tip/styles.js +44 -2
- package/es/components/tooltip/index.spec.js +99 -67
- package/es/components/tooltip/tooltip.d.ts +1 -0
- package/es/components/tooltip/tooltip.js +14 -2
- package/es/components/transfer/index.vdt.js +2 -4
- package/es/components/treeSelect/index.vdt.js +1 -0
- package/es/components/upload/index.vdt.js +4 -1
- package/es/components/upload/styles.js +1 -1
- package/es/index.d.ts +2 -2
- package/es/index.js +2 -2
- package/es/site/data/components/button/demos/disabled/index.d.ts +1 -0
- package/es/site/data/components/button/demos/disabled/index.js +1 -0
- package/es/site/data/components/button/demos/disabled/react.d.ts +1 -0
- package/es/site/data/components/button/demos/disabled/react.js +27 -8
- package/es/site/data/components/button/demos/group/react.js +2 -2
- package/es/site/data/components/editable/demos/textarea/index.d.ts +16 -0
- package/es/site/data/components/editable/demos/textarea/index.js +21 -0
- package/es/site/data/components/editable/demos/textarea/react.d.ts +17 -0
- package/es/site/data/components/editable/demos/textarea/react.js +72 -0
- package/es/site/data/components/ellipsis/demos/hoverable/index.d.ts +6 -0
- package/es/site/data/components/ellipsis/demos/hoverable/index.js +14 -0
- package/es/site/data/components/ellipsis/demos/hoverable/react.d.ts +5 -0
- package/es/site/data/components/ellipsis/demos/hoverable/react.js +21 -0
- package/es/site/data/components/input/demos/size/react.js +20 -0
- package/es/site/data/components/select/demos/immutable/index.d.ts +2 -2
- package/es/site/data/components/select/demos/immutable/index.js +1 -1
- package/es/site/data/components/select/demos/immutable/react.d.ts +1 -1
- package/es/site/data/components/select/demos/immutable/react.js +5 -5
- package/es/site/data/components/table/demos/asyncTree/index.d.ts +20 -0
- package/es/site/data/components/table/demos/asyncTree/index.js +53 -0
- package/es/site/data/components/table/demos/asyncTree/react.d.ts +20 -0
- package/es/site/data/components/table/demos/asyncTree/react.js +76 -0
- package/es/site/data/components/table/demos/ellipsis/index.d.ts +11 -0
- package/es/site/data/components/table/demos/ellipsis/index.js +24 -0
- package/es/site/data/components/table/demos/ellipsis/react.d.ts +10 -0
- package/es/site/data/components/table/demos/ellipsis/react.js +43 -0
- package/es/site/data/components/table/demos/fixFooter/index.d.ts +6 -0
- package/es/site/data/components/table/demos/fixFooter/index.js +14 -0
- package/es/site/data/components/table/demos/fixFooter/react.d.ts +5 -0
- package/es/site/data/components/table/demos/fixFooter/react.js +69 -0
- package/es/site/data/components/table/demos/footer/index.d.ts +12 -0
- package/es/site/data/components/table/demos/footer/index.js +25 -0
- package/es/site/data/components/table/demos/footer/react.d.ts +11 -0
- package/es/site/data/components/table/demos/footer/react.js +46 -0
- package/es/site/data/components/table/demos/tree/react.js +18 -2
- package/es/site/data/components/tip/demos/icon/index.d.ts +9 -0
- package/es/site/data/components/tip/demos/icon/index.js +19 -0
- package/es/site/data/components/tip/demos/icon/react.d.ts +8 -0
- package/es/site/data/components/tip/demos/icon/react.js +54 -0
- package/es/site/data/components/tip/demos/size/index.d.ts +9 -0
- package/es/site/data/components/tip/demos/size/index.js +19 -0
- package/es/site/data/components/tip/demos/size/react.d.ts +8 -0
- package/es/site/data/components/tip/demos/size/react.js +39 -0
- package/es/site/data/components/tooltip/demos/always/react.js +5 -0
- package/es/site/data/components/tooltip/demos/content/index.d.ts +2 -0
- package/es/site/data/components/tooltip/demos/content/index.js +3 -1
- package/es/site/data/components/tooltip/demos/content/react.d.ts +2 -0
- package/es/site/data/components/tooltip/demos/content/react.js +21 -3
- package/es/site/data/components/treeSelect/demos/basic/react.js +2 -1
- package/es/site/data/components/upload/demos/files/index.js +3 -0
- package/es/site/data/components/upload/demos/files/react.js +3 -0
- package/es/site/src/pages/font/index.js +1 -1
- package/es/site/src/pages/font/styles.js +1 -1
- package/index.ts +2 -2
- package/package.json +2 -2
package/components/table/cell.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {Component, Props, VNodeComponentClass, IntactDom} from 'intact';
|
|
1
|
+
import {Component, Props, VNodeComponentClass, IntactDom, inject} from 'intact';
|
|
2
2
|
import template from './cell.vdt';
|
|
3
3
|
import type {TableColumnProps} from './column';
|
|
4
4
|
import type {TableProps} from './table';
|
|
@@ -18,11 +18,12 @@ export interface TableCellProps {
|
|
|
18
18
|
rowspan: number
|
|
19
19
|
onClickArrow: (e: MouseEvent) => void
|
|
20
20
|
hasChildren: boolean
|
|
21
|
+
loaded: boolean
|
|
22
|
+
spreadArrowIndex: number
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
export class TableCell extends Component<TableCellProps> {
|
|
24
26
|
static template = template;
|
|
25
|
-
|
|
26
27
|
private config = useConfigContext();
|
|
27
28
|
|
|
28
29
|
$update(
|
|
@@ -3,16 +3,19 @@ import {get, noop} from 'intact-shared';
|
|
|
3
3
|
import {Button} from '../button';
|
|
4
4
|
import {Icon} from '../icon';
|
|
5
5
|
import {getTextByChildren} from '../utils';
|
|
6
|
+
import {Ellipsis} from '../ellipsis';
|
|
6
7
|
|
|
7
8
|
const {
|
|
8
9
|
props, rowIndex, columnIndex, offset,
|
|
9
10
|
data, checkType, indent, grid,
|
|
10
|
-
colspan, rowspan, onClickArrow, hasChildren,
|
|
11
|
+
colspan, rowspan, onClickArrow, hasChildren, loaded,
|
|
12
|
+
spreadArrowIndex
|
|
11
13
|
} = this.get();
|
|
12
14
|
const { k } = this.config;
|
|
13
15
|
|
|
14
16
|
const blocks = props.$blocks;
|
|
15
17
|
let children = get(data, props.key);
|
|
18
|
+
const isTree = !spreadArrowIndex ? columnIndex === 0 : columnIndex === spreadArrowIndex
|
|
16
19
|
if (blocks) {
|
|
17
20
|
const template = blocks.template || blocks.default;
|
|
18
21
|
if (template) {
|
|
@@ -20,8 +23,12 @@ if (blocks) {
|
|
|
20
23
|
}
|
|
21
24
|
}
|
|
22
25
|
|
|
26
|
+
if (props.ellipsis) {
|
|
27
|
+
children = <Ellipsis>{children}</Ellipsis>
|
|
28
|
+
}
|
|
29
|
+
|
|
23
30
|
let {className, style} = getClassAndStyleForFixed(props, offset, k, checkType);
|
|
24
|
-
if (
|
|
31
|
+
if (isTree && indent) {
|
|
25
32
|
style || (style = {});
|
|
26
33
|
style.paddingLeft = `${indent}px`;
|
|
27
34
|
}
|
|
@@ -37,12 +44,14 @@ const classNameObj = {
|
|
|
37
44
|
rowspan={rowspan}
|
|
38
45
|
colspan={colspan}
|
|
39
46
|
>
|
|
40
|
-
<Button v-if={
|
|
47
|
+
<Button v-if={hasChildren && isTree}
|
|
41
48
|
type="none" icon circle size="mini"
|
|
42
49
|
class={`${k}-table-arrow`}
|
|
43
50
|
ev-click={onClickArrow}
|
|
51
|
+
disabled={loaded === false}
|
|
44
52
|
>
|
|
45
|
-
<Icon class={`${k}-icon-right`} size="small" />
|
|
53
|
+
<Icon v-if={loaded !== false} class={`${k}-icon-right`} size="small" />
|
|
54
|
+
<Icon v-else class={`${k}-tree-icon ion-load-c`} rotate />
|
|
46
55
|
</Button>
|
|
47
56
|
{children}
|
|
48
57
|
</td>
|
|
@@ -18,6 +18,7 @@ export interface TableColumnProps {
|
|
|
18
18
|
exportCell?: (data: any, index: number) => string
|
|
19
19
|
minWidth?: number
|
|
20
20
|
hidden?: boolean
|
|
21
|
+
ellipsis?: boolean
|
|
21
22
|
|
|
22
23
|
// passed by Table
|
|
23
24
|
// offset: number
|
|
@@ -58,6 +59,7 @@ const typeDefs: Required<TypeDefs<TableColumnProps>> = {
|
|
|
58
59
|
exportCell: Function,
|
|
59
60
|
minWidth: Number,
|
|
60
61
|
hidden: Boolean,
|
|
62
|
+
ellipsis: Boolean,
|
|
61
63
|
|
|
62
64
|
// offset: null,
|
|
63
65
|
cols: null,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {getClassAndStyleForFixed} from './useFixedColumns';
|
|
2
|
+
import {getStyleForLastColumn} from './useColumns';
|
|
2
3
|
import {Dropdown, DropdownMenu, DropdownItem} from '../dropdown';
|
|
3
4
|
import {Button} from '../button';
|
|
4
5
|
import {Icon} from '../icon';
|
|
@@ -11,7 +12,7 @@ import {linkEvent} from 'intact';
|
|
|
11
12
|
import {context as TableContext} from './useColumns';
|
|
12
13
|
import {context as ResizableContext} from './useResizable';
|
|
13
14
|
import {context as FixedColumnsContext} from './useFixedColumns';
|
|
14
|
-
import {stopPropagation} from '../utils';
|
|
15
|
+
import {stopPropagation, addStyle} from '../utils';
|
|
15
16
|
import {Input} from '../input';
|
|
16
17
|
import {_$} from '../../i18n';
|
|
17
18
|
import {ignoreSortable} from './useSortable';
|
|
@@ -25,7 +26,7 @@ const {
|
|
|
25
26
|
const { k } = this.config;
|
|
26
27
|
|
|
27
28
|
<TableContext.Consumer>
|
|
28
|
-
{checkType => {
|
|
29
|
+
{({checkType, lastCellKey, lastCellStyle}) => {
|
|
29
30
|
return <GroupContext.Consumer>
|
|
30
31
|
{({group: currentGroup, onChange}) => {
|
|
31
32
|
return <SortableContext.Consumer>
|
|
@@ -46,7 +47,7 @@ const { k } = this.config;
|
|
|
46
47
|
|
|
47
48
|
let checked;
|
|
48
49
|
return <th className={classNameObj}
|
|
49
|
-
style={style}
|
|
50
|
+
style={key === lastCellKey ? addStyle(style, lastCellStyle) : style}
|
|
50
51
|
title={isStringOrNumber(title) ? title : null}
|
|
51
52
|
ev-click={sortable ? linkEvent(key, onChangeSort) : null}
|
|
52
53
|
colspan={cols}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 树形表格异步加载
|
|
3
|
+
order: 33
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
添加`load`数据加载函数即可实现异步加载子节点功能,组件会传入当前节点对象作为参数,函数可以返回
|
|
7
|
+
数组或者异步返回数组作为当前异步加载的子节点。如果子节点还可以进一步展开,可以将`children`属性
|
|
8
|
+
设为空数组`[]`,否则不指定`children`则表示该节点为叶子节点。
|
|
9
|
+
|
|
10
|
+
组件默认遇到`children`为`[]`空数组的情况就会去进行异步加载,你可以通过`loaded`属性设为`true`来
|
|
11
|
+
标识该子节点已经加载完成,无需再次加载
|
|
12
|
+
|
|
13
|
+
> 组件在该行数据异步加载完成后,会往原始数据上自动添加`loaded=true`。你也可以手动指定某行数据
|
|
14
|
+
> `loaded=true`,这样即使组件发现该行数据`children`为空`[]`,也不会去加载了
|
|
15
|
+
|
|
16
|
+
```vdt
|
|
17
|
+
import {Table, TableColumn} from 'kpc';
|
|
18
|
+
|
|
19
|
+
<Table data={this.get('data')} rowKey={data => data.name} load={this.loadData}>
|
|
20
|
+
<TableColumn key="name" title="Name" />
|
|
21
|
+
<TableColumn key="size" title="Size">
|
|
22
|
+
<b:template args="[data]">
|
|
23
|
+
{data.size}MB
|
|
24
|
+
</b:template>
|
|
25
|
+
</TableColumn>
|
|
26
|
+
</Table>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import {bind} from 'kpc';
|
|
31
|
+
interface Props {
|
|
32
|
+
data: NonNullable<any>
|
|
33
|
+
}
|
|
34
|
+
export default class extends Component<Props> {
|
|
35
|
+
static template = template;
|
|
36
|
+
|
|
37
|
+
static defaults() {
|
|
38
|
+
return {
|
|
39
|
+
data: [
|
|
40
|
+
{
|
|
41
|
+
name: 'Audios',
|
|
42
|
+
size: 12,
|
|
43
|
+
children: []
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'Images',
|
|
47
|
+
size: 14,
|
|
48
|
+
children: []
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'doc.pdf',
|
|
52
|
+
size: 18,
|
|
53
|
+
},
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@bind
|
|
59
|
+
loadData(node: any) {
|
|
60
|
+
return new Promise<void>(resolve => {
|
|
61
|
+
setTimeout(() => {
|
|
62
|
+
node.children = [
|
|
63
|
+
{name: 'child1', size: 17},
|
|
64
|
+
{name: 'child2', size: 15, loaded: true},
|
|
65
|
+
];
|
|
66
|
+
this.set('data', [...this.get('data')]);
|
|
67
|
+
|
|
68
|
+
resolve();
|
|
69
|
+
}, 2000);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 超长省略
|
|
3
|
+
order: 34
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
通过设置`TableColumn`的`ellipsis`属性,可以指定列超长省略
|
|
7
|
+
|
|
8
|
+
```vdt
|
|
9
|
+
import {Table, TableColumn} from 'kpc';
|
|
10
|
+
|
|
11
|
+
<Table data={this.get('data')} resizable>
|
|
12
|
+
<TableColumn key="a" title="Title 1" minWidth={200} ellipsis/>
|
|
13
|
+
<TableColumn key="b" title="Title 2" minWidth={300} />
|
|
14
|
+
</Table>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
export default class extends Component {
|
|
19
|
+
static template = template;
|
|
20
|
+
static defaults() {
|
|
21
|
+
return {
|
|
22
|
+
data: [
|
|
23
|
+
{a: '测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长', b: 'Cell 1-2'},
|
|
24
|
+
{a: 'Cell 2-1', b: 'Cell 2-2'}
|
|
25
|
+
]
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: footer固定
|
|
3
|
+
order: 35
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`fixFooter`:设置自定义footer固定,类型`boolean`,默认:`false`;
|
|
7
|
+
设置为`true`时表示固定高度,`tbody`的高度自适应,但需要自己定义表格高度
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
```vdt
|
|
11
|
+
import {Table, TableColumn} from 'kpc';
|
|
12
|
+
|
|
13
|
+
<div class="wrapper">
|
|
14
|
+
<Table
|
|
15
|
+
data={[{a: 'footer不固定'}, {a: '下拉'}, {a: 'yeah!'}, {a: '你好'}, {a: '我很好'}]}
|
|
16
|
+
>
|
|
17
|
+
<TableColumn key="a" title="footer不固定" />
|
|
18
|
+
<b:footer>
|
|
19
|
+
<span>自定义footer</span>
|
|
20
|
+
</b:footer>
|
|
21
|
+
</Table>
|
|
22
|
+
<Table
|
|
23
|
+
data={[{a: 'footer固定啦'}, {a: '下拉'}, {a: 'yeah!'}, {a: '你好'}, {a: '我很好'}]}
|
|
24
|
+
fixFooter
|
|
25
|
+
>
|
|
26
|
+
<TableColumn key="a" title="footer固定" />
|
|
27
|
+
<b:footer>
|
|
28
|
+
<span>自定义footer</span>
|
|
29
|
+
</b:footer>
|
|
30
|
+
</Table>
|
|
31
|
+
<Table
|
|
32
|
+
data={[{a: 'footer固定啦'}, {a: '下拉'}, {a: 'yeah!'}, {a: '你好'}, {a: '我很好'}]}
|
|
33
|
+
fixFooter
|
|
34
|
+
fixHeader
|
|
35
|
+
>
|
|
36
|
+
<TableColumn key="a" title="footer,header同时固定" />
|
|
37
|
+
<b:footer>
|
|
38
|
+
<span>自定义footer</span>
|
|
39
|
+
</b:footer>
|
|
40
|
+
</Table>
|
|
41
|
+
</div>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```styl
|
|
45
|
+
.wrapper
|
|
46
|
+
display flex
|
|
47
|
+
.k-table
|
|
48
|
+
margin-left: 20px
|
|
49
|
+
flex: 1
|
|
50
|
+
.k-table-wrapper
|
|
51
|
+
height: 200px!important
|
|
52
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 自定义footer
|
|
3
|
+
order: 32
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
```vdt
|
|
8
|
+
import {Table, TableColumn} from 'kpc';
|
|
9
|
+
|
|
10
|
+
<div>
|
|
11
|
+
<Table data={this.get('data')} resizable>
|
|
12
|
+
<TableColumn key="a" title="Title 1" minWidth={200}/>
|
|
13
|
+
<TableColumn key="b" title="Title 2" minWidth={300}/>
|
|
14
|
+
<b:footer>
|
|
15
|
+
<div class="footer">自定义底部</div>
|
|
16
|
+
</b:footer>
|
|
17
|
+
</Table>
|
|
18
|
+
</div>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```styl
|
|
22
|
+
.k-table
|
|
23
|
+
margin-bottom 20px
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
export default class extends Component {
|
|
28
|
+
static template = template;
|
|
29
|
+
static defaults() {
|
|
30
|
+
return {
|
|
31
|
+
data: [
|
|
32
|
+
{a: 'Cell 1-1', b: 'Cell 1-2'},
|
|
33
|
+
{a: 'Cell 2-1', b: 'Cell 2-2'}
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
@@ -11,19 +11,31 @@ order: 24
|
|
|
11
11
|
|
|
12
12
|
树形表格下,必须通过`rowKey`指定每行的`key`
|
|
13
13
|
|
|
14
|
-
> 如果数据中恰好存在`children`字段,但是你又不想展示树形表格,将`childrenKey`设为`false
|
|
14
|
+
> 如果数据中恰好存在`children`字段,但是你又不想展示树形表格,将`childrenKey`设为`false`即可。
|
|
15
|
+
> 假如你的数据为:`{name: 'xxx', books: [{name: 'a'}, {name: 'b'}]}`,想把books展示成子树,
|
|
16
|
+
> 可以指定`childrenKey="books"`
|
|
15
17
|
|
|
16
18
|
```vdt
|
|
17
19
|
import {Table, TableColumn} from 'kpc';
|
|
18
|
-
|
|
19
|
-
<Table data={this.get('data')} rowKey={data => data.name}>
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
</Table>
|
|
20
|
+
<div>
|
|
21
|
+
<Table data={this.get('data')} rowKey={data => data.name}>
|
|
22
|
+
<TableColumn key="name" title="Name" />
|
|
23
|
+
<TableColumn key="size" title="Size">
|
|
24
|
+
<b:template args="[data]">
|
|
25
|
+
{data.size}MB
|
|
26
|
+
</b:template>
|
|
27
|
+
</TableColumn>
|
|
28
|
+
</Table>
|
|
29
|
+
<h4>自定义展开Icon位置</h4>
|
|
30
|
+
<Table data={this.get('data')} rowKey={data => data.name} spreadArrowIndex={1}>
|
|
31
|
+
<TableColumn key="name" title="Name" />
|
|
32
|
+
<TableColumn key="size" title="Size">
|
|
33
|
+
<b:template args="[data]">
|
|
34
|
+
{data.size}MB
|
|
35
|
+
</b:template>
|
|
36
|
+
</TableColumn>
|
|
37
|
+
</Table>
|
|
38
|
+
</div>
|
|
27
39
|
```
|
|
28
40
|
|
|
29
41
|
```ts
|
|
@@ -45,6 +45,9 @@ sidebar: doc
|
|
|
45
45
|
| animation | 是否开启动效,默认开启。可以通过`true` `false`全部设置,或者通过数组单独设置行和列的动效 | `boolean` | `[boolean, boolean]` | `true` |
|
|
46
46
|
| hideHeader | 是否隐藏表头 | `boolean` | `false` |
|
|
47
47
|
| pagination | 是否支持分页 | `boolean` | `PaginationProps` | `false` |
|
|
48
|
+
| fixFooter | `table`给定需要固定高度时,自定义footer固定 | `boolean` | `false` |
|
|
49
|
+
| load | 指定异步加载节点数据的函数,该函数通过`Promise`返回数组来添加子节点数据 | <code>(node: any) => Promise<void> | void</code> | `undefined` |
|
|
50
|
+
| spreadArrowIndex | 指定树形表格展开Icon的所在列,默认在第一列 | `number` | `0` |
|
|
48
51
|
|
|
49
52
|
```ts
|
|
50
53
|
import {Props} from 'intact';
|
|
@@ -113,6 +116,7 @@ export interface PaginationProps {
|
|
|
113
116
|
| minWidth | 指定当前列拖动时的最小宽度,优先级高于`Table`的`minColWidth` | `number` | `undefined` |
|
|
114
117
|
| className | 给当前列添加className | `string` | `Record<string, any>` | `undefined` |
|
|
115
118
|
| hidden | 是否隐藏当前列,仅为不可见,不影响`exportTable`导出表格 | `boolean` | `false` |
|
|
119
|
+
| ellipsis | 是否开启超长省略 | `boolean` | `false` |
|
|
116
120
|
|
|
117
121
|
```ts
|
|
118
122
|
import {VNode} from 'intact';
|
|
@@ -132,6 +136,7 @@ export type TableColumnGroupItem = {
|
|
|
132
136
|
| empty | 自定义无数据展示模板 | - |
|
|
133
137
|
| expand | 指定行展开后要展示的模板内容 | `([data: T, index: number]) => Children` |
|
|
134
138
|
| tooltip | 行提示内容 | `([data: T, index: number]) => Children` |
|
|
139
|
+
| footer | 自定义`Table`底部 | - |
|
|
135
140
|
|
|
136
141
|
## TableColumn
|
|
137
142
|
|
package/components/table/row.ts
CHANGED
|
@@ -14,6 +14,7 @@ import {bind} from '../utils';
|
|
|
14
14
|
import type {TableGrid} from './useMerge';
|
|
15
15
|
import { isEqualObject } from '../utils';
|
|
16
16
|
import { useConfigContext } from '../config';
|
|
17
|
+
import { hasOwn } from 'intact-shared';
|
|
17
18
|
|
|
18
19
|
export interface TableRowProps {
|
|
19
20
|
key: TableRowKey
|
|
@@ -34,10 +35,12 @@ export interface TableRowProps {
|
|
|
34
35
|
spreaded: boolean
|
|
35
36
|
hasChildren: boolean
|
|
36
37
|
indent: number
|
|
37
|
-
onToggleSpreadRow: (key: TableRowKey) => void
|
|
38
|
+
onToggleSpreadRow: (key: TableRowKey, rowData?: any) => void
|
|
38
39
|
onBeforeUnmount: (key: TableRowKey) => void
|
|
39
40
|
offsetMap: Record<Key, number>
|
|
40
41
|
animation: boolean
|
|
42
|
+
spreadArrowIndex: number
|
|
43
|
+
loaded: boolean
|
|
41
44
|
|
|
42
45
|
draggable: boolean
|
|
43
46
|
draggingKey: TableRowKey | null
|
|
@@ -65,20 +68,27 @@ export class TableRow extends Component<TableRowProps> {
|
|
|
65
68
|
const nextProps = nextVNode.props as TableRowProps;
|
|
66
69
|
|
|
67
70
|
let isSame = true;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
71
|
+
if (hasOwn.call(this, 'vueInstance')) {
|
|
72
|
+
// In Vue, we may change value by modifing the same reference,
|
|
73
|
+
// and the new row may be expanded by click tree arrow
|
|
74
|
+
// so we can not compare in this case, #1030
|
|
75
|
+
isSame = false;
|
|
76
|
+
} else {
|
|
77
|
+
let key: keyof TableRowProps;
|
|
78
|
+
for (key in lastProps) {
|
|
79
|
+
// ignore index
|
|
80
|
+
if (key === 'index') continue;
|
|
81
|
+
const lastValue = lastProps[key];
|
|
82
|
+
const nextValue = nextProps[key];
|
|
83
|
+
// deeply compare for offsetMap
|
|
84
|
+
if (key === 'offsetMap' && isEqualObject(lastValue, nextValue)) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (lastValue !== nextValue) {
|
|
89
|
+
isSame = false;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
82
92
|
}
|
|
83
93
|
}
|
|
84
94
|
|
|
@@ -109,8 +119,8 @@ export class TableRow extends Component<TableRowProps> {
|
|
|
109
119
|
@bind
|
|
110
120
|
onClickArrow(e: MouseEvent) {
|
|
111
121
|
e.stopPropagation();
|
|
112
|
-
const {onToggleSpreadRow, key} = this.get();
|
|
113
|
-
onToggleSpreadRow(key);
|
|
122
|
+
const {onToggleSpreadRow, key, data} = this.get();
|
|
123
|
+
onToggleSpreadRow(key, data);
|
|
114
124
|
}
|
|
115
125
|
|
|
116
126
|
@bind
|
package/components/table/row.vdt
CHANGED
|
@@ -11,7 +11,8 @@ const {
|
|
|
11
11
|
grid, index: rowIndex, indeterminate,
|
|
12
12
|
allDisabled, selected, /* hidden, */spreaded,
|
|
13
13
|
hasChildren, indent, key, offsetMap,
|
|
14
|
-
draggable, draggingKey, animation,
|
|
14
|
+
draggable, draggingKey, animation, loaded,
|
|
15
|
+
spreadArrowIndex
|
|
15
16
|
} = this.get();
|
|
16
17
|
const { k } = this.config;
|
|
17
18
|
|
|
@@ -71,13 +72,13 @@ cols.forEach((props, columnIndex) => {
|
|
|
71
72
|
if (!render) return;
|
|
72
73
|
|
|
73
74
|
const columnKey = props.key;
|
|
74
|
-
|
|
75
75
|
vNodes.push(
|
|
76
76
|
<TableCell
|
|
77
77
|
props={props}
|
|
78
78
|
columnIndex={columnIndex}
|
|
79
79
|
rowIndex={rowIndex}
|
|
80
80
|
data={data}
|
|
81
|
+
loaded={loaded}
|
|
81
82
|
offset={offsetMap[columnKey]}
|
|
82
83
|
checkType={checkType}
|
|
83
84
|
indent={indent}
|
|
@@ -87,6 +88,7 @@ cols.forEach((props, columnIndex) => {
|
|
|
87
88
|
onClickArrow={this.onClickArrow}
|
|
88
89
|
hasChildren={hasChildren}
|
|
89
90
|
key={columnKey}
|
|
91
|
+
spreadArrowIndex={spreadArrowIndex}
|
|
90
92
|
/>
|
|
91
93
|
);
|
|
92
94
|
});
|
|
@@ -77,6 +77,8 @@ setDefault(() => {
|
|
|
77
77
|
makeGroupMenuStyles?.clearCache();
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
+
export {table};
|
|
81
|
+
|
|
80
82
|
export const makeStyles = cache(function makeStyles(k: string) {
|
|
81
83
|
return css`
|
|
82
84
|
font-size: ${table.fontSize};
|
|
@@ -90,7 +92,7 @@ export const makeStyles = cache(function makeStyles(k: string) {
|
|
|
90
92
|
}
|
|
91
93
|
table {
|
|
92
94
|
width: 100%;
|
|
93
|
-
|
|
95
|
+
border-collapse: separate;
|
|
94
96
|
border-spacing: 0;
|
|
95
97
|
table-layout: fixed;
|
|
96
98
|
// td,
|
|
@@ -104,8 +106,6 @@ export const makeStyles = cache(function makeStyles(k: string) {
|
|
|
104
106
|
text-align: ${table.thead.textAlign};
|
|
105
107
|
font-size: ${table.thead.fontSize};
|
|
106
108
|
font-weight: ${table.thead.fontWeight};
|
|
107
|
-
position: sticky;
|
|
108
|
-
top: 0;
|
|
109
109
|
z-index: 2;
|
|
110
110
|
tr {
|
|
111
111
|
height: ${table.thead.height};
|
|
@@ -114,6 +114,15 @@ export const makeStyles = cache(function makeStyles(k: string) {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
+
tfoot {
|
|
118
|
+
z-index: 2;
|
|
119
|
+
tr {
|
|
120
|
+
td {
|
|
121
|
+
border-top: ${table.border};
|
|
122
|
+
border-bottom-color: transparent;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
117
126
|
th {
|
|
118
127
|
padding: ${table.thead.padding};
|
|
119
128
|
position: relative;
|
|
@@ -376,6 +385,21 @@ export const makeStyles = cache(function makeStyles(k: string) {
|
|
|
376
385
|
.${k}-table-wrapper {
|
|
377
386
|
height: 100%;
|
|
378
387
|
}
|
|
388
|
+
thead {
|
|
389
|
+
position: sticky;
|
|
390
|
+
top: 0;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// fixFooter
|
|
394
|
+
&.${k}-fix-footer {
|
|
395
|
+
min-height: 0;
|
|
396
|
+
.${k}-table-wrapper {
|
|
397
|
+
height: 100%;
|
|
398
|
+
}
|
|
399
|
+
tfoot {
|
|
400
|
+
position: sticky;
|
|
401
|
+
bottom: 0;
|
|
402
|
+
}
|
|
379
403
|
}
|
|
380
404
|
`;
|
|
381
405
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {Component, TypeDefs} from 'intact';
|
|
1
|
+
import {Component, TypeDefs, provide} from 'intact';
|
|
2
2
|
import template from './table.vdt';
|
|
3
3
|
import {useColumns} from './useColumns';
|
|
4
4
|
import {useFixedColumns} from './useFixedColumns';
|
|
@@ -65,6 +65,9 @@ export interface TableProps<
|
|
|
65
65
|
animation?: boolean | [boolean, boolean]
|
|
66
66
|
hideHeader?: boolean
|
|
67
67
|
pagination?: boolean | PaginationProps
|
|
68
|
+
fixFooter?: boolean
|
|
69
|
+
spreadArrowIndex?: number
|
|
70
|
+
load?: (value: T) => Promise<void> | void
|
|
68
71
|
}
|
|
69
72
|
|
|
70
73
|
export interface TableEvents<T = any, K extends TableRowKey = number> {
|
|
@@ -82,6 +85,7 @@ export interface TableBlocks<T = unknown> {
|
|
|
82
85
|
empty: null
|
|
83
86
|
tooltip: [T, number]
|
|
84
87
|
expand: [T, number]
|
|
88
|
+
footer: null
|
|
85
89
|
}
|
|
86
90
|
|
|
87
91
|
type CheckType = 'checkbox' | 'radio' | 'none'
|
|
@@ -130,6 +134,9 @@ const typeDefs: Required<TypeDefs<TableProps<unknown>>> = {
|
|
|
130
134
|
animation: [Boolean, Array],
|
|
131
135
|
hideHeader: Boolean,
|
|
132
136
|
pagination: [Boolean, Object],
|
|
137
|
+
fixFooter: Boolean,
|
|
138
|
+
spreadArrowIndex: Number,
|
|
139
|
+
load: Function,
|
|
133
140
|
};
|
|
134
141
|
|
|
135
142
|
const defaults = (): Partial<TableProps> => ({
|
|
@@ -166,7 +173,6 @@ export class Table<
|
|
|
166
173
|
static typeDefs = typeDefs;
|
|
167
174
|
static defaults = defaults;
|
|
168
175
|
static events = events;
|
|
169
|
-
|
|
170
176
|
// use public for unit test to get paginationRef
|
|
171
177
|
public pagination = usePagination();
|
|
172
178
|
private tree = useTree(this.pagination.data);
|