table_game/frontend/routes/strategies.py
2025-03-20 04:41:04 +08:00

130 lines
4.7 KiB
Python

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/<int:strategy_id>', 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