Compare commits
9 Commits
e172d78c30
...
892196a827
| Author | SHA1 | Date | |
|---|---|---|---|
| 892196a827 | |||
| c73997452b | |||
| 234d9cf5b8 | |||
| 05e0e82736 | |||
| 9c4d5b8a7d | |||
| a303a65156 | |||
| 6487490ad7 | |||
| 5915f30e08 | |||
| 138e1a221e |
78
app/templates/announcement.html
Normal file
78
app/templates/announcement.html
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<title>课程签到</title>
|
||||||
|
<meta name="renderer" content="webkit"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<link href="static/css/layui.css" rel="stylesheet"/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="layui-layout layui-layout-admin">
|
||||||
|
<div class="layui-header">
|
||||||
|
<div class="layui-logo layui-hide-xs layui-bg-black">网上上课点名系统</div>
|
||||||
|
<!-- 头部区域(可配合layui 已有的水平导航) -->
|
||||||
|
<ul class="layui-nav layui-layout-right">
|
||||||
|
<li class="layui-nav-item layui-hide layui-show-sm-inline-block">
|
||||||
|
<a href="javascript:;">
|
||||||
|
<img
|
||||||
|
src="//unpkg.com/outeres@0.0.10/img/layui/icon-v2.png"
|
||||||
|
class="layui-nav-img"
|
||||||
|
/>
|
||||||
|
{{ session.nickname }}
|
||||||
|
</a>
|
||||||
|
<dl class="layui-nav-child">
|
||||||
|
<dd><a href="/home/profile">资料</a></dd> <!-- 修改这里的href指向/profile -->
|
||||||
|
<dd><a href="javascript:;" id="logoutLink">登出</a></dd>
|
||||||
|
</dl>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
class="layui-nav-item"
|
||||||
|
lay-header-event="menuRight"
|
||||||
|
lay-unselect
|
||||||
|
></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="layui-side layui-bg-black">
|
||||||
|
<div class="layui-side-scroll">
|
||||||
|
<!-- 动态加载菜单栏 -->
|
||||||
|
<ul class="layui-nav layui-nav-tree" lay-filter="test">
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="static/jquery.min.js"></script> <!-- 确保已经引入jQuery -->
|
||||||
|
<script src="static/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
// 请求后端获取菜单数据
|
||||||
|
$.get('/api/menu', function (menuItems) {
|
||||||
|
// 清空原有菜单项
|
||||||
|
var menuList = $('.layui-nav.layui-nav-tree');
|
||||||
|
menuList.empty();
|
||||||
|
|
||||||
|
// 动态添加菜单项
|
||||||
|
menuItems.forEach(function (item) {
|
||||||
|
menuList.append('<li class="layui-nav-item"><a href="' + item.path + '">' + item.name + '</a></li>');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 更新菜单布局
|
||||||
|
layui.element.render('nav', 'test');
|
||||||
|
});
|
||||||
|
|
||||||
|
layui.use(['jquery'], function () {
|
||||||
|
var $ = layui.jquery; // 获取Layui的jQuery对象
|
||||||
|
|
||||||
|
$('#logoutLink').on('click', function () {
|
||||||
|
// 向后端发送登出请求
|
||||||
|
$.get('/logout', function (data) {
|
||||||
|
// 重定向到登录页面,或根据后端响应做其他处理
|
||||||
|
window.location.href = '/login';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
78
app/templates/attendance-reminder.html
Normal file
78
app/templates/attendance-reminder.html
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<title>签到提醒</title>
|
||||||
|
<meta name="renderer" content="webkit"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<link href="static/css/layui.css" rel="stylesheet"/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="layui-layout layui-layout-admin">
|
||||||
|
<div class="layui-header">
|
||||||
|
<div class="layui-logo layui-hide-xs layui-bg-black">网上上课点名系统</div>
|
||||||
|
<!-- 头部区域(可配合layui 已有的水平导航) -->
|
||||||
|
<ul class="layui-nav layui-layout-right">
|
||||||
|
<li class="layui-nav-item layui-hide layui-show-sm-inline-block">
|
||||||
|
<a href="javascript:;">
|
||||||
|
<img
|
||||||
|
src="//unpkg.com/outeres@0.0.10/img/layui/icon-v2.png"
|
||||||
|
class="layui-nav-img"
|
||||||
|
/>
|
||||||
|
{{ session.nickname }}
|
||||||
|
</a>
|
||||||
|
<dl class="layui-nav-child">
|
||||||
|
<dd><a href="/home/profile">资料</a></dd> <!-- 修改这里的href指向/profile -->
|
||||||
|
<dd><a href="javascript:;" id="logoutLink">登出</a></dd>
|
||||||
|
</dl>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
class="layui-nav-item"
|
||||||
|
lay-header-event="menuRight"
|
||||||
|
lay-unselect
|
||||||
|
></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="layui-side layui-bg-black">
|
||||||
|
<div class="layui-side-scroll">
|
||||||
|
<!-- 动态加载菜单栏 -->
|
||||||
|
<ul class="layui-nav layui-nav-tree" lay-filter="test">
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="static/jquery.min.js"></script> <!-- 确保已经引入jQuery -->
|
||||||
|
<script src="static/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
// 请求后端获取菜单数据
|
||||||
|
$.get('/api/menu', function (menuItems) {
|
||||||
|
// 清空原有菜单项
|
||||||
|
var menuList = $('.layui-nav.layui-nav-tree');
|
||||||
|
menuList.empty();
|
||||||
|
|
||||||
|
// 动态添加菜单项
|
||||||
|
menuItems.forEach(function (item) {
|
||||||
|
menuList.append('<li class="layui-nav-item"><a href="' + item.path + '">' + item.name + '</a></li>');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 更新菜单布局
|
||||||
|
layui.element.render('nav', 'test');
|
||||||
|
});
|
||||||
|
|
||||||
|
layui.use(['jquery'], function () {
|
||||||
|
var $ = layui.jquery; // 获取Layui的jQuery对象
|
||||||
|
|
||||||
|
$('#logoutLink').on('click', function () {
|
||||||
|
// 向后端发送登出请求
|
||||||
|
$.get('/logout', function (data) {
|
||||||
|
// 重定向到登录页面,或根据后端响应做其他处理
|
||||||
|
window.location.href = '/login';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
78
app/templates/attendance.html
Normal file
78
app/templates/attendance.html
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<title>签到</title>
|
||||||
|
<meta name="renderer" content="webkit"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<link href="static/css/layui.css" rel="stylesheet"/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="layui-layout layui-layout-admin">
|
||||||
|
<div class="layui-header">
|
||||||
|
<div class="layui-logo layui-hide-xs layui-bg-black">网上上课点名系统</div>
|
||||||
|
<!-- 头部区域(可配合layui 已有的水平导航) -->
|
||||||
|
<ul class="layui-nav layui-layout-right">
|
||||||
|
<li class="layui-nav-item layui-hide layui-show-sm-inline-block">
|
||||||
|
<a href="javascript:;">
|
||||||
|
<img
|
||||||
|
src="//unpkg.com/outeres@0.0.10/img/layui/icon-v2.png"
|
||||||
|
class="layui-nav-img"
|
||||||
|
/>
|
||||||
|
{{ session.nickname }}
|
||||||
|
</a>
|
||||||
|
<dl class="layui-nav-child">
|
||||||
|
<dd><a href="/home/profile">资料</a></dd> <!-- 修改这里的href指向/profile -->
|
||||||
|
<dd><a href="javascript:;" id="logoutLink">登出</a></dd>
|
||||||
|
</dl>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
class="layui-nav-item"
|
||||||
|
lay-header-event="menuRight"
|
||||||
|
lay-unselect
|
||||||
|
></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="layui-side layui-bg-black">
|
||||||
|
<div class="layui-side-scroll">
|
||||||
|
<!-- 动态加载菜单栏 -->
|
||||||
|
<ul class="layui-nav layui-nav-tree" lay-filter="test">
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="static/jquery.min.js"></script> <!-- 确保已经引入jQuery -->
|
||||||
|
<script src="static/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
// 请求后端获取菜单数据
|
||||||
|
$.get('/api/menu', function (menuItems) {
|
||||||
|
// 清空原有菜单项
|
||||||
|
var menuList = $('.layui-nav.layui-nav-tree');
|
||||||
|
menuList.empty();
|
||||||
|
|
||||||
|
// 动态添加菜单项
|
||||||
|
menuItems.forEach(function (item) {
|
||||||
|
menuList.append('<li class="layui-nav-item"><a href="' + item.link + '">' + item.name + '</a></li>');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 更新菜单布局
|
||||||
|
layui.element.render('nav', 'test');
|
||||||
|
});
|
||||||
|
|
||||||
|
layui.use(['jquery'], function () {
|
||||||
|
var $ = layui.jquery; // 获取Layui的jQuery对象
|
||||||
|
|
||||||
|
$('#logoutLink').on('click', function () {
|
||||||
|
// 向后端发送登出请求
|
||||||
|
$.get('/logout', function (data) {
|
||||||
|
// 重定向到登录页面,或根据后端响应做其他处理
|
||||||
|
window.location.href = '/login';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
78
app/templates/course-info.html
Normal file
78
app/templates/course-info.html
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<title>课程信息</title>
|
||||||
|
<meta name="renderer" content="webkit"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<link href="static/css/layui.css" rel="stylesheet"/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="layui-layout layui-layout-admin">
|
||||||
|
<div class="layui-header">
|
||||||
|
<div class="layui-logo layui-hide-xs layui-bg-black">网上上课点名系统</div>
|
||||||
|
<!-- 头部区域(可配合layui 已有的水平导航) -->
|
||||||
|
<ul class="layui-nav layui-layout-right">
|
||||||
|
<li class="layui-nav-item layui-hide layui-show-sm-inline-block">
|
||||||
|
<a href="javascript:;">
|
||||||
|
<img
|
||||||
|
src="//unpkg.com/outeres@0.0.10/img/layui/icon-v2.png"
|
||||||
|
class="layui-nav-img"
|
||||||
|
/>
|
||||||
|
{{ session.nickname }}
|
||||||
|
</a>
|
||||||
|
<dl class="layui-nav-child">
|
||||||
|
<dd><a href="/home/profile">资料</a></dd> <!-- 修改这里的href指向/profile -->
|
||||||
|
<dd><a href="javascript:;" id="logoutLink">登出</a></dd>
|
||||||
|
</dl>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
class="layui-nav-item"
|
||||||
|
lay-header-event="menuRight"
|
||||||
|
lay-unselect
|
||||||
|
></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="layui-side layui-bg-black">
|
||||||
|
<div class="layui-side-scroll">
|
||||||
|
<!-- 动态加载菜单栏 -->
|
||||||
|
<ul class="layui-nav layui-nav-tree" lay-filter="test">
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="static/jquery.min.js"></script> <!-- 确保已经引入jQuery -->
|
||||||
|
<script src="static/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
// 请求后端获取菜单数据
|
||||||
|
$.get('/api/menu', function (menuItems) {
|
||||||
|
// 清空原有菜单项
|
||||||
|
var menuList = $('.layui-nav.layui-nav-tree');
|
||||||
|
menuList.empty();
|
||||||
|
|
||||||
|
// 动态添加菜单项
|
||||||
|
menuItems.forEach(function (item) {
|
||||||
|
menuList.append('<li class="layui-nav-item"><a href="' + item.path + '">' + item.name + '</a></li>');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 更新菜单布局
|
||||||
|
layui.element.render('nav', 'test');
|
||||||
|
});
|
||||||
|
|
||||||
|
layui.use(['jquery'], function () {
|
||||||
|
var $ = layui.jquery; // 获取Layui的jQuery对象
|
||||||
|
|
||||||
|
$('#logoutLink').on('click', function () {
|
||||||
|
// 向后端发送登出请求
|
||||||
|
$.get('/logout', function (data) {
|
||||||
|
// 重定向到登录页面,或根据后端响应做其他处理
|
||||||
|
window.location.href = '/login';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
{{ session.nickname }}
|
{{ session.nickname }}
|
||||||
</a>
|
</a>
|
||||||
<dl class="layui-nav-child">
|
<dl class="layui-nav-child">
|
||||||
<dd><a href="/profile">资料</a></dd> <!-- 修改这里的href指向/profile -->
|
<dd><a href="/home/profile">资料</a></dd> <!-- 修改这里的href指向/profile -->
|
||||||
<dd><a href="javascript:;" id="logoutLink">登出</a></dd>
|
<dd><a href="javascript:;" id="logoutLink">登出</a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
// 动态添加菜单项
|
// 动态添加菜单项
|
||||||
menuItems.forEach(function (item) {
|
menuItems.forEach(function (item) {
|
||||||
menuList.append('<li class="layui-nav-item"><a href="' + item.link + '">' + item.name + '</a></li>');
|
menuList.append('<li class="layui-nav-item"><a href="' + item.path + '">' + item.name + '</a></li>');
|
||||||
});
|
});
|
||||||
|
|
||||||
// 更新菜单布局
|
// 更新菜单布局
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<div class="layui-layout layui-layout-admin">
|
<div class="layui-layout layui-layout-admin">
|
||||||
<div class="layui-header">
|
<div class="layui-header">
|
||||||
<div class="layui-logo layui-hide-xs layui-bg-black">网上上课点名系统</div>
|
<div class="layui-logo layui-hide-xs layui-bg-black" href="/home">网上上课点名系统</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="layui-body">
|
<div class="layui-body">
|
||||||
|
|||||||
22
app/views.py
22
app/views.py
@@ -97,17 +97,19 @@ def get_menu():
|
|||||||
if 'role' in session:
|
if 'role' in session:
|
||||||
role = session['role']
|
role = session['role']
|
||||||
menu_items = db_manager.get_meun(role)
|
menu_items = db_manager.get_meun(role)
|
||||||
|
print(menu_items)
|
||||||
|
|
||||||
# 转换菜单项为期望的格式并返回
|
# 转换菜单项为期望的格式并返回
|
||||||
print(menu_items)
|
formatted_menu_items = [
|
||||||
formatted_menu_items = [{"name": item['menu_name']} for item in menu_items]
|
{"name": item['menu_name'], "path": item['path']} for item in menu_items
|
||||||
|
]
|
||||||
return jsonify(formatted_menu_items)
|
return jsonify(formatted_menu_items)
|
||||||
|
|
||||||
# 如果没有角色信息,可能用户未登录或session过期
|
# 如果没有角色信息,可能用户未登录或session过期
|
||||||
return jsonify([]), 401 # 未授权状态码
|
return jsonify([]), 401 # 未授权状态码
|
||||||
|
|
||||||
|
|
||||||
@app.route('/profile', methods=['GET', 'POST'])
|
@app.route('/home/profile', methods=['GET', 'POST'])
|
||||||
def profile():
|
def profile():
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
# 从表单获取数据
|
# 从表单获取数据
|
||||||
@@ -123,7 +125,21 @@ def profile():
|
|||||||
return render_template('profile.html') # 确保这里渲染的是包含上面表单的HTML页面
|
return render_template('profile.html') # 确保这里渲染的是包含上面表单的HTML页面
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/course-info', methods=['GET', 'POST'])
|
||||||
|
def course_info():
|
||||||
|
return render_template('course-info.html')
|
||||||
|
|
||||||
|
@app.route('/attendance', methods=['GET', 'POST'])
|
||||||
|
def course_checkin():
|
||||||
|
return render_template('attendance.html')
|
||||||
|
|
||||||
|
@app.route('/announcement', methods=['GET', 'POST'])
|
||||||
|
def announcement():
|
||||||
|
return render_template('announcement.html')
|
||||||
|
|
||||||
|
@app.route('/attendance-reminder', methods=['GET', 'POST'])
|
||||||
|
def attendance_reminder():
|
||||||
|
return render_template('attendance-reminder.html')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(debug=True)
|
app.run(debug=True)
|
||||||
|
|||||||
@@ -63,6 +63,6 @@ class DatabaseManager:
|
|||||||
return {'valid': False}
|
return {'valid': False}
|
||||||
|
|
||||||
def get_meun(self, role):
|
def get_meun(self, role):
|
||||||
sql = "SELECT menu_name FROM menu_items WHERE role=%s ORDER BY `order`"
|
sql = "SELECT menu_name,path FROM menu_items WHERE role=%s ORDER BY `order`"
|
||||||
result = self.fetch(sql, (role,))
|
result = self.fetch(sql, (role,))
|
||||||
return result
|
return result
|
||||||
|
|||||||
23
mysql.sql
23
mysql.sql
@@ -15,20 +15,23 @@ INSERT INTO user (nickname, phone_number, password, identity, status) VALUES
|
|||||||
CREATE TABLE menu_items (
|
CREATE TABLE menu_items (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
menu_name VARCHAR(100),
|
menu_name VARCHAR(100),
|
||||||
|
path VARCHAR(255),
|
||||||
role ENUM('student', 'teacher'),
|
role ENUM('student', 'teacher'),
|
||||||
`order` INT
|
`order` INT
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
INSERT INTO menu_items (menu_name, role, `order`) VALUES
|
INSERT INTO menu_items (menu_name, role, path, `order`) VALUES
|
||||||
('课程信息', 'student', 1),
|
('课程信息', 'student', '/course-info', 1),
|
||||||
('课程签到', 'student', 2),
|
('课程签到', 'student', '/attendance', 2),
|
||||||
('公告信息', 'student', 3),
|
('公告信息', 'student', '/announcement', 3),
|
||||||
('签到提醒', 'student', 4);
|
('签到提醒', 'student', '/attendance-reminder', 4);
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO menu_items (menu_name, role, path, `order`) VALUES
|
||||||
|
('课程类别', 'teacher', '/course-category', 1),
|
||||||
|
('课程信息', 'teacher', '/course-info', 2),
|
||||||
|
('课程签到', 'teacher', '/attendance', 3),
|
||||||
|
('签到提醒', 'teacher', '/attendance-reminder', 4);
|
||||||
|
|
||||||
INSERT INTO menu_items (menu_name, role, `order`) VALUES
|
|
||||||
('课程类别', 'teacher', 1),
|
|
||||||
('课程信息', 'teacher', 2),
|
|
||||||
('课程签到', 'teacher', 3),
|
|
||||||
('签到提醒', 'teacher', 4);
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user