import { View, Text, ScrollView, Image } from '@tarojs/components' import Taro from '@tarojs/taro' import { useState, useEffect } from 'react' import './index.scss' import { getOrderList, type OrderItem } from '../../utils/store' import { PRODUCT_ICON_MAP } from '../../utils/productConfig' import { assetUrl } from '../../utils/asset' import { useThemeContext } from '../../context/ThemeContext' import { useSafeArea } from '../../hooks/useSafeArea' import { useStatusBar } from '../../hooks/useStatusBar' import LoginGuard from '../../components/LoginGuard' import ThemedPageMeta from '../../components/ThemedPageMeta' const STATUS_TABS = [ { code: 'all', label: '全部' }, { code: 'pending', label: '待付款' }, { code: 'paid', label: '待发货' }, { code: 'shipping', label: '待收货' }, { code: 'done', label: '已完成' } ] const STATUS_MAP: Record = { pending: { label: '待付款', badge: 'badge-pink' }, paid: { label: '待发货', badge: 'badge-blue' }, shipping: { label: '待收货', badge: 'badge-blue' }, done: { label: '已完成', badge: 'badge-green' }, cancelled: { label: '已取消', badge: 'badge-gray' } } export default function OrdersPage() { const { theme, resolvedTheme } = useThemeContext() const safe = useSafeArea() useStatusBar(resolvedTheme) const [activeTab, setActiveTab] = useState('all') const [orders, setOrders] = useState([]) const load = () => setOrders(getOrderList()) useEffect(load, []) // 读取从 profile 跳转过来的筛选状态 useEffect(() => { const init = () => { const filter = Taro.getStorageSync('orders:filter') if (filter && STATUS_TABS.some(t => t.code === filter)) { setActiveTab(filter) Taro.removeStorageSync('orders:filter') } load() } init() // 页面每次显示时刷新 const page = Taro.getCurrentInstance().page if (page) { const orig = page.onShow page.onShow = function () { init() if (orig) orig.apply(this) } } }, []) // 页面每次显示时刷新(处理下单后同步) useEffect(() => { Taro.eventCenter?.once?.('orders:refresh', load) load() return () => { Taro.eventCenter?.off?.('orders:refresh', load) } }, []) const filteredOrders = activeTab === 'all' ? orders : orders.filter(o => o.statusCode === activeTab) const goDetail = (order: OrderItem) => { Taro.navigateTo({ url: `/pages/orderDetail/index?orderId=${order.id}` }) } return ( 我的订单 {/* 状态筛选Tab */} {STATUS_TABS.map((tab) => ( setActiveTab(tab.code)} > {tab.label} {activeTab === tab.code && } ))} {/* 订单列表 */} {filteredOrders.map((order) => { const status = STATUS_MAP[order.statusCode] || STATUS_MAP.pending const rawIcon = order.productIcon?.startsWith('/icon/') || /^https?:/i.test(order.productIcon || '') ? order.productIcon : '/icon/四角星.svg' const iconSrc = assetUrl(rawIcon) return ( goDetail(order)}> {order.date} {status.label} {order.productName} {order.sku} 数量: {order.count} 件 | {order.id} 实付款 {order.price} {order.statusCode === 'pending' && ( 立即付款 )} {order.statusCode === 'paid' && ( 催发货 )} {order.statusCode === 'shipping' && ( <> { e.stopPropagation(); Taro.showToast({ title: '查看物流', icon: 'none' }) }}> 查看物流 { e.stopPropagation(); Taro.showToast({ title: '确认收货', icon: 'none' }) }}> 确认收货 )} {order.statusCode === 'done' && ( <> { e.stopPropagation(); Taro.showToast({ title: '申请售后', icon: 'none' }) }}> 申请售后 { e.stopPropagation(); Taro.showToast({ title: '再来一单', icon: 'none' }) }}> 再来一单 )} { e.stopPropagation(); goDetail(order) }}> 详情 ) })} {filteredOrders.length === 0 && ( 暂无订单 去首页开始定制吧 Taro.switchTab({ url: '/pages/index/index' })}> 去定制 )} ) }