New file |
| | |
| | | <!DOCTYPE html> |
| | | <html lang="en"> |
| | | <head> |
| | | <meta charset="UTF-8"> |
| | | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | | <title>人è¸è¯å«èå¤ - 人è¸å½å
¥æ¨¡å</title> |
| | | <style> |
| | | body { |
| | | font-family: Arial, sans-serif; |
| | | margin: 20px; |
| | | } |
| | | .container { |
| | | max-width: 600px; |
| | | margin: auto; |
| | | padding: 20px; |
| | | border: 1px solid #ccc; |
| | | border-radius: 8px; |
| | | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); |
| | | } |
| | | h1 { |
| | | text-align: center; |
| | | color: #333; |
| | | } |
| | | .form-group { |
| | | margin-bottom: 15px; |
| | | } |
| | | label { |
| | | display: block; |
| | | margin-bottom: 5px; |
| | | font-weight: bold; |
| | | } |
| | | input[type="text"], button { |
| | | width: 100%; |
| | | padding: 10px; |
| | | font-size: 16px; |
| | | border: 1px solid #ccc; |
| | | border-radius: 4px; |
| | | } |
| | | button { |
| | | background-color: #007bff; |
| | | color: white; |
| | | cursor: pointer; |
| | | } |
| | | button:hover { |
| | | background-color: #0056b3; |
| | | } |
| | | .camera-preview { |
| | | margin-top: 20px; |
| | | text-align: center; |
| | | } |
| | | .camera-preview video { |
| | | max-width: 100%; |
| | | height: auto; |
| | | border: 1px solid #ccc; |
| | | border-radius: 4px; |
| | | } |
| | | .image-preview { |
| | | margin-top: 20px; |
| | | text-align: center; |
| | | } |
| | | .image-preview img { |
| | | max-width: 100%; |
| | | height: auto; |
| | | border: 1px solid #ccc; |
| | | border-radius: 4px; |
| | | } |
| | | .status-message { |
| | | margin-top: 15px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | color: #555; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body> |
| | | <div class="container"> |
| | | <h1>人è¸è¯å«èå¤ - 人è¸å½å
¥æ¨¡å</h1> |
| | | |
| | | <!-- å·¥å·è¾å
¥ --> |
| | | <div class="form-group"> |
| | | <label for="employee-id">è¾å
¥å·¥å·:</label> |
| | | <input type="text" id="employee-id" placeholder="请è¾å
¥å·¥å·"> |
| | | </div> |
| | | |
| | | <!-- æ¥è¯¢ä¿¡æ¯æé® --> |
| | | <button onclick="searchUserInfo()">æ¥è¯¢ä¿¡æ¯</button> |
| | | |
| | | <!-- ç¨æ·ä¿¡æ¯å±ç¤º --> |
| | | <div class="form-group" id="user-info" style="display: none;"> |
| | | <label>ç¨æ·ä¿¡æ¯:</label> |
| | | <p id="user-details"></p> |
| | | </div> |
| | | |
| | | <!-- 模ææå头æåå¾ç --> |
| | | <div class="camera-preview" id="camera-preview" style="display: none;"> |
| | | <video id="camera-video" autoplay playsinline></video> |
| | | <div> |
| | | <button onclick="captureImage('front')">æåæ£è¸</button> |
| | | <button onclick="captureImage('left')">æå左侧è¸</button> |
| | | <button onclick="captureImage('right')">æåå³ä¾§è¸</button> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- å¾çé¢è§ --> |
| | | <div class="image-preview" id="image-preview" style="display: none;"> |
| | | <h3>æåçå¾çé¢è§</h3> |
| | | <div id="captured-images"> |
| | | <img id="front-image" src="" alt="æ£è¸å¾ç" style="display: none;"> |
| | | <img id="left-image" src="" alt="左侧è¸å¾ç" style="display: none;"> |
| | | <img id="right-image" src="" alt="å³ä¾§è¸å¾ç" style="display: none;"> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- æäº¤æé® --> |
| | | <button onclick="submitData()" style="display: none;" id="submit-btn">æäº¤</button> |
| | | |
| | | <!-- ç¶ææ¶æ¯ --> |
| | | <div class="status-message" id="status-message"></div> |
| | | </div> |
| | | |
| | | <script> |
| | | let cameraStream = null; |
| | | |
| | | // æ¨¡ææ¥è¯¢ç¨æ·ä¿¡æ¯ |
| | | function searchUserInfo() { |
| | | const employeeId = document.getElementById('employee-id').value; |
| | | if (!employeeId) { |
| | | alert('请è¾å
¥å·¥å·'); |
| | | return; |
| | | } |
| | | |
| | | // æ¨¡ææ¥è¯¢ç»æ |
| | | const userInfo = { |
| | | id: employeeId, |
| | | name: 'å¼ ä¸', |
| | | department: 'ææ¯é¨' |
| | | }; |
| | | |
| | | // æ¾ç¤ºç¨æ·ä¿¡æ¯ |
| | | document.getElementById('user-details').innerText = `å§å: ${userInfo.name}, é¨é¨: ${userInfo.department}`; |
| | | document.getElementById('user-info').style.display = 'block'; |
| | | |
| | | // æ¾ç¤ºæå头 |
| | | startCamera(); |
| | | } |
| | | |
| | | // æå¼æå头 |
| | | async function startCamera() { |
| | | try { |
| | | cameraStream = await navigator.mediaDevices.getUserMedia({ video: true }); |
| | | const videoElement = document.getElementById('camera-video'); |
| | | videoElement.srcObject = cameraStream; |
| | | document.getElementById('camera-preview').style.display = 'block'; |
| | | } catch (error) { |
| | | alert('æ æ³è®¿é®æå头ï¼è¯·æ£æ¥æéæè®¾å¤æ¯å¦å¯ç¨ã'); |
| | | console.error('æå头访é®å¤±è´¥:', error); |
| | | } |
| | | } |
| | | |
| | | // æåå¾ç |
| | | function captureImage(faceType) { |
| | | const videoElement = document.getElementById('camera-video'); |
| | | const canvas = document.createElement('canvas'); |
| | | canvas.width = videoElement.videoWidth; |
| | | canvas.height = videoElement.videoHeight; |
| | | const context = canvas.getContext('2d'); |
| | | context.drawImage(videoElement, 0, 0, canvas.width, canvas.height); |
| | | |
| | | // å°æåçå¾çæ¾ç¤ºå¨é¡µé¢ä¸ |
| | | const imageUrl = canvas.toDataURL('image/png'); |
| | | const imageElement = document.getElementById(`${faceType}-image`); |
| | | imageElement.src = imageUrl; |
| | | imageElement.style.display = 'block'; |
| | | |
| | | // 妿ä¸å¼ å¾çé½å·²æåï¼æ¾ç¤ºæäº¤æé® |
| | | const frontImage = document.getElementById('front-image').src; |
| | | const leftImage = document.getElementById('left-image').src; |
| | | const rightImage = document.getElementById('right-image').src; |
| | | if (frontImage && leftImage && rightImage) { |
| | | document.getElementById('submit-btn').style.display = 'block'; |
| | | } |
| | | } |
| | | |
| | | // 模ææäº¤æ°æ® |
| | | function submitData() { |
| | | const employeeId = document.getElementById('employee-id').value; |
| | | if (!employeeId) { |
| | | alert('请å
è¾å
¥å·¥å·å¹¶æ¥è¯¢ä¿¡æ¯'); |
| | | return; |
| | | } |
| | | |
| | | // 模æä¸ä¼ å¾çåæäº¤æ°æ® |
| | | const statusMessage = document.getElementById('status-message'); |
| | | statusMessage.innerText = 'æ£å¨ä¸ä¼ å¾çå¹¶æäº¤æ°æ®...'; |
| | | |
| | | setTimeout(() => { |
| | | statusMessage.innerText = 'æäº¤æåï¼'; |
| | | }, 2000); // 模æä¸ä¼ å»¶è¿ |
| | | } |
| | | </script> |
| | | </body> |
| | | </html> |