1
|
<!DOCTYPE html>
|
2
|
<html lang="zh-CN">
|
3
|
<head>
|
4
|
<meta charset="UTF-8">
|
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
<title>智能招标文件生成系统</title>
|
7
|
<style>
|
8
|
* {
|
9
|
margin: 0;
|
10
|
padding: 0;
|
11
|
box-sizing: border-box;
|
12
|
font-family: 'Microsoft YaHei', sans-serif;
|
13
|
}
|
14
|
|
15
|
body {
|
16
|
background-color: #f8f9fa;
|
17
|
height: 100vh;
|
18
|
display: flex;
|
19
|
}
|
20
|
|
21
|
/* 左侧导航区 */
|
22
|
.sidebar {
|
23
|
width: 280px;
|
24
|
background: #fff;
|
25
|
border-right: 1px solid #eaeaea;
|
26
|
padding: 20px;
|
27
|
height: 100%;
|
28
|
overflow-y: auto;
|
29
|
}
|
30
|
|
31
|
.nav-title {
|
32
|
font-size: 16px;
|
33
|
color: #666;
|
34
|
margin: 20px 0;
|
35
|
padding-left: 10px;
|
36
|
border-left: 3px solid #1890ff;
|
37
|
}
|
38
|
|
39
|
.nav-item {
|
40
|
display: flex;
|
41
|
align-items: center;
|
42
|
padding: 12px;
|
43
|
margin: 8px 0;
|
44
|
border-radius: 6px;
|
45
|
cursor: pointer;
|
46
|
transition: all 0.3s;
|
47
|
}
|
48
|
|
49
|
.nav-item.active {
|
50
|
background: #e6f7ff;
|
51
|
color: #1890ff;
|
52
|
}
|
53
|
|
54
|
.nav-item:hover {
|
55
|
background: #f5f5f5;
|
56
|
}
|
57
|
|
58
|
/* 主内容区 */
|
59
|
.main-content {
|
60
|
flex: 1;
|
61
|
padding: 24px;
|
62
|
overflow-y: auto;
|
63
|
display: flex;
|
64
|
flex-direction: column;
|
65
|
}
|
66
|
|
67
|
/* 顶部工具栏 */
|
68
|
.toolbar {
|
69
|
display: flex;
|
70
|
justify-content: space-between;
|
71
|
margin-bottom: 24px;
|
72
|
padding: 12px;
|
73
|
background: #fff;
|
74
|
border-radius: 8px;
|
75
|
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
|
76
|
}
|
77
|
|
78
|
.toolbar-group {
|
79
|
display: flex;
|
80
|
gap: 12px;
|
81
|
}
|
82
|
|
83
|
/* 文件上传区 */
|
84
|
.upload-section {
|
85
|
background: #fff;
|
86
|
border-radius: 8px;
|
87
|
padding: 24px;
|
88
|
margin-bottom: 24px;
|
89
|
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
|
90
|
}
|
91
|
|
92
|
.upload-card {
|
93
|
border: 2px dashed #eaeaea;
|
94
|
border-radius: 8px;
|
95
|
padding: 40px;
|
96
|
text-align: center;
|
97
|
transition: all 0.3s;
|
98
|
cursor: pointer;
|
99
|
}
|
100
|
|
101
|
.upload-card:hover {
|
102
|
border-color: #1890ff;
|
103
|
background: #f8fbff;
|
104
|
}
|
105
|
|
106
|
/* 模板选择区 */
|
107
|
.template-section {
|
108
|
background: #fff;
|
109
|
border-radius: 8px;
|
110
|
padding: 24px;
|
111
|
margin-bottom: 24px;
|
112
|
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
|
113
|
}
|
114
|
|
115
|
.template-grid {
|
116
|
display: grid;
|
117
|
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
118
|
gap: 16px;
|
119
|
margin-top: 16px;
|
120
|
}
|
121
|
|
122
|
.template-card {
|
123
|
border: 1px solid #eaeaea;
|
124
|
border-radius: 8px;
|
125
|
padding: 16px;
|
126
|
text-align: center;
|
127
|
transition: all 0.3s;
|
128
|
cursor: pointer;
|
129
|
}
|
130
|
|
131
|
.template-card:hover {
|
132
|
border-color: #1890ff;
|
133
|
box-shadow: 0 4px 12px rgba(24, 144, 255, 0.2);
|
134
|
}
|
135
|
|
136
|
.template-icon {
|
137
|
font-size: 32px;
|
138
|
margin-bottom: 8px;
|
139
|
color: #1890ff;
|
140
|
}
|
141
|
|
142
|
/* 生成配置区 */
|
143
|
.config-section {
|
144
|
background: #fff;
|
145
|
border-radius: 8px;
|
146
|
padding: 24px;
|
147
|
margin-bottom: 24px;
|
148
|
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
|
149
|
}
|
150
|
|
151
|
.config-form {
|
152
|
display: grid;
|
153
|
grid-template-columns: 1fr 1fr;
|
154
|
gap: 16px;
|
155
|
margin-top: 16px;
|
156
|
}
|
157
|
|
158
|
.form-group {
|
159
|
margin-bottom: 16px;
|
160
|
}
|
161
|
|
162
|
.form-label {
|
163
|
display: block;
|
164
|
margin-bottom: 8px;
|
165
|
font-weight: bold;
|
166
|
color: #333;
|
167
|
}
|
168
|
|
169
|
.form-control {
|
170
|
width: 100%;
|
171
|
padding: 10px;
|
172
|
border: 1px solid #d9d9d9;
|
173
|
border-radius: 4px;
|
174
|
transition: all 0.3s;
|
175
|
}
|
176
|
|
177
|
.form-control:focus {
|
178
|
border-color: #1890ff;
|
179
|
outline: none;
|
180
|
box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
|
181
|
}
|
182
|
|
183
|
/* 预览区 */
|
184
|
.preview-section {
|
185
|
background: #fff;
|
186
|
border-radius: 8px;
|
187
|
padding: 24px;
|
188
|
margin-bottom: 24px;
|
189
|
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
|
190
|
flex: 1;
|
191
|
display: flex;
|
192
|
flex-direction: column;
|
193
|
}
|
194
|
|
195
|
.preview-header {
|
196
|
display: flex;
|
197
|
justify-content: space-between;
|
198
|
margin-bottom: 16px;
|
199
|
}
|
200
|
|
201
|
.preview-content {
|
202
|
flex: 1;
|
203
|
border: 1px solid #eaeaea;
|
204
|
border-radius: 8px;
|
205
|
padding: 16px;
|
206
|
overflow-y: auto;
|
207
|
background: #fafafa;
|
208
|
}
|
209
|
|
210
|
/* 操作按钮 */
|
211
|
.btn {
|
212
|
padding: 8px 16px;
|
213
|
border: none;
|
214
|
border-radius: 6px;
|
215
|
cursor: pointer;
|
216
|
transition: all 0.3s;
|
217
|
display: inline-flex;
|
218
|
align-items: center;
|
219
|
gap: 8px;
|
220
|
}
|
221
|
|
222
|
.btn-primary {
|
223
|
background: #1890ff;
|
224
|
color: white;
|
225
|
}
|
226
|
|
227
|
.btn-primary:hover {
|
228
|
background: #40a9ff;
|
229
|
}
|
230
|
|
231
|
.btn-secondary {
|
232
|
background: #f5f5f5;
|
233
|
color: #333;
|
234
|
border: 1px solid #d9d9d9;
|
235
|
}
|
236
|
|
237
|
.btn-secondary:hover {
|
238
|
background: #e6e6e6;
|
239
|
}
|
240
|
|
241
|
/* 状态指示器 */
|
242
|
.status-indicator {
|
243
|
display: inline-block;
|
244
|
padding: 4px 8px;
|
245
|
border-radius: 4px;
|
246
|
font-size: 12px;
|
247
|
font-weight: bold;
|
248
|
}
|
249
|
|
250
|
.status-processing {
|
251
|
background: #e6f7ff;
|
252
|
color: #1890ff;
|
253
|
}
|
254
|
|
255
|
.status-success {
|
256
|
background: #f6ffed;
|
257
|
color: #52c41a;
|
258
|
}
|
259
|
|
260
|
.status-error {
|
261
|
background: #fff2f0;
|
262
|
color: #f5222d;
|
263
|
}
|
264
|
|
265
|
/* 响应式调整 */
|
266
|
@media (max-width: 768px) {
|
267
|
.config-form {
|
268
|
grid-template-columns: 1fr;
|
269
|
}
|
270
|
}
|
271
|
</style>
|
272
|
</head>
|
273
|
<body>
|
274
|
<!-- 左侧导航 -->
|
275
|
<div class="sidebar">
|
276
|
<div class="nav-title">招标文件管理</div>
|
277
|
<div class="nav-item active">📁 文件生成</div>
|
278
|
<div class="nav-item">📚 模板管理</div>
|
279
|
<div class="nav-item">⚙️ 规则配置</div>
|
280
|
|
281
|
<div class="nav-title">知识库</div>
|
282
|
<div class="nav-item">📦 资质要求库</div>
|
283
|
<div class="nav-item">📝 技术规范库</div>
|
284
|
<div class="nav-item">📊 评标办法库</div>
|
285
|
<div class="nav-item">📑 合同条款库</div>
|
286
|
|
287
|
<div class="nav-title">历史记录</div>
|
288
|
<div class="nav-item">🗃️ 招标文件</div>
|
289
|
<div class="nav-item">🗂️ 投标文件</div>
|
290
|
<div class="nav-item">📋 资格预审</div>
|
291
|
</div>
|
292
|
|
293
|
<!-- 主内容区 -->
|
294
|
<div class="main-content">
|
295
|
<!-- 顶部工具栏 -->
|
296
|
<div class="toolbar">
|
297
|
<div class="toolbar-group">
|
298
|
<button class="btn btn-primary">
|
299
|
<span>🔄</span> 刷新
|
300
|
</button>
|
301
|
<button class="btn btn-secondary">
|
302
|
<span>📥</span> 导出
|
303
|
</button>
|
304
|
</div>
|
305
|
<div class="toolbar-group">
|
306
|
<span class="status-indicator status-processing">生成中...</span>
|
307
|
</div>
|
308
|
</div>
|
309
|
|
310
|
<!-- 文件上传区 -->
|
311
|
<div class="upload-section">
|
312
|
<h2>1. 上传基础资料</h2>
|
313
|
<div class="upload-card" id="uploadCard">
|
314
|
<p>拖放文件或 <label style="color:#1890ff;cursor:pointer;">点击上传</label></p>
|
315
|
<input type="file" id="fileInput" hidden multiple>
|
316
|
<div class="file-list" id="fileList">
|
317
|
<p class="text-muted">支持格式:DOCX/XLSX/PDF/图片</p>
|
318
|
</div>
|
319
|
</div>
|
320
|
</div>
|
321
|
|
322
|
<!-- 模板选择区 -->
|
323
|
<div class="template-section">
|
324
|
<h2>2. 选择招标模板</h2>
|
325
|
<div class="template-grid">
|
326
|
<div class="template-card">
|
327
|
<div class="template-icon">📑</div>
|
328
|
<h3>工程招标</h3>
|
329
|
<p>适用于建设工程项目</p>
|
330
|
</div>
|
331
|
<div class="template-card">
|
332
|
<div class="template-icon">🛒</div>
|
333
|
<h3>货物采购</h3>
|
334
|
<p>适用于设备材料采购</p>
|
335
|
</div>
|
336
|
<div class="template-card">
|
337
|
<div class="template-icon">👨💼</div>
|
338
|
<h3>服务招标</h3>
|
339
|
<p>适用于服务类项目</p>
|
340
|
</div>
|
341
|
<div class="template-card">
|
342
|
<div class="template-icon">🏗️</div>
|
343
|
<h3>EPC总承包</h3>
|
344
|
<p>适用于设计施工一体化</p>
|
345
|
</div>
|
346
|
</div>
|
347
|
</div>
|
348
|
|
349
|
<!-- 生成配置区 -->
|
350
|
<div class="config-section">
|
351
|
<h2>3. 配置生成选项</h2>
|
352
|
<div class="config-form">
|
353
|
<div class="form-group">
|
354
|
<label class="form-label">项目名称</label>
|
355
|
<input type="text" class="form-control" placeholder="请输入项目名称">
|
356
|
</div>
|
357
|
<div class="form-group">
|
358
|
<label class="form-label">招标编号</label>
|
359
|
<input type="text" class="form-control" placeholder="自动生成或手动输入">
|
360
|
</div>
|
361
|
<div class="form-group">
|
362
|
<label class="form-label">项目类型</label>
|
363
|
<select class="form-control">
|
364
|
<option>公开招标</option>
|
365
|
<option>邀请招标</option>
|
366
|
<option>竞争性谈判</option>
|
367
|
<option>单一来源采购</option>
|
368
|
</select>
|
369
|
</div>
|
370
|
<div class="form-group">
|
371
|
<label class="form-label">预算金额</label>
|
372
|
<input type="text" class="form-control" placeholder="请输入金额(万元)">
|
373
|
</div>
|
374
|
<div class="form-group">
|
375
|
<label class="form-label">投标截止时间</label>
|
376
|
<input type="datetime-local" class="form-control">
|
377
|
</div>
|
378
|
<div class="form-group">
|
379
|
<label class="form-label">开标时间</label>
|
380
|
<input type="datetime-local" class="form-control">
|
381
|
</div>
|
382
|
<div class="form-group">
|
383
|
<label class="form-label">评标办法</label>
|
384
|
<select class="form-control">
|
385
|
<option>综合评估法</option>
|
386
|
<option>最低价中标法</option>
|
387
|
<option>性价比法</option>
|
388
|
</select>
|
389
|
</div>
|
390
|
<div class="form-group">
|
391
|
<label class="form-label">文件格式</label>
|
392
|
<select class="form-control">
|
393
|
<option>HTML(网页格式)</option>
|
394
|
<option>PDF(便携文档)</option>
|
395
|
<option>DOCX(Word文档)</option>
|
396
|
</select>
|
397
|
</div>
|
398
|
</div>
|
399
|
</div>
|
400
|
|
401
|
<!-- 预览区 -->
|
402
|
<div class="preview-section">
|
403
|
<div class="preview-header">
|
404
|
<h2>4. 预览与生成</h2>
|
405
|
<button class="btn btn-primary" id="generateBtn">
|
406
|
<span>✨</span> 生成招标文件
|
407
|
</button>
|
408
|
</div>
|
409
|
<div class="preview-content">
|
410
|
<div style="text-align: center; padding: 40px; color: #999;">
|
411
|
<p style="font-size: 18px; margin-bottom: 16px;">👆 点击"生成招标文件"按钮</p>
|
412
|
<p>系统将基于您上传的资料和配置选项,自动生成完整的招标文件</p>
|
413
|
</div>
|
414
|
<!-- 这里将动态加载生成的招标文件内容 -->
|
415
|
</div>
|
416
|
</div>
|
417
|
</div>
|
418
|
|
419
|
<script>
|
420
|
// 文件上传交互
|
421
|
const uploadCard = document.getElementById('uploadCard');
|
422
|
const fileInput = document.getElementById('fileInput');
|
423
|
const fileList = document.getElementById('fileList');
|
424
|
const generateBtn = document.getElementById('generateBtn');
|
425
|
|
426
|
uploadCard.addEventListener('click', () => fileInput.click());
|
427
|
|
428
|
fileInput.addEventListener('change', (e) => {
|
429
|
const files = Array.from(e.target.files);
|
430
|
|
431
|
fileList.innerHTML = files.map(file => `
|
432
|
<div style="margin:8px 0;padding:8px;background:#f8f9fa;border-radius:4px;display:flex;align-items:center;gap:8px;">
|
433
|
<span>📄</span>
|
434
|
<div style="flex:1;">
|
435
|
<div>${file.name}</div>
|
436
|
<div style="font-size:12px;color:#999;">${(file.size/1024/1024).toFixed(2)}MB</div>
|
437
|
</div>
|
438
|
<span style="color:#f5222d;cursor:pointer;">×</span>
|
439
|
</div>
|
440
|
`).join('');
|
441
|
});
|
442
|
|
443
|
// 生成按钮点击事件
|
444
|
generateBtn.addEventListener('click', function() {
|
445
|
this.innerHTML = '<span>⏳</span> 生成中...';
|
446
|
this.disabled = true;
|
447
|
|
448
|
// 模拟生成过程
|
449
|
setTimeout(() => {
|
450
|
this.innerHTML = '<span>✅</span> 生成完成';
|
451
|
|
452
|
// 这里应该替换为实际生成的招标文件内容
|
453
|
document.querySelector('.preview-content').innerHTML = `
|
454
|
<h1 style="text-align:center;margin-bottom:24px;">XX项目招标文件</h1>
|
455
|
<div style="text-align:center;margin-bottom:32px;">
|
456
|
<p style="color:#666;">招标编号:ZB-2023-001</p>
|
457
|
</div>
|
458
|
|
459
|
<h2 style="border-left:4px solid #1890ff;padding-left:8px;margin:24px 0 16px;">第一章 招标公告</h2>
|
460
|
|
461
|
<h3 style="margin:16px 0 8px;">1.1 项目概况</h3>
|
462
|
<p style="line-height:1.8;margin-bottom:12px;">
|
463
|
根据《中华人民共和国招标投标法》及相关法律法规,现对XX项目进行公开招标,择优选定中标人。
|
464
|
</p>
|
465
|
|
466
|
<table style="width:100%;border-collapse:collapse;margin:16px 0;">
|
467
|
<tr>
|
468
|
<td style="padding:8px;border:1px solid #eaeaea;width:30%;">项目名称</td>
|
469
|
<td style="padding:8px;border:1px solid #eaeaea;">XX项目</td>
|
470
|
</tr>
|
471
|
<tr>
|
472
|
<td style="padding:8px;border:1px solid #eaeaea;">招标人</td>
|
473
|
<td style="padding:8px;border:1px solid #eaeaea;">XX公司</td>
|
474
|
</tr>
|
475
|
<tr>
|
476
|
<td style="padding:8px;border:1px solid #eaeaea;">项目地点</td>
|
477
|
<td style="padding:8px;border:1px solid #eaeaea;">XX省XX市</td>
|
478
|
</tr>
|
479
|
</table>
|
480
|
|
481
|
<div style="margin-top:32px;display:flex;justify-content:space-between;">
|
482
|
<div style="text-align:center;width:200px;">
|
483
|
<div style="border-top:1px solid #333;margin:40px 0 8px;padding-top:8px;"></div>
|
484
|
<p>招标人:(盖章)</p>
|
485
|
</div>
|
486
|
<div style="text-align:center;width:200px;">
|
487
|
<div style="border-top:1px solid #333;margin:40px 0 8px;padding-top:8px;"></div>
|
488
|
<p>日期:</p>
|
489
|
</div>
|
490
|
</div>
|
491
|
`;
|
492
|
|
493
|
// 显示导出选项
|
494
|
const toolbar = document.querySelector('.toolbar .toolbar-group:last-child');
|
495
|
toolbar.innerHTML = `
|
496
|
<button class="btn btn-primary">
|
497
|
<span>📥</span> 下载HTML
|
498
|
</button>
|
499
|
<button class="btn btn-secondary">
|
500
|
<span>📄</span> 导出PDF
|
501
|
</button>
|
502
|
<button class="btn btn-secondary">
|
503
|
<span>📝</span> 导出Word
|
504
|
</button>
|
505
|
`;
|
506
|
|
507
|
// 更新状态指示器
|
508
|
document.querySelector('.status-indicator').className = 'status-indicator status-success';
|
509
|
document.querySelector('.status-indicator').textContent = '生成完成';
|
510
|
|
511
|
}, 2000);
|
512
|
});
|
513
|
</script>
|
514
|
</body>
|
515
|
</html>
|