From 603eb58446847ace3ff0c0350723078f656fbaf1 Mon Sep 17 00:00:00 2001
From: whycq <913841844@qq.com>
Date: 星期五, 21 二月 2025 15:44:04 +0800
Subject: [PATCH] #
---
rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList copy.jsx | 156 +++++++++++
rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx | 209 ++++++++++----
rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx | 447 ++++++++++++++++++++++---------
3 files changed, 614 insertions(+), 198 deletions(-)
diff --git a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx
index 1d769c9..206a847 100644
--- a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx
+++ b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx
@@ -1,27 +1,40 @@
import React, { useState, useRef, useEffect, useMemo } from "react";
import {
- Edit,
- SimpleForm,
- FormDataConsumer,
+ CreateBase,
useTranslate,
TextInput,
NumberInput,
BooleanInput,
DateInput,
+ SaveButton,
SelectInput,
ReferenceInput,
ReferenceArrayInput,
AutocompleteInput,
- SaveButton,
Toolbar,
+ required,
+ useNotify,
+ Form,
+ useUpdate,
+ useCreate,
+ useCreateContext,
Labeled,
NumberField,
- required,
useRecordContext,
DeleteButton,
} from 'react-admin';
+import {
+ Dialog,
+ DialogActions,
+ DialogContent,
+ DialogTitle,
+ Stack,
+ Grid,
+ Box,
+} from '@mui/material';
+import DialogCloseButton from "@/page/components/DialogCloseButton";
+import TreeSelectInput from "@/page/components/TreeSelectInput";
import { useWatch, useFormContext } from "react-hook-form";
-import { Stack, Grid, Box, Typography } from '@mui/material';
import * as Common from '@/utils/common';
import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
import EditBaseAside from "@/page/components/EditBaseAside";
@@ -29,75 +42,139 @@
import MemoInput from "@/page/components/MemoInput";
import StatusSelectInput from "@/page/components/StatusSelectInput";
-const FormToolbar = () => {
- const { getValues } = useFormContext();
+const EditContent = ({ editRecord }) => {
+ const { resource } = useCreateContext();
return (
- <Toolbar sx={{ justifyContent: 'space-between' }}>
- <SaveButton />
- <DeleteButton mutationMode="optimistic" />
- </Toolbar>
+ <Grid container rowSpacing={2} columnSpacing={2}>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TreeSelectInput
+ label="table.field.matnrGroup.parentId"
+ value={editRecord?.parentId}
+ isTranslate
+ resource={resource}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.matnrGroup.name"
+ source="name"
+ parse={v => v}
+ validate={required()}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.matnrGroup.code"
+ source="code"
+ parse={v => v}
+ />
+ </Grid>
+ </Grid>
)
}
-const MatnrGroupEdit = () => {
+const MatnrGroupEdit = (props) => {
+ const { editRecord, open, setOpen, callback, resource } = props;
+
const translate = useTranslate();
+ const notify = useNotify();
+
+ const [update] = useUpdate();
+ const [create] = useCreate();
+
+ const handleClose = (event, reason) => {
+ if (reason !== "backdropClick") {
+ setOpen(false);
+ }
+ };
+
+ const handleSuccess = async (data) => {
+ setOpen(false);
+ callback();
+ notify('common.response.success', { type: 'info' });
+ };
+
+ const handleError = async (data) => {
+ notify('common.response.fail', { type: 'error' });
+ };
+
+ const onSubmit = (data) => {
+ const _params = { ...data };
+ if (editRecord) {
+ if (_params.parentId === editRecord.id) {
+ notify('common.response.dataError', { type: 'error' });
+ return;
+ }
+ update(
+ resource,
+ {
+ id: editRecord.id,
+ data: _params,
+ },
+ {
+ onSuccess: () => {
+ handleSuccess();
+ },
+ onError: (error) => {
+ handleError();
+ },
+ }
+ );
+ } else {
+ create(
+ resource,
+ { data: _params },
+ {
+ onSuccess: () => {
+ handleSuccess();
+ },
+ onError: (error) => {
+ handleError();
+ },
+ }
+ );
+ }
+ };
return (
- <Edit
- redirect="list"
- mutationMode={EDIT_MODE}
- actions={<CustomerTopToolBar />}
- aside={<EditBaseAside />}
- >
- <SimpleForm
- shouldUnregister
- warnWhenUnsavedChanges
- toolbar={<FormToolbar />}
- mode="onTouched"
- defaultValues={{}}
- // validate={(values) => { }}
+ <>
+ <CreateBase>
+ <Dialog
+ open={open}
+ onClose={handleClose}
+ aria-labelledby="form-dialog-title"
+ fullWidth
+ disableRestoreFocus
+ maxWidth="md" // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
>
- <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
- <Grid item xs={12} md={8}>
- <Typography variant="h6" gutterBottom>
- {translate('common.edit.title.main')}
- </Typography>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.matnrGroup.name"
- source="name"
- parse={v => v}
- validate={required()}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.matnrGroup.code"
- source="code"
- parse={v => v}
- validate={required()}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.matnrGroup.parentId"
- source="parentId"
- />
- </Stack>
-
- </Grid>
- <Grid item xs={12} md={4}>
- <Typography variant="h6" gutterBottom>
- {translate('common.edit.title.common')}
- </Typography>
- <StatusSelectInput />
- <Box mt="2em" />
- <MemoInput />
- </Grid>
- </Grid>
- </SimpleForm>
- </Edit >
+ <Form record={editRecord} onSubmit={onSubmit}>
+ <DialogTitle id="form-dialog-title" sx={{
+ position: 'sticky',
+ top: 0,
+ backgroundColor: 'background.paper',
+ zIndex: 1000
+ }}
+ >
+ {editRecord ? translate('update.title') : translate('create.title')}
+ <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
+ <DialogCloseButton onClose={handleClose} />
+ </Box>
+ </DialogTitle>
+ <DialogContent sx={{ mt: 2 }}>
+ <EditContent
+ editRecord={editRecord}
+ />
+ </DialogContent>
+ <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
+ <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }} >
+ <SaveButton />
+ </Toolbar>
+ </DialogActions>
+ </Form>
+ </Dialog>
+ </CreateBase>
+ </>
)
}
diff --git a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList copy.jsx b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList copy.jsx
new file mode 100644
index 0000000..b7ee747
--- /dev/null
+++ b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList copy.jsx
@@ -0,0 +1,156 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useNavigate } from 'react-router-dom';
+import {
+ List,
+ DatagridConfigurable,
+ SearchInput,
+ TopToolbar,
+ SelectColumnsButton,
+ EditButton,
+ FilterButton,
+ CreateButton,
+ ExportButton,
+ BulkDeleteButton,
+ WrapperField,
+ useRecordContext,
+ useTranslate,
+ useNotify,
+ useListContext,
+ FunctionField,
+ 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 { styled } from '@mui/material/styles';
+import MatnrGroupCreate from "./MatnrGroupCreate";
+import MatnrGroupPanel from "./MatnrGroupPanel";
+import EmptyData from "@/page/components/EmptyData";
+import MyCreateButton from "@/page/components/MyCreateButton";
+import MyExportButton from '@/page/components/MyExportButton';
+import PageDrawer from "@/page/components/PageDrawer";
+import MyField from "@/page/components/MyField";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import * as Common from '@/utils/common';
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+ '& .css-1vooibu-MuiSvgIcon-root': {
+ height: '.9em'
+ },
+ '& .RaDatagrid-row': {
+ cursor: 'auto'
+ },
+ '& .column-name': {
+ },
+ '& .opt': {
+ width: 200
+ },
+}));
+
+const filters = [
+ <SearchInput source="condition" alwaysOn />,
+ <DateInput label='common.time.after' source="timeStart" alwaysOn />,
+ <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
+
+ <TextInput source="name" label="table.field.matnrGroup.name" />,
+ <TextInput source="code" label="table.field.matnrGroup.code" />,
+ <NumberInput source="parentId" label="table.field.matnrGroup.parentId" />,
+
+ <TextInput label="common.field.memo" source="memo" />,
+ <SelectInput
+ label="common.field.status"
+ source="status"
+ choices={[
+ { id: '1', name: 'common.enums.statusTrue' },
+ { id: '0', name: 'common.enums.statusFalse' },
+ ]}
+ resettable
+ />,
+]
+
+const MatnrGroupList = () => {
+ const translate = useTranslate();
+
+ const [createDialog, setCreateDialog] = useState(false);
+ const [drawerVal, setDrawerVal] = useState(false);
+
+ return (
+ <Box display="flex">
+ <List
+ sx={{
+ flexGrow: 1,
+ transition: (theme) =>
+ theme.transitions.create(['all'], {
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+ }}
+ title={"menu.matnrGroup"}
+ empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+ filters={filters}
+ sort={{ field: "create_time", order: "desc" }}
+ actions={(
+ <TopToolbar>
+ <FilterButton />
+ <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+ <SelectColumnsButton preferenceKey='matnrGroup' />
+ <MyExportButton />
+ </TopToolbar>
+ )}
+ perPage={DEFAULT_PAGE_SIZE}
+ >
+ <StyledDatagrid
+ preferenceKey='matnrGroup'
+ bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+ rowClick={(id, resource, record) => false}
+ expand={() => <MatnrGroupPanel />}
+ expandSingle={true}
+ omit={['id', 'createTime', 'createBy', 'memo']}
+ >
+ <NumberField source="id" />
+ <TextField source="name" label="table.field.matnrGroup.name" />
+ <TextField source="code" label="table.field.matnrGroup.code" />
+ <NumberField source="parentId" label="table.field.matnrGroup.parentId" />
+
+ <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} />
+ <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>
+ <MatnrGroupCreate
+ open={createDialog}
+ setOpen={setCreateDialog}
+ />
+ <PageDrawer
+ title='MatnrGroup Detail'
+ drawerVal={drawerVal}
+ setDrawerVal={setDrawerVal}
+ >
+ </PageDrawer>
+ </Box>
+ )
+}
+
+export default MatnrGroupList;
diff --git a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx
index b7ee747..8436018 100644
--- a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx
+++ b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx
@@ -1,156 +1,339 @@
-import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
-import { useNavigate } from 'react-router-dom';
+import React from 'react';
import {
- List,
- DatagridConfigurable,
- SearchInput,
- TopToolbar,
- SelectColumnsButton,
- EditButton,
- FilterButton,
- CreateButton,
- ExportButton,
- BulkDeleteButton,
- WrapperField,
- useRecordContext,
+ Title,
useTranslate,
useNotify,
- useListContext,
- FunctionField,
- TextField,
- NumberField,
- DateField,
- BooleanField,
- ReferenceField,
- TextInput,
- DateTimeInput,
- DateInput,
- SelectInput,
- NumberInput,
- ReferenceInput,
- ReferenceArrayInput,
- AutocompleteInput,
- DeleteButton,
+ useRedirect,
+ useRefresh,
+ useDelete,
} from 'react-admin';
-import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
-import MatnrGroupCreate from "./MatnrGroupCreate";
-import MatnrGroupPanel from "./MatnrGroupPanel";
-import EmptyData from "@/page/components/EmptyData";
-import MyCreateButton from "@/page/components/MyCreateButton";
-import MyExportButton from '@/page/components/MyExportButton';
-import PageDrawer from "@/page/components/PageDrawer";
-import MyField from "@/page/components/MyField";
-import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
-import * as Common from '@/utils/common';
+import {
+ Box,
+ Collapse,
+ IconButton,
+ Table,
+ TableBody,
+ TableCell,
+ TableContainer,
+ TableHead,
+ TableRow,
+ Paper,
+ Card,
+ Typography,
+ TextField,
+ Tooltip,
+ Button,
+ Chip,
+ LinearProgress,
+} from '@mui/material';
+import { Add, Edit, Delete } from '@mui/icons-material';
+import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
+import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';
+import RefreshIcon from '@mui/icons-material/Refresh';
+import request from '@/utils/request';
+import MatnrGroupEdit from "./MatnrGroupEdit";
+import * as Icons from '@mui/icons-material';
-const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
- '& .css-1vooibu-MuiSvgIcon-root': {
- height: '.9em'
+const RESOURCE = 'matnrGroup';
+const TITLE = 'menu.matnrGroup';
+
+const columns = [
+ {
+ id: 'name',
+ label: 'table.field.matnrGroup.name',
+ minWidth: 200,
},
- '& .RaDatagrid-row': {
- cursor: 'auto'
+ {
+ id: 'code',
+ label: 'table.field.matnrGroup.code',
+ minWidth: 80,
},
- '& .column-name': {
- },
- '& .opt': {
- width: 200
- },
+ {
+ id: 'parentId',
+ label: 'table.field.matnrGroup.parentId',
+ minWidth: 100,
+ }
+];
+
+const getIconComponent = (iconStr) => {
+ return Icons[iconStr] || null;
+};
+
+const StyledTableRow = styled(TableRow)(({ theme }) => ({
+ '& .MuiButtonBase-root': {
+ padding: '0px 8px'
+ }
}));
-const filters = [
- <SearchInput source="condition" alwaysOn />,
- <DateInput label='common.time.after' source="timeStart" alwaysOn />,
- <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
+const StyledTableCell = styled(TableCell)(({ theme }) => ({
+ overflow: 'hidden',
+ textOverflow: 'ellipsis',
+ whiteSpace: 'nowrap',
+ maxWidth: 600,
+}));
- <TextInput source="name" label="table.field.matnrGroup.name" />,
- <TextInput source="code" label="table.field.matnrGroup.code" />,
- <NumberInput source="parentId" label="table.field.matnrGroup.parentId" />,
+const TreeTableRow = (props) => {
+ const { row, depth = 0, openNodes, setOpenNodes, onEdit, onDelete } = props;
+ const translate = useTranslate();
- <TextInput label="common.field.memo" source="memo" />,
- <SelectInput
- label="common.field.status"
- source="status"
- choices={[
- { id: '1', name: 'common.enums.statusTrue' },
- { id: '0', name: 'common.enums.statusFalse' },
- ]}
- resettable
- />,
-]
+ const toggleNode = (id) => {
+ setOpenNodes(prevState => ({ ...prevState, [id]: !prevState[id] }));
+ };
+
+ const isOpen = openNodes[row.id] || false;
+
+ return (
+ <React.Fragment>
+ <StyledTableRow hover tabIndex={-1} key={row.id}>
+ <StyledTableCell sx={{ padding: 0 }}>
+ {row.children && (
+ <IconButton
+ aria-label="expand row"
+ size="small"
+ onClick={() => toggleNode(row.id)}
+ >
+ {isOpen ? <KeyboardArrowDownIcon /> : <KeyboardArrowRightIcon />}
+ </IconButton>
+ )}
+ </StyledTableCell>
+ {columns.map((column, idx) => {
+ if (column.id !== 'actions') {
+ let value = row[column.id];
+ if (column.id === 'name' && row['type'] === 0) {
+ value = translate(value);
+ }
+ return (
+ <StyledTableCell
+ key={column.id}
+ align={column.align || 'left'}
+ style={{
+ paddingLeft: idx === 0 && (depth * 16 + 16),
+ opacity: column.id === 'icon' && .6
+ }}
+ onClick={() => toggleNode(row.id)}
+ >
+ {column.format ? column.format(value) : value}
+ </StyledTableCell>
+ )
+ }
+ })}
+ <StyledTableCell>
+ <Tooltip title="Edit">
+ <IconButton onClick={() => onEdit(row)}>
+ <Edit />
+ </IconButton>
+ </Tooltip>
+ <Tooltip title="Delete">
+ <IconButton onClick={() => onDelete(row)}>
+ <Delete />
+ </IconButton>
+ </Tooltip>
+ </StyledTableCell>
+ </StyledTableRow>
+ {row.children && isOpen && (
+ row.children.map((child) => (
+ <TreeTableRow
+ key={child.id}
+ row={child}
+ depth={depth + 1}
+ onEdit={onEdit}
+ onDelete={onDelete}
+ openNodes={openNodes}
+ setOpenNodes={setOpenNodes}
+ />
+ ))
+ )}
+ </React.Fragment>
+ );
+};
const MatnrGroupList = () => {
const translate = useTranslate();
+ const notify = useNotify();
+ const redirect = useRedirect();
+ const refresh = useRefresh();
+ const [deleteOne] = useDelete();
- const [createDialog, setCreateDialog] = useState(false);
- const [drawerVal, setDrawerVal] = useState(false);
+ const [treeData, setTreeData] = React.useState(null);
+ const [filter, setFilter] = React.useState("");
+ const [createDialog, setCreateDialog] = React.useState(false);
+ const [editRecord, setEditRecord] = React.useState(null);
+ const [openNodes, setOpenNodes] = React.useState({});
+ const [expandAll, setExpandAll] = React.useState(false);
+
+ const http = async () => {
+ const res = await request.post(RESOURCE + '/tree', {
+ condition: filter
+ });
+ if (res?.data?.code === 200) {
+ setTreeData(res.data.data);
+ } else {
+ notify(res.data.msg);
+ }
+ }
+
+ React.useEffect(() => {
+ http();
+ }, [filter]);
+
+ const handleRefresh = () => {
+ http();
+ };
+
+ const handleAdd = () => {
+ setEditRecord(null);
+ setCreateDialog(true);
+ };
+
+ const handleEdit = (node) => {
+ setEditRecord(node);
+ setCreateDialog(true);
+ };
+
+ const handleDelete = (node) => {
+ if (window.confirm(translate('ra.message.delete_content'))) {
+ deleteOne(
+ RESOURCE,
+ { id: node.id },
+ {
+ onSuccess: () => {
+ handleRefresh();
+ notify('Department deleted successfully', { type: 'info', messageArgs: { _: 'Department deleted successfully' } });
+ },
+ onError: (error) => {
+ notify(`Error: ${error.message}`, { type: 'warning', messageArgs: { _: `Error: ${error.message}` } });
+ },
+ }
+ );
+ }
+ };
+
+ const toggleExpandAll = () => {
+ setExpandAll(prevExpandAll => {
+ const newExpandAll = !prevExpandAll;
+ const newOpenNodes = {};
+ const updateOpenNodes = (nodes) => {
+ nodes.forEach(node => {
+ newOpenNodes[node.id] = newExpandAll;
+ if (node.children) {
+ updateOpenNodes(node.children);
+ }
+ });
+ };
+ updateOpenNodes(treeData);
+ setOpenNodes(newOpenNodes);
+ return newExpandAll;
+ });
+ };
return (
- <Box display="flex">
- <List
- sx={{
- flexGrow: 1,
- transition: (theme) =>
- theme.transitions.create(['all'], {
- duration: theme.transitions.duration.enteringScreen,
- }),
- marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
- }}
- title={"menu.matnrGroup"}
- empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
- filters={filters}
- sort={{ field: "create_time", order: "desc" }}
- actions={(
- <TopToolbar>
- <FilterButton />
- <MyCreateButton onClick={() => { setCreateDialog(true) }} />
- <SelectColumnsButton preferenceKey='matnrGroup' />
- <MyExportButton />
- </TopToolbar>
- )}
- perPage={DEFAULT_PAGE_SIZE}
- >
- <StyledDatagrid
- preferenceKey='matnrGroup'
- bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
- rowClick={(id, resource, record) => false}
- expand={() => <MatnrGroupPanel />}
- expandSingle={true}
- omit={['id', 'createTime', 'createBy', 'memo']}
- >
- <NumberField source="id" />
- <TextField source="name" label="table.field.matnrGroup.name" />
- <TextField source="code" label="table.field.matnrGroup.code" />
- <NumberField source="parentId" label="table.field.matnrGroup.parentId" />
-
- <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} />
- <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>
- <MatnrGroupCreate
+ <div>
+ <MatnrGroupEdit
+ editRecord={editRecord}
open={createDialog}
setOpen={setCreateDialog}
+ callback={() => {
+ handleRefresh();
+ }}
+ resource={RESOURCE}
/>
- <PageDrawer
- title='MatnrGroup Detail'
- drawerVal={drawerVal}
- setDrawerVal={setDrawerVal}
- >
- </PageDrawer>
- </Box>
- )
+ <Title title={TITLE} />
+ <Box sx={{ mt: 2, mr: 3, mb: 1, display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
+ <Box width={300} >
+ <Button
+ variant="outlined"
+ color="primary"
+ startIcon={expandAll ? <KeyboardArrowDownIcon /> : <KeyboardArrowRightIcon />}
+ onClick={toggleExpandAll}
+ sx={{ ml: 1 }}
+ >
+ {expandAll ? translate('common.action.collapseAll') : translate('common.action.expandAll')}
+ </Button>
+ {/* <TextField
+ label="Search"
+ value={filter}
+ onChange={({ target }) => {
+ setFilter(target.value)
+ }}
+ variant="filled"
+ size="small"
+ margin="dense"
+ fullWidth
+ /> */}
+ </Box>
+ <Box>
+ <Button
+ variant="outlined"
+ color="primary"
+ startIcon={<RefreshIcon />}
+ onClick={handleRefresh}
+ sx={{ ml: 1 }}
+ >
+ {translate('ra.action.refresh')}
+ </Button>
+ <Button
+ variant="outlined"
+ color="primary"
+ startIcon={<Add />}
+ onClick={handleAdd}
+ sx={{ ml: 1 }}
+ >
+ {translate('ra.action.add')}
+ </Button>
+ </Box>
+ </Box>
+ <Card sx={{
+ position: 'relative',
+ }}>
+ {!treeData && (
+ <LinearProgress
+ sx={{
+ height: "3px",
+ position: 'absolute',
+ top: 0,
+ left: 0,
+ right: 0,
+ }}
+ />
+ )}
+ <TableContainer component={Paper}>
+ <Table size="small">
+ <TableHead>
+ <TableRow>
+ <StyledTableCell sx={{ padding: 0, width: 60 }} />
+ {columns.map((column, idx) => (
+ <StyledTableCell
+ key={idx}
+ align={column.align || 'left'}
+ style={{
+ minWidth: column.minWidth
+ }}
+ >
+ {translate(column.label)}
+ </StyledTableCell>
+ ))}
+ </TableRow>
+ </TableHead>
+ <TableBody>
+ {treeData && treeData.length > 0 && (
+ treeData.map((row) => (
+ <TreeTableRow
+ key={row.id}
+ row={row}
+ onEdit={handleEdit}
+ onDelete={handleDelete}
+ openNodes={openNodes}
+ setOpenNodes={setOpenNodes}
+ />
+ ))
+ )}
+ </TableBody>
+ </Table>
+ </TableContainer>
+ </Card>
+ </div>
+ );
}
export default MatnrGroupList;
--
Gitblit v1.9.1