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/', 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/', 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/', 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