1
0

view-model.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. const transport = require('../../transport/ble-core.js')
  2. const manualRtuService = require('../manual-rtu/service.js')
  3. const themeService = require('../../store/theme-store.js')
  4. const DEFAULT_DEVICE_FILTER = 'all'
  5. const DEVICE_FILTER_OPTIONS = [
  6. { key: 'all', label: '全部' },
  7. { key: 'target', label: '目标' }
  8. ]
  9. function isTargetDevice(device) {
  10. return !!(device && (device.isTargetDevice || device.isTargetAdvertised))
  11. }
  12. function filterDevices(devices, filterMode) {
  13. if (filterMode === 'target') return devices.filter(isTargetDevice)
  14. return devices
  15. }
  16. function getHomePageState(
  17. transportState = transport.getState(),
  18. deviceFilterMode = DEFAULT_DEVICE_FILTER,
  19. syncState = {},
  20. themeState = themeService.getState(),
  21. manualRtuState = manualRtuService.getState()
  22. ) {
  23. const { connectedDevice } = transportState
  24. const filteredDevices = filterDevices(transportState.devices, deviceFilterMode)
  25. const allDeviceCount = transportState.devices.length
  26. const filteredDeviceCount = filteredDevices.length
  27. const connectionStatusText = connectedDevice
  28. ? '已连接'
  29. : (transportState.isConnecting ? '连接中' : '未连接')
  30. return {
  31. ...transportState,
  32. ...manualRtuState,
  33. ...themeState,
  34. allDeviceCount,
  35. canClearDevices: !!allDeviceCount && !transportState.isConnecting,
  36. canDisconnectDevice: !!connectedDevice,
  37. canStartScan: !transportState.isConnecting,
  38. canSyncRegisters: !!connectedDevice
  39. && !transportState.isConnecting
  40. && !syncState.isSyncing,
  41. connectionCharacteristicText: connectedDevice ? transportState.characteristicText : '--',
  42. connectionDeviceId: connectedDevice ? connectedDevice.deviceId : '--',
  43. connectionName: connectedDevice ? connectedDevice.displayName : '',
  44. connectionServiceCount: connectedDevice ? transportState.connectedServiceCount : '--',
  45. connectionSignalText: connectedDevice ? connectedDevice.signalText : '--',
  46. connectionStatusText,
  47. devices: transportState.isDiscovering ? filteredDevices : [],
  48. deviceCountText: allDeviceCount
  49. ? (deviceFilterMode === 'target' ? `(${filteredDeviceCount}/${allDeviceCount})` : `(${allDeviceCount})`)
  50. : '',
  51. deviceFilterMode,
  52. deviceFilterOptions: DEVICE_FILTER_OPTIONS,
  53. emptyDeviceText: allDeviceCount && deviceFilterMode === 'target'
  54. ? '当前扫描结果中没有广播目标 UUID 的设备,可切回全部后连接确认特征值。'
  55. : '请确认设备已上电并处于可广播或配网状态。',
  56. emptyDeviceTitle: allDeviceCount && deviceFilterMode === 'target'
  57. ? '没有匹配目标特征的设备'
  58. : '还没有发现设备',
  59. isSyncing: !!syncState.isSyncing,
  60. scanButtonText: transportState.isDiscovering ? '停止' : '扫描',
  61. showDeviceSection: transportState.isDiscovering
  62. }
  63. }
  64. module.exports = {
  65. DEFAULT_DEVICE_FILTER,
  66. DEVICE_FILTER_OPTIONS,
  67. filterDevices,
  68. getHomePageState,
  69. isTargetDevice
  70. }