From a3be22ab605418ed8da9d50db541190fd892a7cf Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 10 四月 2025 11:38:54 +0800
Subject: [PATCH] no message

---
 rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx   |  233 +++++++++++++++++++++++++++++++++
 rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx |  151 +++++++++++++++++++++
 2 files changed, 384 insertions(+), 0 deletions(-)

diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx
new file mode 100644
index 0000000..f51326e
--- /dev/null
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx
@@ -0,0 +1,151 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+    CreateBase,
+    useTranslate,
+    TextInput,
+    NumberInput,
+    BooleanInput,
+    DateInput,
+    SaveButton,
+    SelectInput,
+    ReferenceInput,
+    ReferenceArrayInput,
+    AutocompleteInput,
+    Toolbar,
+    required,
+    useDataProvider,
+    useNotify,
+    Form,
+    useCreateController,
+} from 'react-admin';
+import {
+    Dialog,
+    DialogActions,
+    DialogContent,
+    DialogTitle,
+    Stack,
+    Grid,
+    Box,
+} from '@mui/material';
+import DialogCloseButton from "../../components/DialogCloseButton";
+import StatusSelectInput from "../../components/StatusSelectInput";
+import MemoInput from "../../components/MemoInput";
+
+const SerialRuleItemCreate = (props) => {
+    const { open, setOpen } = props;
+
+    const translate = useTranslate();
+    const notify = useNotify();
+
+    const handleClose = (event, reason) => {
+        if (reason !== "backdropClick") {
+            setOpen(false);
+        }
+    };
+
+    const handleSuccess = async (data) => {
+        setOpen(false);
+        notify('common.response.success');
+    };
+
+    const handleError = async (error) => {
+        notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
+    };
+
+    return (
+        <>
+            <CreateBase
+                record={{}}
+                transform={(data) => {
+                    return data;
+                }}
+                mutationOptions={{ onSuccess: handleSuccess, onError: handleError }}
+            >
+                <Dialog
+                    open={open}
+                    onClose={handleClose}
+                    aria-labelledby="form-dialog-title"
+                    fullWidth
+                    disableRestoreFocus
+                    maxWidth="md"   // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
+                >
+                    <Form>
+                        <DialogTitle id="form-dialog-title" sx={{
+                            position: 'sticky',
+                            top: 0,
+                            backgroundColor: 'background.paper',
+                            zIndex: 1000
+                        }}
+                        >
+                            {translate('create.title')}
+                            <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
+                                <DialogCloseButton onClose={handleClose} />
+                            </Box>
+                        </DialogTitle>
+                        <DialogContent sx={{ mt: 2 }}>
+                            <Grid container rowSpacing={2} columnSpacing={2}>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.ruleId"
+                                        source="ruleId"
+                                        autoFocus
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.serialRuleItem.wkType"
+                                        source="wkType"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.serialRuleItem.feildValue"
+                                        source="feildValue"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.len"
+                                        source="len"
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.lenStr"
+                                        source="lenStr"
+                                        validate={required()}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.sort"
+                                        source="sort"
+                                        validate={required()}
+                                    />
+                                </Grid>
+
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <StatusSelectInput />
+                                </Grid>
+                                <Grid item xs={12} display="flex" gap={1}>
+                                    <Stack direction="column" spacing={1} width={'100%'}>
+                                        <MemoInput />
+                                    </Stack>
+                                </Grid>
+                            </Grid>
+                        </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>
+        </>
+    )
+}
+
+export default SerialRuleItemCreate;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx
new file mode 100644
index 0000000..709c9f4
--- /dev/null
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx
@@ -0,0 +1,233 @@
+import React, {
+  useState,
+  useRef,
+  useEffect,
+  useMemo,
+  useCallback,
+} from "react";
+import { useNavigate, useLocation } 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,
+  useGetRecordId,
+} from "react-admin";
+import { Box, Typography, Card, Stack } from "@mui/material";
+import { styled } from "@mui/material/styles";
+import SerialRuleItemCreate from "./SerialRuleItemCreate";
+import EmptyData from "../../components/EmptyData";
+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 CustomerTopToolBar from "../../components/EditTopToolBar";
+
+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" />,
+  <DateInput label="common.time.before" source="timeEnd" />,
+
+  <NumberInput source="ruleId" label="table.field.serialRuleItem.ruleId" />,
+  <TextInput source="wkType" label="table.field.serialRuleItem.wkType" />,
+  <TextInput
+    source="feildValue"
+    label="table.field.serialRuleItem.feildValue"
+  />,
+  <NumberInput source="len" label="table.field.serialRuleItem.len" />,
+  <NumberInput source="lenStr" label="table.field.serialRuleItem.lenStr" />,
+  <NumberInput source="sort" label="table.field.serialRuleItem.sort" />,
+
+  <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 SerialRuleItemList = () => {
+  const translate = useTranslate();
+  const [createDialog, setCreateDialog] = useState(false);
+  const [drawerVal, setDrawerVal] = useState(false);
+  const location = useLocation();
+  const ruleId = useGetRecordId();
+
+  return (
+    <>
+      {ruleId && <CustomerTopToolBar backPrevious={true} />}
+      <Box display="flex">
+        <List
+          resource="serialRuleItem"
+          sx={{
+            flexGrow: 1,
+            transition: (theme) =>
+              theme.transitions.create(["all"], {
+                duration: theme.transitions.duration.enteringScreen,
+              }),
+            marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+          }}
+          title={"menu.serialRuleItem"}
+          empty={
+            <EmptyData
+              onClick={() => {
+                setCreateDialog(true);
+              }}
+            />
+          }
+          filters={filters}
+          filter={{ ruleId: ruleId }}
+          sort={{ field: "create_time", order: "desc" }}
+          actions={
+            <TopToolbar>
+              <FilterButton />
+              <MyCreateButton
+                onClick={() => {
+                  setCreateDialog(true);
+                }}
+              />
+              <SelectColumnsButton preferenceKey="serialRuleItem" />
+              <MyExportButton />
+            </TopToolbar>
+          }
+          perPage={DEFAULT_PAGE_SIZE}
+        >
+          <StyledDatagrid
+            preferenceKey="serialRuleItem"
+            bulkActionButtons={() => (
+              <BulkDeleteButton mutationMode={OPERATE_MODE} />
+            )}
+            rowClick={false}
+            omit={["id", "createTime", "createBy", "memo"]}
+          >
+            <NumberField source="id" />
+            <NumberField
+              source="ruleId"
+              label="table.field.serialRuleItem.ruleId"
+            />
+            <TextField
+              source="wkType$"
+              label="table.field.serialRuleItem.wkType"
+            />
+            <TextField
+              source="feildValue"
+              label="table.field.serialRuleItem.feildValue"
+            />
+            <NumberField source="len" label="table.field.serialRuleItem.len" />
+            <NumberField
+              source="lenStr"
+              label="table.field.serialRuleItem.lenStr"
+            />
+            <NumberField
+              source="sort"
+              label="table.field.serialRuleItem.sort"
+            />
+
+            <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>
+        <SerialRuleItemCreate open={createDialog} setOpen={setCreateDialog} />
+        <PageDrawer
+          title="SerialRuleItem Detail"
+          drawerVal={drawerVal}
+          setDrawerVal={setDrawerVal}
+        ></PageDrawer>
+      </Box>
+    </>
+  );
+};
+
+export default SerialRuleItemList;

--
Gitblit v1.9.1