import React, {useState, useEffect} from 'react' import {View, Text, ScrollView, Input, Button} from '@tarojs/components' import {ConfigProvider, Field, Cell, CellGroup, Toast} from '@nutui/nutui-react-taro' import {useDealerUser} from '@/hooks/useDealerUser' import Taro from '@tarojs/taro' import {addReferral, getMyReferrals, getMyStats} from '@/api/app/referral' import './index.scss' // 状态映射 const STATUS_MAP: Record = { 0: {text: '待确认', color: '#ff9800'}, 1: {text: '有效', color: '#4caf50'}, 2: {text: '无效', color: '#9e9e9e'}, 3: {text: '已结算', color: '#2196f3'} } const ReferralPage: React.FC = () => { const {dealerUser} = useDealerUser() const [loading, setLoading] = useState(false) const [submitting, setSubmitting] = useState(false) // 表单数据 const [formData, setFormData] = useState({ customerName: '', customerPhone: '', customerCompany: '', requirement: '', remarks: '' }) // 统计 const [stats, setStats] = useState({ totalCount: 0, pendingCount: 0, validCount: 0, settledCount: 0, pendingAmount: 0 }) // 记录列表 const [records, setRecords] = useState([]) const [page, setPage] = useState(1) const [hasMore, setHasMore] = useState(true) // 加载数据 const loadData = async () => { if (!dealerUser?.userId) return try { setLoading(true) // 获取统计 const statsRes = await getMyStats() if (statsRes.data.code === 0) { setStats(statsRes.data.data) } // 获取列表 const listRes = await getMyReferrals({pageNum: 1, pageSize: 10}) if (listRes.data.code === 0) { setRecords(listRes.data.data.list || []) setHasMore(listRes.data.data.list?.length === 10) } } catch (error) { console.error('加载失败', error) } finally { setLoading(false) } } useEffect(() => { loadData() }, [dealerUser]) // 输入处理 const handleInput = (field: string, value: string) => { setFormData(prev => ({...prev, [field]: value})) } // 表单验证 const validateForm = () => { if (!formData.customerName.trim()) { Toast.text('请输入客户姓名') return false } if (!formData.customerPhone.trim()) { Toast.text('请输入客户电话') return false } if (!/^1[3-9]\d{9}$/.test(formData.customerPhone)) { Toast.text('请输入正确的手机号') return false } return true } // 提交报备 const handleSubmit = async () => { if (!validateForm()) return try { setSubmitting(true) const res = await addReferral(formData) if (res.data.code === 0) { Toast.text('报备成功!') // 清空表单 setFormData({ customerName: '', customerPhone: '', customerCompany: '', requirement: '', remarks: '' }) // 刷新数据 loadData() } else { Toast.text(res.data.message || '报备失败') } } catch (error: any) { Toast.text(error.message || '报备失败') } finally { setSubmitting(false) } } // 拨打电话 const handleCall = (phone: string) => { if (phone) { Taro.makePhoneCall({phoneNumber: phone}) } } // 加载更多 const loadMore = async () => { if (!hasMore || loading) return try { const nextPage = page + 1 const res = await getMyReferrals({pageNum: nextPage, pageSize: 10}) if (res.data.code === 0 && res.data.data.list) { setRecords(prev => [...prev, ...res.data.data.list]) setPage(nextPage) setHasMore(res.data.data.list.length === 10) } } catch (error) { console.error('加载更多失败', error) } } return ( {/* 头部统计 */} 我的推荐奖励 {stats.totalCount} 总推荐 {stats.pendingCount} 待确认 {stats.validCount} 有效 ¥{stats.pendingAmount.toFixed(2)} 待结算 {/* 报备表单 */} 推荐新客户 handleInput('customerName', e.detail.value)} /> handleInput('customerPhone', e.detail.value)} /> handleInput('customerCompany', e.detail.value)} /> handleInput('requirement', e.detail.value)} style={{height: '80px', textAlign: 'left'}} /> 报备成功后,业务员会尽快联系您的客户。成交后您将获得相应佣金奖励。 {/* 推荐记录 */} 我的推荐记录 {records.length === 0 ? ( 暂无推荐记录 快去推荐客户吧 ) : ( {records.map((item) => { const statusInfo = STATUS_MAP[item.referralStatus] || STATUS_MAP[0] return ( {item.customerName} handleCall(item.customerPhone)} > {item.customerPhone} {statusInfo.text} 推荐时间 {item.createTime} {item.referralFee > 0 && ( 奖励金额 ¥{item.referralFee.toFixed(2)} )} {item.leadStatusText && ( 客户状态 {item.leadStatusText} )} ) })} {!hasMore && records.length > 0 && ( 没有更多了 )} )} {/* 底部安全区 */} ) } export default ReferralPage