153 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
{% extends 'layout/base.html' %}
 | 
						||
 | 
						||
{% block title %}上传考勤数据 - SmartDSP考勤管理系统{% endblock %}
 | 
						||
 | 
						||
{% block content %}
 | 
						||
<div class="container mt-4">
 | 
						||
    <div class="row">
 | 
						||
        <div class="col-md-10 mx-auto">
 | 
						||
            <div class="card shadow">
 | 
						||
                <div class="card-header">
 | 
						||
                    <h5 class="card-title mb-0">
 | 
						||
                        <i class="fas fa-upload me-2"></i>上传考勤数据
 | 
						||
                    </h5>
 | 
						||
                </div>
 | 
						||
                <div class="card-body">
 | 
						||
                    <form method="POST" enctype="multipart/form-data" id="uploadForm">
 | 
						||
                        <div class="row">
 | 
						||
                            <div class="col-md-6">
 | 
						||
                                <div class="mb-3">
 | 
						||
                                    <label for="week_start" class="form-label">周开始日期</label>
 | 
						||
                                    <input type="date" class="form-control" id="week_start" name="week_start" required>
 | 
						||
                                </div>
 | 
						||
                            </div>
 | 
						||
                            <div class="col-md-6">
 | 
						||
                                <div class="mb-3">
 | 
						||
                                    <label for="week_end" class="form-label">周结束日期</label>
 | 
						||
                                    <input type="date" class="form-control" id="week_end" name="week_end" required>
 | 
						||
                                </div>
 | 
						||
                            </div>
 | 
						||
                        </div>
 | 
						||
 | 
						||
                        <div class="row">
 | 
						||
                            <div class="col-md-6">
 | 
						||
                                <div class="mb-3">
 | 
						||
                                    <label for="attendance_file" class="form-label">
 | 
						||
                                        <i class="fas fa-clock me-2"></i>考勤记录文件 <span class="text-danger">*</span>
 | 
						||
                                    </label>
 | 
						||
                                    <input type="file" class="form-control" id="attendance_file" name="attendance_file"
 | 
						||
                                           accept=".xlsx,.xls" required>
 | 
						||
                                    <div class="form-text">必须上传考勤记录Excel文件</div>
 | 
						||
                                </div>
 | 
						||
                            </div>
 | 
						||
                            <div class="col-md-6">
 | 
						||
                                <div class="mb-3">
 | 
						||
                                    <label for="leave_file" class="form-label">
 | 
						||
                                        <i class="fas fa-file-alt me-2"></i>请假单文件 <span class="text-muted">(可选)</span>
 | 
						||
                                    </label>
 | 
						||
                                    <input type="file" class="form-control" id="leave_file" name="leave_file"
 | 
						||
                                           accept=".xlsx,.xls">
 | 
						||
                                    <div class="form-text">如有请假记录,请上传请假单Excel文件</div>
 | 
						||
                                </div>
 | 
						||
                            </div>
 | 
						||
                        </div>
 | 
						||
 | 
						||
                        <div class="alert alert-info">
 | 
						||
                            <h6><i class="fas fa-info-circle me-2"></i>导入说明:</h6>
 | 
						||
                            <ul class="mb-0">
 | 
						||
                                <li><strong>考勤记录文件:</strong>包含姓名列和每日考勤数据,系统会自动计算工作时长、迟到次数等</li>
 | 
						||
                                <li><strong>请假单文件:</strong>包含请假人员、请假开始时间、请假结束时间等信息</li>
 | 
						||
                                <li><strong>处理规则:</strong>
 | 
						||
                                    <ul>
 | 
						||
                                        <li>请假时间内的缺卡记录会自动转换为请假</li>
 | 
						||
                                        <li>请假时间内的正常打卡记录(正常、迟到、早退)保持不变</li>
 | 
						||
                                    </ul>
 | 
						||
                                </li>
 | 
						||
                                <li>如果记录已存在,将会更新现有数据</li>
 | 
						||
                                <li>请确保学生信息已在系统中注册</li>
 | 
						||
                            </ul>
 | 
						||
                        </div>
 | 
						||
 | 
						||
                        <div class="alert alert-warning">
 | 
						||
                            <h6><i class="fas fa-exclamation-triangle me-2"></i>注意事项:</h6>
 | 
						||
                            <ul class="mb-0">
 | 
						||
                                <li>请假单中的时间格式会自动转换(支持数字格式和标准日期格式)</li>
 | 
						||
                                <li>请假人员姓名必须与学生表中的姓名完全一致</li>
 | 
						||
                                <li>建议先上传考勤记录,再选择性上传请假单</li>
 | 
						||
                            </ul>
 | 
						||
                        </div>
 | 
						||
 | 
						||
                        <div class="d-grid gap-2 d-md-flex justify-content-md-end">
 | 
						||
                            <a href="{{ url_for('admin.attendance_management') }}"
 | 
						||
                               class="btn btn-secondary me-md-2">
 | 
						||
                                <i class="fas fa-arrow-left me-2"></i>返回
 | 
						||
                            </a>
 | 
						||
                            <button type="submit" class="btn btn-primary" id="submitBtn">
 | 
						||
                                <i class="fas fa-upload me-2"></i>开始导入
 | 
						||
                            </button>
 | 
						||
                        </div>
 | 
						||
                    </form>
 | 
						||
                </div>
 | 
						||
            </div>
 | 
						||
        </div>
 | 
						||
    </div>
 | 
						||
