import { useState, useEffect } from 'react' import { Database, RefreshCw, Trash2, Table } from 'lucide-react' import { getTableData, clearTableData } from '@/api/admin' import { useUIStore } from '@/store/uiStore' import { useAuthStore } from '@/store/authStore' import { PageLoading, ButtonLoading } from '@/components/common/Loading' import { Select } from '@/components/common/Select' // 可选择的数据表 const tableOptions = [ { value: 'default_replies', label: '默认回复表' }, { value: 'keywords', label: '关键词表' }, { value: 'cookies', label: '账号表' }, { value: 'cards', label: '卡券表' }, { value: 'orders', label: '订单表' }, { value: 'item_info', label: '商品信息表' }, { value: 'notification_channels', label: '通知渠道表' }, { value: 'delivery_rules', label: '发货规则表' }, { value: 'risk_control_logs', label: '风控日志表' }, ] export function DataManagement() { const { addToast } = useUIStore() const { isAuthenticated, token, _hasHydrated } = useAuthStore() const [loading, setLoading] = useState(false) const [selectedTable, setSelectedTable] = useState('default_replies') const [tableData, setTableData] = useState[]>([]) const [columns, setColumns] = useState([]) const [count, setCount] = useState(0) const [clearing, setClearing] = useState(false) const loadTableData = async () => { if (!_hasHydrated || !isAuthenticated || !token) return try { setLoading(true) const result = await getTableData(selectedTable) if (result.success) { setTableData(result.data || []) setColumns(result.columns || []) setCount(result.count || 0) } else { addToast({ type: 'error', message: '加载数据失败' }) } } catch { addToast({ type: 'error', message: '加载数据失败' }) } finally { setLoading(false) } } useEffect(() => { if (_hasHydrated && isAuthenticated && token) { loadTableData() } }, [_hasHydrated, isAuthenticated, token, selectedTable]) const handleClearTable = async () => { if (!confirm(`确定要清空 ${tableOptions.find(t => t.value === selectedTable)?.label} 吗?此操作不可恢复!`)) return if (!confirm('再次确认:是否真的要清空该表的所有数据?')) return try { setClearing(true) const result = await clearTableData(selectedTable) if (result.success) { addToast({ type: 'success', message: '清空成功' }) loadTableData() } else { addToast({ type: 'error', message: result.message || '清空失败' }) } } catch { addToast({ type: 'error', message: '清空失败' }) } finally { setClearing(false) } } if (!_hasHydrated) { return } return (
{/* 数据表选择 */}

数据表选择
{columns.map((col, index) => ( ))} {tableData.slice(0, 100).map((row, idx) => ( {columns.map((col) => ( ))} ))}
{col}
{String(row[col] ?? '-')}
{tableData.length > 100 && (
仅显示前 100 条记录,共 {tableData.length} 条
)}

)}
) }