diff --git a/src/admin/userVerify/index.config.ts b/src/admin/userVerify/index.config.ts new file mode 100644 index 0000000..7e80624 --- /dev/null +++ b/src/admin/userVerify/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '实名审核' +}) diff --git a/src/admin/userVerify/index.tsx b/src/admin/userVerify/index.tsx new file mode 100644 index 0000000..d87060d --- /dev/null +++ b/src/admin/userVerify/index.tsx @@ -0,0 +1,319 @@ +import React, {useState, useEffect, useCallback} from 'react' +import {View, Text} from '@tarojs/components' +import { + Space, + Tabs, + Tag, + Empty, + Loading, + PullToRefresh, + Button, + Dialog, + Image, + ImagePreview, + TextArea +} from '@nutui/nutui-react-taro' +import Taro from '@tarojs/taro' +import {useDealerUser} from '@/hooks/useDealerUser' +import {pageUserVerify, updateUserVerify} from '@/api/system/userVerify' +import type {ShopDealerWithdraw} from '@/api/shop/shopDealerWithdraw/model' +import {UserVerify} from "@/api/system/userVerify/model"; + +const UserVeirfyAdmin: React.FC = () => { + const [activeTab, setActiveTab] = useState(0) + const [loading, setLoading] = useState(false) + const [refreshing, setRefreshing] = useState(false) + const [list, setList] = useState([]) + const [rejectDialogVisible, setRejectDialogVisible] = useState(false) + const [rejectReason, setRejectReason] = useState('') + const [currentRecord, setCurrentRecord] = useState(null) + const [showPreview, setShowPreview] = useState(false) + const [showPreview2, setShowPreview2] = useState(false) + + const {dealerUser} = useDealerUser() + + // Tab 切换处理函数 + const handleTabChange = (value: string | number) => { + console.log('Tab切换到:', value) + setActiveTab(value) + // activeTab变化会自动触发useEffect重新获取数据,无需手动调用 + } + + // 获取审核记录 + const fetchWithdrawRecords = useCallback(async () => { + if (!dealerUser?.userId) return + + try { + setLoading(true) + const currentStatus = Number(activeTab) + const result = await pageUserVerify({ + page: 1, + limit: 100, + status: currentStatus // 后端筛选,提高性能 + }) + + if (result?.list) { + const processedRecords = result.list.map(record => ({ + ...record + })) + setList(processedRecords) + } + } catch (error) { + console.error('获取审核记录失败:', error) + Taro.showToast({ + title: '获取审核记录失败', + icon: 'none' + }) + } finally { + setLoading(false) + } + }, [dealerUser?.userId, activeTab]) + + + // 刷新数据 + const handleRefresh = async () => { + setRefreshing(true) + await Promise.all([fetchWithdrawRecords()]) + setRefreshing(false) + } + + // 审核通过 + const handleApprove = async (record: ShopDealerWithdraw) => { + try { + await updateUserVerify({ + ...record, + status: 1, // 审核通过 + }) + + Taro.showToast({ + title: '审核通过', + icon: 'success' + }) + + await fetchWithdrawRecords() + } catch (error: any) { + if (error !== 'cancel') { + console.error('审核通过失败:', error) + Taro.showToast({ + title: error.message || '操作失败', + icon: 'none' + }) + } + } + } + + // 驳回申请 + const handleReject = (record: ShopDealerWithdraw) => { + setCurrentRecord(record) + setRejectReason('') + setRejectDialogVisible(true) + } + + // 确认驳回 + const confirmReject = async () => { + if (!rejectReason.trim()) { + Taro.showToast({ + title: '请输入驳回原因', + icon: 'none' + }) + return + } + + try { + await updateUserVerify({ + ...currentRecord!, + status: 2, // 驳回 + comments: rejectReason.trim() + }) + + Taro.showToast({ + title: '已驳回', + icon: 'success' + }) + + setRejectDialogVisible(false) + setCurrentRecord(null) + setRejectReason('') + await fetchWithdrawRecords() + } catch (error: any) { + console.error('驳回失败:', error) + Taro.showToast({ + title: error.message || '操作失败', + icon: 'none' + }) + } + } + + + // 初始化加载数据 + useEffect(() => { + if (dealerUser?.userId) { + fetchWithdrawRecords().then() + } + }, [fetchWithdrawRecords]) + + const getStatusText = (status?: number) => { + switch (status) { + case 0: + return '待审核' + case 1: + return '审核通过' + case 2: + return '已驳回' + default: + return '未知' + } + } + + const getStatusColor = (status?: number) => { + switch (status) { + case 0: + return 'warning' + case 1: + return 'success' + case 2: + return 'danger' + default: + return 'default' + } + } + + const renderWithdrawRecords = () => { + console.log('渲染审核记录:', {loading, recordsCount: list.length, dealerUserId: dealerUser?.userId}) + + return ( + + + {loading ? ( + + + 加载中... + + ) : list.length > 0 ? ( + list.map(record => ( + + + + + {record.realName} + + + {record.phone} + + + 身份证号码:{record.idCard} + + + + {getStatusText(record.status)} + + + + + setShowPreview(true)}/> + setShowPreview2(true)}/> + + setShowPreview(false)} + /> + setShowPreview2(false)} + /> + + + 申请时间:{record.createTime} + {record.status == 1 && ( + + 审核时间:{record.updateTime} + + )} + {record.status == 2 && ( + + 驳回原因:{record.comments} + + )} + + + {/* 操作按钮 */} + {record.status === 0 && ( + + + + + )} + + + )) + ) : ( + + )} + + + ) + } + + return ( + + + + {renderWithdrawRecords()} + + + + {renderWithdrawRecords()} + + + + {renderWithdrawRecords()} + + + + {/* 驳回原因对话框 */} + { + setRejectDialogVisible(false) + setCurrentRecord(null) + setRejectReason('') + }} + onConfirm={confirmReject} + > + +