diff --git a/app/screens/previewOrder/perviewOrder.tsx b/app/screens/previewOrder/perviewOrder.tsx
index c43aecb..000cf05 100644
--- a/app/screens/previewOrder/perviewOrder.tsx
+++ b/app/screens/previewOrder/perviewOrder.tsx
@@ -1,31 +1,41 @@
-import { View, Text, TouchableOpacity, StyleSheet, TextInput } from "react-native";
+import {View, Text, TouchableOpacity, StyleSheet, TextInput, ScrollView, Alert} from "react-native";
import useCreateOrderStore from "../../store/createOrder";
import BackIcon from "../../components/BackIcon";
-import { useNavigation } from "@react-navigation/native";
+import { useNavigation, useRoute, RouteProp } from "@react-navigation/native";
+import { NativeStackNavigationProp } from "@react-navigation/native-stack";
import { useState, useEffect } from "react";
+import useUserStore from "../../store/user";
+import {
+ Order
+} from "../../services/api/orders";
+import { payApi } from "../../services/api/payApi";
-// 假设的图标组件 - 请替换为您的实际图标
-const AddressIcon = ({ size, color }) => 📍; // 示例图标
-const AmountIcon = ({ size, color }) => 💰; // 示例图标
-const ShippingIcon = ({ size, color }) => 🚚; // 示例图标
-const WhatsAppIcon = ({ size, color }) => 💬; // 示例图标
-const UserIcon = ({ size, color }) => 👤; // 示例图标 - 姓名
-const PhoneIcon = ({ size, color }) => 📞; // 示例图标 - 手机
-const GlobeIcon = ({ size, color }) => 🌍; // 示例图标 - 国家
+
+// Define the param list for navigation
+type RootStackParamList = {
+ PreviewOrder: { data: Order, payMethod: string ,currency:string,amount:number};
+ Pay: { payUrl:string };
+};
export const PreviewOrder = () => {
const {orderData, setOrderData} = useCreateOrderStore();
- const navigation = useNavigation();
+ const navigation = useNavigation>();
const [phoneNumber, setPhoneNumber] = useState("");
const [showPhoneInput, setShowPhoneInput] = useState(false);
+ const route = useRoute>();
+ const [loading, setLoading] = useState(false);
+ const {user} = useUserStore();
useEffect(() => {
- if (orderData?.payment_method === "Brainnel Pay(Mobile Money)") {
+ if (!user.user_id){
+ return Alert.alert('检查您未登录')
+ }
+ if (route.params.payMethod === "Brainnel Pay(Mobile Money)") {
setShowPhoneInput(true);
} else {
setShowPhoneInput(false);
}
- }, [orderData?.payment_method]);
+ }, [route.params.payMethod, user.user_id]);
const handleSubmit = () => {
if (showPhoneInput && !phoneNumber) {
@@ -33,98 +43,143 @@ export const PreviewOrder = () => {
console.log("Phone number is required for Mobile Money");
return;
}
-
- if (showPhoneInput) {
- setOrderData({ ...orderData, mobile_money_phone: phoneNumber });
+
+ console.log(route.params.currency);
+
+ const data = {
+ order_id: route.params.data.order_id,
+ method: route.params.payMethod,
+ currency: route.params.currency || route.params.data.currency,
+ amount: route.params.data.actual_amount,
}
+ setLoading(true);
+
+ payApi.getPayInfo(data).then((res) => {
+ if(res.success){``
+ navigation.navigate('Pay', {
+ payUrl:res.payment_url
+ })
+ }
+ }).catch((err) => {
+ setLoading(false);
+ Alert.alert('支付失败')
+ }).finally(() => {
+ setLoading(false);
+ })
- console.log("orderData", orderData);
- // Add your submission logic here
+ // navigation.navigate('Pay', {
+ // orderId: user.user_id,
+ // payMethod: route.params.payMethod,
+
+ // })
}
return (
-
- navigation.goBack()}>
-
-
+
+ navigation.goBack()}>
+
+
+
+
+ 立即支付
- 立即支付
-
+
+
+ {/* Payment Method Section */}
+
+ 支付方式
+
+ {route.params.payMethod}
+
- {/* Payment Details */}
-
+ {showPhoneInput && (
+
+ 请输入手机号码
+
+
+ )}
+
- {showPhoneInput && (
-
- 请输入手机号码
-
-
- )}
+ {/* Order Info Section */}
+
+ 支付信息
+
+
+ 姓名
+ {route.params?.data.receiver_name || "N/A"}
+
+
+
+ 手机号
+ {route.params?.data.receiver_phone || "N/A"}
+
+
+ {route.params.data?.whatsapp_number && (
+
+ WhatsApp
+ {route.params.data?.whatsapp_number}
+
+ )}
+
+
+ 国家
+ {route.params?.data.receiver_country || "N/A"}
+
+
+
+ 收货地址
+ {route.params?.data.receiver_address || "N/A"}
+
+
+
+ 订单金额
+
+ {route.params.data.actual_amount || "N/A"} {user.currency}
+
+
+
+
+ 运费
+
+ {(route.params.data.domestic_shipping_fee + route.params.data.shipping_fee).toFixed(2) || "N/A"} {user.currency}
+
+
+
- {/* Order Details Card */}
-
- 支付信息
-
-
- 姓名:
- {orderData?.receiver_name || "N/A"}
-
-
-
- 手机号:
- {orderData?.receiver_phone || "N/A"}
-
- {orderData?.whatsapp_phone && (
-
-
- WhatsApp:
- {orderData.whatsapp_phone}
+ {/* Order Summary Section */}
+
+ 订单总额
+
+ 总金额
+
+ {route.params.amount} {route.params.currency}
+
+
- )}
-
-
- 国家:
- {orderData?.country || "N/A"}
-
-
-
- 收货地址:
- {orderData?.address || "请选择地址"}
-
-
-
- 订单金额:
- {orderData?.amount ? `${orderData.currency || ''} ${orderData.amount}` : "N/A"}
-
-
- 运费:
- {orderData?.shipping_fee ? `${orderData.currency || ''} ${orderData.shipping_fee}` : "N/A"}
-
-
-
+
-
-
- 确认支付
-
-
+
+
+ 确认支付
+
+
);
};
@@ -132,154 +187,149 @@ export const PreviewOrder = () => {
const styles = StyleSheet.create({
container: {
flex: 1,
- backgroundColor: "white",
+ backgroundColor: "#f7f7fa",
+ },
+ scrollContainer: {
+ flex: 1,
+ },
+ mainContent: {
+ padding: 16,
},
submitButtonContainer: {
- paddingRight: 11,
- paddingLeft: 11,
- marginTop: 20,
- marginBottom: 20,
+ paddingHorizontal: 16,
+ paddingVertical: 20,
+ backgroundColor: "white",
+ borderTopWidth: 1,
+ borderTopColor: "#eaeaea",
},
primaryButtonStyle: {
width: "100%",
height: 50,
justifyContent: "center",
alignItems: "center",
- fontWeight: "600",
- fontSize: 16,
- lineHeight: 22,
- fontFamily: "PingFang SC",
- color: "white",
backgroundColor: "#002fa7",
- borderWidth: 0,
borderRadius: 25,
+ shadowColor: "#002fa7",
+ shadowOffset: { width: 0, height: 3 },
+ shadowOpacity: 0.2,
+ shadowRadius: 5,
+ elevation: 5,
},
buttonText: {
color: "white",
fontWeight: "600",
fontSize: 16,
- lineHeight: 22,
- fontFamily: "PingFang SC",
- },
- selectedCountryText: {
- padding: 0,
- margin: 0,
- fontWeight: "500",
- fontSize: 16,
- lineHeight: 22,
fontFamily: "PingFang SC",
- color: "#646472",
},
disabledButtonStyle: {
- backgroundColor: "#ccc",
+ backgroundColor: "#c0c0c0",
+ shadowOpacity: 0,
},
titleContainer: {
width: "100%",
- padding: 15,
+ padding: 16,
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
position: "relative",
backgroundColor: "#fff",
-
+ borderBottomWidth: 1,
+ borderBottomColor: "#eaeaea",
},
backIconContainer: {
position: "absolute",
- left: 15,
- backgroundColor: "#fff",
-
+ left: 16,
},
titleHeading: {
fontWeight: "600",
- fontSize: 20,
- lineHeight: 22,
+ fontSize: 18,
+ color: "#333",
fontFamily: "PingFang SC",
- color: "black",
-
},
- // Order Summary Styles
section: {
backgroundColor: "#fff",
- borderRadius: 8,
- paddingHorizontal: 15,
- marginTop: 15,
- paddingVertical: 12,
+ borderRadius: 12,
+ padding: 16,
+ marginBottom: 16,
+ shadowColor: "#000",
+ shadowOffset: { width: 0, height: 1 },
+ shadowOpacity: 0.05,
+ shadowRadius: 2,
+ elevation: 2,
},
sectionTitle: {
+ fontSize: 17,
fontWeight: "600",
- fontSize: 16,
- marginBottom: 8,
color: "#333",
+ marginBottom: 16,
+ fontFamily: "PingFang SC",
+ },
+ paymentMethodContainer: {
+ backgroundColor: "#f8f8f8",
+ padding: 12,
+ borderRadius: 8,
+ borderLeftWidth: 4,
+ borderLeftColor: "#002fa7",
},
- paymentMethod: {
+ paymentMethodText: {
fontSize: 15,
- color: "#666",
- marginBottom: 10,
+ color: "#333",
+ fontFamily: "PingFang SC",
},
phoneInputContainer: {
- marginTop: 10,
- marginBottom: 10,
+ marginTop: 16,
},
phoneInputLabel: {
- fontSize: 14,
- color: "#333",
- marginBottom: 5,
+ fontSize: 15,
+ color: "#666",
+ marginBottom: 8,
+ fontFamily: "PingFang SC",
},
phoneInput: {
borderWidth: 1,
- borderColor: "#ccc",
+ borderColor: "#ddd",
borderRadius: 8,
- padding: 10,
- fontSize: 16,
- backgroundColor: "#f9f9f9",
- },
- // Card styles for order details
- card: {
- // backgroundColor: "#ffffff", // Removed, will inherit from section or be transparent
- // borderRadius: 12, // Removed rounded corners
- // marginHorizontal: 15, // Removed to align with parent section padding
- marginTop: 10, // Adjusted margin from the top element
- // padding: 18, // Removed inner padding, rely on section or detailRow padding
- // shadowColor: "#000", // Removed shadow
- // shadowOffset: {
- // width: 0,
- // height: 2,
- // },
- // shadowOpacity: 0.1,
- // shadowRadius: 3.84,
- // elevation: 5, // Removed elevation
- // borderWidth: 1, // Removed border
- // borderColor: "#e0e0e0", // Removed border color
- },
- cardTitle: {
- fontSize: 18,
- fontWeight: "bold",
- color: "#333333",
- marginBottom: 15, // Space below the title
+ padding: 12,
+ fontSize: 15,
+ backgroundColor: "#fff",
fontFamily: "PingFang SC",
},
- detailRow: {
+ infoRow: {
flexDirection: "row",
- // justifyContent: "space-between", // We'll handle spacing differently with icons
- alignItems: "center", // Align items vertically centered
- paddingVertical: 10, // Adjusted vertical padding
+ justifyContent: "space-between",
+ paddingVertical: 12,
borderBottomWidth: 1,
- borderBottomColor: "#f0f0f0", // Lighter separator line
+ borderBottomColor: "#f0f0f0",
},
- detailLabel: {
+ infoLabel: {
fontSize: 15,
- color: "#555555", // Slightly lighter label color
+ color: "#666",
fontFamily: "PingFang SC",
- fontWeight: '500',
- marginLeft: 8, // Add margin to the left of the label, after the icon
- marginRight: 10, // Space between label and value
- flex: 1, // Allow label to take available space before value
},
- detailValue: {
+ infoValue: {
fontSize: 15,
- color: "#333333", // Darker value color
+ color: "#333",
+ textAlign: "right",
+ maxWidth: "60%",
+ fontFamily: "PingFang SC",
+
+ },
+ totalRow: {
+ flexDirection: "row",
+ justifyContent: "space-between",
+ alignItems: "center",
+ paddingVertical: 12,
+ },
+ totalLabel: {
+ fontSize: 16,
+ fontWeight: "600",
+ color: "#333",
+ fontFamily: "PingFang SC",
+ },
+ totalValue: {
+ fontSize: 20,
+ fontWeight: "700",
+ color: "#002fa7",
fontFamily: "PingFang SC",
- textAlign: 'right',
- flexShrink: 1, // Allow text to shrink and wrap
},
});