'use client' import { useState } from 'react' import { Button } from '@payloadcms/ui' /** * 数据重置按钮(全量 / 仅 Medusa) * API: POST /api/admin/reset-data */ export function ResetData() { const [loading, setLoading] = useState<'full' | 'medusa-only' | null>(null) const [message, setMessage] = useState('') const [details, setDetails] = useState(null) const handle = async (mode: 'full' | 'medusa-only') => { const confirmMsg = mode === 'medusa-only' ? '⚠️ 重置 Medusa 数据\n\n此操作将:\n1. 清理所有 Medusa 数据\n2. 重新导入 Medusa seed 数据\n\nPayload CMS 数据不受影响。\n\n⚠️ 此操作不可撤销!确认继续吗?' : '⚠️ 危险操作:重置所有数据\n\n此操作将:\n1. 清理所有 Payload CMS 数据(保留用户)\n2. 清理所有 Medusa 数据\n3. 重新导入 Medusa seed 数据\n\n⚠️ 此操作不可撤销!确认要继续吗?' if (!confirm(confirmMsg)) return setLoading(mode) setMessage('🔄 开始数据重置流程...') setDetails(null) try { const res = await fetch('/api/admin/reset-data', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ mode }), }) const result = await res.json() if (!result.success) { const stepError = result.steps?.find((s: any) => !s.success && !s.skipped && s.error)?.error throw new Error(result.error || stepError || 'Reset failed') } setDetails(result) setMessage( mode === 'medusa-only' ? '✅ Medusa 数据重置完成!\n\n下一步:\n1. 同步 Medusa 商品到 Payload CMS' : '✅ 数据重置完成!\n\n下一步:\n1. 同步 Medusa 商品到 Payload CMS\n2. 设置 ProductRecommendations\n3. 配置 PreorderProducts 的预购设置', ) } catch (err) { setMessage('❌ 重置失败: ' + (err instanceof Error ? err.message : 'Unknown error')) } finally { setLoading(null) } } const busy = loading !== null return (
{message && (
{message}
)} {details?.steps && (

详细信息:

{details.steps.map((step: any, i: number) => (
[{step.step}/3] {step.name}:{' '} {step.skipped ? '⏭️ 跳过' : step.success ? '✅ 成功' : '❌ 失败'} {step.deleted !== undefined && ( (删除 {step.deleted} 条记录) )}
))}
)}
) }