networkCard.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 publicHost = record.configuration.publicHost;
  20. const publicPort = record.configuration.publicPort;
  21. return publicHost ? (
  22. <>
  23. {networkMap[record.type]}
  24. {publicHost}:{publicPort}
  25. </>
  26. ) : null;
  27. } else {
  28. const log = record.cluster?.map(
  29. (item) => `${item.configuration.publicHost}:${item.configuration.publicPort}`,
  30. );
  31. return (
  32. <>
  33. {log.map((item) => (
  34. <div key={item}>
  35. `${networkMap[record.type]}${item}`
  36. </div>
  37. ))}
  38. </>
  39. );
  40. }
  41. };
  42. return (
  43. <TableCard
  44. detail={props.detail}
  45. actions={props.actions}
  46. status={props.state.value}
  47. statusText={props.state.text}
  48. statusNames={{
  49. disabled: StatusColorEnum.error,
  50. enabled: StatusColorEnum.processing,
  51. }}
  52. showMask={false}
  53. >
  54. <div className={'pro-table-card-item'}>
  55. <div className={'card-item-avatar'}>
  56. <img width={88} height={88} src={image} alt={props.type} />
  57. </div>
  58. <div className={'card-item-body'}>
  59. <div className={'card-item-header'}>
  60. <span className={'card-item-header-name ellipsis'}>
  61. <Tooltip title={props.name}>{props.name}</Tooltip>
  62. </span>
  63. </div>
  64. <div className={'card-item-content'}>
  65. <div>
  66. <label>类型</label>
  67. <div className={'ellipsis'}>
  68. <Tooltip title={props?.type}>{props.type}</Tooltip>
  69. </div>
  70. </div>
  71. <div>
  72. <label>详情</label>
  73. <Tooltip title={createDetail()}>
  74. <div className={'ellipsis'}>{createDetail()}</div>
  75. </Tooltip>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. </TableCard>
  81. );
  82. };