93 lines
4.0 KiB
HTML
93 lines
4.0 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>点名系统 - 用户点名</title>
|
|
<link rel="stylesheet" href="styles.css">
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<header>
|
|
<h1>点名系统</h1>
|
|
<p id="modeIndicator" style="font-size: 12px; margin-top: 5px; opacity: 0.8;"></p>
|
|
</header>
|
|
|
|
<main>
|
|
<!-- 输入编号区域 -->
|
|
<section id="inputSection" class="section">
|
|
<h2>进入点名</h2>
|
|
<form id="enterForm">
|
|
<div class="form-group">
|
|
<label for="codeInput">请输入编号:</label>
|
|
<input type="text" id="codeInput" placeholder="6-12位数字" required pattern="\d{6,12}">
|
|
</div>
|
|
<button type="submit" class="btn btn-primary">进入点名</button>
|
|
</form>
|
|
<div class="divider">
|
|
<span>或</span>
|
|
</div>
|
|
<div class="qr-scanner">
|
|
<button id="scanQRBtn" class="btn btn-secondary">扫描二维码</button>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- 点名区域 -->
|
|
<section id="rollCallSection" class="section" style="display: none;">
|
|
<h2>点名</h2>
|
|
|
|
<!-- 进度条 -->
|
|
<div class="progress-container">
|
|
<div class="progress-info">
|
|
<span>已点名:<strong id="completedCount">0</strong> / <strong id="totalCount">0</strong></span>
|
|
</div>
|
|
<div class="progress-bar">
|
|
<div id="progressFill" class="progress-fill"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 名单列表 -->
|
|
<div class="member-list">
|
|
<h3>点名名单</h3>
|
|
<div id="memberListDisplay"></div>
|
|
</div>
|
|
|
|
<!-- 拍照点名 -->
|
|
<div class="photo-upload">
|
|
<h3>拍照点名</h3>
|
|
<div class="camera-container">
|
|
<video id="video" width="320" height="240" autoplay></video>
|
|
<canvas id="canvas" width="320" height="240" style="display: none;"></canvas>
|
|
</div>
|
|
<div class="camera-controls">
|
|
<button id="startCameraBtn" class="btn btn-primary">开启摄像头</button>
|
|
<button id="captureBtn" class="btn btn-primary" style="display: none;">拍照点名</button>
|
|
<button id="stopCameraBtn" class="btn btn-secondary" style="display: none;">关闭摄像头</button>
|
|
</div>
|
|
<div id="capturedPhoto" class="captured-photo" style="display: none;">
|
|
<img id="photoPreview" alt="拍摄的照片">
|
|
<div class="photo-actions">
|
|
<button id="confirmPhotoBtn" class="btn btn-primary">确认点名</button>
|
|
<button id="retakeBtn" class="btn btn-secondary">重新拍摄</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 手动点名 -->
|
|
<div class="manual-rollcall">
|
|
<h3>手动点名</h3>
|
|
<p>如果人脸识别失败,可以手动选择姓名进行点名:</p>
|
|
<select id="manualSelect" class="form-control">
|
|
<option value="">请选择姓名</option>
|
|
</select>
|
|
<button id="manualRollCallBtn" class="btn btn-primary">确认点名</button>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
</div>
|
|
|
|
<script src="storage.js"></script>
|
|
<script src="index.js"></script>
|
|
</body>
|
|
</html>
|