Слияние кода завершено, страница обновится автоматически
import * as React from 'react';
import { IBtn, ITopic, IQuotaQuery, IConnectionInfo } from 'types/base-type';
import { showAllPermissionModal, showPermissionModal, showTopicEditModal, showApplyQuatoModal, applyExpandModal, showTopicApplyQuatoModal } from 'container/modal';
import { applyOnlineModal } from 'container/modal';
import { Tooltip } from 'component/antd';
import { topic } from 'store/topic';
import { region } from 'store/region';
import { cellStyle } from 'constants/table';
import { MoreBtns } from 'container/custom-component';
import { app } from 'store/app';
import './index.less';
/**
* 0: 无权限 申请权限
* 1: 可消费 申请配额,只能申请消费配额, 申请权限(申请发送)
* 2: 可发送 申请配额,只能申请发送配额, 申请权限(申请消费)
* 3: 可消费发送 申请配额,可以申请发送及消费配额
* 4: 可管理 可编辑,可以申请发送及消费配额
*/
export const renderMyTopicOperation = (record: ITopic) => {
const twoBtns = getTopicBtn(record).splice(0, 2);
const leftBtns = getTopicBtn(record).splice(2);
return (
<>
<span className="table-operation">
{twoBtns.map((item, index) => (
item.clickFunc ? <a type="javascript;" key={index} onClick={() => item.clickFunc(record)}>{item.label}</a> :
<span key={index} className="mr-10">{item.label}</span>
))}
{getTopicBtn(record).length > 2 && <MoreBtns btns={leftBtns} data={record} />}
</span>
</>);
};
const getTopicBtn = (record: ITopic) => {
const btnList: IBtn[] = [{
label: '申请权限',
show: [0, 1, 2].indexOf(record.access) > -1,
clickFunc: (item: ITopic) => {
showPermissionModal(item);
},
}, {
label: '申请配额',
show: [1, 2, 3, 4].indexOf(record.access) > -1,
clickFunc: (item: ITopic) => {
applyQuotaQuery(item);
},
}, {
label: '申请分区',
show: true,
clickFunc: (item: ITopic) => {
applyExpandModal(item);
},
}, {
label: '申请下线',
show: record.access === 4,
clickFunc: (item: ITopic) => {
applyOnlineModal(item);
},
}, {
label: '编辑',
show: record.access === 4,
clickFunc: (item: ITopic) => {
showTopicEditModal(item);
},
}];
const origin = btnList.filter((item: IBtn) => item.show);
return origin;
};
export const renderAllTopicOperation = (item: ITopic) => {
return (
<>
{item.needAuth && <a className="mr-10" onClick={() => showAllPermissionModal(item)}>申请权限</a>}
</>
);
};
export const applyQuotaQuery = (item: ITopic) => {
topic.getQuotaQuery(item.appId, item.clusterId, item.topicName).then((data) => {
const record = data && data.length ? data[0] : {} as IQuotaQuery;
showApplyQuatoModal(item, record);
});
};
export const applyTopicQuotaQuery = async (item: ITopic) => {
await app.getTopicAppQuota(item.clusterId, item.topicName);
await showTopicApplyQuatoModal(item);
};
export const getOnlineColumns = () => {
const columns = [
{
title: 'AppID',
dataIndex: 'appId',
key: 'appId',
},
{
title: 'HostName',
dataIndex: 'hostname',
key: 'hostname',
onCell: () => ({
style: {
maxWidth: 120,
...cellStyle,
},
}),
render: (text: string) => {
return (
<Tooltip placement="bottomLeft" title={text} >
{text}
</Tooltip>);
},
},
{
title: 'ClientType',
dataIndex: 'clientType',
key: 'clientType',
},
];
return columns;
};
export const getAllTopicColumns = (urlPrefix: string) => {
const columns = [
{
title: 'Topic名称',
dataIndex: 'topicName',
key: 'topicName',
width: '25%',
onCell: () => ({
style: {
maxWidth: 250,
...cellStyle,
},
}),
sorter: (a: ITopic, b: ITopic) => a.topicName.charCodeAt(0) - b.topicName.charCodeAt(0),
render: (text: string, record: ITopic) => {
return (
<Tooltip placement="bottomLeft" title={record.topicName} >
<a
// tslint:disable-next-line:max-line-length
href={`${urlPrefix}/topic/topic-detail?clusterId=${record.clusterId}&topic=${record.topicName}®ion=${region.currentRegion}&needAuth=${record.needAuth}`}
>{text}</a>
</Tooltip>);
},
}, {
title: '集群名称',
dataIndex: 'clusterName',
key: 'clusterName',
width: '20%',
}, {
title: 'Topic描述',
dataIndex: 'description',
key: 'description',
width: '25%',
onCell: () => ({
style: {
maxWidth: 250,
...cellStyle,
},
}),
render: (text: string) => <Tooltip placement="bottomLeft" title={text} >{text}</Tooltip>,
}, {
title: '负责人',
dataIndex: 'appPrincipals',
key: 'appPrincipals',
width: '20%',
onCell: () => ({
style: {
maxWidth: 100,
...cellStyle,
},
}),
render: (text: string) => <Tooltip placement="bottomLeft" title={text} >{text}</Tooltip>,
}, {
title: '操作',
dataIndex: 'operation',
key: 'operation',
width: '10%',
render: (text: string, item: ITopic) => (
renderAllTopicOperation(item)
),
},
];
return columns;
};
export const getExpireColumns = (urlPrefix: string) => {
return [
{
title: 'Topic名称',
dataIndex: 'topicName',
key: 'topicName',
width: '35%',
sorter: (a: ITopic, b: ITopic) => a.topicName.charCodeAt(0) - b.topicName.charCodeAt(0),
render: (t: string, r: ITopic) => {
return (
<Tooltip placement="bottomLeft" title={r.topicName} >
<a
// tslint:disable-next-line:max-line-length
href={`${urlPrefix}/topic/topic-detail?clusterId=${r.clusterId}&topic=${r.topicName}®ion=${region.currentRegion}`}
>
{t}
</a>
</Tooltip>);
},
},
{
title: '所属集群',
dataIndex: 'clusterName',
key: 'clusterName',
width: '20%',
},
{
title: '关联应用',
dataIndex: 'appName',
key: 'appName',
width: '20%',
},
{
title: '消费者个数',
dataIndex: 'fetchConnectionNum',
key: 'fetchConnectionNum',
width: '10%',
},
];
};
export const getMyTopicColumns = (urlPrefix: string) => {
return [
{
title: 'Topic名称',
dataIndex: 'topicName',
key: 'topicName',
width: '21%',
sorter: (a: ITopic, b: ITopic) => a.topicName.charCodeAt(0) - b.topicName.charCodeAt(0),
render: (t: string, r: ITopic) => {
return (
<Tooltip placement="bottomLeft" title={r.topicName} >
<a
// tslint:disable-next-line:max-line-length
href={`${urlPrefix}/topic/topic-detail?clusterId=${r.clusterId}&topic=${r.topicName}®ion=${region.currentRegion}`}
>
{t}
</a>
</Tooltip>);
},
}, {
title: 'Bytes in(KB/s)',
dataIndex: 'bytesIn',
key: 'bytesIn',
width: '12%',
sorter: (a: ITopic, b: ITopic) => b.bytesIn - a.bytesIn,
render: (t: number) => t === null ? '' : (t / 1024).toFixed(2),
}, {
title: 'Bytes out(KB/s)',
dataIndex: 'bytesOut',
key: 'bytesOut',
width: '12%',
sorter: (a: ITopic, b: ITopic) => b.bytesOut - a.bytesOut,
render: (t: number) => t === null ? '' : (t / 1024).toFixed(2),
}, {
title: '所属集群',
dataIndex: 'clusterName',
key: 'clusterName',
width: '15%',
}, {
title: '关联应用',
dataIndex: 'appName',
key: 'appName',
width: '12%',
render: (text: string, record: ITopic) => (
<>
<Tooltip placement="bottomLeft" title={record.appId} >
{text}
</Tooltip>
</>
),
},
{
title: '操作',
dataIndex: 'action',
key: 'action',
width: '35%',
render: (val: string, item: ITopic, index: number) => (
renderMyTopicOperation(item)
),
},
];
};
export const getApplyOnlineColumns = () => {
const columns = [
{
title: 'AppID',
dataIndex: 'appId',
key: 'appId',
width: '22%',
sorter: (a: IConnectionInfo, b: IConnectionInfo) => a.appId.charCodeAt(0) - b.appId.charCodeAt(0),
},
{
title: '主机名',
dataIndex: 'hostname',
key: 'hostname',
width: '40%',
onCell: () => ({
style: {
maxWidth: 250,
...cellStyle,
},
}),
render: (t: string) => {
return (
<Tooltip placement="bottomLeft" title={t} >{t}</Tooltip>
);
},
},
{
title: '客户端版本',
dataIndex: 'clientVersion',
key: 'clientVersion',
width: '20%',
},
{
title: '客户端类型',
dataIndex: 'clientType',
key: 'clientType',
width: '18%',
render: (t: string) => <span>{t === 'consumer' ? '消费' : '生产'}</span>,
},
];
return columns;
};
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )