import { useState } from 'react' import { useQuery } from '@tanstack/react-query' import { Shield } from 'lucide-react' import PageGuide from '../components/ui/PageGuide' import Card from '../components/ui/Card' import { commercialInsuranceApi } from '../lib/api-services' import CommercialInsuranceTab from './social-insurance/CommercialInsuranceTab' const fmt = (n: number) => (n || 0).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) const INSURANCE_TYPES: Record = { ACCIDENT: { label: '意外伤害险', color: 'bg-orange-50 text-orange-700 border border-orange-200' }, SUPPLEMENTARY_MEDICAL: { label: '补充医疗保险', color: 'bg-blue-50 text-blue-700 border border-blue-200' }, EMPLOYER_LIABILITY: { label: '雇主责任险', color: 'bg-purple-50 text-purple-700 border border-purple-200' }, CRITICAL_ILLNESS: { label: '重大疾病险', color: 'bg-rose-50 text-rose-700 border border-rose-200' }, GROUP_LIFE: { label: '团体寿险', color: 'bg-teal-50 text-teal-700 border border-teal-200' }, OTHER: { label: '其他', color: 'bg-gray-50 text-gray-700 border border-gray-200' }, } export default function CommercialInsurance() { const [tab, setTab] = useState<'plans' | 'summary'>('plans') const { data: employeeSummary = [] } = useQuery({ queryKey: ['commercial-insurance-employee-summary'], queryFn: async () => { return await commercialInsuranceApi.employeeSummary() }, enabled: tab === 'summary', }) return (

商业保险

管理商业保险方案、参保人员及保单信息

商业保险是社保之外的自愿性补充保障,包括意外伤害险、补充医疗、雇主责任险等。 点击「新增方案」创建商险计划,选择方案后可查看参保人员列表。 商业保险是系统增值服务模块,支持方案管理、参保人员追踪、保费统计。 {/* Tab 切换 */}
{(['plans', 'summary'] as const).map((t) => ( ))}
{/* ========== 方案管理 Tab ========== */} {tab === 'plans' && } {/* ========== 员工汇总 Tab ========== */} {tab === 'summary' && ( {employeeSummary.length === 0 ? (
暂无员工商险数据
) : (
{employeeSummary.map((e: any) => ( ))}
姓名 部门 保险项 年保费合计 保额合计
{e.name} {e.department}
{e.insurances.map((ins: any, i: number) => { const typeCfg = INSURANCE_TYPES[ins.type] || INSURANCE_TYPES.OTHER return ( {ins.planName} · {ins.provider} · ¥{fmt(ins.premium)} ) })}
¥{fmt(e.totalPremium)} ¥{fmt(e.totalCoverage)}
合计({employeeSummary.length}人) ¥{fmt(employeeSummary.reduce((sum: number, e: any) => sum + e.totalPremium, 0))} ¥{fmt(employeeSummary.reduce((sum: number, e: any) => sum + e.totalCoverage, 0))}
)}
)}
) }