<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>贝克曼库尔特CVS合同工具</title>
    <!-- 离线版本：无需网络连接 -->
    <style>
        /* ===== Tailwind CSS 内联样式（核心类） ===== */
        *, *::before, *::after { box-sizing: border-box; }
        
        /* 基础布局 */
        .max-w-7xl { max-width: 80rem; }
        .mx-auto { margin-left: auto; margin-right: auto; }
        .px-4 { padding-left: 1rem; padding-right: 1rem; }
        .px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }
        .px-8 { padding-left: 2rem; padding-right: 2rem; }
        .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
        .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; }
        .py-4 { padding-top: 1rem; padding-bottom: 1rem; }
        .py-12 { padding-top: 3rem; padding-bottom: 3rem; }
        .pt-100 { padding-top: 100px; }
        .pb-2 { padding-bottom: 0.5rem; }
        .mb-2 { margin-bottom: 0.5rem; }
        .mb-3 { margin-bottom: 0.75rem; }
        .mb-4 { margin-bottom: 1rem; }
        .mb-6 { margin-bottom: 1.5rem; }
        .mb-8 { margin-bottom: 2rem; }
        .mt-1 { margin-top: 0.25rem; }
        .mt-2 { margin-top: 0.5rem; }
        .mt-4 { margin-top: 1rem; }
        .mt-8 { margin-top: 2rem; }
        .mt-0 { margin-top: 0; }
        .mr-2 { margin-right: 0.5rem; }
        .ml-2 { margin-left: 0.5rem; }
        .ml-4 { margin-left: 1rem; }
        .mr-1 { margin-right: 0.25rem; }
        .mr-3 { margin-right: 0.75rem; }
        .space-x-2 > * + * { margin-left: 0.5rem; }
        .space-x-3 > * + * { margin-left: 0.75rem; }
        .space-x-4 > * + * { margin-left: 1rem; }
        .space-x-8 > * + * { margin-left: 2rem; }
        .space-y-2 > * + * { margin-top: 0.5rem; }
        .space-y-3 > * + * { margin-top: 0.75rem; }
        .space-y-4 > * + * { margin-top: 1rem; }
        .space-y-8 > * + * { margin-top: 2rem; }
        .gap-2 { gap: 0.5rem; }
        .gap-3 { gap: 0.75rem; }
        .gap-4 { gap: 1rem; }
        .gap-6 { gap: 1.5rem; }
        
        /* Flex布局 */
        .flex { display: flex; }
        .flex-1 { flex: 1 1 0%; }
        .flex-wrap { flex-wrap: wrap; }
        .flex-col { flex-direction: column; }
        .flex-row { flex-direction: row; }
        .items-center { align-items: center; }
        .items-start { align-items: flex-start; }
        .items-end { align-items: flex-end; }
        .justify-center { justify-content: center; }
        .justify-between { justify-content: space-between; }
        .justify-start { justify-content: flex-start; }
        .justify-end { justify-content: flex-end; }
        
        /* Grid布局 */
        .grid { display: grid; }
        .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
        .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
        .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
        .grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
        .col-span-full { grid-column: 1 / -1; }
        
        /* 文字 */
        .text-xs { font-size: 0.75rem; line-height: 1rem; }
        .text-sm { font-size: 0.875rem; line-height: 1.25rem; }
        .text-lg { font-size: 1.125rem; line-height: 1.75rem; }
        .text-xl { font-size: 1.25rem; line-height: 1.75rem; }
        .text-2xl { font-size: 1.5rem; line-height: 2rem; }
        .text-3xl { font-size: 1.875rem; line-height: 2.25rem; }
        .text-center { text-align: center; }
        .text-left { text-align: left; }
        .text-right { text-align: right; }
        .font-medium { font-weight: 500; }
        .font-semibold { font-weight: 600; }
        .font-bold { font-weight: 700; }
        .whitespace-nowrap { white-space: nowrap; }
        .leading-relaxed { line-height: 1.625; }
        
        /* 颜色 */
        .text-white { color: #ffffff; }
        .text-gray-500 { color: #6b7280; }
        .text-gray-600 { color: #4b5563; }
        .text-gray-700 { color: #374151; }
        .text-gray-800 { color: #1f2937; }
        .text-purple-600 { color: #9333ea; }
        .text-purple-700 { color: #7c3aed; }
        .text-green-600 { color: #16a34a; }
        .text-red-600 { color: #dc2626; }
        .text-orange-600 { color: #ea580c; }
        
        /* 背景 */
        .bg-white { background-color: #ffffff; }
        .bg-gray-50 { background-color: #f9fafb; }
        .bg-gray-100 { background-color: #f3f4f6; }
        .bg-purple-50 { background-color: #faf5ff; }
        .bg-purple-100 { background-color: #f3e8ff; }
        .bg-blue-50 { background-color: #eff6ff; }
        .bg-orange-50 { background-color: #fff7ed; }
        .bg-yellow-50 { background-color: #fefce8; }
        .bg-green-500 { background-color: #22c55e; }
        .bg-blue-500 { background-color: #3b82f6; }
        .bg-gray-500 { background-color: #6b7280; }
        
        /* 边框 */
        .border { border-width: 1px; }
        .border-2 { border-width: 2px; }
        .border-gray-200 { border-color: #e5e7eb; }
        .border-gray-300 { border-color: #d1d5db; }
        .border-purple-200 { border-color: #e9d5ff; }
        .border-purple-500 { border-color: #a855f7; }
        .rounded { border-radius: 0.25rem; }
        .rounded-lg { border-radius: 0.5rem; }
        .rounded-xl { border-radius: 0.75rem; }
        .rounded-full { border-radius: 9999px; }
        
        /* 其他 */
        .hidden { display: none !important; }
        .block { display: block; }
        .inline-block { display: inline-block; }
        .cursor-pointer { cursor: pointer; }
        .overflow-x-auto { overflow-x: auto; }
        .overflow-hidden { overflow: hidden; }
        .transition-all { transition: all 0.3s; }
        .transition-colors { transition: color, background-color, border-color 0.3s; }
        .hover\:border-purple-400:hover { border-color: #c084fc; }
        .hover\:border-purple-300:hover { border-color: #d8b4fe; }
        .hover\:bg-purple-50:hover { background-color: #faf5ff; }
        .hover\:bg-purple-600:hover { background-color: #9333ea; }
        .hover\:bg-blue-600:hover { background-color: #2563eb; }
        .hover\:bg-gray-600:hover { background-color: #4b5563; }
        .hover\:bg-green-600:hover { background-color: #16a34a; }
        .hover\:bg-red-50:hover { background-color: #fef2f2; }
        .hover\:text-purple-800:hover { color: #6b21a8; }
        .hover\:text-red-700:hover { color: #b91c1c; }
        .hover\:shadow-md:hover { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); }
        .shadow-sm { box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); }
        .shadow-lg { box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); }
        .min-w-0 { min-width: 0; }
        .w-full { width: 100%; }
        .w-4 { width: 1rem; }
        .w-5 { width: 1.25rem; }
        .w-8 { width: 2rem; }
        .w-10 { width: 2.5rem; }
        .w-20 { width: 5rem; }
        .w-24 { width: 6rem; }
        .h-4 { height: 1rem; }
        .h-5 { height: 1.25rem; }
        .h-8 { height: 2rem; }
        .h-10 { height: 2.5rem; }
        .h-16 { height: 4rem; }
        .h-20 { height: 5rem; }
        .h-full { height: 100%; }
        
        /* 响应式 - lg */
        @media (min-width: 1024px) {
            .lg\:col-span-5 { grid-column: span 5 / span 5; }
            .lg\:col-span-7 { grid-column: span 7 / span 7; }
            .lg\:col-span-12 { grid-column: span 12 / span 12; }
            .lg\:grid-cols-12 { grid-template-columns: repeat(12, minmax(0, 1fr)); }
            .lg\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
            .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
            .lg\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
            .lg\:px-8 { padding-left: 2rem; padding-right: 2rem; }
        }
        
        /* 响应式 - md */
        @media (min-width: 768px) {
            .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
            .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
            .md\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
            .md\:flex { display: flex; }
        }
        
        /* ===== 原有样式 ===== */
        * { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "PingFang SC", "Hiragino Sans GB", sans-serif; box-sizing: border-box; }
        body {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 25%, #8b5cf6 50%, #a855f7 75%, #c084fc 100%);
            min-height: 100vh;
            background-attachment: fixed;
            margin: 0;
            padding-bottom: 5rem;
        }
        .glass-panel {
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(10px);
            border: 1px solid rgba(255, 255, 255, 0.2);
            box-shadow: 0 8px 32px rgba(31, 38, 135, 0.37);
            border-radius: 1rem;
            padding: 2rem;
            margin-bottom: 2rem;
            animation: fadeIn 0.5s ease-in;
        }
        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(10px); }
            to { opacity: 1; transform: translateY(0); }
        }
        .sticky-nav {
            position: sticky;
            top: 0;
            z-index: 50;
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(10px);
            border-bottom: 1px solid rgba(139, 92, 246, 0.2);
            box-shadow: 0 2px 10px rgba(0,0,0,0.05);
        }
        .nav-item { transition: all 0.3s; padding: 1.25rem 0.5rem; cursor: pointer; border: none; background: none; font-size: 0.875rem; font-weight: 500; color: #4b5563; }
        .nav-item:hover { color: #8b5cf6; }
        .nav-item.active { color: #8b5cf6; border-bottom: 2px solid #8b5cf6; }

        .btn-primary {
            background: linear-gradient(135deg, #8b5cf6 0%, #a855f7 100%);
            color: white;
            transition: all 0.3s;
            border: none;
            padding: 0.75rem 1.5rem;
            border-radius: 0.75rem;
            cursor: pointer;
            font-weight: 600;
        }
        .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 10px 20px rgba(139, 92, 246, 0.3); }

        .checkbox-custom:checked + div {
            background: linear-gradient(135deg, #8b5cf6 0%, #a855f7 100%);
            color: white;
            border-color: transparent;
        }

        .editable-field {
            border: 1px dashed transparent;
            padding: 2px 4px;
            border-radius: 4px;
            transition: all 0.2s;
        }
        .editable-field:hover { border-color: #8b5cf6; background: rgba(139, 92, 246, 0.05); }
        .editable-field:focus { border-color: #8b5cf6; background: white; outline: none; border-style: solid; }

        .price-input, .instrument-name-edit {
            background: transparent;
            border: 2px dashed transparent;
            border-radius: 4px;
            padding: 4px;
            transition: all 0.2s;
        }
        .price-input:hover, .instrument-name-edit:hover { border-color: #8b5cf6; }
        .price-input:focus, .instrument-name-edit:focus { border-color: #8b5cf6; background: white; outline: none; border-style: solid; }

        .metric-green { background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%); border: 2px solid #22c55e; color: #166534; }
        .metric-red { background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%); border: 2px solid #ef4444; color: #991b1b; }

        .comparison-card { transition: all 0.3s; border: 2px solid #e5e7eb; border-radius: 0.75rem; padding: 1.5rem; background: white; position: relative; }
        .comparison-card:hover { transform: translateY(-5px); box-shadow: 0 20px 40px rgba(0,0,0,0.1); }
        .comparison-card.selected { border-color: #8b5cf6; box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.2); background: linear-gradient(135deg, #faf5ff 0%, #f3e8ff 100%); }

        .scheme-selection-indicator {
            position: absolute;
            top: -8px; left: -8px;
            width: 28px; height: 28px;
            background: #8b5cf6;
            color: white;
            border-radius: 50%;
            display: flex; align-items: center; justify-content: center;
            font-weight: bold;
            box-shadow: 0 2px 8px rgba(139, 92, 246, 0.4);
            z-index: 10;
        }

        .pdf-bg-option {
            position: relative;
            transition: all 0.3s;
            cursor: pointer;
            border: 2px solid #e5e7eb;
            border-radius: 0.5rem;
            padding: 0.75rem;
            text-align: center;
        }
        .pdf-bg-option:hover { border-color: #8b5cf6; }
        .pdf-bg-option.selected { border-color: #8b5cf6 !important; border-width: 3px !important; }
        .pdf-bg-option.selected::after {
            content: '✓';
            position: absolute; top: -10px; right: -10px;
            width: 24px; height: 24px;
            background: #8b5cf6; color: white;
            border-radius: 50%;
            display: flex; align-items: center; justify-content: center;
            font-weight: bold;
            font-size: 14px;
        }

        .hidden { display: none !important; }
        .text-center { text-align: center; }
        .gradient-text {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
        }

        input[type="number"]::-webkit-inner-spin-button,
        input[type="number"]::-webkit-outer-spin-button {
            -webkit-appearance: none;
            margin: 0;
        }

        @media print {
            body { background: white !important; padding: 0; margin: 0; }
            .no-print, .sticky-nav { display: none !important; }
            .glass-panel { box-shadow: none !important; border: 1px solid #ddd !important; margin: 0 0 1rem 0; }
        }

        /* 对比表格样式优化 */
        .comparison-table {
            width: 100%;
            border-collapse: collapse;
            font-size: 13px;
        }
        .comparison-table th {
            background: linear-gradient(135deg, #f3e8ff 0%, #e0e7ff 100%);
            border: 1px solid #c4b5fd;
            padding: 12px 8px;
            text-align: center;
            font-weight: 600;
            color: #5b21b6;
            position: sticky;
            top: 0;
            z-index: 10;
        }
        .comparison-table td {
            border: 1px solid #ddd6fe;
            padding: 12px 8px;
            vertical-align: top;
        }
        .comparison-table tr:nth-child(even) {
            background-color: #faf5ff;
        }
        .comparison-table tr:hover {
            background-color: #f3e8ff;
        }
        .scheme-name-cell {
            font-weight: 600;
            color: #7c3aed;
            background: #faf5ff;
            text-align: center;
            vertical-align: middle !important;
            width: 110px;
        }
        .detail-item {
            margin-bottom: 10px;
            padding-bottom: 10px;
            border-bottom: 1px solid #f3e8ff;
            line-height: 1.5;
        }
        .detail-item:last-child {
            border-bottom: none;
            margin-bottom: 0;
            padding-bottom: 0;
        }
        .service-name {
            font-weight: 600;
            color: #1f2937;
            font-size: 13px;
            margin-bottom: 4px;
        }
        .service-desc {
            font-size: 12px;
            color: #6b7280;
            line-height: 1.6;
        }
        .price-tag {
            color: #7c3aed;
            font-weight: 700;
            font-size: 14px;
        }
        .consumable-tag {
            display: inline-block;
            background: #dbeafe;
            color: #1e40af;
            padding: 3px 8px;
            border-radius: 4px;
            font-size: 12px;
            margin: 2px;
            border: 1px solid #bfdbfe;
        }
        .value-service-item {
            background: #fff7ed;
            border: 1px solid #fed7aa;
            border-radius: 4px;
            padding: 6px 8px;
            margin-bottom: 6px;
        }

        /* 服务详情分类样式 */
        .service-category {
            background: #f8fafc;
            border-left: 4px solid #8b5cf6;
            padding: 12px;
            margin-bottom: 12px;
            border-radius: 0 8px 8px 0;
        }
        .service-category-title {
            font-weight: 700;
            color: #5b21b6;
            font-size: 13px;
            margin-bottom: 8px;
            display: flex;
            align-items: center;
            gap: 6px;
        }
        .service-category-content {
            font-size: 12px;
            color: #374151;
            line-height: 1.8;
            padding-left: 8px;
        }
        .service-category-content ol {
            margin: 0;
            padding-left: 16px;
        }
        .service-category-content li {
            margin-bottom: 4px;
        }
    </style>
</head>
<body>
<!-- 密码保护 -->
<style>
    #password-overlay {
        position: fixed;
        top: 0; left: 0; right: 0; bottom: 0;
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        display: flex;
        align-items: center;
        justify-content: center;
        z-index: 99999;
    }
    #password-box {
        background: white;
        padding: 40px;
        border-radius: 16px;
        box-shadow: 0 20px 60px rgba(0,0,0,0.3);
        text-align: center;
        max-width: 400px;
        width: 90%;
    }
    #password-box h2 {
        color: #7c3aed;
        margin-bottom: 10px;
        font-size: 24px;
    }
    #password-box p {
        color: #6b7280;
        margin-bottom: 20px;
        font-size: 14px;
    }
    #password-input {
        width: 100%;
        padding: 15px 20px;
        border: 2px solid #e5e7eb;
        border-radius: 10px;
        font-size: 18px;
        text-align: center;
        letter-spacing: 8px;
        margin-bottom: 15px;
        outline: none;
        transition: border-color 0.3s;
    }
    #password-input:focus {
        border-color: #7c3aed;
    }
    #password-submit {
        width: 100%;
        padding: 15px;
        background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);
        color: white;
        border: none;
        border-radius: 10px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: transform 0.2s, box-shadow 0.2s;
    }
    #password-submit:hover {
        transform: translateY(-2px);
        box-shadow: 0 10px 20px rgba(124, 58, 237, 0.3);
    }
    #password-error {
        color: #ef4444;
        font-size: 14px;
        margin-top: 10px;
        display: none;
    }
    #main-content { display: none; }
</style>

<div id="password-overlay">
    <div id="password-box">
        <h2>🔐 访问验证</h2>
        <p>请输入访问密令</p>
        <input type="password" id="password-input" placeholder="****" maxlength="4" autofocus>
        <button id="password-submit" onclick="checkPassword()">确认访问</button>
        <div id="password-error">密令错误，请重新输入</div>
    </div>
</div>

<script>
function checkPassword() {
    const input = document.getElementById('password-input').value;
    if (input === '4592') {
        document.getElementById('password-overlay').style.display = 'none';
        document.getElementById('main-content').style.display = 'block';
        localStorage.setItem('access_granted', 'true');
    } else {
        document.getElementById('password-error').style.display = 'block';
        document.getElementById('password-input').value = '';
        document.getElementById('password-input').focus();
    }
}

document.getElementById('password-input').addEventListener('keypress', function(e) {
    if (e.key === 'Enter') checkPassword();
});

// 检查是否已验证
if (localStorage.getItem('access_granted') === 'true') {
    document.getElementById('password-overlay').style.display = 'none';
    document.getElementById('main-content').style.display = 'block';
}
</script>

<div id="main-content">

    <nav class="sticky-nav mb-8">
        <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
            <div class="flex justify-between items-center h-16">
                <div class="flex items-center space-x-3">
                    <div class="w-10 h-10 rounded-lg bg-gradient-to-br from-purple-500 to-indigo-600 flex items-center justify-center text-white font-bold text-xl">CVS</div>
                    <h1 class="text-xl font-bold gradient-text">贝克曼库尔特CVS合同工具</h1>
                </div>
                <div class="hidden md:flex space-x-8 text-sm font-medium text-gray-600">
                    <button onclick="scrollToModule('module1')" class="nav-item">基本信息</button>
                    <button onclick="scrollToModule('module2')" class="nav-item">服务详情</button>
                    <button onclick="scrollToModule('module3')" class="nav-item">耗材清单</button>
                    <button onclick="scrollToModule('module4')" class="nav-item">方案确认</button>
                    <button onclick="scrollToModule('module5')" class="nav-item">成本效益</button>
                    <button onclick="scrollToModule('module6')" class="nav-item">报价单</button>
                    <button onclick="scrollToModule('module7')" class="nav-item">生成报告</button>
                </div>
            </div>
        </div>
    </nav>

    <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 space-y-8">
        <!-- 模块一 -->
        <section id="module1" class="glass-panel">
            <div class="flex items-center justify-between mb-6">
                <div class="flex items-center space-x-3">
                    <div class="w-8 h-8 rounded-full bg-purple-100 flex items-center justify-center text-purple-600 font-bold">1</div>
                    <h2 class="text-2xl font-bold text-gray-800">基本信息配置</h2>
                </div>
                <span class="text-sm text-gray-500 bg-purple-50 px-3 py-1 rounded-full">基础配置</span>
            </div>

            <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6">
                <div>
                    <label class="block text-sm font-medium text-gray-700 mb-2">医院名称</label>
                    <input type="text" id="hospitalName" placeholder="请输入医院全称" 
                           class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-purple-500 focus:border-transparent"
                           onchange="updateQuote()">
                </div>
                <div>
                    <label class="block text-sm font-medium text-gray-700 mb-2">联系人</label>
                    <input type="text" id="contactPerson" placeholder="请输入联系人姓名" 
                           class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-purple-500 focus:border-transparent">
                </div>
            </div>

            <div class="mb-6">
                <label class="block text-sm font-medium text-gray-700 mb-3">选择机型（可多选，点击名称可编辑）</label>
                <div class="grid grid-cols-2 md:grid-cols-4 gap-4" id="instrumentContainer"></div>
            </div>

            <div class="mb-6">
                <label class="block text-sm font-medium text-gray-700 mb-2">备注信息</label>
                <textarea id="remarks" rows="3" placeholder="请输入特殊要求或仪器序列号等信息..." 
                          class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-purple-500 resize-none"
                          onchange="updateQuote()"></textarea>
            </div>

            <div class="mb-6 hidden" id="serviceNeedsSection">
                <div class="flex justify-between items-center mb-3">
                    <label class="block text-sm font-medium text-gray-700">可选合同列表</label>
                    <span class="text-xs text-gray-500 bg-blue-100 px-2 py-1 rounded">名称和价格可编辑</span>
                </div>
                <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3" id="serviceNeedsContainer"></div>
            </div>

            <div class="mb-6 hidden" id="valueAddedSection">
                <div class="flex justify-between items-center mb-3">
                    <label class="block text-sm font-medium text-gray-700">可选价值服务</label>
                    <button onclick="resetValueAddedServices()" class="text-xs text-purple-600 hover:text-purple-800 underline">重置默认值</button>
                </div>
                <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-3" id="valueAddedContainer"></div>
            </div>
        </section>

        <!-- 模块二 -->
        <section id="module2" class="glass-panel">
            <div class="flex items-center justify-between mb-6">
                <div class="flex items-center space-x-3">
                    <div class="w-8 h-8 rounded-full bg-purple-100 flex items-center justify-center text-purple-600 font-bold">2</div>
                    <h2 class="text-2xl font-bold text-gray-800">服务详情展示</h2>
                </div>
                <span class="text-sm text-gray-500 bg-blue-50 px-3 py-1 rounded-full">按类别分组展示</span>
            </div>
            <div id="serviceDetailsContent" class="space-y-4">
                <div class="text-center text-gray-500 py-12 bg-gray-50 rounded-xl border-2 border-dashed border-gray-200">
                    <p>请在模块一中选择机型和服务内容以查看详情</p>
                </div>
            </div>
        </section>

        <!-- 模块三 -->
        <section id="module3" class="glass-panel">
            <div class="flex items-center justify-between mb-6">
                <div class="flex items-center space-x-3">
                    <div class="w-8 h-8 rounded-full bg-purple-100 flex items-center justify-center text-purple-600 font-bold">3</div>
                    <h2 class="text-2xl font-bold text-gray-800">保养包内容物及耗材</h2>
                </div>
                <div class="flex space-x-2">
                    <button onclick="addConsumableRow()" class="px-4 py-2 bg-green-500 text-white rounded-lg hover:bg-green-600 transition-colors text-sm font-medium flex items-center space-x-1">
                        <span>+ 添加耗材</span>
                    </button>
                    <span class="text-sm text-gray-500 bg-orange-50 px-3 py-1 rounded-full">按需增减</span>
                </div>
            </div>

            <div class="overflow-x-auto">
                <table class="w-full text-left border-collapse">
                    <thead>
                        <tr class="bg-gradient-to-r from-purple-50 to-indigo-50 text-gray-700">
                            <th class="px-4 py-3 rounded-tl-lg font-semibold text-sm">关联服务</th>
                            <th class="px-4 py-3 font-semibold text-sm">耗材名称</th>
                            <th class="px-4 py-3 font-semibold text-sm">货号</th>
                            <th class="px-4 py-3 font-semibold text-sm text-center">数量</th>
                            <th class="px-4 py-3 font-semibold text-sm text-right">单价(元)</th>
                            <th class="px-4 py-3 font-semibold text-sm text-right">小计(元)</th>
                            <th class="px-4 py-3 rounded-tr-lg font-semibold text-sm text-center">操作</th>
                        </tr>
                    </thead>
                    <tbody id="consumablesTableBody" class="divide-y divide-gray-100"></tbody>
                    <tfoot class="bg-gray-50 font-semibold">
                        <tr>
                            <td colspan="5" class="px-4 py-3 text-right text-gray-600">耗材总计：</td>
                            <td class="px-4 py-3 text-right text-purple-600 text-lg" id="consumablesTotal">¥0</td>
                            <td></td>
                        </tr>
                    </tfoot>
                </table>
            </div>

            <div id="consumablesEmpty" class="text-center text-gray-500 py-8 bg-gray-50 rounded-xl border-2 border-dashed border-gray-200 mt-4">
                <p>暂无关联耗材，请在上方添加或选择服务需求</p>
            </div>
        </section>

        <!-- 模块四 -->
        <section id="module4" class="glass-panel">
            <div class="flex items-center justify-between mb-6">
                <div class="flex items-center space-x-3">
                    <div class="w-8 h-8 rounded-full bg-purple-100 flex items-center justify-center text-purple-600 font-bold">4</div>
                    <h2 class="text-2xl font-bold text-gray-800">多项方案确认&比较</h2>
                </div>
                <div class="flex space-x-2">
                    <button onclick="saveCurrentScheme()" class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors text-sm font-medium">保存当前方案</button>
                    <button onclick="clearSelection()" class="px-4 py-2 bg-gray-500 text-white rounded-lg hover:bg-gray-600 transition-colors text-sm font-medium">清空选择</button>
                    <span class="text-sm text-gray-500 bg-indigo-50 px-3 py-1 rounded-full">最多20个方案</span>
                </div>
            </div>

            <div id="selectionSummary" class="mb-6 bg-gradient-to-r from-purple-50 to-indigo-50 rounded-xl p-4 border border-purple-200 hidden">
                <div class="flex justify-between items-center">
                    <div>
                        <span class="text-sm font-medium text-gray-700">已选择方案：</span>
                        <span id="selectedCount" class="text-lg font-bold text-purple-600">0</span>
                        <span class="text-sm text-gray-500">/ 20</span>
                    </div>
                    <div class="text-right">
                        <span class="text-sm font-medium text-gray-700">合并总价：</span>
                        <span id="selectedTotalPrice" class="text-xl font-bold text-purple-600">¥0</span>
                    </div>
                </div>
                <div id="selectedSchemeNames" class="mt-2 text-sm text-gray-600 flex flex-wrap gap-2"></div>
            </div>

            <div id="comparisonContainer" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
                <div class="col-span-full text-center text-gray-500 py-12 bg-gray-50 rounded-xl border-2 border-dashed border-gray-200">
                    <p>点击"保存当前方案"添加方案（最多保存20个方案）</p>
                    <p class="text-xs mt-2">勾选方案可进行比较或合并计算报价单</p>
                </div>
            </div>
        </section>

        <!-- 模块五 -->
        <section id="module5" class="glass-panel">
            <div class="flex items-center justify-between mb-6">
                <div class="flex items-center space-x-3">
                    <div class="w-8 h-8 rounded-full bg-purple-100 flex items-center justify-center text-purple-600 font-bold">5</div>
                    <h2 class="text-2xl font-bold text-gray-800">科室效益与维保购买力分析</h2>
                </div>
                <span class="text-sm text-gray-500 bg-green-50 px-3 py-1 rounded-full">维保预算评估</span>
            </div>

            <div class="grid grid-cols-1 lg:grid-cols-12 gap-6">
                <div class="lg:col-span-5 space-y-4">
                    <div class="bg-purple-50 rounded-xl p-5 border border-purple-100">
                        <h3 class="font-semibold text-gray-800 mb-4 text-sm">成本参数设置（6项）</h3>
                        <div class="space-y-3">
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">设备购置价格（元）</label><input type="number" id="equipmentCost" value="2000000" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-purple-500 text-sm" onchange="calculateBenefit()"></div>
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">年设备维修总价（元）</label><input type="number" id="maintenanceCost" value="55000" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-purple-500 text-sm" onchange="calculateBenefit()"></div>
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">设备维护保养（元）</label><input type="number" id="maintenanceFee" value="0" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-purple-500 text-sm" onchange="calculateBenefit()"></div>
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">校准费用（元）</label><input type="number" id="calibrationCost" value="12800" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-purple-500 text-sm" onchange="calculateBenefit()"></div>
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">水、电、场地、物业（元）</label><input type="number" id="overheadCost" value="200000" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-purple-500 text-sm" onchange="calculateBenefit()"></div>
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">计划使用年度（年）</label><input type="number" id="useYears" value="6" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-purple-500 text-sm" onchange="calculateBenefit()"></div>
                        </div>
                    </div>
                    <div class="bg-blue-50 rounded-xl p-5 border border-blue-100">
                        <h3 class="font-semibold text-gray-800 mb-4 text-sm">收入与运营参数（6项）</h3>
                        <div class="space-y-3">
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">设备年收入（元）</label><input type="number" id="annualRevenue" value="6936360" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 text-sm" onchange="calculateBenefit()"></div>
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">试剂耗材成本（元）</label><input type="number" id="reagentCost" value="2180908" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 text-sm" onchange="calculateBenefit()"></div>
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">人力成本（元）</label><input type="number" id="laborCost" value="300000" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 text-sm" onchange="calculateBenefit()"></div>
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">日均测试数（T）</label><input type="number" id="dailyTests" value="2716" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 text-sm" onchange="calculateBenefit()"></div>
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">年开机天数（天）</label><input type="number" id="annualOperatingDays" value="360" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 text-sm" onchange="calculateBenefit()"></div>
                            <div><label class="block text-xs font-medium text-gray-600 mb-1">日均工作时间（小时）</label><input type="number" id="dailyHours" value="10" class="w-full px-3 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 text-sm" onchange="calculateBenefit()"></div>
                        </div>
                    </div>
                </div>

                <div class="lg:col-span-7 space-y-4">
                    <div class="grid grid-cols-2 gap-4">
                        <div class="metric-green rounded-xl p-4" id="ratioPurchaseCard"><div class="text-xs font-medium opacity-80 mb-1">维保费用占比（购置金额）</div><div class="text-2xl font-bold" id="ratioPurchase">3.39%</div><div class="text-xs mt-1">标准：≤8%</div><div class="text-xs font-medium mt-1" id="ratioPurchaseStatus">✓ 有购买预算</div></div>
                        <div class="metric-green rounded-xl p-4" id="ratioBenefitCard"><div class="text-xs font-medium opacity-80 mb-1">维保费用占比（净效益）</div><div class="text-2xl font-bold" id="ratioBenefit">1.62%</div><div class="text-xs mt-1">标准：≤10%</div><div class="text-xs font-medium mt-1" id="ratioBenefitStatus">✓ 有支付能力</div></div>
                        <div class="metric-green rounded-xl p-4" id="utilizationCard"><div class="text-xs font-medium opacity-80 mb-1">设备利用率</div><div class="text-2xl font-bold" id="utilizationRate">82.0%</div><div class="text-xs mt-1">标准：≥80%</div><div class="text-xs font-medium mt-1" id="utilizationStatus">✓ 主力机</div></div>
                        <div class="metric-green rounded-xl p-4" id="paybackCard"><div class="text-xs font-medium opacity-80 mb-1">投资回收期</div><div class="text-2xl font-bold" id="paybackPeriod">0.48年</div><div class="text-xs mt-1">标准：≤3年</div><div class="text-xs font-medium mt-1" id="paybackStatus">✓ 建议购买</div></div>
                    </div>
                    <div class="bg-white rounded-xl border border-gray-200 p-5">
                        <h3 class="font-semibold text-gray-800 mb-4 text-sm border-b pb-2">计算参数</h3>
                        <div class="grid grid-cols-2 gap-y-3 gap-x-6 text-sm">
                            <div class="flex justify-between py-2 border-b border-gray-100"><span class="text-gray-600">业务年净效益</span><span class="font-semibold text-green-600" id="annualNetBenefit">¥4,187,652</span></div>
                            <div class="flex justify-between py-2 border-b border-gray-100"><span class="text-gray-600">业务年收入</span><span class="font-semibold text-gray-800" id="annualRevenueDisplay">¥6,936,360</span></div>
                            <div class="flex justify-between py-2 border-b border-gray-100"><span class="text-gray-600">设备折旧/年</span><span class="font-semibold text-gray-800" id="annualDepreciation">¥333,333</span></div>
                            <div class="flex justify-between py-2 border-b border-gray-100"><span class="text-gray-600">设备折旧/测试</span><span class="font-semibold text-gray-800" id="depPerTest">¥0.34</span></div>
                        </div>
                    </div>
                    <div class="bg-gray-50 rounded-xl border border-gray-200 p-5">
                        <h3 class="font-semibold text-gray-800 mb-4 text-sm border-b pb-2">参考指标</h3>
                        <div class="grid grid-cols-2 gap-y-3 gap-x-6 text-sm">
                            <div class="flex justify-between py-2 border-b border-gray-100"><span class="text-gray-600">年测试总量</span><span class="font-semibold text-gray-800" id="annualTestVolume">977,760 T</span></div>
                            <div class="flex justify-between py-2 border-b border-gray-100"><span class="text-gray-600">年总成本（含折旧）</span><span class="font-semibold text-red-600" id="annualTotalCost">¥3,161,241</span></div>
                        </div>
                    </div>
                    <div class="bg-gradient-to-r from-yellow-50 to-orange-50 rounded-xl p-4 border border-yellow-200">
                        <div class="flex items-start space-x-3">
                            <svg class="w-5 h-5 text-yellow-600 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
                            <div>
                                <p class="font-semibold text-yellow-800 text-sm mb-1">智能分析建议</p>
                                <p class="text-sm text-yellow-700" id="benefitSuggestion">当前设备投资回收期短，利用率高，建议购买全面维保服务。</p>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <!-- 模块六 -->
        <section id="module6" class="glass-panel">
            <div class="flex items-center justify-between mb-6">
                <div class="flex items-center space-x-3">
                    <div class="w-8 h-8 rounded-full bg-purple-100 flex items-center justify-center text-purple-600 font-bold">6</div>
                    <h2 class="text-2xl font-bold text-gray-800">报价单生成</h2>
                </div>
                <div class="flex items-center space-x-2">
                    <span id="quoteSourceIndicator" class="text-sm text-gray-500 bg-yellow-50 px-3 py-1 rounded-full">基于当前编辑</span>
                    <span class="text-sm text-gray-500 bg-red-50 px-3 py-1 rounded-full">实时计算</span>
                </div>
            </div>

            <div class="bg-white rounded-xl border border-gray-200 overflow-hidden shadow-sm">
                <div class="bg-gradient-to-r from-purple-600 to-indigo-600 text-white p-6">
                    <div class="flex justify-between items-start">
                        <div>
                            <h3 class="text-2xl font-bold mb-2">贝克曼库尔特CVS合同</h3>
                            <p class="text-purple-100" id="quoteHospitalName">医院名称：待填写</p>
                            <p class="text-purple-100 text-sm mt-1" id="quoteDate">报价日期：2026-03-19</p>
                        </div>
                        <div class="text-right">
                            <div class="text-3xl font-bold" id="quoteTotalPrice">¥0</div>
                            <div class="text-purple-100 text-sm">总价</div>
                        </div>
                    </div>
                </div>

                <div class="p-6">
                    <div class="mb-6">
                        <h4 class="font-semibold text-gray-800 mb-3 pb-2 border-b border-gray-200">服务项目清单</h4>
                        <div id="quoteServiceList" class="space-y-1"></div>
                    </div>

                    <div class="mb-6" id="quoteConsumablesSection">
                        <h4 class="font-semibold text-gray-800 mb-3 pb-2 border-b border-gray-200">包含耗材</h4>
                        <div id="quoteConsumablesList" class="space-y-2 text-sm text-gray-600"></div>
                    </div>

                    <div class="bg-gray-50 rounded-lg p-4 mb-6">
                        <div class="flex items-center justify-between mb-3">
                            <span class="text-gray-600">服务合计</span>
                            <span class="font-semibold" id="quoteSubtotal">¥0</span>
                        </div>
                        <div class="flex items-center justify-between mb-3">
                            <span class="text-gray-600">耗材费用</span>
                            <span class="font-semibold" id="quoteConsumablesTotal">¥0</span>
                        </div>
                        <div id="discountAmountRow" class="hidden flex items-center justify-between mb-3">
                            <span class="text-red-600">折扣优惠</span>
                            <span class="font-semibold text-red-600" id="discountAmount">-¥0</span>
                        </div>
                        <div class="flex items-center space-x-4 mb-3">
                            <span class="text-gray-600 whitespace-nowrap">折扣率 (%)</span>
                            <input type="number" id="discountRate" value="0" min="0" max="100" 
                                   class="w-24 px-3 py-1 rounded border border-gray-300 text-right" onchange="updateQuote()">
                        </div>
                        <div class="border-t border-gray-300 pt-3 flex items-center justify-between text-xl font-bold">
                            <span class="text-gray-800">最终报价</span>
                            <span class="text-purple-600" id="quoteFinalPrice">¥0</span>
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <!-- 模块七 -->
        <section id="module7" class="glass-panel">
            <div class="flex items-center justify-between mb-6">
                <div class="flex items-center space-x-3">
                    <div class="w-8 h-8 rounded-full bg-purple-100 flex items-center justify-center text-purple-600 font-bold">7</div>
                    <h2 class="text-2xl font-bold text-gray-800">生成汇总报告</h2>
                </div>
                <span class="text-sm text-gray-500 bg-purple-50 px-3 py-1 rounded-full">PDF导出</span>
            </div>

            <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
                <div class="space-y-6">
                    <div class="bg-white rounded-xl p-6 border border-gray-200">
                        <h3 class="font-semibold text-gray-800 mb-4">报告内容配置</h3>
                        <div class="grid grid-cols-2 gap-3">
                            <label class="flex items-center space-x-3 cursor-pointer p-2 hover:bg-gray-50 rounded">
                                <input type="checkbox" id="includeBasic" checked class="w-5 h-5 text-purple-600 rounded">
                                <span class="text-gray-700 text-sm">基本信息</span>
                            </label>
                            <label class="flex items-center space-x-3 cursor-pointer p-2 hover:bg-gray-50 rounded">
                                <input type="checkbox" id="includeService" checked class="w-5 h-5 text-purple-600 rounded">
                                <span class="text-gray-700 text-sm">服务详情</span>
                            </label>
                            <label class="flex items-center space-x-3 cursor-pointer p-2 hover:bg-gray-50 rounded">
                                <input type="checkbox" id="includeConsumables" checked class="w-5 h-5 text-purple-600 rounded">
                                <span class="text-gray-700 text-sm">耗材清单</span>
                            </label>
                            <label class="flex items-center space-x-3 cursor-pointer p-2 hover:bg-gray-50 rounded">
                                <input type="checkbox" id="includeBenefit" checked class="w-5 h-5 text-purple-600 rounded">
                                <span class="text-gray-700 text-sm">成本效益分析</span>
                            </label>
                            <label class="flex items-center space-x-3 cursor-pointer p-2 hover:bg-gray-50 rounded">
                                <input type="checkbox" id="includeQuote" checked class="w-5 h-5 text-purple-600 rounded">
                                <span class="text-gray-700 text-sm">报价单</span>
                            </label>
                        </div>
                    </div>

                    <div class="bg-white rounded-xl p-6 border border-gray-200">
                        <h3 class="font-semibold text-gray-800 mb-4">PDF背景设置</h3>
                        <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
                            <div class="pdf-bg-option selected" onclick="selectBg(this, 'none')">
                                <div class="w-full h-20 bg-white border border-gray-200 rounded mb-2"></div>
                                <span class="text-sm text-gray-600">纯白背景</span>
                            </div>
                            <div class="pdf-bg-option" onclick="selectBg(this, 'purple')">
                                <div class="w-full h-20 bg-gradient-to-br from-purple-100 to-indigo-100 rounded mb-2"></div>
                                <span class="text-sm text-gray-600">淡紫渐变</span>
                            </div>
                            <div class="pdf-bg-option" onclick="selectBg(this, 'medical')">
                                <div class="w-full h-20 bg-blue-50 rounded mb-2 flex items-center justify-center text-blue-300 text-xs">医疗风格</div>
                                <span class="text-sm text-gray-600">医疗风格</span>
                            </div>
                            <div class="pdf-bg-option" onclick="selectBg(this, 'custom')">
                                <div class="w-full h-20 bg-gray-100 rounded mb-2 flex items-center justify-center" id="customBgPreview">
                                    <span class="text-gray-400 text-xs">自定义</span>
                                </div>
                                <span class="text-sm text-gray-600">自定义图片</span>
                            </div>
                        </div>
                        <div id="customBgUpload" class="mt-4 hidden">
                            <input type="file" accept="image/*" id="bgImageInput" 
                                   class="block w-full text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-sm file:font-semibold file:bg-purple-50 file:text-purple-700 hover:file:bg-purple-100" 
                                   onchange="handleCustomBgUpload(this)">
                            <p class="text-xs text-gray-500 mt-2">支持 JPG、PNG 格式，建议尺寸 794x1123 像素（A4比例）</p>
                        </div>
                    </div>
                </div>

                <div class="space-y-4">
                    <div class="grid grid-cols-2 gap-3">
                        <button onclick="openPreviewWindow()" class="btn-primary flex items-center justify-center space-x-2">
                            <span>👁️ 新窗口预览</span>
                        </button>
                        <button onclick="generatePDF()" class="bg-green-600 hover:bg-green-700 text-white font-bold py-3 px-4 rounded-xl shadow-lg flex items-center justify-center space-x-2 transition-all">
                            <span>📄 生成PDF</span>
                        </button>
                    </div>

                    <div class="bg-yellow-50 border border-yellow-200 rounded-xl p-4 text-sm text-yellow-800">
                        <p class="font-semibold mb-2">📋 功能说明：</p>
                        <ul class="list-disc list-inside space-y-1 text-xs">
                            <li>支持选择多个方案合并计算报价</li>
                            <li>新窗口预览可查看A4分页效果</li>
                            <li>支持自定义PDF背景图片</li>
                            <li>自动按A4尺寸分页，防止内容截断</li>
                        </ul>
                    </div>
                </div>
            </div>
        </section>
    </div>

    <script>
        // ========== 数据定义 ==========
        const serviceData = {
            AU5800: {
                name: 'AU5800', displayName: 'AU5800', fullName: '全自动生化分析仪',
                services: [
                    { code: 'ST', name: '维修保养（ST）', price: 45000, 
                      accessory: '1. 服务期限内更换的配件，均为贝克曼原厂提供的合格配件。<br>2. 配件更换遵循按需更换原则，即仅在工程师确认相关部件存在故障、性能衰减或达到合理更换条件时，进行更换。<br>3. 不对配件进行强制性预置或打包，除非在附件中另有明确约定。',
                      labor: '1. 人工服务均由贝克曼库尔特商贸（中国）有限公司指派的原厂认证工程师提供。不涉及第三方外包，工程师资质、培训及服务标准由原厂统一管理。<br>2. 服务期限内，因设备本身故障产生的维修人工服务，不限次数使用。<br>3. 接到报修后，原则上在接到客户报修后的一个工作日内到达仪器所在地开展现场服务（不含法定节假日）。<br>4. 正常工作时间：周一至周五 09:00–17:00（不含法定节假日）；非工作时间设置人工服务热线，并可根据实际情况提供远程技术指导或应急支持。<br>5. 根据不同仪器的运行状况及使用情况，提供计划性的预防性维护建议或保养服务（以协议及附件约定为准）。',
                      calibration: null,
                      maintenance: '1. 按照其原厂大保养标准流程，对协议约定仪器实施年度一次大保养服务，包括：对仪器进行系统性检查；对相关部件进行清洁；更换保养包（PM Kit）内所包含的全部配件。<br>2. 大保养所需的保养包及已包含在协议约定的服务费用中。<br>3. 在大保养过程中，如发现个别部件或消耗品接近使用寿命，或存在潜在故障风险，将向客户提出更换建议。此类不在保养包范围内的配件或消耗品，其费用应由客户另行承担，并按贝克曼届时有效的价目体系执行。'
                    },
                    { code: 'SP', name: '维修保养及校准(SP)', price: 65000, 
                      accessory: '1. 服务期限内更换的配件，均为贝克曼原厂提供的合格配件。<br>2. 配件更换遵循按需更换原则，即仅在工程师确认相关部件存在故障、性能衰减或达到合理更换条件时，进行更换。<br>3. 不对配件进行强制性预置或打包，除非在附件中另有明确约定。',
                      labor: '1. 人工服务均由贝克曼库尔特商贸（中国）有限公司指派的原厂认证工程师提供。不涉及第三方外包，工程师资质、培训及服务标准由原厂统一管理。<br>2. 服务期限内，因设备本身故障产生的维修人工服务，不限次数使用。<br>3. 接到报修后，原则上在接到客户报修后的一个工作日内到达仪器所在地开展现场服务（不含法定节假日）。<br>4. 正常工作时间：周一至周五 09:00–17:00（不含法定节假日）；非工作时间设置人工服务热线，并可根据实际情况提供远程技术指导或应急支持。<br>5. 根据不同仪器的运行状况及使用情况，提供计划性的预防性维护建议或保养服务（以协议及附件约定为准）。',
                      calibration: '1. 贝克曼将依据其仪器硬件校准标准，对协议约定仪器实施硬件校准服务。<br>2. 校准过程中，对仪器关键部件进行检查，以确认其运行状态是否符合设计要求。<br>3. 校准服务频次为：一次/年。<br>4. 包含执行校准测试所需且由原厂校准流程要求的试剂及工具（如适用）。<br>5. 出具盖有贝克曼库尔特商贸（中国）有限公司公章的校准报告。',
                      maintenance: '1. 按照其原厂大保养标准流程，对协议约定仪器实施年度一次大保养服务，包括：对仪器进行系统性检查；对相关部件进行清洁；更换保养包（PM Kit）内所包含的全部配件。<br>2. 大保养所需的保养包及已包含在协议约定的服务费用中。<br>3. 在大保养过程中，如发现个别部件或消耗品接近使用寿命，或存在潜在故障风险，将向客户提出更换建议。此类不在保养包范围内的配件或消耗品，其费用应由客户另行承担，并按贝克曼届时有效的价目体系执行。'
                    },
                    { code: 'EC', name: '硬件校准(EC)', price: 25000, 
                      accessory: null,
                      labor: null,
                      calibration: '1. 贝克曼将依据其仪器硬件校准标准，对协议约定仪器实施硬件校准服务。<br>2. 校准过程中，对仪器关键部件进行检查，以确认其运行状态是否符合设计要求。<br>3. 校准服务频次为：一次/年。<br>4. 包含执行校准测试所需且由原厂校准流程要求的试剂及工具（如适用）。<br>5. 出具盖有贝克曼库尔特商贸（中国）有限公司公章的校准报告。',
                      maintenance: null
                    },
                    { code: 'EM', name: '大保养(EM)', price: 35000, 
                      accessory: null,
                      labor: null,
                      calibration: null,
                      maintenance: '1. 按照其原厂大保养标准流程，对协议约定仪器实施年度一次大保养服务，包括：对仪器进行系统性检查；对相关部件进行清洁；更换保养包（PM Kit）内所包含的全部配件。<br>2. 大保养所需的保养包及已包含在协议约定的服务费用中。<br>3. 在大保养过程中，如发现个别部件或消耗品接近使用寿命，或存在潜在故障风险，将向客户提出更换建议。此类不在保养包范围内的配件或消耗品，其费用应由客户另行承担，并按贝克曼届时有效的价目体系执行。'
                    },
                    { code: 'PP', name: '保养型硬件校准(PP)', price: 40000, 
                      accessory: null,
                      labor: null,
                      calibration: '1. 贝克曼将依据其仪器硬件校准标准，对协议约定仪器实施硬件校准服务。<br>2. 校准过程中，对仪器关键部件进行检查，以确认其运行状态是否符合设计要求。<br>3. 校准服务频次为：一次/年。<br>4. 包含执行校准测试所需且由原厂校准流程要求的试剂及工具（如适用）。<br>5. 出具盖有贝克曼库尔特商贸（中国）有限公司公章的校准报告。',
                      maintenance: '1. 按照其原厂大保养标准流程，对协议约定仪器实施年度一次大保养服务，包括：对仪器进行系统性检查；对相关部件进行清洁；更换保养包（PM Kit）内所包含的全部配件。<br>2. 大保养所需的保养包及已包含在协议约定的服务费用中。<br>3. 在大保养过程中，如发现个别部件或消耗品接近使用寿命，或存在潜在故障风险，将向客户提出更换建议。此类不在保养包范围内的配件或消耗品，其费用应由客户另行承担，并按贝克曼届时有效的价目体系执行。'
                    },
                    { code: 'AG', name: '超龄仪器维修(AG)', price: 55000, 
                      accessory: null,
                      labor: null,
                      calibration: null,
                      maintenance: null,
                      desc: '针对使用超过8年的设备提供的专项维修服务'
                    },
                    { code: 'EB', name: '技术及大保养(EB)', price: 50000, 
                      accessory: null,
                      labor: '1. 人工服务均由贝克曼库尔特商贸（中国）有限公司指派的原厂认证工程师提供。不涉及第三方外包，工程师资质、培训及服务标准由原厂统一管理。<br>2. 服务期限内，因设备本身故障产生的维修人工服务，不限次数使用。<br>3. 接到报修后，原则上在接到客户报修后的一个工作日内到达仪器所在地开展现场服务（不含法定节假日）。<br>4. 正常工作时间：周一至周五 09:00–17:00（不含法定节假日）；非工作时间设置人工服务热线，并可根据实际情况提供远程技术指导或应急支持。<br>5. 根据不同仪器的运行状况及使用情况，提供计划性的预防性维护建议或保养服务（以协议及附件约定为准）。',
                      calibration: null,
                      maintenance: '1. 按照其原厂大保养标准流程，对协议约定仪器实施年度一次大保养服务，包括：对仪器进行系统性检查；对相关部件进行清洁；更换保养包（PM Kit）内所包含的全部配件。<br>2. 大保养所需的保养包及已包含在协议约定的服务费用中。<br>3. 在大保养过程中，如发现个别部件或消耗品接近使用寿命，或存在潜在故障风险，将向客户提出更换建议。此类不在保养包范围内的配件或消耗品，其费用应由客户另行承担，并按贝克曼届时有效的价目体系执行。',
                      desc: '技术培训结合年度大保养的综合服务包'
                    },
                    { code: 'USER1', name: '用户方案一', price: 0, desc: '用户自定义方案一，可根据实际需求配置服务内容' },
                    { code: 'USER2', name: '用户方案二', price: 0, desc: '用户自定义方案二，可根据实际需求配置服务内容' },
                    { code: 'USER3', name: '用户方案三', price: 0, desc: '用户自定义方案三，可根据实际需求配置服务内容' }
                ],
                consumables: [
                    { name: '反应杯', partNo: 'AU5800-CUP-001', price: 2.5, defaultQty: 1000, service: 'ST' },
                    { name: '清洗液', partNo: 'AU5800-WASH-002', price: 180, defaultQty: 12, service: 'ST' },
                    { name: '光源灯', partNo: 'AU5800-LAMP-003', price: 3500, defaultQty: 2, service: 'EM' },
                    { name: '泵管套装', partNo: 'AU5800-PUMP-004', price: 2800, defaultQty: 1, service: 'EM' },
                    { name: '校准品', partNo: 'AU5800-CAL-005', price: 1200, defaultQty: 4, service: 'SP' },
                    { name: '反应盘', partNo: 'AU5800-DISK-006', price: 8500, defaultQty: 1, service: 'ST' }
                ]
            },
            DxI800: {
                name: 'DxI800', displayName: 'DxI800', fullName: '化学发光免疫分析仪',
                services: [
                    { code: 'ST', name: '维修保养（ST）', price: 55000, 
                      accessory: '1. 服务期限内更换的配件，均为贝克曼原厂提供的合格配件。<br>2. 配件更换遵循按需更换原则，即仅在工程师确认相关部件存在故障、性能衰减或达到合理更换条件时，进行更换。<br>3. 不对配件进行强制性预置或打包，除非在附件中另有明确约定。',
                      labor: '1. 人工服务均由贝克曼库尔特商贸（中国）有限公司指派的原厂认证工程师提供。不涉及第三方外包，工程师资质、培训及服务标准由原厂统一管理。<br>2. 服务期限内，因设备本身故障产生的维修人工服务，不限次数使用。<br>3. 接到报修后，原则上在接到客户报修后的一个工作日内到达仪器所在地开展现场服务（不含法定节假日）。<br>4. 正常工作时间：周一至周五 09:00–17:00（不含法定节假日）；非工作时间设置人工服务热线，并可根据实际情况提供远程技术指导或应急支持。<br>5. 根据不同仪器的运行状况及使用情况，提供计划性的预防性维护建议或保养服务（以协议及附件约定为准）。',
                      calibration: null,
                      maintenance: '1. 按照其原厂大保养标准流程，对协议约定仪器实施年度一次大保养服务，包括：对仪器进行系统性检查；对相关部件进行清洁；更换保养包（PM Kit）内所包含的全部配件。<br>2. 大保养所需的保养包及已包含在协议约定的服务费用中。<br>3. 在大保养过程中，如发现个别部件或消耗品接近使用寿命，或存在潜在故障风险，将向客户提出更换建议。此类不在保养包范围内的配件或消耗品，其费用应由客户另行承担，并按贝克曼届时有效的价目体系执行。'
                    },
                    { code: 'SP', name: '维修保养及校准(SP)', price: 75000, 
                      accessory: '1. 服务期限内更换的配件，均为贝克曼原厂提供的合格配件。<br>2. 配件更换遵循按需更换原则，即仅在工程师确认相关部件存在故障、性能衰减或达到合理更换条件时，进行更换。<br>3. 不对配件进行强制性预置或打包，除非在附件中另有明确约定。',
                      labor: '1. 人工服务均由贝克曼库尔特商贸（中国）有限公司指派的原厂认证工程师提供。不涉及第三方外包，工程师资质、培训及服务标准由原厂统一管理。<br>2. 服务期限内，因设备本身故障产生的维修人工服务，不限次数使用。<br>3. 接到报修后，原则上在接到客户报修后的一个工作日内到达仪器所在地开展现场服务（不含法定节假日）。<br>4. 正常工作时间：周一至周五 09:00–17:00（不含法定节假日）；非工作时间设置人工服务热线，并可根据实际情况提供远程技术指导或应急支持。<br>5. 根据不同仪器的运行状况及使用情况，提供计划性的预防性维护建议或保养服务（以协议及附件约定为准）。',
                      calibration: '1. 贝克曼将依据其仪器硬件校准标准，对协议约定仪器实施硬件校准服务。<br>2. 校准过程中，对仪器关键部件进行检查，以确认其运行状态是否符合设计要求。<br>3. 校准服务频次为：一次/年。<br>4. 包含执行校准测试所需且由原厂校准流程要求的试剂及工具（如适用）。<br>5. 出具盖有贝克曼库尔特商贸（中国）有限公司公章的校准报告。',
                      maintenance: '1. 按照其原厂大保养标准流程，对协议约定仪器实施年度一次大保养服务，包括：对仪器进行系统性检查；对相关部件进行清洁；更换保养包（PM Kit）内所包含的全部配件。<br>2. 大保养所需的保养包及已包含在协议约定的服务费用中。<br>3. 在大保养过程中，如发现个别部件或消耗品接近使用寿命，或存在潜在故障风险，将向客户提出更换建议。此类不在保养包范围内的配件或消耗品，其费用应由客户另行承担，并按贝克曼届时有效的价目体系执行。'
                    },
                    { code: 'EC', name: '硬件校准(EC)', price: 30000, 
                      accessory: null,
                      labor: null,
                      calibration: '1. 贝克曼将依据其仪器硬件校准标准，对协议约定仪器实施硬件校准服务。<br>2. 校准过程中，对仪器关键部件进行检查，以确认其运行状态是否符合设计要求。<br>3. 校准服务频次为：一次/年。<br>4. 包含执行校准测试所需且由原厂校准流程要求的试剂及工具（如适用）。<br>5. 出具盖有贝克曼库尔特商贸（中国）有限公司公章的校准报告。',
                      maintenance: null
                    },
                    { code: 'EM', name: '大保养(EM)', price: 40000, 
                      accessory: null,
                      labor: null,
                      calibration: null,
                      maintenance: '1. 按照其原厂大保养标准流程，对协议约定仪器实施年度一次大保养服务，包括：对仪器进行系统性检查；对相关部件进行清洁；更换保养包（PM Kit）内所包含的全部配件。<br>2. 大保养所需的保养包及已包含在协议约定的服务费用中。<br>3. 在大保养过程中，如发现个别部件或消耗品接近使用寿命，或存在潜在故障风险，将向客户提出更换建议。此类不在保养包范围内的配件或消耗品，其费用应由客户另行承担，并按贝克曼届时有效的价目体系执行。'
                    },
                    { code: 'PP', name: '保养型硬件校准(PP)', price: 45000, 
                      accessory: null,
                      labor: null,
                      calibration: '1. 贝克曼将依据其仪器硬件校准标准，对协议约定仪器实施硬件校准服务。<br>2. 校准过程中，对仪器关键部件进行检查，以确认其运行状态是否符合设计要求。<br>3. 校准服务频次为：一次/年。<br>4. 包含执行校准测试所需且由原厂校准流程要求的试剂及工具（如适用）。<br>5. 出具盖有贝克曼库尔特商贸（中国）有限公司公章的校准报告。',
                      maintenance: '1. 按照其原厂大保养标准流程，对协议约定仪器实施年度一次大保养服务，包括：对仪器进行系统性检查；对相关部件进行清洁；更换保养包（PM Kit）内所包含的全部配件。<br>2. 大保养所需的保养包及已包含在协议约定的服务费用中。<br>3. 在大保养过程中，如发现个别部件或消耗品接近使用寿命，或存在潜在故障风险，将向客户提出更换建议。此类不在保养包范围内的配件或消耗品，其费用应由客户另行承担，并按贝克曼届时有效的价目体系执行。'
                    },
                    { code: 'AG', name: '超龄仪器维修(AG)', price: 65000, 
                      accessory: null,
                      labor: null,
                      calibration: null,
                      maintenance: null,
                      desc: '针对使用超过8年的设备提供的专项维修服务'
                    },
                    { code: 'EB', name: '技术及大保养(EB)', price: 58000, 
                      accessory: null,
                      labor: '1. 人工服务均由贝克曼库尔特商贸（中国）有限公司指派的原厂认证工程师提供。不涉及第三方外包，工程师资质、培训及服务标准由原厂统一管理。<br>2. 服务期限内，因设备本身故障产生的维修人工服务，不限次数使用。<br>3. 接到报修后，原则上在接到客户报修后的一个工作日内到达仪器所在地开展现场服务（不含法定节假日）。<br>4. 正常工作时间：周一至周五 09:00–17:00（不含法定节假日）；非工作时间设置人工服务热线，并可根据实际情况提供远程技术指导或应急支持。<br>5. 根据不同仪器的运行状况及使用情况，提供计划性的预防性维护建议或保养服务（以协议及附件约定为准）。',
                      calibration: null,
                      maintenance: '1. 按照其原厂大保养标准流程，对协议约定仪器实施年度一次大保养服务，包括：对仪器进行系统性检查；对相关部件进行清洁；更换保养包（PM Kit）内所包含的全部配件。<br>2. 大保养所需的保养包及已包含在协议约定的服务费用中。<br>3. 在大保养过程中，如发现个别部件或消耗品接近使用寿命，或存在潜在故障风险，将向客户提出更换建议。此类不在保养包范围内的配件或消耗品，其费用应由客户另行承担，并按贝克曼届时有效的价目体系执行。',
                      desc: '技术培训结合年度大保养的综合服务包'
                    },
                    { code: 'USER1', name: '用户方案一', price: 0, desc: '用户自定义方案一' },
                    { code: 'USER2', name: '用户方案二', price: 0, desc: '用户自定义方案二' },
                    { code: 'USER3', name: '用户方案三', price: 0, desc: '用户自定义方案三' }
                ],
                consumables: [
                    { name: '反应管', partNo: 'DxI800-TUBE-001', price: 1.8, defaultQty: 2000, service: 'ST' },
                    { name: '激发液', partNo: 'DxI800-TRIG-002', price: 450, defaultQty: 6, service: 'ST' },
                    { name: '预激发液', partNo: 'DxI800-PRE-003', price: 380, defaultQty: 6, service: 'ST' },
                    { name: '清洗缓冲液', partNo: 'DxI800-BUF-004', price: 520, defaultQty: 4, service: 'EM' },
                    { name: '光检组件', partNo: 'DxI800-OPT-005', price: 8500, defaultQty: 1, service: 'EM' },
                    { name: '样本针', partNo: 'DxI800-SPN-006', price: 1200, defaultQty: 3, service: 'ST' }
                ]
            }
        };

        const defaultValueAddedServices = [
            { code: 'VIS', name: '可视化管理', price: 17000, desc: '针对复杂的项目，进行项目分解，制定详细的项目管理计划，制作项目管理看板，进行目视化管理。' },
            { code: 'TRN', name: '高级培训', price: 8000, desc: '种类丰富的课程，包含项目临床意义，实验室质量管理，实验室精益管理等。' },
            { code: 'CRS', name: '精品课', price: 10000, desc: '包括PSP For Troubleshooting，实验室质量管理，客户管理等丰富的课程。' },
            { code: 'RPT', name: 'Remisol服务报告', price: 17000, desc: '通过报告分析，可以很明确了解到TAT以及自动审核通过率目前现状。' },
            { code: 'AUT', name: '自动审核', price: 17000, desc: '通过对客户自动审核整体流程培训启动以及协同客户与LIS建立接口对接。' },
            { code: 'AQC', name: '自动质控', price: 17000, desc: '自动质控是在全自动流水线上实现的一种按需求定时自动进行质控检测的模式。' },
            { code: 'CARE', name: '贝耀关怀', price: 18000, desc: '通过流水线整体体检，分析流水线使用现状，存在问题及优化空间。' },
            { code: 'PSP', name: 'PSP（质量指标优化）', price: 20000, desc: '应用PSP分析具体情况，发现问题，分析根本原因，沟通制定解决方案。' },
            { code: '5S', name: '5S', price: 17000, desc: '通过对实验室的整理清除无价值物品，按照规则进行合理摆放收纳。去除脏污，检查，消除安全隐患。形成目视化的标准，提高全员素养，打造一个标准安全的实验室。' },
            { code: 'ISO', name: 'ISO15189换版', price: 60000, desc: 'ISO15189：2022 正式生效日期为2023年12月31日，所有已通过ISO15189认可的实验室，需在2025年12月31日之前按照新标准完成换版。' },
            { code: 'CO2', name: 'CO2质控', price: 1578, desc: '专为贝克曼AU系列定制的CO2室内质量控制解决方案' },
            { code: 'LQC', name: '生化线性质控', price: 8400, desc: '专为贝克曼AU定制的6水平线性物质' }
        ];

        // ========== 状态管理 ==========
        let selectedInstruments = [];
        let selectedServices = {};
        let selectedValueAdded = [];
        let valueAddedServices = JSON.parse(JSON.stringify(defaultValueAddedServices));
        let savedSchemes = [];
        let selectedSchemeIds = [];
        let currentConsumables = [];
        let currentBgType = 'none';
        let customBgImageData = null;

        // ========== 初始化 ==========
        document.addEventListener('DOMContentLoaded', function() {
            initInstruments();
            initValueAddedServices();
            updateDate();
            calculateBenefit();
            updateQuote();
        });

        function initInstruments() {
            const container = document.getElementById('instrumentContainer');
            container.innerHTML = '';
            Object.keys(serviceData).forEach(inst => {
                const data = serviceData[inst];
                const div = document.createElement('div');
                div.innerHTML = `
                    <label class="cursor-pointer relative group block">
                        <input type="checkbox" class="checkbox-custom hidden" value="${inst}" onchange="toggleInstrument('${inst}')">
                        <div class="border-2 border-gray-200 rounded-xl p-4 text-center hover:border-purple-400 transition-all group-hover:shadow-md bg-white h-full">
                            <div class="instrument-name-edit font-semibold text-gray-800 text-lg" contenteditable="true" 
                                 onblur="updateInstrumentName('${inst}', this.innerText)" 
                                 onkeydown="if(event.key==='Enter'){event.preventDefault();this.blur()}"
                                 onclick="event.stopPropagation()">${data.displayName}</div>
                            <div class="text-xs text-gray-500 mt-1">${data.fullName}</div>
                        </div>
                    </label>
                `;
                container.appendChild(div);
            });
        }

        function initValueAddedServices() {
            const container = document.getElementById('valueAddedContainer');
            container.innerHTML = '';
            valueAddedServices.forEach((service, index) => {
                const div = document.createElement('div');
                div.innerHTML = `
                    <div class="flex items-start space-x-3 p-3 border border-gray-200 rounded-lg hover:border-purple-300 transition-all bg-white">
                        <input type="checkbox" value="${service.code}" onchange="toggleValueAdded('${service.code}')" 
                               class="mt-1 w-4 h-4 text-purple-600 rounded" ${selectedValueAdded.includes(service.code) ? 'checked' : ''}>
                        <div class="flex-1 min-w-0">
                            <div class="editable-field font-medium text-gray-800 text-sm" contenteditable="true" 
                                 onblur="updateValueAddedName(${index}, this.innerText)"
                                 onkeydown="if(event.key==='Enter'){event.preventDefault();this.blur()}">${service.name}</div>
                            <div class="flex items-center mt-1">
                                <span class="text-xs text-gray-500 mr-1">¥</span>
                                <input type="number" value="${service.price}" class="price-input text-xs"
                                       onchange="updateValueAddedPrice(${index}, this.value)" onclick="event.stopPropagation()">
                            </div>
                        </div>
                    </div>
                `;
                container.appendChild(div);
            });
        }

        function updateDate() {
            const today = new Date().toISOString().split('T')[0];
            document.getElementById('quoteDate').textContent = `报价日期：${today}`;
        }

        // ========== 核心功能函数 ==========
        function toggleInstrument(instrument) {
            const idx = selectedInstruments.indexOf(instrument);
            if (idx > -1) {
                selectedInstruments.splice(idx, 1);
                delete selectedServices[instrument];
            } else {
                selectedInstruments.push(instrument);
                selectedServices[instrument] = [];
            }
            updateServiceNeedsVisibility();
            updateAllModules();
        }

        function updateServiceNeedsVisibility() {
            const hasInstruments = selectedInstruments.length > 0;
            document.getElementById('serviceNeedsSection').classList.toggle('hidden', !hasInstruments);
            document.getElementById('valueAddedSection').classList.toggle('hidden', !hasInstruments);
            if (hasInstruments) renderServiceNeeds();
        }

        function renderServiceNeeds() {
            const container = document.getElementById('serviceNeedsContainer');
            container.innerHTML = '';
            selectedInstruments.forEach(inst => {
                const data = serviceData[inst];
                const groupDiv = document.createElement('div');
                groupDiv.className = 'col-span-full mb-2 mt-4 first:mt-0';
                groupDiv.innerHTML = `<div class="text-sm font-semibold text-purple-700 border-b border-purple-200 pb-1">${data.displayName} - ${data.fullName}</div>`;
                container.appendChild(groupDiv);

                data.services.forEach((service, svcIndex) => {
                    const isSelected = selectedServices[inst]?.includes(service.code);
                    const div = document.createElement('div');
                    div.innerHTML = `
                        <div class="flex items-start space-x-3 p-3 border ${isSelected ? 'border-purple-500 bg-purple-50' : 'border-gray-200'} rounded-lg hover:border-purple-300 transition-all bg-white">
                            <input type="checkbox" ${isSelected ? 'checked' : ''} onchange="toggleService('${inst}', '${service.code}')" class="mt-1 w-4 h-4 text-purple-600 rounded">
                            <div class="flex-1 min-w-0">
                                <div class="editable-field font-medium text-gray-800 text-sm ${service.code.startsWith('USER') ? 'text-blue-600 font-bold' : ''}" 
                                     contenteditable="true" onblur="updateServiceName('${inst}', ${svcIndex}, this.innerText)"
                                     onkeydown="if(event.key==='Enter'){event.preventDefault();this.blur()}">${service.name}</div>
                                <div class="flex items-center mt-1">
                                    <span class="text-xs text-gray-500 mr-1">¥</span>
                                    <input type="number" value="${service.price}" 
                                           class="price-input text-xs ${service.code.startsWith('USER') ? 'text-blue-600' : ''}"
                                           onchange="updateServicePrice('${inst}', ${svcIndex}, this.value)" onclick="event.stopPropagation()">
                                </div>
                            </div>
                        </div>
                    `;
                    container.appendChild(div);
                });
            });
        }

        function updateInstrumentName(inst, newName) {
            if (serviceData[inst]) serviceData[inst].displayName = newName.trim();
            event.stopPropagation();
        }

        function toggleService(inst, code) {
            if (!selectedServices[inst]) selectedServices[inst] = [];
            const idx = selectedServices[inst].indexOf(code);
            if (idx > -1) selectedServices[inst].splice(idx, 1);
            else selectedServices[inst].push(code);
            updateAllModules();
            renderServiceNeeds();
        }

        function updateServiceName(inst, idx, name) {
            serviceData[inst].services[idx].name = name.trim();
            updateServiceDetails();
            updateQuote();
        }

        function updateServicePrice(inst, idx, price) {
            serviceData[inst].services[idx].price = parseFloat(price) || 0;
            updateQuote();
        }

        function toggleValueAdded(code) {
            const idx = selectedValueAdded.indexOf(code);
            if (idx > -1) selectedValueAdded.splice(idx, 1);
            else selectedValueAdded.push(code);
            updateAllModules();
            initValueAddedServices();
        }

        function updateValueAddedName(idx, name) {
            valueAddedServices[idx].name = name.trim();
            updateServiceDetails();
            updateQuote();
        }

        function updateValueAddedPrice(idx, price) {
            valueAddedServices[idx].price = parseFloat(price) || 0;
            updateQuote();
        }

        function resetValueAddedServices() {
            valueAddedServices = JSON.parse(JSON.stringify(defaultValueAddedServices));
            initValueAddedServices();
            updateAllModules();
        }

        function updateAllModules() {
            updateServiceDetails();
            updateConsumables();
            updateQuote();
        }

        function updateServiceDetails() {
            const container = document.getElementById('serviceDetailsContent');
            if (selectedInstruments.length === 0) {
                container.innerHTML = '<div class="text-center text-gray-500 py-12 bg-gray-50 rounded-xl border-2 border-dashed border-gray-200"><p>请在模块一中选择机型和服务内容以查看详情</p></div>';
                return;
            }

            let html = '<div class="grid grid-cols-1 gap-4">';
            selectedInstruments.forEach(inst => {
                const data = serviceData[inst];
                const services = selectedServices[inst] || [];
                if (services.length === 0) return;

                html += `<div class="bg-purple-50 rounded-xl p-5 border border-purple-100">
                    <h3 class="font-bold text-lg text-purple-800 mb-4">${data.displayName} - ${data.fullName}</h3>
                    <div class="space-y-4">`;

                services.forEach(code => {
                    const svc = data.services.find(s => s.code === code);
                    if (svc) {
                        html += `
                            <div class="bg-white rounded-lg p-4 shadow-sm border border-purple-100">
                                <div class="flex justify-between items-start mb-4 pb-2 border-b border-purple-50">
                                    <span class="font-bold text-gray-800 text-lg">${svc.name}</span>
                                    <span class="text-purple-600 font-bold text-xl">¥${svc.price.toLocaleString()}</span>
                                </div>`;

                        // 配件
                        if (svc.accessory) {
                            html += `
                                <div class="service-category">
                                    <div class="service-category-title">📦 配件</div>
                                    <div class="service-category-content">${svc.accessory}</div>
                                </div>`;
                        }

                        // 人工
                        if (svc.labor) {
                            html += `
                                <div class="service-category">
                                    <div class="service-category-title">👨‍🔧 人工</div>
                                    <div class="service-category-content">${svc.labor}</div>
                                </div>`;
                        }

                        // 校准
                        if (svc.calibration) {
                            html += `
                                <div class="service-category">
                                    <div class="service-category-title">⚖️ 校准</div>
                                    <div class="service-category-content">${svc.calibration}</div>
                                </div>`;
                        }

                        // 大保养
                        if (svc.maintenance) {
                            html += `
                                <div class="service-category">
                                    <div class="service-category-title">🔧 大保养</div>
                                    <div class="service-category-content">${svc.maintenance}</div>
                                </div>`;
                        }

                        // 其他描述
                        if (svc.desc && !svc.accessory && !svc.labor && !svc.calibration && !svc.maintenance) {
                            html += `
                                <div class="service-category">
                                    <div class="service-category-title">📝 服务说明</div>
                                    <div class="service-category-content">${svc.desc}</div>
                                </div>`;
                        }

                        html += `</div>`;
                    }
                });
                html += '</div></div>';
            });

            if (selectedValueAdded.length > 0) {
                html += `<div class="bg-orange-50 rounded-xl p-5 border border-orange-100 mt-4">
                    <h3 class="font-bold text-lg text-orange-800 mb-3">价值服务</h3>
                    <div class="grid grid-cols-1 md:grid-cols-2 gap-3">`;
                selectedValueAdded.forEach((code, idx) => {
                    const svc = valueAddedServices.find(s => s.code === code);
                    const svcIndex = valueAddedServices.findIndex(s => s.code === code);
                    if (svc) {
                        html += `
                            <div class="bg-white rounded-lg p-3 shadow-sm border border-orange-100">
                                <div class="flex justify-between items-start mb-1">
                                    <div class="editable-field font-medium text-gray-800 text-sm flex-1 mr-2" contenteditable="true" 
                                         onblur="valueAddedServices[${svcIndex}].name=this.innerText.trim();updateQuote()"
                                         onkeydown="if(event.key==='Enter'){event.preventDefault();this.blur()}">${svc.name}</div>
                                    <div class="flex items-center">
                                        <span class="text-xs text-gray-500 mr-1">¥</span>
                                        <input type="number" value="${svc.price}" 
                                               class="price-input text-xs w-16 text-right"
                                               onchange="valueAddedServices[${svcIndex}].price=parseFloat(this.value)||0;updateQuote()">
                                    </div>
                                </div>
                                <div class="editable-field text-xs text-gray-600 leading-relaxed mt-2" 
                                     contenteditable="true"
                                     onblur="valueAddedServices[${svcIndex}].desc=this.innerText.trim()"
                                     onkeydown="if(event.key==='Enter'){event.preventDefault();this.blur()}">${svc.desc}</div>
                            </div>`;
                    }
                });
                html += '</div></div>';
            }
            html += '</div>';
            container.innerHTML = html;
        }

        // ========== 耗材管理 ==========
        function updateConsumables() {
            const newDefaults = [];
            selectedInstruments.forEach(inst => {
                const services = selectedServices[inst] || [];
                const data = serviceData[inst];
                services.forEach(svcCode => {
                    let related = data.consumables.filter(c => c.service === svcCode).slice(0, 3);
                    related.forEach(cons => {
                        if (!newDefaults.find(c => c.partNo === cons.partNo && c.instrument === inst)) {
                            newDefaults.push({...cons, instrument: inst, serviceCode: svcCode, qty: cons.defaultQty, isDefault: true});
                        }
                    });
                });
            });
            const manual = currentConsumables.filter(c => !c.isDefault);
            currentConsumables = [...newDefaults, ...manual];
            renderConsumablesTable();
        }

        function renderConsumablesTable() {
            const tbody = document.getElementById('consumablesTableBody');
            const empty = document.getElementById('consumablesEmpty');
            if (currentConsumables.length === 0) {
                tbody.innerHTML = '';
                empty.classList.remove('hidden');
                document.getElementById('consumablesTotal').textContent = '¥0';
                return;
            }
            empty.classList.add('hidden');
            let html = '', total = 0;
            currentConsumables.forEach((item, idx) => {
                const subtotal = item.price * item.qty;
                total += subtotal;
                const tag = item.isDefault 
                    ? `<span class="inline-block px-2 py-0.5 rounded text-xs font-medium bg-purple-100 text-purple-800 mr-2">${item.serviceCode}</span>` 
                    : '<span class="inline-block px-2 py-0.5 rounded text-xs font-medium bg-gray-100 text-gray-600 mr-2">自定义</span>';
                html += `
                    <tr class="hover:bg-purple-50 border-b border-gray-100 last:border-0">
                        <td class="px-4 py-3"><div class="flex items-center">${tag}<span class="text-sm text-gray-700">${serviceData[item.instrument]?.displayName || item.instrument}</span></div></td>
                        <td class="px-4 py-3"><input type="text" value="${item.name}" onchange="updateConsumable(${idx}, 'name', this.value)" class="w-full px-2 py-1 text-sm border border-gray-200 rounded focus:border-purple-500 focus:outline-none"></td>
                        <td class="px-4 py-3"><input type="text" value="${item.partNo}" onchange="updateConsumable(${idx}, 'partNo', this.value)" class="w-full px-2 py-1 text-sm border border-gray-200 rounded focus:border-purple-500 focus:outline-none font-mono text-xs"></td>
                        <td class="px-4 py-3 text-center"><input type="number" value="${item.qty}" min="0" onchange="updateConsumable(${idx}, 'qty', parseInt(this.value)||0)" class="w-20 px-2 py-1 text-sm border border-gray-300 rounded text-center"></td>
                        <td class="px-4 py-3 text-right"><input type="number" value="${item.price}" min="0" step="0.01" onchange="updateConsumable(${idx}, 'price', parseFloat(this.value)||0)" class="w-24 px-2 py-1 text-sm border border-gray-300 rounded text-right"></td>
                        <td class="px-4 py-3 text-right font-semibold text-purple-600">¥${subtotal.toLocaleString()}</td>
                        <td class="px-4 py-3 text-center"><button onclick="removeConsumable(${idx})" class="text-red-500 hover:text-red-700 p-1 rounded hover:bg-red-50" title="删除">🗑️</button></td>
                    </tr>`;
            });
            tbody.innerHTML = html;
            document.getElementById('consumablesTotal').textContent = '¥' + total.toLocaleString();
            updateQuote();
        }

        function updateConsumable(idx, field, value) {
            currentConsumables[idx][field] = value;
            renderConsumablesTable();
        }

        function removeConsumable(idx) {
            currentConsumables.splice(idx, 1);
            renderConsumablesTable();
        }

        function addConsumableRow() {
            const inst = selectedInstruments.length > 0 ? selectedInstruments[0] : '通用';
            currentConsumables.push({
                name: '新耗材', partNo: 'PART-' + Date.now().toString().slice(-6),
                price: 0, qty: 1, instrument: inst, serviceCode: '自定义',
                isDefault: false
            });
            renderConsumablesTable();
        }

        function calculateCurrentTotal() {
            let serviceTotal = 0, consumablesTotal = 0;
            selectedInstruments.forEach(inst => {
                (selectedServices[inst] || []).forEach(code => {
                    const svc = serviceData[inst].services.find(s => s.code === code);
                    if (svc) serviceTotal += svc.price;
                });
            });
            selectedValueAdded.forEach(code => {
                const svc = valueAddedServices.find(s => s.code === code);
                if (svc) serviceTotal += svc.price;
            });
            consumablesTotal = currentConsumables.reduce((sum, item) => sum + (item.price * item.qty), 0);
            return { serviceTotal, consumablesTotal, total: serviceTotal + consumablesTotal };
        }

        // ========== 方案管理 ==========
        function saveCurrentScheme() {
            if (savedSchemes.length >= 20) {
                alert('最多只能保存20个方案');
                return;
            }
            const totals = calculateCurrentTotal();
            const scheme = {
                id: Date.now(),
                name: `方案 ${savedSchemes.length + 1}`,
                instruments: [...selectedInstruments],
                services: JSON.parse(JSON.stringify(selectedServices)),
                valueAdded: [...selectedValueAdded],
                consumables: currentConsumables.map(c => ({...c})),
                total: totals.total,
                serviceTotal: totals.serviceTotal,
                consumablesTotal: totals.consumablesTotal,
                hospitalName: document.getElementById('hospitalName').value || '未命名医院',
                createdAt: new Date().toLocaleString('zh-CN'),
                benefitData: {
                    equipmentCost: document.getElementById('equipmentCost').value,
                    maintenanceCost: document.getElementById('maintenanceCost').value,
                    maintenanceFee: document.getElementById('maintenanceFee').value,
                    calibrationCost: document.getElementById('calibrationCost').value,
                    overheadCost: document.getElementById('overheadCost').value,
                    useYears: document.getElementById('useYears').value,
                    annualOperatingDays: document.getElementById('annualOperatingDays').value,
                    annualRevenue: document.getElementById('annualRevenue').value,
                    reagentCost: document.getElementById('reagentCost').value,
                    laborCost: document.getElementById('laborCost').value,
                    dailyTests: document.getElementById('dailyTests').value,
                    dailyHours: document.getElementById('dailyHours').value,
                    ratioPurchase: document.getElementById('ratioPurchase').textContent,
                    ratioBenefit: document.getElementById('ratioBenefit').textContent,
                    utilizationRate: document.getElementById('utilizationRate').textContent,
                    paybackPeriod: document.getElementById('paybackPeriod').textContent,
                    annualDepreciation: document.getElementById('annualDepreciation').textContent,
                    annualTestVolume: document.getElementById('annualTestVolume').textContent,
                    annualNetBenefit: document.getElementById('annualNetBenefit').textContent,
                    annualTotalCost: document.getElementById('annualTotalCost').textContent,
                    benefitSuggestion: document.getElementById('benefitSuggestion').textContent
                }
            };
            savedSchemes.push(scheme);
            renderComparison();
            showToast('方案已保存（共 ' + savedSchemes.length + ' 个）');
        }

        function toggleSchemeSelection(id) {
            const idx = selectedSchemeIds.indexOf(id);
            if (idx > -1) selectedSchemeIds.splice(idx, 1);
            else selectedSchemeIds.push(id);
            renderComparison();
            updateSelectionSummary();
            updateQuote();
        }

        function updateSelectionSummary() {
            const summary = document.getElementById('selectionSummary');
            if (selectedSchemeIds.length === 0) {
                summary.classList.add('hidden');
                return;
            }
            summary.classList.remove('hidden');
            document.getElementById('selectedCount').textContent = selectedSchemeIds.length;
            let total = 0, names = [];
            selectedSchemeIds.forEach(id => {
                const s = savedSchemes.find(s => s.id === id);
                if (s) { total += s.total; names.push(s.name); }
            });
            document.getElementById('selectedTotalPrice').textContent = '¥' + total.toLocaleString();
            document.getElementById('selectedSchemeNames').innerHTML = names.map(n => 
                `<span class="inline-block bg-purple-100 text-purple-700 px-2 py-1 rounded text-xs">${n}</span>`
            ).join('');
        }

        function clearSelection() {
            selectedSchemeIds = [];
            renderComparison();
            updateSelectionSummary();
            updateQuote();
        }

        function renderComparison() {
            const container = document.getElementById('comparisonContainer');
            if (savedSchemes.length === 0) {
                container.innerHTML = `<div class="col-span-full text-center text-gray-500 py-12 bg-gray-50 rounded-xl border-2 border-dashed border-gray-200">
                    <p>点击"保存当前方案"添加方案（最多20个）</p><p class="text-xs mt-2">勾选方案可进行比较或合并计算报价单</p></div>`;
                return;
            }

            let html = '';

            savedSchemes.forEach((s, i) => {
                const selected = selectedSchemeIds.includes(s.id);
                html += `
                    <div class="comparison-card ${selected ? 'selected' : ''}">
                        ${selected ? '<div class="scheme-selection-indicator">✓</div>' : ''}
                        <div class="flex justify-between items-center mb-4">
                            <input type="checkbox" ${selected ? 'checked' : ''} onchange="toggleSchemeSelection(${s.id})" class="w-5 h-5 text-purple-600 rounded mr-2">
                            <input type="text" value="${s.name}" onchange="savedSchemes[${i}].name=this.value;updateSelectionSummary()" class="font-bold text-lg text-gray-800 border-b border-transparent hover:border-gray-300 focus:border-purple-500 outline-none bg-transparent flex-1">
                            <button onclick="deleteScheme(${i})" class="text-red-400 hover:text-red-600 ml-2 text-xl">×</button>
                        </div>
                        <div class="space-y-2 mb-4 text-sm">
                            <div class="text-gray-600"><span class="font-medium">机型：</span>${s.instruments.map(inst => serviceData[inst]?.displayName || inst).join(', ') || '未选择'}</div>
                            <div class="text-gray-600"><span class="font-medium">服务数：</span>${Object.values(s.services).flat().length + s.valueAdded.length} 项</div>
                            <div class="text-gray-600"><span class="font-medium">耗材数：</span>${s.consumables.length} 种</div>
                            <div class="text-gray-500 text-xs">${s.createdAt}</div>
                        </div>
                        <div class="border-t border-gray-200 pt-4">
                            <div class="flex justify-between items-end">
                                <span class="text-gray-600 text-sm">年度总价</span>
                                <span class="text-2xl font-bold text-purple-600">¥${s.total.toLocaleString()}</span>
                            </div>
                        </div>
                        <button onclick="loadScheme(${i})" class="w-full mt-4 py-2 border border-purple-500 text-purple-600 rounded-lg hover:bg-purple-50 transition-colors text-sm font-medium">加载此方案</button>
                    </div>`;
            });

            if (selectedSchemeIds.length >= 2) {
                const selected = savedSchemes.filter(s => selectedSchemeIds.includes(s.id));

                html += `<div class="col-span-full mt-8 bg-white rounded-xl border border-gray-200 p-6 overflow-hidden">
                    <h4 class="font-bold text-gray-800 mb-6 text-lg flex items-center">
                        <span class="w-8 h-8 rounded-full bg-purple-100 text-purple-600 flex items-center justify-center mr-3 text-sm">比</span>
                        方案对比分析表
                    </h4>

                    <div class="overflow-x-auto" style="max-height: 800px; overflow-y: auto;">
                        <table class="comparison-table">
                            <thead>
                                <tr>
                                    <th style="width: 110px; position: sticky; left: 0; z-index: 20;">方案</th>
                                    <th style="min-width: 320px;">合同详情</th>
                                    <th style="width: 130px;">合同价格</th>
                                    <th style="min-width: 180px;">耗材配件</th>
                                    <th style="min-width: 200px;">价值服务</th>
                                </tr>
                            </thead>
                            <tbody>`;

                selected.forEach((scheme, idx) => {
                    let contractDetails = '';
                    let totalPrice = 0;
                    scheme.instruments.forEach(inst => {
                        (scheme.services[inst] || []).forEach(code => {
                            const svc = serviceData[inst].services.find(s => s.code === code);
                            if (svc) {
                                // 构建完整的合同介绍
                                let serviceIntro = `<div style="font-weight:600; color:#7c3aed; margin-bottom:4px;">${serviceData[inst].displayName} - ${svc.name}</div>`;

                                if (svc.accessory) {
                                    serviceIntro += `<div style="margin:4px 0; font-size:11px;"><span style="color:#5b21b6; font-weight:500;">配件：</span><span style="color:#4b5563;">${svc.accessory.substring(0, 60)}${svc.accessory.length > 60 ? '...' : ''}</span></div>`;
                                }
                                if (svc.labor) {
                                    serviceIntro += `<div style="margin:4px 0; font-size:11px;"><span style="color:#5b21b6; font-weight:500;">人工：</span><span style="color:#4b5563;">${svc.labor.substring(0, 60)}${svc.labor.length > 60 ? '...' : ''}</span></div>`;
                                }
                                if (svc.calibration) {
                                    serviceIntro += `<div style="margin:4px 0; font-size:11px;"><span style="color:#5b21b6; font-weight:500;">校准：</span><span style="color:#4b5563;">${svc.calibration.substring(0, 60)}${svc.calibration.length > 60 ? '...' : ''}</span></div>`;
                                }
                                if (svc.maintenance) {
                                    serviceIntro += `<div style="margin:4px 0; font-size:11px;"><span style="color:#5b21b6; font-weight:500;">大保养：</span><span style="color:#4b5563;">${svc.maintenance.substring(0, 60)}${svc.maintenance.length > 60 ? '...' : ''}</span></div>`;
                                }
                                if (!svc.accessory && !svc.labor && !svc.calibration && !svc.maintenance && svc.desc) {
                                    serviceIntro += `<div style="margin:4px 0; font-size:11px; color:#4b5563;">${svc.desc}</div>`;
                                }

                                contractDetails += `<div class="detail-item" style="border-bottom:1px solid #f3e8ff; padding-bottom:8px; margin-bottom:8px;">${serviceIntro}</div>`;
                                totalPrice += svc.price;
                            }
                        });
                    });

                    let consumablesHtml = '';
                    if (scheme.consumables.length > 0) {
                        scheme.consumables.forEach(c => {
                            consumablesHtml += `<span class="consumable-tag">${c.name}×${c.qty}</span>`;
                        });
                    } else {
                        consumablesHtml = '<span class="text-gray-400 text-xs">无耗材</span>';
                    }

                    let valueAddedHtml = '';
                    if (scheme.valueAdded.length > 0) {
                        scheme.valueAdded.forEach(code => {
                            const svc = valueAddedServices.find(s => s.code === code);
                            if (svc) {
                                valueAddedHtml += `<div class="value-service-item">
                                    <div class="flex justify-between items-start">
                                        <span class="service-name">${svc.name}</span>
                                        <span class="price-tag">¥${svc.price.toLocaleString()}</span>
                                    </div>
                                    <div class="service-desc" style="font-size: 11px; margin-top: 2px;">${svc.desc}</div>
                                </div>`;
                                totalPrice += svc.price;
                            }
                        });
                    } else {
                        valueAddedHtml = '<span class="text-gray-400 text-xs">无价值服务</span>';
                    }

                    html += `<tr>
                        <td class="scheme-name-cell" style="position: sticky; left: 0; background: #faf5ff;">${scheme.name}</td>
                        <td>${contractDetails || '<span class="text-gray-400 text-xs">无服务项目</span>'}</td>
                        <td class="text-center">
                            <div class="price-tag text-lg">¥${totalPrice.toLocaleString()}</div>
                            <div class="text-xs text-gray-500 mt-1">耗材:¥${scheme.consumablesTotal.toLocaleString()}</div>
                            <div class="text-xs text-gray-500">合计:¥${scheme.total.toLocaleString()}</div>
                        </td>
                        <td>${consumablesHtml}</td>
                        <td>${valueAddedHtml}</td>
                    </tr>`;
                });

                html += `</tbody></table></div>
                </div>`;
            }

            container.innerHTML = html;
        }

        function deleteScheme(idx) {
            if (!confirm('确定要删除这个方案吗？')) return;
            const id = savedSchemes[idx].id;
            const selIdx = selectedSchemeIds.indexOf(id);
            if (selIdx > -1) selectedSchemeIds.splice(selIdx, 1);
            savedSchemes.splice(idx, 1);
            renderComparison();
            updateSelectionSummary();
            updateQuote();
        }

        function loadScheme(idx) {
            const s = savedSchemes[idx];
            selectedInstruments = [...s.instruments];
            selectedServices = JSON.parse(JSON.stringify(s.services));
            selectedValueAdded = [...s.valueAdded];
            currentConsumables = s.consumables.map(c => ({...c}));
            if (s.hospitalName && s.hospitalName !== '未命名医院') document.getElementById('hospitalName').value = s.hospitalName;

            document.querySelectorAll('#instrumentContainer input[type="checkbox"]').forEach(cb => {
                cb.checked = selectedInstruments.includes(cb.value);
            });

            updateServiceNeedsVisibility();
            updateAllModules();
            showToast(`已加载：${s.name}`);
            window.scrollTo({ top: 0, behavior: 'smooth' });
        }

        // ========== 成本效益分析（修正公式） ==========
        function calculateBenefit() {
            // 获取12项输入参数
            const eqCost = parseFloat(document.getElementById('equipmentCost').value) || 0;           // 设备购置价格
            const maintCost = parseFloat(document.getElementById('maintenanceCost').value) || 0;      // 年设备维修总价
            const maintFee = parseFloat(document.getElementById('maintenanceFee').value) || 0;        // 设备维护保养
            const calibCost = parseFloat(document.getElementById('calibrationCost').value) || 0;      // 校准费用
            const overheadCost = parseFloat(document.getElementById('overheadCost').value) || 0;      // 水、电、场地、物业
            const useYears = parseFloat(document.getElementById('useYears').value) || 6;              // 计划使用年度

            const revenue = parseFloat(document.getElementById('annualRevenue').value) || 0;          // 设备年收入
            const reagentCost = parseFloat(document.getElementById('reagentCost').value) || 0;        // 试剂耗材成本
            const laborCost = parseFloat(document.getElementById('laborCost').value) || 0;            // 人力成本
            const dailyTests = parseFloat(document.getElementById('dailyTests').value) || 0;          // 日均测试数
            const annualDays = parseFloat(document.getElementById('annualOperatingDays').value) || 360; // 年开机天数
            const dailyHours = parseFloat(document.getElementById('dailyHours').value) || 10;         // 日均工作时间

            // 计算参数（8项）
            // 1. 设备折旧/年 = 设备购置价格 / 计划使用年度
            const annualDep = eqCost / useYears;

            // 2. 年测试总量 = 日均测试数 × 年开机天数
            const annualTests = dailyTests * annualDays;

            // 3. 设备折旧/测试 = 设备折旧/年 / 年开机天数 / 日均测试数
            const depPerTest = (annualDep / annualDays) / dailyTests;

            // 4. 业务年净效益 = 设备年收入 - 试剂耗材成本 - 年设备维修总价 - 校准费用 - 水、电、场地、物业 - 人力成本
            const annualNet = revenue - reagentCost - maintCost - calibCost - overheadCost - laborCost;

            // 5. 业务年收入 = 设备年收入（直接取值）
            const annualRevenueDisplay = revenue;

            // 6. 维保费用占比（购置金额）= (年设备维修总价 + 设备维护保养 + 校准费用) / 设备购置价格
            const totalMaintCost = maintCost + maintFee + calibCost;
            const ratioPur = eqCost > 0 ? (totalMaintCost / eqCost) * 100 : 0;

            // 7. 维保费用占比（净效益）= (年设备维修总价 + 设备维护保养 + 校准费用) / 业务年净效益
            const ratioBen = annualNet > 0 ? (totalMaintCost / annualNet) * 100 : 0;

            // 8. 设备利用率 = 年开机天数 × 日均工作时间 / 4392 （4392=365×12，全年满负荷小时数）
            const util = (annualDays * dailyHours) / 4392 * 100;

            // 9. 投资回收期 = 设备购置价格 / 业务年净效益
            const payback = annualNet > 0 ? eqCost / annualNet : 999;

            // 年总成本（用于参考）= 试剂耗材成本 + 年设备维修总价 + 校准费用 + 水、电、场地、物业 + 人力成本 + 设备折旧/年
            const annualTotalCost = reagentCost + maintCost + calibCost + overheadCost + laborCost + annualDep;

            // 更新计算参数显示（4项不重复的）
            document.getElementById('annualDepreciation').textContent = '¥' + annualDep.toLocaleString('zh-CN', {maximumFractionDigits: 0});
            document.getElementById('annualTestVolume').textContent = annualTests.toLocaleString('zh-CN') + ' T';
            document.getElementById('annualNetBenefit').textContent = '¥' + annualNet.toLocaleString('zh-CN', {maximumFractionDigits: 0});
            document.getElementById('annualTotalCost').textContent = '¥' + annualTotalCost.toLocaleString('zh-CN', {maximumFractionDigits: 0});
            document.getElementById('annualRevenueDisplay').textContent = '¥' + annualRevenueDisplay.toLocaleString('zh-CN', {maximumFractionDigits: 0});
            document.getElementById('depPerTest').textContent = '¥' + depPerTest.toFixed(2);

            // 更新4项关键指标卡片（与上方重复，仅显示在卡片中）
            updateMetric('ratioPurchase', ratioPur, 8, '%', '≤8%', '有购买预算', '超出预算', ratioPur <= 8);
            updateMetric('ratioBenefit', ratioBen, 10, '%', '≤10%', '有支付能力', '支付压力大', ratioBen <= 10);
            updateMetric('utilizationRate', util, 80, '%', '≥80%', '主力机', '非主力机', util >= 80);
            updateMetric('paybackPeriod', payback, 3, '年', '≤3年', '建议购买', '回收期较长', payback <= 3);

            let good = (ratioPur <= 8) + (ratioBen <= 10) + (util >= 80) + (payback <= 3);
            let suggestion = good >= 3 ? '当前设备经济效益优秀，强烈建议购买全面维保服务。' : 
                           (good >= 2 ? '当前设备经济效益良好，建议根据实际需求选择维保方案。' : 
                           '当前设备经济效益一般，建议审慎评估维保投入。');
            document.getElementById('benefitSuggestion').textContent = suggestion;
        }

        function updateMetric(id, value, threshold, unit, std, goodText, badText, isGood) {
            document.getElementById(id).textContent = value.toFixed(value < 10 ? 2 : 1) + unit;
            const card = document.getElementById(id + 'Card');
            const status = document.getElementById(id + 'Status');
            card.className = `rounded-xl p-4 ${isGood ? 'metric-green' : 'metric-red'}`;
            status.textContent = (isGood ? '✓ ' : '⚠ ') + (isGood ? goodText : badText);
        }

        // ========== 报价单 ==========
        function updateQuote() {
            const indicator = document.getElementById('quoteSourceIndicator');
            let data;

            if (selectedSchemeIds.length === 0) {
                indicator.textContent = '基于当前编辑';
                indicator.className = 'text-sm text-gray-500 bg-yellow-50 px-3 py-1 rounded-full';
                data = calculateCurrentTotal();
                data.serviceItems = [];
                data.consumableItems = currentConsumables;
            } else {
                indicator.textContent = `基于${selectedSchemeIds.length}个选中方案`;
                indicator.className = 'text-sm text-white bg-purple-500 px-3 py-1 rounded-full';
                const schemes = savedSchemes.filter(s => selectedSchemeIds.includes(s.id));
                data = mergeSchemesData(schemes);
            }

            const hospital = document.getElementById('hospitalName').value || '待填写';
            const discount = parseFloat(document.getElementById('discountRate').value) || 0;
            const discountAmt = data.serviceTotal * (discount / 100);
            const final = data.total - discountAmt;

            document.getElementById('quoteHospitalName').textContent = `医院名称：${hospital}`;
            document.getElementById('quoteTotalPrice').textContent = '¥' + data.total.toLocaleString();
            document.getElementById('quoteSubtotal').textContent = '¥' + data.serviceTotal.toLocaleString();
            document.getElementById('quoteConsumablesTotal').textContent = '¥' + data.consumablesTotal.toLocaleString();

            const discountRow = document.getElementById('discountAmountRow');
            const discountAmount = document.getElementById('discountAmount');
            if (discount > 0) {
                discountRow.classList.remove('hidden');
                discountRow.classList.add('flex');
                discountAmount.textContent = '-¥' + discountAmt.toLocaleString();
            } else {
                discountRow.classList.add('hidden');
                discountRow.classList.remove('flex');
            }

            document.getElementById('quoteFinalPrice').textContent = '¥' + final.toLocaleString();

            let svcHtml = '';
            if (data.serviceItems && data.serviceItems.length > 0) {
                data.serviceItems.forEach(item => {
                    svcHtml += `
                        <div class="py-3 border-b border-gray-100 last:border-0">
                            <div class="flex justify-between items-start mb-1">
                                <div class="flex-1">
                                    <div class="text-gray-800 font-medium">${item.instrument} - ${item.serviceName}</div>
                                    <div class="text-xs text-gray-500 mt-1 leading-relaxed pr-4">${item.desc || ''}</div>
                                </div>
                                <span class="text-gray-600 font-medium ml-4 whitespace-nowrap">¥${item.price.toLocaleString()}</span>
                            </div>
                        </div>`;
                });
            } else {
                selectedInstruments.forEach(inst => {
                    (selectedServices[inst] || []).forEach(code => {
                        const svc = serviceData[inst].services.find(s => s.code === code);
                        if (svc) {
                            svcHtml += `
                                <div class="py-3 border-b border-gray-100 last:border-0">
                                    <div class="flex justify-between items-start mb-1">
                                        <div class="flex-1">
                                            <div class="text-gray-800 font-medium">${serviceData[inst].displayName} - ${svc.name}</div>
                                            <div class="text-xs text-gray-500 mt-1 leading-relaxed pr-4">${svc.desc || ''}</div>
                                        </div>
                                        <span class="text-gray-600 font-medium ml-4 whitespace-nowrap">¥${svc.price.toLocaleString()}</span>
                                    </div>
                                </div>`;
                        }
                    });
                });
                selectedValueAdded.forEach(code => {
                    const svc = valueAddedServices.find(s => s.code === code);
                    if (svc) {
                        svcHtml += `
                            <div class="py-3 border-b border-gray-100 last:border-0 bg-orange-50/50 px-3 rounded-lg">
                                <div class="flex justify-between items-start mb-1">
                                    <div class="flex-1">
                                        <div class="text-gray-800 font-medium">${svc.name}</div>
                                        <div class="text-xs text-gray-500 mt-1 leading-relaxed pr-4">${svc.desc || ''}</div>
                                    </div>
                                    <span class="text-orange-600 font-medium ml-4 whitespace-nowrap">¥${svc.price.toLocaleString()}</span>
                                </div>
                            </div>`;
                    }
                });
            }
            document.getElementById('quoteServiceList').innerHTML = svcHtml || '<div class="text-gray-400 text-sm italic py-4">暂未选择服务项目</div>';

            let consHtml = '';
            const items = data.consumableItems || currentConsumables;
            if (items.length > 0) {
                items.forEach(item => {
                    const total = item.totalPrice || (item.price * item.qty);
                    consHtml += `
                        <div class="flex justify-between items-center py-2 border-b border-gray-100 last:border-0">
                            <div>
                                <div class="text-gray-800">${item.name}</div>
                                <div class="text-xs text-gray-500">货号: ${item.partNo} | 单价: ¥${item.price.toLocaleString()}</div>
                            </div>
                            <div class="text-right">
                                <div class="text-gray-600">×${item.qty}</div>
                                <div class="text-purple-600 font-medium">¥${total.toLocaleString()}</div>
                            </div>
                        </div>`;
                });
                document.getElementById('quoteConsumablesSection').classList.remove('hidden');
                document.getElementById('quoteConsumablesList').innerHTML = consHtml;
            } else {
                document.getElementById('quoteConsumablesSection').classList.add('hidden');
            }
        }

        function mergeSchemesData(schemes) {
            let svcTotal = 0, consTotal = 0, items = [], consItems = [];
            schemes.forEach(s => {
                svcTotal += s.serviceTotal;
                consTotal += s.consumablesTotal;
                s.instruments.forEach(inst => {
                    (s.services[inst] || []).forEach(code => {
                        const svc = serviceData[inst].services.find(x => x.code === code);
                        if (svc) items.push({
                            instrument: serviceData[inst].displayName, 
                            serviceName: svc.name, 
                            price: svc.price,
                            desc: svc.desc
                        });
                    });
                });
                s.valueAdded.forEach(code => {
                    const svc = valueAddedServices.find(x => x.code === code);
                    if (svc) items.push({
                        instrument: '增值', 
                        serviceName: svc.name, 
                        price: svc.price,
                        desc: svc.desc
                    });
                });
                s.consumables.forEach(c => {
                    const exist = consItems.find(x => x.partNo === c.partNo);
                    if (exist) { 
                        exist.qty += c.qty; 
                        exist.totalPrice += c.price * c.qty; 
                    }
                    else consItems.push({...c, totalPrice: c.price * c.qty});
                });
            });
            return {serviceTotal: svcTotal, consumablesTotal: consTotal, total: svcTotal + consTotal, serviceItems: items, consumableItems: consItems};
        }

        // ========== PDF背景选择功能 ==========
        function selectBg(element, bgType) {
            document.querySelectorAll('.pdf-bg-option').forEach(opt => opt.classList.remove('selected'));
            element.classList.add('selected');
            currentBgType = bgType;
            if (bgType === 'custom') {
                document.getElementById('customBgUpload').classList.remove('hidden');
            } else {
                document.getElementById('customBgUpload').classList.add('hidden');
            }
        }

        function handleCustomBgUpload(input) {
            const file = input.files[0];
            if (!file) return;
            if (!file.type.startsWith('image/')) {
                alert('请选择有效的图片文件');
                return;
            }
            if (file.size > 5 * 1024 * 1024) {
                alert('图片文件过大，请选择小于5MB的图片');
                return;
            }
            const reader = new FileReader();
            reader.onload = function(e) {
                customBgImageData = e.target.result;
                document.getElementById('customBgPreview').innerHTML = `<img src="${customBgImageData}" style="width:100%;height:100%;object-fit:cover;border-radius:4px;">`;
                showToast('自定义背景图片已加载');
            };
            reader.readAsDataURL(file);
        }

        // 数字转中文编号
        function numberToChinese(num) {
            const chinese = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十'];
            if (num <= 10) return chinese[num - 1];
            return num;
        }

        // 获取模块标题（统一为"模块X"格式）
        function getModuleTitle(moduleName, flags) {
            const count = flags.filter(Boolean).length + 1;
            const chineseNum = numberToChinese(count);
            return `模块${chineseNum}、${moduleName}`;
        }

        // ========== 关键优化1：确保PDF打印背景一致性 ==========
        function buildPages(sections, bgStyle, hospital, date) {
            const A4_WIDTH = 210;
            const A4_HEIGHT = 297;
            const MARGIN = 20;
            const USABLE_HEIGHT = A4_HEIGHT - MARGIN * 2 - 40;

            const pages = [];
            let currentPageSections = [];
            let currentPageHeight = 0;

            sections.forEach(section => {
                const estimatedHeight = ((section.height || 200) * 0.264) + 20;

                if (estimatedHeight > USABLE_HEIGHT * 0.8) {
                    if (currentPageSections.length > 0) {
                        pages.push([...currentPageSections]);
                        currentPageSections = [];
                        currentPageHeight = 0;
                    }
                    pages.push([{...section, isLarge: true}]);
                } else if (currentPageHeight + estimatedHeight > USABLE_HEIGHT && currentPageSections.length > 0) {
                    pages.push([...currentPageSections]);
                    currentPageSections = [section];
                    currentPageHeight = estimatedHeight;
                } else {
                    currentPageSections.push(section);
                    currentPageHeight += estimatedHeight;
                }
            });

            if (currentPageSections.length > 0) {
                pages.push(currentPageSections);
            }

            if (pages.length === 0) {
                pages.push([{title: '空报告', content: '<div style="text-align:center;color:#9ca3af;padding:40px;">未选择任何内容</div>', height: 100}]);
            }

            // 关键修改：确保每个页面都有完整的背景样式，添加打印颜色精确匹配
            return pages.map((pageSections, idx) => {
                const isFirst = idx === 0;
                const pageNum = idx + 1;
                const totalPages = pages.length;

                // 关键优化：为每个页面添加 print-color-adjust: exact 确保背景打印
                const pageStyle = `${bgStyle} width:${A4_WIDTH}mm; min-height:${A4_HEIGHT}mm; padding:${MARGIN}mm; position:relative; box-sizing:border-box; page-break-after:always; margin:0 auto 20px auto; box-shadow:0 4px 6px -1px rgba(0,0,0,0.1); print-color-adjust: exact; -webkit-print-color-adjust: exact;`;

                const header = isFirst ? 
                    `<div style="text-align:center;border-bottom:2px solid #8b5cf6;padding-bottom:10px;margin-bottom:20px; print-color-adjust: exact; -webkit-print-color-adjust: exact;">
                        <div style="font-size:20px;font-weight:bold;color:#8b5cf6;margin-bottom:4px; print-color-adjust: exact; -webkit-print-color-adjust: exact;">贝克曼库尔特售后服务合同方案</div>
                        <div style="color:#4b5563;font-size:11px;">${hospital}</div>
                        <div style="color:#9ca3af;font-size:9px;margin-top:3px;">${date} | 第 ${pageNum}/${totalPages} 页</div>
                    </div>` :
                    `<div style="text-align:center;border-bottom:1px solid #e5e7eb;padding-bottom:8px;margin-bottom:15px; print-color-adjust: exact; -webkit-print-color-adjust: exact;">
                        <div style="font-size:16px;font-weight:bold;color:#8b5cf6; print-color-adjust: exact; -webkit-print-color-adjust: exact;">贝克曼库尔特售后服务合同方案</div>
                        <div style="color:#6b7280;font-size:10px;margin-top:2px;">${hospital} | 第 ${pageNum}/${totalPages} 页</div>
                    </div>`;

                const content = pageSections.map(s => `
                    <div style="margin-bottom:20px; ${s.isLarge ? 'page-break-inside:auto;' : 'page-break-inside:avoid;'}">
                        <div style="font-size:14px;font-weight:bold;color:#1f2937;border-left:4px solid #8b5cf6;padding-left:10px;margin-bottom:12px;background:#f9fafb;padding:8px 10px 8px 14px;border-radius:4px; print-color-adjust: exact; -webkit-print-color-adjust: exact;">${s.title}</div>
                        <div style="padding:0 5px;">${s.content}</div>
                    </div>
                `).join('');

                const footer = `<div style="position:absolute;bottom:${MARGIN}mm;left:${MARGIN}mm;right:${MARGIN}mm;text-align:center;font-size:8pt;color:#9ca3af;border-top:1px solid #e5e7eb;padding-top:6px; print-color-adjust: exact; -webkit-print-color-adjust: exact;">
                    贝克曼库尔特CVS智能合同工具生成 | 本报告仅供参考
                </div>`;

                return `<div style="${pageStyle}">
                    ${header}
                    <div style="padding-bottom:20px;">${content}</div>
                    ${footer}
                </div>`;
            }).join('');
        }

        // ========== 关键优化2：报价单服务介绍完善 ==========
        function generatePDFContent() {
            const includeBasic = document.getElementById('includeBasic').checked;
            const includeService = document.getElementById('includeService').checked;
            const includeConsumables = document.getElementById('includeConsumables').checked;
            const includeBenefit = document.getElementById('includeBenefit').checked;
            const includeQuote = document.getElementById('includeQuote').checked;

            if (!includeBasic && !includeService && !includeConsumables && !includeBenefit && !includeQuote) {
                alert('请至少选择一项报告内容');
                return null;
            }

            const hospital = document.getElementById('hospitalName').value || '未填写医院';
            const contact = document.getElementById('contactPerson').value || '未填写';
            const date = new Date().toLocaleDateString('zh-CN');
            const remarks = document.getElementById('remarks').value;

            const useSchemes = selectedSchemeIds.length > 0;
            let schemeData = null;
            let benefitData = null;

            if (useSchemes) {
                const schemes = savedSchemes.filter(s => selectedSchemeIds.includes(s.id));
                schemeData = mergeSchemesData(schemes);
                benefitData = schemes[0]?.benefitData || getCurrentBenefitData();
            } else {
                const totals = calculateCurrentTotal();
                schemeData = {
                    serviceTotal: totals.serviceTotal,
                    consumablesTotal: totals.consumablesTotal,
                    total: totals.total,
                    serviceItems: [],
                    consumableItems: currentConsumables
                };
                benefitData = getCurrentBenefitData();
            }

            const discount = parseFloat(document.getElementById('discountRate').value) || 0;
            const discountAmt = schemeData.serviceTotal * (discount / 100);
            const final = schemeData.total - discountAmt;

            let pageBgStyle = 'background:#ffffff;';
            if (currentBgType === 'custom' && customBgImageData) {
                // 关键优化：自定义背景图片设置为覆盖整个页面，并确保每页重复
                pageBgStyle = `background-image:url(${customBgImageData});background-size:cover;background-position:center;background-repeat:no-repeat;`;
            } else if (currentBgType === 'purple') {
                pageBgStyle = 'background:linear-gradient(135deg,#faf5ff 0%,#e0e7ff 100%);';
            } else if (currentBgType === 'medical') {
                pageBgStyle = 'background:#f0f9ff;';
            }

            let sections = [];

            // 模块一：基本信息
            if (includeBasic) {
                let basicContent = `<div style="font-size:10.5pt;line-height:1.6;">
                    <div style="margin-bottom:10px; display:flex; border-bottom:1px solid #f3f4f6; padding-bottom:8px;">
                        <span style="color:#6b7280; width:120px; flex-shrink:0;">医院名称：</span>
                        <span style="font-weight:500; color:#1f2937;">${hospital}</span>
                    </div>
                    <div style="margin-bottom:10px; display:flex; border-bottom:1px solid #f3f4f6; padding-bottom:8px;">
                        <span style="color:#6b7280; width:120px; flex-shrink:0;">联系人：</span>
                        <span style="font-weight:500; color:#1f2937;">${contact}</span>
                    </div>
                    <div style="margin-bottom:10px; display:flex; border-bottom:1px solid #f3f4f6; padding-bottom:8px;">
                        <span style="color:#6b7280; width:120px; flex-shrink:0;">选择机型：</span>
                        <span style="font-weight:500; color:#1f2937;">${selectedInstruments.map(i => serviceData[i]?.displayName).join('、') || '未选择'}</span>
                    </div>
                    <div style="margin-bottom:10px; display:flex; border-bottom:1px solid #f3f4f6; padding-bottom:8px;">
                        <span style="color:#6b7280; width:120px; flex-shrink:0;">服务项目数：</span>
                        <span style="font-weight:500; color:#1f2937;">${Object.values(selectedServices).flat().length + selectedValueAdded.length} 项</span>
                    </div>
                    <div style="margin-bottom:10px; display:flex; border-bottom:1px solid #f3f4f6; padding-bottom:8px;">
                        <span style="color:#6b7280; width:120px; flex-shrink:0;">耗材种类：</span>
                        <span style="font-weight:500; color:#1f2937;">${currentConsumables.length} 种</span>
                    </div>
                </div>`;

                if (remarks && remarks.trim()) {
                    basicContent += `<div style="margin-top:15px; padding:12px; background:#fef3c7; border-left:4px solid #f59e0b; border-radius:6px;">
                        <div style="font-weight:600; color:#92400e; margin-bottom:6px; font-size:10.5pt;">特殊备注</div>
                        <div style="color:#78350f; font-size:10pt; line-height:1.5; white-space:pre-wrap;">${remarks}</div>
                    </div>`;
                }
                sections.push({ title: getModuleTitle('基本信息', []), content: basicContent, height: remarks ? 280 : 220 });
            }

            // 模块二：服务详情
            if (includeService) {
                let svcContent = '<div style="font-size:10pt;">';
                let displayData = [];

                if (useSchemes) {
                    const schemes = savedSchemes.filter(s => selectedSchemeIds.includes(s.id));
                    schemes.forEach(scheme => {
                        scheme.instruments.forEach(inst => {
                            (scheme.services[inst] || []).forEach(code => {
                                const svc = serviceData[inst].services.find(s => s.code === code);
                                if (svc) {
                                    displayData.push({
                                        type: 'service',
                                        instName: serviceData[inst].displayName,
                                        instFull: serviceData[inst].fullName,
                                        service: svc
                                    });
                                }
                            });
                        });
                        scheme.valueAdded.forEach(code => {
                            const svc = valueAddedServices.find(s => s.code === code);
                            if (svc) {
                                displayData.push({
                                    type: 'valueAdded',
                                    service: svc
                                });
                            }
                        });
                    });
                } else {
                    selectedInstruments.forEach(inst => {
                        const instData = serviceData[inst];
                        (selectedServices[inst] || []).forEach(code => {
                            const svc = instData.services.find(s => s.code === code);
                            if (svc) {
                                displayData.push({
                                    type: 'service',
                                    instName: instData.displayName,
                                    instFull: instData.fullName,
                                    service: svc
                                });
                            }
                        });
                    });
                    selectedValueAdded.forEach(code => {
                        const svc = valueAddedServices.find(s => s.code === code);
                        if (svc) {
                            displayData.push({
                                type: 'valueAdded',
                                service: svc
                            });
                        }
                    });
                }

                if (displayData.length === 0) {
                    svcContent = '<div style="text-align:center; color:#9ca3af; padding:30px; font-style:italic;">暂未选择服务项目</div>';
                    sections.push({ title: getModuleTitle('服务详情', [includeBasic]), content: svcContent, height: 100 });
                } else {
                    let currentInst = null;
                    displayData.forEach((item, idx) => {
                        if (item.type === 'service') {
                            if (currentInst !== item.instName) {
                                if (currentInst !== null) svcContent += '</div></div>';
                                currentInst = item.instName;
                                svcContent += `<div style="margin-bottom:15px; background:#faf5ff; padding:12px; border-radius:8px; border:1px solid #e9d5ff;">
                                    <div style="font-weight:bold; color:#7c3aed; font-size:11pt; margin-bottom:8px; border-bottom:1px solid #ddd6fe; padding-bottom:6px;">
                                        ${item.instName} - ${item.instFull}
                                    </div>
                                    <div style="space-y:8px;">`;
                            }

                            const svc = item.service;
                            svcContent += `
                                <div style="background:white; padding:10px; border-radius:6px; margin-bottom:8px; border:1px solid #f3e8ff;">
                                    <div style="display:flex; justify-content:space-between; margin-bottom:8px; border-bottom:1px solid #f3f4f6; padding-bottom:6px;">
                                        <span style="font-weight:600; color:#1f2937; font-size:10.5pt;">${svc.name}</span>
                                        <span style="color:#7c3aed; font-weight:bold; font-size:10.5pt;">¥${svc.price.toLocaleString()}</span>
                                    </div>`;

                            if (svc.accessory) {
                                svcContent += `<div style="margin-bottom:8px;">
                                    <div style="font-weight:600; color:#5b21b6; font-size:9.5pt; margin-bottom:4px;">📦 配件</div>
                                    <div style="font-size:9pt; color:#4b5563; line-height:1.6; padding-left:8px;">${svc.accessory}</div>
                                </div>`;
                            }
                            if (svc.labor) {
                                svcContent += `<div style="margin-bottom:8px;">
                                    <div style="font-weight:600; color:#5b21b6; font-size:9.5pt; margin-bottom:4px;">👨‍🔧 人工</div>
                                    <div style="font-size:9pt; color:#4b5563; line-height:1.6; padding-left:8px;">${svc.labor}</div>
                                </div>`;
                            }
                            if (svc.calibration) {
                                svcContent += `<div style="margin-bottom:8px;">
                                    <div style="font-weight:600; color:#5b21b6; font-size:9.5pt; margin-bottom:4px;">⚖️ 校准</div>
                                    <div style="font-size:9pt; color:#4b5563; line-height:1.6; padding-left:8px;">${svc.calibration}</div>
                                </div>`;
                            }
                            if (svc.maintenance) {
                                svcContent += `<div style="margin-bottom:8px;">
                                    <div style="font-weight:600; color:#5b21b6; font-size:9.5pt; margin-bottom:4px;">🔧 大保养</div>
                                    <div style="font-size:9pt; color:#4b5563; line-height:1.6; padding-left:8px;">${svc.maintenance}</div>
                                </div>`;
                            }
                            if (svc.desc && !svc.accessory && !svc.labor && !svc.calibration && !svc.maintenance) {
                                svcContent += `<div style="font-size:9pt; color:#4b5563; line-height:1.6;">${svc.desc}</div>`;
                            }

                            svcContent += `</div>`;
                        } else {
                            if (currentInst !== null) {
                                svcContent += '</div></div>';
                                currentInst = null;
                            }
                            svcContent += `<div style="background:#fff7ed; padding:10px; border-radius:6px; margin-bottom:8px; border:1px solid #fed7aa;">
                                <div style="display:flex; justify-content:space-between; margin-bottom:4px;">
                                    <span style="font-weight:600; color:#1f2937; font-size:10pt;">${item.service.name}</span>
                                    <span style="color:#ea580c; font-weight:bold; font-size:10pt;">¥${item.service.price.toLocaleString()}</span>
                                </div>
                                <div style="font-size:9pt; color:#6b7280; line-height:1.4;">${item.service.desc}</div>
                            </div>`;
                        }
                    });
                    if (currentInst !== null) svcContent += '</div></div>';
                    svcContent += '</div>';

                    sections.push({ title: getModuleTitle('服务详情', [includeBasic]), content: svcContent, height: 150 + displayData.length * 80 });
                }
            }

            // 模块三：耗材清单
            if (includeConsumables) {
                const items = schemeData.consumableItems || currentConsumables;
                if (items.length > 0) {
                    let consContent = `<table style="width:100%; border-collapse:collapse; font-size:9.5pt; margin-bottom:10px;">
                        <thead>
                            <tr style="background:linear-gradient(135deg, #f3e8ff 0%, #e0e7ff 100%);">
                                <th style="border:1px solid #c4b5fd; padding:8px; text-align:left; font-weight:600; color:#5b21b6;">关联服务</th>
                                <th style="border:1px solid #c4b5fd; padding:8px; text-align:left; font-weight:600; color:#5b21b6;">耗材名称</th>
                                <th style="border:1px solid #c4b5fd; padding:8px; text-align:left; font-weight:600; color:#5b21b6;">货号</th>
                                <th style="border:1px solid #c4b5fd; padding:8px; text-align:center; font-weight:600; color:#5b21b6;">数量</th>
                                <th style="border:1px solid #c4b5fd; padding:8px; text-align:right; font-weight:600; color:#5b21b6;">单价</th>
                                <th style="border:1px solid #c4b5fd; padding:8px; text-align:right; font-weight:600; color:#5b21b6;">小计</th>
                            </tr>
                        </thead>
                        <tbody>`;

                    items.forEach(item => {
                        const subtotal = item.totalPrice || item.price * item.qty;
                        const tagColor = item.isDefault !== false ? 'background:#f3e8ff; color:#7c3aed;' : 'background:#f3f4f6; color:#6b7280;';
                        consContent += `<tr style="background:white;">
                            <td style="border:1px solid #e5e7eb; padding:6px 8px;">
                                <span style="display:inline-block; padding:2px 6px; border-radius:4px; font-size:8pt; ${tagColor}">${item.serviceCode || '自定义'}</span>
                                <div style="font-size:8pt; color:#6b7280; margin-top:2px;">${serviceData[item.instrument]?.displayName || item.instrument}</div>
                            </td>
                            <td style="border:1px solid #e5e7eb; padding:6px 8px; font-weight:500;">${item.name}</td>
                            <td style="border:1px solid #e5e7eb; padding:6px 8px; font-family:monospace; font-size:8.5pt; color:#6b7280;">${item.partNo}</td>
                            <td style="border:1px solid #e5e7eb; padding:6px 8px; text-align:center;">${item.qty}</td>
                            <td style="border:1px solid #e5e7eb; padding:6px 8px; text-align:right;">¥${item.price.toLocaleString()}</td>
                            <td style="border:1px solid #e5e7eb; padding:6px 8px; text-align:right; color:#7c3aed; font-weight:600;">¥${subtotal.toLocaleString()}</td>
                        </tr>`;
                    });

                    consContent += `</tbody></table>
                    <div style="text-align:right; margin-top:10px; padding:10px 15px; background:linear-gradient(135deg, #f3e8ff 0%, #e0e7ff 100%); border-radius:6px; border:1px solid #ddd6fe;">
                        <span style="font-weight:bold; color:#5b21b6; font-size:11pt;">耗材总计：¥${schemeData.consumablesTotal.toLocaleString()}</span>
                    </div>`;

                    sections.push({ title: getModuleTitle('耗材清单', [includeBasic, includeService]), content: consContent, height: 120 + items.length * 35 });
                } else {
                    sections.push({ title: getModuleTitle('耗材清单', [includeBasic, includeService]), content: '<div style="text-align:center; color:#9ca3af; padding:30px; font-style:italic;">暂无关联耗材</div>', height: 100 });
                }
            }

            // 模块四：成本效益分析
            if (includeBenefit) {
                let benefitContent = `
                    <div style="margin-bottom:15px;">
                        <div style="font-size:10pt; font-weight:600; color:#374151; margin-bottom:10px;">关键指标评估</div>
                        <div style="display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:15px;">
                            <div style="border:2px solid ${benefitData.ratioPurchase.replace('%','') <= 8 ? '#22c55e' : '#ef4444'}; background:${benefitData.ratioPurchase.replace('%','') <= 8 ? '#f0fdf4' : '#fef2f2'}; padding:12px; border-radius:8px; text-align:center;">
                                <div style="font-size:9pt; color:${benefitData.ratioPurchase.replace('%','') <= 8 ? '#166534' : '#991b1b'}; margin-bottom:4px;">维保费用占比（购置金额）</div>
                                <div style="font-size:18px; font-weight:bold; color:${benefitData.ratioPurchase.replace('%','') <= 8 ? '#166534' : '#991b1b'};">${benefitData.ratioPurchase}</div>
                                <div style="font-size:8pt; color:${benefitData.ratioPurchase.replace('%','') <= 8 ? '#166534' : '#991b1b'}; margin-top:2px;">标准：≤8% | ${benefitData.ratioPurchase.replace('%','') <= 8 ? '✓ 有购买预算' : '⚠ 超出预算'}</div>
                            </div>
                            <div style="border:2px solid ${benefitData.ratioBenefit.replace('%','') <= 10 ? '#22c55e' : '#ef4444'}; background:${benefitData.ratioBenefit.replace('%','') <= 10 ? '#f0fdf4' : '#fef2f2'}; padding:12px; border-radius:8px; text-align:center;">
                                <div style="font-size:9pt; color:${benefitData.ratioBenefit.replace('%','') <= 10 ? '#166534' : '#991b1b'}; margin-bottom:4px;">维保费用占比（净效益）</div>
                                <div style="font-size:18px; font-weight:bold; color:${benefitData.ratioBenefit.replace('%','') <= 10 ? '#166534' : '#991b1b'};">${benefitData.ratioBenefit}</div>
                                <div style="font-size:8pt; color:${benefitData.ratioBenefit.replace('%','') <= 10 ? '#166534' : '#991b1b'}; margin-top:2px;">标准：≤10% | ${benefitData.ratioBenefit.replace('%','') <= 10 ? '✓ 有支付能力' : '⚠ 支付压力大'}</div>
                            </div>
                            <div style="border:2px solid ${parseFloat(benefitData.utilizationRate) >= 80 ? '#22c55e' : '#ef4444'}; background:${parseFloat(benefitData.utilizationRate) >= 80 ? '#f0fdf4' : '#fef2f2'}; padding:12px; border-radius:8px; text-align:center;">
                                <div style="font-size:9pt; color:${parseFloat(benefitData.utilizationRate) >= 80 ? '#166534' : '#991b1b'}; margin-bottom:4px;">设备利用率</div>
                                <div style="font-size:18px; font-weight:bold; color:${parseFloat(benefitData.utilizationRate) >= 80 ? '#166534' : '#991b1b'};">${benefitData.utilizationRate}</div>
                                <div style="font-size:8pt; color:${parseFloat(benefitData.utilizationRate) >= 80 ? '#166534' : '#991b1b'}; margin-top:2px;">标准：≥80% | ${parseFloat(benefitData.utilizationRate) >= 80 ? '✓ 主力机' : '⚠ 非主力机'}</div>
                            </div>
                            <div style="border:2px solid ${parseFloat(benefitData.paybackPeriod) <= 3 ? '#22c55e' : '#ef4444'}; background:${parseFloat(benefitData.paybackPeriod) <= 3 ? '#f0fdf4' : '#fef2f2'}; padding:12px; border-radius:8px; text-align:center;">
                                <div style="font-size:9pt; color:${parseFloat(benefitData.paybackPeriod) <= 3 ? '#166534' : '#991b1b'}; margin-bottom:4px;">投资回收期</div>
                                <div style="font-size:18px; font-weight:bold; color:${parseFloat(benefitData.paybackPeriod) <= 3 ? '#166534' : '#991b1b'};">${benefitData.paybackPeriod}</div>
                                <div style="font-size:8pt; color:${parseFloat(benefitData.paybackPeriod) <= 3 ? '#166534' : '#991b1b'}; margin-top:2px;">标准：≤3年 | ${parseFloat(benefitData.paybackPeriod) <= 3 ? '✓ 建议购买' : '⚠ 回收期较长'}</div>
                            </div>
                        </div>
                    </div>

                    <div style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:12px; margin-bottom:15px;">
                        <div style="font-size:10pt; font-weight:600; color:#374151; margin-bottom:8px; border-bottom:1px solid #e2e8f0; padding-bottom:6px;">输入参数（12项）</div>
                        <div style="display:grid; grid-template-columns:1fr 1fr; gap:8px; font-size:9pt;">
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">设备购置价格</span>
                                <span style="font-weight:500;">¥${parseInt(benefitData.equipmentCost).toLocaleString()}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">年设备维修总价</span>
                                <span style="font-weight:500;">¥${parseInt(benefitData.maintenanceCost).toLocaleString()}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">设备维护保养</span>
                                <span style="font-weight:500;">¥${parseInt(benefitData.maintenanceFee || 0).toLocaleString()}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">校准费用</span>
                                <span style="font-weight:500;">¥${parseInt(benefitData.calibrationCost || 0).toLocaleString()}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">水电场地物业</span>
                                <span style="font-weight:500;">¥${parseInt(benefitData.overheadCost || 0).toLocaleString()}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">计划使用年度</span>
                                <span style="font-weight:500;">${benefitData.useYears} 年</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">设备年收入</span>
                                <span style="font-weight:500;">¥${parseInt(benefitData.annualRevenue).toLocaleString()}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">试剂耗材成本</span>
                                <span style="font-weight:500;">¥${parseInt(benefitData.reagentCost).toLocaleString()}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">人力成本</span>
                                <span style="font-weight:500;">¥${parseInt(benefitData.laborCost).toLocaleString()}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">日均测试数</span>
                                <span style="font-weight:500;">${benefitData.dailyTests} T</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">年开机天数</span>
                                <span style="font-weight:500;">${benefitData.annualOperatingDays || 360} 天</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:4px 0;">
                                <span style="color:#64748b;">日均工作时间</span>
                                <span style="font-weight:500;">${benefitData.dailyHours} 小时</span>
                            </div>
                        </div>
                    </div>

                    <div style="background:#faf5ff; border:1px solid #ddd6fe; border-radius:8px; padding:12px; margin-bottom:15px;">
                        <div style="font-size:10pt; font-weight:600; color:#5b21b6; margin-bottom:10px; border-bottom:1px solid #e9d5ff; padding-bottom:6px;">
                            详细测算结果
                        </div>
                        <div style="display:grid; grid-template-columns:1fr 1fr; gap:8px; font-size:9.5pt;">
                            <div style="display:flex; justify-content:space-between; padding:8px; background:white; border-radius:6px; border:1px solid #e9d5ff;">
                                <span style="color:#6b7280;">设备折旧/年</span>
                                <span style="font-weight:600; color:#1f2937;">${benefitData.annualDepreciation}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:8px; background:white; border-radius:6px; border:1px solid #e9d5ff;">
                                <span style="color:#6b7280;">年测试总量</span>
                                <span style="font-weight:600; color:#1f2937;">${benefitData.annualTestVolume}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:8px; background:white; border-radius:6px; border:1px solid #e9d5ff;">
                                <span style="color:#6b7280;">业务年净效益</span>
                                <span style="font-weight:600; color:#16a34a;">${benefitData.annualNetBenefit}</span>
                            </div>
                            <div style="display:flex; justify-content:space-between; padding:8px; background:white; border-radius:6px; border:1px solid #e9d5ff;">
                                <span style="color:#6b7280;">年总成本</span>
                                <span style="font-weight:600; color:#dc2626;">${benefitData.annualTotalCost}</span>
                            </div>
                        </div>
                    </div>

                    <div style="background:linear-gradient(135deg, #fef3c7 0%, #fffbeb 100%); border:1px solid #fcd34d; border-radius:8px; padding:12px; display:flex; gap:10px;">
                        <div style="font-size:16px; flex-shrink:0;">💡</div>
                        <div>
                            <div style="font-weight:600; color:#92400e; font-size:10pt; margin-bottom:4px;">智能分析建议</div>
                            <div style="color:#78350f; font-size:9.5pt; line-height:1.5;">${benefitData.benefitSuggestion || document.getElementById('benefitSuggestion').textContent}</div>
                        </div>
                    </div>
                `;

                sections.push({
                    title: getModuleTitle('成本效益分析', [includeBasic, includeService, includeConsumables]),
                    content: benefitContent,
                    height: 580
                });
            }

            // 模块五：报价单（关键优化：添加详细服务介绍）
            if (includeQuote) {
                let quoteContent = `<div style="background:white; border:2px solid #8b5cf6; border-radius:10px; overflow:hidden; box-shadow:0 4px 6px -1px rgba(139,92,246,0.1);">
                    <div style="background:linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%); color:white; padding:15px 20px;">
                        <div style="display:flex; justify-content:space-between; align-items:flex-start;">
                            <div>
                                <div style="font-size:16pt; font-weight:bold; margin-bottom:5px;">贝克曼库尔特CVS合同</div>
                                <div style="font-size:10pt; opacity:0.9;">医院名称：${hospital}</div>
                                <div style="font-size:9pt; opacity:0.8; margin-top:3px;">报价日期：${date}</div>
                            </div>
                            <div style="text-align:right;">
                                <div style="font-size:24pt; font-weight:bold;">¥${schemeData.total.toLocaleString()}</div>
                                <div style="font-size:9pt; opacity:0.9;">总价</div>
                            </div>
                        </div>
                    </div>

                    <div style="padding:20px; background:#fafaf9;">
                        <div style="margin-bottom:15px;">
                            <div style="font-size:11pt; font-weight:600; color:#374151; margin-bottom:10px; padding-bottom:8px; border-bottom:1px solid #e5e7eb;">服务项目清单</div>
                            <div style="font-size:9.5pt; line-height:1.6;">`;

                // 关键优化：构建带详细介绍的服务列表
                let serviceListHtml = '';
                
                // 获取所有服务数据（无论是来自选中方案还是当前编辑）
                let allServices = [];
                
                if (useSchemes && schemeData.serviceItems && schemeData.serviceItems.length > 0) {
                    // 来自选中方案的服务需要重新获取详细内容
                    const schemes = savedSchemes.filter(s => selectedSchemeIds.includes(s.id));
                    schemes.forEach(scheme => {
                        scheme.instruments.forEach(inst => {
                            (scheme.services[inst] || []).forEach(code => {
                                const svc = serviceData[inst].services.find(s => s.code === code);
                                if (svc) {
                                    allServices.push({
                                        type: 'service',
                                        instName: serviceData[inst].displayName,
                                        service: svc
                                    });
                                }
                            });
                        });
                        scheme.valueAdded.forEach(code => {
                            const svc = valueAddedServices.find(s => s.code === code);
                            if (svc) {
                                allServices.push({
                                    type: 'valueAdded',
                                    service: svc
                                });
                            }
                        });
                    });
                } else {
                    // 来自当前编辑
                    selectedInstruments.forEach(inst => {
                        (selectedServices[inst] || []).forEach(code => {
                            const svc = serviceData[inst].services.find(s => s.code === code);
                            if (svc) {
                                allServices.push({
                                    type: 'service',
                                    instName: serviceData[inst].displayName,
                                    service: svc
                                });
                            }
                        });
                    });
                    selectedValueAdded.forEach(code => {
                        const svc = valueAddedServices.find(s => s.code === code);
                        if (svc) {
                            allServices.push({
                                type: 'valueAdded',
                                service: svc
                            });
                        }
                    });
                }

                // 生成带详细介绍的服务HTML
                if (allServices.length > 0) {
                    allServices.forEach(item => {
                        if (item.type === 'service') {
                            const svc = item.service;
                            
                            // 构建详细介绍内容
                            let detailParts = [];
                            if (svc.accessory) {
                                detailParts.push(`<span style="color:#5b21b6; font-weight:600;">【配件】</span>${svc.accessory.substring(0, 100)}${svc.accessory.length > 100 ? '...' : ''}`);
                            }
                            if (svc.labor) {
                                detailParts.push(`<span style="color:#5b21b6; font-weight:600;">【人工】</span>${svc.labor.substring(0, 100)}${svc.labor.length > 100 ? '...' : ''}`);
                            }
                            if (svc.calibration) {
                                detailParts.push(`<span style="color:#5b21b6; font-weight:600;">【校准】</span>${svc.calibration.substring(0, 100)}${svc.calibration.length > 100 ? '...' : ''}`);
                            }
                            if (svc.maintenance) {
                                detailParts.push(`<span style="color:#5b21b6; font-weight:600;">【大保养】</span>${svc.maintenance.substring(0, 100)}${svc.maintenance.length > 100 ? '...' : ''}`);
                            }
                            if (svc.desc && detailParts.length === 0) {
                                detailParts.push(svc.desc);
                            }
                            
                            const detailText = detailParts.join('<br><br>');
                            
                            serviceListHtml += `
                                <div style="margin-bottom:12px; padding:10px; background:white; border-radius:6px; border:1px solid #e5e7eb;">
                                    <div style="display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:6px;">
                                        <div style="font-weight:600; color:#1f2937; font-size:10.5pt;">${item.instName} - ${svc.name}</div>
                                        <div style="font-weight:700; color:#7c3aed; font-size:11pt; white-space:nowrap; margin-left:10px;">¥${svc.price.toLocaleString()}</div>
                                    </div>
                                    <div style="font-size:8.5pt; color:#4b5563; line-height:1.5; text-align:justify;">
                                        ${detailText}
                                    </div>
                                </div>`;
                        } else {
                            // 价值服务
                            serviceListHtml += `
                                <div style="margin-bottom:12px; padding:10px; background:#fff7ed; border-radius:6px; border:1px solid #fed7aa;">
                                    <div style="display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:4px;">
                                        <div style="font-weight:600; color:#1f2937; font-size:10.5pt;">${item.service.name}</div>
                                        <div style="font-weight:700; color:#ea580c; font-size:11pt; white-space:nowrap; margin-left:10px;">¥${item.service.price.toLocaleString()}</div>
                                    </div>
                                    <div style="font-size:8.5pt; color:#6b7280; line-height:1.5;">
                                        ${item.service.desc}
                                    </div>
                                </div>`;
                        }
                    });
                } else {
                    serviceListHtml = '<div style="text-align:center; color:#9ca3af; padding:20px; font-style:italic;">暂未选择服务项目</div>';
                }

                quoteContent += serviceListHtml + `</div></div>`;

                // 耗材完整展示
                if (schemeData.consumableItems && schemeData.consumableItems.length > 0) {
                    quoteContent += `<div style="margin-bottom:15px;">
                        <div style="font-size:11pt; font-weight:600; color:#374151; margin-bottom:10px; padding-bottom:8px; border-bottom:1px solid #e5e7eb;">包含耗材</div>
                        <div style="font-size:9pt;">`;

                    schemeData.consumableItems.forEach(item => {
                        const total = item.totalPrice || (item.price * item.qty);
                        quoteContent += `<div style="display:flex; justify-content:space-between; align-items:center; padding:5px 0; border-bottom:1px solid #f3f4f6;">
                            <div>
                                <div style="font-weight:500; color:#374151;">${item.name}</div>
                                <div style="font-size:8pt; color:#6b7280;">货号: ${item.partNo} | 单价: ¥${item.price.toLocaleString()}</div>
                            </div>
                            <div style="text-align:right;">
                                <div style="color:#6b7280;">×${item.qty}</div>
                                <div style="font-weight:600; color:#7c3aed;">¥${total.toLocaleString()}</div>
                            </div>
                        </div>`;
                    });

                    quoteContent += `</div></div>`;
                }

                quoteContent += `<div style="background:#f5f5f4; border-radius:8px; padding:15px; margin-top:10px;">
                    <div style="display:flex; justify-content:space-between; margin-bottom:8px; font-size:10pt;">
                        <span style="color:#6b7280;">服务合计</span>
                        <span style="font-weight:600; color:#374151;">¥${schemeData.serviceTotal.toLocaleString()}</span>
                    </div>
                    <div style="display:flex; justify-content:space-between; margin-bottom:8px; font-size:10pt;">
                        <span style="color:#6b7280;">耗材费用</span>
                        <span style="font-weight:600; color:#374151;">¥${schemeData.consumablesTotal.toLocaleString()}</span>
                    </div>`;

                if (discount > 0) {
                    quoteContent += `<div style="display:flex; justify-content:space-between; margin-bottom:8px; font-size:10pt; color:#dc2626;">
                        <span>折扣优惠 (${discount}%)</span>
                        <span>-¥${discountAmt.toLocaleString()}</span>
                    </div>`;
                }

                quoteContent += `<div style="display:flex; justify-content:space-between; padding-top:10px; border-top:2px solid #d6d3d1; font-size:13pt; font-weight:bold;">
                        <span style="color:#1f2937;">最终报价</span>
                        <span style="color:#7c3aed;">¥${final.toLocaleString()}</span>
                    </div>
                </div></div></div>`;

                const itemCount = allServices.length + (schemeData.consumableItems?.length || 0);
                sections.push({
                    title: getModuleTitle('报价单', [includeBasic, includeService, includeConsumables, includeBenefit]),
                    content: quoteContent,
                    height: 250 + itemCount * 60  // 调整高度估算以容纳详细介绍
                });
            }

            return buildPages(sections, pageBgStyle, hospital, date);
        }

        function getCurrentBenefitData() {
            return {
                equipmentCost: document.getElementById('equipmentCost').value,
                maintenanceCost: document.getElementById('maintenanceCost').value,
                maintenanceFee: document.getElementById('maintenanceFee').value,
                calibrationCost: document.getElementById('calibrationCost').value,
                overheadCost: document.getElementById('overheadCost').value,
                useYears: document.getElementById('useYears').value,
                annualOperatingDays: document.getElementById('annualOperatingDays').value,
                annualRevenue: document.getElementById('annualRevenue').value,
                reagentCost: document.getElementById('reagentCost').value,
                laborCost: document.getElementById('laborCost').value,
                dailyTests: document.getElementById('dailyTests').value,
                dailyHours: document.getElementById('dailyHours').value,
                ratioPurchase: document.getElementById('ratioPurchase').textContent,
                ratioBenefit: document.getElementById('ratioBenefit').textContent,
                utilizationRate: document.getElementById('utilizationRate').textContent,
                paybackPeriod: document.getElementById('paybackPeriod').textContent,
                annualDepreciation: document.getElementById('annualDepreciation').textContent,
                annualTestVolume: document.getElementById('annualTestVolume').textContent,
                annualNetBenefit: document.getElementById('annualNetBenefit').textContent,
                annualTotalCost: document.getElementById('annualTotalCost').textContent,
                benefitSuggestion: document.getElementById('benefitSuggestion').textContent
            };
        }

        function openPreviewWindow() {
            const content = generatePDFContent();
            if (!content) return;

            const width = 980, height = screen.height * 0.9;
            const left = (screen.width - width) / 2, top = (screen.height - height) / 2;

            const win = window.open('', '_blank', `width=${width},height=${height},left=${left},top=${top},scrollbars=yes,resizable=yes`);

            if (!win) {
                alert('请允许弹窗以打开预览窗口');
                return;
            }

            const previewHtml = `<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>PDF预览 - A4分页预览</title>
    <style>
        * { box-sizing: border-box; margin: 0; padding: 0; }
        body { background: #e5e7eb; padding: 20px; font-family: 'Noto Sans SC', 'Microsoft YaHei', sans-serif; }
        .preview-controls { position: fixed; top: 0; left: 0; right: 0; background: white; padding: 12px 20px; border-radius: 0 0 12px 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.15); z-index: 1000; display: flex; justify-content: space-between; align-items: center; }
        .preview-title { font-weight: bold; color: #1f2937; font-size: 16px; border-right: 2px solid #8b5cf6; padding-right: 15px; margin-right: 15px; }
        .preview-buttons { display: flex; gap: 10px; }
        .preview-tips { font-size: 11px; color: #4b5563; background: #f9fafb; padding: 8px 12px; border-radius: 6px; max-width: 300px; }
        #previewContainer { display: flex; flex-direction: column; align-items: center; gap: 20px; padding: 20px; padding-top: 100px; }
        .btn { background: linear-gradient(135deg, #8b5cf6 0%, #a855f7 100%); color: white; border: none; padding: 10px 16px; border-radius: 8px; cursor: pointer; font-size: 14px; font-weight: 600; width: 100%; margin-bottom: 8px; transition: all 0.3s; }
        .btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3); }
        .btn.secondary { background: #f3f4f6; color: #374151; border: 1px solid #d1d5db; }
        .btn.success { background: linear-gradient(135deg, #10b981 0%, #059669 100%); }
        #previewContainer { display: flex; flex-direction: column; align-items: center; gap: 20px; padding: 20px; padding-right: 340px; }
        @media print { 
            body { background: white; padding: 0; margin: 0; } 
            .preview-controls { display: none !important; } 
            #previewContainer { padding: 0; gap: 0; } 
            #previewContainer > div { 
                width: 210mm !important; 
                min-height: 297mm !important; 
                height: auto !important;
                box-shadow: none !important; 
                margin: 0 !important; 
                page-break-after: always !important; 
                page-break-inside: auto !important;
                overflow: visible !important;
                print-color-adjust: exact !important;
                -webkit-print-color-adjust: exact !important;
            } 
            #previewContainer > div:last-child {
                page-break-after: avoid !important;
            }
        }
    </style>
</head>
<body>
<!-- 密码保护 -->
<style>
    #password-overlay {
        position: fixed;
        top: 0; left: 0; right: 0; bottom: 0;
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        display: flex;
        align-items: center;
        justify-content: center;
        z-index: 99999;
    }
    #password-box {
        background: white;
        padding: 40px;
        border-radius: 16px;
        box-shadow: 0 20px 60px rgba(0,0,0,0.3);
        text-align: center;
        max-width: 400px;
        width: 90%;
    }
    #password-box h2 {
        color: #7c3aed;
        margin-bottom: 10px;
        font-size: 24px;
    }
    #password-box p {
        color: #6b7280;
        margin-bottom: 20px;
        font-size: 14px;
    }
    #password-input {
        width: 100%;
        padding: 15px 20px;
        border: 2px solid #e5e7eb;
        border-radius: 10px;
        font-size: 18px;
        text-align: center;
        letter-spacing: 8px;
        margin-bottom: 15px;
        outline: none;
        transition: border-color 0.3s;
    }
    #password-input:focus {
        border-color: #7c3aed;
    }
    #password-submit {
        width: 100%;
        padding: 15px;
        background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);
        color: white;
        border: none;
        border-radius: 10px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: transform 0.2s, box-shadow 0.2s;
    }
    #password-submit:hover {
        transform: translateY(-2px);
        box-shadow: 0 10px 20px rgba(124, 58, 237, 0.3);
    }
    #password-error {
        color: #ef4444;
        font-size: 14px;
        margin-top: 10px;
        display: none;
    }
    #main-content { display: none; }
</style>

<div id="password-overlay">
    <div id="password-box">
        <h2>🔐 访问验证</h2>
        <p>请输入访问密令</p>
        <input type="password" id="password-input" placeholder="****" maxlength="4" autofocus>
        <button id="password-submit" onclick="checkPassword()">确认访问</button>
        <div id="password-error">密令错误，请重新输入</div>
    </div>
</div>

<script>
function checkPassword() {
    const input = document.getElementById('password-input').value;
    if (input === '4592') {
        document.getElementById('password-overlay').style.display = 'none';
        document.getElementById('main-content').style.display = 'block';
        localStorage.setItem('access_granted', 'true');
    } else {
        document.getElementById('password-error').style.display = 'block';
        document.getElementById('password-input').value = '';
        document.getElementById('password-input').focus();
    }
}

document.getElementById('password-input').addEventListener('keypress', function(e) {
    if (e.key === 'Enter') checkPassword();
});

// 检查是否已验证
if (localStorage.getItem('access_granted') === 'true') {
    document.getElementById('password-overlay').style.display = 'none';
    document.getElementById('main-content').style.display = 'block';
}
</script>

<div id="main-content">

    <div class="preview-controls">
        <div style="display: flex; align-items: center;">
            <span class="preview-title">📄 预览控制面板</span>
            <div class="preview-buttons">
                <button onclick="window.print()" class="btn success" style="width: auto; padding: 8px 16px; margin: 0;">🖨️ 打印/保存为PDF</button>
                <button onclick="window.close()" class="btn secondary" style="width: auto; padding: 8px 16px; margin: 0;">❌ 关闭预览</button>
            </div>
        </div>
        <div class="preview-tips">
            <b>操作提示：</b>选择A4纵向 | 边距设"无"或"最小" | 勾选"背景图形"
        </div>
    </div>
    <div id="previewContainer">${content}</div>
</div><!-- end main-content -->
</body>
</html>`;

            win.document.write(previewHtml);
            win.document.close();
        }

        function generatePDF() {
            if (selectedSchemeIds.length === 0 && selectedInstruments.length === 0) {
                alert('请先在模块一中选择机型和服务，或在模块四中选择已保存的方案');
                return;
            }
            openPreviewWindow();
        }

        function showToast(msg) {
            const toast = document.createElement('div');
            toast.className = 'fixed bottom-4 right-4 bg-green-500 text-white px-6 py-3 rounded-lg shadow-lg z-50 flex items-center space-x-2';
            toast.innerHTML = `<span>✓</span><span>${msg}</span>`;
            document.body.appendChild(toast);
            setTimeout(() => { toast.style.opacity = '0'; setTimeout(() => toast.remove(), 300); }, 3000);
        }

        function scrollToModule(id) {
            document.getElementById(id).scrollIntoView({ behavior: 'smooth', block: 'start' });
            document.querySelectorAll('.nav-item').forEach(item => item.classList.remove('active'));
            if (event && event.target) event.target.classList.add('active');
        }
    </script>
</div><!-- end main-content -->
</body>
</html>