ipanel-rnapp-ajb-base 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/app/.local_dev/DemoPage.js +46 -0
  2. package/app/.local_dev/env.js +1 -0
  3. package/app/.local_dev/polyfill.js +83 -0
  4. package/app/App.js +485 -0
  5. package/app/api/homedApi.js +42 -0
  6. package/app/api/index.js +2 -0
  7. package/app/api/ipanelCloudApi.js +796 -0
  8. package/app/assets/img/add.png +0 -0
  9. package/app/assets/img/add_img.png +0 -0
  10. package/app/assets/img/album.png +0 -0
  11. package/app/assets/img/album2.png +0 -0
  12. package/app/assets/img/album3.png +0 -0
  13. package/app/assets/img/album@2x.png +0 -0
  14. package/app/assets/img/album@3x.png +0 -0
  15. package/app/assets/img/audioRecordBar.png +0 -0
  16. package/app/assets/img/bootom_bar_bg.png +0 -0
  17. package/app/assets/img/close.png +0 -0
  18. package/app/assets/img/computer.png +0 -0
  19. package/app/assets/img/confirm.png +0 -0
  20. package/app/assets/img/delete_pic.png +0 -0
  21. package/app/assets/img/disabled.png +0 -0
  22. package/app/assets/img/goBack.png +0 -0
  23. package/app/assets/img/goBack2.png +0 -0
  24. package/app/assets/img/ischeck.png +0 -0
  25. package/app/assets/img/launch_bg.png +0 -0
  26. package/app/assets/img/launch_bg_panyu.png +0 -0
  27. package/app/assets/img/launch_logo.png +0 -0
  28. package/app/assets/img/launch_logo_panyu.png +0 -0
  29. package/app/assets/img/launch_text.png +0 -0
  30. package/app/assets/img/launch_text_panyu.png +0 -0
  31. package/app/assets/img/link.png +0 -0
  32. package/app/assets/img/login_bg.png +0 -0
  33. package/app/assets/img/login_bg_new.png +0 -0
  34. package/app/assets/img/login_left.png +0 -0
  35. package/app/assets/img/login_right.png +0 -0
  36. package/app/assets/img/nocheck.png +0 -0
  37. package/app/assets/img/personal.png +0 -0
  38. package/app/assets/img/photo.png +0 -0
  39. package/app/assets/img/photo@2x.png +0 -0
  40. package/app/assets/img/photo@3x.png +0 -0
  41. package/app/assets/img/protocol_checked.png +0 -0
  42. package/app/assets/img/qiehuan.png +0 -0
  43. package/app/assets/img/scan_border_bottom_left.png +0 -0
  44. package/app/assets/img/scan_border_bottom_right.png +0 -0
  45. package/app/assets/img/scan_border_top_left.png +0 -0
  46. package/app/assets/img/scan_border_top_right.png +0 -0
  47. package/app/assets/img/scan_move.png +0 -0
  48. package/app/assets/img/szjt.png +0 -0
  49. package/app/assets/img/tab.png +0 -0
  50. package/app/assets/img/tykz.png +0 -0
  51. package/app/assets/img/update_bg.png +0 -0
  52. package/app/assets/img/video.png +0 -0
  53. package/app/assets/img/video@2x.png +0 -0
  54. package/app/assets/img/video@3x.png +0 -0
  55. package/app/assets/img/worker.png +0 -0
  56. package/app/assets/img/wx.png +0 -0
  57. package/app/assets/img/ykq.png +0 -0
  58. package/app/assets/img/zfb.png +0 -0
  59. package/app/base.js +342 -0
  60. package/app/components/VersionUpdateConfirm.js +117 -0
  61. package/app/components/common/AccordionCell/index.js +67 -0
  62. package/app/components/common/ActionPicker/BasicPicker.js +136 -0
  63. package/app/components/common/ActionPicker/index.js +106 -0
  64. package/app/components/common/AddressPicker/index.js +211 -0
  65. package/app/components/common/Card/index.js +19 -0
  66. package/app/components/common/Cell/index.js +381 -0
  67. package/app/components/common/CustomDialog/index.js +120 -0
  68. package/app/components/common/CustomTabBar/index.js +157 -0
  69. package/app/components/common/CustomTabBar_bak/TabBarInput.js +210 -0
  70. package/app/components/common/CustomTabBar_bak/index.js +832 -0
  71. package/app/components/common/DateTimingPicker/index.js +254 -0
  72. package/app/components/common/Dialog/Notify.js +36 -0
  73. package/app/components/common/Dialog/baseDialog.js +146 -0
  74. package/app/components/common/Dialog/index.js +113 -0
  75. package/app/components/common/Dialog/prompt.js +145 -0
  76. package/app/components/common/Dialog/quickSelect.js +54 -0
  77. package/app/components/common/Dialog/select.js +125 -0
  78. package/app/components/common/Dialog/styles.js +167 -0
  79. package/app/components/common/Loading/index.js +71 -0
  80. package/app/components/common/LoginType/index.js +171 -0
  81. package/app/components/common/LoginType/protocol.js +160 -0
  82. package/app/components/common/Notify/index.js +68 -0
  83. package/app/components/common/OnceTouchable/index.js +33 -0
  84. package/app/components/common/PaymentPicker/index.js +264 -0
  85. package/app/components/common/ProductOrderPicker/index.js +524 -0
  86. package/app/components/common/ScreenBackHeader/index.js +144 -0
  87. package/app/components/common/ScrollPicker/index.js +232 -0
  88. package/app/components/common/SelectPicker/index.js +171 -0
  89. package/app/components/common/SmsCodeInput/index.js +93 -0
  90. package/app/components/common/SmsCodeInput/indexNew.js +101 -0
  91. package/app/components/common/Steps/index.js +126 -0
  92. package/app/components/common/Tag/index.js +17 -0
  93. package/app/components/common/Toast/index.js +103 -0
  94. package/app/components/common/WeekDaysPicker/index.js +196 -0
  95. package/app/components/index.js +8 -0
  96. package/app/components/iot/AddDeviceActionSheet/index.js +934 -0
  97. package/app/components/iot/AddressActionSheet/index.js +91 -0
  98. package/app/components/iot/RoomActionSheet/index.js +205 -0
  99. package/app/components/iot/ViewDeviceActionSheet/index.js +834 -0
  100. package/app/components/sheets.js +30 -0
  101. package/app/eventBus/index.js +54 -0
  102. package/app/hooks/checkLogin.js +30 -0
  103. package/app/hooks/shopMessageManager.js +308 -0
  104. package/app/hooks/useAddress.js +179 -0
  105. package/app/hooks/useAddress2.js +587 -0
  106. package/app/hooks/useDebounceFn.js +6 -0
  107. package/app/hooks/useDynamicPackages.js +22 -0
  108. package/app/hooks/useKeyboard.js +25 -0
  109. package/app/hooks/useLatest.js +10 -0
  110. package/app/hooks/useMessageManager.js +368 -0
  111. package/app/hooks/useNavigationFocus.js +19 -0
  112. package/app/hooks/useUser.js +56 -0
  113. package/app/screens/BaseScreen.js +389 -0
  114. package/app/screens/CommonScreens/BindPhoneScreen/index.js +179 -0
  115. package/app/screens/CommonScreens/BossScreen/index.js +138 -0
  116. package/app/screens/CommonScreens/DeviceAnswerDetailScreen/index.js +50 -0
  117. package/app/screens/CommonScreens/DeviceFeedbackScreen/index.js +365 -0
  118. package/app/screens/CommonScreens/EditInvoiceTitleScreen/index.js +279 -0
  119. package/app/screens/CommonScreens/FamilyDetailScreen/index.js +421 -0
  120. package/app/screens/CommonScreens/InvoiceTitleListScreen/index.js +118 -0
  121. package/app/screens/CommonScreens/OperatorSelectScreen/index.js +315 -0
  122. package/app/screens/CommonScreens/PersonalScreen/index.js +348 -0
  123. package/app/screens/CommonScreens/ScanQRCodeScreen/index.js +407 -0
  124. package/app/screens/CommonScreens/TvAlbumScreen/index.js +407 -0
  125. package/app/screens/LoginScreen/OpenLogSheet.js +241 -0
  126. package/app/screens/LoginScreen/index.js +920 -0
  127. package/app/screens/LoginScreen/indexNew.js +1354 -0
  128. package/app/screens/ResePassword/index.js +364 -0
  129. package/app/screens/SbkScreen.js +19 -0
  130. package/app/screens/WebviewScreen.js +41 -0
  131. package/app/storage/index.js +166 -0
  132. package/app/utils/EventEmitter.js +43 -0
  133. package/app/utils/RootNavigation.js +32 -0
  134. package/app/utils/SBK_plugin/convert.js +90 -0
  135. package/app/utils/SBK_plugin/convertStatus.js +250 -0
  136. package/app/utils/SBK_plugin/eventProcess.js +339 -0
  137. package/app/utils/SBK_plugin/index.js +32 -0
  138. package/app/utils/SBK_plugin/ipanelDeviceToSbkDevice.js +68 -0
  139. package/app/utils/SBK_plugin/sbk_defs.js +191 -0
  140. package/app/utils/StyleComposite.js +37 -0
  141. package/app/utils/applyPermissions.js +251 -0
  142. package/app/utils/bundleUpdater.js +46 -0
  143. package/app/utils/common.js +380 -0
  144. package/app/utils/config.js +47 -0
  145. package/app/utils/errCodes.js +3 -0
  146. package/app/utils/homedData.js +57 -0
  147. package/app/utils/http.js +178 -0
  148. package/app/utils/notice.js +15 -0
  149. package/app/utils/priceConversion.js +30 -0
  150. package/app/utils/registerDialog.js +90 -0
  151. package/app/utils/scaleSize.js +12 -0
  152. package/app/utils/soundPlayer.js +85 -0
  153. package/bin/local-dev.js +7 -0
  154. package/index.js +8 -0
  155. package/package.json +18 -0
