From a7c4b86d3112998ab3159791cd9e89eb2ba0971d Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期四, 26 二月 2026 14:26:03 +0800
Subject: [PATCH] #
---
zy-acs-flow/src/page/guarantee/CronField.jsx | 45 ++++++++++++++++++++++++++++++++++++++-------
zy-acs-flow/src/page/guarantee/GuaranteeEdit.jsx | 2 +-
zy-acs-flow/src/page/guarantee/GuaranteeList.jsx | 1 -
3 files changed, 39 insertions(+), 9 deletions(-)
diff --git a/zy-acs-flow/src/page/guarantee/CronField.jsx b/zy-acs-flow/src/page/guarantee/CronField.jsx
index 5517dc4..2ef55d3 100644
--- a/zy-acs-flow/src/page/guarantee/CronField.jsx
+++ b/zy-acs-flow/src/page/guarantee/CronField.jsx
@@ -12,6 +12,7 @@
ToggleButtonGroup,
Typography,
Chip,
+ Skeleton,
} from '@mui/material';
import Autocomplete from '@mui/material/Autocomplete';
import {
@@ -26,16 +27,34 @@
parseCronExpression,
} from './cronUtils';
-const CronField = ({ source = 'cronExpr', ...rest }) => {
+const CronField = ({ source = 'cronExpr', waitForValue = false, ...rest }) => {
const translate = useTranslate();
- const { field } = useInput({ source, defaultValue: DEFAULT_CRON_EXPRESSION, ...rest });
- const [state, setState] = useState(() => parseCronExpression(field.value || DEFAULT_CRON_EXPRESSION));
+ const inputConfig = waitForValue
+ ? { source, ...rest }
+ : { source, defaultValue: DEFAULT_CRON_EXPRESSION, ...rest };
+ const { field } = useInput(inputConfig);
+ const [state, setState] = useState(() =>
+ parseCronExpression(field.value || DEFAULT_CRON_EXPRESSION)
+ );
+ const [ready, setReady] = useState(!waitForValue);
+ const hasFieldValue = typeof field.value === 'string' && field.value.length > 0;
useEffect(() => {
- setState(parseCronExpression(field.value || DEFAULT_CRON_EXPRESSION));
- }, [field.value]);
+ if (!hasFieldValue) {
+ if (!waitForValue) {
+ setReady(true);
+ }
+ return;
+ }
+ const parsed = parseCronExpression(field.value);
+ setState(parsed);
+ setReady(true);
+ }, [hasFieldValue, field.value, waitForValue]);
useEffect(() => {
+ if (!state) {
+ return;
+ }
const cron = buildCronExpression(state);
if (cron !== field.value) {
field.onChange(cron);
@@ -71,8 +90,18 @@
setState((prev) => ({ ...prev, monthDays: newDays }));
};
- const cronExpression = useMemo(() => buildCronExpression(state), [state]);
- const description = useMemo(() => describeCronExpression(cronExpression, translate), [cronExpression, translate]);
+ const cronExpression = useMemo(
+ () => (state ? buildCronExpression(state) : DEFAULT_CRON_EXPRESSION),
+ [state]
+ );
+ const description = useMemo(
+ () => describeCronExpression(cronExpression, translate),
+ [cronExpression, translate]
+ );
+
+ if (!ready || !state) {
+ return <Skeleton variant="rectangular" height={180} sx={{ borderRadius: 1 }} />;
+ }
return (
<Stack spacing={2} sx={{ width: '100%' }}>
@@ -116,6 +145,8 @@
options={MONTH_DAY_OPTIONS}
value={state.monthDays || []}
onChange={handleMonthDaysChange}
+ getOptionLabel={(option) => option?.toString?.() || `${option}`}
+ isOptionEqualToValue={(option, value) => Number(option) === Number(value)}
renderTags={(value, getTagProps) =>
value.map((option, index) => (
<Chip
diff --git a/zy-acs-flow/src/page/guarantee/GuaranteeEdit.jsx b/zy-acs-flow/src/page/guarantee/GuaranteeEdit.jsx
index de91d66..d169608 100644
--- a/zy-acs-flow/src/page/guarantee/GuaranteeEdit.jsx
+++ b/zy-acs-flow/src/page/guarantee/GuaranteeEdit.jsx
@@ -54,7 +54,7 @@
autoFocus
/>
<ScopeField />
- <CronField />
+ <CronField waitForValue />
</Stack>
</Grid>
<Grid item xs={12} md={5}>
diff --git a/zy-acs-flow/src/page/guarantee/GuaranteeList.jsx b/zy-acs-flow/src/page/guarantee/GuaranteeList.jsx
index 4119633..cb14e9c 100644
--- a/zy-acs-flow/src/page/guarantee/GuaranteeList.jsx
+++ b/zy-acs-flow/src/page/guarantee/GuaranteeList.jsx
@@ -138,7 +138,6 @@
<StyledDatagrid
preferenceKey='guarantee'
bulkActionButtons={false}
- rowSelection="none"
rowClick={false}
omit={['createBy', 'memo']}
>
--
Gitblit v1.9.1