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 %}
-
-
- {{ 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 %}
- |
-
- {% endfor %}
-
-
-
-
-
-
-
- {% 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()