From fd27daa01283be8b07c63da05109f170f5fa4304 Mon Sep 17 00:00:00 2001 From: superlishunqin <852326703@qq.com> Date: Thu, 12 Jun 2025 10:41:08 +0800 Subject: [PATCH] delete_pending --- app/templates/admin/student_detail.html | 75 ---- create_admin.py | 518 ++++++++++++++++++++++++ 2 files changed, 518 insertions(+), 75 deletions(-) create mode 100644 create_admin.py diff --git a/app/templates/admin/student_detail.html b/app/templates/admin/student_detail.html index 7d29eb0..ea1a6a2 100644 --- a/app/templates/admin/student_detail.html +++ b/app/templates/admin/student_detail.html @@ -255,10 +255,6 @@ class="btn btn-outline-info btn-sm"> 查看考勤详情 - - 查看请假记录 - @@ -359,77 +355,6 @@ - - - {% if leave_records %} -
-
-
-
-
- 最近请假记录 -
- - 查看全部 - -
-
-
- - - - - - - - - - - {% for leave in leave_records %} - - - - - - - {% endfor %} - -
请假日期请假原因申请时间状态
- {{ leave.leave_start_date.strftime('%Y-%m-%d') }} - {% if leave.leave_start_date != leave.leave_end_date %} - 至 {{ leave.leave_end_date.strftime('%Y-%m-%d') }} - {% endif %} - -
- {{ leave.leave_reason }} -
-
- - {{ leave.created_at.strftime('%Y-%m-%d %H:%M') }} - - - {% if leave.status == '待审批' %} - - 待审批 - - {% elif leave.status == '已批准' %} - - 已批准 - - {% else %} - - 已拒绝 - - {% endif %} -
-
-
-
-
-
- {% endif %} {% endblock %} diff --git a/create_admin.py b/create_admin.py new file mode 100644 index 0000000..628396f --- /dev/null +++ b/create_admin.py @@ -0,0 +1,518 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +创建管理员用户的脚本 +使用方法: python create_admin.py +""" + +import sys +import os +from getpass import getpass + +# 添加项目根目录到Python路径 +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +from init_db import create_app +from app.models import db, User +from app.utils.database import safe_add_and_commit + + +def create_admin_user(): + """创建管理员用户""" + app = create_app() + + with app.app_context(): + print("=" * 50) + print("创建管理员用户") + print("=" * 50) + + # 输入管理员信息 + while True: + student_number = input("请输入管理员账号(学号格式): ").strip() + if not student_number: + print("账号不能为空,请重新输入!") + continue + + # 检查账号是否已存在 + existing_user = User.query.filter_by(student_number=student_number).first() + if existing_user: + print(f"账号 {student_number} 已存在!") + choice = input("是否要更新该用户为管理员?(y/n): ").lower() + if choice == 'y': + # 更新现有用户为管理员 + existing_user.role = 'admin' + + # 询问是否要重置密码 + reset_pwd = input("是否要重置密码?(y/n): ").lower() + if reset_pwd == 'y': + while True: + password = getpass("请输入新密码: ") + if len(password) < 6: + print("密码长度至少6位,请重新输入!") + continue + + confirm_password = getpass("请确认密码: ") + if password != confirm_password: + print("两次输入的密码不一致,请重新输入!") + continue + + existing_user.set_password(password) + break + + success, error = safe_add_and_commit(existing_user) + if success: + print(f"用户 {student_number} 已成功更新为管理员!") + else: + print(f"更新失败: {error}") + return + else: + continue + else: + break + + # 输入密码 + while True: + password = getpass("请输入管理员密码: ") + if len(password) < 6: + print("密码长度至少6位,请重新输入!") + continue + + confirm_password = getpass("请确认密码: ") + if password != confirm_password: + print("两次输入的密码不一致,请重新输入!") + continue + break + + # 创建管理员用户 + admin_user = User( + student_number=student_number, + role='admin', + is_active=True + ) + admin_user.set_password(password) + + # 保存到数据库 + success, error = safe_add_and_commit(admin_user) + + if success: + print(f"\n✅ 管理员用户创建成功!") + print(f"账号: {student_number}") + print(f"角色: 管理员") + print(f"状态: 激活") + else: + print(f"\n❌ 创建失败: {error}") + + +def batch_create_admins(): + """批量创建管理员用户""" + app = create_app() + + with app.app_context(): + print("=" * 50) + print("批量创建管理员用户") + print("=" * 50) + print("输入格式: 账号,密码") + print("例如: admin001,123456") + print("输入 'done' 完成输入") + print("-" * 50) + + admin_list = [] + + while True: + user_input = input("请输入管理员信息(账号,密码): ").strip() + + if user_input.lower() == 'done': + break + + if ',' not in user_input: + print("格式错误!请使用 '账号,密码' 格式") + continue + + try: + student_number, password = user_input.split(',', 1) + student_number = student_number.strip() + password = password.strip() + + if not student_number or not password: + print("账号和密码都不能为空!") + continue + + if len(password) < 6: + print("密码长度至少6位!") + continue + + # 检查是否已存在 + existing_user = User.query.filter_by(student_number=student_number).first() + if existing_user: + print(f"账号 {student_number} 已存在,跳过...") + continue + + admin_list.append((student_number, password)) + print(f"✓ 已添加: {student_number}") + + except ValueError: + print("格式错误!请使用 '账号,密码' 格式") + continue + + if not admin_list: + print("没有有效的管理员信息,退出...") + return + + # 确认创建 + print(f"\n准备创建 {len(admin_list)} 个管理员用户:") + for student_number, _ in admin_list: + print(f"- {student_number}") + + confirm = input("\n确认创建?(y/n): ").lower() + if confirm != 'y': + print("已取消创建") + return + + # 批量创建 + success_count = 0 + fail_count = 0 + + for student_number, password in admin_list: + admin_user = User( + student_number=student_number, + role='admin', + is_active=True + ) + admin_user.set_password(password) + + success, error = safe_add_and_commit(admin_user) + + if success: + print(f"✅ {student_number} 创建成功") + success_count += 1 + else: + print(f"❌ {student_number} 创建失败: {error}") + fail_count += 1 + + print(f"\n批量创建完成:") + print(f"成功: {success_count}") + print(f"失败: {fail_count}") + + +def list_admins(): + """列出所有管理员用户""" + app = create_app() + + with app.app_context(): + print("=" * 50) + print("管理员用户列表") + print("=" * 50) + + admins = User.query.filter_by(role='admin').all() + + if not admins: + print("暂无管理员用户") + return + + print(f"{'序号':<4} {'账号':<15} {'状态':<8} {'创建时间':<20} {'最后登录':<20}") + print("-" * 70) + + for i, admin in enumerate(admins, 1): + status = "激活" if admin.is_active else "禁用" + created_at = admin.created_at.strftime('%Y-%m-%d %H:%M:%S') if admin.created_at else "未知" + last_login = admin.last_login.strftime('%Y-%m-%d %H:%M:%S') if admin.last_login else "从未登录" + + print(f"{i:<4} {admin.student_number:<15} {status:<8} {created_at:<20} {last_login:<20}") + + +def main(): + """主函数""" + while True: + print("\n" + "=" * 50) + print("管理员用户管理") + print("=" * 50) + print("1. 创建单个管理员用户") + print("2. 批量创建管理员用户") + print("3. 查看管理员列表") + print("4. 退出") + print("-" * 50) + + choice = input("请选择操作 (1-4): ").strip() + + if choice == '1': + create_admin_user() + elif choice == '2': + batch_create_admins() + elif choice == '3': + list_admins() + elif choice == '4': + print("再见!") + break + else: + print("无效选择,请重新输入!") + + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + print("\n\n程序被中断退出") + except Exception as e: + print(f"\n程序运行出错: {e}") + import traceback + + traceback.print_exc() +# !/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +创建管理员用户的脚本 +使用方法: python create_admin.py +""" + +import sys +import os +from getpass import getpass + +# 添加项目根目录到Python路径 +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +from init_db import create_app +from app.models import db, User +from app.utils.database import safe_add_and_commit + + +def create_admin_user(): + """创建管理员用户""" + app = create_app() + + with app.app_context(): + print("=" * 50) + print("创建管理员用户") + print("=" * 50) + + # 输入管理员信息 + while True: + student_number = input("请输入管理员账号(学号格式): ").strip() + if not student_number: + print("账号不能为空,请重新输入!") + continue + + # 检查账号是否已存在 + existing_user = User.query.filter_by(student_number=student_number).first() + if existing_user: + print(f"账号 {student_number} 已存在!") + choice = input("是否要更新该用户为管理员?(y/n): ").lower() + if choice == 'y': + # 更新现有用户为管理员 + existing_user.role = 'admin' + + # 询问是否要重置密码 + reset_pwd = input("是否要重置密码?(y/n): ").lower() + if reset_pwd == 'y': + while True: + password = getpass("请输入新密码: ") + if len(password) < 6: + print("密码长度至少6位,请重新输入!") + continue + + confirm_password = getpass("请确认密码: ") + if password != confirm_password: + print("两次输入的密码不一致,请重新输入!") + continue + + existing_user.set_password(password) + break + + success, error = safe_add_and_commit(existing_user) + if success: + print(f"用户 {student_number} 已成功更新为管理员!") + else: + print(f"更新失败: {error}") + return + else: + continue + else: + break + + # 输入密码 + while True: + password = getpass("请输入管理员密码: ") + if len(password) < 6: + print("密码长度至少6位,请重新输入!") + continue + + confirm_password = getpass("请确认密码: ") + if password != confirm_password: + print("两次输入的密码不一致,请重新输入!") + continue + break + + # 创建管理员用户 + admin_user = User( + student_number=student_number, + role='admin', + is_active=True + ) + admin_user.set_password(password) + + # 保存到数据库 + success, error = safe_add_and_commit(admin_user) + + if success: + print(f"\n✅ 管理员用户创建成功!") + print(f"账号: {student_number}") + print(f"角色: 管理员") + print(f"状态: 激活") + else: + print(f"\n❌ 创建失败: {error}") + + +def batch_create_admins(): + """批量创建管理员用户""" + app = create_app() + + with app.app_context(): + print("=" * 50) + print("批量创建管理员用户") + print("=" * 50) + print("输入格式: 账号,密码") + print("例如: admin001,123456") + print("输入 'done' 完成输入") + print("-" * 50) + + admin_list = [] + + while True: + user_input = input("请输入管理员信息(账号,密码): ").strip() + + if user_input.lower() == 'done': + break + + if ',' not in user_input: + print("格式错误!请使用 '账号,密码' 格式") + continue + + try: + student_number, password = user_input.split(',', 1) + student_number = student_number.strip() + password = password.strip() + + if not student_number or not password: + print("账号和密码都不能为空!") + continue + + if len(password) < 6: + print("密码长度至少6位!") + continue + + # 检查是否已存在 + existing_user = User.query.filter_by(student_number=student_number).first() + if existing_user: + print(f"账号 {student_number} 已存在,跳过...") + continue + + admin_list.append((student_number, password)) + print(f"✓ 已添加: {student_number}") + + except ValueError: + print("格式错误!请使用 '账号,密码' 格式") + continue + + if not admin_list: + print("没有有效的管理员信息,退出...") + return + + # 确认创建 + print(f"\n准备创建 {len(admin_list)} 个管理员用户:") + for student_number, _ in admin_list: + print(f"- {student_number}") + + confirm = input("\n确认创建?(y/n): ").lower() + if confirm != 'y': + print("已取消创建") + return + + # 批量创建 + success_count = 0 + fail_count = 0 + + for student_number, password in admin_list: + admin_user = User( + student_number=student_number, + role='admin', + is_active=True + ) + admin_user.set_password(password) + + success, error = safe_add_and_commit(admin_user) + + if success: + print(f"✅ {student_number} 创建成功") + success_count += 1 + else: + print(f"❌ {student_number} 创建失败: {error}") + fail_count += 1 + + print(f"\n批量创建完成:") + print(f"成功: {success_count}") + print(f"失败: {fail_count}") + + +def list_admins(): + """列出所有管理员用户""" + app = create_app() + + with app.app_context(): + print("=" * 50) + print("管理员用户列表") + print("=" * 50) + + admins = User.query.filter_by(role='admin').all() + + if not admins: + print("暂无管理员用户") + return + + print(f"{'序号':<4} {'账号':<15} {'状态':<8} {'创建时间':<20} {'最后登录':<20}") + print("-" * 70) + + for i, admin in enumerate(admins, 1): + status = "激活" if admin.is_active else "禁用" + created_at = admin.created_at.strftime('%Y-%m-%d %H:%M:%S') if admin.created_at else "未知" + last_login = admin.last_login.strftime('%Y-%m-%d %H:%M:%S') if admin.last_login else "从未登录" + + print(f"{i:<4} {admin.student_number:<15} {status:<8} {created_at:<20} {last_login:<20}") + + +def main(): + """主函数""" + while True: + print("\n" + "=" * 50) + print("管理员用户管理") + print("=" * 50) + print("1. 创建单个管理员用户") + print("2. 批量创建管理员用户") + print("3. 查看管理员列表") + print("4. 退出") + print("-" * 50) + + choice = input("请选择操作 (1-4): ").strip() + + if choice == '1': + create_admin_user() + elif choice == '2': + batch_create_admins() + elif choice == '3': + list_admins() + elif choice == '4': + print("再见!") + break + else: + print("无效选择,请重新输入!") + + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + print("\n\n程序被中断退出") + except Exception as e: + print(f"\n程序运行出错: {e}") + import traceback + + traceback.print_exc()