import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../../contexts/AuthContext'; import { supabase } from '../../supabase/client'; import { motion } from 'framer-motion'; import { Import, Warehouse, CreditCard, ArrowLeft, Users, Droplets, Package, CheckCircle, Clock, LogOut, HelpCircle, X, BookOpen, MessageSquare, Info, Camera, FileText, Plus, TrendingUp, Building2 } from 'lucide-react'; import { useResponsive } from '../../hooks/useResponsive'; import { OnboardingGuide, shouldShowOnboarding } from '../../components/OnboardingGuide'; import { NotificationCenter } from '../../components/NotificationCenter'; import { HelpCenter, HelpButton } from '../../components/HelpCenter'; import { VersionUpdate, useVersionCheck, AboutModal } from '../../components/VersionUpdate'; import { FeedbackModal } from '../../components/FeedbackModal'; import { UserManual } from '../../components/UserManual'; import { CrashReporter } from '../../components/CrashReporter'; import type { WashingPlan } from '../../types'; const statusMap: Record = { pending: { label: '待处理', color: 'text-amber-600', bgColor: 'bg-amber-50', icon: Clock }, processing: { label: '处理中', color: 'text-violet-500', bgColor: 'bg-violet-50', icon: TrendingUp }, completed: { label: '已完成', color: 'text-emerald-600', bgColor: 'bg-emerald-50', icon: Package } }; const getQuickActions = (isMaster: boolean) => { const actions = [ { id: 'plans', icon: FileText, label: '计划总览', path: '/washing/plans', gradient: 'from-violet-400 to-fuchsia-400', description: '查看所有计划' }, { id: 'pending', icon: Package, label: '待处理坯布', path: '/washing/pending', gradient: 'from-amber-500 to-orange-500', description: '处理待水洗坯布' }, { id: 'completed', icon: CheckCircle, label: '已完成坯布', path: '/washing/completed', gradient: 'from-emerald-500 to-green-500', description: '查看已完成水洗' }, { id: 'finished', icon: Warehouse, label: '成品仓库', path: '/washing/finished-warehouse', gradient: 'from-violet-400 to-fuchsia-400', description: '管理成品库存' }, { id: 'payment', icon: CreditCard, label: '待结款', path: '/washing/payments', gradient: 'from-rose-500 to-pink-500', description: '查看待结款项' } ]; if (isMaster) { actions.push({ id: 'members', icon: Users, label: '账号管理', path: '/members', gradient: 'from-fuchsia-400 to-purple-400', description: '管理团队账号' }); } return actions; }; const containerVariants = { hidden: { opacity: 0 }, visible: { opacity: 1, transition: { staggerChildren: 0.1 } } }; const itemVariants = { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0, transition: { duration: 0.4 } } }; export function WashingDashboard() { const navigate = useNavigate(); const { auth, logout } = useAuth(); const { isMobile } = useResponsive(); const [plans, setPlans] = useState([]); const [loading, setLoading] = useState(true); // 帮助中心状态 const [showHelp, setShowHelp] = useState(false); const [showOnboarding, setShowOnboarding] = useState(false); const [showUserManual, setShowUserManual] = useState(false); const [showFeedback, setShowFeedback] = useState(false); const [showAbout, setShowAbout] = useState(false); // 版本更新检查 const { showUpdate, setShowUpdate } = useVersionCheck(); // 账户卡片弹窗状态 const [showAccountCard, setShowAccountCard] = useState(false); // 最近计划轮播索引 const [currentPlanIndex, setCurrentPlanIndex] = useState(0); // 检查是否显示新手引导 useEffect(() => { if (shouldShowOnboarding('washing')) { setShowOnboarding(true); } }, []); useEffect(() => { if (!auth.company) return; fetchPlans(); }, [auth.company]); const fetchPlans = async () => { const { data: washingPlans } = await supabase .from('washing_plans') .select('*') .eq('washing_factory_id', auth.company!.id) .order('created_at', { ascending: false }); setPlans(washingPlans || []); setLoading(false); }; const stats = { all: plans.length, producing: plans.filter(p => p.status === 'processing').length, completed: plans.filter(p => p.status === 'completed').length }; // 获取进行中的计划用于轮播 const processingPlans = plans.filter(p => p.status === 'processing').slice(0, 5); return (
{/* Header - 与采购商一致 */}
setShowAccountCard(true)} className="w-8 h-8 sm:w-10 sm:h-10 bg-gradient-to-br from-violet-400 to-fuchsia-400 rounded-xl flex items-center justify-center shadow-lg shadow-violet-400/20 cursor-pointer overflow-hidden" > {(auth.user as any)?.image_url ? ( 头像 { (e.target as HTMLImageElement).style.display = 'none'; }} /> ) : ( )}

