Devices.jsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import './devices.css';
  2. import { DevicesLogic } from './devices.js';
  3. // Devices 组件:显示设备列表和连接/断开功能
  4. function Devices() {
  5. const {
  6. devices,
  7. handleConnect,
  8. handleDisconnect,
  9. isConnected,
  10. togglePreview,
  11. getRefreshButtonClassName,
  12. getRefreshIconClassName,
  13. getRefreshButtonText,
  14. getRefreshButtonOnClick,
  15. getPreviewButtonClassName,
  16. getPreviewButtonText,
  17. } = DevicesLogic();
  18. return (
  19. <div className="Devices-container">
  20. <div className="devices-header">
  21. <div className="devices-title">可连接设备</div>
  22. <div
  23. className={getRefreshButtonClassName()}
  24. onClick={getRefreshButtonOnClick()}
  25. >
  26. <div className={getRefreshIconClassName()}>↻</div>
  27. {getRefreshButtonText()}
  28. </div>
  29. </div>
  30. <div className="devices-scroll-area">
  31. {devices.map((ipPort, index) => (
  32. <div key={index} className="device-item">
  33. <div className="device-info">
  34. <div className="device-id">{ipPort}</div>
  35. </div>
  36. <div className="device-actions">
  37. {!isConnected(ipPort) && (
  38. <div
  39. className="connect-btn"
  40. onClick={() => handleConnect(ipPort)}
  41. >
  42. 连接
  43. </div>
  44. )}
  45. {isConnected(ipPort) && (
  46. <div className="action-row">
  47. <div
  48. className={getPreviewButtonClassName(ipPort)}
  49. onClick={() => togglePreview(ipPort)}
  50. >
  51. {getPreviewButtonText(ipPort)}
  52. </div>
  53. <div
  54. className="disconnect-btn"
  55. onClick={() => handleDisconnect(ipPort)}
  56. >
  57. 断开
  58. </div>
  59. </div>
  60. )}
  61. </div>
  62. </div>
  63. ))}
  64. </div>
  65. </div>
  66. );
  67. }
  68. export default Devices;