From ecf983ba1fa2e8ca88ad9f5dff911b96a96faca4 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期日, 04 一月 2026 15:40:52 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/page/sta/StaPanel.jsx |   83 +++++++++++++++++++++++++++++++++++++----
 zy-acs-flow/src/i18n/zh.js            |    2 
 2 files changed, 75 insertions(+), 10 deletions(-)

diff --git a/zy-acs-flow/src/i18n/zh.js b/zy-acs-flow/src/i18n/zh.js
index dc0d1ec..9d0b60a 100644
--- a/zy-acs-flow/src/i18n/zh.js
+++ b/zy-acs-flow/src/i18n/zh.js
@@ -573,7 +573,7 @@
                 state: "棰勭害鐘舵��",
                 reason: "鍘熷洜",
                 expireTime: "杩囨湡鏃堕棿",
-                waitingAt: "寮�濮嬬瓑寰呮椂闂�",
+                waitingAt: "灏变綅鏃堕棿",
                 confirmedAt: "纭鏃堕棿",
                 cancelledAt: "鍙栨秷鏃堕棿",
                 uniqKey: "骞傜瓑閿�",
diff --git a/zy-acs-flow/src/page/sta/StaPanel.jsx b/zy-acs-flow/src/page/sta/StaPanel.jsx
index 905b8be..c65053f 100644
--- a/zy-acs-flow/src/page/sta/StaPanel.jsx
+++ b/zy-acs-flow/src/page/sta/StaPanel.jsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect } from "react";
+import React, { useState, useEffect, useMemo } from "react";
 import {
     Box,
     Card,
@@ -18,6 +18,7 @@
     useTranslate,
     useRecordContext,
     useDataProvider,
+    useGetMany,
 } from 'react-admin';
 import { format } from 'date-fns';
 import * as Common from '@/utils/common'
@@ -30,23 +31,43 @@
 ];
 
 const INFO_FIELDS = [
-    // { labelKey: 'table.field.sta.uuid', valueKey: 'uuid' },
     { labelKey: 'table.field.sta.zoneId', valueKey: 'zoneId$' },
     { labelKey: 'table.field.sta.staType', valueKey: 'staType$' },
     { labelKey: 'table.field.sta.code', valueKey: 'code$' },
     { labelKey: 'table.field.sta.capacity', valueKey: 'capacity' },
     { labelKey: 'table.field.sta.rsvInCnt', valueKey: 'rsvInCnt' },
     { labelKey: 'table.field.sta.rsvOutCnt', valueKey: 'rsvOutCnt' },
-    // { labelKey: 'table.field.sta.staSts', valueKey: 'staSts$' },
     { labelKey: 'table.field.sta.offset', valueKey: 'offset' },
     { labelKey: 'table.field.sta.zpallet', valueKey: 'zpallet' },
 ];
