import React, { useState, useEffect } from 'react'; import DashboardLayout from '../../components/Layout/DashboardLayout'; import { BuildingOfficeIcon, MagnifyingGlassIcon, PlusIcon, EyeIcon, PencilIcon, TrashIcon, ClockIcon, CheckCircleIcon, XCircleIcon, ChevronLeftIcon, ChevronRightIcon, UserGroupIcon, CalendarIcon, CurrencyDollarIcon, DocumentTextIcon, StarIcon, PhoneIcon, EnvelopeIcon } from '@heroicons/react/24/outline'; interface Enterprise { id: string; companyName: string; contactPerson: string; contactPhone: string; contactEmail: string; industry: string; companySize: 'small' | 'medium' | 'large' | 'enterprise'; servicePackage: 'basic' | 'standard' | 'premium' | 'custom'; contractStatus: 'active' | 'expired' | 'pending' | 'cancelled'; contractValue: number; contractStart: string; contractEnd: string; monthlyUsage: number; totalOrders: number; rating: number; address: string; website?: string; notes?: string; createdAt: string; lastActivity: string; } export default function Enterprise() { const [enterprises, setEnterprises] = useState([]); const [loading, setLoading] = useState(true); const [searchTerm, setSearchTerm] = useState(''); const [filterPackage, setFilterPackage] = useState<'all' | 'basic' | 'standard' | 'premium' | 'custom'>('all'); const [filterStatus, setFilterStatus] = useState<'all' | 'active' | 'expired' | 'pending' | 'cancelled'>('all'); const [currentPage, setCurrentPage] = useState(1); const [selectedEnterprises, setSelectedEnterprises] = useState([]); const enterprisesPerPage = 10; useEffect(() => { loadEnterprises(); }, [searchTerm, filterPackage, filterStatus, currentPage]); const loadEnterprises = async () => { try { setLoading(true); // 模拟API调用 setTimeout(() => { const mockData: Enterprise[] = [ { id: '1', companyName: '科技创新有限公司', contactPerson: '张总', contactPhone: '+86 138-0000-0001', contactEmail: 'zhang@tech-innovation.com', industry: '科技', companySize: 'large', servicePackage: 'premium', contractStatus: 'active', contractValue: 500000, contractStart: '2024-01-01', contractEnd: '2024-12-31', monthlyUsage: 45000, totalOrders: 156, rating: 4.8, address: '北京市朝阳区科技园区A座', website: 'https://tech-innovation.com', notes: '重要客户,需要优先服务', createdAt: '2023-12-15', lastActivity: '2024-01-20 15:30' }, { id: '2', companyName: '国际贸易集团', contactPerson: '李经理', contactPhone: '+86 139-0000-0002', contactEmail: 'li@international-trade.com', industry: '贸易', companySize: 'enterprise', servicePackage: 'custom', contractStatus: 'active', contractValue: 800000, contractStart: '2023-06-01', contractEnd: '2025-05-31', monthlyUsage: 68000, totalOrders: 289, rating: 4.9, address: '上海市浦东新区金融中心B座', website: 'https://international-trade.com', notes: '多语言需求,主要涉及欧洲市场', createdAt: '2023-05-20', lastActivity: '2024-01-21 09:15' }, { id: '3', companyName: '医疗设备公司', contactPerson: '王主任', contactPhone: '+86 136-0000-0003', contactEmail: 'wang@medical-device.com', industry: '医疗', companySize: 'medium', servicePackage: 'standard', contractStatus: 'active', contractValue: 200000, contractStart: '2024-01-15', contractEnd: '2024-07-14', monthlyUsage: 15000, totalOrders: 67, rating: 4.5, address: '广州市天河区医疗产业园', notes: '专业医疗术语翻译需求', createdAt: '2024-01-10', lastActivity: '2024-01-19 14:20' }, { id: '4', companyName: '教育培训机构', contactPerson: '陈校长', contactPhone: '+86 135-0000-0004', contactEmail: 'chen@education.com', industry: '教育', companySize: 'small', servicePackage: 'basic', contractStatus: 'expired', contractValue: 50000, contractStart: '2023-09-01', contractEnd: '2023-12-31', monthlyUsage: 8000, totalOrders: 34, rating: 4.2, address: '深圳市南山区教育城', notes: '合同已到期,需要续约', createdAt: '2023-08-25', lastActivity: '2024-01-05 10:45' }, { id: '5', companyName: '新兴科技公司', contactPerson: '刘总监', contactPhone: '+86 137-0000-0005', contactEmail: 'liu@emerging-tech.com', industry: '科技', companySize: 'medium', servicePackage: 'standard', contractStatus: 'pending', contractValue: 150000, contractStart: '2024-02-01', contractEnd: '2024-08-31', monthlyUsage: 0, totalOrders: 0, rating: 0, address: '杭州市西湖区创新园', website: 'https://emerging-tech.com', notes: '新客户,正在洽谈合同', createdAt: '2024-01-18', lastActivity: '2024-01-21 16:00' } ]; // 应用过滤器 let filteredData = mockData; if (searchTerm) { const term = searchTerm.toLowerCase(); filteredData = filteredData.filter(enterprise => enterprise.companyName.toLowerCase().includes(term) || enterprise.contactPerson.toLowerCase().includes(term) || enterprise.contactEmail.toLowerCase().includes(term) || enterprise.industry.toLowerCase().includes(term) ); } if (filterPackage !== 'all') { filteredData = filteredData.filter(enterprise => enterprise.servicePackage === filterPackage); } if (filterStatus !== 'all') { filteredData = filteredData.filter(enterprise => enterprise.contractStatus === filterStatus); } setEnterprises(filteredData); setLoading(false); }, 1000); } catch (error) { console.error('加载企业数据失败:', error); setLoading(false); } }; const handleSelectEnterprise = (enterpriseId: string) => { setSelectedEnterprises(prev => prev.includes(enterpriseId) ? prev.filter(id => id !== enterpriseId) : [...prev, enterpriseId] ); }; const handleSelectAll = () => { if (selectedEnterprises.length === enterprises.length) { setSelectedEnterprises([]); } else { setSelectedEnterprises(enterprises.map(enterprise => enterprise.id)); } }; const getPackageText = (packageType: string) => { switch (packageType) { case 'basic': return '基础版'; case 'standard': return '标准版'; case 'premium': return '高级版'; case 'custom': return '定制版'; default: return packageType; } }; const getPackageColor = (packageType: string) => { switch (packageType) { case 'basic': return 'bg-gray-100 text-gray-800'; case 'standard': return 'bg-blue-100 text-blue-800'; case 'premium': return 'bg-purple-100 text-purple-800'; case 'custom': return 'bg-green-100 text-green-800'; default: return 'bg-gray-100 text-gray-800'; } }; const getStatusText = (status: string) => { switch (status) { case 'active': return '生效中'; case 'expired': return '已过期'; case 'pending': return '待生效'; case 'cancelled': return '已取消'; default: return status; } }; const getStatusColor = (status: string) => { switch (status) { case 'active': return 'bg-green-100 text-green-800'; case 'expired': return 'bg-red-100 text-red-800'; case 'pending': return 'bg-yellow-100 text-yellow-800'; case 'cancelled': return 'bg-gray-100 text-gray-800'; default: return 'bg-gray-100 text-gray-800'; } }; const getStatusIcon = (status: string) => { switch (status) { case 'active': return ; case 'expired': return ; case 'pending': return ; case 'cancelled': return ; default: return ; } }; const getCompanySizeText = (size: string) => { switch (size) { case 'small': return '小型企业'; case 'medium': return '中型企业'; case 'large': return '大型企业'; case 'enterprise': return '集团企业'; default: return size; } }; const formatCurrency = (amount: number) => { return new Intl.NumberFormat('zh-CN', { style: 'currency', currency: 'CNY' }).format(amount); }; const totalPages = Math.ceil(enterprises.length / enterprisesPerPage); const currentEnterprises = enterprises.slice( (currentPage - 1) * enterprisesPerPage, currentPage * enterprisesPerPage ); if (loading) { return (
加载企业数据中...
); } return (
{/* 页面标题 */}

企业服务

管理企业客户、服务套餐和合同信息,提供专业的企业级翻译服务。

{/* 统计卡片 */}
企业客户总数
{enterprises.length}
活跃合同
{enterprises.filter(e => e.contractStatus === 'active').length}
合同总价值
{formatCurrency(enterprises.reduce((sum, e) => sum + e.contractValue, 0))}
总订单数
{enterprises.reduce((sum, e) => sum + e.totalOrders, 0)}
{/* 搜索和过滤 */}
{/* 搜索框 */}
setSearchTerm(e.target.value)} />
{/* 服务套餐过滤 */}
{/* 合同状态过滤 */}
{/* 批量操作 */} {selectedEnterprises.length > 0 && (
已选择 {selectedEnterprises.length} 个企业客户
)}
{/* 企业列表 */}
{currentEnterprises.map((enterprise) => ( ))}
0 && selectedEnterprises.length === enterprises.length} onChange={handleSelectAll} /> 企业信息 联系信息 服务套餐 合同状态 合同价值 使用情况 评价 操作
handleSelectEnterprise(enterprise.id)} />
{enterprise.companyName}
{enterprise.industry} · {getCompanySizeText(enterprise.companySize)}
{enterprise.website && (
{enterprise.website}
)}
{enterprise.contactPerson}
{enterprise.contactPhone}
{enterprise.contactEmail}
{getPackageText(enterprise.servicePackage)}
{getStatusIcon(enterprise.contractStatus)} {getStatusText(enterprise.contractStatus)}
{enterprise.contractStart} ~ {enterprise.contractEnd}
{formatCurrency(enterprise.contractValue)}
月使用:{formatCurrency(enterprise.monthlyUsage)}
订单:{enterprise.totalOrders}
最后活动:{enterprise.lastActivity}
{enterprise.rating > 0 && (
{[...Array(5)].map((_, i) => ( ))}
{enterprise.rating}
)}
{/* 分页 */} {totalPages > 1 && (

显示第 {(currentPage - 1) * enterprisesPerPage + 1} 到{' '} {Math.min(currentPage * enterprisesPerPage, enterprises.length)} 条, 共 {enterprises.length} 条记录

)}
); }