refactor: 备用大模型整合到大模型配置页

- 备用大模型不再单独页面,直接在大模型配置页显示
- 新增/编辑使用模态框,更简洁高效
- 移除独立的 backup_llm.html 和 backup_llm_form.html
- 统一侧边栏导航,移除备用大模型链接
- API 改为只返回 JSON,不再渲染页面
This commit is contained in:
2026-04-16 15:58:17 +08:00
parent 9c7d1a512e
commit db98c2b82c
21 changed files with 269 additions and 506 deletions

129
admin.py
View File

@@ -686,7 +686,10 @@ def llm_config():
'timeout': DynamicConfig.get('llm_timeout', LLM_CONFIG.get('timeout')),
}
return render_template('admin/llm_config.html', config=config)
# 获取备用大模型配置
backup_configs = BackupLLMConfig.query.order_by(BackupLLMConfig.sort_order).all()
return render_template('admin/llm_config.html', config=config, backup_configs=[c.to_dict() for c in backup_configs])
@admin_bp.route('/llm_config/save', methods=['POST'])
@@ -1224,92 +1227,72 @@ def get_all_membership_plans():
@admin_bp.route('/backup-llm')
@admin_required
def backup_llm_list():
"""备用大模型接口列表"""
configs = BackupLLMConfig.query.order_by(BackupLLMConfig.sort_order).all()
# 如果数据库中没有数据,初始化默认配置
if not configs:
init_default_backup_llm()
configs = BackupLLMConfig.query.order_by(BackupLLMConfig.sort_order).all()
return render_template('admin/backup_llm.html', configs=configs)
"""备用大模型接口列表 - 重定向到大模型配置页"""
return redirect(url_for('admin.llm_config'))
@admin_bp.route('/backup-llm/add', methods=['GET', 'POST'])
@admin_bp.route('/backup-llm/add', methods=['POST'])
@admin_required
def add_backup_llm():
"""添加备用大模型接口"""
if request.method == 'POST':
data = request.json if request.is_json else request.form
config = BackupLLMConfig(
provider_name=data.get('provider_name'),
api_base=data.get('api_base'),
api_key=data.get('api_key'),
model=data.get('model'),
is_active=data.get('is_active', True) if isinstance(data.get('is_active'), bool) else data.get('is_active') == 'true',
sort_order=int(data.get('sort_order', 0)),
description=data.get('description'),
)
db.session.add(config)
db.session.commit()
# 记录日志
log = OperationLog(
user_id=session.get('user_id'),
username='admin',
action='add_backup_llm',
target=config.provider_name,
detail=json.dumps(config.to_dict(), ensure_ascii=False)
)
db.session.add(log)
db.session.commit()
if request.is_json:
return jsonify({'success': True, 'config': config.to_dict()})
flash('备用大模型接口已添加', 'success')
return redirect(url_for('admin.backup_llm_list'))
data = request.json
return render_template('admin/backup_llm_form.html', config=None)
config = BackupLLMConfig(
provider_name=data.get('provider_name'),
api_base=data.get('api_base'),
api_key=data.get('api_key'),
model=data.get('model'),
is_active=data.get('is_active', True),
sort_order=int(data.get('sort_order', 0)),
description=data.get('description'),
)
db.session.add(config)
db.session.commit()
# 记录日志
log = OperationLog(
user_id=session.get('user_id'),
username='admin',
action='add_backup_llm',
target=config.provider_name,
detail=json.dumps(config.to_dict(), ensure_ascii=False)
)
db.session.add(log)
db.session.commit()
return jsonify({'success': True, 'config': config.to_dict()})
@admin_bp.route('/backup-llm/<int:config_id>/edit', methods=['GET', 'POST'])
@admin_bp.route('/backup-llm/<int:config_id>/edit', methods=['POST'])
@admin_required
def edit_backup_llm(config_id):
"""编辑备用大模型接口"""
config = BackupLLMConfig.query.get_or_404(config_id)
data = request.json
if request.method == 'POST':
data = request.json if request.is_json else request.form
config.provider_name = data.get('provider_name', config.provider_name)
config.api_base = data.get('api_base', config.api_base)
config.api_key = data.get('api_key', config.api_key)
config.model = data.get('model', config.model)
config.is_active = data.get('is_active', True) if isinstance(data.get('is_active'), bool) else data.get('is_active') == 'true'
config.sort_order = int(data.get('sort_order', config.sort_order))
config.description = data.get('description', config.description)
db.session.commit()
# 记录日志
log = OperationLog(
user_id=session.get('user_id'),
username='admin',
action='edit_backup_llm',
target=config.provider_name,
detail=json.dumps(config.to_dict(), ensure_ascii=False)
)
db.session.add(log)
db.session.commit()
if request.is_json:
return jsonify({'success': True, 'config': config.to_dict()})
flash('备用大模型接口已更新', 'success')
return redirect(url_for('admin.backup_llm_list'))
config.provider_name = data.get('provider_name', config.provider_name)
config.api_base = data.get('api_base', config.api_base)
config.api_key = data.get('api_key', config.api_key)
config.model = data.get('model', config.model)
config.is_active = data.get('is_active', True)
config.sort_order = int(data.get('sort_order', config.sort_order))
config.description = data.get('description', config.description)
return render_template('admin/backup_llm_form.html', config=config)
db.session.commit()
# 记录日志
log = OperationLog(
user_id=session.get('user_id'),
username='admin',
action='edit_backup_llm',
target=config.provider_name,
detail=json.dumps(config.to_dict(), ensure_ascii=False)
)
db.session.add(log)
db.session.commit()
return jsonify({'success': True, 'config': config.to_dict()})
@admin_bp.route('/backup-llm/<int:config_id>/delete', methods=['POST'])