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.
- package/app/App.js +180 -166
- package/app/api/ipanelCloudApi.js +210 -208
- package/app/assets/img/launch_bg_panyu.png +0 -0
- package/app/assets/img/launch_logo_panyu.png +0 -0
- package/app/assets/img/launch_text_panyu.png +0 -0
- package/app/assets/img/login_bg_new.png +0 -0
- package/app/base.js +69 -62
- package/app/components/common/LoginType/protocol.js +66 -44
- package/app/screens/BaseScreen.js +111 -108
- package/app/screens/CommonScreens/DeviceFeedbackScreen/index.js +99 -83
- package/app/screens/LoginScreen/index.js +193 -170
- package/app/screens/LoginScreen/indexNew.js +414 -368
- package/app/screens/RegisteCountScreen/index.js +494 -468
- package/app/screens/SbkScreen.js +149 -7
- package/app/utils/applyPermissions.js +4 -2
- package/app/utils/common.js +94 -93
- package/app/utils/config.js +15 -15
- package/package.json +3 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {useState, useEffect, useRef} from
|
|
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
|
|
14
|
+
Keyboard,
|
|
15
|
+
} from "react-native";
|
|
16
16
|
import {
|
|
17
17
|
updateHomedToken,
|
|
18
18
|
initOperatorHomedTouristAccount,
|
|
19
19
|
appReport,
|
|
20
|
-
} from
|
|
21
|
-
import ScreenBackHeader from
|
|
22
|
-
import SmsCodeInput from
|
|
23
|
-
import {Icon, CheckBox, Button, Divider} from
|
|
24
|
-
import CryptoJS from
|
|
25
|
-
import ProtocolType from
|
|
26
|
-
import {confirmWithContent} from
|
|
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
|
|
35
|
-
import px from
|
|
36
|
-
import storage from
|
|
37
|
-
import {replace,goBack} from
|
|
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(
|
|
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 ||
|
|
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
|
-
|
|
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(
|
|
84
|
+
const keyboardDidShow = Keyboard.addListener("keyboardDidShow", () => {
|
|
86
85
|
setKeybordShow(true);
|
|
87
86
|
});
|
|
88
|
-
const keyboardDidHide = Keyboard.addListener(
|
|
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:
|
|
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(
|
|
119
|
+
if (!name || name.length < 3) {
|
|
120
|
+
Alert.alert("请输入至少3位字符的账号");
|
|
122
121
|
return false;
|
|
123
|
-
}
|
|
124
|
-
if (!/^[0-9a-zA-Z_]+$/
|
|
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
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
-
|
|
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 ===
|
|
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],
|
|
214
|
-
await storage.set(
|
|
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 ||
|
|
220
|
-
{}
|
|
218
|
+
`${ress.result?.account?.account_id || ""}currentOperator`,
|
|
219
|
+
{}
|
|
221
220
|
);
|
|
222
|
-
// 初始化默认运营商对应的homed游客账号
|
|
223
|
-
const envVersion =
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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 ||
|
|
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(
|
|
237
|
+
storage.set("apartmentToken", apartmentRes.token);
|
|
240
238
|
// 公寓人员信息接口暂时还没,假设role:1为房东
|
|
241
|
-
storage.set(
|
|
239
|
+
storage.set("apartmentData", { role: 1 });
|
|
242
240
|
} else {
|
|
243
|
-
storage.set(
|
|
244
|
-
storage.set(
|
|
241
|
+
storage.set("apartmentData", {});
|
|
242
|
+
storage.set("apartmentToken", "");
|
|
245
243
|
}
|
|
246
244
|
} else {
|
|
247
|
-
storage.set(
|
|
248
|
-
storage.set(
|
|
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
|
|
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(
|
|
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(
|
|
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:
|
|
316
|
-
entry:
|
|
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(
|
|
323
|
-
appReport(
|
|
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:
|
|
327
|
-
name:
|
|
323
|
+
id: "c492121bac734bb983814b67ceafcae9",
|
|
324
|
+
name: "番禺区广电网络",
|
|
328
325
|
};
|
|
329
|
-
const accountData = await storage.get(
|
|
326
|
+
const accountData = await storage.get("accountData");
|
|
330
327
|
await storage.set(
|
|
331
|
-
`${accountData?.account?.account_id ||
|
|
332
|
-
selectedOperator
|
|
328
|
+
`${accountData?.account?.account_id || ""}currentOperator`,
|
|
329
|
+
selectedOperator
|
|
333
330
|
);
|
|
334
|
-
console.log(
|
|
335
|
-
replace(
|
|
331
|
+
console.log("to home");
|
|
332
|
+
replace("Home", {
|
|
336
333
|
redirect: false,
|
|
337
334
|
});
|
|
338
|
-
}else{
|
|
339
|
-
replace(
|
|
335
|
+
} else {
|
|
336
|
+
replace("Home", {
|
|
340
337
|
redirect: false,
|
|
341
338
|
});
|
|
342
339
|
}
|
|
343
|
-
})
|
|
344
|
-
}else{
|
|
345
|
-
global.toast.showToast(
|
|
340
|
+
});
|
|
341
|
+
} else {
|
|
342
|
+
global.toast.showToast("登录失败:" + ress.message);
|
|
346
343
|
}
|
|
347
344
|
} else {
|
|
348
|
-
const 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
|
-
|
|
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:
|
|
372
|
-
entry:
|
|
367
|
+
model: deviceModal || "开发测试",
|
|
368
|
+
application: appName || "爱家宝",
|
|
369
|
+
platform: "phone",
|
|
370
|
+
entry: "app",
|
|
373
371
|
},
|
|
374
|
-
sign:CryptoJS.MD5(
|
|
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 (
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
}
|
|
398
|
-
|
|
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(
|
|
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,
|
|
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 ===
|
|
446
|
+
const handleViewUserAgreementByType = (type) => {
|
|
447
|
+
if (type === "service") {
|
|
435
448
|
setServiceDialogVisible(true);
|
|
436
|
-
} else if (type ===
|
|
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 ===
|
|
455
|
+
if (type === "service") {
|
|
443
456
|
setServiceAgree(false);
|
|
444
457
|
setServiceDialogVisible(false);
|
|
445
|
-
} else if (type ===
|
|
458
|
+
} else if (type === "privacy") {
|
|
446
459
|
setPrivacyAgree(false);
|
|
447
460
|
setPrivacyDialogVisible(false);
|
|
448
461
|
}
|
|
449
462
|
};
|
|
450
|
-
const handleOneAgree = type => {
|
|
451
|
-
if (type ===
|
|
463
|
+
const handleOneAgree = (type) => {
|
|
464
|
+
if (type === "service") {
|
|
452
465
|
setServiceAgree(true);
|
|
453
466
|
setServiceDialogVisible(false);
|
|
454
|
-
} else if (type ===
|
|
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(
|
|
465
|
-
title:
|
|
466
|
-
url:
|
|
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(
|
|
471
|
-
title:
|
|
472
|
-
url:
|
|
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 ===
|
|
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(
|
|
490
|
-
replace(
|
|
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
|
-
|
|
501
|
-
|
|
502
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
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
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
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
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
<Text
|
|
716
|
-
|
|
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
|
+
为了更好的保障您的合法权益,请您阅读并同意
|
|
815
|
+
<TouchableWithoutFeedback
|
|
816
|
+
onPress={handleViewUserAgreement}
|
|
817
|
+
style={{ paddingVertical: px(100) }}
|
|
818
|
+
>
|
|
819
|
+
<Text style={styles.agreementConfirmImportantText}>
|
|
820
|
+
用户协议
|
|
723
821
|
</Text>
|
|
724
|
-
</
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
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
|
-
</
|
|
750
|
-
|
|
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
|
|
787
|
-
<
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
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
|
-
<
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
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
|
-
|
|
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:
|
|
889
|
-
flexDirection:
|
|
914
|
+
backgroundColor: "#fff",
|
|
915
|
+
flexDirection: "column",
|
|
890
916
|
},
|
|
891
917
|
inputBox: {
|
|
892
918
|
marginHorizontal: px(115),
|
|
893
|
-
flexDirection:
|
|
894
|
-
alignItems:
|
|
919
|
+
flexDirection: "row",
|
|
920
|
+
alignItems: "center",
|
|
895
921
|
borderBottomWidth: px(2),
|
|
896
922
|
// marginVertical: 10,
|
|
897
|
-
borderBottomColor:
|
|
923
|
+
borderBottomColor: "#E8E8E8",
|
|
898
924
|
height: px(100),
|
|
899
925
|
},
|
|
900
926
|
inputView: {
|
|
901
|
-
backgroundColor:
|
|
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:
|
|
935
|
+
backgroundColor: "#eee",
|
|
910
936
|
marginHorizontal: px(22),
|
|
911
937
|
},
|
|
912
938
|
inputTitle: {
|
|
913
|
-
color:
|
|
939
|
+
color: "#333",
|
|
914
940
|
fontSize: px(40),
|
|
915
|
-
fontWeight:
|
|
941
|
+
fontWeight: "400",
|
|
916
942
|
},
|
|
917
943
|
input: {
|
|
918
944
|
height: 50,
|
|
919
945
|
flex: 1,
|
|
920
|
-
color:
|
|
946
|
+
color: "#000",
|
|
921
947
|
},
|
|
922
948
|
loginBtnBox: {
|
|
923
|
-
flexDirection:
|
|
924
|
-
alignItems:
|
|
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:
|
|
956
|
+
backgroundColor: "#E86003",
|
|
931
957
|
flex: 1,
|
|
932
958
|
height: px(132),
|
|
933
|
-
alignItems:
|
|
934
|
-
justifyContent:
|
|
959
|
+
alignItems: "center",
|
|
960
|
+
justifyContent: "center",
|
|
935
961
|
},
|
|
936
962
|
loginBtnText: {
|
|
937
|
-
color:
|
|
963
|
+
color: "#fff",
|
|
938
964
|
fontSize: px(52),
|
|
939
|
-
fontWeight:
|
|
965
|
+
fontWeight: "600",
|
|
940
966
|
},
|
|
941
967
|
title: {
|
|
942
|
-
fontWeight:
|
|
968
|
+
fontWeight: "bold",
|
|
943
969
|
fontSize: px(46),
|
|
944
|
-
color:
|
|
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:
|
|
976
|
+
backgroundColor: "#CFCFCF",
|
|
951
977
|
},
|
|
952
978
|
marginCommon: {
|
|
953
979
|
marginHorizontal: px(115),
|
|
954
980
|
},
|
|
955
981
|
|
|
956
982
|
protocol: {
|
|
957
|
-
flexDirection:
|
|
958
|
-
justifyContent:
|
|
959
|
-
alignItems:
|
|
983
|
+
flexDirection: "row",
|
|
984
|
+
justifyContent: "center",
|
|
985
|
+
alignItems: "center",
|
|
960
986
|
},
|
|
961
987
|
protocolText: {
|
|
962
|
-
color:
|
|
988
|
+
color: "#A6A6A6",
|
|
963
989
|
fontSize: px(35),
|
|
964
990
|
},
|
|
965
991
|
protocolLink: {
|
|
966
|
-
color:
|
|
992
|
+
color: "rgba(234, 96, 0, 1)",
|
|
967
993
|
},
|
|
968
994
|
protocolLinkAgree: {
|
|
969
|
-
color:
|
|
995
|
+
color: "#0EC12C",
|
|
970
996
|
},
|
|
971
997
|
|
|
972
998
|
agreementMask: {
|
|
973
|
-
position:
|
|
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:
|
|
1005
|
+
backgroundColor: "rgba(0,0,0,0.7)",
|
|
980
1006
|
},
|
|
981
1007
|
agreementConfirmContent: {
|
|
982
|
-
position:
|
|
1008
|
+
position: "absolute",
|
|
983
1009
|
height: 400,
|
|
984
1010
|
left: px(75),
|
|
985
1011
|
right: px(75),
|
|
986
|
-
top: Dimensions.get(
|
|
987
|
-
backgroundColor:
|
|
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:
|
|
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:
|
|
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:
|
|
1018
|
-
textAlign:
|
|
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:
|
|
1050
|
+
color: "#333",
|
|
1025
1051
|
marginHorizontal: px(40),
|
|
1026
1052
|
},
|
|
1027
1053
|
agreementConfirmImportantText: {
|
|
1028
|
-
color:
|
|
1054
|
+
color: "rgba(234, 96, 0, 1)",
|
|
1029
1055
|
},
|
|
1030
1056
|
agreementButtons: {
|
|
1031
1057
|
height: 50,
|
|
1032
1058
|
marginTop: px(12),
|
|
1033
|
-
flexDirection:
|
|
1034
|
-
justifyContent:
|
|
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:
|
|
1069
|
+
color: "#666",
|
|
1044
1070
|
fontSize: px(52),
|
|
1045
|
-
textAlign:
|
|
1046
|
-
fontWeight:
|
|
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:
|
|
1080
|
+
color: "#E86003",
|
|
1055
1081
|
fontSize: px(52),
|
|
1056
|
-
textAlign:
|
|
1057
|
-
fontWeight:
|
|
1082
|
+
textAlign: "center",
|
|
1083
|
+
fontWeight: "500",
|
|
1058
1084
|
},
|
|
1059
1085
|
});
|
|
1060
1086
|
|