'use client'; import Link from 'next/link'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useMemo, useState } from 'react'; import { EmptyState } from '@/components/feedback/empty-state'; import { ErrorState } from '@/components/feedback/error-state'; import { InlineMessage } from '@/components/feedback/inline-message'; import { LoadingState } from '@/components/feedback/loading-state'; import { PageHeader } from '@/components/layout/page-header'; import { AppCard } from '@/components/ui/app-card'; import { StatusBadge } from '@/components/ui/status-badge'; import { deleteOrigin, getOrigins } from '@/features/origins/api/origins'; import { OriginEditorModal } from '@/features/origins/components/origin-editor-modal'; import type { OriginItem } from '@/features/origins/types'; import { DangerButton, PrimaryButton, SecondaryButton, } from '@/features/shared/components/resource-primitives'; import { formatDateTime } from '@/lib/utils/date'; type FeedbackState = { tone: 'success' | 'danger'; message: string; }; export function OriginsPage() { const queryClient = useQueryClient(); const [feedback, setFeedback] = useState(null); const [editingOrigin, setEditingOrigin] = useState(null); const [isEditorOpen, setIsEditorOpen] = useState(false); const originsQuery = useQuery({ queryKey: ['origins'], queryFn: getOrigins, }); const deleteMutation = useMutation({ mutationFn: deleteOrigin, onSuccess: async () => { setFeedback({ tone: 'success', message: '源站已删除。' }); await queryClient.invalidateQueries({ queryKey: ['origins'] }); }, onError: (error) => { setFeedback({ tone: 'danger', message: error instanceof Error ? error.message : '请求失败,请稍后重试。', }); }, }); const origins = useMemo(() => originsQuery.data ?? [], [originsQuery.data]); const handleDelete = (origin: OriginItem) => { if (!window.confirm(`确认删除源站 ${origin.name} 吗?`)) { return; } setFeedback(null); deleteMutation.mutate(origin.id); }; return ( <>
{ setEditingOrigin(null); setFeedback(null); setIsEditorOpen(true); }} > 新增源站 } /> {feedback ? ( ) : null} {originsQuery.isLoading ? ( ) : originsQuery.isError ? ( ) : origins.length === 0 ? ( ) : (
{origins.map((origin) => (

{origin.name}

0 ? 'success' : 'warning' } />

{origin.address}

{origin.remark || '暂无备注'}

最后更新:{formatDateTime(origin.updated_at)}
详情 { setEditingOrigin(origin); setFeedback(null); setIsEditorOpen(true); }} > 编辑 handleDelete(origin)} disabled={deleteMutation.isPending} > 删除
))}
)}
{isEditorOpen ? ( setIsEditorOpen(false)} onSaved={(origin, mode) => { setFeedback({ tone: 'success', message: mode === 'create' ? '源站已创建。' : '源站已更新。', }); setEditingOrigin(origin); }} /> ) : null} ); }