130 lines
4.7 KiB
Python
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
|