diff --git a/app/constants/productStatus.ts b/app/constants/productStatus.ts
index b2f0419..888827e 100644
--- a/app/constants/productStatus.ts
+++ b/app/constants/productStatus.ts
@@ -13,8 +13,8 @@ export const productStatus: ProductStatus[] = [
// { icon: DocumentClockIcon, text: '付运费', textKey: 'order.status.pay_shipping', status: 6 },
{ icon: DocumentClockIcon, text: '待发货', textKey: 'order.status.waiting_shipment', status: 1 },
{ icon: DocumentApprovedIcon, text: '运输中', textKey: 'order.status.in_transit', status: 2 },
- { icon: DocumentApprovedIcon, text: '代收货', textKey: 'order.status.waiting_receipt', status: 3 },
- { icon: PdfDocumentIcon, text: '已完成', textKey: 'order.status.completed', status: 4 },
- { icon: DocumentClockIcon, text: '已取消', textKey: 'order.status.cancelled', status: 5 },
- { icon: DocumentClockIcon, text: '已退款', textKey: 'order.status.refunded', status: 6 }
+ // { icon: DocumentApprovedIcon, text: '代收货', textKey: 'order.status.waiting_receipt', status: 3 },
+ { icon: PdfDocumentIcon, text: '已完成', textKey: 'order.status.completed', status: 3 },
+ { icon: DocumentClockIcon, text: '已过期', textKey: 'order.status.cancelled', status: 4 },
+ // { icon: DocumentClockIcon, text: '已退款', textKey: 'order.status.refunded', status: 6 }
]
\ No newline at end of file
diff --git a/app/locales/en/translation.json b/app/locales/en/translation.json
index b77d5c3..3d1a7d8 100644
--- a/app/locales/en/translation.json
+++ b/app/locales/en/translation.json
@@ -235,6 +235,7 @@
"order.error.payment_update": "Failed to update payment method",
"order.details": "Order Details",
"order.information": "Order Information",
+ "order.error.add_cart": "Failed to add to cart",
"order.id": "Order ID",
"order.create_time": "Order Time",
"order.shipping_type": "Shipping Method",
diff --git a/app/locales/fr/translation.json b/app/locales/fr/translation.json
index 3855365..8bbeedd 100644
--- a/app/locales/fr/translation.json
+++ b/app/locales/fr/translation.json
@@ -166,6 +166,7 @@
"order.error.payment_update": "Échec de la mise à jour du mode de paiement",
"order.details": "Détails de la commande",
"order.information": "Informations de commande",
+ "order.error.add_cart": "Échec de l'ajout au panier",
"order.id": "ID de commande",
"order.create_time": "Date de commande",
"order.shipping_type": "Méthode d'expédition",
diff --git a/app/screens/CartScreen.tsx b/app/screens/CartScreen.tsx
index c2151d4..fbc1e9f 100644
--- a/app/screens/CartScreen.tsx
+++ b/app/screens/CartScreen.tsx
@@ -822,16 +822,16 @@ export const CartScreen = () => {
- {/* Actual price - right below discount price */}
-
-
- {sku.price}
-
-
- FCFA
-
-
-
+ {/* Actual price - right below discount price */}
+
+
+ {sku.price}
+
+
+ {sku.currency}
+
+
+
{/* 3. Quantity controls on the right */}
@@ -1250,14 +1250,14 @@ const styles = StyleSheet.create({
alignItems: "center",
},
productCodeLabel: {
- fontSize: fontSize(20),
+ fontSize: fontSize(16),
lineHeight: 22,
fontFamily: "Segoe UI",
fontWeight: "700",
color: "#FF5100",
},
productDetailsTextStyle: {
- fontSize: fontSize(11),
+ fontSize: fontSize(10),
fontFamily: "Segoe UI",
fontWeight: "700",
color: "#FF5100",
@@ -1279,6 +1279,7 @@ const styles = StyleSheet.create({
fontFamily: "PingFang SC",
fontWeight: "600",
color: "#9a9a9a",
+ textDecorationLine: 'line-through',
},
vipContainer: {
position: 'relative',
@@ -1587,13 +1588,13 @@ const styles = StyleSheet.create({
color: "black",
},
highlightedText1: {
- fontSize: fontSize(24),
+ fontSize: fontSize(20),
fontFamily: "Segoe UI",
fontWeight: "700",
color: "black",
},
priceLabel: {
- fontSize: fontSize(11),
+ fontSize: fontSize(10),
fontFamily: "Segoe UI",
fontWeight: "700",
color: "black",
diff --git a/app/screens/HomeScreen.tsx b/app/screens/HomeScreen.tsx
index 32ac1f2..a902832 100644
--- a/app/screens/HomeScreen.tsx
+++ b/app/screens/HomeScreen.tsx
@@ -62,7 +62,6 @@ type SubcategoryItem = {
type CategoryContentType = {
[key: string]: SubcategoryItem[];
};
-
// 懒加载图片组件 - 改进版本
const LazyImage = React.memo(
({
@@ -76,16 +75,13 @@ const LazyImage = React.memo(
}) => {
const [isLoaded, setIsLoaded] = useState(false);
const [hasError, setHasError] = useState(false);
-
const onLoad = useCallback(() => {
setIsLoaded(true);
}, []);
-
const onError = useCallback(() => {
setHasError(true);
setIsLoaded(true); // Also mark as loaded on error to remove placeholder
}, []);
-
return (
{/* Show placeholder while image is loading */}
@@ -98,7 +94,6 @@ const LazyImage = React.memo(
]}
/>
)}
-
{/* Show error state if image failed to load */}
{hasError && (
)}
-
{/* Actual image */}
{
// 创建动画值
const shimmerAnim = useRef(new Animated.Value(0)).current;
-
// 设置动画效果
useEffect(() => {
const shimmerAnimation = Animated.loop(
@@ -144,20 +136,16 @@ const ProductSkeleton = React.memo(() => {
useNativeDriver: true,
})
);
-
shimmerAnimation.start();
-
return () => {
shimmerAnimation.stop();
};
}, []);
-
// 定义动画插值
const shimmerTranslate = shimmerAnim.interpolate({
inputRange: [0, 1],
outputRange: [-200, 200],
});
-
return (
@@ -219,7 +207,6 @@ const ProductSkeleton = React.memo(() => {
);
});
-
// Define the styles type to fix TypeScript errors
type StylesType = {
safeArea: ViewStyle;
@@ -273,6 +260,7 @@ type StylesType = {
productCardList: ViewStyle;
productCardGroup: ViewStyle;
beautyProductCard1: ViewStyle;
+ productCardGroup1: ViewStyle;
beautyCardContainer1: ViewStyle;
vipButtonContainer: ViewStyle;
vipButton: ViewStyle;
@@ -308,7 +296,6 @@ type StylesType = {
imagePickerCancelButton: ViewStyle;
imagePickerCancelText: TextStyle;
};
-
export const HomeScreen = () => {
const [activeIndex, setActiveIndex] = useState(0);
const screenWidth = Dimensions.get("window").width;
@@ -339,7 +326,6 @@ export const HomeScreen = () => {
const [galleryUsed, setGalleryUsed] = useState(false);
const [hotTerms, setHotTerms] = useState([]);
const [isLoadingHotTerms, setIsLoadingHotTerms] = useState(false);
-
// 直接在组件中实现分页加载逻辑
const [products, setProducts] = useState([]);
const [loading, setLoading] = useState(true);
@@ -537,7 +523,6 @@ export const HomeScreen = () => {
setRefreshing(false);
}
}, [hotTerms, getRandomKeyword, fetchInitialProducts]);
-
const handleProductPress = useCallback(
(item: Product) => {
InteractionManager.runAfterInteractions(() => {
@@ -550,7 +535,6 @@ export const HomeScreen = () => {
},
[navigation]
);
-
const categories = [
"Tous",
"Bijoux",
@@ -564,7 +548,6 @@ export const HomeScreen = () => {
"Hygiène et Soins pour le corps",
"Maquillage",
];
-
const defaultSubcategories: SubcategoryItem[] = [
{ id: 1, title: "Jewelry", icon: "diamond-outline" },
{ id: 2, title: "Earrings", icon: "ear-outline" },
@@ -573,7 +556,6 @@ export const HomeScreen = () => {
{ id: 5, title: "Earrings", icon: "ear-outline" },
{ id: 6, title: "Bracelet", icon: "watch-outline" },
];
-
const categoryContent: CategoryContentType = {
Tous: [],
Bijoux: defaultSubcategories,
@@ -587,31 +569,26 @@ export const HomeScreen = () => {
"Hygiène et Soins pour le corps": defaultSubcategories,
Maquillage: defaultSubcategories,
};
-
useEffect(() => {
if (!categoryContent[selectedHorizontalCategory]) {
setSelectedHorizontalCategory("Tous");
}
}, [selectedHorizontalCategory]);
-
const navigateToSearch = useCallback(() => {
InteractionManager.runAfterInteractions(() => {
navigation.navigate("Search");
});
}, [navigation]);
-
const navigateToShippingDetails = useCallback(() => {
InteractionManager.runAfterInteractions(() => {
navigation.navigate("ShippingDetailsSection");
});
}, [navigation]);
-
const navigateToInquiry = useCallback(() => {
InteractionManager.runAfterInteractions(() => {
navigation.navigate("InquiryScreen");
});
}, [navigation]);
-
const scrollToCategory = (category: string) => {
const categoryIndex = categories.findIndex((c) => c === category);
if (categoryIndex !== -1 && horizontalScrollRef.current) {
@@ -626,7 +603,6 @@ export const HomeScreen = () => {
});
}
};
-
const renderProductItem = ({ item }: { item: Product }) => (
handleProductPress(item)}
@@ -645,7 +621,6 @@ export const HomeScreen = () => {
)}
-
{userStore.user?.user_id && (
@@ -677,7 +652,6 @@ export const HomeScreen = () => {
);
-
const renderSkeletonGrid = useCallback(() => {
const skeletonArray = Array(8).fill(null);
return (
@@ -694,7 +668,6 @@ export const HomeScreen = () => {
);
}, []);
-
const cleanupImagePickerCache = async () => {
try {
if (Platform.OS === 'web') {
@@ -712,7 +685,6 @@ export const HomeScreen = () => {
setGalleryUsed(false);
}
};
-
const handleChooseFromGallery = useCallback(async () => {
setShowImagePickerModal(false);
setTimeout(async () => {
@@ -722,14 +694,12 @@ export const HomeScreen = () => {
console.log("相册权限被拒绝");
return;
}
-
const result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.Images,
allowsEditing: true,
aspect: [4, 3],
quality: 1,
});
-
if (!result.canceled && result.assets && result.assets.length > 0) {
await cleanupImagePickerCache();
navigation.navigate("ImageSearchResultScreen", {
@@ -743,7 +713,6 @@ export const HomeScreen = () => {
}
}, 500);
}, []);
-
const handleTakePhoto = useCallback(async () => {
setShowImagePickerModal(false);
setTimeout(async () => {
@@ -753,14 +722,12 @@ export const HomeScreen = () => {
console.log("相机权限被拒绝");
return;
}
-
const result = await ImagePicker.launchCameraAsync({
mediaTypes: ImagePicker.MediaTypeOptions.Images,
allowsEditing: true,
aspect: [4, 3],
quality: 1,
});
-
if (!result.canceled && result.assets && result.assets.length > 0) {
await cleanupImagePickerCache();
navigation.navigate("ImageSearchResultScreen", {
@@ -774,35 +741,38 @@ export const HomeScreen = () => {
}
}, 500);
}, []);
-
const resetAppState = useCallback(() => {
setGalleryUsed(false);
cleanupImagePickerCache();
Alert.alert("已重置", "现在您可以使用相机功能了");
}, []);
-
+ // 优化轮播图切换回调
+ const handleCarouselSnap = useCallback((index: number) => {
+ setActiveIndex(index);
+ }, []);
const renderItem = ({ item, index }: { item: Product; index: number }) => {
if (index >= products.length && index < products.length + loadingPlaceholders) {
return ;
}
return renderProductItem({ item });
};
-
- const renderHeader = () => (
+ const renderHeader = useCallback(() => (
<>
(
navigation.navigate(item.add)}
+ activeOpacity={1}
key={item.imgUrl}
style={{
flex: 1,
@@ -822,6 +792,17 @@ export const HomeScreen = () => {
)}
/>
+
+ {data.map((_, index) => (
+
+ ))}
+
{
) : null}
>
- );
-
+ ), [activeIndex, selectedHorizontalCategory]);
return (
@@ -956,30 +936,8 @@ export const HomeScreen = () => {
{renderSkeletonGrid()}
) : (
-
- (item?.offer_id ? `${item.offer_id}-${currentPage}-${index}` : `placeholder-${currentPage}-${index}`)
- }
- contentContainerStyle={{
- paddingBottom: 15,
- backgroundColor: "transparent",
- }}
- ListHeaderComponent={renderHeader}
- onEndReached={handleLoadMore}
- onEndReachedThreshold={3}
- ListFooterComponent={() => (
- !hasMore && !loadingPlaceholders ? (
-
- 没有更多数据了
-
- ) : null
- )}
refreshControl={
{
progressBackgroundColor="transparent"
/>
}
- />
+ onScroll={({ nativeEvent }) => {
+ const { layoutMeasurement, contentOffset, contentSize } = nativeEvent;
+ const paddingToBottom = 20;
+ if (layoutMeasurement.height + contentOffset.y >= contentSize.height - paddingToBottom) {
+ handleLoadMore();
+ }
+ }}
+ scrollEventThrottle={400}
+ >
+ {/* 轮播图区域 */}
+
+ (
+ navigation.navigate(item.add)}
+ activeOpacity={1}
+ key={item.imgUrl}
+ style={{
+ flex: 1,
+ justifyContent: "center",
+ alignItems: "center",
+ backgroundColor: "#f2f2f2",
+ borderRadius: 0,
+ overflow: "hidden",
+ }}
+ >
+
+
+ )}
+ />
+
+ {data.map((_, index) => (
+
+ ))}
+
+
+
+
+ {t("homePage.searchPlaceholder")}
+ setShowImagePickerModal(true)}
+ >
+
+
+
+
+
+
+ {/* Banner区域 */}
+
+
+
+
+
+ navigation.navigate("TikTokScreen")}
+ >
+
+
+
+
+
+
+
+
+ {/* 分类区域 */}
+
+
+
+ {categories.map((category, index) => (
+ setSelectedHorizontalCategory(category)}
+ >
+
+ {t(`homePage.${category.toLowerCase()}`)}
+
+
+ ))}
+
+
+
+
+ setShowCategoryModal(true)}>
+
+
+
+
+
+ {/* 子分类区域 */}
+ {selectedHorizontalCategory &&
+ categoryContent[selectedHorizontalCategory] &&
+ categoryContent[selectedHorizontalCategory].length > 0 ? (
+
+
+ {categoryContent[selectedHorizontalCategory].map((item) => (
+ {
+ // Handle subcategory selection
+ }}
+ >
+
+
+
+ {item.title}
+
+ ))}
+
+
+ ) : null}
+
+ {/* 产品网格 */}
+
+
+ {(() => {
+ const allItems = [...products, ...Array(loadingPlaceholders).fill(null)];
+ const rows = [];
+
+ for (let i = 0; i < allItems.length; i += 2) {
+ const leftItem = allItems[i];
+ const rightItem = allItems[i + 1];
+
+ rows.push(
+
+ {/* 左侧商品 */}
+ {leftItem ? (
+ i >= products.length ? (
+
+ ) : (
+ renderProductItem({ item: leftItem })
+ )
+ ) : null}
+
+ {/* 右侧商品 */}
+ {rightItem ? (
+ i + 1 >= products.length ? (
+
+ ) : (
+ renderProductItem({ item: rightItem })
+ )
+ ) : (
+
+ )}
+
+ );
+ }
+
+ return rows;
+ })()}
+
+
+ {/* 底部提示 */}
+ {!hasMore && !loadingPlaceholders && (
+
+ 没有更多数据了
+
+ )}
+
+
)}
-
{
-
{
重置相机功能
)}
-
-
{
{t("homePage.chooseFromGallery")}
-
-
setShowImagePickerModal(false)}
@@ -1385,10 +1566,16 @@ const styles = StyleSheet.create({
paddingTop: 0,
},
productCardGroup: {
+ flexDirection: "row",
justifyContent: "space-between",
marginBottom: 15,
paddingHorizontal: 15,
},
+ productCardGroup1:{
+ flexDirection: "row",
+ justifyContent: "space-between",
+ marginBottom: 15,
+ },
beautyProductCard1: {
width: "48%",
},
diff --git a/app/screens/ProductCard.tsx b/app/screens/ProductCard.tsx
index a26cc32..0630e2f 100644
--- a/app/screens/ProductCard.tsx
+++ b/app/screens/ProductCard.tsx
@@ -146,7 +146,7 @@ const ProductCard: React.FC = ({
category_id: product?.category_id || 0,
price: item.offer_price || price || 0,
all_price: totalPrice || 0,
- currency: currency || "",
+ currency: product.currency || "",
sku_id: item?.sku_id || 0,
quantity: (item?.size as number) || 0,
product_name: product?.subject || "",
@@ -190,7 +190,7 @@ const ProductCard: React.FC = ({
category_id: product?.category_id || 0,
price: item.offer_price || price || 0,
all_price: totalPrice || 0,
- currency: currency || "",
+ currency: product.currency || "",
sku_id: item?.sku_id || 0,
quantity: (item?.size as number) || 0,
product_name: product?.subject || "",
@@ -277,7 +277,7 @@ const ProductCard: React.FC = ({
{price}
- {currency}
+ {product.currency}
@@ -774,7 +774,7 @@ const ProductCard: React.FC = ({
总价:
- {totalPrice.toFixed(2)} {currency}
+ {totalPrice.toFixed(2)} {product.currency}
diff --git a/app/screens/productStatus/OrderDatails.tsx b/app/screens/productStatus/OrderDatails.tsx
index 0474720..3cb7ab4 100644
--- a/app/screens/productStatus/OrderDatails.tsx
+++ b/app/screens/productStatus/OrderDatails.tsx
@@ -25,7 +25,11 @@ import fontSize from "../../utils/fontsizeUtils";
import { useNavigation } from "@react-navigation/native";
import { NativeStackNavigationProp } from "@react-navigation/native-stack";
import { useRoute, RouteProp } from "@react-navigation/native";
-import { ordersApi, OrderDetailsType } from "../../services/api/orders";
+import {
+ ordersApi,
+ OrderDetailsType,
+ OrderItemDetails,
+} from "../../services/api/orders";
import { payApi, PaymentMethod } from "../../services/api/payApi";
import useUserStore from "../../store/user";
import OrderIcon from "../../components/OrderIcon";
@@ -44,8 +48,8 @@ import CircleOutlineIcon from "../../components/CircleOutlineIcon";
import CheckIcon from "../../components/CheckIcon";
import payMap from "../../utils/payMap";
import PhoneNumberInputModal from "../../screens/BalanceScreen/PhoneNumberInputModal";
+import { cartApi } from "../../services/api/cart";
import IconComponent from "../../components/IconComponent";
-
// 定义选项类型
interface PaymentOption {
id: string;
@@ -189,8 +193,9 @@ export const OrderDetails = () => {
>();
const [orderDetails, setOrderDetails] = useState();
const [isLoading, setIsLoading] = useState(true);
- const { deleteOrder, changeOrder, updateOrderShippingInfo } =
+ const { deleteOrder, changeOrder, updateOrderShippingInfo,cancelOrder,confirmOrder } =
useOrderListStore();
+
const [showPaymentModal, setShowPaymentModal] = useState(false);
const [selectedPayment, setSelectedPayment] = useState(null);
const [currentTab, setCurrentTab] = useState("online");
@@ -557,6 +562,45 @@ export const OrderDetails = () => {
}
};
+ // 添加购物车
+
+ const addToCart = async (items: OrderItemDetails[]) => {
+ const groupedData: {
+ [key: string]: {
+ offer_id: number;
+ skus: { quantity: number; sku_id: string }[];
+ };
+ } = {};
+
+ items.forEach((item) => {
+ const offerId = item.offer_id.toString();
+
+ if (!groupedData[offerId]) {
+ groupedData[offerId] = {
+ offer_id: item.offer_id,
+ skus: [],
+ };
+ }
+
+ groupedData[offerId].skus.push({
+ quantity: item.quantity,
+ sku_id: item.sku_id.toString(),
+ });
+ });
+
+ // 转换为数组格式
+ const result = Object.values(groupedData)[0];
+ try{
+ setIsLoading(true);
+ await cartApi(result);
+ setIsLoading(false);
+ Alert.alert(t("order.add_cart_success"));
+ } catch (error) {
+ setIsLoading(false);
+ Alert.alert(t("error"), t("order.error.add_cart"));
+ }
+ };
+
// 添加确定按钮禁用逻辑函数
const isConfirmButtonDisabled = () => {
// 如果没有选择支付方式,禁用按钮
@@ -834,7 +878,10 @@ export const OrderDetails = () => {
-
+ addToCart(orderDetails.items)}
+ >
@@ -845,6 +892,7 @@ export const OrderDetails = () => {
+ {/* {route.params.status} */}
{/* 价格信息 */}
@@ -895,11 +943,14 @@ export const OrderDetails = () => {
{/* 代付款 */}
- {orderDetails.order_status === 0 && (
+ {route.params.status === 0 && (
setShowCancelModal(true)}
+ onPress={() => {
+ cancelOrder(route.params.orderId);
+ navigation.goBack();
+ }}
>
{t("order.cancel")}
@@ -916,19 +967,19 @@ export const OrderDetails = () => {
)}
{/* 待发货 */}
- {orderDetails.order_status === 1 && (
+ {route.params.status === 1 && (
{
- callPhone("15903995548");
+ callPhone(orderDetails.whatsapp_number);
}}
>
{t("order.contact_shipping")}
- {
changeOrder(route.params.orderId, 2);
@@ -938,11 +989,11 @@ export const OrderDetails = () => {
{t("order.cancel")}
-
+ */}
)}
{/* 代收货 */}
- {orderDetails.order_status === 2 && (
+ {route.params.status === 2 && (
{
{
- updateOrderShippingInfo(route.params.orderId, {
- shipping_status: 0,
- shipping_info: {
- shipping_company: "string",
- shipping_no: "string",
- shipping_info: {},
- },
- });
+ confirmOrder(route.params.orderId);
+
navigation.goBack();
}}
>
@@ -973,32 +1018,36 @@ export const OrderDetails = () => {
)}
{/* 已完成 */}
- {orderDetails.order_status === 3 && (
-
- {
- deleteOrder(route.params.orderId);
- navigation.goBack();
- }}
- >
-
- {t("order.cancel")}
-
-
-
-
- {t("order.pay_now")}
-
-
+ {route.params.status === 3 && (
+
+ //
+ // {
+ // addToCart(orderDetails.items);
+ // // navigation.goBack();
+ // }}
+ // >
+ //
+ // {t("order.add_to_cart")}
+ //
+ //
+ //
+ //
+ // {t("order.reorder")}
+ //
+ //
+ //
)}
{/* 已取消 */}
- {orderDetails.order_status === 4 && (
+ {route.params.status === 4 && (
{}}
+ onPress={() => {
+ addToCart(orderDetails.items);
+ }}
>
{t("order.add_to_cart")}
diff --git a/app/services/api/cart.ts b/app/services/api/cart.ts
index 0179aab..7a8f93a 100644
--- a/app/services/api/cart.ts
+++ b/app/services/api/cart.ts
@@ -2,8 +2,8 @@ import apiService from './apiClient';
export interface AddToCartParams {
- offer_id: number;
- skus: {sku_id:number,quantity:number}[]
+ offer_id: number | string;
+ skus: {sku_id:number | string,quantity:number}[]
}
export interface GetCartListResponse {
@@ -32,6 +32,7 @@ export interface CartSku {
selected: number,
currency:string,
sku_id: number,
+ original_min_price:number,
attributes:attributes[],
}
export interface GetCartList {
diff --git a/app/services/api/orders.ts b/app/services/api/orders.ts
index ff66e94..3c28ac8 100644
--- a/app/services/api/orders.ts
+++ b/app/services/api/orders.ts
@@ -284,7 +284,7 @@ interface SkuAttributesDetails {
sku_image: string;
}
-interface OrderItemDetails {
+export interface OrderItemDetails {
offer_id: number;
cart_item_id: number | null;
sku_id: number;
@@ -310,6 +310,7 @@ export interface OrderDetailsType {
domestic_shipping_fee: number;
actual_amount: number;
currency:string,
+ whatsapp_number:string,
discount_amount: number;
shipping_fee: number;
address_id: number;
@@ -483,5 +484,10 @@ export const ordersApi = {
// 取消订单
cancelOrder: (order_id: string) =>
- apiService.post(`/api/orders/${order_id}/cancel/`),
+ apiService.post(`/api/orders/${order_id}/cancel/`),
+
+ // 确定收货
+ confirmOrder: (order_id: string) =>
+ apiService.patch(`/api/orders/${order_id}/shipping/`,{
+ }),
};
diff --git a/app/services/api/productApi.ts b/app/services/api/productApi.ts
index 1102af1..abd7f74 100644
--- a/app/services/api/productApi.ts
+++ b/app/services/api/productApi.ts
@@ -56,6 +56,7 @@ export type Products = Product[]
"value_trans_en": string,
"sku_image_url": string,
'has_color'?: boolean,
+ currency:string
size?:number,
list:Sku[],
@@ -85,6 +86,7 @@ export type Products = Product[]
export interface ProductDetailParams {
"offer_id": 0,
+ currency:string
"category_id": 0,
"price": number | string,
"subject": "string",
diff --git a/app/store/burialPoint.ts b/app/store/burialPoint.ts
index cd102b2..e854223 100644
--- a/app/store/burialPoint.ts
+++ b/app/store/burialPoint.ts
@@ -194,7 +194,7 @@ const useBurialPointStore = create((set, get) => ({
logLogin: (isSuccess = true, loginMethod = "phone") => {
const loginEvent: BurialEvent = {
event_name: "login",
- page_name: null,
+ page_name: "login",
referre_page: null,
event_properties: [
{
@@ -212,7 +212,7 @@ const useBurialPointStore = create((set, get) => ({
logRegister: (isSuccess = true, registerMethod = "phone") => {
const registerEvent: BurialEvent = {
event_name: "register",
- page_name: null,
+ page_name: "register",
referre_page: null,
event_properties: [
{
@@ -229,8 +229,8 @@ const useBurialPointStore = create((set, get) => ({
// 记录浏览商品事件埋点
logViewProduct: (productInfo: ProductProperty, fromPage = "home") => {
const viewProductEvent: BurialEvent = {
- event_name: "product_view",
- page_name: "ProductDetail",
+ event_name: "product",
+ page_name: "product",
referre_page: fromPage,
event_properties: [productInfo]
};
@@ -258,8 +258,8 @@ const useBurialPointStore = create((set, get) => ({
// 记录填写地址信息事件埋点
logAddressInfo: (addressInfo: Omit, fromPage = "cart") => {
const addressEvent: BurialEvent = {
- event_name: "fill_information",
- page_name: "PreviewAddress",
+ event_name: "address",
+ page_name: "address",
referre_page: fromPage,
event_properties: [
{
@@ -275,8 +275,8 @@ const useBurialPointStore = create((set, get) => ({
// 记录物流信息确认事件埋点
logShippingConfirm: (shippingInfo: Omit, fromPage = "address") => {
const shippingEvent: BurialEvent = {
- event_name: "shipping_confirm",
- page_name: "ShippingFee",
+ event_name: "shipping",
+ page_name: "shipping",
referre_page: fromPage,
event_properties: [
{
@@ -292,8 +292,8 @@ const useBurialPointStore = create((set, get) => ({
// 记录支付方式确认事件埋点
logPaymentConfirm: (paymentInfo: Omit, fromPage = "shipping") => {
const paymentEvent: BurialEvent = {
- event_name: "payment_confirm",
- page_name: "PaymentMethod",
+ event_name: "payment",
+ page_name: "payment",
referre_page: fromPage,
event_properties: [
{
@@ -309,8 +309,8 @@ const useBurialPointStore = create((set, get) => ({
// 记录预览订单事件埋点
logPreviewOrder: (fromPage = "pay_method") => {
const previewEvent: BurialEvent = {
- event_name: "preview_order",
- page_name: "PreviewOrder",
+ event_name: "order",
+ page_name: "order",
referre_page: fromPage,
event_properties: [
{
@@ -325,8 +325,8 @@ const useBurialPointStore = create((set, get) => ({
// 记录支付结账事件埋点
logCheckout: (checkoutInfo: Omit, fromPage = "perview") => {
const checkoutEvent: BurialEvent = {
- event_name: "check_out",
- page_name: "pay",
+ event_name: "checkout",
+ page_name: "checkout",
referre_page: fromPage,
event_properties: [
{
@@ -342,8 +342,8 @@ const useBurialPointStore = create((set, get) => ({
// 记录添加购物车事件埋点
logAddToCart: (cartInfo: Omit, fromPage = "search") => {
const addToCartEvent: BurialEvent = {
- event_name: "add_to_cart",
- page_name: "add_to_cart",
+ event_name: "addToCart",
+ page_name: "addToCart",
referre_page: fromPage,
event_properties: [
{
diff --git a/app/store/orderList.ts b/app/store/orderList.ts
index 0c90da9..bd0cbcb 100644
--- a/app/store/orderList.ts
+++ b/app/store/orderList.ts
@@ -1,65 +1,101 @@
-import { create } from 'zustand';
-import { ordersApi, PaginatedOrderResponse, PaginatedOrderRequest,UpdateOrderShippingInfo} from '../services/api/orders';
+import { create } from "zustand";
+import {
+ ordersApi,
+ PaginatedOrderResponse,
+ PaginatedOrderRequest,
+ UpdateOrderShippingInfo,
+} from "../services/api/orders";
interface OrderListState {
- orders: PaginatedOrderResponse,
- getAllOrders: (data: PaginatedOrderRequest,page:number) => Promise,
- deleteOrder: (orderId: string) => Promise,
- changeOrder: (orderId: string,status:number) => Promise,
- updateOrderShippingInfo: (orderId: string,data:UpdateOrderShippingInfo) => Promise,
+ orders: PaginatedOrderResponse;
+ getAllOrders: (data: PaginatedOrderRequest, page: number) => Promise;
+ deleteOrder: (orderId: string) => Promise;
+ changeOrder: (orderId: string, status: number) => Promise;
+ updateOrderShippingInfo: (
+ orderId: string,
+ data: UpdateOrderShippingInfo
+ ) => Promise;
+ cancelOrder: (orderId: string) => Promise;
+ confirmOrder: (orderId: string) => Promise;
}
export const useOrderListStore = create((set, get) => ({
- orders: {
- items: [],
- total: 0,
- page: 1,
- page_size: 10,
- },
+ orders: {
+ items: [],
+ total: 0,
+ page: 1,
+ page_size: 10,
+ },
- getAllOrders: async (data: PaginatedOrderRequest,page:number) => {
- const response = await ordersApi.getAllOrders(data);
- set((state) => ({
- orders: {
- ...response,
- items: page === 1
- ? response.items
- : [...state.orders.items, ...response.items],
- }
- }));
- },
+ getAllOrders: async (data: PaginatedOrderRequest, page: number) => {
+ const response = await ordersApi.getAllOrders(data);
+ set((state) => ({
+ orders: {
+ ...response,
+ items:
+ page === 1
+ ? response.items
+ : [...state.orders.items, ...response.items],
+ },
+ }));
+ },
- deleteOrder: async (orderId: string) => {
- await ordersApi.deleteOrder(orderId);
- set((state) => ({
- orders: {
- ...state.orders,
- items: state.orders.items.filter(item => item.order_id !== orderId),
- total: state.orders.total - 1
- }
- }));
- },
+ deleteOrder: async (orderId: string) => {
+ await ordersApi.deleteOrder(orderId);
+ set((state) => ({
+ orders: {
+ ...state.orders,
+ items: state.orders.items.filter((item) => item.order_id !== orderId),
+ total: state.orders.total - 1,
+ },
+ }));
+ },
- changeOrder: async (orderId: string,status:number) => {
- await ordersApi.changeOrder(orderId,status);
- set((state) => ({
- orders: {
- ...state.orders,
- items: state.orders.items.filter(item => item.order_id !== orderId),
- total: state.orders.total - 1
- }
- }));
- },
+ changeOrder: async (orderId: string, status: number) => {
+ await ordersApi.changeOrder(orderId, status);
+ set((state) => ({
+ orders: {
+ ...state.orders,
+ items: state.orders.items.filter((item) => item.order_id !== orderId),
+ total: state.orders.total - 1,
+ },
+ }));
+ },
- updateOrderShippingInfo: async (orderId: string,data:UpdateOrderShippingInfo) => {
- await ordersApi.updateOrderShippingInfo(orderId,data);
- set((state) => ({
- orders: {
- ...state.orders,
- items: state.orders.items.filter(item => item.order_id !== orderId),
- total: state.orders.total - 1
- }
- }));
- },
-}));
+ updateOrderShippingInfo: async (
+ orderId: string,
+ data: UpdateOrderShippingInfo
+ ) => {
+ await ordersApi.updateOrderShippingInfo(orderId, data);
+ set((state) => ({
+ orders: {
+ ...state.orders,
+ items: state.orders.items.filter((item) => item.order_id !== orderId),
+ total: state.orders.total - 1,
+ },
+ }));
+ },
+ // 取消订单
+ cancelOrder: async (orderId: string) => {
+ set((state) => ({
+ orders: {
+ ...state.orders,
+ items: state.orders.items.filter((item) => item.order_id !== orderId),
+ total: state.orders.total - 1,
+ },
+ }));
+ await ordersApi.cancelOrder(orderId);
+ },
+ // 确定收货
+ confirmOrder: async (orderId: string) => {
+ set((state) => ({
+ orders: {
+ ...state.orders,
+ items: state.orders.items.filter((item) => item.order_id !== orderId),
+ total: state.orders.total - 1,
+ },
+ }));
+ await ordersApi.confirmOrder(orderId);
+ },
+}));
diff --git a/app/utils/languageUtils.ts b/app/utils/languageUtils.ts
index 5dab337..9342fbc 100644
--- a/app/utils/languageUtils.ts
+++ b/app/utils/languageUtils.ts
@@ -55,3 +55,31 @@ export const getSkuTransLanguage = >(data: T): str
// 返回匹配的翻译值,如果没有匹配则返回法语
return (data[matchedField || 'value_trans'] as string) || '';
};
+
+
+
+export const getOrderTransLanguage = >(data: T): string => {
+ // 获取当前i18n语言
+ const currentLang = getCurrentLanguage();
+
+ // 特殊处理中文
+ if (currentLang === 'zh' && 'value' in data) {
+ return data.value as string;
+ }
+
+ // 获取所有subject_trans开头的字段
+ const translationFields = Object.keys(data).filter(key =>
+ key.startsWith('product_name')
+ );
+
+ // 查找匹配的字段
+ const matchedField = translationFields.find(field => {
+ // 从字段名中提取语言代码
+ const langCode = field.replace('product_name', '');
+ // 如果没有后缀,则为法语
+ return langCode === '' ? currentLang === 'fr' : langCode === currentLang;
+ });
+
+ // 返回匹配的翻译值,如果没有匹配则返回法语
+ return (data[matchedField || 'product_name'] as string) || '';
+};
diff --git a/event.js b/event.js
new file mode 100644
index 0000000..22767cd
--- /dev/null
+++ b/event.js
@@ -0,0 +1,197 @@
+const eventData = {
+ user_id: 11,
+ device_id: "ios",
+ version: "1747643239421-2wi8sr8yr",
+ session_id: "1747643239421-g28qurlzy",
+ event_list: [
+ {
+ event_name: "launch", // app启动
+ page_name: null,
+ event_properties: [
+ {
+ is_open: 1, // 1: 正常打开 0: app崩溃
+ timestamp: "2025-05-19 08:27:21",
+ },
+ ],
+ },
+ {
+ event_name: "login", // 登录
+ page_name: "login", // 登录页面
+ event_properties: [
+ {
+ is_login: 1,
+ login_method: "phone", // facebook, google, phone, email, apple
+ user_name: "1234567890", // 用户名称
+ timestamp: "2025-05-19 08:27:21",
+ },
+ ],
+ },
+ {
+ event_name: "register", // 注册
+ page_name: "register", // 注册页面
+ event_properties: [
+ {
+ is_register: 1,
+ user_name: "1234567890", // 用户名称
+ register_method: "phone", // facebook, google, phone, email, apple
+ timestamp: "2025-05-19 08:27:21",
+ },
+ ],
+ },
+ {
+ event_name: "search", // 搜索
+ page_name: "search", // 搜索页面
+ event_properties: [
+ {
+ search_keyword: "1234567890", // 搜索关键词
+ timestamp: "2025-05-19 08:27:21",
+ },
+ ],
+ },
+ {
+ event_name: "product", // 商品
+ page_name: "product", // 商品页面
+ event_properties: [
+ {
+ offer_id: 892906753556, // 商品ID
+ category_id: 1037036, // 商品分类ID
+ price: 2.17, // 商品价格
+ currency: "FCFA", // FCFA, USD, CDF,CFA,EUR,
+ timestamp: "2025-05-19 08:27:21",
+ product_name: "瑜伽服女夏天排汗瑜伽服大码胖速干衣跑步套装女晨跑运动套装女", // 商品名称
+ product_img:
+ "https://cbu01.alicdn.com/img/ibank/O1CN01KvfDVh1UL3CWndJ89_!!2219347832500-0-cib.jpg", // 商品图片
+ },
+ ],
+ },
+ {
+ event_name: "category", // 分类
+ page_name: "category", // 分类页面
+ event_properties: [
+ {
+ category_id: "1234567890", // 分类ID
+ timestamp: "2025-05-19 08:27:21",
+ category_name: "食品酒水", // 分类名称
+ level: 1, // 分类级别
+ },
+ ],
+ },
+ {
+ event_name: "productList", // 商品列表
+ page_name: "productList", // 商品列表页面
+ event_properties: [
+ {
+ category_id: "133", // 分类ID
+ category_name: "农业用品", // 分类名称
+ timestamp: "2025-05-19 08:27:21",
+ },
+ ],
+ },
+ {
+ event_name: "addToCart", // 添加到购物车
+ page_name: "addToCart", // 添加到购物车页面
+ event_properties: [
+ {
+ offer_id: 892906753556, // 商品ID
+ category_id: 1037036, // 商品分类ID
+ price: 2.17, // 商品价格
+ quality: 1, // 商品数量
+ currency: "FCFA", // FCFA, USD, CDF,CFA,EUR,
+ timestamp: "2025-05-19 08:27:21",
+ product_name: "瑜伽服女夏天排汗瑜伽服大码胖速干衣跑步套装女晨跑运动套装女", // 商品名称
+ product_img:
+ "https://cbu01.alicdn.com/img/ibank/O1CN01KvfDVh1UL3CWndJ89_!!2219347832500-0-cib.jpg", // 商品图片
+ },
+ {
+ offer_id: 892906753557, // 商品ID
+ category_id: 1037036, // 商品分类ID
+ price: 2.17, // 商品价格
+ quality: 2, // 商品数量
+ currency: "FCFA", // FCFA, USD, CDF,CFA,EUR,
+ timestamp: "2025-05-19 08:27:21",
+ product_name: "瑜伽服女夏天排汗瑜伽服大码胖速干衣跑步套装女晨跑运动套装女", // 商品名称
+ product_img:
+ "https://cbu01.alicdn.com/img/ibank/O1CN01KvfDVh1UL3CWndJ89_!!2219347832500-0-cib.jpg",
+ },
+ ],
+ },
+ {
+ event_name: "address", // 地址
+ page_name: "address", // 地址页面
+ event_properties: [
+ {
+ last_name: "san", // 姓
+ first_name: "zhang", // 名
+ country: "chinese", // 国家
+ phone: 10086, // 手机号
+ whatsapp: 10086, // whatsapp号
+ timestamp: "2025-05-12 00:00:30",
+ },
+ ],
+ },
+ {
+ event_name: "shipping",
+ page_name: "shipping",
+ event_properties: [
+ {
+ shipping_method: 0, // 运输方式 // 0 船运 1 空运
+ shipping_price_outside: 40, // 国际运输价格
+ shipping_price_within: 20, // 国内运输价格
+ currency: "FCFA", // FCFA, USD, CDF,CFA,EUR,
+ forwarder_name: "达菲物流", // 货代中心 // 欧万物流 //303仓库
+ country_city: "Congo-Kinshasa", // 国家-城市
+ timestamp: "2025-05-12 00:00:30",
+ },
+ ],
+ },
+ {
+ event_name: "payment", // 支付
+ page_name: "payment", // 支付页面
+ event_properties: [
+ {
+ pay_method: "palpay", //支付方式 // palpay, mobile_money, wave, bank_card balance
+ online: 1, //线上或线下 // 1 线上支付 0 线下支付
+ all_price: 519.8, // 总价格
+ currency: "FCFA", // FCFA, USD, CDF,CFA,EUR,
+ timestamp: "2025-05-19 08:27:21",
+ },
+ ],
+ },
+ {
+ event_name: "order", // 订单
+ page_name: "order", // 订单页面
+ event_properties: [
+ {
+ order_id: "1234567890", // 订单ID
+ timestamp: "2025-05-19 08:27:21",
+ },
+ ],
+ },
+ {
+ event_name: "checkout", // 结算
+ page_name: "checkout", // 结算页面
+ event_properties: [
+ {
+ is_suc: 1, // 是否成功 1 成功 0 失败
+ all_price: 519.8, // 总价格
+ currency: "FCFA", // FCFA, USD, CDF,CFA,EUR,
+ timestamp: "2025-05-12 00:00:30",
+ shipping_method: 0, // 0 船运 1 空运
+ shipping_price_outside: 40, // 国际运输价格
+ shipping_price_within: 20, // 国内运输价格
+ },
+ ],
+ },
+ {
+ event_name: "purchase", // 购买
+ page_name: "purchase", // 购买页面
+ event_properties: [
+ {
+ order_id: "1234567890", // 订单ID
+ is_suc: 1, // 是否成功 1 成功
+ timestamp: "2025-05-19 08:27:21",
+ },
+ ],
+ },
+ ],
+ };
\ No newline at end of file
diff --git a/event.json b/event.json
new file mode 100644
index 0000000..d0d02ad
--- /dev/null
+++ b/event.json
@@ -0,0 +1,194 @@
+{
+ "user_id": 11,
+ "device_id": "ios",
+ "version": "1747643239421-2wi8sr8yr",
+ "session_id": "1747643239421-g28qurlzy",
+ "event_list": [
+ {
+ "event_name": "app_launch",
+ "page_name": null,
+ "event_properties": [
+ {
+ "is_open": 1,
+ "timestamp": "2025-05-19 08:27:21"
+ }
+ ]
+ },
+ {
+ "event_name": "login",
+ "page_name": "login",
+ "event_properties": [
+ {
+ "is_login": 1,
+ "login_method": "phone",
+ "user_name": "1234567890",
+ "timestamp": "2025-05-19 08:27:21"
+ }
+ ]
+ },
+ {
+ "event_name": "register",
+ "page_name": "register",
+ "event_properties": [
+ {
+ "is_register": 1,
+ "user_name": "1234567890",
+ "register_method": "phone",
+ "timestamp": "2025-05-19 08:27:21"
+ }
+ ]
+ },
+ {
+ "event_name": "search",
+ "page_name": "search",
+ "event_properties": [
+ {
+ "search_keyword": "1234567890",
+ "timestamp": "2025-05-19 08:27:21"
+ }
+ ]
+ },
+ {
+ "event_name": "product",
+ "page_name": "product",
+ "event_properties": [
+ {
+ "offer_id": 892906753556,
+ "category_id": 1037036,
+ "price": 2.17,
+ "currency": "FCFA",
+ "timestamp": "2025-05-19 08:27:21",
+ "product_name": "瑜伽服女夏天排汗瑜伽服大码胖速干衣跑步套装女晨跑运动套装女",
+ "product_img": "https://cbu01.alicdn.com/img/ibank/O1CN01KvfDVh1UL3CWndJ89_!!2219347832500-0-cib.jpg"
+ }
+ ]
+ },
+ {
+ "event_name": "category",
+ "page_name": "category",
+ "event_properties": [
+ {
+ "category_id": "1234567890",
+ "timestamp": "2025-05-19 08:27:21",
+ "category_name": "食品酒水",
+ "level": 1
+ }
+ ]
+ },
+ {
+ "event_name": "productList",
+ "page_name": "productList",
+ "event_properties": [
+ {
+ "category_id": "133",
+ "category_name": "农业用品",
+ "timestamp": "2025-05-19 08:27:21"
+ }
+ ]
+ },
+ {
+ "event_name": "addToCart",
+ "page_name": "addToCart",
+ "event_properties": [
+ {
+ "offer_id": 892906753556,
+ "category_id": 1037036,
+ "price": 2.17,
+ "quality": 1,
+ "currency": "FCFA",
+ "timestamp": "2025-05-19 08:27:21",
+ "product_name": "瑜伽服女夏天排汗瑜伽服大码胖速干衣跑步套装女晨跑运动套装女",
+ "product_img": "https://cbu01.alicdn.com/img/ibank/O1CN01KvfDVh1UL3CWndJ89_!!2219347832500-0-cib.jpg"
+ },
+ {
+ "offer_id": 892906753557,
+ "category_id": 1037036,
+ "price": 2.17,
+ "quality": 2,
+ "currency": "FCFA",
+ "timestamp": "2025-05-19 08:27:21",
+ "product_name": "瑜伽服女夏天排汗瑜伽服大码胖速干衣跑步套装女晨跑运动套装女",
+ "product_img": "https://cbu01.alicdn.com/img/ibank/O1CN01KvfDVh1UL3CWndJ89_!!2219347832500-0-cib.jpg"
+ }
+ ]
+ },
+ {
+ "event_name": "address",
+ "page_name": "address",
+ "event_properties": [
+ {
+ "last_name": "san",
+ "first_name": "zhang",
+ "country": "chinese",
+ "phone_number": 10086,
+ "whatsApp_number": 10086,
+ "timestamp": "2025-05-12 00:00:30"
+ }
+ ]
+ },
+ {
+ "event_name": "shipping",
+ "page_name": "shipping",
+ "event_properties": [
+ {
+ "shipping_method": 0,
+ "shipping_price_outside": 40,
+ "shipping_price_within": 20,
+ "currency": "fcfa",
+ "forwarder_name": "达菲物流",
+ "country_city": "Congo-Kinshasa",
+ "timestamp": "2025-05-12 00:00:30"
+ }
+ ]
+ },
+ {
+ "event_name": "payment",
+ "page_name": "payment",
+ "event_properties": [
+ {
+ "pay_method": "palpay",
+ "offline_payment": 1,
+ "all_price": 519.8,
+ "currency": "fcfa",
+ "timestamp": "2025-05-19 08:27:21"
+ }
+ ]
+ },
+ {
+ "event_name": "order",
+ "page_name": "order",
+ "event_properties": [
+ {
+ "order_id": "1234567890",
+ "timestamp": "2025-05-19 08:27:21"
+ }
+ ]
+ },
+ {
+ "event_name": "checkout",
+ "page_name": "checkout",
+ "event_properties": [
+ {
+ "is_suc": 1,
+ "all_price": 519.8,
+ "currency": "fcfa",
+ "timestamp": "2025-05-12 00:00:30",
+ "shipping_method": 0,
+ "shipping_price_outside": 40,
+ "shipping_price_within": 20
+ }
+ ]
+ },
+ {
+ "event_name": "purchase",
+ "page_name": "purchase",
+ "event_properties": [
+ {
+ "order_id": "1234567890",
+ "is_suc": 1,
+ "timestamp": "2025-05-19 08:27:21"
+ }
+ ]
+ }
+ ]
+}
diff --git a/event_list.json b/event_list.json
new file mode 100644
index 0000000..065728d
--- /dev/null
+++ b/event_list.json
@@ -0,0 +1,16 @@
+{
+ "app启动":"launch",
+ "登录":"login",
+ "注册":"register",
+ "浏览商品":"product",
+ "浏览分类":"category",
+ "浏览商品list":"productList",
+ "搜索":"search",
+ "添加购物车":"addToCart",
+ "填写地址":"adress",
+ "物流方式":"shipping",
+ "支付方式":"payment",
+ "创建订单":"order",
+ "发起结账":"checkout",
+ "支付成功":"purchase"
+}
\ No newline at end of file
diff --git a/event_page.json b/event_page.json
new file mode 100644
index 0000000..707082d
--- /dev/null
+++ b/event_page.json
@@ -0,0 +1,18 @@
+{
+ "启动app": null,
+ "登录": "login",
+ "注册": "register",
+ "主页": "home",
+ "搜索": "search",
+ "商品详情页": "product",
+ "浏览商品分类": "category",
+ "浏览商品list": "productList",
+ "购物车": "cart",
+ "填写地址": "address",
+ "物流方式": "shipping",
+ "支付方式": "payment",
+ "浏览订单": "order",
+ "结账": "checkout",
+ "支付成功": "purchase",
+ "支付失败": "paymentFailed"
+}
diff --git a/page.json b/page.json
new file mode 100644
index 0000000..707082d
--- /dev/null
+++ b/page.json
@@ -0,0 +1,18 @@
+{
+ "启动app": null,
+ "登录": "login",
+ "注册": "register",
+ "主页": "home",
+ "搜索": "search",
+ "商品详情页": "product",
+ "浏览商品分类": "category",
+ "浏览商品list": "productList",
+ "购物车": "cart",
+ "填写地址": "address",
+ "物流方式": "shipping",
+ "支付方式": "payment",
+ "浏览订单": "order",
+ "结账": "checkout",
+ "支付成功": "purchase",
+ "支付失败": "paymentFailed"
+}