From 729de138cdcf790a56a7e6cdb631646467649415 Mon Sep 17 00:00:00 2001 From: duxingchen Date: Wed, 12 Aug 2026 14:43:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9C=A8=E5=88=B6=E5=93=81=E9=99=84?= =?UTF-8?q?=E5=8A=A0=E4=BF=A1=E6=81=AF=E8=A1=A5=E5=85=A8=20=E2=80=94=20?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=90=8D=E7=A7=B0|=E8=A7=84=E6=A0=BC?= =?UTF-8?q?=E5=9E=8B=E5=8F=B7|=E5=BA=8F=E5=88=97=E5=8F=B7|=E8=BA=AB?= =?UTF-8?q?=E4=BB=BD=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端: WipTask 新增 spec_model, 查询关联 Product.spec_model 前端: 第二行格式改为 物料|规格|序列号:xxx|身份证:xxx --- backend/app/services/dashboard_service.py | 10 ++++++---- frontend/src/pages/admin/AdminDashboard.tsx | 16 +++++++++------- frontend/src/services/dashboardApi.ts | 1 + 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/backend/app/services/dashboard_service.py b/backend/app/services/dashboard_service.py index 852491c..872ff81 100644 --- a/backend/app/services/dashboard_service.py +++ b/backend/app/services/dashboard_service.py @@ -28,9 +28,10 @@ class WipTask(BaseModel): task_id: str task_name: str assignee: str - product_sn: str + product_sn: str # 16位HEX身份证 external_serial: str | None # 业务序列号 - material_name: str # 物料名称 + material_name: str # 设备名称 + spec_model: str # 规格型号 status: str received_at: str duration_hours: float @@ -133,7 +134,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, Product.external_serial, Product.material_name) + select(Task, Product.serial_number, Product.external_serial, Product.material_name, Product.spec_model) .join(Product, Task.product_id == Product.id) .where(Task.status.in_([TASK_STATUS_PENDING, TASK_STATUS_WIP])) .limit(limit * 2) @@ -149,7 +150,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, ext_sn, mat_name in rows: + for task, product_sn, ext_sn, mat_name, spec in rows: start = task.received_at or task.created_at if start: if start.tzinfo is None: @@ -169,6 +170,7 @@ async def get_wip_tasks(db: AsyncSession, limit: int = 20) -> list[WipTask]: product_sn=product_sn or "", external_serial=ext_sn or None, material_name=mat_name or "", + spec_model=spec or "", 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 94b1845..f8414f4 100644 --- a/frontend/src/pages/admin/AdminDashboard.tsx +++ b/frontend/src/pages/admin/AdminDashboard.tsx @@ -86,8 +86,6 @@ function WipRow({ t }: { t: WipTask }) { window.open(`${base}/scan?sn=${t.product_sn}`, "_blank"); } }; - const sn = t.external_serial || "未录入"; - const trace = t.product_sn ? t.product_sn.slice(-6) : ""; return (
- {/* 附加信息行:物料名 + 序列号 + 身份证后6位 + 接收时间 */} -
- {t.material_name && {t.material_name}} - SN: {sn} - …{trace} + {/* 附加信息行 */} +
+ {t.material_name || "未知设备"} + | + {t.spec_model || "无规格"} + | + 序列号: {t.external_serial || "未录入"} + | + 身份证: {t.product_sn} {t.received_at && {t.received_at}}
diff --git a/frontend/src/services/dashboardApi.ts b/frontend/src/services/dashboardApi.ts index cb4398f..2813fc8 100644 --- a/frontend/src/services/dashboardApi.ts +++ b/frontend/src/services/dashboardApi.ts @@ -22,6 +22,7 @@ export interface WipTask { product_sn: string; external_serial: string | null; material_name: string; + spec_model: string; status: string; received_at: string; duration_hours: number;