feat: 系统配置支持动态增删用户类型和会员套餐

新增功能:
- UserTypeConfig 模型:用户类型配置支持动态增删
- MembershipPlanConfig 模型:会员套餐配置支持动态增删
- 用户类型管理页面:添加、编辑、删除、启用/禁用用户类型
- 会员套餐管理页面:添加、编辑、删除、上架/下架、推荐套餐
- 功能权限配置:支持选择功能列表
- 初始化默认配置功能

改进:
- settings.html 页面重构,提供配置入口链接
- 新增API接口支持增删改查操作
This commit is contained in:
2026-04-11 10:25:03 +08:00
parent 329e795648
commit 8c35a8741a
7 changed files with 1492 additions and 53 deletions

105
models.py
View File

@@ -417,4 +417,107 @@ class DynamicConfig(db.Model):
db.session.add(config)
db.session.commit()
return config
return config
# ==================== 用户类型配置(动态增删) ====================
class UserTypeConfig(db.Model):
"""用户类型配置表 - 支持动态增删"""
__tablename__ = 'user_type_config'
id = db.Column(db.Integer, primary_key=True)
type_key = db.Column(db.String(50), unique=True, nullable=False) # 类型标识: guest, free, vip_basic, etc.
display_name = db.Column(db.String(100), nullable=False) # 显示名称: 访客, 免费用户, 基础会员
# 权限配置
daily_translations = db.Column(db.Integer, default=10) # 每日翻译次数 (-1=无限)
max_pages = db.Column(db.Integer, default=50) # 最大页数 (-1=无限)
max_file_size = db.Column(db.Integer, default=30*1024*1024) # 最大文件大小(bytes)
# 功能列表(JSON)
features = db.Column(db.Text, default='[]') # JSON数组: ["basic_translate", "history"]
# 排序和状态
sort_order = db.Column(db.Integer, default=0) # 排序权重
is_active = db.Column(db.Boolean, default=True) # 是否启用
is_system = db.Column(db.Boolean, default=False) # 是否系统内置(不可删除)
# 时间
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
def get_features(self):
"""获取功能列表"""
import json
try:
return json.loads(self.features) if self.features else []
except:
return []
def set_features(self, feature_list):
"""设置功能列表"""
import json
self.features = json.dumps(feature_list, ensure_ascii=False)
def to_dict(self):
return {
'id': self.id,
'type_key': self.type_key,
'display_name': self.display_name,
'daily_translations': self.daily_translations,
'max_pages': self.max_pages,
'max_file_size': self.max_file_size,
'features': self.get_features(),
'sort_order': self.sort_order,
'is_active': self.is_active,
'is_system': self.is_system,
}
# ==================== 会员套餐配置(动态增删) ====================
class MembershipPlanConfig(db.Model):
"""会员套餐配置表 - 支持动态增删"""
__tablename__ = 'membership_plan_config'
id = db.Column(db.Integer, primary_key=True)
plan_key = db.Column(db.String(50), unique=True, nullable=False) # 套餐标识: vip_basic, vip_pro, etc.
display_name = db.Column(db.String(100), nullable=False) # 显示名称: 基础会员
# 价格配置
price = db.Column(db.Float, default=0) # 价格
original_price = db.Column(db.Float, nullable=True) # 原价(用于折扣显示)
period = db.Column(db.String(20), default='month') # 周期: month, quarter, year
period_days = db.Column(db.Integer, default=30) # 周期天数
# 描述
description = db.Column(db.String(255), nullable=True) # 套餐描述
# 对应的用户类型
user_type_key = db.Column(db.String(50), nullable=True) # 购买后升级到的用户类型
# 排序和状态
sort_order = db.Column(db.Integer, default=0)
is_active = db.Column(db.Boolean, default=True)
is_recommended = db.Column(db.Boolean, default=False) # 是否推荐
is_system = db.Column(db.Boolean, default=False) # 是否系统内置(不可删除)
# 时间
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
def to_dict(self):
return {
'id': self.id,
'plan_key': self.plan_key,
'display_name': self.display_name,
'price': self.price,
'original_price': self.original_price,
'period': self.period,
'period_days': self.period_days,
'description': self.description,
'user_type_key': self.user_type_key,
'sort_order': self.sort_order,
'is_active': self.is_active,
'is_recommended': self.is_recommended,
'is_system': self.is_system,
}