From ff7c791d49ad99a45866260baa42bb8b0b0d0fe2 Mon Sep 17 00:00:00 2001 From: duxingchen Date: Wed, 12 Aug 2026 14:20:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=95=99=E8=A8=80=E6=9D=BF=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E4=B8=9A=E5=8A=A1=E5=BA=8F=E5=88=97=E5=8F=B7=E4=B8=8E?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=BF=BD=E6=BA=AF=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 语义修正: Product.serial_number = 16位HEX系统追溯码(如000000000000000D) Product.external_serial = 业务产品序列号(如25022) 后端: - ProductMessageItem 新增 external_serial 字段 - search_product_messages 关联查询 Product.external_serial - 关键词搜索也支持按 external_serial 匹配 前端显示: 样品升降台V1J · 序列号: 25022 ← 醒目 追溯码: 000000000000000D ← 10px浅灰小字 --- backend/app/services/dashboard_service.py | 17 ++++++++++------- frontend/src/pages/admin/AdminDashboard.tsx | 10 +++++++--- frontend/src/services/dashboardApi.ts | 1 + 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/backend/app/services/dashboard_service.py b/backend/app/services/dashboard_service.py index 5b24589..67177d6 100644 --- a/backend/app/services/dashboard_service.py +++ b/backend/app/services/dashboard_service.py @@ -37,10 +37,11 @@ class WipTask(BaseModel): class ProductMessageItem(BaseModel): id: str content: str - operator_name: str # 留言人中文姓名 - product_sn: str # 16位SN - material_name: str # 物料名称 - created_at: str # ISO时间字符串 + operator_name: str # 留言人中文姓名 + product_sn: str # 16位HEX系统追溯码 + external_serial: str | None # 业务产品序列号(如 25022) + material_name: str # 物料名称 + created_at: str # ISO时间字符串 class ProductMessageList(BaseModel): @@ -194,9 +195,9 @@ async def search_product_messages( from app.models.product import Product from app.core.time_utils import BEIJING_TZ - # 基础查询 + # 基础查询 — 同时取出 16位追溯码 + 业务序列号 stmt = ( - select(ProductMessage, Product.serial_number, Product.material_name) + select(ProductMessage, Product.serial_number, Product.material_name, Product.external_serial) .join(Product, ProductMessage.product_id == Product.id) ) @@ -205,6 +206,7 @@ async def search_product_messages( kw = f"%{keyword.strip()}%" stmt = stmt.where(or_( Product.serial_number.ilike(kw), + Product.external_serial.ilike(kw), Product.material_name.ilike(kw), ProductMessage.operator_id.ilike(kw), ProductMessage.content.ilike(kw), @@ -227,7 +229,7 @@ async def search_product_messages( name_map = get_display_names(raw_ids) items: list[ProductMessageItem] = [] - for msg, sn, mat_name in rows: + for msg, sn, mat_name, ext_sn in rows: t = msg.created_at if t: if t.tzinfo is None: @@ -243,6 +245,7 @@ async def search_product_messages( content=msg.content, operator_name=name_map.get(msg.operator_id, msg.operator_id), product_sn=sn or "", + external_serial=ext_sn or None, material_name=mat_name or "", created_at=time_str, )) diff --git a/frontend/src/pages/admin/AdminDashboard.tsx b/frontend/src/pages/admin/AdminDashboard.tsx index ff1ca29..de6bf73 100644 --- a/frontend/src/pages/admin/AdminDashboard.tsx +++ b/frontend/src/pages/admin/AdminDashboard.tsx @@ -127,11 +127,15 @@ function MsgRow({ m }: { m: ProductMessageItem }) { {t}

{m.content}

-
+
{m.material_name && ( - {m.material_name} + + {m.material_name} + · 序列号: + {m.external_serial || "未录入"} + )} - (SN: {m.product_sn}) + 追溯码: {m.product_sn}
diff --git a/frontend/src/services/dashboardApi.ts b/frontend/src/services/dashboardApi.ts index e9ee433..506b12a 100644 --- a/frontend/src/services/dashboardApi.ts +++ b/frontend/src/services/dashboardApi.ts @@ -30,6 +30,7 @@ export interface ProductMessageItem { content: string; operator_name: string; product_sn: string; + external_serial: string | null; material_name: string; created_at: string; }