From 079b65e76159acabaeb0c0e78359fd5510519c20 Mon Sep 17 00:00:00 2001 From: duxingchen Date: Wed, 12 Aug 2026 14:23:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9C=A8=E5=88=B6=E5=93=81=E5=8A=A0?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=BA=8F=E5=88=97=E5=8F=B7=20+=20=E8=BF=BD?= =?UTF-8?q?=E6=BA=AF=E7=A0=81=E6=94=B9=E5=90=8D=E4=B8=BA=E8=BA=AB=E4=BB=BD?= =?UTF-8?q?=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 在制品行: 显示 external_serial(业务序列号) 优先 external_serial → 兜底 product_sn 旧: 装配 A1B2C3D4 张三 新: 装配 25022 张三 2. 留言板: 追溯码 → 身份证 旧: 追溯码: 000000000000000D 新: 身份证: 000000000000000D 3. 后端: WipTask 新增 external_serial 字段 关联查询 Product.external_serial --- backend/app/services/dashboard_service.py | 6 ++++-- frontend/src/pages/admin/AdminDashboard.tsx | 6 ++++-- frontend/src/services/dashboardApi.ts | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/backend/app/services/dashboard_service.py b/backend/app/services/dashboard_service.py index 67177d6..a06d7ae 100644 --- a/backend/app/services/dashboard_service.py +++ b/backend/app/services/dashboard_service.py @@ -29,6 +29,7 @@ class WipTask(BaseModel): task_name: str assignee: str product_sn: str + external_serial: str | None # 业务序列号 status: str received_at: str duration_hours: float @@ -131,7 +132,7 @@ async def get_wip_tasks(db: AsyncSession, limit: int = 20) -> list[WipTask]: from app.core.time_utils import get_beijing_time, BEIJING_TZ stmt = ( - select(Task, Product.serial_number) + select(Task, Product.serial_number, Product.external_serial) .join(Product, Task.product_id == Product.id) .where(Task.status.in_([TASK_STATUS_PENDING, TASK_STATUS_WIP])) .limit(limit * 2) # 多取一些,后面 Python 统一排序 @@ -147,7 +148,7 @@ async def get_wip_tasks(db: AsyncSession, limit: int = 20) -> list[WipTask]: now = get_beijing_time() wip_list: list[WipTask] = [] - for task, product_sn in rows: + for task, product_sn, ext_sn in rows: start = task.received_at or task.created_at if start: if start.tzinfo is None: @@ -165,6 +166,7 @@ async def get_wip_tasks(db: AsyncSession, limit: int = 20) -> list[WipTask]: task_name=task.task_name, assignee=name_map.get(task.assignee_id or "", task.assignee_id or "未分配"), product_sn=product_sn or "", + external_serial=ext_sn or None, status=task.status, received_at=recv_str, duration_hours=hours, diff --git a/frontend/src/pages/admin/AdminDashboard.tsx b/frontend/src/pages/admin/AdminDashboard.tsx index de6bf73..e5b6cb5 100644 --- a/frontend/src/pages/admin/AdminDashboard.tsx +++ b/frontend/src/pages/admin/AdminDashboard.tsx @@ -89,7 +89,9 @@ function WipRow({ t }: { t: WipTask }) {
{t.task_name} - {t.product_sn} + + {t.external_serial || t.product_sn} + {t.assignee}
@@ -135,7 +137,7 @@ function MsgRow({ m }: { m: ProductMessageItem }) { {m.external_serial || "未录入"} )} - 追溯码: {m.product_sn} + 身份证: {m.product_sn}
diff --git a/frontend/src/services/dashboardApi.ts b/frontend/src/services/dashboardApi.ts index 506b12a..d2769b6 100644 --- a/frontend/src/services/dashboardApi.ts +++ b/frontend/src/services/dashboardApi.ts @@ -20,6 +20,7 @@ export interface WipTask { task_name: string; assignee: string; product_sn: string; + external_serial: string | null; status: string; received_at: string; duration_hours: number;