Compare commits
8 Commits
5fb451fa97
...
af9fd8af11
| Author | SHA1 | Date | |
|---|---|---|---|
| af9fd8af11 | |||
| 0cf81af5e9 | |||
| 8d91463dd0 | |||
| d365c3c466 | |||
| 3e3d32c20e | |||
| df2c025c63 | |||
| f1fac2037a | |||
| ebd95f9413 |
@@ -58,8 +58,7 @@
|
|||||||
<th>课程名称</th>
|
<th>课程名称</th>
|
||||||
<th>课程代码</th>
|
<th>课程代码</th>
|
||||||
<th>学分</th>
|
<th>学分</th>
|
||||||
<th>班级名称</th>
|
<th>班级专业</th>
|
||||||
<th>专业</th>
|
|
||||||
<th>签到</th>
|
<th>签到</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -93,13 +92,11 @@
|
|||||||
$row.append(`<td>${item.course_name}</td>`);
|
$row.append(`<td>${item.course_name}</td>`);
|
||||||
$row.append(`<td>${item.course_code}</td>`);
|
$row.append(`<td>${item.course_code}</td>`);
|
||||||
$row.append(`<td>${item.credits}</td>`);
|
$row.append(`<td>${item.credits}</td>`);
|
||||||
$row.append(`<td>${item.class_name}</td>`);
|
$row.append(`<td>${item.class_name + item.major}</td>`);
|
||||||
$row.append(`<td>${item.major}</td>`);
|
$row.append(`<td><div class="layui-btn-container">
|
||||||
$row.append(`<td>
|
<button type="button" class="layui-btn">签到</button>
|
||||||
<div class="btn-container">
|
</div>
|
||||||
<a class="layui-btn layui-btn-normal layui-btn-sm" lay-event="checkin">签到<i class="layui-icon layui-icon-down"></i></a>
|
</td>`)
|
||||||
</div>
|
|
||||||
</td>`)
|
|
||||||
$tbody.append($row);
|
$tbody.append($row);
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -118,11 +115,6 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleDropdown(dropdown) {
|
|
||||||
$(dropdown).find('.dropdown-menu').toggle(); // 显示或隐藏下拉菜单
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 初始加载第一页
|
// 初始加载第一页
|
||||||
renderTable(1);
|
renderTable(1);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -70,7 +70,7 @@
|
|||||||
<div class="layui-col-md12" style="padding-top: 20px;">
|
<div class="layui-col-md12" style="padding-top: 20px;">
|
||||||
<button type="button" class="layui-btn" id="uploadExcel">上传Excel文件</button>
|
<button type="button" class="layui-btn" id="uploadExcel">上传Excel文件</button>
|
||||||
<!-- 可以添加一个下载模板的链接 -->
|
<!-- 可以添加一个下载模板的链接 -->
|
||||||
<a href="path/to/your/template.xlsx" class="layui-btn layui-btn-primary">下载模板</a>
|
<a href="/files/template.xlsx" class="layui-btn layui-btn-primary">下载模板</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
16
app/views.py
16
app/views.py
@@ -1,4 +1,4 @@
|
|||||||
from flask import Flask, redirect, url_for, render_template, session, jsonify,request
|
from flask import Flask, redirect, url_for, render_template, session, jsonify,request,send_file
|
||||||
from db.connection import MySQLPool
|
from db.connection import MySQLPool
|
||||||
from config import SECRET_KEY
|
from config import SECRET_KEY
|
||||||
from db.database_manager import DatabaseManager
|
from db.database_manager import DatabaseManager
|
||||||
@@ -7,14 +7,15 @@ from models.Teacher import Teacher
|
|||||||
from models.User import User
|
from models.User import User
|
||||||
import logging
|
import logging
|
||||||
from config import LOGGING_CONFIG
|
from config import LOGGING_CONFIG
|
||||||
|
from config import FILE_PATH
|
||||||
app = Flask(__name__, static_folder='static')
|
app = Flask(__name__, static_folder='static')
|
||||||
app.secret_key = SECRET_KEY # 从配置文件设置
|
app.secret_key = SECRET_KEY # 从配置文件设置
|
||||||
logging.basicConfig(**LOGGING_CONFIG)
|
logging.basicConfig(**LOGGING_CONFIG)
|
||||||
|
|
||||||
# 一个全局MySQLPool对象,用于管理数据库连接
|
# 一个全局MySQLPool对象,用于管理数据库连接
|
||||||
mysql_pool = MySQLPool()
|
mysql_pool = MySQLPool()
|
||||||
|
# 配置文件路径,例如指向一个 'files' 目录
|
||||||
|
app.config['FILE_PATH'] = FILE_PATH
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
def index():
|
def index():
|
||||||
@@ -224,7 +225,6 @@ def teacher_attendance():
|
|||||||
@app.route('/api/get-teacher-attendance-table', methods=['GET'])
|
@app.route('/api/get-teacher-attendance-table', methods=['GET'])
|
||||||
def get_current_teacher_courses():
|
def get_current_teacher_courses():
|
||||||
number = session.get('number')
|
number = session.get('number')
|
||||||
logging.info(number)
|
|
||||||
# 获取分页参数
|
# 获取分页参数
|
||||||
page = request.args.get('page', 1, type=int) # 如果没有提供,默认为第一页
|
page = request.args.get('page', 1, type=int) # 如果没有提供,默认为第一页
|
||||||
limit = request.args.get('limit', 10, type=int) # 如果没有提供,默认每页10条
|
limit = request.args.get('limit', 10, type=int) # 如果没有提供,默认每页10条
|
||||||
@@ -232,7 +232,7 @@ def get_current_teacher_courses():
|
|||||||
# 获取所有课程数据
|
# 获取所有课程数据
|
||||||
db_manager = DatabaseManager()
|
db_manager = DatabaseManager()
|
||||||
all_course_data = db_manager.get_current_teacher_courses(number)
|
all_course_data = db_manager.get_current_teacher_courses(number)
|
||||||
|
logging.info(f"all_course_data: {all_course_data}")
|
||||||
# 计算分页的起始和结束索引
|
# 计算分页的起始和结束索引
|
||||||
start = (page - 1) * limit
|
start = (page - 1) * limit
|
||||||
end = start + limit
|
end = start + limit
|
||||||
@@ -250,6 +250,12 @@ def get_current_teacher_courses():
|
|||||||
# 将查询结果转换为JSON格式并返回
|
# 将查询结果转换为JSON格式并返回
|
||||||
return jsonify(response)
|
return jsonify(response)
|
||||||
|
|
||||||
|
@app.route('/files/<filename>')
|
||||||
|
def download_template():
|
||||||
|
print(FILE_PATH)
|
||||||
|
# 确保这个路径是你的文件实际所在的服务器路径
|
||||||
|
path = "./files/template.xlsx"
|
||||||
|
return send_file(path, as_attachment=True)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(debug=True)
|
app.run(debug=True)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# config.py
|
# config.py
|
||||||
import pymysql
|
import pymysql
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
# 设置session SECRET_KEY
|
# 设置session SECRET_KEY
|
||||||
SECRET_KEY = 'sUNiJ7QPulxrbmZD'
|
SECRET_KEY = 'sUNiJ7QPulxrbmZD'
|
||||||
|
|
||||||
@@ -9,6 +10,8 @@ LOGGING_CONFIG = {
|
|||||||
'level': logging.INFO,
|
'level': logging.INFO,
|
||||||
'format': '%(asctime)s - %(levelname)s - [%(filename)s:%(funcName)s] - %(message)s'
|
'format': '%(asctime)s - %(levelname)s - [%(filename)s:%(funcName)s] - %(message)s'
|
||||||
}
|
}
|
||||||
|
# 配置文件下载路径
|
||||||
|
FILE_PATH = os.path.join(os.getcwd(), 'files')
|
||||||
|
|
||||||
# 数据库连接配置
|
# 数据库连接配置
|
||||||
DB_CONFIG = {
|
DB_CONFIG = {
|
||||||
|
|||||||
@@ -71,9 +71,28 @@ class DatabaseManager:
|
|||||||
result = self.fetch(sql)
|
result = self.fetch(sql)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_current_teacher_courses(self, number):
|
def get_current_teacher_courses(self, teacher_number):
|
||||||
sql = ""
|
# 使用INNER JOIN连接teacher_class_course表和course表
|
||||||
return None
|
sql = """
|
||||||
|
SELECT
|
||||||
|
c.course_name,
|
||||||
|
c.course_code,
|
||||||
|
c.credits,
|
||||||
|
tcc.class_name,
|
||||||
|
m.major
|
||||||
|
FROM
|
||||||
|
teacher_class_course tcc
|
||||||
|
JOIN
|
||||||
|
course c ON tcc.course_id = c.course_id
|
||||||
|
JOIN
|
||||||
|
major m ON tcc.major_id = m.major_id
|
||||||
|
WHERE
|
||||||
|
tcc.teacher_number = %s;
|
||||||
|
"""
|
||||||
|
|
||||||
|
# 执行查询并返回结果
|
||||||
|
result = self.fetch(sql, (teacher_number,))
|
||||||
|
return result
|
||||||
|
|
||||||
def get_course_type(self):
|
def get_course_type(self):
|
||||||
sql = "SELECT course_name, course_type FROM course"
|
sql = "SELECT course_name, course_type FROM course"
|
||||||
|
|||||||
BIN
files/template.xlsx
Normal file
BIN
files/template.xlsx
Normal file
Binary file not shown.
@@ -181,13 +181,15 @@ CREATE TABLE teacher_class_course
|
|||||||
teacher_number VARCHAR(20) NOT NULL,
|
teacher_number VARCHAR(20) NOT NULL,
|
||||||
course_id INT NOT NULL,
|
course_id INT NOT NULL,
|
||||||
class_name VARCHAR(20) NOT NULL,
|
class_name VARCHAR(20) NOT NULL,
|
||||||
|
major_id VARCHAR(20) NOT NULL,
|
||||||
PRIMARY KEY (id),
|
PRIMARY KEY (id),
|
||||||
FOREIGN KEY (teacher_number) REFERENCES teacher (teacher_number),
|
FOREIGN KEY (teacher_number) REFERENCES teacher (teacher_number),
|
||||||
FOREIGN KEY (course_id) REFERENCES course (course_id)
|
FOREIGN KEY (course_id) REFERENCES course (course_id),
|
||||||
|
FOREIGN KEY (major_id) REFERENCES major (major_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO teacher_class_course(teacher_number, course_id, class_name) VALUES
|
INSERT INTO teacher_class_course(teacher_number, course_id, class_name,major_id) VALUES
|
||||||
('G0000',1,'2023级01班');
|
('G0000',1,'2023级01班','000');
|
||||||
|
|
||||||
INSERT INTO teacher_class_course(teacher_id, course_id, class_id)
|
INSERT INTO teacher_class_course(teacher_id, course_id, class_id)
|
||||||
VALUES (1, 1, 1),
|
VALUES (1, 1, 1),
|
||||||
@@ -249,4 +251,3 @@ VALUES ('一、二节', '08:00:00', '09: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
Block a user