Files
张翔 08ea5fbe98 feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
2026-03-28 14:37:29 +08:00

116 lines
3.3 KiB
Python

import random
import string
from datetime import datetime, timedelta
from typing import Dict, Any
class DataGenerator:
"""数据生成器类"""
@staticmethod
def random_username(length: int = 8) -> str:
"""生成随机用户名"""
return "".join(random.choices(string.ascii_lowercase + string.digits, k=length))
@staticmethod
def random_password(length: int = 12) -> str:
"""生成随机密码"""
chars = string.ascii_letters + string.digits + "!@#$%^&*"
return "".join(random.choices(chars, k=length))
@staticmethod
def random_email() -> str:
"""生成随机邮箱"""
username = "".join(random.choices(string.ascii_lowercase + string.digits, k=8))
domains = ["gmail.com", "qq.com", "163.com", "outlook.com"]
domain = random.choice(domains)
return f"{username}@{domain}"
@staticmethod
def random_phone() -> str:
"""生成随机手机号"""
prefix = random.choice(["138", "139", "150", "151", "186", "188"])
suffix = "".join(random.choices(string.digits, k=8))
return f"{prefix}{suffix}"
@staticmethod
def random_date(start_date: datetime = None, end_date: datetime = None) -> datetime:
"""生成随机日期"""
if start_date is None:
start_date = datetime.now() - timedelta(days=365)
if end_date is None:
end_date = datetime.now()
time_between = end_date - start_date
days_between = time_between.days
random_days = random.randrange(days_between)
return start_date + timedelta(days=random_days)
@staticmethod
def generate_user_data(overrides: Dict[str, Any] = None) -> Dict[str, Any]:
"""生成用户数据
Args:
overrides: 覆盖的字段
Returns:
用户数据字典
"""
data = {
"username": DataGenerator.random_username(),
"password": DataGenerator.random_password(),
"email": DataGenerator.random_email(),
"phone": DataGenerator.random_phone(),
"status": "active",
}
if overrides:
data.update(overrides)
return data
@staticmethod
def generate_role_data(overrides: Dict[str, Any] = None) -> Dict[str, Any]:
"""生成角色数据
Args:
overrides: 覆盖的字段
Returns:
角色数据字典
"""
data = {
"role_name": f"test_role_{random.randint(1000, 9999)}",
"role_code": f"test_role_{random.randint(1000, 9999)}",
"description": "测试角色",
"status": 1,
}
if overrides:
data.update(overrides)
return data
@staticmethod
def generate_menu_data(overrides: Dict[str, Any] = None) -> Dict[str, Any]:
"""生成菜单数据
Args:
overrides: 覆盖的字段
Returns:
菜单数据字典
"""
data = {
"menu_name": f"test_menu_{random.randint(1000, 9999)}",
"menu_type": 1,
"path": f"/test/{random.randint(1000, 9999)}",
"icon": "test-icon",
"status": 0,
}
if overrides:
data.update(overrides)
return data