项目

一般

简介

需求 #11725 » 招采(1).html

原型 - 李乾星, 2025-05-29 13:29

 
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>
(3-3/5)