blob: d282b6e3f8db31db9e9ff098cc68d729f0d75d28 [file] [log] [blame]
import { PlusOutlined } from '@ant-design/icons';
import { Button, message, Input, Drawer } from 'antd';
import React, { useState, useRef } from 'react';
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout';
import ProTable from '@ant-design/pro-table';
import { ModalForm, ProFormText, ProFormTextArea } from '@ant-design/pro-form';
import ProDescriptions from '@ant-design/pro-descriptions';
import UpdateForm from './components/UpdateForm';
import { queryClusterList, addRule, updateRule, removeRule } from './service';
/**
* 添加节点
*
* @param fields
*/
const handleAdd = async (fields) => {
const hide = message.loading('正在添加');
try {
await addRule({ ...fields });
hide();
message.success('添加成功');
return true;
} catch (error) {
hide();
message.error('添加失败请重试!');
return false;
}
};
/**
* 更新节点
*
* @param fields
*/
const handleUpdate = async (fields, currentRow) => {
const hide = message.loading('正在配置');
try {
await updateRule({ ...currentRow, ...fields });
hide();
message.success('配置成功');
return true;
} catch (error) {
hide();
message.error('配置失败请重试!');
return false;
}
};
/**
* 删除节点
*
* @param selectedRows
*/
const handleRemove = async (selectedRows) => {
const hide = message.loading('正在删除');
if (!selectedRows) return true;
try {
await removeRule({
key: selectedRows.map((row) => row.key),
});
hide();
message.success('删除成功,即将刷新');
return true;
} catch (error) {
hide();
message.error('删除失败,请重试');
return false;
}
};
const TableList = () => {
/** 新建窗口的弹窗 */
const [createModalVisible, handleModalVisible] = useState(false);
/** 分布更新窗口的弹窗 */
const [updateModalVisible, handleUpdateModalVisible] = useState(false);
const [showDetail, setShowDetail] = useState(false);
const actionRef = useRef();
const [currentRow, setCurrentRow] = useState();
const [selectedRowsState, setSelectedRows] = useState([]);
/** 国际化配置 */
const columns = [
{
title: 'Broker',
dataIndex: 'brokerName',
hideInForm: true,
},
{
title: 'NO.',
dataIndex: 'brokerIndex',
valueType: 'Input',
hideInForm: true,
},
{
title: '服务调用次数',
dataIndex: 'callNo',
sorter: true,
hideInForm: true,
renderText: (val) => `${val || '-'}万`,
},
{
title: 'Address',
dataIndex: 'status',
hideInForm: true,
},
{
title: 'Version',
dataIndex: 'updatedAt',
hideInForm: true,
},
{
title: 'Produce Massage TPS',
dataIndex: 'updatedAt',
hideInForm: true,
},
{
title: 'Consumer Massage TPS',
dataIndex: 'updatedAt',
hideInForm: true,
},
{
title: 'Yesterday Produce Count',
dataIndex: 'updatedAt',
hideInForm: true,
},
{
title: 'Yesterday Consume Count',
dataIndex: 'updatedAt',
hideInForm: true,
},
{
title: 'Today Produce Count',
dataIndex: 'updatedAt',
hideInForm: true,
},
{
title: 'Today Consume Count',
dataIndex: 'updatedAt',
hideInForm: true,
},
{
title: '操作',
dataIndex: 'option',
valueType: 'option',
render: (_, record) => [
<a
key="config"
// onClick={() => {
// handleUpdateModalVisible(true);
// setCurrentRow(record);
// }}
>
STATUS
</a>,
<a key="subscribeAlert">
CONFIG
</a>,
],
},
];
return (
<PageContainer>
<ProTable
actionRef={actionRef}
rowKey="index"
search={{
labelWidth: 120,
}}
request={queryClusterList}
columns={columns}
/>
{selectedRowsState?.length > 0 && (
<FooterToolbar
extra={
<div>
已选择{' '}
<a
style={{
fontWeight: 600,
}}
>
{selectedRowsState.length}
</a>{' '}
&nbsp;&nbsp;
<span>
服务调用次数总计 {selectedRowsState.reduce((pre, item) => pre + item.callNo, 0)}
</span>
</div>
}
>
<Button
onClick={async () => {
await handleRemove(selectedRowsState);
setSelectedRows([]);
actionRef.current?.reloadAndRest?.();
}}
>
批量删除
</Button>
<Button type="primary">批量审批</Button>
</FooterToolbar>
)}
<ModalForm
title="新建规则"
width="400px"
visible={createModalVisible}
onVisibleChange={handleModalVisible}
onFinish={async (value) => {
const success = await handleAdd(value);
if (success) {
handleModalVisible(false);
if (actionRef.current) {
actionRef.current.reload();
}
}
}}
>
<ProFormText
rules={[
{
required: true,
message: '规则名称为必填项',
},
]}
width="md"
name="name"
/>
<ProFormTextArea width="md" name="desc" />
</ModalForm>
<UpdateForm
onSubmit={async (value) => {
const success = await handleUpdate(value, currentRow);
if (success) {
handleUpdateModalVisible(false);
setCurrentRow(undefined);
if (actionRef.current) {
actionRef.current.reload();
}
}
}}
onCancel={() => {
handleUpdateModalVisible(false);
setCurrentRow(undefined);
}}
updateModalVisible={updateModalVisible}
values={currentRow || {}}
/>
<Drawer
width={600}
visible={showDetail}
onClose={() => {
setCurrentRow(undefined);
setShowDetail(false);
}}
closable={false}
>
{currentRow?.name && (
<ProDescriptions
column={2}
title={currentRow?.name}
request={async () => ({
data: currentRow || {},
})}
params={{
id: currentRow?.name,
}}
columns={columns}
/>
)}
</Drawer>
</PageContainer>
);
};
export default TableList;