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;