From 8dfcfee645b874b785e39bc33c578ba4e1e9a38b Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期二, 10 二月 2026 09:43:10 +0800
Subject: [PATCH] Merge branch 'rcs_master' into ctu_conveyor
---
zy-acs-flow/src/page/integrationRecord/IntegrationRecordList.jsx | 192 ++++++++++++++++++++++++++++-------------------
1 files changed, 115 insertions(+), 77 deletions(-)
diff --git a/zy-acs-flow/src/page/integrationRecord/IntegrationRecordList.jsx b/zy-acs-flow/src/page/integrationRecord/IntegrationRecordList.jsx
index ddd87d2..8d6e450 100644
--- a/zy-acs-flow/src/page/integrationRecord/IntegrationRecordList.jsx
+++ b/zy-acs-flow/src/page/integrationRecord/IntegrationRecordList.jsx
@@ -1,48 +1,32 @@
-import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
-import { useNavigate } from 'react-router-dom';
+import React, { useState, useMemo } from "react";
import {
List,
DatagridConfigurable,
SearchInput,
TopToolbar,
SelectColumnsButton,
- EditButton,
FilterButton,
- CreateButton,
- ExportButton,
- BulkDeleteButton,
- WrapperField,
- useRecordContext,
useTranslate,
- useNotify,
- useListContext,
- FunctionField,
+ useRecordContext,
TextField,
NumberField,
DateField,
- BooleanField,
- ReferenceField,
TextInput,
- DateTimeInput,
DateInput,
SelectInput,
- NumberInput,
- ReferenceInput,
- ReferenceArrayInput,
- AutocompleteInput,
- DeleteButton,
} from 'react-admin';
-import { Box, Typography, Card, Stack } from '@mui/material';
+import { Box, Chip } from '@mui/material';
import { styled } from '@mui/material/styles';
import IntegrationRecordCreate from "./IntegrationRecordCreate";
-import IntegrationRecordPanel from "./IntegrationRecordPanel";
+import IntegrationRecordDetail from "./IntegrationRecordDetail";
import EmptyDataLoader from "../components/EmptyDataLoader";
import MyCreateButton from "../components/MyCreateButton";
import MyExportButton from '../components/MyExportButton';
import PageDrawer from "../components/PageDrawer";
-import MyField from "../components/MyField";
-import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
-import * as Common from '@/utils/common';
+import { PAGE_DRAWER_WIDTH, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import { format } from 'date-fns';
+import rowSx from './rowSx';
+import { buildDirectionChoices, getDirectionLabel } from './direction';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
'& .css-1vooibu-MuiSvgIcon-root': {
@@ -51,46 +35,67 @@
'& .RaDatagrid-row': {
cursor: 'auto'
},
- '& .column-name': {
+ '& .column-url': {
+ maxWidth: '16em',
+ overflow: 'hidden',
+ textOverflow: 'ellipsis',
+ whiteSpace: 'nowrap',
+ },
+ '& .column-request': {
+ maxWidth: '18em',
+ overflow: 'hidden',
+ textOverflow: 'ellipsis',
+ whiteSpace: 'nowrap',
+ },
+ '& .column-response': {
+ maxWidth: '18em',
+ overflow: 'hidden',
+ textOverflow: 'ellipsis',
+ whiteSpace: 'nowrap',
+ },
+ '& .column-costMs': {
+ maxWidth: '9em',
},
'& .opt': {
width: 200
},
+ '& .RaDatagrid-thead': {
+ borderLeftColor: 'transparent',
+ borderLeftWidth: 5,
+ borderLeftStyle: 'solid',
+ },
}));
-
-const filters = [
- <SearchInput source="condition" alwaysOn />,
- <DateInput label='common.time.after' source="timeStart" alwaysOn />,
- <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
-
- <TextInput source="uuid" label="table.field.integrationRecord.uuid" />,
- <TextInput source="namespace" label="table.field.integrationRecord.namespace" />,
- <TextInput source="url" label="table.field.integrationRecord.url" />,
- <TextInput source="appkey" label="table.field.integrationRecord.appkey" />,
- <TextInput source="caller" label="table.field.integrationRecord.caller" />,
- <SelectInput source="direction" label="table.field.integrationRecord.direction"
- choices={[
- { id: 1, name: '琚皟鐢�' },
- { id: 2, name: '璋冪敤澶栭儴' },
- ]}
- />,
- <TextInput source="timestamp" label="table.field.integrationRecord.timestamp" />,
- <TextInput source="clientIp" label="table.field.integrationRecord.clientIp" />,
- <SelectInput source="result" label="table.field.integrationRecord.result"
- choices={[
- { id: 1, name: '鎴愬姛' },
- { id: 0, name: '澶辫触' },
- ]}
- />,
-
- <TextInput label="common.field.memo" source="memo" />,
-]
const IntegrationRecordList = () => {
const translate = useTranslate();
-
const [createDialog, setCreateDialog] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
+ const directionChoices = useMemo(() => buildDirectionChoices(translate), [translate]);
+ const filters = useMemo(() => [
+ <SearchInput source="condition" alwaysOn />,
+ <DateInput label='common.time.after' source="timeStart" alwaysOn />,
+ <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
+ <TextInput source="uuid" label="table.field.integrationRecord.uuid" />,
+ <TextInput source="namespace" label="table.field.integrationRecord.namespace" />,
+ <TextInput source="url" label="table.field.integrationRecord.url" />,
+ <TextInput source="appkey" label="table.field.integrationRecord.appkey" />,
+ <TextInput source="caller" label="table.field.integrationRecord.caller" />,
+ <SelectInput source="direction"
+ label="table.field.integrationRecord.direction"
+ choices={directionChoices}
+ alwaysOn
+ />,
+ // <TextInput source="timestamp" label="table.field.integrationRecord.timestamp" />,
+ <TextInput source="clientIp" label="table.field.integrationRecord.clientIp" />,
+ <SelectInput source="result" label="table.field.integrationRecord.result"
+ choices={[
+ { id: 1, name: 'common.enums.success' },
+ { id: 0, name: 'common.enums.failure' },
+ ]}
+ alwaysOn
+ />,
+ <TextInput label="common.field.memo" source="memo" />,
+ ], [directionChoices]);
return (
<Box display="flex">
@@ -110,7 +115,6 @@
actions={(
<TopToolbar>
<FilterButton />
- <MyCreateButton onClick={() => { setCreateDialog(true) }} />
<SelectColumnsButton preferenceKey='integrationRecord' />
<MyExportButton />
</TopToolbar>
@@ -119,11 +123,13 @@
>
<StyledDatagrid
preferenceKey='integrationRecord'
- bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
- rowClick={(id, resource, record) => false}
- expand={() => <IntegrationRecordPanel />}
- expandSingle={true}
- omit={['id', 'createTime', 'createBy', 'memo']}
+ bulkActionButtons={false}
+ rowClick={(id, resource, record) => {
+ setDrawerVal(!!drawerVal && drawerVal === record ? null : record);
+ return false;
+ }}
+ omit={['id', 'uuid', 'appkey', 'direction', 'timestamp', 'updateTime', 'memo']}
+ rowSx={rowSx(drawerVal || null)}
>
<NumberField source="id" />
<TextField source="uuid" label="table.field.integrationRecord.uuid" />
@@ -131,29 +137,19 @@
<TextField source="url" label="table.field.integrationRecord.url" />
<TextField source="appkey" label="table.field.integrationRecord.appkey" />
<TextField source="caller" label="table.field.integrationRecord.caller" />
- <TextField source="direction$" label="table.field.integrationRecord.direction" sortable={false} />
- <TextField source="timestamp" label="table.field.integrationRecord.timestamp" />
+ <DirectionField source="direction" label="table.field.integrationRecord.direction" sortable={false} />
+ <FormattedTimestampField source="timestamp" label="table.field.integrationRecord.timestamp" />
<TextField source="clientIp" label="table.field.integrationRecord.clientIp" />
- <TextField source="request" label="table.field.integrationRecord.request" />
- <TextField source="response" label="table.field.integrationRecord.response" />
+ <TextField source="request" label="table.field.integrationRecord.request" sortable={false} hidden={!!drawerVal} />
+ <TextField source="response" label="table.field.integrationRecord.response" sortable={false} hidden={!!drawerVal} />
+ <ResultField source="result" label="table.field.integrationRecord.result" sortable={false} />
<TextField source="err" label="table.field.integrationRecord.err" />
- <TextField source="result$" label="table.field.integrationRecord.result" sortable={false} />
- <NumberField source="costMs" label="table.field.integrationRecord.costMs" />
+ <NumberField source="costMs" label="table.field.integrationRecord.costMs" sx={{ fontWeight: 'bold' }} />
- <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
- <TextField source="nickname" />
- </ReferenceField>
<DateField source="updateTime" label="common.field.updateTime" showTime />
- <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
- <TextField source="nickname" />
- </ReferenceField>
<DateField source="createTime" label="common.field.createTime" showTime />
- <BooleanField source="statusBool" label="common.field.status" sortable={false} />
+ {/* <BooleanField source="statusBool" label="common.field.status" sortable={false} /> */}
<TextField source="memo" label="common.field.memo" sortable={false} />
- <WrapperField cellClassName="opt" label="common.field.opt">
- <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
- <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
- </WrapperField>
</StyledDatagrid>
</List>
<IntegrationRecordCreate
@@ -165,9 +161,51 @@
drawerVal={drawerVal}
setDrawerVal={setDrawerVal}
>
+ <IntegrationRecordDetail integration={drawerVal} />
</PageDrawer>
</Box>
)
}
+const FormattedTimestampField = ({ source }) => {
+ const record = useRecordContext();
+ if (!record) return null;
+ const val = record[source];
+ if (!val) return null;
+ const formattedDate = format(new Date(Number(val)), 'yyyy-MM-dd HH:mm:ss');
+ return <span>{formattedDate}</span>;
+};
+
+const ResultField = ({ source }) => {
+ const translate = useTranslate();
+ const record = useRecordContext();
+ const val = record?.[source];
+ return (
+ <>
+ {val === 1 ? (
+ <Chip label={translate("common.enums.success")} color="success" variant="outlined" size="small" />
+ ) : (
+ <Chip label={translate("common.enums.failure")} color="error" variant="outlined" size="small" />
+ )}
+ </>
+ );
+};
+
+const DirectionField = ({ source }) => {
+ const record = useRecordContext();
+ const translate = useTranslate();
+ const val = record?.[source];
+ if (val === undefined || val === null) {
+ return null;
+ }
+ return (
+ <Chip
+ label={getDirectionLabel(translate, val)}
+ variant="outlined"
+ size="small"
+ color="info"
+ />
+ );
+};
+
export default IntegrationRecordList;
--
Gitblit v1.9.1