device.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { Avatar, Card } from 'antd';
  2. import React from 'react';
  3. import type { DeviceInstance } from '@/pages/device/Instance/typings';
  4. import { BadgeStatus } from '@/components';
  5. import { StatusColorEnum } from '@/components/BadgeStatus';
  6. import '@/style/common.less';
  7. export interface DeviceCardProps extends DeviceInstance {
  8. actions?: React.ReactNode[];
  9. avatarSize?: number;
  10. }
  11. export default (props: DeviceCardProps) => {
  12. return (
  13. <Card style={{ width: '100%' }} cover={null} actions={props.actions}>
  14. <div className={'pro-table-card-item'}>
  15. <div className={'card-item-avatar'}>
  16. <Avatar size={props.avatarSize || 64} src={props.photoUrl} />
  17. </div>
  18. <div className={'card-item-body'}>
  19. <div className={'card-item-header'}>
  20. <span className={'card-item-header-name ellipsis'}>{props.name}</span>
  21. <BadgeStatus
  22. status={props.state.value}
  23. text={props.state.text}
  24. statusNames={{
  25. online: StatusColorEnum.success,
  26. offline: StatusColorEnum.error,
  27. notActive: StatusColorEnum.processing,
  28. }}
  29. />
  30. </div>
  31. <div className={'card-item-content'}>
  32. <label>设备类型:</label>
  33. <span className={'ellipsis'}>{props.deviceType ? props.deviceType.text : '--'}</span>
  34. </div>
  35. <div className={'card-item-content'}>
  36. <label>产品名称:</label>
  37. <span className={'ellipsis'}>{props.productName || '--'}</span>
  38. </div>
  39. </div>
  40. </div>
  41. </Card>
  42. );
  43. };