Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
submodule
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
web_component
submodule
Commits
133f9e6b
Commit
133f9e6b
authored
Feb 20, 2021
by
zhangwenshuai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加分组全选、展开
parent
fe9b0f1d
Changes
7
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
552 additions
and
358 deletions
+552
-358
Cell.less
components/apolloTable/component/Cell.less
+31
-4
Cell.tsx
components/apolloTable/component/Cell.tsx
+152
-42
Column.tsx
components/apolloTable/component/Column.tsx
+5
-7
Table.tsx
components/apolloTable/component/Table.tsx
+330
-293
index.tsx
components/apolloTable/component/index.tsx
+24
-7
interface.tsx
components/apolloTable/component/interface.tsx
+4
-0
memCols.ts
components/apolloTable/utils/memCols.ts
+6
-5
No files found.
components/apolloTable/component/Cell.less
View file @
133f9e6b
...
@@ -76,15 +76,42 @@
...
@@ -76,15 +76,42 @@
.groupLevel {
.groupLevel {
position: absolute;
position: absolute;
left: 0;
left: 0;
width: 100%;
min-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
white-space: nowrap;
font-size: @textFontGen;
font-size: @textFontGen;
height: 40px;
height: 40px;
line-height: 40px;
color: @textPrimaryColor;
color: @textPrimaryColor;
z-index: 5;
z-index: 5;
.groupContainer{
display: flex;
align-items: center;
height: 100%;
.groupCheck{
width: 16px;
margin-right: @marginSm;
}
.groupExpand{
width: 16px;
margin-right: @marginSm;
cursor: pointer;
}
.groupContent{
flex: 1;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: center;
font-size: @textFontSm;
.groupText{
color: @textPrimaryColor;
overflow: hidden;
text-overflow: ellipsis;
}
.groupCount{
color: @textSupplyColor;
}
}
}
}
}
}
}
...
...
components/apolloTable/component/Cell.tsx
View file @
133f9e6b
This diff is collapsed.
Click to expand it.
components/apolloTable/component/Column.tsx
View file @
133f9e6b
...
@@ -4,6 +4,7 @@ import { Checkbox, Tooltip } from 'antd';
...
@@ -4,6 +4,7 @@ import { Checkbox, Tooltip } from 'antd';
import
_
from
'lodash'
;
import
_
from
'lodash'
;
import
s
from
'./Column.less'
;
import
s
from
'./Column.less'
;
import
{
ColumnProps
}
from
'./interface'
;
import
{
ColumnProps
}
from
'./interface'
;
import
{
memoSelected
}
from
'./Cell'
;
export
default
class
TableColumn
extends
PureComponent
<
ColumnProps
>
{
export
default
class
TableColumn
extends
PureComponent
<
ColumnProps
>
{
changeSort
=
(
type
:
string
)
=>
{
changeSort
=
(
type
:
string
)
=>
{
...
@@ -29,14 +30,11 @@ export default class TableColumn extends PureComponent<ColumnProps> {
...
@@ -29,14 +30,11 @@ export default class TableColumn extends PureComponent<ColumnProps> {
getCheckbox
=
()
=>
{
getCheckbox
=
()
=>
{
const
{
rowSelection
,
dataSource
}
=
this
.
props
;
const
{
rowSelection
,
dataSource
}
=
this
.
props
;
const
{
selectedRows
,
onChange
}
=
rowSelection
;
const
{
selectedRows
,
onChange
}
=
rowSelection
;
const
selectIds
=
memoSelected
(
selectedRows
);
let
checked
=
false
;
let
checked
=
false
;
if
(
dataSource
.
length
>
0
&&
selectedRows
.
length
>
0
)
{
if
(
dataSource
.
length
>
0
&&
selectedRows
.
length
>
0
)
{
for
(
let
i
=
0
;
i
<
dataSource
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
dataSource
.
length
;
i
++
)
{
if
(
if
(
!
selectIds
.
includes
(
dataSource
[
i
].
id
))
{
!
selectedRows
.
some
((
item
)
=>
{
return
item
.
id
===
dataSource
[
i
].
id
;
})
)
{
break
;
break
;
}
}
if
(
i
===
dataSource
.
length
-
1
)
{
if
(
i
===
dataSource
.
length
-
1
)
{
...
@@ -46,10 +44,10 @@ export default class TableColumn extends PureComponent<ColumnProps> {
...
@@ -46,10 +44,10 @@ export default class TableColumn extends PureComponent<ColumnProps> {
}
}
const
onToggle
=
()
=>
{
const
onToggle
=
()
=>
{
if
(
typeof
onChange
===
'function'
)
{
if
(
typeof
onChange
===
'function'
)
{
const
data
=
_
.
cloneDeep
(
select
edRow
s
);
const
data
=
_
.
cloneDeep
(
select
Id
s
);
dataSource
.
map
((
item
:
any
)
=>
{
dataSource
.
map
((
item
:
any
)
=>
{
const
index
=
data
.
findIndex
((
temp
:
any
)
=>
{
const
index
=
data
.
findIndex
((
temp
:
any
)
=>
{
return
temp
.
id
===
item
.
id
;
return
temp
===
item
.
id
;
});
});
if
(
checked
)
{
if
(
checked
)
{
index
>
-
1
&&
data
.
splice
(
index
,
1
);
index
>
-
1
&&
data
.
splice
(
index
,
1
);
...
...
components/apolloTable/component/Table.tsx
View file @
133f9e6b
...
@@ -61,12 +61,13 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -61,12 +61,13 @@ export default class AirTable extends Component<TableProps, TableState> {
memoizeTotalHeight
:
Function
;
memoizeTotalHeight
:
Function
;
static
getDerivedStateFromProps
(
nextProps
:
TableProps
,
prevState
:
TableState
)
{
static
getDerivedStateFromProps
(
nextProps
:
TableProps
,
prevState
:
TableState
)
{
const
{
columns
,
d
ataSource
}
=
prevState
;
const
{
columns
,
prevPropsD
ataSource
}
=
prevState
;
const
nextState
:
TableState
=
{
const
nextState
:
TableState
=
{
...
prevState
,
...
prevState
,
};
};
if
(
JSON
.
stringify
(
d
ataSource
)
!==
JSON
.
stringify
(
nextProps
.
dataSource
))
{
if
(
JSON
.
stringify
(
prevPropsD
ataSource
)
!==
JSON
.
stringify
(
nextProps
.
dataSource
))
{
nextState
.
dataSource
=
nextProps
.
dataSource
;
nextState
.
dataSource
=
nextProps
.
dataSource
;
nextState
.
prevPropsDataSource
=
nextProps
.
dataSource
;
}
}
if
(
JSON
.
stringify
(
columns
)
!==
JSON
.
stringify
(
nextProps
.
columns
))
{
if
(
JSON
.
stringify
(
columns
)
!==
JSON
.
stringify
(
nextProps
.
columns
))
{
nextState
.
columns
=
nextProps
.
columns
;
nextState
.
columns
=
nextProps
.
columns
;
...
@@ -82,6 +83,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -82,6 +83,7 @@ export default class AirTable extends Component<TableProps, TableState> {
dataSource
,
dataSource
,
tableWidth
:
width
||
0
,
tableWidth
:
width
||
0
,
tableHeight
:
height
||
0
,
tableHeight
:
height
||
0
,
toggleGroup
:
0
,
};
};
this
.
config
=
getDefaultTableConfig
(
props
);
this
.
config
=
getDefaultTableConfig
(
props
);
this
.
memoizeFormatColumns
=
memoizeOne
(
getFormatColumns
);
this
.
memoizeFormatColumns
=
memoizeOne
(
getFormatColumns
);
...
@@ -94,15 +96,36 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -94,15 +96,36 @@ export default class AirTable extends Component<TableProps, TableState> {
this
.
memoizeData
=
memoizeOne
(
this
.
filterData
);
this
.
memoizeData
=
memoizeOne
(
this
.
filterData
);
}
}
componentDidUpdate
(
prevProps
:
Readonly
<
TableProps
>
):
void
{
componentDidUpdate
(
prevProps
:
Readonly
<
TableProps
>
,
prevState
):
void
{
if
(
if
(
JSON
.
stringify
(
this
.
props
.
dataSource
)
!==
JSON
.
stringify
(
prevProps
.
dataSource
)
JSON
.
stringify
(
this
.
props
.
dataSource
)
!==
JSON
.
stringify
(
prevProps
.
dataSource
)
||
JSON
.
stringify
(
this
.
props
.
groupConfig
)
!==
JSON
.
stringify
(
prevProps
.
groupConfig
)
||
JSON
.
stringify
(
this
.
props
.
groupConfig
)
!==
JSON
.
stringify
(
prevProps
.
groupConfig
)
||
prevState
.
toggleGroup
!==
this
.
state
.
toggleGroup
)
{
)
{
this
.
recomputeGridSize
();
this
.
recomputeGridSize
();
}
}
}
}
toggleGroup
=
(
ids
:
number
[],
flag
:
boolean
)
=>
{
const
{
dataSource
}
=
this
.
state
;
const
data
:
any
[]
=
[];
dataSource
.
map
((
item
)
=>
{
const
newItem
=
_
.
cloneDeep
(
item
);
if
(
ids
.
includes
(
item
.
id
))
{
data
.
push
({
...
newItem
,
hidden
:
flag
,
});
}
else
{
data
.
push
(
newItem
);
}
});
this
.
setState
({
dataSource
:
data
,
toggleGroup
:
Math
.
random
(),
});
};
// 获取表格显示数据
// 获取表格显示数据
filterData
=
(
columns
:
ColumnProps
[],
dataSource
:
RowProps
[])
=>
{
filterData
=
(
columns
:
ColumnProps
[],
dataSource
:
RowProps
[])
=>
{
if
(
columns
.
length
===
0
||
dataSource
.
length
===
0
)
{
if
(
columns
.
length
===
0
||
dataSource
.
length
===
0
)
{
...
@@ -154,6 +177,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -154,6 +177,7 @@ export default class AirTable extends Component<TableProps, TableState> {
this
.
grid6
.
recomputeGridSize
();
this
.
grid6
.
recomputeGridSize
();
}
}
};
};
// 页面大小变化回调
// 页面大小变化回调
onResize
=
({
width
,
height
}:
{
width
:
number
;
height
:
number
})
=>
{
onResize
=
({
width
,
height
}:
{
width
:
number
;
height
:
number
})
=>
{
this
.
setState
(
this
.
setState
(
...
@@ -183,6 +207,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -183,6 +207,7 @@ export default class AirTable extends Component<TableProps, TableState> {
this
.
recomputeGridSize
,
this
.
recomputeGridSize
,
);
);
};
};
// 拖拽自定义固定列前置动作
// 拖拽自定义固定列前置动作
onResizeStartLeftDragFixed
=
()
=>
{
onResizeStartLeftDragFixed
=
()
=>
{
// 拖动开始,将表格滚动回最左端
// 拖动开始,将表格滚动回最左端
...
@@ -190,6 +215,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -190,6 +215,7 @@ export default class AirTable extends Component<TableProps, TableState> {
this
.
grid4
.
scrollToPosition
({
scrollLeft
:
0
});
this
.
grid4
.
scrollToPosition
({
scrollLeft
:
0
});
}
}
};
};
// 拖拽自定义固定列后置动作
// 拖拽自定义固定列后置动作
onResizeStopLeftDragFixed
=
(
columns
:
ColumnProps
[])
=>
{
onResizeStopLeftDragFixed
=
(
columns
:
ColumnProps
[])
=>
{
this
.
setState
(
this
.
setState
(
...
@@ -199,6 +225,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -199,6 +225,7 @@ export default class AirTable extends Component<TableProps, TableState> {
this
.
recomputeGridSize
,
this
.
recomputeGridSize
,
);
);
};
};
// 拖拽自定义固定列前置动作
// 拖拽自定义固定列前置动作
onResizeStartRightDragFixed
=
()
=>
{
onResizeStartRightDragFixed
=
()
=>
{
// 拖动开始,将表格滚动回最右端
// 拖动开始,将表格滚动回最右端
...
@@ -208,6 +235,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -208,6 +235,7 @@ export default class AirTable extends Component<TableProps, TableState> {
this
.
grid4
.
scrollToCell
({
columnIndex
:
showColumns
.
length
-
1
});
this
.
grid4
.
scrollToCell
({
columnIndex
:
showColumns
.
length
-
1
});
}
}
};
};
// 拖拽自定义固定列后置动作
// 拖拽自定义固定列后置动作
onResizeStopRightDragFixed
=
(
columns
:
ColumnProps
[])
=>
{
onResizeStopRightDragFixed
=
(
columns
:
ColumnProps
[])
=>
{
this
.
setState
(
this
.
setState
(
...
@@ -217,6 +245,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -217,6 +245,7 @@ export default class AirTable extends Component<TableProps, TableState> {
this
.
recomputeGridSize
,
this
.
recomputeGridSize
,
);
);
};
};
// 拖拽滚动表格
// 拖拽滚动表格
onDragSortedMove
=
(
direction
:
string
,
step
:
number
)
=>
{
onDragSortedMove
=
(
direction
:
string
,
step
:
number
)
=>
{
// 拖动超过视图范围,将表格左右滚动
// 拖动超过视图范围,将表格左右滚动
...
@@ -234,6 +263,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -234,6 +263,7 @@ export default class AirTable extends Component<TableProps, TableState> {
}
}
}
}
};
};
// 拖拽排序回调
// 拖拽排序回调
onDragSortedCb
=
(
columns
:
ColumnProps
[])
=>
{
onDragSortedCb
=
(
columns
:
ColumnProps
[])
=>
{
this
.
setState
(
this
.
setState
(
...
@@ -243,6 +273,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -243,6 +273,7 @@ export default class AirTable extends Component<TableProps, TableState> {
this
.
recomputeGridSize
,
this
.
recomputeGridSize
,
);
);
};
};
// 渲染表头
// 渲染表头
renderHeaderCell
=
(
renderHeaderCell
=
(
{
showColumns
,
position
}:
{
showColumns
:
ColumnProps
[];
position
?:
string
},
{
showColumns
,
position
}:
{
showColumns
:
ColumnProps
[];
position
?:
string
},
...
@@ -425,13 +456,17 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -425,13 +456,17 @@ export default class AirTable extends Component<TableProps, TableState> {
tableId=
{
tableId
}
tableId=
{
tableId
}
maxPopHeight=
{
maxPopHeight
}
maxPopHeight=
{
maxPopHeight
}
renderFirstLeft=
{
renderFirstLeft
}
renderFirstLeft=
{
renderFirstLeft
}
toggleGroup=
{
this
.
toggleGroup
}
dataSource=
{
dataSource
}
/>
/>
);
);
};
};
render
()
{
render
()
{
const
{
loading
,
noDataPlaceholder
,
loadComp
,
canFixed
,
tableId
,
cachedFeAttr
,
onDragFixed
}
=
this
.
props
;
const
{
const
{
columns
,
dataSource
,
tableWidth
=
0
,
tableHeight
=
0
}
=
this
.
state
;
loading
,
noDataPlaceholder
,
loadComp
,
canFixed
,
tableId
,
cachedFeAttr
,
onDragFixed
,
}
=
this
.
props
;
const
{
columns
,
dataSource
,
tableWidth
=
0
,
tableHeight
=
0
,
toggleGroup
}
=
this
.
state
;
const
{
overscanColumnCount
,
overscanRowCount
,
rowHeight
,
headerHeight
,
columnWidth
}
=
this
.
config
;
const
{
overscanColumnCount
,
overscanRowCount
,
rowHeight
,
headerHeight
,
columnWidth
}
=
this
.
config
;
const
scrollbarWidth
=
scrollbarSize
()
||
0
;
const
scrollbarWidth
=
scrollbarSize
()
||
0
;
const
formatColumns
=
this
.
memoizeFormatColumns
(
columns
,
cachedFeAttr
,
tableId
);
const
formatColumns
=
this
.
memoizeFormatColumns
(
columns
,
cachedFeAttr
,
tableId
);
...
@@ -439,9 +474,9 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -439,9 +474,9 @@ export default class AirTable extends Component<TableProps, TableState> {
const
leftColumns
=
this
.
memoizeLeftColumns
(
showColumns
);
const
leftColumns
=
this
.
memoizeLeftColumns
(
showColumns
);
const
rightColumns
=
this
.
memoizeRightColumns
(
showColumns
);
const
rightColumns
=
this
.
memoizeRightColumns
(
showColumns
);
// 有隐藏列时,修正数据与列头不匹配问题
// 有隐藏列时,修正数据与列头不匹配问题
const
showData
=
this
.
memoizeData
(
showColumns
,
dataSource
);
const
showData
=
this
.
memoizeData
(
showColumns
,
dataSource
,
toggleGroup
);
const
leftData
=
this
.
memoizeData
(
leftColumns
,
dataSource
);
const
leftData
=
this
.
memoizeData
(
leftColumns
,
dataSource
,
toggleGroup
);
const
rightData
=
this
.
memoizeData
(
rightColumns
,
dataSource
);
const
rightData
=
this
.
memoizeData
(
rightColumns
,
dataSource
,
toggleGroup
);
// 左侧固定列数量
// 左侧固定列数量
const
leftCount
=
leftColumns
.
length
;
const
leftCount
=
leftColumns
.
length
;
const
rightCount
=
rightColumns
.
length
;
const
rightCount
=
rightColumns
.
length
;
...
@@ -451,7 +486,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -451,7 +486,7 @@ export default class AirTable extends Component<TableProps, TableState> {
const
rightWidth
=
this
.
memoizeLeftWidth
(
rightColumns
,
showColumns
,
columnWidth
,
tableWidth
);
const
rightWidth
=
this
.
memoizeLeftWidth
(
rightColumns
,
showColumns
,
columnWidth
,
tableWidth
);
const
tableBodyHeight
:
number
=
tableHeight
-
headerHeight
;
const
tableBodyHeight
:
number
=
tableHeight
-
headerHeight
;
const
{
totalWidth
}
=
this
.
memoizeTotalWidth
(
showColumns
,
columnWidth
);
const
{
totalWidth
}
=
this
.
memoizeTotalWidth
(
showColumns
,
columnWidth
);
const
totalHeight
=
this
.
memoizeTotalHeight
(
dataSource
,
rowHeight
);
const
totalHeight
=
this
.
memoizeTotalHeight
(
dataSource
,
rowHeight
,
toggleGroup
);
let
realWidth
=
tableWidth
;
let
realWidth
=
tableWidth
;
let
paddingRight
=
0
;
let
paddingRight
=
0
;
if
(
rowCount
>
0
&&
totalHeight
>
tableBodyHeight
)
{
if
(
rowCount
>
0
&&
totalHeight
>
tableBodyHeight
)
{
...
@@ -460,7 +495,8 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -460,7 +495,8 @@ export default class AirTable extends Component<TableProps, TableState> {
}
}
return
(
return
(
<
Consumer
>
<
Consumer
>
{
({
locale
})
=>
(
{
({
locale
})
=>
{
return
(
<
ScrollSync
>
<
ScrollSync
>
{
({
onScroll
,
scrollLeft
,
scrollTop
}:
any
)
=>
{
{
({
onScroll
,
scrollLeft
,
scrollTop
}:
any
)
=>
{
return
(
return
(
...
@@ -642,8 +678,8 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -642,8 +678,8 @@ export default class AirTable extends Component<TableProps, TableState> {
})
}
})
}
/>
/>
)
:
(
)
:
(
columnCount
>
0
&&
columnCount
>
0
!
loading
&&
(
&&
!
loading
&&
(
<
Empty
<
Empty
className=
{
styles
.
defaultEmpty
}
className=
{
styles
.
defaultEmpty
}
description=
{
description=
{
...
@@ -759,7 +795,7 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -759,7 +795,7 @@ export default class AirTable extends Component<TableProps, TableState> {
)
}
)
}
<
div
className=
{
styles
.
fillHandleWrapper
}
/>
<
div
className=
{
styles
.
fillHandleWrapper
}
/>
<
div
className=
{
styles
.
loading
}
style=
{
{
top
:
`${tableBodyHeight / 2}px`
}
}
>
<
div
className=
{
styles
.
loading
}
style=
{
{
top
:
`${tableBodyHeight / 2}px`
}
}
>
{
loading
&&
(
loadComp
?
loadComp
:
<
Spin
/>)
}
{
loading
&&
(
loadComp
||
<
Spin
/>)
}
</
div
>
</
div
>
<
div
className=
{
styles
.
widthHandleWrapper
}
id=
{
`dividerWrap_${tableId}`
}
>
<
div
className=
{
styles
.
widthHandleWrapper
}
id=
{
`dividerWrap_${tableId}`
}
>
<
div
className=
{
styles
.
widthHandle
}
id=
{
`divider_${tableId}`
}
/>
<
div
className=
{
styles
.
widthHandle
}
id=
{
`divider_${tableId}`
}
/>
...
@@ -769,7 +805,8 @@ export default class AirTable extends Component<TableProps, TableState> {
...
@@ -769,7 +805,8 @@ export default class AirTable extends Component<TableProps, TableState> {
);
);
}
}
}
}
</
ScrollSync
>
</
ScrollSync
>
)
}
);
}
}
</
Consumer
>
</
Consumer
>
);
);
}
}
...
...
components/apolloTable/component/index.tsx
View file @
133f9e6b
...
@@ -47,11 +47,11 @@ const formatData = (config: string[], dataSource: any[]) => {
...
@@ -47,11 +47,11 @@ const formatData = (config: string[], dataSource: any[]) => {
}
}
const
map
:
any
=
{};
const
map
:
any
=
{};
// 一级分组条件
// 一级分组条件
const
group1
=
config
[
0
];
const
group1
:
any
=
config
[
0
];
// 二级分组条件
// 二级分组条件
const
group2
=
config
[
1
];
const
group2
:
any
=
config
[
1
];
// 三级分组条件
// 三级分组条件
const
group3
=
config
[
2
];
const
group3
:
any
=
config
[
2
];
// 遍历数据默认已排序,根据分组级别给每行添加分组class
// 遍历数据默认已排序,根据分组级别给每行添加分组class
return
dataSource
.
map
((
row
:
any
)
=>
{
return
dataSource
.
map
((
row
:
any
)
=>
{
const
groupKeyArr
:
string
[]
=
[];
const
groupKeyArr
:
string
[]
=
[];
...
@@ -79,37 +79,52 @@ const formatData = (config: string[], dataSource: any[]) => {
...
@@ -79,37 +79,52 @@ const formatData = (config: string[], dataSource: any[]) => {
const
group1Key
=
groupKeyArr
[
0
];
const
group1Key
=
groupKeyArr
[
0
];
const
group1Text
=
groupTextArr
[
0
];
const
group1Text
=
groupTextArr
[
0
];
if
(
!
map
[
group1Key
])
{
if
(
!
map
[
group1Key
])
{
map
[
group1Key
]
=
group1Text
;
map
[
group1Key
]
=
{
text
:
group1Text
,
children
:
[],
};
if
(
row
.
classList
)
{
if
(
row
.
classList
)
{
row
.
classList
[
0
]
=
'groupLevel1'
;
row
.
classList
[
0
]
=
'groupLevel1'
;
}
else
{
}
else
{
row
.
classList
=
[
'groupLevel1'
];
row
.
classList
=
[
'groupLevel1'
];
}
}
row
.
group1Children
=
map
[
group1Key
].
children
;
}
}
map
[
group1Key
].
children
.
push
(
row
.
id
);
}
}
if
(
groupKeyArr
[
1
])
{
if
(
groupKeyArr
[
1
])
{
const
group2Key
=
`
${
groupKeyArr
[
0
]}
-
${
groupKeyArr
[
1
]}
`
;
const
group2Key
=
`
${
groupKeyArr
[
0
]}
-
${
groupKeyArr
[
1
]}
`
;
const
group2Text
=
`
${
groupTextArr
[
0
]}
-
${
groupTextArr
[
1
]}
`
;
const
group2Text
=
`
${
groupTextArr
[
0
]}
-
${
groupTextArr
[
1
]}
`
;
if
(
!
map
[
group2Key
])
{
if
(
!
map
[
group2Key
])
{
map
[
group2Key
]
=
group2Text
;
map
[
group2Key
]
=
{
text
:
group2Text
,
children
:
[],
};
if
(
row
.
classList
)
{
if
(
row
.
classList
)
{
row
.
classList
[
1
]
=
'groupLevel2'
;
row
.
classList
[
1
]
=
'groupLevel2'
;
}
else
{
}
else
{
row
.
classList
=
[
''
,
'groupLevel2'
,
''
];
row
.
classList
=
[
''
,
'groupLevel2'
,
''
];
}
}
row
.
group2Children
=
map
[
group2Key
].
children
;
}
}
map
[
group2Key
].
children
.
push
(
row
.
id
);
}
}
if
(
groupKeyArr
[
2
])
{
if
(
groupKeyArr
[
2
])
{
const
group3Key
=
groupKeyArr
.
join
(
'-'
);
const
group3Key
=
groupKeyArr
.
join
(
'-'
);
const
group3Text
=
groupTextArr
.
join
(
'-'
);
const
group3Text
=
groupTextArr
.
join
(
'-'
);
if
(
!
map
[
group3Key
])
{
if
(
!
map
[
group3Key
])
{
map
[
group3Key
]
=
group3Text
;
map
[
group3Key
]
=
{
text
:
group3Text
,
children
:
[],
};
if
(
row
.
classList
)
{
if
(
row
.
classList
)
{
row
.
classList
[
2
]
=
'groupLevel3'
;
row
.
classList
[
2
]
=
'groupLevel3'
;
}
else
{
}
else
{
row
.
classList
=
[
''
,
''
,
'groupLevel3'
];
row
.
classList
=
[
''
,
''
,
'groupLevel3'
];
}
}
row
.
group3Children
=
map
[
group3Key
].
children
;
}
}
map
[
group3Key
].
children
.
push
(
row
.
id
);
}
}
row
.
groupLevel
=
groupKeyArr
.
length
;
row
.
groupLevel
=
groupKeyArr
.
length
;
row
.
groupKeyArr
=
groupKeyArr
;
row
.
groupKeyArr
=
groupKeyArr
;
...
@@ -224,7 +239,9 @@ class AirTable extends React.Component<CommonProps, CommonState> {
...
@@ -224,7 +239,9 @@ class AirTable extends React.Component<CommonProps, CommonState> {
return
(
return
(
<
Provider
value=
{
{
locale
:
this
.
getContext
()
}
}
>
<
Provider
value=
{
{
locale
:
this
.
getContext
()
}
}
>
<
div
className=
{
classNames
(
styles
.
container
,
className
)
}
>
<
div
className=
{
classNames
(
styles
.
container
,
className
)
}
>
{
operateConfig
&&
<
OperateConfig
selfClass=
{
selfClass
}
columns=
{
columns
}
operateConfig=
{
operateConfig
}
/>
}
{
operateConfig
&&
(
<
OperateConfig
selfClass=
{
selfClass
}
columns=
{
columns
}
operateConfig=
{
operateConfig
}
/>
)
}
<
div
className=
{
classNames
(
styles
.
tableContainer
,
tableClassName
)
}
>
<
div
className=
{
classNames
(
styles
.
tableContainer
,
tableClassName
)
}
>
{
tableOperateConfig
&&
(
{
tableOperateConfig
&&
(
<
div
className=
{
styles
.
tableOperateContainer
}
>
<
div
className=
{
styles
.
tableOperateContainer
}
>
...
...
components/apolloTable/component/interface.tsx
View file @
133f9e6b
...
@@ -94,6 +94,8 @@ export interface TableState {
...
@@ -94,6 +94,8 @@ export interface TableState {
groupConfig
?:
any
[];
groupConfig
?:
any
[];
tableHeight
?:
number
;
tableHeight
?:
number
;
tableWidth
?:
number
;
tableWidth
?:
number
;
toggleGroup
?:
number
;
prevPropsDataSource
?:
RowProps
[];
}
}
export
interface
CommonProps
extends
TableProps
{
export
interface
CommonProps
extends
TableProps
{
operateConfig
?:
OperateConfigProps
;
// 操作栏
operateConfig
?:
OperateConfigProps
;
// 操作栏
...
@@ -142,6 +144,8 @@ export interface CellProps {
...
@@ -142,6 +144,8 @@ export interface CellProps {
tableId
?:
string
|
number
;
tableId
?:
string
|
number
;
maxPopHeight
?:
string
|
number
;
maxPopHeight
?:
string
|
number
;
renderFirstLeft
?:
Function
;
renderFirstLeft
?:
Function
;
toggleGroup
:
Function
;
dataSource
:
RowProps
[];
}
}
export
interface
EditCellProps
{
export
interface
EditCellProps
{
...
...
components/apolloTable/utils/memCols.ts
View file @
133f9e6b
import
memoizeOne
from
'memoize-one'
;
import
memoizeOne
from
'memoize-one'
;
import
{
ColumnProps
,
RowProps
}
from
'../component/interface'
;
import
{
getCache
,
saveCache
}
from
'@/submodule/components/apolloTable/utils/cache'
;
import
{
getCache
,
saveCache
}
from
'@/submodule/components/apolloTable/utils/cache'
;
import
{
ColumnProps
,
RowProps
}
from
'../component/interface'
;
// 获取左侧固定列数量
// 获取左侧固定列数量
export
const
getLeftColumns
=
(
columns
:
ColumnProps
[])
=>
{
export
const
getLeftColumns
=
(
columns
:
ColumnProps
[])
=>
{
...
@@ -64,8 +64,8 @@ export const getRowHeight = (
...
@@ -64,8 +64,8 @@ export const getRowHeight = (
{
dataSource
,
rowHeight
}:
{
dataSource
:
RowProps
[];
rowHeight
:
number
},
{
dataSource
,
rowHeight
}:
{
dataSource
:
RowProps
[];
rowHeight
:
number
},
{
index
}:
{
index
:
number
},
{
index
}:
{
index
:
number
},
)
=>
{
)
=>
{
const
{
classList
}
=
dataSource
[
index
];
const
{
classList
,
hidden
}
=
dataSource
[
index
];
let
len
=
1
;
let
len
=
0
;
if
(
classList
)
{
if
(
classList
)
{
classList
.
map
((
item
)
=>
{
classList
.
map
((
item
)
=>
{
if
(
item
)
{
if
(
item
)
{
...
@@ -73,11 +73,12 @@ export const getRowHeight = (
...
@@ -73,11 +73,12 @@ export const getRowHeight = (
}
}
});
});
}
}
return
rowHeight
*
len
;
const
basic
=
hidden
?
0
:
rowHeight
;
return
40
*
len
+
basic
;
};
};
// 获取数据总高度
// 获取数据总高度
export
const
getTotalHeight
=
(
dataSource
:
RowProps
[],
rowHeight
:
number
)
=>
{
export
const
getTotalHeight
=
(
dataSource
:
RowProps
[],
rowHeight
:
number
,
toggleGroup
:
boolean
)
=>
{
let
height
=
0
;
let
height
=
0
;
dataSource
.
map
((
item
:
any
,
index
:
number
)
=>
{
dataSource
.
map
((
item
:
any
,
index
:
number
)
=>
{
height
+=
getRowHeight
({
dataSource
,
rowHeight
},
{
index
});
height
+=
getRowHeight
({
dataSource
,
rowHeight
},
{
index
});
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment