2025-03-10 08:35:19 +08:00

120 lines
3.6 KiB
Python

from flask import Blueprint, render_template, session, redirect, url_for, flash, jsonify
import requests
from frontend.config import Config
from flask import request
orders_bp = Blueprint('orders', __name__, url_prefix='/orders')
@orders_bp.route('/')
def index():
if not session.get('token'):
flash("请先登录", "warning")
return redirect(url_for('auth.login'))
return render_template('orders.html', page=1)
@orders_bp.route('/list')
def list_orders():
if not session.get('token'):
flash("请先登录", "warning")
return redirect(url_for('auth.login'))
status = request.args.get('status', 'in_progress')
per_page = 20
page = int(request.args.get('page', 1))
# 调用后端API
payload = {
"token": session['token'],
"order_status": status,
"start": (page - 1) * per_page + 1,
"end": page * per_page
}
response = requests.post(
f"{Config.BASE_API_URL}/admin/orders/query",
json=payload
)
if response.status_code == 200:
# 修正数据解析方式
response_data = response.json()
orders = response_data.get("orders", []) # 获取订单列表
total_orders = response_data.get("total", 0) # 获取总数
# 修正分页计算逻辑
import math
total_pages = math.ceil(total_orders / per_page) if total_orders > 0 else 1
return render_template('_order_table.html',
orders=orders,
page=page,
total_pages=total_pages,
status=status)
flash("获取订单失败", "danger")
return redirect(url_for('orders.list_orders'))
@orders_bp.route('/complete/<int:order_id>', methods=['PUT'])
def complete_order(order_id):
"""处理订单完成请求"""
if not session.get('token'):
return jsonify({"error": "未授权"}), 401
# 获取前端参数
data = request.get_json()
payload = {
"token": session['token'],
"order_id": order_id,
"end_datetime": data.get('end_datetime').replace(" ", "T")
}
# 调用后端API
backend_response = requests.put(
f"{Config.BASE_API_URL}/admin/orders/{order_id}/complete",
json=payload
)
return jsonify(backend_response.json()), backend_response.status_code
@orders_bp.route('/settle/<int:order_id>', methods=['PUT'])
def settle_order(order_id):
"""处理订单结算请求"""
if not session.get('token'):
return jsonify({"error": "未授权"}), 401
data = request.get_json()
payload = {
"token": session['token'],
"order_id": order_id,
"used_points": data.get('used_points', 0),
"coupon_id": data.get('coupon_id')
}
backend_response = requests.put(
f"{Config.BASE_API_URL}/admin/orders/{order_id}/settle",
json=payload
)
return jsonify(backend_response.json()), backend_response.status_code
@orders_bp.route('/details/<int:order_id>', methods=['GET'])
def get_order_details(order_id):
"""获取订单详情"""
if not session.get('token'):
return jsonify({"error": "未授权"}), 401
try:
payload = {
"token": session['token'],
"order_id": order_id
}
# 调用后端API
backend_response = requests.post(
f"{Config.BASE_API_URL}/admin/orders/details",
json=payload
)
return jsonify(backend_response.json()), backend_response.status_code
except Exception as e:
return jsonify({"error": str(e)}), 500