import React, { useState, useCallback } from 'react'; import { motion } from 'framer-motion'; import { Share2, Copy, Check, X } from 'lucide-react'; import { useResponsive } from '../../hooks/useResponsive'; import { encryptShareParams } from '../../utils/shareCrypto'; interface ShareModalProps { isOpen: boolean; onClose: () => void; planId: string; factoryType: 'textile' | 'washing'; } export function ShareModal({ isOpen, onClose, planId, factoryType }: ShareModalProps) { const { isMobile } = useResponsive(); const [copied, setCopied] = useState(false); const generateShareLink = useCallback(() => { const baseUrl = window.location.origin + window.location.pathname; const token = encryptShareParams(planId, factoryType); return `${baseUrl}#/import?token=${token}`; }, [planId, factoryType]); const handleCopy = useCallback(async () => { const link = generateShareLink(); try { await navigator.clipboard.writeText(link); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch { // 降级方案 const textarea = document.createElement('textarea'); textarea.value = link; document.body.appendChild(textarea); textarea.select(); document.execCommand('copy'); document.body.removeChild(textarea); setCopied(true); setTimeout(() => setCopied(false), 2000); } }, [generateShareLink]); if (!isOpen) return null; const link = generateShareLink(); const factoryLabel = factoryType === 'textile' ? '织布厂' : '水洗厂'; return (

分享链接

发送给{factoryLabel}

{link}

); }