Files
yunbiaoshu/ai-deep-analysis.html
陈金美 2ccc7c4e8c
Some checks failed
backend-contract-verification / Verify TypeScript build & OpenAPI contracts (push) Has been cancelled
基础资料
2025-11-08 15:48:26 +08:00

716 lines
25 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>