import React, { useState, useEffect } from 'react';
import { Form, Input, Button, Card, List, Tag, Typography, message, Space, Statistic, Divider, Modal, Descriptions, Tabs } from 'antd';
import { MobileOutlined, LockOutlined, SearchOutlined, CarOutlined, InboxOutlined, SafetyCertificateOutlined, CheckCircleOutlined, ClockCircleOutlined, CloseCircleOutlined, UserOutlined, EnvironmentOutlined, PhoneOutlined, CalendarOutlined } from '@ant-design/icons';
import { getMySignups } from '../api';
import { motion } from 'framer-motion';
import LoginModal from '../components/LoginModal';
import { useAuth } from '../context/AuthContext';
import { useNavigate } from 'react-router-dom';
const { Title, Text, Paragraph } = Typography;
const MyOrders = () => {
const [loading, setLoading] = useState(false);
const [orders, setOrders] = useState([]);
const [activities, setActivities] = useState([]);
const [modalVisible, setModalVisible] = useState(false);
const [currentOrder, setCurrentOrder] = useState(null);
const [signupInfoModalVisible, setSignupInfoModalVisible] = useState(false);
const [currentSignupInfo, setCurrentSignupInfo] = useState(null);
const [loginVisible, setLoginVisible] = useState(false);
const navigate = useNavigate();
const { user, login } = useAuth();
useEffect(() => {
if (user) {
handleQueryData();
}
}, [user]);
const showDetail = (order) => {
setCurrentOrder(order);
setModalVisible(true);
};
const showSignupInfo = (info) => {
setCurrentSignupInfo(info);
setSignupInfoModalVisible(true);
};
const handleQueryData = async () => {
setLoading(true);
try {
const { default: api } = await import('../api');
// Parallel fetch
const [ordersRes, activitiesRes] = await Promise.allSettled([
api.get('/orders/'),
getMySignups()
]);
if (ordersRes.status === 'fulfilled') {
setOrders(ordersRes.value.data);
}
if (activitiesRes.status === 'fulfilled') {
setActivities(activitiesRes.value.data);
}
} catch (error) {
console.error(error);
message.error('查询出错');
} finally {
setLoading(false);
}
};
const getStatusTag = (status) => {
switch (status) {
case 'paid': return } color="success">已支付;
case 'pending': return } color="warning">待支付;
case 'shipped': return } color="processing">已发货;
case 'cancelled': return } color="default">已取消;
default: return {status};
}
};
const getOrderTitle = (order) => {
if (order.config_name) return order.config_name;
if (order.course_title) return order.course_title;
if (order.activity_title) return order.activity_title;
// Fallback to ID if no name/title
if (order.config) return `硬件 ID: ${order.config}`;
if (order.course) return `课程 ID: ${order.course}`;
if (order.activity) return `活动 ID: ${order.activity}`;
return '未知商品';
};
return (
我的订单
Secure Order Verification System
{!user ? (
请先登录以查看您的订单
) : (
当前登录用户: {user.nickname}
}
>
刷新
我的订单,
children: (
(
showDetail(order)}
title={订单号: {order.id} {getStatusTag(order.status)}}
style={{
background: 'rgba(0,0,0,0.6)',
border: '1px solid rgba(255,255,255,0.1)',
marginBottom: 10,
backdropFilter: 'blur(10px)'
}}
headStyle={{ borderBottom: '1px solid rgba(255,255,255,0.1)' }}
bodyStyle={{ padding: '20px' }}
>
{order.total_price} 元
{new Date(order.created_at).toLocaleString()}
{order.config_image ? (
) : (
)}
{getOrderTitle(order)}
数量: x{order.quantity}
{(order.courier_name || order.tracking_number) && (
物流信息
快递公司:
{order.courier_name || '未知'}
快递单号:
{order.tracking_number ? (
e.stopPropagation()}>
{order.tracking_number}
) : (
暂无单号
)}
)}
)}
locale={{ emptyText: 暂无订单信息
}}
/>
)
},
{
key: '2',
label: 我的活动,
children: (
{
const activity = item.activity_info || item.activity || item;
return (
navigate(`/activity/${activity.id}`)}
cover={
}
style={{
background: 'rgba(0,0,0,0.6)',
border: '1px solid rgba(255,255,255,0.1)',
marginBottom: 10,
backdropFilter: 'blur(10px)',
overflow: 'hidden'
}}
headStyle={{ borderBottom: '1px solid rgba(255,255,255,0.1)' }}
bodyStyle={{ padding: '16px' }}
>
{activity.title}
{new Date(activity.start_time).toLocaleDateString()}
{activity.location || '线上活动'}
{activity.status || '已报名'}
{item.signup_info && Object.keys(item.signup_info).length > 0 && (
)}
);
}}
locale={{ emptyText: 暂无活动报名
}}
/>
)
}
]} />
)}
订单详情}
open={modalVisible}
onCancel={() => setModalVisible(false)}
footer={[
]}
width={600}
centered
>
{currentOrder && (
{currentOrder.id}
{getOrderTitle(currentOrder)}
{new Date(currentOrder.created_at).toLocaleString()}
{new Date(currentOrder.updated_at).toLocaleString()}
{getStatusTag(currentOrder.status)}
¥{currentOrder.total_price}
{currentOrder.customer_name}
{currentOrder.phone_number}
{currentOrder.shipping_address}
{currentOrder.salesperson_name && (
{currentOrder.salesperson_name}
{currentOrder.salesperson_code && {currentOrder.salesperson_code}}
)}
{(currentOrder.status === 'shipped' || currentOrder.courier_name) && (
<>
{currentOrder.courier_name || '未知'}
{currentOrder.tracking_number ? (
{currentOrder.tracking_number}
) : '暂无单号'}
>
)}
)}
setLoginVisible(false)}
onLoginSuccess={(userData) => {
login(userData);
if (userData.phone_number) {
handleQueryData();
}
}}
/>
setSignupInfoModalVisible(false)}
footer={[
]}
>
{currentSignupInfo && (
{Object.entries(currentSignupInfo).map(([key, value]) => (
{typeof value === 'object' ? JSON.stringify(value) : String(value)}
))}
)}
);
};
export default MyOrders;