Compare commits
9 Commits
e172d78c30
...
892196a827
| Author | SHA1 | Date |
|---|---|---|
|
|
892196a827 | |
|
|
c73997452b | |
|
|
234d9cf5b8 | |
|
|
05e0e82736 | |
|
|
9c4d5b8a7d | |
|
|
a303a65156 | |
|
|
6487490ad7 | |
|
|
5915f30e08 | |
|
|
138e1a221e |
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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 }}
|
||||
</a>
|
||||
<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>
|
||||
</dl>
|
||||
</li>
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
|
||||
// 动态添加菜单项
|
||||
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>
|
||||
<div class="layui-layout layui-layout-admin">
|
||||
<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 class="layui-body">
|
||||
|
|
|
|||
22
app/views.py
22
app/views.py
|
|
@ -97,17 +97,19 @@ def get_menu():
|
|||
if 'role' in session:
|
||||
role = session['role']
|
||||
menu_items = db_manager.get_meun(role)
|
||||
print(menu_items)
|
||||
|
||||
# 转换菜单项为期望的格式并返回
|
||||
print(menu_items)
|
||||
formatted_menu_items = [{"name": item['menu_name']} for item in menu_items]
|
||||
formatted_menu_items = [
|
||||
{"name": item['menu_name'], "path": item['path']} for item in menu_items
|
||||
]
|
||||
return jsonify(formatted_menu_items)
|
||||
|
||||
# 如果没有角色信息,可能用户未登录或session过期
|
||||
return jsonify([]), 401 # 未授权状态码
|
||||
|
||||
|
||||
@app.route('/profile', methods=['GET', 'POST'])
|
||||
@app.route('/home/profile', methods=['GET', 'POST'])
|
||||
def profile():
|
||||
if request.method == 'POST':
|
||||
# 从表单获取数据
|
||||
|
|
@ -123,7 +125,21 @@ def profile():
|
|||
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__':
|
||||
app.run(debug=True)
|
||||
|
|
|
|||
|
|
@ -63,6 +63,6 @@ class DatabaseManager:
|
|||
return {'valid': False}
|
||||
|
||||
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,))
|
||||
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 (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
menu_name VARCHAR(100),
|
||||
path VARCHAR(255),
|
||||
role ENUM('student', 'teacher'),
|
||||
`order` INT
|
||||
);
|
||||
|
||||
|
||||
INSERT INTO menu_items (menu_name, role, `order`) VALUES
|
||||
('课程信息', 'student', 1),
|
||||
('课程签到', 'student', 2),
|
||||
('公告信息', 'student', 3),
|
||||
('签到提醒', 'student', 4);
|
||||
INSERT INTO menu_items (menu_name, role, path, `order`) VALUES
|
||||
('课程信息', 'student', '/course-info', 1),
|
||||
('课程签到', 'student', '/attendance', 2),
|
||||
('公告信息', 'student', '/announcement', 3),
|
||||
('签到提醒', '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