</div>
 | 
						||
{% endblock %}
 | 
						||
 | 
						||
{% block extra_js %}
 | 
						||
<script>
 | 
						||
document.addEventListener('DOMContentLoaded', function() {
 | 
						||
    const weekStartInput = document.getElementById('week_start');
 | 
						||
    const weekEndInput = document.getElementById('week_end');
 | 
						||
    const form = document.getElementById('uploadForm');
 | 
						||
    const submitBtn = document.getElementById('submitBtn');
 | 
						||
    const attendanceFileInput = document.getElementById('attendance_file');
 | 
						||
    const leaveFileInput = document.getElementById('leave_file');
 | 
						||
 | 
						||
    // 自动设置周结束日期
 | 
						||
    weekStartInput.addEventListener('change', function() {
 | 
						||
        if (this.value) {
 | 
						||
            const startDate = new Date(this.value);
 | 
						||
            const endDate = new Date(startDate);
 | 
						||
            endDate.setDate(startDate.getDate() + 6);
 | 
						||
 | 
						||
            weekEndInput.value = endDate.toISOString().split('T')[0];
 | 
						||
        }
 | 
						||
    });
 | 
						||
 | 
						||
    // 文件选择提示
 | 
						||
    attendanceFileInput.addEventListener('change', function() {
 | 
						||
        if (this.files.length > 0) {
 | 
						||
            console.log('已选择考勤记录文件:', this.files[0].name);
 | 
						||
        }
 | 
						||
    });
 | 
						||
 | 
						||
    leaveFileInput.addEventListener('change', function() {
 | 
						||
        if (this.files.length > 0) {
 | 
						||
            console.log('已选择请假单文件:', this.files[0].name);
 | 
						||
        }
 | 
						||
    });
 | 
						||
 | 
						||
    // 表单提交处理
 | 
						||
    form.addEventListener('submit', function(e) {
 | 
						||
        const hasAttendanceFile = attendanceFileInput.files.length > 0;
 | 
						||
 | 
						||
        if (!hasAttendanceFile) {
 | 
						||
            e.preventDefault();
 | 
						||
            alert('请选择考勤记录文件!');
 | 
						||
            return false;
 | 
						||
        }
 | 
						||
 | 
						||
        submitBtn.innerHTML = '<i class="fas fa-spinner fa-spin me-2"></i>导入中...';
 | 
						||
        submitBtn.disabled = true;
 | 
						||
 | 
						||
        // 显示处理进度提示
 | 
						||
        const progressAlert = document.createElement('div');
 | 
						||
        progressAlert.className = 'alert alert-info mt-3';
 | 
						||
        progressAlert.innerHTML = '<i class="fas fa-spinner fa-spin me-2"></i>正在处理文件,请稍候...';
 | 
						||
        form.appendChild(progressAlert);
 | 
						||
    });
 | 
						||
});
 | 
						||
</script>
 | 
						||
{% endblock %}
 |