Some checks failed
backend-contract-verification / Verify TypeScript build & OpenAPI contracts (push) Has been cancelled
716 lines
25 KiB
HTML
716 lines
25 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>AI深度解析 - 招标文件智能分析系统</title>
|
||
<style>
|
||
* {
|
||
margin: 0;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
body {
|
||
font-family: 'Microsoft YaHei', Arial, sans-serif;
|
||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||
min-height: 100vh;
|
||
padding: 20px;
|
||
}
|
||
.container {
|
||
max-width: 1400px;
|
||
margin: 0 auto;
|
||
background: white;
|
||
border-radius: 15px;
|
||
padding: 30px;
|
||
box-shadow: 0 20px 60px rgba(0,0,0,0.1);
|
||
}
|
||
h1 {
|
||
text-align: center;
|
||
color: #333;
|
||
margin-bottom: 30px;
|
||
font-size: 28px;
|
||
}
|
||
.upload-area {
|
||
background: #f9fafb;
|
||
border: 3px dashed #9ca3af;
|
||
border-radius: 10px;
|
||
padding: 40px;
|
||
text-align: center;
|
||
margin-bottom: 30px;
|
||
cursor: pointer;
|
||
transition: all 0.3s;
|
||
}
|
||
.upload-area:hover {
|
||
border-color: #667eea;
|
||
background: #f3f4f6;
|
||
}
|
||
.upload-area.active {
|
||
border-color: #10b981;
|
||
background: #d1fae5;
|
||
}
|
||
.tabs {
|
||
display: flex;
|
||
gap: 10px;
|
||
margin-bottom: 20px;
|
||
border-bottom: 2px solid #e5e7eb;
|
||
}
|
||
.tab {
|
||
padding: 12px 24px;
|
||
background: transparent;
|
||
border: none;
|
||
color: #6b7280;
|
||
cursor: pointer;
|
||
font-size: 15px;
|
||
position: relative;
|
||
transition: all 0.3s;
|
||
}
|
||
.tab.active {
|
||
color: #667eea;
|
||
font-weight: bold;
|
||
}
|
||
.tab.active::after {
|
||
content: '';
|
||
position: absolute;
|
||
bottom: -2px;
|
||
left: 0;
|
||
right: 0;
|
||
height: 2px;
|
||
background: #667eea;
|
||
}
|
||
.tab-content {
|
||
display: none;
|
||
animation: fadeIn 0.3s;
|
||
}
|
||
.tab-content.active {
|
||
display: block;
|
||
}
|
||
@keyframes fadeIn {
|
||
from { opacity: 0; transform: translateY(10px); }
|
||
to { opacity: 1; transform: translateY(0); }
|
||
}
|
||
.section {
|
||
background: #f9fafb;
|
||
border-radius: 10px;
|
||
padding: 20px;
|
||
margin-bottom: 20px;
|
||
}
|
||
.section-title {
|
||
font-size: 18px;
|
||
font-weight: bold;
|
||
color: #1f2937;
|
||
margin-bottom: 15px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
}
|
||
.info-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||
gap: 15px;
|
||
}
|
||
.info-item {
|
||
background: white;
|
||
padding: 15px;
|
||
border-radius: 8px;
|
||
border: 1px solid #e5e7eb;
|
||
}
|
||
.info-label {
|
||
font-size: 13px;
|
||
color: #6b7280;
|
||
margin-bottom: 5px;
|
||
}
|
||
.info-value {
|
||
font-size: 16px;
|
||
color: #1f2937;
|
||
font-weight: 500;
|
||
}
|
||
.requirement-item {
|
||
background: white;
|
||
padding: 15px;
|
||
border-radius: 8px;
|
||
margin-bottom: 10px;
|
||
border-left: 4px solid #3b82f6;
|
||
}
|
||
.requirement-item.warning {
|
||
border-left-color: #f59e0b;
|
||
background: #fffbeb;
|
||
}
|
||
.requirement-item.danger {
|
||
border-left-color: #ef4444;
|
||
background: #fef2f2;
|
||
}
|
||
.score-item {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
background: white;
|
||
padding: 15px;
|
||
border-radius: 8px;
|
||
margin-bottom: 10px;
|
||
border: 1px solid #e5e7eb;
|
||
}
|
||
.score-bar {
|
||
width: 200px;
|
||
height: 8px;
|
||
background: #e5e7eb;
|
||
border-radius: 4px;
|
||
overflow: hidden;
|
||
}
|
||
.score-fill {
|
||
height: 100%;
|
||
background: linear-gradient(to right, #10b981, #3b82f6);
|
||
border-radius: 4px;
|
||
transition: width 0.5s ease;
|
||
}
|
||
.risk-card {
|
||
background: white;
|
||
padding: 20px;
|
||
border-radius: 10px;
|
||
margin-bottom: 15px;
|
||
border: 2px solid;
|
||
}
|
||
.risk-card.high {
|
||
border-color: #ef4444;
|
||
background: #fef2f2;
|
||
}
|
||
.risk-card.medium {
|
||
border-color: #f59e0b;
|
||
background: #fffbeb;
|
||
}
|
||
.risk-card.low {
|
||
border-color: #10b981;
|
||
background: #f0fdf4;
|
||
}
|
||
.suggestion-card {
|
||
background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);
|
||
padding: 20px;
|
||
border-radius: 10px;
|
||
margin-bottom: 15px;
|
||
border: 1px solid #3b82f6;
|
||
}
|
||
.btn {
|
||
background: #667eea;
|
||
color: white;
|
||
padding: 14px 28px;
|
||
border: none;
|
||
border-radius: 8px;
|
||
font-size: 16px;
|
||
cursor: pointer;
|
||
transition: background 0.3s;
|
||
}
|
||
.btn:hover {
|
||
background: #764ba2;
|
||
}
|
||
.btn-secondary {
|
||
background: #e5e7eb;
|
||
color: #333;
|
||
}
|
||
.btn-secondary:hover {
|
||
background: #d1d5db;
|
||
}
|
||
.loading {
|
||
display: none;
|
||
text-align: center;
|
||
padding: 40px;
|
||
}
|
||
.loading.active {
|
||
display: block;
|
||
}
|
||
.spinner {
|
||
display: inline-block;
|
||
width: 50px;
|
||
height: 50px;
|
||
border: 5px solid #e5e7eb;
|
||
border-top-color: #667eea;
|
||
border-radius: 50%;
|
||
animation: spin 1s linear infinite;
|
||
}
|
||
@keyframes spin {
|
||
to { transform: rotate(360deg); }
|
||
}
|
||
.badge {
|
||
display: inline-block;
|
||
padding: 4px 8px;
|
||
border-radius: 4px;
|
||
font-size: 12px;
|
||
font-weight: bold;
|
||
margin-left: 10px;
|
||
}
|
||
.badge.success {
|
||
background: #10b981;
|
||
color: white;
|
||
}
|
||
.badge.warning {
|
||
background: #f59e0b;
|
||
color: white;
|
||
}
|
||
.badge.danger {
|
||
background: #ef4444;
|
||
color: white;
|
||
}
|
||
.summary-cards {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||
gap: 20px;
|
||
margin-bottom: 30px;
|
||
}
|
||
.summary-card {
|
||
background: white;
|
||
padding: 20px;
|
||
border-radius: 10px;
|
||
border: 1px solid #e5e7eb;
|
||
text-align: center;
|
||
}
|
||
.summary-number {
|
||
font-size: 32px;
|
||
font-weight: bold;
|
||
color: #667eea;
|
||
margin-bottom: 5px;
|
||
}
|
||
.summary-label {
|
||
color: #6b7280;
|
||
font-size: 14px;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="container">
|
||
<h1>🧠 AI深度解析系统 - 招标文件智能分析</h1>
|
||
|
||
<div class="upload-area" onclick="simulateUpload()">
|
||
<div style="font-size: 48px;">📄</div>
|
||
<h3>点击上传招标文件或拖拽到此处</h3>
|
||
<p>支持PDF、Word、文本等格式</p>
|
||
</div>
|
||
|
||
<div id="fileName" style="text-align: center; margin-bottom: 20px; color: #667eea; font-weight: bold;"></div>
|
||
|
||
<div class="loading" id="loading">
|
||
<div class="spinner"></div>
|
||
<p style="margin-top: 20px;">AI正在深度分析文档...</p>
|
||
<p style="color: #6b7280; font-size: 14px;">这可能需要10-30秒</p>
|
||
</div>
|
||
|
||
<div id="results" style="display: none;">
|
||
<div class="summary-cards">
|
||
<div class="summary-card">
|
||
<div class="summary-number" id="reqCount">0</div>
|
||
<div class="summary-label">资格要求</div>
|
||
</div>
|
||
<div class="summary-card">
|
||
<div class="summary-number" id="scoreCount">0</div>
|
||
<div class="summary-label">评分项目</div>
|
||
</div>
|
||
<div class="summary-card">
|
||
<div class="summary-number" id="riskCount">0</div>
|
||
<div class="summary-label">风险提示</div>
|
||
</div>
|
||
<div class="summary-card">
|
||
<div class="summary-number" id="suggestionCount">0</div>
|
||
<div class="summary-label">优化建议</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="tabs">
|
||
<button class="tab active" onclick="switchTab('basic')">📋 基础信息</button>
|
||
<button class="tab" onclick="switchTab('qualification')">✅ 资格审查</button>
|
||
<button class="tab" onclick="switchTab('scoring')">💯 评分标准</button>
|
||
<button class="tab" onclick="switchTab('content')">📦 采购内容</button>
|
||
<button class="tab" onclick="switchTab('technical')">⚙️ 技术要求</button>
|
||
<button class="tab" onclick="switchTab('commercial')">💰 商务条款</button>
|
||
<button class="tab" onclick="switchTab('risks')">⚠️ 风险分析</button>
|
||
<button class="tab" onclick="switchTab('suggestions')">💡 智能建议</button>
|
||
</div>
|
||
|
||
<!-- 基础信息标签页 -->
|
||
<div class="tab-content active" id="basic">
|
||
<div class="section">
|
||
<div class="section-title">📊 项目基本信息</div>
|
||
<div class="info-grid" id="basicInfo"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 资格审查标签页 -->
|
||
<div class="tab-content" id="qualification">
|
||
<div class="section">
|
||
<div class="section-title">
|
||
✅ 资格要求
|
||
<span class="badge warning" id="qualBadge">重要</span>
|
||
</div>
|
||
<div id="qualificationList"></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="section-title">
|
||
❌ 废标条件
|
||
<span class="badge danger">高风险</span>
|
||
</div>
|
||
<div id="disqualificationList"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 评分标准标签页 -->
|
||
<div class="tab-content" id="scoring">
|
||
<div class="section">
|
||
<div class="section-title">
|
||
💯 综合评分标准
|
||
<span id="totalScore" style="margin-left: auto; color: #667eea;">总分: 0分</span>
|
||
</div>
|
||
<div id="scoringList"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 采购内容标签页 -->
|
||
<div class="tab-content" id="content">
|
||
<div class="section">
|
||
<div class="section-title">📦 采购内容概况</div>
|
||
<div id="contentOverview"></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="section-title">📝 具体采购清单</div>
|
||
<div id="contentItems"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 技术要求标签页 -->
|
||
<div class="tab-content" id="technical">
|
||
<div class="section">
|
||
<div class="section-title">⚙️ 技术规范要求</div>
|
||
<div id="technicalList"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 商务条款标签页 -->
|
||
<div class="tab-content" id="commercial">
|
||
<div class="section">
|
||
<div class="section-title">💰 商务条款</div>
|
||
<div id="commercialList"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 风险分析标签页 -->
|
||
<div class="tab-content" id="risks">
|
||
<div class="section">
|
||
<div class="section-title">⚠️ 风险评估</div>
|
||
<div id="riskList"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 智能建议标签页 -->
|
||
<div class="tab-content" id="suggestions">
|
||
<div class="section">
|
||
<div class="section-title">💡 AI智能建议</div>
|
||
<div id="suggestionList"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div style="margin-top: 30px; text-align: center;">
|
||
<button class="btn" onclick="generateReport()">📊 生成分析报告</button>
|
||
<button class="btn btn-secondary" onclick="exportData()">📥 导出数据</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script src="js/ai-deep-analyzer.js"></script>
|
||
<script>
|
||
// 模拟的招标文件内容
|
||
const sampleDocument = `
|
||
晋江市西滨镇卫生院医康养结合中心改建项目(二次)
|
||
竞争性磋商文件
|
||
|
||
项目名称:晋江市西滨镇卫生院医康养结合中心改建项目
|
||
项目编号:[350582]FJXC[CS]2025005-120250916001
|
||
项目类型:工程类
|
||
采购方式:竞争性磋商
|
||
预算金额:1580万元
|
||
投标截止:2024-10-15 09:30
|
||
项目地点:福建省泉州市晋江市西滨镇
|
||
|
||
第二章 竞争性磋商须知
|
||
第1节 竞争性磋商须知前附表
|
||
|
||
一、资格审查要求:
|
||
1. 投标人须具有独立法人资格,持有有效的营业执照
|
||
2. 具备建筑工程施工总承包贰级及以上资质
|
||
3. 项目经理须具备建筑工程专业壹级注册建造师执业资格
|
||
4. 近三年内具有类似医疗建筑项目施工业绩(至少2个)
|
||
5. 无重大安全事故记录
|
||
6. 财务状况良好,具有履行合同的能力
|
||
7. 提供近三年经审计的财务报告
|
||
8. 缴纳社会保险的相关证明
|
||
|
||
废标情形:
|
||
1. 未按要求提交投标保证金的
|
||
2. 投标文件未按规定密封的
|
||
3. 投标文件关键内容字迹模糊、无法辨认的
|
||
4. 投标报价超过采购预算的
|
||
5. 未按要求响应实质性条款的
|
||
6. 投标人串通投标的
|
||
7. 提供虚假材料的
|
||
|
||
三、综合评分的标准和方法(满分100分):
|
||
|
||
1. 技术方案(40分)
|
||
- 施工组织设计的科学性、合理性(15分)
|
||
- 工期保证措施(10分)
|
||
- 质量保证措施(10分)
|
||
- 安全文明施工措施(5分)
|
||
|
||
2. 商务资质(30分)
|
||
- 企业资质等级(10分)
|
||
- 类似项目业绩(15分)
|
||
- 项目管理团队(5分)
|
||
|
||
3. 报价得分(30分)
|
||
- 评标基准价的确定:有效投标报价的算术平均值
|
||
- 投标报价等于评标基准价的得30分
|
||
- 每高于评标基准价1%扣1分,每低于评标基准价1%扣0.5分
|
||
|
||
第三章 采购内容及要求
|
||
|
||
一、项目概况:
|
||
本项目为晋江市西滨镇卫生院医康养结合中心改建工程,主要包括原有建筑改造和新建康养楼两部分。
|
||
|
||
二、技术要求:
|
||
1. 建筑结构必须符合现行国家建筑设计规范
|
||
2. 抗震设防烈度不低于7度
|
||
3. 所有材料必须符合国家环保标准
|
||
4. 医疗专用设施须满足卫生部门相关规范
|
||
5. 消防系统须通过消防部门验收
|
||
6. 智能化系统应支持远程监控和管理
|
||
7. 节能指标须达到绿色建筑二星级标准
|
||
|
||
三、商务条件:
|
||
1. 付款方式:签订合同后支付30%,工程完工验收合格后支付60%,质保期满后支付剩余10%
|
||
2. 工期要求:180个日历天
|
||
3. 质保期:2年
|
||
4. 履约保证金:合同金额的5%
|
||
5. 投标保证金:20万元
|
||
|
||
四、具体工作内容:
|
||
1. 原有建筑改造面积约3500平方米
|
||
2. 新建康养楼面积约2000平方米
|
||
3. 室外配套工程(包括道路、绿化、管网等)
|
||
4. 医疗设备安装工程
|
||
5. 智能化系统建设
|
||
`;
|
||
|
||
let analyzer = null;
|
||
let analysisResults = null;
|
||
|
||
function simulateUpload() {
|
||
const uploadArea = document.querySelector('.upload-area');
|
||
uploadArea.classList.add('active');
|
||
document.getElementById('fileName').textContent = '已加载:晋江市西滨镇卫生院医康养结合中心改建项目磋商文件.pdf';
|
||
|
||
setTimeout(() => {
|
||
startAnalysis();
|
||
}, 500);
|
||
}
|
||
|
||
function startAnalysis() {
|
||
document.getElementById('loading').classList.add('active');
|
||
document.getElementById('results').style.display = 'none';
|
||
|
||
// 初始化分析器
|
||
analyzer = new BidDocumentAnalyzer();
|
||
|
||
// 模拟分析过程
|
||
setTimeout(() => {
|
||
// 执行分析
|
||
analysisResults = analyzer.analyze(sampleDocument);
|
||
|
||
// 显示结果
|
||
displayResults();
|
||
|
||
document.getElementById('loading').classList.remove('active');
|
||
document.getElementById('results').style.display = 'block';
|
||
}, 2000);
|
||
}
|
||
|
||
function displayResults() {
|
||
if (!analysisResults) return;
|
||
|
||
// 更新统计卡片
|
||
document.getElementById('reqCount').textContent =
|
||
analysisResults.qualificationRequirements.length;
|
||
document.getElementById('scoreCount').textContent =
|
||
analysisResults.scoringCriteria.length;
|
||
document.getElementById('riskCount').textContent =
|
||
analysisResults.risks.length;
|
||
document.getElementById('suggestionCount').textContent =
|
||
analysisResults.suggestions.length;
|
||
|
||
// 显示基础信息
|
||
const basicInfoDiv = document.getElementById('basicInfo');
|
||
basicInfoDiv.innerHTML = '';
|
||
Object.entries(analysisResults.basicInfo).forEach(([key, value]) => {
|
||
const labels = {
|
||
projectName: '项目名称',
|
||
projectCode: '项目编号',
|
||
projectType: '项目类型',
|
||
procurementMethod: '采购方式',
|
||
budget: '项目预算',
|
||
deadline: '投标截止',
|
||
location: '项目地点'
|
||
};
|
||
|
||
basicInfoDiv.innerHTML += `
|
||
<div class="info-item">
|
||
<div class="info-label">${labels[key] || key}</div>
|
||
<div class="info-value">${value || '未识别'}</div>
|
||
</div>
|
||
`;
|
||
});
|
||
|
||
// 显示资格要求
|
||
const qualList = document.getElementById('qualificationList');
|
||
qualList.innerHTML = '';
|
||
analysisResults.qualificationRequirements.forEach(req => {
|
||
qualList.innerHTML += `
|
||
<div class="requirement-item">
|
||
<strong>${req.type}</strong>: ${req.requirement}
|
||
</div>
|
||
`;
|
||
});
|
||
|
||
// 显示废标条件
|
||
const disqualList = document.getElementById('disqualificationList');
|
||
disqualList.innerHTML = '';
|
||
analysisResults.disqualificationFactors.forEach(factor => {
|
||
disqualList.innerHTML += `
|
||
<div class="requirement-item danger">
|
||
⚠️ ${factor.condition}
|
||
</div>
|
||
`;
|
||
});
|
||
|
||
// 显示评分标准
|
||
const scoringList = document.getElementById('scoringList');
|
||
scoringList.innerHTML = '';
|
||
let totalScore = 0;
|
||
analysisResults.scoringCriteria.forEach(criteria => {
|
||
totalScore += criteria.score;
|
||
const percentage = criteria.score;
|
||
scoringList.innerHTML += `
|
||
<div class="score-item">
|
||
<div>
|
||
<strong>${criteria.item}</strong>
|
||
${criteria.description ? `<p style="color: #6b7280; font-size: 14px; margin-top: 5px;">${criteria.description}</p>` : ''}
|
||
</div>
|
||
<div style="display: flex; align-items: center; gap: 10px;">
|
||
<div class="score-bar">
|
||
<div class="score-fill" style="width: ${percentage}%"></div>
|
||
</div>
|
||
<span style="font-weight: bold; color: #667eea;">${criteria.score}分</span>
|
||
</div>
|
||
</div>
|
||
`;
|
||
});
|
||
document.getElementById('totalScore').textContent = `总分: ${totalScore}分`;
|
||
|
||
// 显示采购内容
|
||
const contentOverview = document.getElementById('contentOverview');
|
||
contentOverview.innerHTML = analysisResults.procurementContent.overview ?
|
||
`<p>${analysisResults.procurementContent.overview}</p>` :
|
||
'<p>暂无概况信息</p>';
|
||
|
||
const contentItems = document.getElementById('contentItems');
|
||
contentItems.innerHTML = '';
|
||
if (analysisResults.procurementContent.items) {
|
||
analysisResults.procurementContent.items.forEach((item, index) => {
|
||
contentItems.innerHTML += `
|
||
<div class="requirement-item">
|
||
${index + 1}. ${item}
|
||
</div>
|
||
`;
|
||
});
|
||
}
|
||
|
||
// 显示技术要求
|
||
const techList = document.getElementById('technicalList');
|
||
techList.innerHTML = '';
|
||
analysisResults.technicalRequirements.forEach(req => {
|
||
const priorityClass = req.priority === 'mandatory' ? 'danger' :
|
||
req.priority === 'high' ? 'warning' : '';
|
||
techList.innerHTML += `
|
||
<div class="requirement-item ${priorityClass}">
|
||
${req.requirement}
|
||
<span class="badge ${priorityClass}">${req.priority}</span>
|
||
</div>
|
||
`;
|
||
});
|
||
|
||
// 显示商务条款
|
||
const commercialList = document.getElementById('commercialList');
|
||
commercialList.innerHTML = '';
|
||
analysisResults.commercialTerms.forEach(term => {
|
||
commercialList.innerHTML += `
|
||
<div class="info-item">
|
||
<div class="info-label">${term.type}</div>
|
||
<div class="info-value">${term.content}</div>
|
||
</div>
|
||
`;
|
||
});
|
||
|
||
// 显示风险分析
|
||
const riskList = document.getElementById('riskList');
|
||
riskList.innerHTML = '';
|
||
analysisResults.risks.forEach(risk => {
|
||
riskList.innerHTML += `
|
||
<div class="risk-card ${risk.level}">
|
||
<h4>${risk.type}</h4>
|
||
<p>${risk.description}</p>
|
||
<p style="margin-top: 10px;"><strong>缓解措施:</strong>${risk.mitigation}</p>
|
||
</div>
|
||
`;
|
||
});
|
||
|
||
// 显示建议
|
||
const suggestionList = document.getElementById('suggestionList');
|
||
suggestionList.innerHTML = '';
|
||
analysisResults.suggestions.forEach(suggestion => {
|
||
suggestionList.innerHTML += `
|
||
<div class="suggestion-card">
|
||
<h4>${suggestion.category}</h4>
|
||
<p>${suggestion.suggestion}</p>
|
||
</div>
|
||
`;
|
||
});
|
||
}
|
||
|
||
function switchTab(tabName) {
|
||
// 切换标签页
|
||
document.querySelectorAll('.tab').forEach(tab => {
|
||
tab.classList.remove('active');
|
||
});
|
||
document.querySelectorAll('.tab-content').forEach(content => {
|
||
content.classList.remove('active');
|
||
});
|
||
|
||
event.target.classList.add('active');
|
||
document.getElementById(tabName).classList.add('active');
|
||
}
|
||
|
||
function generateReport() {
|
||
alert('正在生成详细分析报告...\n报告将包含所有识别的信息和建议,可用于投标决策参考。');
|
||
}
|
||
|
||
function exportData() {
|
||
const dataStr = JSON.stringify(analysisResults, null, 2);
|
||
const dataUri = 'data:application/json;charset=utf-8,'+ encodeURIComponent(dataStr);
|
||
|
||
const exportFileDefaultName = '招标文件分析结果.json';
|
||
|
||
const linkElement = document.createElement('a');
|
||
linkElement.setAttribute('href', dataUri);
|
||
linkElement.setAttribute('download', exportFileDefaultName);
|
||
linkElement.click();
|
||
}
|
||
|
||
// 页面加载完成
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
console.log('AI深度解析系统已准备就绪');
|
||
});
|
||
</script>
|
||
</body>
|
||
</html> |