| 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>{' '} |
| 项 |
| <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; |