+
+const RESERVE_COLUMN_COUNT = 11;
 const StaPanel = () => {
     const record = useRecordContext();
     const translate = useTranslate();
     const dataProvider = useDataProvider();
     const [reserves, setReserves] = useState([]);
     const [isReservesLoading, setIsReservesLoading] = useState(false);
+    const taskIds = useMemo(() => extractIds(reserves, 'taskId'), [reserves]);
+    const segmentIds = useMemo(() => extractIds(reserves, 'segmentId'), [reserves]);
+    const agvIds = useMemo(() => extractIds(reserves, 'agvId'), [reserves]);
+
+    const { data: taskRecords = [] } = useGetMany('task', { ids: taskIds }, { enabled: taskIds.length > 0 });
+    const { data: segmentRecords = [] } = useGetMany('segment', { ids: segmentIds }, { enabled: segmentIds.length > 0 });
+    const { data: agvRecords = [] } = useGetMany('agv', { ids: agvIds }, { enabled: agvIds.length > 0 });
+
+    const taskLabelMap = useMemo(
+        () => createLabelMap(taskRecords, (item) => item.seqNum),
+        [taskRecords]
+    );
+    const segmentLabelMap = useMemo(
+        () => createLabelMap(segmentRecords, (item) => item.groupId + '-' + item.serial),
+        [segmentRecords]
+    );
+    const agvLabelMap = useMemo(
+        () => createLabelMap(agvRecords, (item) => item.uuid),
+        [agvRecords]
+    );
 
     useEffect(() => {
         if (!record?.id) {
@@ -133,19 +154,23 @@
                         <Table size="small">
                             <TableHead>
                                 <TableRow>
-                                    <TableCell>{translate('table.field.staReserve.name')}</TableCell>
+                                    <TableCell>{translate('table.field.staReserve.uuid')}</TableCell>
+                                    <TableCell>{translate('table.field.staReserve.taskId')}</TableCell>
+                                    <TableCell>{translate('table.field.staReserve.segmentId')}</TableCell>
+                                    <TableCell>{translate('table.field.staReserve.agvId')}</TableCell>
                                     <TableCell>{translate('table.field.staReserve.type')}</TableCell>
                                     <TableCellRight>{translate('table.field.staReserve.qty')}</TableCellRight>
                                     <TableCell>{translate('table.field.staReserve.state')}</TableCell>
-                                    <TableCell>{translate('table.field.staReserve.agvId')}</TableCell>
+                                    <TableCell>{translate('table.field.staReserve.expireTime')}</TableCell>
                                     <TableCell>{translate('table.field.staReserve.waitingAt')}</TableCell>
                                     <TableCell>{translate('table.field.staReserve.confirmedAt')}</TableCell>
+                                    <TableCell>{translate('table.field.staReserve.uniqKey')}</TableCell>
                                 </TableRow>
                             </TableHead>
                             <TableBody>
                                 {isReservesLoading && (
                                     <TableRow>
-                                        <TableCell colSpan={7}>
+                                        <TableCell colSpan={RESERVE_COLUMN_COUNT}>
                                             <Box display="flex" alignItems="center" gap={1}>
                                                 <CircularProgress size={16} />
                                                 <Typography variant="body2" color="textSecondary">
@@ -157,7 +182,7 @@
                                 )}
                                 {!isReservesLoading && reserves.length === 0 && (
                                     <TableRow>
-                                        <TableCell colSpan={7}>
+                                        <TableCell colSpan={RESERVE_COLUMN_COUNT}>
                                             <Typography variant="body2" color="textSecondary">
                                                 {translate('ra.navigation.no_results')}
                                             </Typography>
@@ -166,13 +191,17 @@
                                 )}
                                 {reserves.map((reserve) => (
                                     <TableRow key={reserve.id}>
-                                        <TableCell>{reserve.name || '-'}</TableCell>
+                                        <TableCell>{reserve.uuid || '-'}</TableCell>
+                                        <TableCell>{getReferenceLabel(taskLabelMap, reserve.taskId)}</TableCell>
+                                        <TableCell>{getReferenceLabel(segmentLabelMap, reserve.segmentId)}</TableCell>
+                                        <TableCell>{getReferenceLabel(agvLabelMap, reserve.agvId)}</TableCell>
                                         <TableCell>{formatReserveType(reserve.type, translate)}</TableCell>
                                         <TableCellRight>{reserve.qty ?? '-'}</TableCellRight>
                                         <TableCell>{formatReserveState(reserve.state, translate)}</TableCell>
-                                        <TableCell>{reserve.agvId$ || reserve.agvId || '-'}</TableCell>
+                                        <TableCell>{formatDateTime(reserve.expireTime)}</TableCell>
                                         <TableCell>{formatDateTime(reserve.waitingAt)}</TableCell>
                                         <TableCell>{formatDateTime(reserve.confirmedAt)}</TableCell>
+                                        <TableCell>{reserve.uniqKey || '-'}</TableCell>
                                     </TableRow>
                                 ))}
                             </TableBody>
@@ -279,6 +308,37 @@
     return String(value);
 };
 
+const extractIds = (items, key) => {
+    if (!items || items.length === 0) return [];
+    const unique = new Set();
+    items.forEach((item) => {
+        const value = item?.[key];
+        if (value !== undefined && value !== null && value !== '') {
+            unique.add(value);
+        }
+    });
+    return Array.from(unique);
+};
+
+const createLabelMap = (records, getLabel) => {
+    if (!records || records.length === 0) return {};
+    return records.reduce((acc, record) => {
+        if (record?.id === undefined || record?.id === null) {
+            return acc;
+        }
+        const label = getLabel(record);
+        acc[record.id] = label ?? record.id;
+        return acc;
+    }, {});
+};
+
+const getReferenceLabel = (map, id) => {
+    if (id === undefined || id === null || id === '') {
+        return '-';
+    }
+    return map?.[id] || id;
+};
+
 const formatReserveType = (value, translate) =>
     formatReserveEnum(value, translate, 'type');
 
@@ -287,6 +347,11 @@
         cancelled: 'canceled',
     });
 
+const getReserveRelationValue = (reserve, key) => {
+    if (!reserve) return '-';
+    return reserve[`${key}$`] || reserve[key] || '-';
+};
+
 const formatReserveEnum = (value, translate, enumType, overrides = {}) => {
     const normalized = normalizeValueKey(value);
     if (!normalized) {

--
Gitblit v1.9.1