From 1bc33546a044cbc84dd9595c19dbcd9a4e309fc9 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期六, 10 一月 2026 14:06:10 +0800
Subject: [PATCH] #
---
zy-acs-flow/src/page/sta/StaPanel.jsx | 73 ++++++++++++++++++++++++++++++++++--
1 files changed, 68 insertions(+), 5 deletions(-)
diff --git a/zy-acs-flow/src/page/sta/StaPanel.jsx b/zy-acs-flow/src/page/sta/StaPanel.jsx
index c65053f..b247569 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.deselect')}
+ </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.deselect')}
+ </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>
@@ -260,7 +323,7 @@
height: 14,
borderRadius: '50%',
backgroundColor: color,
- boxShadow: `0 0 6px ${color}`,
+ boxShadow: `0 0 3px ${color}`,
border: '1px solid rgba(0,0,0,0.12)'
}} />
<Typography variant="body2">
@@ -278,7 +341,7 @@
if (isFalsy(value)) {
return '#9e9e9e';
}
- return '#ff9800';
+ return '#d40000ff';
};
const isTruthy = (value) => {
@@ -336,7 +399,7 @@
if (id === undefined || id === null || id === '') {
return '-';
}
- return map?.[id] || id;
+ return map?.[id] || '-';
};
const formatReserveType = (value, translate) =>
--
Gitblit v1.9.1