|
|
|
import { View, Text, TouchableOpacity, StyleSheet, TextInput } from "react-native";
|
|
|
|
import useCreateOrderStore from "../../store/createOrder";
|
|
|
|
import BackIcon from "../../components/BackIcon";
|
|
|
|
import { useNavigation } from "@react-navigation/native";
|
|
|
|
import { useState, useEffect } from "react";
|
|
|
|
|
|
|
|
export const PreviewOrder = () => {
|
|
|
|
const {orderData, setOrderData} = useCreateOrderStore();
|
|
|
|
const navigation = useNavigation();
|
|
|
|
const [phoneNumber, setPhoneNumber] = useState("");
|
|
|
|
const [showPhoneInput, setShowPhoneInput] = useState(false);
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
if (orderData?.payment_method === "Brainnel Pay(Mobile Money)") {
|
|
|
|
setShowPhoneInput(true);
|
|
|
|
} else {
|
|
|
|
setShowPhoneInput(false);
|
|
|
|
}
|
|
|
|
}, [orderData?.payment_method]);
|
|
|
|
|
|
|
|
const handleSubmit = () => {
|
|
|
|
if (showPhoneInput && !phoneNumber) {
|
|
|
|
// Show error or alert if needed
|
|
|
|
console.log("Phone number is required for Mobile Money");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (showPhoneInput) {
|
|
|
|
setOrderData({ ...orderData, mobile_money_phone: phoneNumber });
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log("orderData", orderData);
|
|
|
|
// Add your submission logic here
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
|
|
<View style={styles.container}>
|
|
|
|
<View style={styles.titleContainer}>
|
|
|
|
<View style={styles.backIconContainer}>
|
|
|
|
<TouchableOpacity onPress={() => navigation.goBack()}>
|
|
|
|
<BackIcon size={20} />
|
|
|
|
</TouchableOpacity>
|
|
|
|
</View>
|
|
|
|
|
|
|
|
<Text style={styles.titleHeading}>立即支付</Text>
|
|
|
|
</View>
|
|
|
|
|
|
|
|
{/* Payment Details */}
|
|
|
|
<View style={styles.section}>
|
|
|
|
|
|
|
|
{showPhoneInput && (
|
|
|
|
<View style={styles.phoneInputContainer}>
|
|
|
|
<Text style={styles.phoneInputLabel}>请输入手机号码</Text>
|
|
|
|
<TextInput
|
|
|
|
style={styles.phoneInput}
|
|
|
|
value={phoneNumber}
|
|
|
|
onChangeText={setPhoneNumber}
|
|
|
|
placeholder="输入手机号码"
|
|
|
|
keyboardType="phone-pad"
|
|
|
|
/>
|
|
|
|
</View>
|
|
|
|
)}
|
|
|
|
|
|
|
|
{/* Order Details Card */}
|
|
|
|
<View style={styles.card}>
|
|
|
|
<Text style={styles.cardTitle}>订单详情</Text>
|
|
|
|
<View style={styles.detailRow}>
|
|
|
|
<Text style={styles.detailLabel}>收货地址:</Text>
|
|
|
|
<Text style={styles.detailValue} numberOfLines={2} ellipsizeMode="tail">{orderData?.address || "请选择地址"}</Text>
|
|
|
|
</View>
|
|
|
|
<View style={styles.detailRow}>
|
|
|
|
<Text style={styles.detailLabel}>订单金额:</Text>
|
|
|
|
<Text style={styles.detailValue}>{orderData?.amount ? `${orderData.currency || ''} ${orderData.amount}` : "N/A"}</Text>
|
|
|
|
</View>
|
|
|
|
<View style={styles.detailRow}>
|
|
|
|
<Text style={styles.detailLabel}>运费:</Text>
|
|
|
|
<Text style={styles.detailValue}>{orderData?.shipping_fee ? `${orderData.currency || ''} ${orderData.shipping_fee}` : "N/A"}</Text>
|
|
|
|
</View>
|
|
|
|
{orderData?.whatsapp_phone && (
|
|
|
|
<View style={styles.detailRow}>
|
|
|
|
<Text style={styles.detailLabel}>WhatsApp:</Text>
|
|
|
|
<Text style={styles.detailValue}>{orderData.whatsapp_phone}</Text>
|
|
|
|
</View>
|
|
|
|
)}
|
|
|
|
</View>
|
|
|
|
</View>
|
|
|
|
|
|
|
|
<View style={styles.submitButtonContainer}>
|
|
|
|
<TouchableOpacity
|
|
|
|
style={[
|
|
|
|
styles.primaryButtonStyle,
|
|
|
|
(!showPhoneInput || (showPhoneInput && phoneNumber)) ? {} : styles.disabledButtonStyle
|
|
|
|
]}
|
|
|
|
onPress={handleSubmit}
|
|
|
|
disabled={showPhoneInput && !phoneNumber}
|
|
|
|
>
|
|
|
|
<Text style={styles.buttonText}>确认支付</Text>
|
|
|
|
</TouchableOpacity>
|
|
|
|
</View>
|
|
|
|
</View>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
const styles = StyleSheet.create({
|
|
|
|
container: {
|
|
|
|
flex: 1,
|
|
|
|
backgroundColor: "white",
|
|
|
|
},
|
|
|
|
submitButtonContainer: {
|
|
|
|
paddingRight: 11,
|
|
|
|
paddingLeft: 11,
|
|
|
|
marginTop: 20,
|
|
|
|
marginBottom: 20,
|
|
|
|
},
|
|
|
|
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,
|
|
|
|
},
|
|
|
|
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",
|
|
|
|
},
|
|
|
|
titleContainer: {
|
|
|
|
width: "100%",
|
|
|
|
padding: 15,
|
|
|
|
flexDirection: "row",
|
|
|
|
alignItems: "center",
|
|
|
|
justifyContent: "center",
|
|
|
|
position: "relative",
|
|
|
|
backgroundColor: "#fff",
|
|
|
|
|
|
|
|
},
|
|
|
|
backIconContainer: {
|
|
|
|
position: "absolute",
|
|
|
|
left: 15,
|
|
|
|
backgroundColor: "#fff",
|
|
|
|
|
|
|
|
},
|
|
|
|
titleHeading: {
|
|
|
|
fontWeight: "600",
|
|
|
|
fontSize: 20,
|
|
|
|
lineHeight: 22,
|
|
|
|
fontFamily: "PingFang SC",
|
|
|
|
color: "black",
|
|
|
|
|
|
|
|
},
|
|
|
|
// Order Summary Styles
|
|
|
|
section: {
|
|
|
|
backgroundColor: "#fff",
|
|
|
|
borderRadius: 8,
|
|
|
|
paddingHorizontal: 15,
|
|
|
|
marginTop: 15,
|
|
|
|
paddingVertical: 12,
|
|
|
|
},
|
|
|
|
sectionTitle: {
|
|
|
|
fontWeight: "600",
|
|
|
|
fontSize: 16,
|
|
|
|
marginBottom: 8,
|
|
|
|
color: "#333",
|
|
|
|
},
|
|
|
|
paymentMethod: {
|
|
|
|
fontSize: 15,
|
|
|
|
color: "#666",
|
|
|
|
marginBottom: 10,
|
|
|
|
},
|
|
|
|
phoneInputContainer: {
|
|
|
|
marginTop: 10,
|
|
|
|
marginBottom: 10,
|
|
|
|
},
|
|
|
|
phoneInputLabel: {
|
|
|
|
fontSize: 14,
|
|
|
|
color: "#333",
|
|
|
|
marginBottom: 5,
|
|
|
|
},
|
|
|
|
phoneInput: {
|
|
|
|
borderWidth: 1,
|
|
|
|
borderColor: "#ccc",
|
|
|
|
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
|
|
|
|
fontFamily: "PingFang SC",
|
|
|
|
},
|
|
|
|
detailRow: {
|
|
|
|
flexDirection: "row",
|
|
|
|
justifyContent: "space-between",
|
|
|
|
alignItems: "flex-start", // Align items to the start for multi-line values
|
|
|
|
paddingVertical: 8, // Vertical padding for each row
|
|
|
|
borderBottomWidth: 1,
|
|
|
|
borderBottomColor: "#f0f0f0", // Lighter separator line
|
|
|
|
},
|
|
|
|
detailLabel: {
|
|
|
|
fontSize: 15,
|
|
|
|
color: "#555555", // Slightly lighter label color
|
|
|
|
fontFamily: "PingFang SC",
|
|
|
|
fontWeight: '500',
|
|
|
|
marginRight: 10, // Space between label and value
|
|
|
|
},
|
|
|
|
detailValue: {
|
|
|
|
fontSize: 15,
|
|
|
|
color: "#333333", // Darker value color
|
|
|
|
fontFamily: "PingFang SC",
|
|
|
|
textAlign: 'right',
|
|
|
|
flexShrink: 1, // Allow text to shrink and wrap
|
|
|
|
},
|
|
|
|
});
|