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