import React, { useState, useEffect } from 'react' import { View, Text, Image, ScrollView } from '@tarojs/components' import Taro from '@tarojs/taro' import { Button } from '@nutui/nutui-react-taro' import { getAfterSaleDetail, cancelAfterSale, formatAfterSaleStatus, AFTER_SALE_TYPE_MAP } from '@/api/shop/shopAfterSale' import type { AfterSaleDetail } from '@/api/shop/shopAfterSale' import Price from '@/components/common/Price' definePageConfig({ navigationBarTitleText: '售后详情', }) const AfterSaleDetailPage: React.FC = () => { const { id, orderId } = Taro.getCurrentInstance().router?.params || {} const [detail, setDetail] = useState(null) const [loading, setLoading] = useState(false) const [cancelling, setCancelling] = useState(false) useEffect(() => { loadDetail() }, [id, orderId]) const loadDetail = async () => { setLoading(true) try { const res = await getAfterSaleDetail({ afterSaleId: id, orderId }) if (res?.data) { setDetail(res.data) } } catch (err) { console.error('加载售后详情失败', err) } finally { setLoading(false) } } // 取消申请 const handleCancel = () => { Taro.showModal({ title: '确认取消', content: '确定要撤销售后申请吗?取消后不可恢复。', success: async (res) => { if (res.confirm) { setCancelling(true) try { // await cancelAfterSale(id || '') await new Promise(resolve => setTimeout(resolve, 1000)) Taro.showToast({ title: '已取消申请', icon: 'success' }) setTimeout(() => { Taro.navigateBack() }, 1500) } catch (err) { Taro.showToast({ title: '取消失败', icon: 'none' }) } finally { setCancelling(false) } } }, }) } // 格式化时间 const formatTime = (time: string) => { if (!time) return '' const date = new Date(time) return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}` } if (!detail) { return ( {loading ? '加载中...' : '加载失败'} ) } const statusInfo = formatAfterSaleStatus(detail.status) const canCancel = ['pending'].includes(detail.status) return ( {/* 状态头部 */} {statusInfo.text} {detail.status === 'processing' && ( 预计1-3个工作日内处理 )} {detail.status === 'pending' && ( 等待商家审核中 )} {detail.status === 'approved' && ( 商家已同意,请按提示操作 )} {detail.status === 'completed' && ( 退款已原路返回 )} {detail.status === 'rejected' && ( {detail.rejectReason || '商家拒绝了您的申请'} )} {/* 进度时间线 */} 处理进度 {/* 竖线 */} {detail.progressRecords.map((record, idx) => ( {/* 圆点 */} {idx === 0 ? ( ) : ( )} {/* 内容 */} {record.status} {formatTime(record.time)} {record.description} {record.operator && ( 操作人: {record.operator} )} ))} {/* 售后信息 */} 售后信息 售后类型 {AFTER_SALE_TYPE_MAP[detail.type] || detail.type} 申请原因 {detail.reason} {detail.description && ( 补充说明 {detail.description} )} 申请时间 {formatTime(detail.applyTime)} {detail.contactPhone && ( 联系电话 {detail.contactPhone} )} {/* 退款金额 */} 退款金额 {'\u00A5'}{detail.amount.toFixed(2)} 退款将原路返回,微信支付退款一般1-3个工作日到账 {/* 凭证图片 */} {detail.evidenceImages && detail.evidenceImages.length > 0 && ( 凭证图片 {detail.evidenceImages.map((url, idx) => ( ))} )} {/* 订单信息 */} 关联订单 Taro.navigateTo({ url: `/pages/order/detail?id=${detail.orderId}` })} > 查看订单 › 订单号: {detail.orderNo} {/* 底部按钮 */} {canCancel && ( )} ) } export default AfterSaleDetailPage