{(auth.user as any)?.display_name || auth.user?.username || '用户'} {auth.company?.name || '水洗厂'}工作台 限时免费

{(auth.user as any)?.display_name || auth.user?.username || '用户'},欢迎回来

setShowHelp(true)} />
{loading ? (
) : ( {/* 统计卡片 - 与采购商一致 */}
navigate('/washing/plans')} className="bg-white rounded-xl sm:rounded-2xl p-3 sm:p-5 shadow-sm border border-gray-100 cursor-pointer hover:border-violet-300 hover:shadow-md transition-all" >

所有计划

{stats.all}

累计接收

navigate('/washing/plans?filter=processing')} className="bg-white rounded-xl sm:rounded-2xl p-3 sm:p-5 shadow-sm border border-gray-100 cursor-pointer hover:border-violet-300 hover:shadow-md transition-all" >

进行中

{stats.producing}

正在水洗

navigate('/washing/plans?filter=completed')} className="bg-white rounded-xl sm:rounded-2xl p-3 sm:p-5 shadow-sm border border-gray-100 cursor-pointer hover:border-violet-300 hover:shadow-md transition-all" >

已完成

{stats.completed}

已完工

{/* 最近计划 - 左右滑动展示 */}

最近计划

{processingPlans.length === 0 ? (

暂无进行中的计划

) : (
{/* 滑动容器 */}
{processingPlans.map((plan, i) => { const status = statusMap[plan.status] || statusMap.pending; const StatusIcon = status.icon; return (
navigate(`/washing/plans?id=${plan.id}`)} >
{/* 计划标题行 */}

{plan.plan_code}

{status.label}

{plan.planned_meters}米

); })}
{/* 左右滑动按钮 */} {processingPlans.length > 1 && ( <> )} {/* 指示器 */} {processingPlans.length > 1 && (
{processingPlans.map((_, i) => (
)}
)}
{/* 快捷操作 - 与采购商一致 */}

快捷操作

{getQuickActions(auth.user?.is_master || false).map((action, index) => ( navigate(action.path)} className="group flex flex-col items-center p-2 sm:p-3 rounded-lg sm:rounded-xl border border-gray-100 hover:border-transparent hover:shadow-md transition-all bg-gray-50/50 hover:bg-white" >
{action.label}
))}
)}
{/* 帮助中心弹窗 */} setShowHelp(false)} /> {/* 新手引导 */} setShowOnboarding(false)} /> {/* 用户手册 */} setShowUserManual(false)} /> {/* 反馈弹窗 */} setShowFeedback(false)} /> {/* 关于窗口 */} setShowAbout(false)} /> {/* 版本更新弹窗 */} setShowUpdate(false)} /> {/* 崩溃报告 */} {/* 账户卡片弹窗 */} {showAccountCard && (
setShowAccountCard(false)}> e.stopPropagation()} > {/* 头部 */}

账户信息

{/* 账户详情 */}
{/* 用户信息 */}

{(auth.user as any)?.display_name || auth.user?.username || '用户'}

{auth.company?.name || '水洗厂'}

{auth.user?.is_master ? '主账号' : '子账号'}
{/* 功能菜单 */}
{/* 退出登录 */}
)}
); }