index.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import React from 'react';
  2. import { StatusColorEnum } from '@/components/BadgeStatus';
  3. import { TableCard } from '@/components';
  4. import '@/style/common.less';
  5. import { Badge, Tooltip } from 'antd';
  6. import type { AccessItem } from '@/pages/link/AccessConfig/typings';
  7. import './index.less';
  8. import classNames from 'classnames';
  9. import { Store } from 'jetlinks-store';
  10. export interface AccessConfigCardProps extends AccessItem {
  11. detail?: React.ReactNode;
  12. actions?: React.ReactNode[];
  13. avatarSize?: number;
  14. showTool?: boolean;
  15. activeStyle?: string;
  16. }
  17. const defaultImage = require('/public/images/device-access.png');
  18. export default (props: AccessConfigCardProps) => {
  19. return (
  20. <TableCard
  21. showMask={false}
  22. actions={props.actions}
  23. status={props.state.value}
  24. statusText={props.state.text}
  25. statusNames={{
  26. enabled: StatusColorEnum.success,
  27. disabled: StatusColorEnum.error,
  28. }}
  29. showTool={props.showTool}
  30. contentClassName={props.state.value === 'disabled' ? 'tableCardDisabled' : 'tableCardEnabled'}
  31. className={classNames('access-config-card-item', props.activeStyle)}
  32. >
  33. <div className="context-access">
  34. <div>
  35. <img width={88} height={88} src={defaultImage} alt={''} />
  36. </div>
  37. <div className="card">
  38. <div className="header">
  39. <div className="access-title ellipsis">
  40. <Tooltip placement="topLeft" title={props.name}>
  41. {props.name}
  42. </Tooltip>
  43. </div>
  44. </div>
  45. {(props.protocolDetail?.name || props?.channelInfo?.name) && (
  46. <div className="container">
  47. {props?.channelInfo?.name && (
  48. <div className="server">
  49. <div className="subTitle">{props?.channelInfo?.name}</div>
  50. <Tooltip
  51. placement="topLeft"
  52. title={
  53. <div>
  54. {[...props.channelInfo?.addresses].map((i: any, index: number) => (
  55. <div key={i.address + `_address${index}`}>
  56. <Badge color={i.health === -1 ? 'red' : 'green'} />
  57. {i.address}
  58. </div>
  59. ))}
  60. </div>
  61. }
  62. >
  63. <div className="serverItem">
  64. {props.channelInfo?.addresses.slice(0, 1).map((i: any, index: number) => (
  65. <div className="subItem" key={i.address + `_address${index}`}>
  66. <Badge color={i.health === -1 ? 'red' : 'green'} />
  67. {i.address}
  68. </div>
  69. ))}
  70. </div>
  71. </Tooltip>
  72. </div>
  73. )}
  74. {props.protocolDetail?.name && (
  75. <div className="procotol">
  76. <div className="subTitle">协议</div>
  77. <div className="desc">
  78. <Tooltip placement="topLeft" title={props.protocolDetail?.name}>
  79. {props.protocolDetail?.name}
  80. </Tooltip>
  81. </div>
  82. </div>
  83. )}
  84. </div>
  85. )}
  86. <div className="desc ellipsis">
  87. {!!props?.description ? (
  88. <Tooltip placement="topLeft" title={props?.description}>
  89. {props?.description}
  90. </Tooltip>
  91. ) : (
  92. <Tooltip
  93. placement="topLeft"
  94. title={
  95. (Store.get('access-providers') || []).find((i: any) => i?.id === props?.provider)
  96. ?.description
  97. }
  98. >
  99. {
  100. (Store.get('access-providers') || []).find((i: any) => i?.id === props?.provider)
  101. ?.description
  102. }
  103. </Tooltip>
  104. )}
  105. </div>
  106. </div>
  107. </div>
  108. </TableCard>
  109. );
  110. };