ipanel-rnapp-ajb-base 1.0.42 → 1.0.43

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 CHANGED
@@ -132,7 +132,9 @@ const CommonScreens = {
132
132
  screenOptions: {
133
133
  title: "首页",
134
134
  headerShown: false,
135
- includeBottom: true,
135
+ includeBottom: appName.startsWith("爱家宝")
136
+ ? false /* 爱家宝现在的首页是聊天界面,页面需要避开底部安全区 */
137
+ : true,
136
138
  },
137
139
  },
138
140
  Login: {
@@ -1,15 +1,15 @@
1
- import React from 'react';
1
+ import React from "react";
2
2
  import {
3
3
  View,
4
4
  Text,
5
5
  StyleSheet,
6
- SafeAreaView,
7
6
  StatusBar,
8
7
  TouchableOpacity,
9
8
  Platform,
10
9
  NativeModules,
11
- } from 'react-native';
12
- import { Icon } from '@rneui/themed';
10
+ } from "react-native";
11
+ import { useSafeAreaInsets } from "react-native-safe-area-context";
12
+ import { Icon } from "@rneui/themed";
13
13
 
14
14
  const { storage, replace, popToTop, px } = global.base;
15
15
 
@@ -18,33 +18,35 @@ const { storage, replace, popToTop, px } = global.base;
18
18
  * 专门为本地开发环境设计,只包含退出登录功能
19
19
  */
