import React, { useState, useEffect } from 'react' import { View, Text, ScrollView } from '@tarojs/components' import Taro from '@tarojs/taro' import { listMyGiftCards, getGiftCardBalance } from '@/api/shop/shopGiftCard' import type { ShopGiftCard } from '@/api/shop/shopGiftCard/model' import { useScrollHeight } from '@/hooks/useScrollHeight' definePageConfig({ navigationBarTitleText: '礼品卡余额', }) const GiftCardBalancePage: React.FC = () => { const [balance, setBalance] = useState(0) const [cards, setCards] = useState([]) const [loading, setLoading] = useState(true) const scrollHeight = useScrollHeight(44) // 加载礼品卡数据 const loadGiftCards = async () => { try { // 并行请求余额和列表 const [balanceRes, cardsRes] = await Promise.all([ getGiftCardBalance(), listMyGiftCards() ]) if (balanceRes.code === 0 && balanceRes.data) { setBalance(balanceRes.data.giftCards || 0) } if (cardsRes.code === 0 && cardsRes.data) { setCards(cardsRes.data) } } catch (e) { console.error('获取礼品卡失败:', e) Taro.showToast({ title: '获取数据失败', icon: 'none' }) } finally { setLoading(false) } } useEffect(() => { loadGiftCards() }, []) // 获取状态标签 const getStatusLabel = (status?: number) => { const map: Record = { 1: { label: '可使用', color: 'text-green-500' }, 2: { label: '已用完', color: 'text-gray-400' }, 3: { label: '已过期', color: 'text-red-500' }, } return map[status || 1] || { label: '未知', color: 'text-gray-400' } } // 格式化兑换码 const formatCode = (code?: string) => { if (!code) return '' return code.split('-').join(' ') } // 删除礼品卡 const handleDelete = (id?: number) => { Taro.showModal({ title: '提示', content: '确定删除该礼品卡记录吗?', success: (res) => { if (res.confirm) { setCards(prev => prev.filter(card => card.cardId !== id && card.id !== id)) Taro.showToast({ title: '删除成功', icon: 'success' }) } } }) } if (loading) { return ( 加载中... ) } return ( {/* 总余额 */} 礼品卡总余额 ¥{balance.toFixed(2)} 共 {cards.filter(c => c.status === 1).length} 张可用 Taro.navigateTo({ url: '/pages/gift-card/exchange/index' })} > 兑换新卡 〉 {/* 礼品卡列表 */} 礼品卡明细 {cards.length === 0 ? ( 🎁 暂无礼品卡 Taro.navigateTo({ url: '/pages/gift-card/purchase/index' })} > 去购买 ) : ( cards.map(card => { const cardId = card.cardId || card.id const statusInfo = getStatusLabel(card.status) return ( {/* 顶部状态 */} {statusInfo.label} 有效期至 {card.expireDate || '永久'} {/* 卡信息 */} 面值 ¥{card.amount || card.faceValue || '0'} 余额 ¥{card.remainAmount || card.balance || '0'} 兑换码 {formatCode(card.code)} {/* 操作按钮 */} {card.status === 1 && ( { if (card.code) { Taro.setClipboardData({ data: card.code }) Taro.showToast({ title: '已复制到剪贴板', icon: 'none' }) } }} > 复制兑换码 )} handleDelete(cardId)} > 删除 ) }) )} ) } export default GiftCardBalancePage