networkCard.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import React from 'react';
  2. import { TableCard } from '@/components';
  3. import '@/style/common.less';
  4. import '../index.less';
  5. import { NetworkItem } from '@/pages/link/Type/typings';
  6. import { networkMap } from '@/pages/link/Type';
  7. import { StatusColorEnum } from '@/components/BadgeStatus';
  8. import { Tooltip } from 'antd';
  9. export interface NoticeCardProps extends NetworkItem {
  10. detail?: React.ReactNode;
  11. actions?: React.ReactNode[];
  12. avatarSize?: number;
  13. }
  14. const image = require('/public/images/network.png');
  15. export default (props: NoticeCardProps) => {
  16. const createDetail = () => {
  17. const record = props;
  18. if (record.shareCluster) {
  19. const host = record.configuration?.publicHost || record.configuration?.remoteHost;
  20. const port = record.configuration?.publicPort || record.configuration?.remotePort;
  21. return host ? (
  22. <>
  23. {networkMap[record.type]}
  24. {host}:{port}
  25. </>
  26. ) : null;
  27. } else {
  28. const log = record.cluster?.map(
  29. (item) =>
  30. `${item.configuration?.publicHost || item.configuration?.remoteHost}:${
  31. item.configuration?.publicPort || item.configuration?.remotePort
  32. }`,
  33. );
  34. return (
  35. <>
  36. {log.map((item) => (
  37. <div key={item}>
  38. {networkMap[record.type]}
  39. {item}
  40. </div>
  41. ))}
  42. </>
  43. );
  44. }
  45. };
  46. return (
  47. <TableCard
  48. detail={props.detail}
  49. actions={props.actions}
  50. status={props.state.value}
  51. statusText={props.state.text}
  52. statusNames={{
  53. disabled: StatusColorEnum.error,
  54. enabled: StatusColorEnum.success,
  55. }}
  56. showMask={false}
  57. >
  58. <div className={'pro-table-card-item'}>
  59. <div className={'card-item-avatar'}>
  60. <img width={88} height={88} src={image} alt={props.type} />
  61. </div>
  62. <div className={'card-item-body'}>
  63. <div className={'card-item-header'}>
  64. <span className={'card-item-header-name ellipsis'}>
  65. <Tooltip title={props.name}>{props.name}</Tooltip>
  66. </span>
  67. </div>
  68. <div className={'card-item-content'}>
  69. <div>
  70. <label>类型</label>
  71. <div className={'ellipsis'}>
  72. <Tooltip title={props?.type}>{props.type}</Tooltip>
  73. </div>
  74. </div>
  75. <div>
  76. <label>详情</label>
  77. <Tooltip title={createDetail()}>
  78. <div className={'ellipsis'}>{createDetail()}</div>
  79. </Tooltip>
  80. </div>
  81. </div>
  82. </div>
  83. </div>
  84. </TableCard>
  85. );
  86. };