Compare commits
4 Commits
dc66080c22
...
964332cf44
| Author | SHA1 | Date |
|---|---|---|
|
|
964332cf44 | |
|
|
b5b5e92b73 | |
|
|
f59b43c99e | |
|
|
68a126cb8b |
|
|
@ -64,14 +64,16 @@
|
||||||
<script src="/static/js/logout.js"></script>
|
<script src="/static/js/logout.js"></script>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
let courseData = {};
|
||||||
// 获取课程名称或状态
|
// 获取课程名称或状态
|
||||||
$.get("/api/get-course-name", function (response) {
|
$.get("/api/get-course-name", function (response) {
|
||||||
|
|
||||||
if (response.msg === "ok") {
|
if (response.msg === "ok") {
|
||||||
// 如果后端返回课程名
|
// 如果后端返回课程名
|
||||||
$("#course-info").text("课程:" + response.data.course_name +" 在上课时间内,请及时签到");
|
$("#course-info").text("课程:" + response.data.course_name + "。在上课时间内,请及时签到!");
|
||||||
// 启用签到按钮
|
// 启用签到按钮
|
||||||
$("#sign-in-btn").prop('disabled', false);
|
$("#sign-in-btn").prop('disabled', false);
|
||||||
|
courseData = response.data;
|
||||||
} else {
|
} else {
|
||||||
// 根据不同的消息更新状态
|
// 根据不同的消息更新状态
|
||||||
$("#course-info").text(response.msg); // 显示没有课程的消息
|
$("#course-info").text(response.msg); // 显示没有课程的消息
|
||||||
|
|
@ -84,16 +86,16 @@
|
||||||
$("#sign-in-btn").click(function () {
|
$("#sign-in-btn").click(function () {
|
||||||
if (!$(this).prop('disabled')) {
|
if (!$(this).prop('disabled')) {
|
||||||
// 发送签到请求到后端
|
// 发送签到请求到后端
|
||||||
$.post("/api/student-sign-in", function (response) {
|
$.post("/api/student-sign-in",courseData,function (response) {
|
||||||
// 处理签到后的响应
|
// 处理签到后的响应
|
||||||
if (response.success) {
|
if (response.msg === 'ok') {
|
||||||
layer.msg('签到成功!');
|
layer.msg('签到成功!');
|
||||||
} else {
|
} else {
|
||||||
layer.msg("签到失败!");
|
layer.msg(response.data);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
alert("当前不可签到"); // Or handle disabled button click as needed
|
layer.msg("当前不可签到"); // Or handle disabled button click as needed
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
24
app/views.py
24
app/views.py
|
|
@ -1,6 +1,4 @@
|
||||||
import datetime
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import openpyxl as openpyxl
|
import openpyxl as openpyxl
|
||||||
from flask import Flask, redirect, url_for, render_template, session, jsonify, request, send_file
|
from flask import Flask, redirect, url_for, render_template, session, jsonify, request, send_file
|
||||||
from utils.time_utils import check_now_time
|
from utils.time_utils import check_now_time
|
||||||
|
|
@ -14,6 +12,7 @@ from models.User import User
|
||||||
import logging
|
import logging
|
||||||
from config import LOGGING_CONFIG
|
from config import LOGGING_CONFIG
|
||||||
from config import FILE_PATH
|
from config import FILE_PATH
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
app = Flask(__name__, static_folder='static')
|
app = Flask(__name__, static_folder='static')
|
||||||
app.secret_key = SECRET_KEY # 从配置文件设置
|
app.secret_key = SECRET_KEY # 从配置文件设置
|
||||||
|
|
@ -294,7 +293,7 @@ def receive_excel():
|
||||||
|
|
||||||
@app.route('/api/get-course-name', methods=['GET'])
|
@app.route('/api/get-course-name', methods=['GET'])
|
||||||
def get_course_name():
|
def get_course_name():
|
||||||
data = {'course_name': "信息技术"}
|
data = {'course_name': "信息技术", "course_id": 1}
|
||||||
return jsonify({
|
return jsonify({
|
||||||
'msg': 'ok',
|
'msg': 'ok',
|
||||||
'data': data
|
'data': data
|
||||||
|
|
@ -324,9 +323,8 @@ def get_course_name():
|
||||||
# 如果是工作日,获取课程信息
|
# 如果是工作日,获取课程信息
|
||||||
print(f"day of week: {day_of_week}")
|
print(f"day of week: {day_of_week}")
|
||||||
db_manager = DatabaseManager()
|
db_manager = DatabaseManager()
|
||||||
data = db_manager.get_course_name(number, day_of_week)
|
data = db_manager.get_course_name(number, day_of_week, period_id)
|
||||||
print(data)
|
print(data)
|
||||||
|
|
||||||
# 返回课程信息
|
# 返回课程信息
|
||||||
return jsonify({
|
return jsonify({
|
||||||
'msg': 'ok',
|
'msg': 'ok',
|
||||||
|
|
@ -337,8 +335,20 @@ def get_course_name():
|
||||||
@app.route('/api/student-sign-in', methods=['POST'])
|
@app.route('/api/student-sign-in', methods=['POST'])
|
||||||
def student_sign_in():
|
def student_sign_in():
|
||||||
number = session.get("number")
|
number = session.get("number")
|
||||||
print(number)
|
course_name = request.form.get('course_name')
|
||||||
return "aaa"
|
course_id = request.form.get('course_id')
|
||||||
|
now = datetime.now()
|
||||||
|
date = now.strftime("%Y年%m月%d日%H:%M")
|
||||||
|
status = "出勤"
|
||||||
|
print(f"number: {number},course_name: {course_name},course_id: {course_id}")
|
||||||
|
db_manager = DatabaseManager()
|
||||||
|
result = db_manager.update_sign_in_info(number, course_id, course_name, date, status)
|
||||||
|
|
||||||
|
if result == 1:
|
||||||
|
return jsonify({"msg": "ok", "data": "签到成功!"})
|
||||||
|
else:
|
||||||
|
return jsonify({"msg": "fail", "data": "签到失败!"})
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(debug=True)
|
app.run(debug=True)
|
||||||
|
|
|
||||||
|
|
@ -125,21 +125,26 @@ WHERE
|
||||||
data = (student.student_name, student.student_number, student.user_id, student.major_id, student.class_name)
|
data = (student.student_name, student.student_number, student.user_id, student.major_id, student.class_name)
|
||||||
return self.execute(sql, data)
|
return self.execute(sql, data)
|
||||||
|
|
||||||
def get_course_name(self, student_number, day_of_week):
|
def get_course_name(self, student_number, day_of_week, period_id):
|
||||||
# 从student表获取class_name
|
# 从student表获取class_name
|
||||||
sql_student = "SELECT class_name FROM student WHERE student_number = %s;"
|
sql_student = "SELECT class_name FROM student WHERE student_number = %s;"
|
||||||
class_name = self.fetch(sql_student, (student_number,))[0]['class_name']
|
class_name = self.fetch(sql_student, (student_number,))[0]['class_name']
|
||||||
|
|
||||||
# 使用class_name和day_of_week从schedule表获取course_id
|
# 使用class_name和day_of_week从schedule表获取course_id
|
||||||
sql_schedule = "SELECT course_id, FROM schedule WHERE day_of_week = %s AND class_name = %s;"
|
sql_schedule = "SELECT course_id, FROM schedule WHERE day_of_week = %s AND class_name = %s AND period_id = %s;"
|
||||||
course_id_list = self.fetch(sql_schedule, (day_of_week, class_name))
|
course_id = self.fetch(sql_schedule, (day_of_week, class_name, period_id))
|
||||||
|
|
||||||
# 对于每一个course_id,从course表中查询course_name
|
# 对于每一个course_id,从course表中查询course_name
|
||||||
course_names = []
|
sql_course = "SELECT course_name FROM course WHERE course_id = %s;"
|
||||||
for course_id in course_id_list:
|
course_name = self.fetch(sql_course, (course_id['course_id'],))
|
||||||
sql_course = "SELECT course_name FROM course WHERE course_id = %s;"
|
data = {"course_name": course_name, "course_id": course_id}
|
||||||
course_name = self.fetch(sql_course, (course_id['course_id'],))
|
return data
|
||||||
if course_name:
|
|
||||||
course_names.extend([cn['course_name'] for cn in course_name])
|
|
||||||
|
|
||||||
return course_names
|
def update_sign_in_info(self, student_number, course_id, course_name, date, status):
|
||||||
|
sql = """
|
||||||
|
INSERT INTO attendance_record (student_number, course_id, course_name, date, status)
|
||||||
|
VALUES (%s, %s, %s, %s, %s)
|
||||||
|
"""
|
||||||
|
val = (student_number, course_id, course_name, date, status)
|
||||||
|
result = self.execute(sql, val)
|
||||||
|
return result
|
||||||
|
|
|
||||||
12
mysql.sql
12
mysql.sql
|
|
@ -80,15 +80,14 @@ VALUES ('大学计算机基础', 'CF001', '必修', 3, '介绍计算机基础知
|
||||||
('计算机网络', 'CN002', '必修', 4, '学习计算机网络的基础理论和协议');
|
('计算机网络', 'CN002', '必修', 4, '学习计算机网络的基础理论和协议');
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE attendance_records
|
CREATE TABLE attendance_record
|
||||||
(
|
(
|
||||||
record_id INT AUTO_INCREMENT PRIMARY KEY,
|
record_id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
student_number VARCHAR(20) NOT NULL,
|
||||||
course_id INT NOT NULL,
|
course_id INT NOT NULL,
|
||||||
student_id INT NOT NULL,
|
course_name VARCHAR(255) NOT NULL,
|
||||||
date DATE NOT NULL,
|
date VARCHAR(255) NOT NULL,
|
||||||
status ENUM('present', 'absent', 'late', 'excused'),
|
status VARCHAR(20)
|
||||||
FOREIGN KEY (course_id) REFERENCES course (course_id),
|
|
||||||
FOREIGN KEY (student_id) REFERENCES student (student_id)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -246,3 +245,4 @@ VALUES ('一、二节', '08:00:00', '09:30:00'),
|
||||||
('三、四节', '10:00:00', '11:30:00'),
|
('三、四节', '10:00:00', '11:30:00'),
|
||||||
('五、六节', '14:30:00', '16:00:00'),
|
('五、六节', '14:30:00', '16:00:00'),
|
||||||
('七、八节', '16:30:00', '18:00:00');
|
('七、八节', '16:30:00', '18:00:00');
|
||||||
|
|
||||||
|
|
|
||||||
Reference in New Issue