ipanel-rnapp-ajb-base 1.0.21 → 1.0.24

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.
@@ -1,4 +1,4 @@
1
- import React, {useState, useEffect, useRef} from 'react';
1
+ import React, { useState, useEffect, useRef } from "react";
2
2
  import {
3
3
  View,
4
4
  Text,
@@ -11,45 +11,45 @@ import {
11
11
  Alert,
12
12
  NativeModules,
13
13
  Dimensions,
14
- Keyboard
15
- } from 'react-native';
14
+ Keyboard,
15
+ } from "react-native";
16
16
  import {
17
17
  updateHomedToken,
18
18
  initOperatorHomedTouristAccount,
19
19
  appReport,
20
- } from '../../utils/common';
21
- import ScreenBackHeader from '../../components/common/ScreenBackHeader';
22
- import SmsCodeInput from '../../components/common/SmsCodeInput/indexNew';
23
- import {Icon, CheckBox, Button, Divider} from '@rneui/themed';
24
- import CryptoJS from 'crypto-js';
25
- import ProtocolType from '../../components/common/LoginType/protocol';
26
- import {confirmWithContent} from '../../utils/registerDialog';
20
+ } from "../../utils/common";
21
+ import ScreenBackHeader from "../../components/common/ScreenBackHeader";
22
+ import SmsCodeInput from "../../components/common/SmsCodeInput/indexNew";
23
+ import { Icon, CheckBox, Button, Divider } from "@rneui/themed";
24
+ import CryptoJS from "crypto-js";
25
+ import ProtocolType from "../../components/common/LoginType/protocol";
26
+ import { confirmWithContent } from "../../utils/registerDialog";
27
27
  import {
28
28
  obtainSmscode,
29
29
  changePwdByPhone,
30
30
  authSmscode,
31
31
  accountRegiste,
32
32
  accountLogin,
33
- switchToken
34
- } from '../../api';
35
- import px from '../../utils/scaleSize';
36
- import storage from '../../storage';
37
- import {replace,goBack} from '../../utils/RootNavigation';
33
+ switchToken,
34
+ } from "../../api";
35
+ import px from "../../utils/scaleSize";
36
+ import storage from "../../storage";
37
+ import { replace, goBack } from "../../utils/RootNavigation";
38
38
  // const passwordReg =
39
39
  // /^(?![0-9]+$)(?![a-zA-Z]+$)(?!([^(0-9a-zA-Z)]|[\(\)])+$)([^(0-9a-zA-Z)]|[\(\)]|[a-zA-Z]|[0-9]){6,}$/;
40
40
 
