AIDeveloper-PC/prototype/index-4.html

2183 lines
88 KiB
HTML
Raw Normal View History

2026-01-31 09:32:00 +00:00
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>套打输出模块</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css" rel="stylesheet">
<style>
:root {
--bg-primary: #0a0e27;
--bg-secondary: #0f1535;
--bg-card: rgba(15, 21, 53, 0.8);
--border-color: rgba(6, 182, 212, 0.3);
--border-hover: rgba(6, 182, 212, 0.6);
--text-primary: #ffffff;
--text-secondary: #94a3b8;
--accent-cyan: #06b6d4;
--accent-blue: #3b82f6;
--shadow-cyan: rgba(6, 182, 212, 0.2);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
background: linear-gradient(135deg, #0a0e27 0%, #1e3a8a 50%, #0a0e27 100%);
background-attachment: fixed;
color: var(--text-primary);
min-height: 100vh;
padding: 2rem;
}
.container-custom {
max-width: 1400px;
margin: 0 auto;
}
/* 卡片样式 */
.card-custom {
background: var(--bg-card);
backdrop-filter: blur(20px);
border: 1px solid var(--border-color);
border-radius: 12px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
transition: all 0.3s;
margin-bottom: 1.5rem;
}
.card-custom:hover {
border-color: var(--border-hover);
box-shadow: 0 12px 40px rgba(6, 182, 212, 0.2);
}
.card-header-custom {
background: transparent;
border-bottom: 1px solid var(--border-color);
padding: 1.25rem 1.5rem;
}
.card-body-custom {
padding: 1.5rem;
}
/* 页面标题 */
.page-title {
font-size: 2rem;
font-weight: bold;
background: linear-gradient(90deg, var(--accent-cyan), var(--accent-blue));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-bottom: 0.5rem;
}
.page-subtitle {
color: var(--text-secondary);
font-size: 0.95rem;
margin-bottom: 2rem;
}
/* 标签页 */
.nav-tabs-custom {
border-bottom: 2px solid var(--border-color);
margin-bottom: 2rem;
}
.nav-tabs-custom .nav-link {
color: var(--text-secondary);
border: none;
padding: 1rem 2rem;
transition: all 0.3s;
position: relative;
}
.nav-tabs-custom .nav-link:hover {
color: var(--text-primary);
}
.nav-tabs-custom .nav-link.active {
color: var(--accent-cyan);
background: transparent;
}
.nav-tabs-custom .nav-link.active::after {
content: '';
position: absolute;
bottom: -2px;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, var(--accent-cyan), var(--accent-blue));
}
/* 按钮样式 */
.btn-custom-primary {
background: linear-gradient(90deg, var(--accent-cyan), var(--accent-blue));
border: none;
color: white;
padding: 0.6rem 1.5rem;
border-radius: 8px;
font-weight: 500;
transition: all 0.3s;
}
.btn-custom-primary:hover {
box-shadow: 0 8px 25px var(--shadow-cyan);
transform: translateY(-2px);
color: white;
}
.btn-custom-secondary {
background: rgba(6, 182, 212, 0.2);
border: 1px solid var(--border-hover);
color: var(--accent-cyan);
padding: 0.6rem 1.5rem;
border-radius: 8px;
font-weight: 500;
transition: all 0.3s;
}
.btn-custom-secondary:hover {
background: rgba(6, 182, 212, 0.3);
color: var(--accent-cyan);
}
.btn-success-custom {
background: rgba(34, 197, 94, 0.2);
border: 1px solid rgba(34, 197, 94, 0.5);
color: #22c55e;
padding: 0.5rem 1rem;
border-radius: 6px;
transition: all 0.3s;
}
.btn-success-custom:hover {
background: rgba(34, 197, 94, 0.3);
color: #22c55e;
}
.btn-danger-custom {
background: rgba(239, 68, 68, 0.2);
border: 1px solid rgba(239, 68, 68, 0.5);
color: #ef4444;
padding: 0.5rem 1rem;
border-radius: 6px;
transition: all 0.3s;
}
.btn-danger-custom:hover {
background: rgba(239, 68, 68, 0.3);
color: #ef4444;
}
/* 表单样式 */
.form-control-custom {
background: rgba(30, 41, 59, 0.5);
border: 1px solid var(--border-color);
color: var(--text-primary);
border-radius: 8px;
padding: 0.6rem 1rem;
}
.form-control-custom:focus {
background: rgba(30, 41, 59, 0.7);
border-color: var(--accent-cyan);
box-shadow: 0 0 0 0.2rem rgba(6, 182, 212, 0.25);
color: var(--text-primary);
}
.form-control-custom::placeholder {
color: var(--text-secondary);
}
.form-label-custom {
color: var(--text-primary);
font-weight: 500;
margin-bottom: 0.5rem;
font-size: 0.9rem;
}
.form-select-custom {
background: rgba(30, 41, 59, 0.5);
border: 1px solid var(--border-color);
color: var(--text-primary);
border-radius: 8px;
padding: 0.6rem 1rem;
}
.form-select-custom:focus {
background: rgba(30, 41, 59, 0.7);
border-color: var(--accent-cyan);
box-shadow: 0 0 0 0.2rem rgba(6, 182, 212, 0.25);
color: var(--text-primary);
}
/* 统计卡片 */
.stat-card {
background: var(--bg-card);
backdrop-filter: blur(20px);
border: 1px solid var(--border-color);
border-radius: 12px;
padding: 1.5rem;
transition: all 0.3s;
}
.stat-card:hover {
transform: scale(1.05);
box-shadow: 0 12px 40px rgba(6, 182, 212, 0.3);
}
.stat-card.cyan {
background: linear-gradient(135deg, rgba(6, 182, 212, 0.2), rgba(6, 182, 212, 0.1));
border-color: rgba(6, 182, 212, 0.5);
}
.stat-card.blue {
background: linear-gradient(135deg, rgba(59, 130, 246, 0.2), rgba(59, 130, 246, 0.1));
border-color: rgba(59, 130, 246, 0.5);
}
.stat-card.green {
background: linear-gradient(135deg, rgba(34, 197, 94, 0.2), rgba(34, 197, 94, 0.1));
border-color: rgba(34, 197, 94, 0.5);
}
.stat-card.yellow {
background: linear-gradient(135deg, rgba(234, 179, 8, 0.2), rgba(234, 179, 8, 0.1));
border-color: rgba(234, 179, 8, 0.5);
}
.stat-icon {
width: 50px;
height: 50px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
}
.stat-icon.cyan { background: rgba(6, 182, 212, 0.2); color: var(--accent-cyan); }
.stat-icon.blue { background: rgba(59, 130, 246, 0.2); color: var(--accent-blue); }
.stat-icon.green { background: rgba(34, 197, 94, 0.2); color: #22c55e; }
.stat-icon.yellow { background: rgba(234, 179, 8, 0.2); color: #eab308; }
.stat-value {
font-size: 2rem;
font-weight: bold;
margin: 0.5rem 0;
}
.stat-label {
font-size: 0.85rem;
color: var(--text-secondary);
}
/* 设备卡片 */
.device-card {
background: rgba(30, 41, 59, 0.5);
border: 1px solid var(--border-color);
border-radius: 8px;
padding: 1.25rem;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 1rem;
}
/* 徽章样式 */
.badge-custom {
padding: 0.4rem 0.8rem;
border-radius: 6px;
font-size: 0.75rem;
font-weight: 500;
}
.badge-success { background: rgba(34, 197, 94, 0.2); color: #22c55e; }
.badge-warning { background: rgba(234, 179, 8, 0.2); color: #eab308; }
.badge-danger { background: rgba(239, 68, 68, 0.2); color: #ef4444; }
.badge-info { background: rgba(6, 182, 212, 0.2); color: var(--accent-cyan); }
.badge-primary { background: rgba(59, 130, 246, 0.2); color: var(--accent-blue); }
/* 进度条 */
.progress-custom {
background: rgba(30, 41, 59, 0.5);
border-radius: 8px;
height: 8px;
}
.progress-bar-custom {
background: linear-gradient(90deg, var(--accent-cyan), var(--accent-blue));
border-radius: 8px;
height: 100%;
transition: width 0.3s;
}
/* 表格样式 */
.table-custom {
color: var(--text-primary);
}
.table-custom thead th {
background: rgba(6, 182, 212, 0.1);
border-bottom: 1px solid var(--border-color);
color: var(--text-secondary);
font-weight: 600;
font-size: 0.85rem;
text-transform: uppercase;
letter-spacing: 0.5px;
padding: 1rem;
}
.table-custom tbody tr {
border-bottom: 1px solid rgba(148, 163, 184, 0.1);
transition: all 0.3s;
}
.table-custom tbody tr:hover {
background: rgba(6, 182, 212, 0.05);
}
.table-custom tbody td {
padding: 1rem;
vertical-align: middle;
}
/* 监控面板 */
.monitor-panel {
background: rgba(30, 41, 59, 0.5);
border: 1px solid var(--border-color);
border-radius: 8px;
padding: 1.5rem;
font-family: 'Courier New', monospace;
font-size: 0.85rem;
line-height: 1.6;
}
.monitor-title {
color: var(--accent-cyan);
font-weight: bold;
margin-bottom: 1rem;
padding-bottom: 0.5rem;
border-bottom: 1px solid var(--border-color);
}
.monitor-item {
display: flex;
justify-content: space-between;
margin-bottom: 0.5rem;
}
.monitor-label {
color: var(--text-secondary);
}
.monitor-value {
color: var(--text-primary);
font-weight: 500;
}
/* 日志面板 */
.log-panel {
background: rgba(10, 14, 39, 0.8);
border: 1px solid var(--border-color);
border-radius: 8px;
padding: 1rem;
max-height: 300px;
overflow-y: auto;
font-family: 'Courier New', monospace;
font-size: 0.8rem;
}
.log-item {
margin-bottom: 0.5rem;
display: flex;
gap: 0.5rem;
}
.log-time {
color: var(--text-secondary);
white-space: nowrap;
}
.log-message {
color: var(--text-primary);
}
.log-success {
color: #22c55e;
}
.log-error {
color: #ef4444;
}
/* 预览区域 */
.preview-area {
background: rgba(255, 255, 255, 0.05);
border: 1px solid var(--border-color);
border-radius: 8px;
padding: 2rem;
min-height: 400px;
display: flex;
align-items: center;
justify-content: center;
}
.preview-placeholder {
text-align: center;
color: var(--text-secondary);
}
.preview-placeholder i {
font-size: 4rem;
margin-bottom: 1rem;
color: var(--accent-cyan);
}
/* 步骤指示器 */
.step-indicator {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 2rem;
}
.step-item {
flex: 1;
display: flex;
align-items: center;
}
.step-circle {
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
font-size: 1rem;
}
.step-circle.active {
background: var(--accent-cyan);
color: white;
}
.step-circle.inactive {
background: rgba(148, 163, 184, 0.2);
color: var(--text-secondary);
}
.step-circle.completed {
background: #22c55e;
color: white;
}
.step-line {
flex: 1;
height: 2px;
margin: 0 0.5rem;
}
.step-line.active {
background: var(--accent-cyan);
}
.step-line.completed {
background: #22c55e;
}
.step-line.inactive {
background: rgba(148, 163, 184, 0.2);
}
.step-label {
position: absolute;
top: 50px;
left: 50%;
transform: translateX(-50%);
white-space: nowrap;
font-size: 0.8rem;
color: var(--text-secondary);
}
/* 写字路径可视化 */
.path-canvas {
background: rgba(255, 255, 255, 0.05);
border: 1px solid var(--border-color);
border-radius: 8px;
width: 100%;
height: 400px;
}
/* 滚动条样式 */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: rgba(15, 21, 53, 0.5);
}
::-webkit-scrollbar-thumb {
background: rgba(6, 182, 212, 0.3);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: rgba(6, 182, 212, 0.5);
}
/* 隐藏类 */
.d-none {
display: none !important;
}
/* 动画 */
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.pulse {
animation: pulse 2s infinite;
}
</style>
</head>
<body>
<div class="container-custom">
<div class="mb-4">
<h2 class="page-title">套打输出</h2>
<p class="page-subtitle">履历本物理输出管理 - 新本打印与原本修订</p>
</div>
<!-- 标签页导航 -->
<ul class="nav nav-tabs nav-tabs-custom" id="outputTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="new-print-tab" data-bs-toggle="tab" data-bs-target="#new-print" type="button" role="tab">
<i class="bi bi-printer me-2"></i>新本打印
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="revision-write-tab" data-bs-toggle="tab" data-bs-target="#revision-write" type="button" role="tab">
<i class="bi bi-pen me-2"></i>原本修订
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="batch-output-tab" data-bs-toggle="tab" data-bs-target="#batch-output" type="button" role="tab">
<i class="bi bi-stack me-2"></i>批量输出
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="device-manage-tab" data-bs-toggle="tab" data-bs-target="#device-manage" type="button" role="tab">
<i class="bi bi-gear me-2"></i>设备管理
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="history-tab" data-bs-toggle="tab" data-bs-target="#history" type="button" role="tab">
<i class="bi bi-clock-history me-2"></i>输出历史
</button>
</li>
</ul>
<!-- 标签页内容 -->
<div class="tab-content" id="outputTabContent">
<!-- 新本打印 -->
<div class="tab-pane fade show active" id="new-print" role="tabpanel">
<div class="row g-4">
<!-- 左侧:打印配置 -->
<div class="col-md-8">
<div class="card-custom">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">新本打印配置</h5>
</div>
<div class="card-body-custom">
<!-- 步骤指示器 -->
<div class="step-indicator mb-4">
<div class="step-item">
<div class="step-circle active">1</div>
<div class="step-line active"></div>
</div>
<div class="step-item">
<div class="step-circle inactive">2</div>
<div class="step-line inactive"></div>
</div>
<div class="step-item">
<div class="step-circle inactive">3</div>
<div class="step-line inactive"></div>
</div>
<div class="step-item">
<div class="step-circle inactive">4</div>
</div>
</div>
<!-- 步骤1选择产品 -->
<div id="print-step-1">
<h6 class="fw-semibold mb-3 text-info">步骤1选择产品和模板</h6>
<div class="row g-3">
<div class="col-md-6">
<label class="form-label-custom">产品编号</label>
<select class="form-select-custom">
<option>请选择产品编号</option>
<option>XX-2024-001</option>
<option>XX-2024-002</option>
<option>XX-2024-003</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label-custom">产品型号</label>
<input type="text" class="form-control-custom" value="XX-2024" readonly>
</div>
<div class="col-md-6">
<label class="form-label-custom">交付主机厂</label>
<input type="text" class="form-control-custom" value="132厂" readonly>
</div>
<div class="col-md-6">
<label class="form-label-custom">预印模板</label>
<select class="form-select-custom">
<option>132厂封面模板 V2.0</option>
<option>132厂验收证明模板 V1.5</option>
</select>
</div>
<div class="col-md-12">
<div class="alert alert-info" style="background: rgba(6, 182, 212, 0.1); border: 1px solid rgba(6, 182, 212, 0.3); color: var(--text-primary);">
<i class="bi bi-info-circle me-2"></i>
系统已自动匹配模板共20页需要打印
</div>
</div>
</div>
<div class="mt-4 d-flex justify-content-between">
<button class="btn btn-custom-secondary" disabled>上一步</button>
<button class="btn btn-custom-primary" onclick="nextPrintStep(2)">下一步</button>
</div>
</div>
<!-- 步骤2数据填充预览 -->
<div id="print-step-2" class="d-none">
<h6 class="fw-semibold mb-3 text-info">步骤2数据填充预览</h6>
<div class="preview-area mb-3">
<div class="preview-placeholder">
<i class="bi bi-file-earmark-text"></i>
<p>履历本预览</p>
<p class="small">数据已填充,印章已加载</p>
</div>
</div>
<div class="row g-3">
<div class="col-md-4">
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<small class="text-secondary d-block mb-1">数据字段</small>
<h5 class="mb-0 text-success">156/156</h5>
<small class="text-success">全部填充</small>
</div>
</div>
<div class="col-md-4">
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<small class="text-secondary d-block mb-1">印章数量</small>
<h5 class="mb-0 text-success">12/12</h5>
<small class="text-success">全部填充</small>
</div>
</div>
<div class="col-md-4">
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<small class="text-secondary d-block mb-1">预计页数</small>
<h5 class="mb-0 text-info">20页</h5>
<small class="text-secondary">双面打印</small>
</div>
</div>
</div>
<div class="mt-4 d-flex justify-content-between">
<button class="btn btn-custom-secondary" onclick="nextPrintStep(1)">上一步</button>
<button class="btn btn-custom-primary" onclick="nextPrintStep(3)">下一步</button>
</div>
</div>
<!-- 步骤3打印参数设置 -->
<div id="print-step-3" class="d-none">
<h6 class="fw-semibold mb-3 text-info">步骤3打印参数设置</h6>
<div class="row g-3">
<div class="col-md-6">
<label class="form-label-custom">打印设备</label>
<select class="form-select-custom">
<option>PRINT-001 (智能套打打印机)</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label-custom">纸张类型</label>
<select class="form-select-custom">
<option>A4</option>
<option>A3</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label-custom">打印质量</label>
<select class="form-select-custom">
<option>高质量 (1200DPI)</option>
<option>超高质量 (2400DPI)</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label-custom">打印方式</label>
<select class="form-select-custom">
<option>双面打印(长边翻转)</option>
<option>单面打印</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label-custom">色彩模式</label>
<select class="form-select-custom">
<option>彩色</option>
<option>黑白</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label-custom">打印份数</label>
<input type="number" class="form-control-custom" value="1" min="1" max="10">
</div>
<div class="col-md-12">
<div class="p-3" style="background: rgba(6, 182, 212, 0.1); border: 1px solid rgba(6, 182, 212, 0.3); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center mb-2">
<span class="fw-semibold">套打校准参数</span>
<button class="btn btn-sm btn-custom-secondary">重新校准</button>
</div>
<div class="row g-2">
<div class="col-4">
<small class="text-secondary d-block">X偏移</small>
<span class="text-success">-0.3mm</span>
</div>
<div class="col-4">
<small class="text-secondary d-block">Y偏移</small>
<span class="text-success">+0.1mm</span>
</div>
<div class="col-4">
<small class="text-secondary d-block">旋转角度</small>
<span class="text-success">-0.05°</span>
</div>
</div>
</div>
</div>
</div>
<div class="mt-4 d-flex justify-content-between">
<button class="btn btn-custom-secondary" onclick="nextPrintStep(2)">上一步</button>
<button class="btn btn-custom-primary" onclick="nextPrintStep(4)">下一步</button>
</div>
</div>
<!-- 步骤4确认并打印 -->
<div id="print-step-4" class="d-none">
<h6 class="fw-semibold mb-3 text-info">步骤4确认并打印</h6>
<div class="p-3 mb-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<h6 class="fw-semibold mb-3">打印信息确认</h6>
<div class="row g-2">
<div class="col-md-6">
<small class="text-secondary d-block">产品编号</small>
<span>XX-2024-001</span>
</div>
<div class="col-md-6">
<small class="text-secondary d-block">打印设备</small>
<span>PRINT-001</span>
</div>
<div class="col-md-6">
<small class="text-secondary d-block">打印页数</small>
<span>20页</span>
</div>
<div class="col-md-6">
<small class="text-secondary d-block">打印方式</small>
<span>双面打印</span>
</div>
<div class="col-md-6">
<small class="text-secondary d-block">预计耗时</small>
<span>约8分钟</span>
</div>
<div class="col-md-6">
<small class="text-secondary d-block">打印质量</small>
<span>高质量 (1200DPI)</span>
</div>
</div>
</div>
<div class="alert alert-warning" style="background: rgba(234, 179, 8, 0.1); border: 1px solid rgba(234, 179, 8, 0.3); color: var(--text-primary);">
<i class="bi bi-exclamation-triangle me-2"></i>
请确认已正确放置预印模板到打印机手动送纸槽
</div>
<div class="mt-4 d-flex justify-content-between">
<button class="btn btn-custom-secondary" onclick="nextPrintStep(3)">上一步</button>
<button class="btn btn-success-custom" onclick="startPrint()">
<i class="bi bi-printer me-2"></i>开始打印
</button>
</div>
</div>
</div>
</div>
</div>
<!-- 右侧:设备状态 -->
<div class="col-md-4">
<div class="card-custom">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">打印设备状态</h5>
</div>
<div class="card-body-custom">
<div class="device-card">
<div>
<h6 class="fw-semibold mb-1">智能套打打印机</h6>
<small class="text-secondary">PRINT-001</small>
</div>
<span class="badge-custom badge-success">就绪</span>
</div>
<div class="monitor-panel">
<div class="monitor-title">设备监控</div>
<div class="monitor-item">
<span class="monitor-label">设备状态:</span>
<span class="monitor-value text-success">● 在线</span>
</div>
<div class="monitor-item">
<span class="monitor-label">纸张余量:</span>
<span class="monitor-value">85%</span>
</div>
<div class="monitor-item">
<span class="monitor-label">黑色墨粉:</span>
<span class="monitor-value">60%</span>
</div>
<div class="monitor-item">
<span class="monitor-label">彩色墨粉:</span>
<span class="monitor-value">75%</span>
</div>
<div class="monitor-item">
<span class="monitor-label">硒鼓寿命:</span>
<span class="monitor-value">45%</span>
</div>
<div class="monitor-item">
<span class="monitor-label">打印速度:</span>
<span class="monitor-value">55页/分钟</span>
</div>
<div class="monitor-item">
<span class="monitor-label">今日打印:</span>
<span class="monitor-value">284页</span>
</div>
</div>
<button class="btn btn-custom-secondary w-100 mt-3">
<i class="bi bi-gear me-2"></i>设备设置
</button>
</div>
</div>
<div class="card-custom mt-3">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">打印队列</h5>
</div>
<div class="card-body-custom">
<div class="p-3 mb-2" style="background: rgba(6, 182, 212, 0.1); border: 1px solid rgba(6, 182, 212, 0.3); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center mb-2">
<span class="fw-semibold">XX-2024-005</span>
<span class="badge-custom badge-primary">打印中</span>
</div>
<div class="progress-custom mb-2">
<div class="progress-bar-custom" style="width: 65%"></div>
</div>
<small class="text-secondary">65% 完成 · 已打印 13/20 页</small>
</div>
<div class="p-3 mb-2" style="background: rgba(30, 41, 59, 0.5); border: 1px solid rgba(148, 163, 184, 0.2); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center">
<span class="fw-semibold">XX-2024-006</span>
<span class="badge-custom badge-info">等待中</span>
</div>
<small class="text-secondary">18页 · 双面打印</small>
</div>
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border: 1px solid rgba(148, 163, 184, 0.2); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center">
<span class="fw-semibold">XX-2024-007</span>
<span class="badge-custom badge-info">等待中</span>
</div>
<small class="text-secondary">15页 · 双面打印</small>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 原本修订 -->
<div class="tab-pane fade" id="revision-write" role="tabpanel">
<div class="row g-4">
<!-- 左侧:修订配置 -->
<div class="col-md-8">
<div class="card-custom">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">原本修订配置</h5>
</div>
<div class="card-body-custom">
<!-- 步骤指示器 -->
<div class="step-indicator mb-4">
<div class="step-item">
<div class="step-circle active">1</div>
<div class="step-line active"></div>
</div>
<div class="step-item">
<div class="step-circle inactive">2</div>
<div class="step-line inactive"></div>
</div>
<div class="step-item">
<div class="step-circle inactive">3</div>
<div class="step-line inactive"></div>
</div>
<div class="step-item">
<div class="step-circle inactive">4</div>
</div>
</div>
<!-- 步骤1选择产品和修订数据 -->
<div id="write-step-1">
<h6 class="fw-semibold mb-3 text-info">步骤1选择产品和修订数据</h6>
<div class="row g-3">
<div class="col-md-6">
<label class="form-label-custom">产品编号</label>
<select class="form-select-custom">
<option>请选择产品编号</option>
<option>XX-2023-101</option>
<option>XX-2023-102</option>
<option>XX-2023-103</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label-custom">原本版本</label>
<input type="text" class="form-control-custom" value="V1.0 (新本)" readonly>
</div>
<div class="col-md-6">
<label class="form-label-custom">新版本</label>
<input type="text" class="form-control-custom" value="V1.1 (副本)" readonly>
</div>
<div class="col-md-6">
<label class="form-label-custom">修订日期</label>
<input type="date" class="form-control-custom" value="2026-03-15">
</div>
<div class="col-md-12">
<div class="alert alert-info" style="background: rgba(6, 182, 212, 0.1); border: 1px solid rgba(6, 182, 212, 0.3); color: var(--text-primary);">
<i class="bi bi-info-circle me-2"></i>
系统已完成版本对比共检测到15项修订内容
</div>
</div>
</div>
<div class="mt-4 d-flex justify-content-between">
<button class="btn btn-custom-secondary" disabled>上一步</button>
<button class="btn btn-custom-primary" onclick="nextWriteStep(2)">下一步</button>
</div>
</div>
<!-- 步骤2修订内容确认 -->
<div id="write-step-2" class="d-none">
<h6 class="fw-semibold mb-3 text-info">步骤2修订内容确认</h6>
<div class="table-responsive mb-3">
<table class="table table-custom">
<thead>
<tr>
<th>页码</th>
<th>页面类型</th>
<th>修订类型</th>
<th>修订内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>封面</td>
<td><span class="badge-custom badge-warning">修改</span></td>
<td>修订次数: 0 → 1</td>
</tr>
<tr>
<td>8</td>
<td>修理记录</td>
<td><span class="badge-custom badge-success">新增</span></td>
<td>修理日期: 2026-03-10</td>
</tr>
<tr>
<td>8</td>
<td>修理记录</td>
<td><span class="badge-custom badge-success">新增</span></td>
<td>修理内容: 更换电源模块</td>
</tr>
<tr>
<td>9</td>
<td>换件记录</td>
<td><span class="badge-custom badge-success">新增</span></td>
<td>换件日期: 2026-03-10</td>
</tr>
<tr>
<td>9</td>
<td>换件记录</td>
<td><span class="badge-custom badge-success">新增</span></td>
<td>换件名称: 电源模块</td>
</tr>
</tbody>
</table>
</div>
<div class="row g-3">
<div class="col-md-4">
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<small class="text-secondary d-block mb-1">修订项总数</small>
<h5 class="mb-0 text-info">15项</h5>
</div>
</div>
<div class="col-md-4">
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<small class="text-secondary d-block mb-1">涉及页面</small>
<h5 class="mb-0 text-info">5页</h5>
</div>
</div>
<div class="col-md-4">
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<small class="text-secondary d-block mb-1">预计耗时</small>
<h5 class="mb-0 text-info">23分钟</h5>
</div>
</div>
</div>
<div class="mt-4 d-flex justify-content-between">
<button class="btn btn-custom-secondary" onclick="nextWriteStep(1)">上一步</button>
<button class="btn btn-custom-primary" onclick="nextWriteStep(3)">下一步</button>
</div>
</div>
<!-- 步骤3写字参数设置 -->
<div id="write-step-3" class="d-none">
<h6 class="fw-semibold mb-3 text-info">步骤3写字参数设置</h6>
<div class="row g-3">
<div class="col-md-6">
<label class="form-label-custom">写字设备</label>
<select class="form-select-custom">
<option>WRITE-001 (智能写字机器人)</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label-custom">笔型</label>
<select class="form-select-custom">
<option>中性笔 0.5mm</option>
<option>中性笔 0.38mm</option>
<option>中性笔 0.7mm</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label-custom">笔芯颜色</label>
<select class="form-select-custom">
<option>黑色</option>
<option>蓝色</option>
<option>红色</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label-custom">笔压 (N)</label>
<input type="number" class="form-control-custom" value="1.5" min="1.0" max="2.5" step="0.1">
</div>
<div class="col-md-6">
<label class="form-label-custom">写字速度 (mm/s)</label>
<input type="number" class="form-control-custom" value="50" min="20" max="100">
</div>
<div class="col-md-6">
<label class="form-label-custom">移动速度 (mm/s)</label>
<input type="number" class="form-control-custom" value="100" min="50" max="200">
</div>
<div class="col-md-12">
<div class="p-3" style="background: rgba(6, 182, 212, 0.1); border: 1px solid rgba(6, 182, 212, 0.3); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center mb-2">
<span class="fw-semibold">坐标校准参数</span>
<button class="btn btn-sm btn-custom-secondary">重新校准</button>
</div>
<div class="row g-2">
<div class="col-4">
<small class="text-secondary d-block">X精度</small>
<span class="text-success">±0.09mm</span>
</div>
<div class="col-4">
<small class="text-secondary d-block">Y精度</small>
<span class="text-success">±0.10mm</span>
</div>
<div class="col-4">
<small class="text-secondary d-block">Z精度</small>
<span class="text-success">±0.05mm</span>
</div>
</div>
</div>
</div>
</div>
<div class="mt-4 d-flex justify-content-between">
<button class="btn btn-custom-secondary" onclick="nextWriteStep(2)">上一步</button>
<button class="btn btn-custom-primary" onclick="nextWriteStep(4)">下一步</button>
</div>
</div>
<!-- 步骤4确认并开始写字 -->
<div id="write-step-4" class="d-none">
<h6 class="fw-semibold mb-3 text-info">步骤4确认并开始写字</h6>
<div class="p-3 mb-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<h6 class="fw-semibold mb-3">修订信息确认</h6>
<div class="row g-2">
<div class="col-md-6">
<small class="text-secondary d-block">产品编号</small>
<span>XX-2023-101</span>
</div>
<div class="col-md-6">
<small class="text-secondary d-block">写字设备</small>
<span>WRITE-001</span>
</div>
<div class="col-md-6">
<small class="text-secondary d-block">修订项数</small>
<span>15项</span>
</div>
<div class="col-md-6">
<small class="text-secondary d-block">涉及页面</small>
<span>5页</span>
</div>
<div class="col-md-6">
<small class="text-secondary d-block">预计耗时</small>
<span>约23分钟</span>
</div>
<div class="col-md-6">
<small class="text-secondary d-block">笔型</small>
<span>黑色中性笔 0.5mm</span>
</div>
</div>
</div>
<div class="alert alert-warning" style="background: rgba(234, 179, 8, 0.1); border: 1px solid rgba(234, 179, 8, 0.3); color: var(--text-primary);">
<i class="bi bi-exclamation-triangle me-2"></i>
请确认已将原履历本正确放置到写字机器人托盘并打开到第1页
</div>
<div class="mt-4 d-flex justify-content-between">
<button class="btn btn-custom-secondary" onclick="nextWriteStep(3)">上一步</button>
<button class="btn btn-success-custom" onclick="startWrite()">
<i class="bi bi-pen me-2"></i>开始写字
</button>
</div>
</div>
</div>
</div>
<!-- 写字路径可视化 -->
<div class="card-custom mt-3">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">写字路径预览</h5>
</div>
<div class="card-body-custom">
<canvas class="path-canvas" id="pathCanvas"></canvas>
<div class="mt-3">
<small class="text-secondary">
<i class="bi bi-info-circle me-1"></i>
蓝色线条表示笔头移动路径,红色点表示写字位置
</small>
</div>
</div>
</div>
</div>
<!-- 右侧:设备状态 -->
<div class="col-md-4">
<div class="card-custom">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">写字设备状态</h5>
</div>
<div class="card-body-custom">
<div class="device-card">
<div>
<h6 class="fw-semibold mb-1">智能写字机器人</h6>
<small class="text-secondary">WRITE-001</small>
</div>
<span class="badge-custom badge-success">就绪</span>
</div>
<div class="monitor-panel">
<div class="monitor-title">设备监控</div>
<div class="monitor-item">
<span class="monitor-label">设备状态:</span>
<span class="monitor-value text-success">● 在线</span>
</div>
<div class="monitor-item">
<span class="monitor-label">笔芯状态:</span>
<span class="monitor-value text-success">● 正常</span>
</div>
<div class="monitor-item">
<span class="monitor-label">笔芯余量:</span>
<span class="monitor-value">50%</span>
</div>
<div class="monitor-item">
<span class="monitor-label">笔压:</span>
<span class="monitor-value">1.5N</span>
</div>
<div class="monitor-item">
<span class="monitor-label">定位精度:</span>
<span class="monitor-value text-success">±0.1mm</span>
</div>
<div class="monitor-item">
<span class="monitor-label">翻页状态:</span>
<span class="monitor-value text-success">● 正常</span>
</div>
<div class="monitor-item">
<span class="monitor-label">今日修订:</span>
<span class="monitor-value">7份</span>
</div>
</div>
<button class="btn btn-custom-secondary w-100 mt-3">
<i class="bi bi-gear me-2"></i>设备设置
</button>
</div>
</div>
<div class="card-custom mt-3">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">写字队列</h5>
</div>
<div class="card-body-custom">
<div class="p-3 mb-2" style="background: rgba(6, 182, 212, 0.1); border: 1px solid rgba(6, 182, 212, 0.3); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center mb-2">
<span class="fw-semibold">XX-2023-105</span>
<span class="badge-custom badge-primary">写字中</span>
</div>
<div class="progress-custom mb-2">
<div class="progress-bar-custom" style="width: 40%"></div>
</div>
<small class="text-secondary">40% 完成 · 已完成 6/15 项修订</small>
</div>
<div class="p-3 mb-2" style="background: rgba(30, 41, 59, 0.5); border: 1px solid rgba(148, 163, 184, 0.2); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center">
<span class="fw-semibold">XX-2023-106</span>
<span class="badge-custom badge-info">等待中</span>
</div>
<small class="text-secondary">12项修订 · 预计20分钟</small>
</div>
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border: 1px solid rgba(148, 163, 184, 0.2); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center">
<span class="fw-semibold">XX-2023-107</span>
<span class="badge-custom badge-info">等待中</span>
</div>
<small class="text-secondary">18项修订 · 预计28分钟</small>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 批量输出 -->
<div class="tab-pane fade" id="batch-output" role="tabpanel">
<div class="row g-4">
<div class="col-md-8">
<div class="card-custom">
<div class="card-header-custom">
<div class="d-flex justify-content-between align-items-center">
<h5 class="mb-0 fw-bold">批量输出配置</h5>
<button class="btn btn-custom-primary">
<i class="bi bi-plus-lg me-2"></i>创建批量任务
</button>
</div>
</div>
<div class="card-body-custom">
<div class="row g-3 mb-4">
<div class="col-md-6">
<label class="form-label-custom">输出类型</label>
<select class="form-select-custom">
<option>新本打印</option>
<option>原本修订</option>
<option>混合输出</option>
</select>
</div>
<div class="col-md-6"> <label class="form-label-custom">产品范围</label> <select class="form-select-custom"> <option>按产品列表</option> <option>按日期范围</option> <option>按主机厂</option> </select> </div> <div class="col-md-12"> <label class="form-label-custom">选择产品</label> <textarea class="form-control-custom" rows="4" placeholder="请输入产品编号,每行一个&#10;例如:&#10;XX-2024-001&#10;XX-2024-002&#10;XX-2024-003"></textarea> </div> </div>
<div class="table-responsive">
<table class="table table-custom">
<thead>
<tr>
<th><input type="checkbox" class="form-check-input"></th>
<th>产品编号</th>
<th>输出类型</th>
<th>页数/修订项</th>
<th>预计耗时</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" class="form-check-input" checked></td>
<td>XX-2024-001</td>
<td><span class="badge-custom badge-info">新本打印</span></td>
<td>20页</td>
<td>8分钟</td>
<td><span class="badge-custom badge-success">就绪</span></td>
</tr>
<tr>
<td><input type="checkbox" class="form-check-input" checked></td>
<td>XX-2024-002</td>
<td><span class="badge-custom badge-info">新本打印</span></td>
<td>18页</td>
<td>7分钟</td>
<td><span class="badge-custom badge-success">就绪</span></td>
</tr>
<tr>
<td><input type="checkbox" class="form-check-input" checked></td>
<td>XX-2023-101</td>
<td><span class="badge-custom badge-warning">原本修订</span></td>
<td>15项</td>
<td>23分钟</td>
<td><span class="badge-custom badge-success">就绪</span></td>
</tr>
<tr>
<td><input type="checkbox" class="form-check-input" checked></td>
<td>XX-2024-003</td>
<td><span class="badge-custom badge-info">新本打印</span></td>
<td>22页</td>
<td>9分钟</td>
<td><span class="badge-custom badge-success">就绪</span></td>
</tr>
<tr>
<td><input type="checkbox" class="form-check-input" checked></td>
<td>XX-2023-102</td>
<td><span class="badge-custom badge-warning">原本修订</span></td>
<td>12项</td>
<td>20分钟</td>
<td><span class="badge-custom badge-success">就绪</span></td>
</tr>
</tbody>
</table>
</div>
<div class="mt-4 d-flex justify-content-between align-items-center">
<div>
<span class="text-secondary">已选择 5 项</span>
<span class="text-secondary ms-3">预计总耗时67分钟</span>
</div>
<button class="btn btn-success-custom" onclick="startBatchOutput()">
<i class="bi bi-play-fill me-2"></i>开始批量输出
</button>
</div>
</div>
</div>
<!-- 批量输出进度 -->
<div class="card-custom mt-3" id="batchProgress" style="display: none;">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">批量输出进度</h5>
</div>
<div class="card-body-custom">
<div class="mb-3">
<div class="d-flex justify-content-between mb-2">
<span class="fw-semibold">总进度</span>
<span class="text-info">60% (3/5 完成)</span>
</div>
<div class="progress-custom" style="height: 12px;">
<div class="progress-bar-custom" style="width: 60%"></div>
</div>
</div>
<div class="row g-3">
<div class="col-md-4">
<div class="p-3" style="background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 8px;">
<small class="text-secondary d-block mb-1">已完成</small>
<h5 class="mb-0 text-success">3份</h5>
</div>
</div>
<div class="col-md-4">
<div class="p-3" style="background: rgba(6, 182, 212, 0.1); border: 1px solid rgba(6, 182, 212, 0.3); border-radius: 8px;">
<small class="text-secondary d-block mb-1">进行中</small>
<h5 class="mb-0 text-info">1份</h5>
</div>
</div>
<div class="col-md-4">
<div class="p-3" style="background: rgba(148, 163, 184, 0.1); border: 1px solid rgba(148, 163, 184, 0.3); border-radius: 8px;">
<small class="text-secondary d-block mb-1">待执行</small>
<h5 class="mb-0 text-secondary">1份</h5>
</div>
</div>
</div>
<div class="mt-3">
<h6 class="fw-semibold mb-2">任务详情</h6>
<div class="p-3 mb-2" style="background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center">
<div>
<span class="fw-semibold">XX-2024-001</span>
<small class="text-secondary ms-2">新本打印</small>
</div>
<span class="badge-custom badge-success">✓ 完成</span>
</div>
<small class="text-secondary">耗时8分钟</small>
</div>
<div class="p-3 mb-2" style="background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center">
<div>
<span class="fw-semibold">XX-2024-002</span>
<small class="text-secondary ms-2">新本打印</small>
</div>
<span class="badge-custom badge-success">✓ 完成</span>
</div>
<small class="text-secondary">耗时7分钟</small>
</div>
<div class="p-3 mb-2" style="background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center">
<div>
<span class="fw-semibold">XX-2023-101</span>
<small class="text-secondary ms-2">原本修订</small>
</div>
<span class="badge-custom badge-success">✓ 完成</span>
</div>
<small class="text-secondary">耗时23分钟</small>
</div>
<div class="p-3 mb-2" style="background: rgba(6, 182, 212, 0.1); border: 1px solid rgba(6, 182, 212, 0.3); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center mb-2">
<div>
<span class="fw-semibold">XX-2024-003</span>
<small class="text-secondary ms-2">新本打印</small>
</div>
<span class="badge-custom badge-primary">进行中</span>
</div>
<div class="progress-custom mb-2">
<div class="progress-bar-custom" style="width: 45%"></div>
</div>
<small class="text-secondary">45% 完成 · 已打印 10/22 页</small>
</div>
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border: 1px solid rgba(148, 163, 184, 0.2); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center">
<div>
<span class="fw-semibold">XX-2023-102</span>
<small class="text-secondary ms-2">原本修订</small>
</div>
<span class="badge-custom badge-info">等待中</span>
</div>
<small class="text-secondary">12项修订 · 预计20分钟</small>
</div>
</div>
<div class="mt-3 d-flex justify-content-end gap-2">
<button class="btn btn-custom-secondary">
<i class="bi bi-pause-fill me-2"></i>暂停
</button>
<button class="btn btn-danger-custom">
<i class="bi bi-x-lg me-2"></i>取消
</button>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card-custom">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">批量统计</h5>
</div>
<div class="card-body-custom">
<div class="row g-3">
<div class="col-12">
<div class="stat-card cyan">
<div class="d-flex justify-content-between align-items-start">
<div>
<p class="stat-label">今日批量任务</p>
<p class="stat-value">8个</p>
</div>
<div class="stat-icon cyan">
<i class="bi bi-stack"></i>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="stat-card green">
<div class="d-flex justify-content-between align-items-start">
<div>
<p class="stat-label">今日输出总数</p>
<p class="stat-value">156份</p>
</div>
<div class="stat-icon green">
<i class="bi bi-check-circle"></i>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="stat-card blue">
<div class="d-flex justify-content-between align-items-start">
<div>
<p class="stat-label">平均成功率</p>
<p class="stat-value">97.4%</p>
</div>
<div class="stat-icon blue">
<i class="bi bi-graph-up"></i>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card-custom mt-3">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">最近批量任务</h5>
</div>
<div class="card-body-custom">
<div class="p-3 mb-2" style="background: rgba(30, 41, 59, 0.5); border: 1px solid rgba(148, 163, 184, 0.2); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center mb-2">
<span class="fw-semibold">BATCH-20260112-003</span>
<span class="badge-custom badge-success">完成</span>
</div>
<small class="text-secondary d-block">20份 · 新本打印</small>
<small class="text-secondary">成功率100%</small>
</div>
<div class="p-3 mb-2" style="background: rgba(30, 41, 59, 0.5); border: 1px solid rgba(148, 163, 184, 0.2); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center mb-2">
<span class="fw-semibold">BATCH-20260112-002</span>
<span class="badge-custom badge-success">完成</span>
</div>
<small class="text-secondary d-block">15份 · 混合输出</small>
<small class="text-secondary">成功率93.3%</small>
</div>
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border: 1px solid rgba(148, 163, 184, 0.2); border-radius: 8px;">
<div class="d-flex justify-content-between align-items-center mb-2">
<span class="fw-semibold">BATCH-20260112-001</span>
<span class="badge-custom badge-success">完成</span>
</div>
<small class="text-secondary d-block">10份 · 原本修订</small>
<small class="text-secondary">成功率100%</small>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 设备管理 -->
<div class="tab-pane fade" id="device-manage" role="tabpanel">
<div class="row g-4">
<div class="col-md-6">
<div class="card-custom">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">
<i class="bi bi-printer me-2"></i>打印机管理
</h5>
</div>
<div class="card-body-custom">
<div class="device-card mb-3">
<div>
<h6 class="fw-semibold mb-1">智能套打打印机</h6>
<small class="text-secondary">PRINT-001 · HP LaserJet M607dn</small>
</div>
<span class="badge-custom badge-success">在线</span>
</div>
<div class="monitor-panel mb-3">
<div class="monitor-title">设备信息</div>
<div class="monitor-item">
<span class="monitor-label">购置日期:</span>
<span class="monitor-value">2025-06-01</span>
</div>
<div class="monitor-item">
<span class="monitor-label">使用天数:</span>
<span class="monitor-value">212天</span>
</div>
<div class="monitor-item">
<span class="monitor-label">累计打印:</span>
<span class="monitor-value">125,680页</span>
</div>
<div class="monitor-item">
<span class="monitor-label">故障次数:</span>
<span class="monitor-value">3次</span>
</div>
<div class="monitor-item">
<span class="monitor-label">故障率:</span>
<span class="monitor-value text-success">0.002%</span>
</div>
</div>
<div class="mb-3">
<h6 class="fw-semibold mb-2">耗材状态</h6>
<div class="mb-2">
<div class="d-flex justify-content-between mb-1">
<small class="text-secondary">黑色墨粉</small>
<small class="text-info">60%</small>
</div>
<div class="progress-custom">
<div class="progress-bar-custom" style="width: 60%"></div>
</div>
<small class="text-secondary">剩余约6,000页</small>
</div>
<div class="mb-2">
<div class="d-flex justify-content-between mb-1">
<small class="text-secondary">彩色墨粉</small>
<small class="text-success">75%</small>
</div>
<div class="progress-custom">
<div class="progress-bar-custom" style="width: 75%"></div>
</div>
<small class="text-secondary">剩余约7,500页</small>
</div>
<div class="mb-2">
<div class="d-flex justify-content-between mb-1">
<small class="text-secondary">硒鼓寿命</small>
<small class="text-warning">45%</small>
</div>
<div class="progress-custom">
<div class="progress-bar-custom" style="width: 45%"></div>
</div>
<small class="text-secondary">剩余约45,000页</small>
</div>
</div>
<div class="mb-3">
<h6 class="fw-semibold mb-2">维护记录</h6>
<div class="p-3 mb-2" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<div class="d-flex justify-content-between mb-1">
<span class="fw-semibold">定期维护</span>
<small class="text-secondary">2025-12-15</small>
</div>
<small class="text-secondary">清洁、校准、更换零件</small>
</div>
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<div class="d-flex justify-content-between mb-1">
<span class="fw-semibold">下次维护</span>
<small class="text-warning">2026-03-15</small>
</div>
<small class="text-secondary">定期维护3个月周期</small>
</div>
</div>
<div class="d-flex gap-2">
<button class="btn btn-custom-primary flex-grow-1">
<i class="bi bi-tools me-2"></i>执行校准
</button>
<button class="btn btn-custom-secondary flex-grow-1">
<i class="bi bi-gear me-2"></i>设备设置
</button>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card-custom">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">
<i class="bi bi-pen me-2"></i>写字机器人管理
</h5>
</div>
<div class="card-body-custom">
<div class="device-card mb-3">
<div>
<h6 class="fw-semibold mb-1">智能写字机器人</h6>
<small class="text-secondary">WRITE-001 · AutoWriter Pro X1</small>
</div>
<span class="badge-custom badge-success">在线</span>
</div>
<div class="monitor-panel mb-3">
<div class="monitor-title">设备信息</div>
<div class="monitor-item">
<span class="monitor-label">购置日期:</span>
<span class="monitor-value">2025-07-01</span>
</div>
<div class="monitor-item">
<span class="monitor-label">使用天数:</span>
<span class="monitor-value">184天</span>
</div>
<div class="monitor-item">
<span class="monitor-label">累计修订:</span>
<span class="monitor-value">2,156份</span>
</div>
<div class="monitor-item">
<span class="monitor-label">故障次数:</span>
<span class="monitor-value">15次</span>
</div>
<div class="monitor-item">
<span class="monitor-label">翻页成功率:</span>
<span class="monitor-value text-success">96.8%</span>
</div>
</div>
<div class="mb-3">
<h6 class="fw-semibold mb-2">运动系统状态</h6>
<div class="row g-2">
<div class="col-6">
<div class="p-2" style="background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 6px;">
<small class="text-secondary d-block">X轴</small>
<span class="text-success">● 正常</span>
<small class="text-secondary d-block">±0.10mm</small>
</div>
</div>
<div class="col-6">
<div class="p-2" style="background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 6px;">
<small class="text-secondary d-block">Y轴</small>
<span class="text-success">● 正常</span>
<small class="text-secondary d-block">±0.11mm</small>
</div>
</div>
<div class="col-6">
<div class="p-2" style="background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 6px;">
<small class="text-secondary d-block">Z轴</small>
<span class="text-success">● 正常</span>
<small class="text-secondary d-block">±0.05mm</small>
</div>
</div>
<div class="col-6">
<div class="p-2" style="background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 6px;">
<small class="text-secondary d-block">翻页机构</small>
<span class="text-success">● 正常</span>
<small class="text-secondary d-block">96.8%</small>
</div>
</div>
</div>
</div>
<div class="mb-3">
<h6 class="fw-semibold mb-2">耗材状态</h6>
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<div class="d-flex justify-content-between mb-2">
<span>当前笔芯</span>
<span class="text-info">黑色中性笔 0.5mm</span>
</div>
<div class="d-flex justify-content-between mb-1">
<small class="text-secondary">笔芯余量</small>
<small class="text-warning">50%</small>
</div>
<div class="progress-custom mb-2">
<div class="progress-bar-custom" style="width: 50%"></div>
</div>
<small class="text-secondary">累计更换96次</small>
</div>
</div>
<div class="mb-3">
<h6 class="fw-semibold mb-2">维护记录</h6>
<div class="p-3 mb-2" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<div class="d-flex justify-content-between mb-1">
<span class="fw-semibold">定期维护</span>
<small class="text-secondary">2025-12-15</small>
</div>
<small class="text-secondary">清洁、润滑、更换零件</small>
</div>
<div class="p-3" style="background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<div class="d-flex justify-content-between mb-1">
<span class="fw-semibold">下次维护</span>
<small class="text-warning">2026-02-15</small>
</div>
<small class="text-secondary">定期维护2个月周期</small>
</div>
</div>
<div class="d-flex gap-2">
<button class="btn btn-custom-primary flex-grow-1">
<i class="bi bi-tools me-2"></i>执行校准
</button>
<button class="btn btn-custom-secondary flex-grow-1">
<i class="bi bi-gear me-2"></i>设备设置
</button>
</div>
</div>
</div>
</div>
</div>
<!-- 设备性能统计 -->
<div class="card-custom mt-4">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">设备性能统计</h5>
</div>
<div class="card-body-custom">
<div class="row g-4">
<div class="col-md-6">
<h6 class="fw-semibold mb-3">打印机性能趋势</h6>
<div class="d-flex align-items-center justify-content-center" style="height: 200px; background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<div class="text-center">
<i class="bi bi-bar-chart" style="font-size: 3rem; color: var(--accent-cyan);"></i>
<p class="text-secondary mt-2">性能趋势图表</p>
</div>
</div>
</div>
<div class="col-md-6">
<h6 class="fw-semibold mb-3">写字机器人性能趋势</h6>
<div class="d-flex align-items-center justify-content-center" style="height: 200px; background: rgba(30, 41, 59, 0.5); border-radius: 8px;">
<div class="text-center">
<i class="bi bi-graph-up" style="font-size: 3rem; color: var(--accent-cyan);"></i>
<p class="text-secondary mt-2">性能趋势图表</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 输出历史 -->
<div class="tab-pane fade" id="history" role="tabpanel">
<div class="card-custom mb-4">
<div class="card-header-custom">
<h5 class="mb-0 fw-bold">输出历史查询</h5>
</div>
<div class="card-body-custom">
<div class="row g-3">
<div class="col-md-3">
<label class="form-label-custom">产品编号</label>
<input type="text" class="form-control-custom" placeholder="请输入产品编号">
</div>
<div class="col-md-3">
<label class="form-label-custom">输出类型</label>
<select class="form-select-custom">
<option>全部</option>
<option>新本打印</option>
<option>原本修订</option>
</select>
</div>
<div class="col-md-3">
<label class="form-label-custom">开始日期</label>
<input type="date" class="form-control-custom">
</div>
<div class="col-md-3">
<label class="form-label-custom">结束日期</label>
<input type="date" class="form-control-custom">
</div>
<div class="col-md-12 d-flex gap-2">
<button class="btn btn-custom-primary">
<i class="bi bi-search me-2"></i>查询
</button>
<button class="btn btn-custom-secondary">
<i class="bi bi-arrow-clockwise me-2"></i>重置
</button>
<button class="btn btn-custom-secondary ms-auto">
<i class="bi bi-download me-2"></i>导出报表
</button>
</div>
</div>
</div>
</div>
<!-- 统计卡片 -->
<div class="row g-3 mb-4">
<div class="col-md-3">
<div class="stat-card cyan">
<div class="d-flex justify-content-between align-items-start">
<div>
<p class="stat-label">本月输出总数</p>
<p class="stat-value">678份</p>
</div>
<div class="stat-icon cyan">
<i class="bi bi-file-text"></i>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="stat-card blue">
<div class="d-flex justify-content-between align-items-start">
<div>
<p class="stat-label">新本打印</p>
<p class="stat-value">486份</p>
</div>
<div class="stat-icon blue">
<i class="bi bi-printer"></i>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="stat-card yellow">
<div class="d-flex justify-content-between align-items-start">
<div>
<p class="stat-label">原本修订</p>
<p class="stat-value">192份</p>
</div>
<div class="stat-icon yellow">
<i class="bi bi-pen"></i>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="stat-card green">
<div class="d-flex justify-content-between align-items-start">
<div>
<p class="stat-label">成功率</p>
<p class="stat-value">97.8%</p>
</div>
<div class="stat-icon green">
<i class="bi bi-check-circle"></i>
</div>
</div>
</div>
</div>
</div>
<!-- 历史记录表格 -->
<div class="card-custom">
<div class="card-body-custom">
<div class="table-responsive">
<table class="table table-custom">
<thead>
<tr>
<th>产品编号</th>
<th>输出类型</th>
<th>输出时间</th>
<th>耗时</th>
<th>使用设备</th>
<th>操作人员</th>
<th>状态</th>
<th>质检结果</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>XX-2024-010</td>
<td><span class="badge-custom badge-info">新本打印</span></td>
<td>2026-01-12 14:30:00</td>
<td>8分钟</td>
<td>PRINT-001</td>
<td>张三</td>
<td><span class="badge-custom badge-success">成功</span></td>
<td><span class="badge-custom badge-success">合格</span></td>
<td>
<a href="#" class="text-info text-decoration-none">查看详情</a>
</td>
</tr>
<tr>
<td>XX-2023-105</td>
<td><span class="badge-custom badge-warning">原本修订</span></td>
<td>2026-01-12 13:20:00</td>
<td>23分钟</td>
<td>WRITE-001</td>
<td>李四</td>
<td><span class="badge-custom badge-success">成功</span></td>
<td><span class="badge-custom badge-success">合格</span></td>
<td>
<a href="#" class="text-info text-decoration-none">查看详情</a>
</td>
</tr>
<tr>
<td>XX-2024-009</td>
<td><span class="badge-custom badge-info">新本打印</span></td>
<td>2026-01-12 12:10:00</td>
<td>9分钟</td>
<td>PRINT-001</td>
<td>张三</td>
<td><span class="badge-custom badge-success">成功</span></td>
<td><span class="badge-custom badge-success">合格</span></td>
<td>
<a href="#" class="text-info text-decoration-none">查看详情</a>
</td>
</tr>
<tr>
<td>XX-2024-008</td>
<td><span class="badge-custom badge-info">新本打印</span></td>
<td>2026-01-12 11:00:00</td>
<td>失败</td>
<td>PRINT-001</td>
<td>张三</td>
<td><span class="badge-custom badge-danger">失败</span></td>
<td>-</td>
<td>
<a href="#" class="text-danger text-decoration-none">重新打印</a>
</td>
</tr>
<tr>
<td>XX-2023-104</td>
<td><span class="badge-custom badge-warning">原本修订</span></td>
<td>2026-01-12 10:30:00</td>
<td>20分钟</td>
<td>WRITE-001</td>
<td>李四</td>
<td><span class="badge-custom badge-success">成功</span></td>
<td><span class="badge-custom badge-success">合格</span></td>
<td>
<a href="#" class="text-info text-decoration-none">查看详情</a>
</td>
</tr>
</tbody>
</table>
</div>
<nav class="mt-3">
<ul class="pagination justify-content-center">
<li class="page-item disabled">
<a class="page-link" href="#" style="background: rgba(30, 41, 59, 0.5); border-color: var(--border-color); color: var(--text-secondary);">上一页</a>
</li>
<li class="page-item active">
<a class="page-link" href="#" style="background: var(--accent-cyan); border-color: var(--accent-cyan);">1</a>
</li>
<li class="page-item">
<a class="page-link" href="#" style="background: rgba(30, 41, 59, 0.5); border-color: var(--border-color); color: var(--text-primary);">2</a>
</li>
<li class="page-item">
<a class="page-link" href="#" style="background: rgba(30, 41, 59, 0.5); border-color: var(--border-color); color: var(--text-primary);">3</a>
</li>
<li class="page-item">
<a class="page-link" href="#" style="background: rgba(30, 41, 59, 0.5); border-color: var(--border-color); color: var(--text-primary);">下一页</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
// 新本打印步骤切换
function nextPrintStep(step) {
// 隐藏所有步骤
for (let i = 1; i <= 4; i++) {
document.getElementById('print-step-' + i).classList.add('d-none');
}
// 显示当前步骤
document.getElementById('print-step-' + step).classList.remove('d-none');
// 更新步骤指示器
updateStepIndicator('print', step);
}
// 原本修订步骤切换
function nextWriteStep(step) {
// 隐藏所有步骤
for (let i = 1; i <= 4; i++) {
document.getElementById('write-step-' + i).classList.add('d-none');
}
// 显示当前步骤
document.getElementById('write-step-' + step).classList.remove('d-none');
// 更新步骤指示器
updateStepIndicator('write', step);
}
// 更新步骤指示器
function updateStepIndicator(type, currentStep) {
const container = type === 'print' ?
document.querySelector('#print-step-1').closest('.card-body-custom') :
document.querySelector('#write-step-1').closest('.card-body-custom');
const circles = container.querySelectorAll('.step-circle');
const lines = container.querySelectorAll('.step-line');
circles.forEach((circle, index) => {
const stepNum = index + 1;
circle.classList.remove('active', 'inactive', 'completed');
if (stepNum < currentStep) {
circle.classList.add('completed');
} else if (stepNum === currentStep) {
circle.classList.add('active');
} else {
circle.classList.add('inactive');
}
});
lines.forEach((line, index) => {
const stepNum = index + 1;
line.classList.remove('active', 'inactive', 'completed');
if (stepNum < currentStep) {
line.classList.add('completed');
} else if (stepNum === currentStep) {
line.classList.add('active');
} else {
line.classList.add('inactive');
}
});
}
// 开始打印
function startPrint() {
alert('打印任务已提交!\n\n产品编号XX-2024-001\n打印设备PRINT-001\n预计耗时8分钟\n\n请在打印机手动送纸槽放入预印模板');
}
// 开始写字
function startWrite() {
alert('写字任务已提交!\n\n产品编号XX-2023-101\n写字设备WRITE-001\n修订项数15项\n预计耗时23分钟\n\n请确认原履历本已正确放置');
}
// 开始批量输出
function startBatchOutput() {
document.getElementById('batchProgress').style.display = 'block';
alert('批量输出任务已启动!\n\n总数5份\n新本打印3份\n原本修订2份\n预计总耗时67分钟');
}
// 绘制写字路径示例
function drawPathCanvas() {
const canvas = document.getElementById('pathCanvas');
if (!canvas) return;
const ctx = canvas.getContext('2d');
canvas.width = canvas.offsetWidth;
canvas.height = canvas.offsetHeight;
// 清空画布
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 绘制背景网格
ctx.strokeStyle = 'rgba(148, 163, 184, 0.1)';
ctx.lineWidth = 1;
for (let i = 0; i < canvas.width; i += 20) {
ctx.beginPath();
ctx.moveTo(i, 0);
ctx.lineTo(i, canvas.height);
ctx.stroke();
}
for (let i = 0; i < canvas.height; i += 20) {
ctx.beginPath();
ctx.moveTo(0, i);
ctx.lineTo(canvas.width, i);
ctx.stroke();
}
// 绘制移动路径(蓝色)
ctx.strokeStyle = '#3b82f6';
ctx.lineWidth = 2;
ctx.setLineDash([5, 5]);
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(150, 50);
ctx.lineTo(150, 100);
ctx.lineTo(250, 100);
ctx.lineTo(250, 150);
ctx.stroke();
// 绘制写字位置(红色点)
ctx.fillStyle = '#ef4444';
ctx.setLineDash([]);
const points = [
[150, 50],
[150, 100],
[250, 100],
[250, 150]
];
points.forEach(point => {
ctx.beginPath();
ctx.arc(point[0], point[1], 5, 0, 2 * Math.PI);
ctx.fill();
});
// 添加标注
ctx.fillStyle = '#06b6d4';
ctx.font = '12px Arial';
ctx.fillText('起点', 30, 45);
ctx.fillText('写字点1', 155, 45);
ctx.fillText('写字点2', 155, 95);
ctx.fillText('写字点3', 255, 95);
ctx.fillText('写字点4', 255, 145);
}
// 页面加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
// 绘制写字路径
drawPathCanvas();
// 监听标签页切换重新绘制canvas
document.getElementById('revision-write-tab').addEventListener('shown.bs.tab', function() {
setTimeout(drawPathCanvas, 100);
});
});
</script>
</body> </html>