From 75f3cd29a2006eb70bfc8cb47e3e4d780fc75b0b Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期日, 04 一月 2026 16:29:30 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/page/sta/StaPanel.jsx |   67 ++++++++++++++++++++++++++++++++-
 1 files changed, 65 insertions(+), 2 deletions(-)

diff --git a/zy-acs-flow/src/page/sta/StaPanel.jsx b/zy-acs-flow/src/page/sta/StaPanel.jsx
index 7bd1e09..2534540 100644
--- a/zy-acs-flow/src/page/sta/StaPanel.jsx
+++ b/zy-acs-flow/src/page/sta/StaPanel.jsx
@@ -13,6 +13,10 @@
     Divider,
     CircularProgress,
     Stack,
+    FormControl,
+    InputLabel,
+    Select,
+    MenuItem,
 } from '@mui/material';
 import {
     useTranslate,
@@ -42,12 +46,16 @@
 ];
 
 const RESERVE_COLUMN_COUNT = 11;
+const RESERVE_TYPE_OPTIONS = ['IN', 'OUT'];
+const RESERVE_STATE_OPTIONS = ['reserved', 'waiting', 'confirmed', 'canceled', 'timeout'];
 const StaPanel = () => {
     const record = useRecordContext();
     const translate = useTranslate();
     const dataProvider = useDataProvider();
     const [reserves, setReserves] = useState([]);
     const [isReservesLoading, setIsReservesLoading] = useState(false);
+    const [typeFilter, setTypeFilter] = useState('');
+    const [stateFilter, setStateFilter] = useState('');
     const taskIds = useMemo(() => extractIds(reserves, 'taskId'), [reserves]);
     const segmentIds = useMemo(() => extractIds(reserves, 'segmentId'), [reserves]);
     const agvIds = useMemo(() => extractIds(reserves, 'agvId'), [reserves]);
@@ -68,6 +76,19 @@
         () => createLabelMap(agvRecords, (item) => item.uuid),
         [agvRecords]
     );
+
+    const filteredReserves = useMemo(() => {
+        if (!typeFilter && !stateFilter) {
+            return reserves;
+        }
+        return reserves.filter((reserve) => {
+            const matchesType =
+                !typeFilter || normalizeValueKey(reserve?.type) === normalizeValueKey(typeFilter);
+            const matchesState =
+                !stateFilter || normalizeValueKey(reserve?.state) === normalizeValueKey(stateFilter);
+            return matchesType && matchesState;
+        });
+    }, [reserves, typeFilter, stateFilter]);
 
     useEffect(() => {
         if (!record?.id) {
@@ -151,6 +172,48 @@
                         <Typography variant="subtitle1" gutterBottom>
                             {translate('menu.staReserve')}
                         </Typography>
+                        <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2} mb={2}>
+                            <FormControl size="small" sx={{ minWidth: 160 }}>
+                                <InputLabel id="sta-panel-reserve-type-label">
+                                    {translate('table.field.staReserve.type')}
+                                </InputLabel>
+                                <Select
+                                    labelId="sta-panel-reserve-type-label"
+                                    value={typeFilter}
+                                    label={translate('table.field.staReserve.type')}
+                                    onChange={(event) => setTypeFilter(event.target.value)}
+                                >
+                                    <MenuItem value="">
+                                        {translate('common.action.reset')}
+                                    </MenuItem>
+                                    {RESERVE_TYPE_OPTIONS.map((option) => (
+                                        <MenuItem key={option} value={option}>
+                                            {formatReserveType(option, translate)}
+                                        </MenuItem>
+                                    ))}
+                                </Select>
+                            </FormControl>
+                            <FormControl size="small" sx={{ minWidth: 160 }}>
+                                <InputLabel id="sta-panel-reserve-state-label">
+                                    {translate('table.field.staReserve.state')}
+                                </InputLabel>
+                                <Select
+                                    labelId="sta-panel-reserve-state-label"
+                                    value={stateFilter}
+                                    label={translate('table.field.staReserve.state')}
+                                    onChange={(event) => setStateFilter(event.target.value)}
+                                >
+                                    <MenuItem value="">
+                                        {translate('common.action.reset')}
+                                    </MenuItem>
+                                    {RESERVE_STATE_OPTIONS.map((option) => (
+                                        <MenuItem key={option} value={option}>
+                                            {formatReserveState(option, translate)}
+                                        </MenuItem>
+                                    ))}
+                                </Select>
+                            </FormControl>
+                        </Stack>
                         <Table size="small">
                             <TableHead>
                                 <TableRow>
@@ -180,7 +243,7 @@
                                         </TableCell>
                                     </TableRow>
                                 )}
-                                {!isReservesLoading && reserves.length === 0 && (
+                                {!isReservesLoading && filteredReserves.length === 0 && (
                                     <TableRow>
                                         <TableCell colSpan={RESERVE_COLUMN_COUNT}>
                                             <Typography variant="body2" color="textSecondary">
@@ -189,7 +252,7 @@
                                         </TableCell>
                                     </TableRow>
                                 )}
-                                {reserves.map((reserve) => (
+                                {filteredReserves.map((reserve) => (
                                     <TableRow key={reserve.id}>
                                         <TableCell>{reserve.uuid || '-'}</TableCell>
                                         <TableCell>{getReferenceLabel(taskLabelMap, reserve.taskId)}</TableCell>

--
Gitblit v1.9.1