Commit 133f9e6b authored by zhangwenshuai's avatar zhangwenshuai

增加分组全选、展开

parent fe9b0f1d
...@@ -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;
}
}
}
} }
} }
......
This diff is collapsed.
...@@ -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(selectedRows); const data = _.cloneDeep(selectIds);
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);
......
This diff is collapsed.
...@@ -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}>
......
...@@ -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 {
......
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 });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment