Browse Source

支付成功的跳转到支付成功页面,支付成功页面返回到首页

main
Mac 2 weeks ago
parent
commit
e81898972a
  1. 10
      app/screens/ImageSearchResultScreen.tsx
  2. 10
      app/screens/ProductDetailScreen.tsx
  3. 8
      app/screens/SearchResultScreen.tsx
  4. 52
      app/screens/pay/PayError.tsx
  5. 66
      app/screens/pay/PaySuccess.tsx
  6. 25
      app/screens/previewOrder/perviewOrder.tsx

10
app/screens/ImageSearchResultScreen.tsx

@ -36,6 +36,8 @@ import widthUtils from "../utils/widthUtils";
import fontSize from "../utils/fontsizeUtils";
import useUserStore from "../store/user";
import { getSubjectTransLanguage } from "../utils/languageUtils";
import Toast from "react-native-toast-message";
// 图标组件 - 使用React.memo优化渲染
const IconComponent = React.memo(
@ -475,6 +477,14 @@ export const ImageSearchResultScreen = ({
// 处理点击产品
const handleProductPress = useCallback(
(product: Product) => {
if(product.original_min_price === 0 || product.original_min_price === null){
Toast.show({
type: "error",
text1: t("productDiscontinued"),
});
return;
}
navigation.navigate("ProductDetail", {
offer_id: product.offer_id,
price: product.min_price,

10
app/screens/ProductDetailScreen.tsx

@ -279,16 +279,6 @@ export const ProductDetailScreen = () => {
route.params.offer_id,
userStore.user?.user_id
);
if (res.original_min_price === 0 || res.original_min_price === null) {
navigation.goBack();
Toast.show({
type: "error",
text1: t("productDiscontinued"),
});
setIsLoading(false);
return;
}
if (res.skus != null) {
const priceSelectedSku = res.skus.find(
(item) => item.offer_price === route.params.price

8
app/screens/SearchResultScreen.tsx

@ -33,6 +33,7 @@ import widthUtils from "../utils/widthUtils";
import fontSize from "../utils/fontsizeUtils";
import useUserStore from "../store/user";
import { getSubjectTransLanguage } from "../utils/languageUtils";
import Toast from "react-native-toast-message";
// 图标组件 - 使用React.memo优化渲染
const IconComponent = React.memo(
({ name, size, color }: { name: string; size: number; color: string }) => {
@ -450,6 +451,13 @@ export const SearchResultScreen = ({ route, navigation }: SearchResultScreenProp
// 处理点击产品
const handleProductPress = useCallback(
(product: Product) => {
if (product.original_min_price === 0 || product.original_min_price === null) {
Toast.show({
type: "error",
text1: t("productDiscontinued"),
});
return;
}
// 导航到产品详情页,并传递产品信息
navigation.navigate("ProductDetail", {
offer_id: product.offer_id,

52
app/screens/pay/PayError.tsx

@ -6,15 +6,63 @@ import {
StyleSheet,
ScrollView,
Alert,
BackHandler,
} from "react-native";
import { Ionicons } from "@expo/vector-icons";
import { useNavigation } from "@react-navigation/native";
import { useNavigation, useFocusEffect } from "@react-navigation/native";
import type { NativeStackNavigationProp } from "@react-navigation/native-stack";
import { RootStackParamList } from "../../navigation/types";
import fontSize from "../../utils/fontsizeUtils";
type PayErrorStackParamList = {
MainTabs: { screen: string } | undefined;
PayError: undefined;
ConfirmOrder: undefined;
OrderDetails: undefined;
};
export const PayError = () => {
const navigation = useNavigation<NativeStackNavigationProp<RootStackParamList>>();
const navigation = useNavigation<NativeStackNavigationProp<PayErrorStackParamList>>();
// 处理系统返回,返回到首页
useFocusEffect(
React.useCallback(() => {
const onBackPress = () => {
navigation.reset({
index: 0,
routes: [{
name: 'MainTabs',
params: { screen: 'Home' }
}],
});
return true; // 阻止默认返回行为
};
// 监听硬件返回按钮(Android)
const backHandler = BackHandler;
const subscription = backHandler.addEventListener('hardwareBackPress', onBackPress);
// 监听导航事件(iOS手势返回和导航栏返回按钮)
const unsubscribe = navigation.addListener('beforeRemove', (e) => {
// 阻止默认行为
e.preventDefault();
// 执行自定义返回逻辑
navigation.reset({
index: 0,
routes: [{
name: 'MainTabs',
params: { screen: 'Home' }
}],
});
});
return () => {
subscription?.remove();
unsubscribe();
};
}, [navigation])
);
const handleRetryPayment = () => {
// 导航回支付页面或确认订单页面

66
app/screens/pay/PaySuccess.tsx

@ -6,14 +6,24 @@ import {
TouchableOpacity,
StyleSheet,
ScrollView,
BackHandler,
} from "react-native";
import { useNavigation, useFocusEffect } from "@react-navigation/native";
import { NativeStackNavigationProp } from "@react-navigation/native-stack";
import fontSize from "../../utils/fontsizeUtils";
// import { useRoute, RouteProp } from "@react-navigation/native";
// import { RootStackParamList } from "../../navigation/types";
// import { payApi } from "../../services/api/payApi";
type RootStackParamList = {
MainTabs: { screen: string } | undefined;
PaymentSuccessScreen: undefined;
};
export const PaymentSuccessScreen = () => {
const navigation = useNavigation<NativeStackNavigationProp<RootStackParamList>>();
// const route = useRoute<RouteProp<RootStackParamList, 'PaymentSuccessScreen'>>();
// const { paymentId, PayerID } = route.params;
// console.log("paymentId", paymentId);
@ -27,6 +37,46 @@ export const PaymentSuccessScreen = () => {
// }
// }, [paymentId, PayerID]);
// 处理系统返回,返回到首页
useFocusEffect(
React.useCallback(() => {
const onBackPress = () => {
navigation.reset({
index: 0,
routes: [{
name: 'MainTabs',
params: { screen: 'Home' }
}],
});
return true; // 阻止默认返回行为
};
// 监听硬件返回按钮(Android)
const backHandler = BackHandler;
const subscription = backHandler.addEventListener('hardwareBackPress', onBackPress);
// 监听导航事件(iOS手势返回和导航栏返回按钮)
const unsubscribe = navigation.addListener('beforeRemove', (e) => {
// 阻止默认行为
e.preventDefault();
// 执行自定义返回逻辑
navigation.reset({
index: 0,
routes: [{
name: 'MainTabs',
params: { screen: 'Home' }
}],
});
});
return () => {
subscription?.remove();
unsubscribe();
};
}, [navigation])
);
return (
<ScrollView style={styles.container} showsVerticalScrollIndicator={false} >
<View style={styles.header}>
@ -35,32 +85,32 @@ export const PaymentSuccessScreen = () => {
<View style={styles.headerSuccessText}>
<Text style={styles.headerSuccessTextTitle}></Text>
</View>
<View style={styles.headerPriceText}>
{/* <View style={styles.headerPriceText}>
<Text style={styles.headerPriceTextTitle}>73800FCFA</Text>
</View>
</View> */}
</View>
<View style={styles.headerSuccessInfo}>
<View style={styles.headerSuccessInfoItem}>
{/* <View style={styles.headerSuccessInfoItem}>
<Text style={styles.headerSuccessInfoItemText}></Text>
<Text style={styles.headerSuccessInfoItemText1}>17088752341</Text>
</View>
<View style={styles.headerSuccessInfoItem1}>
</View> */}
{/* <View style={styles.headerSuccessInfoItem1}>
<Text style={styles.headerSuccessInfoItemText}></Text>
<Text style={styles.headerSuccessInfoItemText1}></Text>
</View>
</View> */}
</View>
<View style={styles.headerSuccessInfoItem2}>
<Text></Text>
</View>
<View style={styles.button}>
{/* <View style={styles.button}>
<View style={styles.buttonItem}>
<Text style={styles.buttonText}></Text>
</View>
<View style={styles.buttonItem}>
<Text style={styles.buttonText}></Text>
</View>
</View>
</View> */}
</View>
<View style={styles.recommend}>

25
app/screens/previewOrder/perviewOrder.tsx

@ -58,7 +58,7 @@ type RootStackParamList = {
Pay: { payUrl: string; method: string; order_id: string };
OrderDetails: { orderId?: number };
PaymentSuccessScreen: any;
MainTabs: undefined;
MainTabs: { screen: string } | undefined;
};
export const PreviewOrder = () => {
@ -174,16 +174,23 @@ export const PreviewOrder = () => {
useFocusEffect(
React.useCallback(() => {
const onBackPress = () => {
// 拦截系统返回键事件,导航到OrderDetails页面
navigation.navigate("OrderDetails", { orderId: 1 });
// 重置导航栈并返回到首页
navigation.reset({
index: 0,
routes: [{
name: 'MainTabs',
params: { screen: 'Home' }
}],
});
return true; // 返回true表示已处理返回事件
};
// 添加返回键监听(Android)
BackHandler.addEventListener("hardwareBackPress", onBackPress);
return () =>
return () => {
BackHandler.removeEventListener("hardwareBackPress", onBackPress);
};
}, [navigation])
);
@ -329,7 +336,15 @@ export const PreviewOrder = () => {
<View style={styles.container}>
<View style={styles.titleContainer}>
<View style={styles.backIconContainer}>
<TouchableOpacity onPress={() => navigation.goBack()}>
<TouchableOpacity onPress={() => {
navigation.reset({
index: 0,
routes: [{
name: 'MainTabs',
params: { screen: 'Home' }
}],
});
}}>
<BackIcon size={fontSize(20)} />
</TouchableOpacity>
</View>

Loading…
Cancel
Save