mirror of
https://github.com/didi/KnowStreaming.git
synced 2026-01-08 07:32:11 +08:00
134 lines
3.7 KiB
TypeScript
134 lines
3.7 KiB
TypeScript
import * as React from 'react';
|
|
|
|
import { Table, Modal, Tooltip } from 'component/antd';
|
|
import { observer } from 'mobx-react';
|
|
import Url from 'lib/url-parser';
|
|
import { IOffset, IXFormWrapper } from 'types/base-type';
|
|
import { SearchAndFilterContainer } from 'container/search-filter';
|
|
import { pagination } from 'constants/table';
|
|
import { admin } from 'store/admin';
|
|
import { getConsumerDetails } from 'lib/api';
|
|
import './index.less';
|
|
|
|
@observer
|
|
export class ClusterConsumer extends SearchAndFilterContainer {
|
|
public clusterId: number;
|
|
public consumerDetails = [] as string[];
|
|
|
|
public state = {
|
|
searchKey: '',
|
|
detailsVisible: false,
|
|
};
|
|
|
|
public columns = [{
|
|
title: '消费组名称',
|
|
dataIndex: 'consumerGroup',
|
|
key: 'consumerGroup',
|
|
width: '70%',
|
|
sorter: (a: IOffset, b: IOffset) => a.consumerGroup.charCodeAt(0) - b.consumerGroup.charCodeAt(0),
|
|
render: (text: string) => <Tooltip placement="bottomLeft" title={text} >{text}</Tooltip>,
|
|
}, {
|
|
title: 'Location',
|
|
dataIndex: 'location',
|
|
key: 'location',
|
|
width: '20%',
|
|
render: (t: string) => t.toLowerCase(),
|
|
}, {
|
|
title: '操作',
|
|
key: 'operation',
|
|
width: '10%',
|
|
render: (t: string, item: IOffset) => {
|
|
return (<a onClick={() => this.getConsumeDetails(item)}>详情</a>);
|
|
},
|
|
}];
|
|
private xFormModal: IXFormWrapper;
|
|
|
|
constructor(props: any) {
|
|
super(props);
|
|
const url = Url();
|
|
this.clusterId = Number(url.search.clusterId);
|
|
}
|
|
|
|
public getConsumeDetails(record: IOffset) {
|
|
getConsumerDetails(this.clusterId, record.consumerGroup, record.location).then((data: string[]) => {
|
|
this.consumerDetails = data;
|
|
this.setState({ detailsVisible: true });
|
|
});
|
|
}
|
|
|
|
public handleDetailsOk() {
|
|
this.setState({ detailsVisible: false });
|
|
}
|
|
|
|
public handleDetailsCancel() {
|
|
this.setState({ detailsVisible: false });
|
|
}
|
|
|
|
public getData<T extends IOffset>(origin: T[]) {
|
|
let data: T[] = origin;
|
|
let { searchKey } = this.state;
|
|
searchKey = (searchKey + '').trim().toLowerCase();
|
|
|
|
data = searchKey ? origin.filter((item: IOffset) =>
|
|
(item.consumerGroup !== undefined && item.consumerGroup !== null) && item.consumerGroup.toLowerCase().includes(searchKey as string)
|
|
|| (item.location !== undefined && item.location !== null) && item.location.toLowerCase().includes(searchKey as string),
|
|
) : origin;
|
|
return data;
|
|
}
|
|
|
|
public componentDidMount() {
|
|
admin.getClusterConsumer(this.clusterId);
|
|
}
|
|
|
|
public render() {
|
|
let details: any[];
|
|
details = this.consumerDetails ? this.consumerDetails.map((ele, index) => {
|
|
return {
|
|
key: index,
|
|
topicName: ele,
|
|
};
|
|
}) : [];
|
|
|
|
const consumptionColumns = [{
|
|
title: '消费的Topic列表',
|
|
dataIndex: 'topicName',
|
|
key: 'topicName',
|
|
}];
|
|
|
|
return (
|
|
<>
|
|
<div className="k-row">
|
|
<ul className="k-tab">
|
|
<li>{this.props.tab}</li>
|
|
{this.renderSearch()}
|
|
</ul>
|
|
<Table
|
|
columns={this.columns}
|
|
dataSource={this.getData(admin.consumerData)}
|
|
pagination={pagination}
|
|
rowKey="key"
|
|
/>
|
|
</div>
|
|
<Modal
|
|
title="消费的Topic"
|
|
visible={this.state.detailsVisible}
|
|
onOk={() => this.handleDetailsOk()}
|
|
onCancel={() => this.handleDetailsCancel()}
|
|
maskClosable={false}
|
|
footer={null}
|
|
// centered={true}
|
|
>
|
|
<Table
|
|
columns={consumptionColumns}
|
|
dataSource={details}
|
|
// 运维管控-消费组列表-详情
|
|
pagination={details.length < 10 ? false : pagination}
|
|
rowKey="key"
|
|
scroll={{ y: 260 }}
|
|
/>
|
|
</Modal>
|
|
</>
|
|
);
|
|
}
|
|
}
|