@@ -0,0 +1,68 @@
1
+ import {JdSmartDeviceType, JdSmartDeviceOrder} from './sbk_defs';
2
+ import {convertIrConditionCmdOrStatus} from './convertStatus';
3
+
4
+ const getBaseData = ({ipanelDevice, room, familyName}) => {
5
+ // console.log(ipanelDevice.device_name, room.room_name, familyName);
6
+
7
+ return {
8
+ deviceId: ipanelDevice.device_id,
9
+ deviceName: ipanelDevice.device_name,
10
+ zoneId: familyName,
11
+ roomId: room.room_name,
12
+ _room_id: room.room_id,
13
+ _room_name: room.room_name,
14
+ online: 1,
15
+ voiceEnable: true,
16
+ };
17
+ };
18
+
19
+ // 普通灯,只有开关功能
20
+ export const convertToSbkLight = ({ipanelDevice, room, familyName}) => {
21
+ return {
22
+ ...getBaseData({ipanelDevice, room, familyName}),
23
+ deviceType: JdSmartDeviceType.DEVICE_TYPE_LAMP,
24
+ deviceSubType: '',
25
+ };
26
+ };
27
+
28
+ // 色温灯,有开关、色温、亮度功能
29
+ export const convertToSbkCWLight = ({
30
+ ipanelDevice,
31
+ room,
32
+ familyName,
33
+ status,
34
+ }) => {
35
+ return {
36
+ ...getBaseData({ipanelDevice, room, familyName}),
37
+ deviceType: JdSmartDeviceType.DEVICE_TYPE_LAMP,
38
+ deviceSubType: JdSmartDeviceType.DEVICE_SUB_LAMP_TYPE_COLOR_CW,
39
+ };
40
+ };
41
+
42
+ // 无进度窗帘(不能获得移动位置),只有开关功能
43
+ export const convertToSbkCurtainNoPosition = ({
44
+ ipanelDevice,
45
+ room,
46
+ familyName,
47
+ status,
48
+ }) => {
49
+ return {
50
+ ...getBaseData({ipanelDevice, room, familyName}),
51
+ deviceType: JdSmartDeviceType.DEVICE_TYPE_CURTAINS_NO_POSITION,
52
+ deviceSubType: '',
53
+ };
54
+ };
55
+
56
+ // 红外空调,有开关、温度、模式、风速、风向功能
57
+ export const convertToSbkIrCondition = ({
58
+ ipanelDevice,
59
+ room,
60
+ familyName,
61
+ status,
62
+ }) => {
63
+ return {
64
+ ...getBaseData({ipanelDevice, room, familyName}),
65
+ deviceType: JdSmartDeviceType.DEVICE_TYPE_AIRCONDITION,
66
+ deviceSubType: JdSmartDeviceType.DEVICE_SUB_TYPE_IR,
67
+ };
68
+ };
@@ -0,0 +1,191 @@
1
+ // 声必可设备类型
2
+ export const JdSmartDeviceType = {
3
+ // 智能设备类
4
+ DEVICE_TYPE_LAMP: 1,
5
+ DEVICE_TYPE_CURTAINS: 2,
6
+ DEVICE_TYPE_SOCKECT: 3,
7
+ DEVICE_TYPE_SPEAKER: 4,
8
+ DEVICE_TYPE_AIRCONDITION: 5,
9
+ DEVICE_TYPE_AIRPURIFIER: 6,
10
+ DEVICE_TYPE_DIMMER: 7,
11
+ DEVICE_TYPE_WINDOW_CONTROLER: 8,
12
+ DEVICE_TYPE_HEATER: 9,
13
+ DEVICE_TYPE_IR_REPEATER: 10,
14
+ DEVICE_TYPE_TV: 11,
15
+ DEVICE_TYPE_STB: 12,
16
+ DEVICE_TYPE_SELF_DEFINE_IR: 13,
17
+ DEVICE_TYPE_DOOR: 14,
18
+ DEVICE_TYPE_BED: 15,
19
+ DEVICE_TYPE_DESK: 16,
20
+ DEVICE_TYPE_CHAIR: 17,
21
+ DEVICE_TYPE_WATER_HEATER: 18,
22
+ DEVICE_TYPE_CAMERA: 19,
23
+ DEVICE_TYPE_PROJECT: 21,
24
+ DEVICE_TYPE_PULL_FAN: 22,
25
+ DEVICE_TYPE_CURTAINS_NO_POSITION: 23,
26
+ DEVICE_TYPE_SCENE: 24,
27
+ DEVICE_TYPE_FAN: 25,
28
+ DEVICE_TYPE_MACHINE_ARM: 26,
29
+ DEVICE_TYPE_SWITCH: 27,
30
+ DEVICE_TYPE_FRESH_AIR: 28,
31
+ DEVICE_TYPE_FLOOR_HEATING: 29,
32
+ DEVICE_TYPE_CLOTHES_HANGER: 30,
33
+ DEVICE_TYPE_SWEEPER_MACHINE: 31,
34
+ DEVICE_TYPE_CAT_CAMERA: 33,
35
+ DEVICE_TYPE_DIMMER_2: 34,
36
+ DEVICE_TYPE_CURTAIN_ANGLE: 35,
37
+ DEVICE_TYPE_CURTAIN_SHUTTER: 36,
38
+ // 传感器类 (100, 200)
39
+ DEVICE_TYPE_TEMPERATURE_SENSOR: 101,
40
+ DEVICE_TYPE_SOS_SENSOR: 102,
41
+ DEVICE_TYPE_INFRARED_SENSOR: 103,
42
+ DEVICE_TYPE_MAGNETIC_WINDOW: 104,
43
+ DEVICE_TYPE_FLAMMABLE_GAS: 105,
44
+ DEVICE_TYPE_HUMIDITY_SENSOR: 106,
45
+ DEVICE_TYPE_TEMP_HUMIDITY_SENSOR: 107,
46
+ DEVICE_TYPE_CO2_SENSOR: 108,
47
+ DEVICE_TYPE_SMOKER_SENSOR: 109,
48
+ DEVICE_TYPE_CO_SENSOR: 110,
49
+ DEVICE_TYPE_WATER_SENSOR: 111,
50
+ DEVICE_TYPE_AIR_PM_25_SENSOR: 112,
51
+ DEVICE_TYPE_MULTIFUNCTIONAL_SENSOR: 113,
52
+ // 子类型 [100000,]
53
+ DEVICE_SUB_TYPE_IR: 100000,
54
+ DEVICE_SUB_TYPE_CONTROL_BOX: 100001,
55
+ DEVICE_SUB_LAMP_TYPE_COLOR_RGB: 100002,
56
+ DEVICE_SUB_LAMP_TYPE_COLOR_CW: 100003,
57
+ DEVICE_SUB_LAMP_TYPE_COLOR_RGBCW: 100004,
58
+ DEVICE_SUB_LAMP_TYPE_COLOR_RGBCW_485: 100005,
59
+
60
+ DEVICE_TYPE_UNKNOWN: 8000000,
61
+ };
62
+
63
+ // 声必可设备命令
64
+ export const JdSmartDeviceOrder = {
65
+ ON: 'on',
66
+ OFF: 'off',
67
+ SWITCH_MULTIWAY_NAME: 'switchNames',
68
+ SWITCH_MULTIWAY_STATUS: 'switchValues',
69
+ OPEN: 'open',
70
+ CLOSE: 'close',
71
+ PLAY: 'play',
72
+ STOP: 'stop',
73
+ PAUSE: 'pause',
74
+ ANGLE: 'angle',
75
+ MUTE: 'mute',
76
+ IR_CONTROL: 'ir control',
77
+ MoveToLevel: 'move to level',
78
+ MOVE_TO_LEVEL: 'move to level',
79
+ SET: 'set',
80
+ NEXT: 'next',
81
+ ACTION_INCREASE: 'action_increase',
82
+ ACTION_DECREASE: 'action_decrease',
83
+ AIRCONDITION_MODE_TYPE: 'air_condition_mode_level',
84
+ AIRCONDITION_WIND_RATE_TYPE: 'air_condition_wind_rate_level',
85
+ AIRCONDITION_WIND_DIRECTION_TYPE: 'air_condition_wind_direction_level',
86
+ TEMPERATURE: 'temperature',
87
+ AIRCONDITION_MODE_COOL: 'cooling',
88
+ AIRCONDITION_MODE_HEAT: 'heating',
89
+ AIRCONDITION_MODE_WIND: 'winding',
90
+ AIRCONDITION_MODE_DEHUMIDIFY: 'dehumidify',
91
+ AIRCONDITION_MODE_AUTO: 'auto',
92
+ AIRCONDITION_MODE_SLEEP: 'sleep',
93
+ AIRCONDITION_MODE_COMFORTABLE: 'comfortable',
94
+ AIRCONDITION_MODE_MANUAL: 'manual',
95
+ AIRCONDITION_WIND_RATE_AUTO: 'auto_wind',
96
+ AIRCONDITION_WIND_RATE_HIGH: 'high_wind',
97
+ AIRCONDITION_WIND_RATE_MIDDLE: 'middle_wind',
98
+ AIRCONDITION_WIND_RATE_LOW: 'low_wind',
99
+ AIRCONDITION_WIND_RATE_MUTE: 'mute_wind',
100
+ AIRCONDITION_WIND_RATE_SLEEP: 'sleep_wind',
101
+ AIRCONDITION_WIND_DIRECTION_LEFT_RIGHT: 'left_right',
102
+ AIRCONDITION_WIND_DIRECTION_UP_DOWN: 'up_dowm',
103
+ AIRCONDITION_WIND_DIRECTION__UP_DOWN: 'up_dowm',
104
+ AIRCONDITION_WIND_DIRECTION_NO_DIRECTION: 'no_direction',
105
+ SWEEPER_MACHINE_ORDER_SWEEP_ON: 'SWEEPER_MACHINE_ORDER_SWEEP_ON',
106
+ SWEEPER_MACHINE_ORDER_SWEEP_OFF: 'SWEEPER_MACHINE_ORDER_SWEEP_OFF',
107
+ SWEEPER_MACHINE_SWEEPER_MODE: 'SWEEPER_MODE_SWEEPER',
108
+ SWEEPER_MACHINE_AUTO_MODE: 'SWEEPER_MODE_AUTO',
109
+ SWEEPER_MACHINE_FORCE_MODE: 'SWEEPER_MODE_FORCE',
110
+ SWEEPER_MACHINE_MUTE_MODE: 'SWEEPER_MODE_MUTE',
111
+ SWEEPER_MACHINE_NORMAL_MODE: 'SWEEPER_MODE_NORMAL',
112
+ SWEEPER_MACHINE_CHARGE_MODE: 'SWEEPER_MODE_CHARGE',
113
+ SWEEPER_MACHINE_STATUS: 'SWEEPER_MACHINE_STATUS',
114
+ SWEEPER_MACHINE_STATUS_SWEEP: 'SWEEPER_MACHINE_STATUS_SWEEP',
115
+ CLOTHES_HANGER_ORDER_MOVE_UP: 'CLOTHES_HANGER_MOVE_UP',
116
+ CLOTHES_HANGER_ORDER_MOVE_STOP: 'CLOTHES_HANGER_MOVE_STOP',
117
+ CLOTHES_HANGER_ORDER_MOVE_DOWN: 'CLOTHES_HANGER_MOVE_DOWN',
118
+ CLOTHES_HANGER_ORDER_LIGHT_ON: 'CLOTHES_HANGER_LIGHT_ON',
119
+ CLOTHES_HANGER_ORDER_LIGHT_OFF: 'CLOTHES_HANGER_LIGHT_OFF',
120
+ CLOTHES_HANGER_ORDER_HEAT_ON: 'CLOTHES_HANGER_HEAT_ON',
121
+ CLOTHES_HANGER_ORDER_HEAT_OFF: 'CLOTHES_HANGER_HEAT_OFF',
122
+ CLOTHES_HANGER_ORDER_WIND_ON: 'CLOTHES_HANGER_WIND_ON',
123
+ CLOTHES_HANGER_ORDER_WIND_OFF: 'CLOTHES_HANGER_WIND_OFF',
124
+ CLOTHES_HANGER_ORDER_DESINFECTION_ON: 'CLOTHES_HANGER_DESINFECTION_ON',
125
+ CLOTHES_HANGER_ORDER_DESINFECTION_OFF: 'CLOTHES_HANGER_DESINFECTION_OFF',
126
+ CLOTHES_HANGER_STATUS_MOVE: 'CLOTHES_HANGER_MOVE',
127
+ CLOTHES_HANGER_STATUS_LIGHT: 'CLOTHES_HANGER_LIGHT',
128
+ CLOTHES_HANGER_STATUS_HEAT: 'CLOTHES_HANGER_HEAT',
129
+ CLOTHES_HANGER_STATUS_WIND: 'CLOTHES_HANGER_WIND',
130
+ CLOTHES_HANGER_STATUS_DESINFECTION: 'CLOTHES_HANGER_DESINFECTION',
131
+ AIRPURIFIER_ORDER_MODE_AUTO: 'AIRPURIFIER_ORDER_MODE_AUTO',
132
+ AIRPURIFIER_ORDER_MODE_COMFORTABLE: 'AIRPURIFIER_ORDER_MODE_COMFORTABLE',
133
+ AIRPURIFIER_ORDER_MODE_MANUAL: 'AIRPURIFIER_ORDER_MODE_MANUAL',
134
+ AIRPURIFIER_ORDER_MODE_SLEEP: 'AIRPURIFIER_ORDER_MODE_SLEEP',
135
+ AIRPURIFIER_ORDER_WIND_HIGHT: 'AIRPURIFIER_ORDER_WIND_HIGHT',
136
+ AIRPURIFIER_ORDER_WIND_MID: 'AIRPURIFIER_ORDER_WIND_MID',
137
+ AIRPURIFIER_ORDER_WIND_LOW: 'AIRPURIFIER_ORDER_WIND_LOW',
138
+ AIRPURIFIER_ORDER_WIND_AUTO: 'AIRPURIFIER_ORDER_WIND_AUTO',
139
+ AIRPURIFIER_ORDER_WIND_SLEEP: 'AIRPURIFIER_ORDER_WIND_SLEEP',
140
+ AIRPURIFIER_STATUS_MODE: 'AIRPURIFIER_STATUS_MODE',
141
+ AIRPURIFIER_STATUS_WIND: 'AIRPURIFIER_STATUS_WIND',
142
+ AIRPURIFIER_STATUS_PM25: 'AIRPURIFIER_STATUS_PM25',
143
+ AIRPURIFIER_STATUS_TEMP: 'AIRPURIFIER_STATUS_TEMP',
144
+ AIRPURIFIER_STATUS_HUMIDITY: 'AIRPURIFIER_STATUS_HUMIDITY',
145
+ AIRPURIFIER_STATUS_AQI: 'AIRPURIFIER_STATUS_AQI',
146
+ FLOOR_HEATING_ORDER_MODE_AUTO: 'FLOOR_HEATING_ORDER_MODE_AUTO',
147
+ FLOOR_HEATING_ORDER_MODE_MANUAL: 'FLOOR_HEATING_ORDER_MODE_MANUAL',
148
+ FLOOR_HEATING_ORDER_MODE_SLEEP: 'FLOOR_HEATING_ORDER_MODE_SLEEP',
149
+ FLOOR_HEATING_STATUS_MODE: 'FLOOR_HEATING_STATUS_MODE',
150
+ FLOOR_HEATING_STATUS_TEMP: 'FLOOR_HEATING_STATUS_TEMP',
151
+ COLOR_LAMP_MODE: 'COLOR_LAMP_MODE',
152
+ COLOR_LAMP_MODE_RGB: 'COLOR_LAMP_MODE_RGB',
153
+ COLOR_LAMP_MODE_FLASH: 'COLOR_LAMP_MODE_FLASH',
154
+ COLOR_LAMP_MODE_CW: 'COLOR_LAMP_MODE_CW',
155
+ COLOR_LAMP_RGB_VALUE: 'COLOR_LAMP_RGB_VALUE',
156
+ COLOR_LAMP_RGB_BRIGHT: 'COLOR_LAMP_RGB_BRIGHT',
157
+ COLOR_LAMP_RGB_SATURATION: 'COLOR_LAMP_RGB_SATURATION',
158
+ COLOR_LAMP_CW_VALUE: 'COLOR_LAMP_CW_VALUE',
159
+ COLOR_LAMP_CW_BRIGHT: 'COLOR_LAMP_CW_BRIGHT',
160
+ FRESH_AIR_STATUS_WIND: 'FRESH_AIR_STATUS_WIND',
161
+ FRESH_AIR_ORDER_WIND_HIGH: 'FRESH_AIR_ORDER_WIND_HIGH',
162
+ FRESH_AIR_ORDER_WIND_MID: 'FRESH_AIR_ORDER_WIND_MID',
163
+ FRESH_AIR_ORDER_WIND_LOW: 'FRESH_AIR_ORDER_WIND_LOW',
164
+ FRESH_AIR_ORDER_WIND_AUTO: 'FRESH_AIR_ORDER_WIND_AUTO',
165
+ FRESH_AIR_ORDER_WIND_SLEEP: 'FRESH_AIR_ORDER_WIND_SLEEP',
166
+ FRESH_AIR_STATUS_MODE: 'FRESH_AIR_STATUS_MODE',
167
+ FRESH_AIR_ORDER_MODE_SLEEP: 'FRESH_AIR_ORDER_MODE_SLEEP',
168
+ FRESH_AIR_ORDER_MODE_AUTO: 'FRESH_AIR_ORDER_MODE_AUTO',
169
+ FRESH_AIR_ORDER_MODE_MANUAL: 'FRESH_AIR_ORDER_MODE_MANUAL',
170
+ ACTION_INCREASE_CW: 'action_increase_cw',
171
+ ACTION_DECREASE_CW: 'action_decrease_cw',
172
+ FAN_START_PIVOT: 'FAN_START_PIVOT',
173
+ FAN_STOP_PIVOT: 'FAN_STOP_PIVOT',
174
+ ADJUST_UP_CHANNEL: 'AdjustUpChannel',
175
+ ADJUST_DOWN_CHANNEL: 'AdjustDownChannel',
176
+ SELECT_CHANNEL: 'SelectChannel',
177
+ ADJUST_UP_VOLUME: 'AdjustUpVolume',
178
+ ADJUST_DOWN_VOLUME: 'AdjustDownVolume',
179
+ SET_MUTE: 'SetMute',
180
+ CANCEL_MUTE: 'CancelMute',
181
+ DIMMER_BRIGHTNESS_10: 'DIMMER_BRIGHTNESS_10',
182
+ DIMMER_BRIGHTNESS_20: 'DIMMER_BRIGHTNESS_20',
183
+ DIMMER_BRIGHTNESS_30: 'DIMMER_BRIGHTNESS_30',
184
+ DIMMER_BRIGHTNESS_40: 'DIMMER_BRIGHTNESS_40',
185
+ DIMMER_BRIGHTNESS_50: 'DIMMER_BRIGHTNESS_50',
186
+ DIMMER_BRIGHTNESS_60: 'DIMMER_BRIGHTNESS_60',
187
+ DIMMER_BRIGHTNESS_70: 'DIMMER_BRIGHTNESS_70',
188
+ DIMMER_BRIGHTNESS_80: 'DIMMER_BRIGHTNESS_80',
189
+ DIMMER_BRIGHTNESS_90: 'DIMMER_BRIGHTNESS_90',
190
+ DIMMER_BRIGHTNESS_100: 'DIMMER_BRIGHTNESS_100',
191
+ };
@@ -0,0 +1,37 @@
1
+ import px from './scaleSize';
2
+
3
+ export const fontStyle = (size, color = '#333', weight = 400) => {
4
+ return {
5
+ fontSize: px(size),
6
+ color,
7
+ fontWeight: typeof weight === 'number' ? String(weight) : weight,
8
+ };
9
+ };
10
+
11
+ export const flexBoxStyle = {
12
+ rowStartStart: {
13
+ flexDirection: 'row',
14
+ justifyContent: 'flex-start',
15
+ alignItems: 'flex-start',
16
+ },
17
+ rowStartEnd: {
18
+ flexDirection: 'row',
19
+ justifyContent: 'flex-start',
20
+ alignItems: 'flex-end',
21
+ },
22
+ rowStartCenter: {
23
+ flexDirection: 'row',
24
+ justifyContent: 'flex-start',
25
+ alignItems: 'center',
26
+ },
27
+ rowEndStart: {
28
+ flexDirection: 'row',
29
+ justifyContent: 'flex-end',
30
+ alignItems: 'flex-start',
31
+ },
32
+ rowEndEnd: {
33
+ flexDirection: 'row',
34
+ justifyContent: 'flex-end',
35
+ alignItems: 'flex-end',
36
+ },
37
+ };
@@ -0,0 +1,251 @@
1
+ import {PermissionsAndroid, Alert, Platform, NativeModules} from 'react-native';
2
+ import DeviceInfo from 'react-native-device-info';
3
+ import config from './config';
4
+ import storage from '../storage';
5
+ let systemVersion = Number(DeviceInfo.getSystemVersion());
6
+ import {confirmWithContent} from './registerDialog';
7
+
8
+ const appName =
9
+ NativeModules?.RNToNativeEmitter?.appName || config.LOCALTEST_APP_NAME;
10
+
11
+ /*
12
+ 位置:爱家宝想访问你的位置,这样可以为你提供更准确的天气等服务。
13
+ 蓝牙:只有开启蓝牙权限才可以正常连接智能设备
14
+ 相机/拍摄和录制视频:爱家宝想访问你的相机,才能扫描二维码和条形码,反馈问题等服务。
15
+ 录制音频:麦克风权限开启后可以使用语音输入功能
16
+
17
+
18
+ 位置:在智能客服里用户查天气时,弹窗提示:请在“设置>隐私>定位"中开启定位,并允许爱家宝使用,之后便可以正常使用天气功能
19
+ 蓝牙:关闭时无法进入到设备扫描页面,进入设备扫描页时,提示“请打开手机蓝牙,以便扫描设备”
20
+ 相机/拍摄和录制视频:用户点扫码入口、拍摄入口时,提示:请在“设置>隐私>权限管理”中开启爱家宝的相机使用权限。
21
+ 录制音频:用户点客服的语音按钮时,提示:请在“设置>隐私>权限管理”中开启爱家宝的麦克风使用权限。
22
+ 相册:用户点相册入口、头像时,提示:请在“设置>隐私>权限管理”中开启爱家宝的相册使用权限。
23
+ 通讯录:用户点通讯录的导入按钮时,提示:请在“设置>隐私>权限管理”中开启爱家宝的通讯录获取权限。
24
+ */
25
+
26
+ const locationPermissions = [
27
+ PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
28
+ PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
29
+ ];
30
+ const bluetoothPermissions = [
31
+ PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN,
32
+ PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT,
33
+ PermissionsAndroid.PERMISSIONS.BLUETOOTH_ADVERTISE,
34
+ ];
35
+
36
+ // 检查是否已获取选取
37
+ const checkPermissions = async permissions => {
38
+ try {
39
+ const permissionsResults = await Promise.all(
40
+ permissions.map(item => PermissionsAndroid.check(item)),
41
+ );
42
+ console.log(permissionsResults, 'permissionsResults');
43
+ return permissionsResults.every(item => !!item);
44
+ } catch (e) {
45
+ return false;
46
+ }
47
+ };
48
+
49
+ // 弹自定义提示
50
+ const alertTips = (title, message) => {
51
+ return new Promise(resolve => {
52
+ Alert.alert(title, message, [
53
+ {
54
+ text: '取消',
55
+ onPress: () => {
56
+ resolve(false);
57
+ },
58
+ style: 'cancel',
59
+ },
60
+ {
61
+ text: '确定',
62
+ onPress: () => {
63
+ resolve(true);
64
+ },
65
+ },
66
+ ]);
67
+ });
68
+ };
69
+
70
+ // 系统带的请求权限
71
+ const requestPermissions = async (
72
+ type,
73
+ permissions,
74
+ refuseMessage,
75
+ neverAskAgainPermission,
76
+ ) => {
77
+ try {
78
+ const permissionsMap = await PermissionsAndroid.requestMultiple(
79
+ permissions,
80
+ );
81
+ const permissionsResults = Object.values(permissionsMap);
82
+ if (
83
+ permissionsResults.every(
84
+ item => item === PermissionsAndroid.RESULTS.GRANTED,
85
+ )
86
+ ) {
87
+ console.log('成功申请权限');
88
+ await storage.set(`neverAskAgainPermission${type}`, null);
89
+ return true;
90
+ } else if (
91
+ permissionsResults.some(
92
+ item => item === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN,
93
+ )
94
+ ) {
95
+ await storage.set(`neverAskAgainPermission${type}`, true);
96
+ console.log('用于可能之前拒绝了,且不愿被再次询问');
97
+ if (neverAskAgainPermission) {
98
+ return new Promise(resolve => {
99
+ confirmWithContent({
100
+ title: '提示',
101
+ component: refuseMessage,
102
+ confirmButtonText: '确定',
103
+ cancelButtonText: null,
104
+ confirmCallback: async () => {
105
+ // 保存序列号和验证码
106
+ resolve(false);
107
+ },
108
+ });
109
+ });
110
+ } else {
111
+ return false;
112
+ }
113
+ } else {
114
+ await storage.set(`neverAskAgainPermission${type}`, null);
115
+ console.log('用户拒绝了权限申请');
116
+ return false;
117
+ }
118
+ } catch (e) {
119
+ return false;
120
+ }
121
+ };
122
+
123
+ const pullPermissions = async ({
124
+ type,
125
+ permissions,
126
+ alertTitle,
127
+ alertMessage,
128
+ refuseMessage,
129
+ }) => {
130
+ if (Platform.OS === 'ios') {
131
+ return true;
132
+ }
133
+ if (await checkPermissions(permissions)) {
134
+ console.log('已经有了对应权限');
135
+ return true;
136
+ } else {
137
+ /*
138
+ const neverAskAgainPermission = await storage.get(
139
+ `neverAskAgainPermission${type}`,
140
+ );
141
+ if (neverAskAgainPermission) {
142
+ return requestPermissions(
143
+ type,
144
+ permissions,
145
+ refuseMessage,
146
+ neverAskAgainPermission,
147
+ );
148
+ } else {
149
+ if (await alertTips(alertTitle, alertMessage)) {
150
+ console.log('用户确定了申请请求操作');
151
+ return await requestPermissions(type, permissions, refuseMessage);
152
+ } else {
153
+ console.log('用户取消了申请请求操作');
154
+ return false;
155
+ }
156
+ }
157
+ */
158
+ const neverAskAgainPermission = await storage.get(
159
+ `neverAskAgainPermission${type}`,
160
+ );
161
+ global.notify.show({
162
+ title: '权限说明',
163
+ content: alertMessage,
164
+ });
165
+ const res = await requestPermissions(
166
+ type,
167
+ permissions,
168
+ refuseMessage,
169
+ neverAskAgainPermission,
170
+ );
171
+ global.notify.hide();
172
+ return res;
173
+ }
174
+ };
175
+
176
+ export default {
177
+ location: async ({alertMessage, refuseMessage} = {}) => {
178
+ console.log('申请位置权限');
179
+ return pullPermissions({
180
+ type: 'location',
181
+ permissions: locationPermissions,
182
+ alertTitle: '申请位置权限',
183
+ alertMessage: alertMessage
184
+ ? `${appName}${alertMessage}`
185
+ : `${appName}想访问你的位置,这样可以为你提供更准确的天气等服务。`,
186
+ refuseMessage:
187
+ refuseMessage ||
188
+ `请在“设置>隐私>定位"中开启定位,并允许${appName}使用,之后便可以正常使用天气功能。`,
189
+ });
190
+ },
191
+ bluetooth: async () => {
192
+ if (Platform.OS === 'android') {
193
+ if (systemVersion >= 12) {
194
+ return (
195
+ (await pullPermissions({
196
+ type: 'location',
197
+ permissions: locationPermissions,
198
+ alertTitle: '申请位置权限',
199
+ alertMessage: `${appName}想访问你的位置,以便发现周边设备`,
200
+ refuseMessage: `请在“设置>隐私>定位"中开启定位,并允许${appName}使用,之后便可以正常发现周边设备。`,
201
+ })) &&
202
+ (await pullPermissions({
203
+ type: 'bluetooth',
204
+ permissions: bluetoothPermissions,
205
+ alertTitle: '申请蓝牙权限',
206
+ alertMessage: '只有开启蓝牙权限才可以正常发现和连接智能设备',
207
+ refuseMessage: `请在“设置>隐私>附近的设备"中开启蓝牙权限,并允许${appName}使用,之后便可以正常发现周边设备。`,
208
+ }))
209
+ );
210
+ } else {
211
+ return await pullPermissions({
212
+ type: 'location',
213
+ permissions: locationPermissions,
214
+ alertTitle: '申请位置权限',
215
+ alertMessage: `${appName}想访问你的位置,以便发现周边设备`,
216
+ refuseMessage: `请在“设置>隐私>定位"中开启定位,并允许${appName}使用,之后便可以正常发现周边设备。`,
217
+ });
218
+ }
219
+ } else {
220
+ return true;
221
+ }
222
+ },
223
+ camera: () => {
224
+ return pullPermissions({
225
+ type: 'camera',
226
+ permissions: [PermissionsAndroid.PERMISSIONS.CAMERA],
227
+ alertTitle: '申请相机/拍摄和录制视频权限',
228
+ alertMessage: `${appName}想访问你的相机,才能扫描二维码和条形码,反馈问题等服务`,
229
+ refuseMessage: `请在“设置>隐私>权限管理”中开启${appName}的相机使用权限。`,
230
+ });
231
+ },
232
+ audio: () => {
233
+ console.log('申请录制音频权限');
234
+ return pullPermissions({
235
+ type: 'audio',
236
+ permissions: [PermissionsAndroid.PERMISSIONS.RECORD_AUDIO],
237
+ alertTitle: '申请录制音频权限',
238
+ alertMessage: '麦克风权限开启后可以使用视频反馈问题、语音输入等服务',
239
+ refuseMessage: `请在“设置>隐私>权限管理”中开启${appName}的麦克风使用权限。`,
240
+ });
241
+ },
242
+ writeStorage: () => {
243
+ return pullPermissions({
244
+ type: 'writeStorage',
245
+ permissions: [PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE],
246
+ alertTitle: '申请访问内部存储权限',
247
+ alertMessage: '权限开启后可以使用截图和录制功能',
248
+ refuseMessage: `请在“设置>隐私>权限管理”中开启${appName}的访问内部存储使用权限。`,
249
+ });
250
+ },
251
+ };
@@ -0,0 +1,46 @@
1
+ import {
2
+ Platform,
3
+ DeviceEventEmitter,
4
+ NativeEventEmitter,
5
+ NativeModules,
6
+ Alert,
7
+ } from 'react-native';
8
+
9
+ import storage from '../storage';
10
+
11
+ // 事件监听器
12
+ let eventEmitter;
13
+ if (Platform.OS === 'android') {
14
+ // ----yusm:安卓使用DeviceEventEmitter
15
+ eventEmitter = DeviceEventEmitter;
16
+ } else {
17
+ eventEmitter = new NativeEventEmitter(NativeModules.NativeToRNEmitter);
18
+ }
19
+ /* 监听app发送过来的消息 */
20
+ // 需要获取最新的运营商的包信息;两个时机触发,1、app刚打开加载完业务包时,2、app从后台进入前台时 ——chenll
21
+ eventEmitter.addListener('GetBundleInfo', obj => {
22
+ console.log('currentBundleVersion=', JSON.stringify(obj));
23
+ storage.set('bundleVersion', obj);
24
+ });
25
+ //下载并加载rn包 失败
26
+ eventEmitter.addListener('BundleLoadError', bundleInfo => {
27
+ console.log('BundleLoadError bundleInfo=', JSON.stringify(bundleInfo));
28
+ /*retCode:retMessage定义如下
29
+ 0:版本已是最新
30
+ 1:业务包相关参数不全
31
+ 2:业务包下载失败
32
+ 3:业务包解压失败
33
+ 4:未找到指定业务包文件
34
+ 5:读取业务包内容失败
35
+ 6: 开始下载(retMessage为模块名:运营商id)
36
+ 7: 下载进度(retMessage为0-100,字符串型)
37
+ 99:未知错误 */
38
+ if (bundleInfo.retCode === 0) {
39
+ Alert.alert('当前版本已是最新');
40
+ } else if (bundleInfo.retCode === 6 || bundleInfo.retCode === 7) {
41
+ global.loading.showLoading('正在升级内容...');
42
+ } else {
43
+ global.loading.hideLoading();
44
+ Alert.alert('升级失败:' + bundleInfo.retCode);
45
+ }
46
+ });