dingdanquanliucheng/backend/app/api/sales_flow.py
taiyi f7dfc5d282 清除全系统模拟数据和演示数据,全面对接真实后端接口
- 删除 demo_store.py、web-admin/data.js、web-sales/data.js 三个模拟数据源
- 后端14个 service 文件:去除 session 为 None 时返回演示数据的 fallback 模式,统一改为抛出 AppException
- 前端 web-admin/web-sales 的 mockApi.js 改为通过 fetch() 调用真实后端 API
- 19个 Vue 组件:移除 isMock 标识、硬编码演示数据和模拟延迟逻辑
- 小程序 login.js 清除硬编码测试账号密码
- order_flow.sql 删除全部 INSERT 演示数据,仅保留建表结构

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 11:38:53 +08:00

69 lines
2.9 KiB
Python

from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from backend.app.api.deps import require_permissions, require_roles
from backend.app.db import get_db_session
from backend.app.schemas.common import success_payload
from backend.app.services.order_service import OrderService
router = APIRouter(prefix='/api/orders', tags=['sales-flow'])
@router.get('/flow-overview')
def flow_overview(
order_service: OrderService = Depends(),
session: Session = Depends(get_db_session),
current_user: dict = Depends(require_roles('salesman', 'manager', 'admin')),
_permission_user: dict = Depends(require_permissions('order:list')),
) -> dict:
orders = order_service.list_orders(session, order_service.normalize_list_filters({}, current_user))
detail_orders = [order_service.get_order(item['order_id'], session, current_user) for item in orders[:5]]
detail_orders = [item for item in detail_orders if item]
review_items = []
traces = []
ai_items = []
notices = []
for item in detail_orders:
if item.get('order_status') in {'pending_approve', 'approved'}:
review_items.append({
'orderNo': item.get('order_no'),
'customerName': item.get('customer_name'),
'amount': f"{item.get('sale_price_total', 0):.2f}",
})
trace_list = item.get('logistics_info', {}).get('trace_list', [])
for trace in trace_list[:2]:
traces.append({
'title': f"订单 {item.get('order_no')} 物流节点",
'detail': trace.get('node_desc') or trace.get('remark') or '物流节点更新',
'time': trace.get('node_time') or '',
})
for attach in item.get('attachments', [])[:1]:
ai_items.append({
'name': attach.get('file_name') or '识别附件',
'raw': item.get('customer_name', ''),
'corrected': item.get('customer_name', ''),
})
pending_count = sum(1 for item in orders if item.get('order_status') == 'pending_approve')
draft_count = sum(1 for item in orders if item.get('order_status') == 'draft')
fulfillment_count = sum(1 for item in orders if item.get('order_status') in {'approved', 'pending_factory', 'pending_delivery', 'delivering'})
return success_payload({
'orders': [
{
'order_no': item.get('order_no'),
'customer_name': item.get('customer_name'),
'order_status': item.get('order_status'),
'sale_price_total': item.get('sale_price_total', 0),
}
for item in orders[:10]
],
'review_items': review_items,
'traces': traces,
'ai_items': ai_items,
'notices': notices,
'stats': {
'draft': draft_count,
'pending': pending_count,
'fulfillment': fulfillment_count,
},
})