from flask import Blueprint, render_template, session, redirect, url_for, flash, request import requests from frontend.config import Config strategies_bp = Blueprint('strategies', __name__) @strategies_bp.route('/strategies') def list_strategies(): if not session.get('token'): flash("请先登录", "warning") return redirect(url_for('auth.login')) token = session.get('token') try: resp = requests.post( f"{Config.BASE_API_URL}/admin/table-strategies/list", json={"token": token} ) if resp.status_code == 200: return render_template('strategies/list.html', strategies=resp.json()) else: flash("获取策略列表失败", "danger") except Exception as e: flash(f"网络错误: {str(e)}", "danger") return redirect(url_for('dashboard.index')) @strategies_bp.route('/strategies/create', methods=['POST']) def create_strategy(): if not session.get('token'): return redirect(url_for('auth.login')) try: # 从JSON请求体获取数据 request_data = request.get_json() strategy_data = request_data.get('strategy_data') print(strategy_data.get('strategy_name')) # 添加数据验证 if not strategy_data: flash("缺少策略数据", "danger") return redirect(url_for('strategies.list_strategies')) # 获取表单数据并转换为下划线格式 form_data = { "strategy_name": strategy_data.get('strategy_name'), "segment1_threshold": int(strategy_data.get('segment1_threshold')), "segment1_price": float(strategy_data.get('segment1_price')), "segment2_threshold": int(strategy_data.get('segment2_threshold')), "segment2_price": float(strategy_data.get('segment2_price')), "segment3_price": float(strategy_data.get('segment3_price')), "description": strategy_data.get('description'), "segment3_threshold": int(strategy_data['segment3_threshold']) if strategy_data.get( 'segment3_threshold') else None } resp = requests.post( f"{Config.BASE_API_URL}/admin/table-strategies/create", json={ "token": session['token'], "strategy_data": form_data } ) if resp.status_code == 200: flash("策略创建成功", "success") return {"status": "success"}, 200 else: error_msg = resp.json().get('detail', '未知错误') flash(f"创建失败: {error_msg}", "danger") except ValueError as e: flash(f"数据类型错误: {str(e)}", "danger") except Exception as e: flash(f"网络错误: {str(e)}", "danger") return redirect(url_for('strategies.list_strategies')) @strategies_bp.route('/strategies/delete/', methods=['POST']) def delete_strategy(strategy_id): if not session.get('token'): return redirect(url_for('auth.login')) try: resp = requests.post( f"{Config.BASE_API_URL}/admin/table-strategies/delete", json={ "token": session['token'], "strategy_id": strategy_id } ) if resp.status_code == 200: flash("策略删除成功", "success") return {"status": "success"}, 200 else: error_msg = resp.json().get('detail', '未知错误') flash(f"删除失败: {error_msg}", "danger") except Exception as e: flash(f"网络错误: {str(e)}", "danger") return redirect(url_for('strategies.list_strategies')) @strategies_bp.route('/strategies/bind_tables', methods=['POST']) def bind_tables(): if not session.get('token'): return {'status': 'error', 'message': '请先登录'}, 401 data = request.get_json() strategy_id = data.get('strategy_id') table_ids = data.get('table_ids') if not strategy_id or not table_ids: return {'status': 'error', 'message': '缺少必要参数'}, 400 try: resp = requests.post( f"{Config.BASE_API_URL}/admin/table-strategies/bind", json={ "token": session['token'], "strategy_id": strategy_id, "table_ids": table_ids } ) if resp.status_code == 200: return {'status': 'success', 'message': '绑定成功'} else: error_msg = resp.json().get('detail', '未知错误') return {'status': 'error', 'message': f'绑定失败: {error_msg}'}, resp.status_code except Exception as e: return {'status': 'error', 'message': f'网络错误: {str(e)}'}, 500