41
- const Index = ({route}) => {
42
- const [username, setUsername] = useState('');
43
- const [password, setPassword] = useState('');
41
+ const Index = ({ route }) => {
42
+ const [username, setUsername] = useState("");
43
+ const [password, setPassword] = useState("");
44
44
  const [step, setStep] = useState(0); // 0 输入账号绑定的手机号码,1 设置密码
45
- const [phone, setPhone] = useState('');
46
- const [smsId, setSmsId] = useState('');
47
- const [userInputSmsCode, setUserInputSmsCode] = useState('');
45
+ const [phone, setPhone] = useState("");
46
+ const [smsId, setSmsId] = useState("");
47
+ const [userInputSmsCode, setUserInputSmsCode] = useState("");
48
48
  const [smsCodeRightBtnDisabled, setSmsCodeRightBtnDisabled] = useState(false);
49
- const [smsCodeRightBtnText, setSmsCodeRightBtnText] = useState('发送验证码');
49
+ const [smsCodeRightBtnText, setSmsCodeRightBtnText] = useState("发送验证码");
50
50
  const [smsCodeResendTimes, setSmsCodeResendTimes] = useState(0);
51
- const [authCode, setAuthCode] = useState('');
52
- const [activeType, setActiveType] = useState('ajb');
51
+ const [authCode, setAuthCode] = useState("");
52
+ const [activeType, setActiveType] = useState("ajb");
53
53
  const loginDisabled =
54
54
  step === 0
55
55
  ? !(username && password)
@@ -58,7 +58,7 @@ const Index = ({route}) => {
58
58
  : true;
59
59
  const appName =
60
60
  NativeModules?.RNToNativeEmitter?.appName || config.LOCALTEST_APP_NAME;
61
- const envVersion = NativeModules?.RNToNativeEmitter?.serverCluster || 'alpha';
61
+ const envVersion = NativeModules?.RNToNativeEmitter?.serverCluster || "alpha";
62
62
  const packageName = NativeModules?.RNToNativeEmitter?.packageName;
63
63
 
64
64
  const [protocolAgree, setProtocolAgree] = useState(false);
@@ -68,13 +68,12 @@ const Index = ({route}) => {
68
68
  const [privacyAgree, setPrivacyAgree] = useState(false);
69
69
  const [privacyDialogVisible, setPrivacyDialogVisible] = useState(false);
70
70
 
71
- // 入口选择
72
- const [entranceSelectVisible, setEntranceSelectVisible] = useState(false);
71
+ // 入口选择
72
+ const [entranceSelectVisible, setEntranceSelectVisible] = useState(false);
73
73
 
74
74
  let protocolAgreeResolve = useRef(null);
75
75
 
76
- const userCountData = useRef({})
77
-
76
+ const userCountData = useRef({});
78
77
 
79
78
  const timers = useRef(null);
80
79
 
@@ -82,10 +81,10 @@ const Index = ({route}) => {
82
81
 
83
82
  const [keybordShow, setKeybordShow] = useState(false);
84
83
  useEffect(() => {
85
- const keyboardDidShow = Keyboard.addListener('keyboardDidShow', () => {
84
+ const keyboardDidShow = Keyboard.addListener("keyboardDidShow", () => {
86
85
  setKeybordShow(true);
87
86
  });
88
- const keyboardDidHide = Keyboard.addListener('keyboardDidHide', () => {
87
+ const keyboardDidHide = Keyboard.addListener("keyboardDidHide", () => {
89
88
  setKeybordShow(false);
90
89
  });
91
90
  return () => {
@@ -95,35 +94,35 @@ const Index = ({route}) => {
95
94
  }, []);
96
95
 
97
96
  const errorCodeMap = {
98
- 20102: '验证码错误,请检查!',
99
- 20103: '验证码错误,请检查!',
100
- 20104: '验证码错误,请检查!',
101
- 20200: '账号错误,登录失败!',
102
- 20204: '密码错误,登录失败!',
103
- 10429: '操作过频繁,请1小时后再试!',
97
+ 20102: "验证码错误,请检查!",
98
+ 20103: "验证码错误,请检查!",
99
+ 20104: "验证码错误,请检查!",
100
+ 20200: "账号错误,登录失败!",
101
+ 20204: "密码错误,登录失败!",
102
+ 10429: "操作过频繁,请1小时后再试!",
104
103
  };
105
104
 
106
105
  function validPhone(phoneNumber) {
107
106
  if (!phoneNumber) {
108
- Alert.alert('请输入手机号');
107
+ Alert.alert("请输入手机号");
109
108
  return false;
110
109
  }
111
110
  if (!/^[1][3,4,5,7,8,9][0-9]{9}$/.test(phoneNumber)) {
112
111
  // Alert.alert('请输入正确的手机号');
113
- global.toast.showToast('手机号无效,请检查!');
112
+ global.toast.showToast("手机号无效,请检查!");
114
113
  return false;
115
114
  }
116
115
  return true;
117
116
  }
118
- //
117
+ //
119
118
  function validUsername(name) {
120
- if (!name||name.length<3) {
121
- Alert.alert('请输入至少3位字符的账号');
119
+ if (!name || name.length < 3) {
120
+ Alert.alert("请输入至少3位字符的账号");
122
121
  return false;
123
- }
124
- if (!/^[0-9a-zA-Z_]+$/ig.test(name)) {
122
+ }
123
+ if (!/^[0-9a-zA-Z_]+$/gi.test(name)) {
125
124
  // Alert.alert('请输入正确的手机号');
126
- global.toast.showToast('账号只能包含数字,字母和下划线');
125
+ global.toast.showToast("账号只能包含数字,字母和下划线");
127
126
  return false;
128
127
  }
129
128
  return true;
@@ -142,12 +141,12 @@ const Index = ({route}) => {
142
141
  phone_number: phone,
143
142
  length: 4,
144
143
  type: 2, // type=2 表示绑定手机号
145
- access_token:userCountData.current.access_token
144
+ access_token: userCountData.current.access_token,
146
145
  },
147
- global.base.accountType,
148
- ).catch(err => {
146
+ global.base.accountType
147
+ ).catch((err) => {
149
148
  console.log(err);
150
- setSmsCodeRightBtnText('获取验证码');
149
+ setSmsCodeRightBtnText("获取验证码");
151
150
  setSmsCodeRightBtnDisabled(false);
152
151
  });
153
152
 
@@ -155,17 +154,17 @@ const Index = ({route}) => {
155
154
  setSmsId(res.result.sms_id);
156
155
 
157
156
  smsCodeTimer = setTimeout(() => {
158
- setSmsCodeRightBtnText('获取验证码');
157
+ setSmsCodeRightBtnText("获取验证码");
159
158
  setSmsCodeRightBtnDisabled(false);
160
159
  }, 120000);
161
160
  } else {
162
- setSmsCodeRightBtnText('获取验证码');
161
+ setSmsCodeRightBtnText("获取验证码");
163
162
  setSmsCodeRightBtnDisabled(false);
164
163
  }
165
164
  };
166
165
 
167
166
  const openProtocolDialog = () => {
168
- return new Promise(resolve => {
167
+ return new Promise((resolve) => {
169
168
  setProtocolDialogVisible(true);
170
169
  protocolAgreeResolve.current = resolve;
171
170
  }).then(() => {
@@ -173,106 +172,104 @@ const Index = ({route}) => {
173
172
  });
174
173
  };
175
174
 
176
- // 选择入口
177
- const selectEntrance = () => {
178
- return new Promise(resolve => {
179
- setEntranceSelectVisible(true);
180
- selectEntranceResolve = resolve;
175
+ // 选择入口
176
+ const selectEntrance = () => {
177
+ return new Promise((resolve) => {
178
+ setEntranceSelectVisible(true);
179
+ selectEntranceResolve = resolve;
180
+ });
181
+ };
182
+
183
+ const dealLoginInfo = async (ress, finallyAppID, callback) => {
184
+ await storage.set("accountType", activeType);
185
+ await storage.set("accessToken", ress.result.access_token);
186
+ await storage.set("refreshToken", ress.result.refresh_token);
187
+ if (ress.result.address && ress.result.address[0]) {
188
+ const addressList = ress.result.address.map((item) => {
189
+ return {
190
+ ...item,
191
+ room_list: null,
192
+ };
181
193
  });
182
- };
194
+ const defaultAddr = addressList[0];
195
+ console.log(defaultAddr.address_id, "defaultAddr.address_id");
196
+ await storage.set("activeAddr", defaultAddr);
197
+ await storage.set("addressList", addressList);
198
+ await updateHomedToken();
199
+ } else {
200
+ await storage.set("activeAddr", {});
201
+ await storage.set("addressList", []);
202
+ }
203
+ delete ress.result.address;
204
+ await storage.set("accountData", ress.result);
183
205
 
184
- const dealLoginInfo = async (ress,finallyAppID,callback) => {
185
- await storage.set('accountType', activeType);
186
- await storage.set('accessToken', ress.result.access_token);
187
- await storage.set('refreshToken', ress.result.refresh_token);
188
- if (ress.result.address && ress.result.address[0]) {
189
- const addressList = ress.result.address.map(item => {
190
- return {
191
- ...item,
192
- room_list: null,
193
- };
194
- });
195
- const defaultAddr = addressList[0];
196
- console.log(defaultAddr.address_id, 'defaultAddr.address_id');
197
- await storage.set('activeAddr', defaultAddr);
198
- await storage.set('addressList', addressList);
199
- await updateHomedToken();
200
- } else {
201
- await storage.set('activeAddr', {});
202
- await storage.set('addressList', []);
203
- }
204
- delete ress.result.address;
205
- await storage.set('accountData', ress.result);
206
-
207
- // 存储boss账号信息
206
+ // 存储boss账号信息
208
207
  if (ress.result?.user && ress.result?.user?.bind_list) {
209
- const bind_boss = ress.result?.user?.bind_list.filter(item => {
210
- return item.third_type === 'boss';
208
+ const bind_boss = ress.result?.user?.bind_list.filter((item) => {
209
+ return item.third_type === "boss";
211
210
  });
212
211
  if (bind_boss.length) {
213
- console.log(bind_boss[0], 'bind_boss[0]');
214
- await storage.set('bossData', bind_boss[0]);
212
+ console.log(bind_boss[0], "bind_boss[0]");
213
+ await storage.set("bossData", bind_boss[0]);
215
214
  }
216
215
  }
217
- // 进入标准版
216
+ // 进入标准版
218
217
  await storage.set(
219
- `${ress.result?.account?.account_id || ''}currentOperator`,
220
- {},
218
+ `${ress.result?.account?.account_id || ""}currentOperator`,
219
+ {}
221
220
  );
222
- // 初始化默认运营商对应的homed游客账号
223
- const envVersion =
224
- NativeModules?.RNToNativeEmitter?.serverCluster || 'dev';
225
- await initOperatorHomedTouristAccount({
226
- touristUsername: finallyAppID,
227
- domain: envVersion === 'dev' ? 'homed.me' : 'homed.tv',
228
- touristGroupId: envVersion === 'dev' ? 115017 : 4664, // 4664: tv集群的手机APP游客用户组. 115017: 运营集群手机APP游客用户组
229
- });
221
+ // 初始化默认运营商对应的homed游客账号
222
+ const envVersion = NativeModules?.RNToNativeEmitter?.serverCluster || "dev";
223
+ await initOperatorHomedTouristAccount({
224
+ touristUsername: finallyAppID,
225
+ domain: envVersion === "dev" ? "homed.me" : "homed.tv",
226
+ touristGroupId: envVersion === "dev" ? 115017 : 4664, // 4664: tv集群的手机APP游客用户组. 115017: 运营集群手机APP游客用户组
227
+ });
230
228
 
231
229
  // 判断是否已经选了运营商
232
230
  const currentOperator = await storage.get(
233
- `${ress.result?.account?.account_id || ''}currentOperator`,
231
+ `${ress.result?.account?.account_id || ""}currentOperator`
234
232
  );
235
233
  // 获取公寓token
236
- if (currentOperator?.name === '内蒙古广电网络') {
234
+ if (currentOperator?.name === "内蒙古广电网络") {
237
235
  const apartmentRes = await switchToken();
238
236
  if (apartmentRes?.code === 200 && apartmentRes?.token) {
239
- storage.set('apartmentToken', apartmentRes.token);
237
+ storage.set("apartmentToken", apartmentRes.token);
240
238
  // 公寓人员信息接口暂时还没,假设role:1为房东
241
- storage.set('apartmentData', {role: 1});
239
+ storage.set("apartmentData", { role: 1 });
242
240
  } else {
243
- storage.set('apartmentData', {});
244
- storage.set('apartmentToken', '');
241
+ storage.set("apartmentData", {});
242
+ storage.set("apartmentToken", "");
245
243
  }
246
244
  } else {
247
- storage.set('apartmentData', {});
248
- storage.set('apartmentToken', '');
245
+ storage.set("apartmentData", {});
246
+ storage.set("apartmentToken", "");
249
247
  }
250
- callback()
251
- }
248
+ callback();
249
+ };
252
250
 
253
251
  const handleLoginPress = () => {
254
252
  if (loginDisabled) {
255
253
  return;
256
254
  }
257
- if(step === 0&&!protocolAgree){
255
+ if (step === 0 && !protocolAgree) {
258
256
  openProtocolDialog().then(() => {
259
257
  handleLogin();
260
258
  });
261
- }else{
259
+ } else {
262
260
  handleLogin();
263
261
  }
264
262
  };
265
263
 
266
-
267
264
  const handleLogin = async () => {
268
265
  const appName =
269
266
  NativeModules?.RNToNativeEmitter?.appName || config.LOCALTEST_APP_NAME;
270
267
  // const appName = '遥控键码库';
271
- const {deviceModal} = NativeModules?.RNToNativeEmitter || {};
268
+ const { deviceModal } = NativeModules?.RNToNativeEmitter || {};
272
269
 
273
270
  const appID = await global.base.getAppId();
274
271
 
275
- console.log('appID', appID);
272
+ console.log("appID", appID);
276
273
 
277
274
  let finallyAppID = appID;
278
275
  if (!appID) {
@@ -285,7 +282,7 @@ await initOperatorHomedTouristAccount({
285
282
  return;
286
283
  }
287
284
  if (!userInputSmsCode) {
288
- global.toast.showToast('请输入短信验证码');
285
+ global.toast.showToast("请输入短信验证码");
289
286
  return;
290
287
  }
291
288
  if (!validPhone(phone)) {
@@ -294,10 +291,10 @@ await initOperatorHomedTouristAccount({
294
291
  const params = {
295
292
  sms_id: smsId,
296
293
  sms_code: userInputSmsCode,
297
- access_token:userCountData.current.access_token
294
+ access_token: userCountData.current.access_token,
298
295
  };
299
296
  const res = await authSmscode(params);
300
- console.log('res:'+res)
297
+ console.log("res:" + res);
301
298
  if (res.code === 0) {
302
299
  // console.log(res.result?.auth_code, 'res.result?.auth_code');
303
300
  // setAuthCode(res.result?.auth_code);
@@ -310,54 +307,55 @@ await initOperatorHomedTouristAccount({
310
307
  create_address: 1, // 注册时自动建默认家庭
311
308
  extend: {
312
309
  appid: finallyAppID,
313
- model: deviceModal || '开发测试',
314
- application: appName || '爱家宝',
315
- platform: 'phone',
316
- entry: 'app',
310
+ model: deviceModal || "开发测试",
311
+ application: appName || "爱家宝",
312
+ platform: "phone",
313
+ entry: "app",
317
314
  },
318
315
  };
319
316
  const ress = await accountLogin(params, activeType);
320
- if(ress.code === 0){
321
- dealLoginInfo(ress,finallyAppID,async ()=>{
322
- console.log('12333appName:'+appName)
323
- appReport('APP_STARTUP');
324
- if (appName === '禺乐慧家') {
317
+ if (ress.code === 0) {
318
+ dealLoginInfo(ress, finallyAppID, async () => {
319
+ console.log("12333appName:" + appName);
320
+ appReport("APP_STARTUP");
321
+ if (["禺乐慧家", "悦慧家"].includes(appName)) {
325
322
  let selectedOperator = {
326
- id: 'c492121bac734bb983814b67ceafcae9',
327
- name: '番禺区广电网络',
323
+ id: "c492121bac734bb983814b67ceafcae9",
324
+ name: "番禺区广电网络",
328
325
  };
329
- const accountData = await storage.get('accountData');
326
+ const accountData = await storage.get("accountData");
330
327
  await storage.set(
331
- `${accountData?.account?.account_id || ''}currentOperator`,
332
- selectedOperator,
328
+ `${accountData?.account?.account_id || ""}currentOperator`,
329
+ selectedOperator
333
330
  );
334
- console.log('to home')
335
- replace('Home', {
331
+ console.log("to home");
332
+ replace("Home", {
336
333
  redirect: false,
337
334
  });
338
- }else{
339
- replace('Home', {
335
+ } else {
336
+ replace("Home", {
340
337
  redirect: false,
341
338
  });
342
339
  }
343
- })
344
- }else{
345
- global.toast.showToast('登录失败:'+ress.message);
340
+ });
341
+ } else {
342
+ global.toast.showToast("登录失败:" + ress.message);
346
343
  }
347
344
  } else {
348
- const message = errorCodeMap[res.code] || res.message || '校验验证码失败!';
345
+ const message =
346
+ errorCodeMap[res.code] || res.message || "校验验证码失败!";
349
347
  global.toast.showToast(message);
350
348
  }
351
349
  } else {
352
- if(!validUsername(username)){
353
- return
350
+ if (!validUsername(username)) {
351
+ return;
354
352
  }
355
353
  if (!password) {
356
- Alert.alert('请输入密码');
354
+ Alert.alert("请输入密码");
357
355
  return;
358
356
  }
359
-
360
- global.loading.showLoading('');
357
+
358
+ global.loading.showLoading("");
361
359
  let params = {
362
360
  account_name: username,
363
361
  password: CryptoJS.MD5(password).toString(),
@@ -366,55 +364,70 @@ await initOperatorHomedTouristAccount({
366
364
  create_address: 1, // 注册时自动建默认家庭
367
365
  extend: {
368
366
  appid: finallyAppID,
369
- model: deviceModal || '开发测试',
370
- application: appName || '爱家宝',
371
- platform: 'phone',
372
- entry: 'app',
367
+ model: deviceModal || "开发测试",
368
+ application: appName || "爱家宝",
369
+ platform: "phone",
370
+ entry: "app",
373
371
  },
374
- sign:CryptoJS.MD5(username+CryptoJS.MD5(password).toString()+"a912371c1d5b4ab0b2630f1553865dc6"+"59de0aff71c844f9b6b132044cecd1da"+ "#register").toString()
372
+ sign: CryptoJS.MD5(
373
+ username +
374
+ CryptoJS.MD5(password).toString() +
375
+ "a912371c1d5b4ab0b2630f1553865dc6" +
376
+ "59de0aff71c844f9b6b132044cecd1da" +
377
+ "#register"
378
+ ).toString(),
375
379
  };
376
380
  const res = await accountRegiste(params);
377
- if (res.code===0&&res?.result?.account && res?.result?.account?.account_name) {//注册成功,调用登录接口
378
- // setStep(1);
379
- userCountData.current = res?.result
380
-
381
- let params = {
382
- account_name: username,
383
- password: CryptoJS.MD5(password).toString(),
384
- create_address: 1, // 注册时自动建默认家庭
385
- extend: {
386
- appid: finallyAppID,
387
- model: deviceModal || '开发测试',
388
- application: appName || '爱家宝',
389
- platform: 'phone',
390
- entry: 'app',
391
- },
392
- };
393
- const ress = await accountLogin(params, activeType);
394
- console.log(ress, 'login');
395
- if (ress.code === 0) {
396
- dealLoginInfo(ress,finallyAppID,()=>{setStep(1)})
397
- }else{
398
- global.toast.showToast('登录失败:'+ress.code)
381
+ if (
382
+ res.code === 0 &&
383
+ res?.result?.account &&
384
+ res?.result?.account?.account_name
385
+ ) {
386
+ //注册成功,调用登录接口
387
+ // setStep(1);
388
+ userCountData.current = res?.result;
389
+
390
+ let params = {
391
+ account_name: username,
392
+ password: CryptoJS.MD5(password).toString(),
393
+ create_address: 1, // 注册时自动建默认家庭
394
+ extend: {
395
+ appid: finallyAppID,
396
+ model: deviceModal || "开发测试",
397
+ application: appName || "爱家宝",
398
+ platform: "phone",
399
+ entry: "app",
400
+ },
401
+ };
402
+ const ress = await accountLogin(params, activeType);
403
+ console.log(ress, "login");
404
+ if (ress.code === 0) {
405
+ dealLoginInfo(ress, finallyAppID, () => {
406
+ setStep(1);
407
+ });
408
+ } else {
409
+ global.toast.showToast("登录失败:" + ress.code);
399
410
  }
400
- }else{
401
- global.toast.showToast(res.code===20207?'该账号已被使用,请重新输入账号':res.message);
411
+ } else {
412
+ global.toast.showToast(
413
+ res.code === 20207 ? "该账号已被使用,请重新输入账号" : res.message
414
+ );
402
415
  }
403
- global.loading.hideLoading()
416
+ global.loading.hideLoading();
404
417
  }
405
418
  };
406
419
 
407
420
  useEffect(() => {
408
421
  if (phone.length === 11 && smsCodeResendTimes === 0) {
409
422
  setSmsCodeRightBtnDisabled(false);
410
- setSmsCodeRightBtnText('获取验证码');
423
+ setSmsCodeRightBtnText("获取验证码");
411
424
  } else {
412
425
  setSmsCodeRightBtnDisabled(true);
413
426
  }
414
427
  }, [phone, smsCodeResendTimes]);
415
428
  useEffect(() => {
416
429
  if (smsCodeResendTimes > 0) {
417
- console.log(smsCodeResendTimes, 'smsCodeResendTimes');
430
+ console.log(smsCodeResendTimes, "smsCodeResendTimes");
418
431
  setSmsCodeRightBtnText(`${smsCodeResendTimes}s后重发`);
419
432
  timers.current = setTimeout(() => {
420
433
  setSmsCodeResendTimes(smsCodeResendTimes - 1);
@@ -425,33 +438,33 @@ await initOperatorHomedTouristAccount({
425
438
  };
426
439
  }, [smsCodeResendTimes]);
427
440
 
428
- const handleSetProtocolAgree = isAgree => {
441
+ const handleSetProtocolAgree = (isAgree) => {
429
442
  setProtocolAgree(isAgree);
430
443
  setServiceAgree(isAgree);
431
444
  setPrivacyAgree(isAgree);
432
445
  };
433
- const handleViewUserAgreementByType = type => {
434
- if (type === 'service') {
446
+ const handleViewUserAgreementByType = (type) => {
447
+ if (type === "service") {
435
448
  setServiceDialogVisible(true);
436
- } else if (type === 'privacy') {
449
+ } else if (type === "privacy") {
437
450
  setPrivacyDialogVisible(true);
438
451
  }
439
452
  };
440
- const handleOneDisagree = async type => {
453
+ const handleOneDisagree = async (type) => {
441
454
  setProtocolAgree(false);
442
- if (type === 'service') {
455
+ if (type === "service") {
443
456
  setServiceAgree(false);
444
457
  setServiceDialogVisible(false);
445
- } else if (type === 'privacy') {
458
+ } else if (type === "privacy") {
446
459
  setPrivacyAgree(false);
447
460
  setPrivacyDialogVisible(false);
448
461
  }
449
462
  };
450
- const handleOneAgree = type => {
451
- if (type === 'service') {
463
+ const handleOneAgree = (type) => {
464
+ if (type === "service") {
452
465
  setServiceAgree(true);
453
466
  setServiceDialogVisible(false);
454
- } else if (type === 'privacy') {
467
+ } else if (type === "privacy") {
455
468
  setPrivacyAgree(true);
456
469
  setPrivacyDialogVisible(false);
457
470
  }
@@ -461,15 +474,15 @@ await initOperatorHomedTouristAccount({
461
474
  };
462
475
 
463
476
  const handleViewUserAgreement = () => {
464
- navigation.navigate('WebviewScreen', {
465
- title: '用户协议',
466
- url: 'https://ipanelcloud2.ipanel.cn:50443/iapp/ajbstatic/service_agreement/user_agreement.html',
477
+ navigation.navigate("WebviewScreen", {
478
+ title: "用户协议",
479
+ url: "https://ipanelcloud2.ipanel.cn:50443/iapp/ajbstatic/service_agreement/user_agreement.html",
467
480
  });
468
481
  };
469
482
  const handleViewPrivacyClause = () => {
470
- navigation.navigate('WebviewScreen', {
471
- title: '隐私条款',
472
- url: 'https://ipanelcloud2.ipanel.cn:50443/iapp/ajbstatic/service_agreement/privacy_policy.html',
483
+ navigation.navigate("WebviewScreen", {
484
+ title: "隐私条款",
485
+ url: "https://ipanelcloud2.ipanel.cn:50443/iapp/ajbstatic/service_agreement/privacy_policy.html",
473
486
  });
474
487
  };
475
488
 
@@ -481,29 +494,30 @@ await initOperatorHomedTouristAccount({
481
494
  };
482
495
  const handleUserAgree = () => {
483
496
  setProtocolAgree(true);
484
- typeof protocolAgreeResolve.current === 'function' && protocolAgreeResolve.current();
497
+ typeof protocolAgreeResolve.current === "function" &&
498
+ protocolAgreeResolve.current();
485
499
  protocolAgreeResolve.current = null;
486
500
  };
487
501
  const handleBackPress = () => {
488
- if(step === 1){
489
- appReport('APP_STARTUP');
490
- replace('Home', {
502
+ if (step === 1) {
503
+ appReport("APP_STARTUP");
504
+ replace("Home", {
491
505
  redirect: false,
492
506
  });
493
- }else{
494
- goBack()
507
+ } else {
508
+ goBack();
495
509
  }
496
- }
497
- useEffect(()=>{
510
+ };
511
+ useEffect(() => {
498
512
  return () => {
499
- if(step === 1){
500
- appReport('APP_STARTUP');
501
- replace('Home', {
502
- redirect: false,
503
- });
504
- }
505
- }
506
- },[])
513
+ if (step === 1) {
514
+ appReport("APP_STARTUP");
515
+ replace("Home", {
516
+ redirect: false,
517
+ });
518
+ }
519
+ };
520
+ }, []);
507
521
  useEffect(() => {
508
522
  if (serviceAgree && privacyAgree) {
509
523
  setProtocolAgree(true);
@@ -514,7 +528,7 @@ await initOperatorHomedTouristAccount({
514
528
 
515
529
  return (
516
530
  <View style={styles.container}>
517
- <ScreenBackHeader title="注册" onBackPress={handleBackPress}/>
531
+ <ScreenBackHeader title="注册" onBackPress={handleBackPress} />
518
532
  <Divider width={px(12)} color="#F5F5F5" />
519
533
  <View style={styles.stepContainer}>
520
534
  {step === 0 ? (
@@ -523,8 +537,9 @@ await initOperatorHomedTouristAccount({
523
537
  <View
524
538
  style={[
525
539
  styles.inputBox,
526
- {marginTop: px(40), marginBottom: px(75)},
527
- ]}>
540
+ { marginTop: px(40), marginBottom: px(75) },
541
+ ]}
542
+ >
528
543
  <Text style={styles.inputTitle}>账号</Text>
529
544
  <View style={styles.inputDivider} />
530
545
  <TextInput
@@ -532,7 +547,7 @@ await initOperatorHomedTouristAccount({
532
547
  placeholder="请输入您的账号"
533
548
  placeholderTextColor="#A6A6A6"
534
549
  value={username}
535
- onChangeText={text => {
550
+ onChangeText={(text) => {
536
551
  // console.log(text);
537
552
  setUsername(text);
538
553
  }}
@@ -547,27 +562,28 @@ await initOperatorHomedTouristAccount({
547
562
  placeholder="请输入密码"
548
563
  placeholderTextColor="#A6A6A6"
549
564
  value={password}
550
-
551
- onChangeText={text => setPassword(text)}
565
+ onChangeText={(text) => setPassword(text)}
552
566
  returnKeyType="done"
553
567
  />
554
568
  </View>
555
569
  <TouchableOpacity
556
570
  activeOpacity={0.7}
557
571
  onPress={handleLoginPress}
558
- disabled={loginDisabled}>
572
+ disabled={loginDisabled}
573
+ >
559
574
  <View style={styles.loginBtnBox}>
560
575
  <View
561
576
  style={[
562
577
  styles.loginBtn,
563
578
  loginDisabled ? styles.disabledBtn : null,
564
- ]}>
579
+ ]}
580
+ >
565
581
  <Text style={[styles.loginBtnText]}>下一步</Text>
566
582
  </View>
567
583
  </View>
568
584
  </TouchableOpacity>
569
- {appName !== '遥控键码库' && (
570
- <View style={{marginTop: px(40), width: '100%'}}>
585
+ {appName !== "遥控键码库" && (
586
+ <View style={{ marginTop: px(40), width: "100%" }}>
571
587
  <View style={styles.protocol}>
572
588
  <CheckBox
573
589
  center
@@ -575,7 +591,7 @@ await initOperatorHomedTouristAccount({
575
591
  containerStyle={{
576
592
  margin: 0,
577
593
  padding: 0,
578
- backgroundColor: 'transparent',
594
+ backgroundColor: "transparent",
579
595
  }}
580
596
  onPress={() => handleSetProtocolAgree(!protocolAgree)}
581
597
  checkedIcon={
@@ -596,35 +612,36 @@ await initOperatorHomedTouristAccount({
596
612
  }
597
613
  />
598
614
  <TouchableWithoutFeedback
599
- onPress={() => setProtocolAgree(!protocolAgree)}>
615
+ onPress={() => setProtocolAgree(!protocolAgree)}
616
+ >
600
617
  <Text style={styles.protocolText}>
601
618
  已阅读并同意
602
619
  <TouchableWithoutFeedback
603
- style={{paddingVertical: px(150)}}
604
- onPress={() =>
605
- handleViewUserAgreementByType('service')
606
- }>
620
+ style={{ paddingVertical: px(150) }}
621
+ onPress={() => handleViewUserAgreementByType("service")}
622
+ >
607
623
  <Text
608
624
  style={
609
625
  protocolAgree || serviceAgree
610
626
  ? styles.protocolLinkAgree
611
627
  : styles.protocolLink
612
- }>
628
+ }
629
+ >
613
630
  《服务条款》
614
631
  </Text>
615
632
  </TouchableWithoutFeedback>
616
633
  与
617
634
  <TouchableWithoutFeedback
618
- style={{paddingVertical: px(150)}}
619
- onPress={() =>
620
- handleViewUserAgreementByType('privacy')
621
- }>
635
+ style={{ paddingVertical: px(150) }}
636
+ onPress={() => handleViewUserAgreementByType("privacy")}
637
+ >
622
638
  <Text
623
639
  style={
624
640
  protocolAgree || privacyAgree
625
641
  ? styles.protocolLinkAgree
626
642
  : styles.protocolLink
627
- }>
643
+ }
644
+ >
628
645
  《隐私权政策》
629
646
  </Text>
630
647
  </TouchableWithoutFeedback>
@@ -637,7 +654,7 @@ await initOperatorHomedTouristAccount({
637
654
  ) : (
638
655
  <>
639
656
  <Text style={styles.title}>请输入账号绑定的手机号码</Text>
640
- <View style={[styles.inputBox, {marginBottom: px(75)}]}>
657
+ <View style={[styles.inputBox, { marginBottom: px(75) }]}>
641
658
  <Text style={styles.inputTitle}>+86</Text>
642
659
  <View style={styles.inputDivider} />
643
660
  <TextInput
@@ -646,7 +663,7 @@ await initOperatorHomedTouristAccount({
646
663
  value={phone}
647
664
  placeholder="请输入您的手机号"
648
665
  placeholderTextColor="#A6A6A6"
649
- onChangeText={text => setPhone(text)}
666
+ onChangeText={(text) => setPhone(text)}
650
667
  returnKeyType="done"
651
668
  maxLength={11}
652
669
  />
@@ -657,20 +674,22 @@ await initOperatorHomedTouristAccount({
657
674
  placeholder="请输入验证码"
658
675
  rightBtnDisabled={smsCodeRightBtnDisabled}
659
676
  rightBtnText={smsCodeRightBtnText}
660
- onChangeText={text => setUserInputSmsCode(text)}
677
+ onChangeText={(text) => setUserInputSmsCode(text)}
661
678
  onRightBtnPress={handleGetSmsId}
662
679
  />
663
680
  </View>
664
681
  <TouchableOpacity
665
682
  activeOpacity={0.7}
666
683
  onPress={handleLoginPress}
667
- disabled={loginDisabled}>
684
+ disabled={loginDisabled}
685
+ >
668
686
  <View style={styles.loginBtnBox}>
669
687
  <View
670
688
  style={[
671
689
  styles.loginBtn,
672
690
  loginDisabled ? styles.disabledBtn : null,
673
- ]}>
691
+ ]}
692
+ >
674
693
  <Text style={[styles.loginBtnText]}>完成</Text>
675
694
  </View>
676
695
  </View>
@@ -678,206 +697,213 @@ await initOperatorHomedTouristAccount({
678
697
  </>
679
698
  )}
680
699
  </View>
681
- {serviceDialogVisible && (
682
- <ProtocolType
683
- handleOneDisagree={handleOneDisagree}
684
- handleOneAgree={handleOneAgree}
685
- dialogTitle="用户协议"
686
- url="https://ipanelcloud2.ipanel.cn:50443/iapp/ajbstatic/service_agreement/user_agreement.html"
687
- type="service"
700
+ {serviceDialogVisible && (
701
+ <ProtocolType
702
+ handleOneDisagree={handleOneDisagree}
703
+ handleOneAgree={handleOneAgree}
704
+ dialogTitle="用户协议"
705
+ url="https://ipanelcloud2.ipanel.cn:50443/iapp/ajbstatic/service_agreement/user_agreement.html"
706
+ type="service"
707
+ />
708
+ )}
709
+ {privacyDialogVisible && (
710
+ <ProtocolType
711
+ handleOneDisagree={handleOneDisagree}
712
+ handleOneAgree={handleOneAgree}
713
+ dialogTitle="隐私保护提示"
714
+ url="https://ipanelcloud2.ipanel.cn:50443/iapp/ajbstatic/service_agreement/privacy_policy.html"
715
+ type="privacy"
716
+ />
717
+ )}
718
+
719
+ {/* 选择方式 */}
720
+ {entranceSelectVisible && (
721
+ <View
722
+ style={{
723
+ ...styles.entranceSelect,
724
+ paddingTop:
725
+ (Platform.OS === "ios" ? insets.top : 0) +
726
+ StatusBar.currentHeight,
727
+ }}
728
+ >
729
+ <View
730
+ style={{
731
+ paddingTop: px(36),
732
+ paddingBottom: px(33),
733
+ marginBottom: px(38),
734
+ }}
735
+ >
736
+ <Text
737
+ style={{
738
+ fontSize: px(55),
739
+ color: "#333",
740
+ fontWeight: "bold",
741
+ textAlign: "center",
742
+ }}
743
+ >
744
+ 请选择功能
745
+ </Text>
746
+ </View>
747
+ <TouchableOpacity
748
+ style={{
749
+ ...styles.entranceSelectItem,
750
+ backgroundColor: "#F4F9F8",
751
+ }}
752
+ onPress={() => {
753
+ selectEntranceResolve && selectEntranceResolve("szjt");
754
+ selectEntranceResolve = null;
755
+ }}
756
+ >
757
+ <Image
758
+ style={{
759
+ width: px(104),
760
+ height: px(104),
761
+ }}
762
+ resizeMode="contain"
763
+ source={require("../../assets/img/szjt.png")}
688
764
  />
689
- )}
690
- {privacyDialogVisible && (
691
- <ProtocolType
692
- handleOneDisagree={handleOneDisagree}
693
- handleOneAgree={handleOneAgree}
694
- dialogTitle="隐私保护提示"
695
- url="https://ipanelcloud2.ipanel.cn:50443/iapp/ajbstatic/service_agreement/privacy_policy.html"
696
- type="privacy"
765
+ <Text
766
+ style={{
767
+ ...styles.entranceSelectText,
768
+ color: "#62C0B6",
769
+ }}
770
+ >
771
+ 数字家庭
772
+ </Text>
773
+ </TouchableOpacity>
774
+ <TouchableOpacity
775
+ style={{
776
+ ...styles.entranceSelectItem,
777
+ backgroundColor: "#F2FAFF",
778
+ }}
779
+ onPress={() => {
780
+ selectEntranceResolve && selectEntranceResolve("tyygq");
781
+ selectEntranceResolve = null;
782
+ }}
783
+ >
784
+ <Image
785
+ style={{
786
+ width: px(104),
787
+ height: px(104),
788
+ }}
789
+ resizeMode="contain"
790
+ source={require("../../assets/img/tykz.png")}
697
791
  />
698
- )}
792
+ <Text
793
+ style={{
794
+ ...styles.entranceSelectText,
795
+ color: "#599FF1",
796
+ }}
797
+ >
798
+ 遥控键码下载
799
+ </Text>
800
+ </TouchableOpacity>
801
+ </View>
802
+ )}
699
803
 
700
- {/* 选择方式 */}
701
- {entranceSelectVisible && (
702
- <View
703
- style={{
704
- ...styles.entranceSelect,
705
- paddingTop:
706
- (Platform.OS === 'ios' ? insets.top : 0) +
707
- StatusBar.currentHeight,
708
- }}>
709
- <View
710
- style={{
711
- paddingTop: px(36),
712
- paddingBottom: px(33),
713
- marginBottom: px(38),
714
- }}>
715
- <Text
716
- style={{
717
- fontSize: px(55),
718
- color: '#333',
719
- fontWeight: 'bold',
720
- textAlign: 'center',
721
- }}>
722
- 请选择功能
804
+ {protocolDialogVisible && appName !== "遥控键码库" && (
805
+ <View style={styles.agreementMask}>
806
+ <View style={styles.agreementConfirmContent}>
807
+ <View style={styles.agreementConfirmHead}>
808
+ <Text style={styles.agreementConfirmTitle}>欢迎使用爱家宝</Text>
809
+ </View>
810
+ <View style={{ flex: 1 }}>
811
+ <ScrollView showsVerticalScrollIndicator={false}>
812
+ <View>
813
+ <Text style={styles.agreementConfirmText}>
814
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了更好的保障您的合法权益,请您阅读并同意
815
+ <TouchableWithoutFeedback
816
+ onPress={handleViewUserAgreement}
817
+ style={{ paddingVertical: px(100) }}
818
+ >
819
+ <Text style={styles.agreementConfirmImportantText}>
820
+ 用户协议
723
821
  </Text>
724
- </View>
725
- <TouchableOpacity
726
- style={{
727
- ...styles.entranceSelectItem,
728
- backgroundColor: '#F4F9F8',
729
- }}
730
- onPress={() => {
731
- selectEntranceResolve && selectEntranceResolve('szjt');
732
- selectEntranceResolve = null;
733
- }}>
734
- <Image
735
- style={{
736
- width: px(104),
737
- height: px(104),
738
- }}
739
- resizeMode="contain"
740
- source={require('../../assets/img/szjt.png')}
741
- />
742
- <Text
743
- style={{
744
- ...styles.entranceSelectText,
745
- color: '#62C0B6',
746
- }}>
747
- 数字家庭
822
+ </TouchableWithoutFeedback>
823
+ 和
824
+ <TouchableWithoutFeedback onPress={handleViewPrivacyClause}>
825
+ <Text style={styles.agreementConfirmImportantText}>
826
+ 隐私条款
748
827
  </Text>
749
- </TouchableOpacity>
750
- <TouchableOpacity
751
- style={{
752
- ...styles.entranceSelectItem,
753
- backgroundColor: '#F2FAFF',
754
- }}
755
- onPress={() => {
756
- selectEntranceResolve && selectEntranceResolve('tyygq');
757
- selectEntranceResolve = null;
758
- }}>
759
- <Image
760
- style={{
761
- width: px(104),
762
- height: px(104),
763
- }}
764
- resizeMode="contain"
765
- source={require('../../assets/img/tykz.png')}
766
- />
767
- <Text
768
- style={{
769
- ...styles.entranceSelectText,
770
- color: '#599FF1',
771
- }}>
772
- 遥控键码下载
773
- </Text>
774
- </TouchableOpacity>
775
- </View>
776
- )}
777
-
778
- {protocolDialogVisible && appName !== '遥控键码库' && (
779
- <View style={styles.agreementMask}>
780
- <View style={styles.agreementConfirmContent}>
781
- <View style={styles.agreementConfirmHead}>
782
- <Text style={styles.agreementConfirmTitle}>
783
- 欢迎使用爱家宝
828
+ </TouchableWithoutFeedback>
829
+ 。为向您提供更优质的服务,我们可能会向您申请下列相关权限:
784
830
  </Text>
785
831
  </View>
786
- <View style={{flex: 1}}>
787
- <ScrollView showsVerticalScrollIndicator={false}>
788
- <View>
789
- <Text style={styles.agreementConfirmText}>
790
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了更好的保障您的合法权益,请您阅读并同意
791
- <TouchableWithoutFeedback
792
- onPress={handleViewUserAgreement}
793
- style={{paddingVertical: px(100)}}>
794
- <Text style={styles.agreementConfirmImportantText}>
795
- 用户协议
796
- </Text>
797
- </TouchableWithoutFeedback>
798
- 和
799
- <TouchableWithoutFeedback
800
- onPress={handleViewPrivacyClause}>
801
- <Text style={styles.agreementConfirmImportantText}>
802
- 隐私条款
803
- </Text>
804
- </TouchableWithoutFeedback>
805
- 。为向您提供更优质的服务,我们可能会向您申请下列相关权限:
806
- </Text>
807
- </View>
808
- <View>
809
- <Text style={styles.agreementConfirmText}>
810
- 1. 读写设备存储权限(Android
811
- 版本):用于用于用户反馈、客服等功能中读写设备上的照片及文件;
812
- </Text>
813
- </View>
814
- <View>
815
- <Text style={styles.agreementConfirmText}>
816
- 2. 地理位置权限(Android、iOS
817
- 版本):用于家庭位置管理、判断地区提供天气服务、发现附近智能设备;
818
- </Text>
819
- </View>
820
- <View>
821
- <Text style={styles.agreementConfirmText}>
822
- 3. 相机权限(Android、iOS
823
- 版本):用于扫码绑定电视账户、扫码进行设备添加等功能;
824
- </Text>
825
- </View>
826
- <View>
827
- <Text style={styles.agreementConfirmText}>
828
- 4. 相册权限(Android、ios
829
- 版本):用于用户反馈等功能中读写设备上的照片及视频;
830
- </Text>
831
- </View>
832
- <View>
833
- <Text style={styles.agreementConfirmText}>
834
- 5. 麦克风权限(Android、ioS 版本):智能客服等功能;
835
- </Text>
836
- </View>
837
- <View>
838
- <Text style={styles.agreementConfirmText}>
839
- 6. 读取电话联系人权限(Android):用于电视通讯功能;
840
- </Text>
841
- </View>
842
- <View>
843
- <Text style={styles.agreementConfirmText}>
844
- 7. 开启蓝牙权限(Android、ios
845
- 版本):用于连接设备时连接设备发出的蓝牙信号,以进行设备通信,对于通过蓝牙连接的智能设备,也需要蓝牙权限用于通信;
846
- </Text>
847
- </View>
848
- <View>
849
- <Text style={styles.agreementConfirmText}>
850
- 8. 开启蓝牙权限(Android、ios
851
- 版本):用于连接设备时连接设备发出的蓝牙信号,以进行设备通信,对于通过蓝牙连接的智能设备,也需要蓝牙权限用于通信;
852
- </Text>
853
- </View>
854
- <View>
855
- <Text style={styles.agreementConfirmText}>
856
- 7. 开启蓝牙权限(Android、ios
857
- 版本):用于连接设备时连接设备发出的蓝牙信号,以进行设备通信,对于通过蓝牙连接的智能设备,也需要蓝牙权限用于通信;
858
- </Text>
859
- </View>
860
- </ScrollView>
832
+ <View>
833
+ <Text style={styles.agreementConfirmText}>
834
+ 1. 读写设备存储权限(Android
835
+ 版本):用于用于用户反馈、客服等功能中读写设备上的照片及文件;
836
+ </Text>
861
837
  </View>
862
- <Divider color="#eee" width={1} />
863
- <View style={styles.agreementButtons}>
864
- <TouchableOpacity
865
- style={styles.disagreeBtn}
866
- activeOpacity={0.7}
867
- onPress={handleUserDisagree}>
868
- <Text style={styles.disagreeBtnText}>不同意</Text>
869
- </TouchableOpacity>
870
- <Divider color="#eee" width={1} orientation="vertical" />
871
- <TouchableOpacity
872
- style={styles.agreeBtn}
873
- activeOpacity={0.7}
874
- onPress={handleUserAgree}>
875
- <Text style={styles.agreeBtnText}>同意</Text>
876
- </TouchableOpacity>
838
+ <View>
839
+ <Text style={styles.agreementConfirmText}>
840
+ 2. 地理位置权限(Android、iOS
841
+ 版本):用于家庭位置管理、判断地区提供天气服务、发现附近智能设备;
842
+ </Text>
877
843
  </View>
878
- </View>
844
+ <View>
845
+ <Text style={styles.agreementConfirmText}>
846
+ 3. 相机权限(Android、iOS
847
+ 版本):用于扫码绑定电视账户、扫码进行设备添加等功能;
848
+ </Text>
849
+ </View>
850
+ <View>
851
+ <Text style={styles.agreementConfirmText}>
852
+ 4. 相册权限(Android、ios
853
+ 版本):用于用户反馈等功能中读写设备上的照片及视频;
854
+ </Text>
855
+ </View>
856
+ <View>
857
+ <Text style={styles.agreementConfirmText}>
858
+ 5. 麦克风权限(Android、ioS 版本):智能客服等功能;
859
+ </Text>
860
+ </View>
861
+ <View>
862
+ <Text style={styles.agreementConfirmText}>
863
+ 6. 读取电话联系人权限(Android):用于电视通讯功能;
864
+ </Text>
865
+ </View>
866
+ <View>
867
+ <Text style={styles.agreementConfirmText}>
868
+ 7. 开启蓝牙权限(Android、ios
869
+ 版本):用于连接设备时连接设备发出的蓝牙信号,以进行设备通信,对于通过蓝牙连接的智能设备,也需要蓝牙权限用于通信;
870
+ </Text>
871
+ </View>
872
+ <View>
873
+ <Text style={styles.agreementConfirmText}>
874
+ 8. 开启蓝牙权限(Android、ios
875
+ 版本):用于连接设备时连接设备发出的蓝牙信号,以进行设备通信,对于通过蓝牙连接的智能设备,也需要蓝牙权限用于通信;
876
+ </Text>
877
+ </View>
878
+ <View>
879
+ <Text style={styles.agreementConfirmText}>
880
+ 7. 开启蓝牙权限(Android、ios
881
+ 版本):用于连接设备时连接设备发出的蓝牙信号,以进行设备通信,对于通过蓝牙连接的智能设备,也需要蓝牙权限用于通信;
882
+ </Text>
883
+ </View>
884
+ </ScrollView>
885
+ </View>
886
+ <Divider color="#eee" width={1} />
887
+ <View style={styles.agreementButtons}>
888
+ <TouchableOpacity
889
+ style={styles.disagreeBtn}
890
+ activeOpacity={0.7}
891
+ onPress={handleUserDisagree}
892
+ >
893
+ <Text style={styles.disagreeBtnText}>不同意</Text>
894
+ </TouchableOpacity>
895
+ <Divider color="#eee" width={1} orientation="vertical" />
896
+ <TouchableOpacity
897
+ style={styles.agreeBtn}
898
+ activeOpacity={0.7}
899
+ onPress={handleUserAgree}
900
+ >
901
+ <Text style={styles.agreeBtnText}>同意</Text>
902
+ </TouchableOpacity>
879
903
  </View>
880
- )}
904
+ </View>
905
+ </View>
906
+ )}
881
907
  </View>
882
908
  );
883
909
  };
@@ -885,20 +911,20 @@ await initOperatorHomedTouristAccount({
885
911
  const styles = StyleSheet.create({
886
912
  container: {
887
913
  flex: 1,
888
- backgroundColor: '#fff',
889
- flexDirection: 'column',
914
+ backgroundColor: "#fff",
915
+ flexDirection: "column",
890
916
  },
891
917
  inputBox: {
892
918
  marginHorizontal: px(115),
893
- flexDirection: 'row',
894
- alignItems: 'center',
919
+ flexDirection: "row",
920
+ alignItems: "center",
895
921
  borderBottomWidth: px(2),
896
922
  // marginVertical: 10,
897
- borderBottomColor: '#E8E8E8',
923
+ borderBottomColor: "#E8E8E8",
898
924
  height: px(100),
899
925
  },
900
926
  inputView: {
901
- backgroundColor: '#fff',
927
+ backgroundColor: "#fff",
902
928
  borderRadius: px(22),
903
929
  flex: 1,
904
930
  marginTop: px(-50),
@@ -906,85 +932,85 @@ const styles = StyleSheet.create({
906
932
  inputDivider: {
907
933
  width: px(3),
908
934
  height: px(37),
909
- backgroundColor: '#eee',
935
+ backgroundColor: "#eee",
910
936
  marginHorizontal: px(22),
911
937
  },
912
938
  inputTitle: {
913
- color: '#333',
939
+ color: "#333",
914
940
  fontSize: px(40),
915
- fontWeight: '400',
941
+ fontWeight: "400",
916
942
  },
917
943
  input: {
918
944
  height: 50,
919
945
  flex: 1,
920
- color: '#000',
946
+ color: "#000",
921
947
  },
922
948
  loginBtnBox: {
923
- flexDirection: 'row',
924
- alignItems: 'center',
949
+ flexDirection: "row",
950
+ alignItems: "center",
925
951
  marginTop: px(144),
926
952
  },
927
953
  loginBtn: {
928
954
  marginHorizontal: px(115),
929
955
  borderRadius: px(23),
930
- backgroundColor: '#E86003',
956
+ backgroundColor: "#E86003",
931
957
  flex: 1,
932
958
  height: px(132),
933
- alignItems: 'center',
934
- justifyContent: 'center',
959
+ alignItems: "center",
960
+ justifyContent: "center",
935
961
  },
936
962
  loginBtnText: {
937
- color: '#fff',
963
+ color: "#fff",
938
964
  fontSize: px(52),
939
- fontWeight: '600',
965
+ fontWeight: "600",
940
966
  },
941
967
  title: {
942
- fontWeight: 'bold',
968
+ fontWeight: "bold",
943
969
  fontSize: px(46),
944
- color: '#333',
970
+ color: "#333",
945
971
  marginTop: px(46),
946
972
  marginHorizontal: px(115),
947
973
  marginBottom: px(153),
948
974
  },
949
975
  disabledBtn: {
950
- backgroundColor: '#CFCFCF',
976
+ backgroundColor: "#CFCFCF",
951
977
  },
952
978
  marginCommon: {
953
979
  marginHorizontal: px(115),
954
980
  },
955
981
 
956
982
  protocol: {
957
- flexDirection: 'row',
958
- justifyContent: 'center',
959
- alignItems: 'center',
983
+ flexDirection: "row",
984
+ justifyContent: "center",
985
+ alignItems: "center",
960
986
  },
961
987
  protocolText: {
962
- color: '#A6A6A6',
988
+ color: "#A6A6A6",
963
989
  fontSize: px(35),
964
990
  },
965
991
  protocolLink: {
966
- color: 'rgba(234, 96, 0, 1)',
992
+ color: "rgba(234, 96, 0, 1)",
967
993
  },
968
994
  protocolLinkAgree: {
969
- color: '#0EC12C',
995
+ color: "#0EC12C",
970
996
  },
971
997
 
972
998
  agreementMask: {
973
- position: 'absolute',
999
+ position: "absolute",
974
1000
  left: 0,
975
1001
  top: 0,
976
1002
  bottom: 0,
977
1003
  right: 0,
978
1004
  zIndex: 2,
979
- backgroundColor: 'rgba(0,0,0,0.7)',
1005
+ backgroundColor: "rgba(0,0,0,0.7)",
980
1006
  },
981
1007
  agreementConfirmContent: {
982
- position: 'absolute',
1008
+ position: "absolute",
983
1009
  height: 400,
984
1010
  left: px(75),
985
1011
  right: px(75),
986
- top: Dimensions.get('window').height / 2 - 200,
987
- backgroundColor: '#fff',
1012
+ top: Dimensions.get("window").height / 2 - 200,
1013
+ backgroundColor: "#fff",
988
1014
  paddingBottom: 0,
989
1015
  borderRadius: px(29),
990
1016
  },
@@ -993,7 +1019,7 @@ const styles = StyleSheet.create({
993
1019
  marginBottom: px(29),
994
1020
  },
995
1021
  headerLeft: {
996
- position: 'absolute',
1022
+ position: "absolute",
997
1023
  top: 15,
998
1024
  left: 10,
999
1025
  zIndex: 2,
@@ -1004,7 +1030,7 @@ const styles = StyleSheet.create({
1004
1030
  },
1005
1031
  agreementConfirmTitleBox: {
1006
1032
  // flex: 1,
1007
- position: 'absolute',
1033
+ position: "absolute",
1008
1034
  top: 10,
1009
1035
  bottom: 0,
1010
1036
  left: 0,
@@ -1014,24 +1040,24 @@ const styles = StyleSheet.create({
1014
1040
  agreementConfirmTitle: {
1015
1041
  fontSize: 20,
1016
1042
  // lineHeight: 50,
1017
- color: '#000',
1018
- textAlign: 'center',
1043
+ color: "#000",
1044
+ textAlign: "center",
1019
1045
  // paddingTop: 20,
1020
1046
  },
1021
1047
  agreementConfirmText: {
1022
1048
  fontSize: px(40),
1023
1049
  lineHeight: px(69),
1024
- color: '#333',
1050
+ color: "#333",
1025
1051
  marginHorizontal: px(40),
1026
1052
  },
1027
1053
  agreementConfirmImportantText: {
1028
- color: 'rgba(234, 96, 0, 1)',
1054
+ color: "rgba(234, 96, 0, 1)",
1029
1055
  },
1030
1056
  agreementButtons: {
1031
1057
  height: 50,
1032
1058
  marginTop: px(12),
1033
- flexDirection: 'row',
1034
- justifyContent: 'space-around',
1059
+ flexDirection: "row",
1060
+ justifyContent: "space-around",
1035
1061
  borderBottomLeftRadius: px(29),
1036
1062
  },
1037
1063
  disagreeBtn: {
@@ -1040,10 +1066,10 @@ const styles = StyleSheet.create({
1040
1066
  paddingBottom: px(29),
1041
1067
  },
1042
1068
  disagreeBtnText: {
1043
- color: '#666',
1069
+ color: "#666",
1044
1070
  fontSize: px(52),
1045
- textAlign: 'center',
1046
- fontWeight: '500',
1071
+ textAlign: "center",
1072
+ fontWeight: "500",
1047
1073
  },
1048
1074
  agreeBtn: {
1049
1075
  flex: 1,
@@ -1051,10 +1077,10 @@ const styles = StyleSheet.create({
1051
1077
  paddingBottom: px(29),
1052
1078
  },
1053
1079
  agreeBtnText: {
1054
- color: '#E86003',
1080
+ color: "#E86003",
1055
1081
  fontSize: px(52),
1056
- textAlign: 'center',
1057
- fontWeight: '500',
1082
+ textAlign: "center",
1083
+ fontWeight: "500",
1058
1084
  },
1059
1085
  });
1060
1086