20
20
  function SimpleProfileScreen({ navigation }) {
21
+ const insets = useSafeAreaInsets();
22
+
21
23
  const handleLogout = async () => {
22
24
  try {
23
25
  // 清除所有认证相关的token
24
- await storage.set('accessToken', null);
25
- await storage.set('refreshToken', null);
26
- await storage.set('adgAccessToken', null);
27
- await storage.set('adgRefreshToken', null);
28
- await storage.set('homedAccessToken', null);
29
- await storage.set('homedTouristAccessToken', null);
26
+ await storage.set("accessToken", null);
27
+ await storage.set("refreshToken", null);
28
+ await storage.set("adgAccessToken", null);
29
+ await storage.set("adgRefreshToken", null);
30
+ await storage.set("homedAccessToken", null);
31
+ await storage.set("homedTouristAccessToken", null);
30
32
 
31
33
  // 清理其他用户相关数据
32
- await storage.set('accountData', null);
33
- await storage.set('activeAddr', null);
34
+ await storage.set("accountData", null);
35
+ await storage.set("activeAddr", null);
34
36
 
35
37
  // 处理导航栈
36
- if (navigation.getState().type === 'stack') {
38
+ if (navigation.getState().type === "stack") {
37
39
  popToTop();
38
40
  }
39
41
 
40
42
  // 跳转到登录页面
41
- replace('Login', {
43
+ replace("Login", {
42
44
  skip: true,
43
45
  });
44
46
  } catch (error) {
45
- console.log('退出登录失败:', error);
47
+ console.log("退出登录失败:", error);
46
48
  // 即使出错也尝试跳转到登录页
47
- replace('Login');
49
+ replace("Login");
48
50
  }
49
51
  };
50
52
 
@@ -53,13 +55,7 @@ function SimpleProfileScreen({ navigation }) {
53
55
  };
54
56
 
55
57
  return (
56
- <SafeAreaView style={styles.container}>
57
- <StatusBar
58
- barStyle="dark-content"
59
- backgroundColor="#f5f5f5"
60
- translucent={false}
61
- />
62
-
58
+ <View style={[styles.container, { paddingTop: insets.top }]}>
63
59
  {/* 顶部导航栏 */}
64
60
  <View style={styles.header}>
65
61
  <TouchableOpacity
@@ -67,12 +63,7 @@ function SimpleProfileScreen({ navigation }) {
67
63
  onPress={handleGoBack}
68
64
  activeOpacity={0.8}
69
65
  >
70
- <Icon
71
- name="chevron-back"
72
- type="ionicon"
73
- size={px(48)}
74
- color="#333"
75
- />
66
+ <Icon name="chevron-back" type="ionicon" size={px(48)} color="#333" />
76
67
  </TouchableOpacity>
77
68
 
78
69
  <View style={styles.headerCenter}>
@@ -118,78 +109,78 @@ function SimpleProfileScreen({ navigation }) {
118
109
  <Text style={styles.versionSubText}>LocalDev Mode</Text>
119
110
  </View>
120
111
  </View>
121
- </SafeAreaView>
112
+ </View>
122
113
  );
123
114
  }
124
115
 
125
116
  const styles = StyleSheet.create({
126
117
  container: {
127
118
  flex: 1,
128
- backgroundColor: '#f5f5f5',
119
+ backgroundColor: "#f5f5f5",
129
120
  },
130
121
  header: {
131
122
  height: px(100),
132
- backgroundColor: '#f5f5f5',
133
- flexDirection: 'row',
134
- alignItems: 'center',
135
- justifyContent: 'space-between',
123
+ backgroundColor: "#f5f5f5",
124
+ flexDirection: "row",
125
+ alignItems: "center",
126
+ justifyContent: "space-between",
136
127
  paddingHorizontal: px(32),
137
128
  },
138
129
  backButton: {
139
130
  width: px(48),
140
131
  height: px(48),
141
- alignItems: 'center',
142
- justifyContent: 'center',
132
+ alignItems: "center",
133
+ justifyContent: "center",
143
134
  },
144
135
  headerCenter: {
145
136
  flex: 1,
146
- alignItems: 'center',
137
+ alignItems: "center",
147
138
  },
148
139
  headerTitle: {
149
- fontSize: px(36),
150
- fontWeight: '600',
151
- color: '#333',
140
+ fontSize: px(38),
141
+ fontWeight: "600",
142
+ color: "#333",
152
143
  },
153
144
  headerRight: {
154
145
  width: px(48),
155
146
  },
156
147
  content: {
157
148
  flex: 1,
158
- alignItems: 'center',
159
- justifyContent: 'space-between',
149
+ alignItems: "center",
150
+ justifyContent: "space-between",
160
151
  paddingHorizontal: px(60),
161
152
  paddingVertical: px(120),
162
153
  },
163
154
  welcomeSection: {
164
- alignItems: 'center',
155
+ alignItems: "center",
165
156
  flex: 1,
166
- justifyContent: 'center',
157
+ justifyContent: "center",
167
158
  },
168
159
  welcomeText: {
169
160
  fontSize: px(48),
170
- fontWeight: '600',
171
- color: '#333',
161
+ fontWeight: "600",
162
+ color: "#333",
172
163
  marginTop: px(40),
173
164
  },
174
165
  subText: {
175
166
  fontSize: px(32),
176
- color: '#666',
167
+ color: "#666",
177
168
  marginTop: px(16),
178
169
  },
179
170
  actionSection: {
180
- width: '100%',
181
- alignItems: 'center',
171
+ width: "100%",
172
+ alignItems: "center",
182
173
  marginBottom: px(80),
183
174
  },
184
175
  logoutButton: {
185
- flexDirection: 'row',
186
- alignItems: 'center',
187
- justifyContent: 'center',
188
- backgroundColor: '#FF6B6B',
176
+ flexDirection: "row",
177
+ alignItems: "center",
178
+ justifyContent: "center",
179
+ backgroundColor: "#FF6B6B",
189
180
  paddingHorizontal: px(80),
190
181
  paddingVertical: px(32),
191
182
  borderRadius: px(50),
192
- shadowColor: '#000',
183
+ shadowColor: "#000",
193
184
  shadowOffset: {
194
185
  width: 0,
195
186
  height: 2,
@@ -204,21 +195,21 @@ const styles = StyleSheet.create({
204
195
  },
205
196
  logoutText: {
206
197
  fontSize: px(36),
207
- fontWeight: '600',
208
- color: '#fff',
198
+ fontWeight: "600",
199
+ color: "#fff",
209
200
  },
210
201
  versionSection: {
211
- alignItems: 'center',
202
+ alignItems: "center",
212
203
  },
213
204
  versionText: {
214
205
  fontSize: px(28),
215
- color: '#999',
206
+ color: "#999",
216
207
  },
217
208
  versionSubText: {
218
209
  fontSize: px(24),
219
- color: '#ccc',
210
+ color: "#ccc",
220
211
  marginTop: px(8),
221
212
  },
222
213
  });
223
214
 
224
- export default SimpleProfileScreen;
215
+ export default SimpleProfileScreen;
@@ -4,13 +4,13 @@ import {
4
4
  StyleSheet,
5
5
  TouchableOpacity,
6
6
  Text,
7
- SafeAreaView,
8
7
  KeyboardAvoidingView,
9
8
  Platform,
10
9
  StatusBar,
11
10
  Keyboard,
12
11
  NativeModules,
13
12
  } from "react-native";
13
+ import { useSafeAreaInsets } from "react-native-safe-area-context";
14
14
  import { Icon } from "@rneui/themed";
15
15
  import MyChat from "./chat/MyChat";
16
16
  import ChatInputBar from "./components/ChatInputBar";
@@ -22,6 +22,8 @@ const { px } = global.base;
22
22
  * 专门为爱家宝品牌提供全屏AI智能客服对话界面
23
23
  */
24
24
  function ChatModeScreen({ navigation }) {
25
+ const insets = useSafeAreaInsets();
26
+
25
27
  const handleProfilePress = () => {
26
28
  // 判断是否为本地开发环境(与polyfill.js中的逻辑一致)
27
29
  const isLocalDev = !NativeModules.RNToNativeEmitter?.isMultiBundle;
@@ -54,12 +56,7 @@ function ChatModeScreen({ navigation }) {
54
56
  };
55
57
 
56
58
  return (
57
- <SafeAreaView style={styles.container}>
58
- <StatusBar
59
- barStyle="dark-content"
60
- backgroundColor="#f5f5f5"
61
- translucent={false}
62
- />
59
+ <View style={[styles.container, { paddingTop: insets.top }]}>
63
60
  <KeyboardAvoidingView
64
61
  style={styles.keyboardView}
65
62
  behavior={Platform.OS === "ios" ? "padding" : undefined}
@@ -73,7 +70,7 @@ function ChatModeScreen({ navigation }) {
73
70
  <TouchableOpacity
74
71
  style={styles.profileButton}
75
72
  onPress={handleProfilePress}
76
- activeOpacity={0.8}
73
+ activeOpacity={0.7}
77
74
  >
78
75
  <Text style={styles.profileButtonText}>我的</Text>
79
76
  </TouchableOpacity>
@@ -88,7 +85,7 @@ function ChatModeScreen({ navigation }) {
88
85
  onMediaSelect={handleMediaSelect}
89
86
  />
90
87
  </KeyboardAvoidingView>
91
- </SafeAreaView>
88
+ </View>
92
89
  );
93
90
  }
94
91
 
@@ -115,7 +112,7 @@ const styles = StyleSheet.create({
115
112
  alignItems: "center",
116
113
  },
117
114
  headerTitle: {
118
- fontSize: px(36),
115
+ fontSize: px(38),
119
116
  fontWeight: "600",
120
117
  color: "#333",
121
118
  },
@@ -138,7 +135,7 @@ const styles = StyleSheet.create({
138
135
  elevation: 5,
139
136
  },
140
137
  profileButtonText: {
141
- fontSize: px(32),
138
+ fontSize: px(38),
142
139
  fontWeight: "600",
143
140
  color: "#333",
144
141
  },
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ipanel-rnapp-ajb-base",
3
- "version": "1.0.42",
4
- "ipanelVersion": "1.0.534",
3
+ "version": "1.0.43",
4
+ "ipanelVersion": "1.0.538",
5
5
  "description": "",
6
6
  "main": "index.js",
7
7
  "keywords": [