From 0f0d395bb06debf5018e69dcb8528dacaae87a5a Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期五, 11 四月 2025 12:49:44 +0800 Subject: [PATCH] 编码规则,数据字典界面优化及修改 --- /dev/null | 18 ------ rsf-admin/src/page/system/dicts/dictType/index.jsx | 2 rsf-admin/src/page/system/serialRule/SerialRuleList.jsx | 27 ++------ rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx | 6 +- rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx | 47 +++++++-------- rsf-admin/src/i18n/zh.js | 3 + rsf-admin/src/page/ResourceContent.js | 12 ++-- rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx | 18 ++---- rsf-admin/.env | 2 9 files changed, 49 insertions(+), 86 deletions(-) diff --git a/rsf-admin/.env b/rsf-admin/.env index a8ce658..a3c69b2 100644 --- a/rsf-admin/.env +++ b/rsf-admin/.env @@ -1,3 +1,3 @@ -VITE_BASE_IP=192.168.4.24 +VITE_BASE_IP=127.0.0.1 # VITE_BASE_IP=47.76.147.249 VITE_BASE_PORT=8080 diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index e1546a9..f2bf06e 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -9,6 +9,9 @@ fail: "鏈嶅姟鍣ㄩ敊璇�", dataError: "鏁版嵁閿欒锛岃浠旂粏妫�鏌�", }, + button: { + edit: "缂栬緫", + }, field: { id: 'ID', uuid: '缂栧彿', diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js index 7f54c8c..82f7ee1 100644 --- a/rsf-admin/src/page/ResourceContent.js +++ b/rsf-admin/src/page/ResourceContent.js @@ -23,13 +23,13 @@ import qlyInspect from './qlyInspect'; import qlyIsptItem from './qlyIsptItem'; import dictType from './system/dicts/dictType'; -import dictData from './system/dicts/dictData'; +// import dictData from './system/dicts/dictData'; import companys from './basicInfo/companys'; import locType from './basicInfo/locType'; import locArea from './basicInfo//locArea'; import locAreaMatRela from './basicInfo/locAreaMatRela'; import locAreaMat from './basicInfo/locAreaMat'; -import serialRuleItem from './system/serialRuleItem'; +// import serialRuleItem from './system/serialRuleItem'; import serialRule from './system/serialRule'; import whMat from './basicInfo/whMat'; import asnOrder from './asnOrder'; @@ -89,12 +89,12 @@ return qlyIsptItem; case 'dictType': return dictType; - case 'dictData': - return dictData; + // case 'dictData': + // return dictData; case 'companys': return companys; - case 'serialRuleItem': - return serialRuleItem; + // case 'serialRuleItem': + // return serialRuleItem; case 'serialRule': return serialRule; case 'whMat': diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx deleted file mode 100644 index 058996b..0000000 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx +++ /dev/null @@ -1,160 +0,0 @@ -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 DictDataCreate = (props) => { - const { open, setOpen, record } = 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 - resource="dictData" - 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}> - <TextInput - label="table.field.dictData.dictTypeId" - source="dictTypeId" - defaultValue={record?.id} - parse={v => v} - readOnly - validate={required()} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.dictData.dictTypeCode" - source="dictTypeCode" - parse={v => v} - readOnly - defaultValue={record?.code} - validate={required()} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.dictData.value" - source="value" - parse={v => v} - validate={required()} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.dictData.label" - validate={required()} - autoFocus - source="label" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.dictData.sort" - source="sort" - /> - </Grid> - {/* <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.dictData.color" - source="color" - parse={v => v} - /> - </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 DictDataCreate; diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx deleted file mode 100644 index e0f2fbe..0000000 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx +++ /dev/null @@ -1,134 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - Edit, - SimpleForm, - FormDataConsumer, - useTranslate, - TextInput, - NumberInput, - BooleanInput, - DateInput, - SelectInput, - ReferenceInput, - ReferenceArrayInput, - AutocompleteInput, - SaveButton, - Toolbar, - Labeled, - NumberField, - required, - useRecordContext, - DeleteButton, - useNotify, - useRedirect, - useEditContext, -} from 'react-admin'; -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 "../../../components/EditBaseAside"; -import CustomerTopToolBar from "../../../components/EditTopToolBar"; -import MemoInput from "../../../components/MemoInput"; -import StatusSelectInput from "../../../components/StatusSelectInput"; - -const FormToolbar = () => { - const form = useFormContext(); - const { record, isPending } = useEditContext(); - const redirect = useRedirect(); - return ( - <Toolbar sx={{ justifyContent: 'end' }}> - <SaveButton type="button" mutationOptions={{onSuccess:() => { - redirect('/dictType/' + record?.dictTypeId) - } }}/> - <DeleteButton mutationMode="optimistic" /> - </Toolbar> - ) -} - -const DictDataEdit = () => { - const translate = useTranslate(); - - return ( - <Edit - redirect="list" - resource="dictData" - mutationMode={EDIT_MODE} - actions={<CustomerTopToolBar backPrevious={true} />} - aside={<EditBaseAside />} - > - <SimpleForm - toolbar={<FormToolbar />} - mode="onTouched" - defaultValues={{}} - // validate={(values) => { }} - > - <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.dictData.dictTypeId" - source="dictTypeId" - readOnly - parse={v => v} - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.dictData.dictTypeCode" - source="dictTypeCode" - readOnly - parse={v => v} - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.dictData.value" - source="value" - parse={v => v} - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.dictData.label" - source="label" - validate={required()} - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.dictData.sort" - source="sort" - /> - </Stack> - {/* <Stack direction='row' gap={2}> - <TextInput - label="table.field.dictData.color" - source="color" - parse={v => v} - /> - </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 > - ) -} - -export default DictDataEdit; diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx deleted file mode 100644 index 8c508bd..0000000 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx +++ /dev/null @@ -1,158 +0,0 @@ -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, - useGetPathForRecord, - useGetOne, -} from 'react-admin'; -import { Box, Typography, Card, Stack } from '@mui/material'; -import { styled } from '@mui/material/styles'; -import DictDataCreate from "./DictDataCreate"; -import EmptyData from "../../../components/EmptyData"; -import MyCreateButton from "../../../components/MyCreateButton"; -import MyExportButton from '../../../components/MyExportButton'; -import PageDrawer from "../../../components/PageDrawer"; -import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; - - -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 />, - <TextInput source="dictTypeId" label="table.field.dictData.dictTypeId" />, - <TextInput source="dictTypeCode" label="table.field.dictData.dictTypeCode" />, - <TextInput source="value" label="table.field.dictData.value" />, - <TextInput source="label" label="table.field.dictData.label" />, - <NumberInput source="sort" label="table.field.dictData.sort" />, - // <TextInput source="color" label="table.field.dictData.color" />, - <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 DictDataList = () => { - const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); - const [drawerVal, setDrawerVal] = useState(false); - const dictId = useGetRecordId(); - const {data: dicts, isPending, error} = useGetOne('dictType', {id: dictId}); - - return ( - <> - <Box display="flex" > - <List - resource="dictData" - sx={{ - flexGrow: 1, - transition: (theme) => - theme.transitions.create(['all'], { - duration: theme.transitions.duration.enteringScreen, - }), - marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, - }} - title={"menu.dictData"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} - filters={filters} - filter={{ dictTypeId: dictId }} - sort={{ field: "create_time", order: "desc" }} - actions={( - <TopToolbar> - <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> - <SelectColumnsButton preferenceKey='dictData' /> - <MyExportButton /> - </TopToolbar> - )} - perPage={DEFAULT_PAGE_SIZE} - > - <StyledDatagrid - preferenceKey='dictData' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick="edit" - omit={['id', 'createTime', 'createBy', 'memo']} - > - <NumberField source="id" /> - <TextField source="dictTypeId" label="table.field.dictData.dictTypeId" /> - <TextField source="dictTypeCode" label="table.field.dictData.dictTypeCode" /> - <TextField source="value" label="table.field.dictData.value" /> - <TextField source="label" label="table.field.dictData.label" /> - <NumberField source="sort" label="table.field.dictData.sort" /> - <TextField source="updateBy$" label="common.field.updateBy" /> - <DateField source="updateTime" label="common.field.updateTime" showTime /> - <TextField source="createBy$" label="common.field.createBy" /> - <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' }} mutationMode={OPERATE_MODE} redirect={"/dictType/" + dictId}/> - <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} redirect={"/dictType/" + dictId} /> - </WrapperField> - </StyledDatagrid> - </List> - <DictDataCreate - open={createDialog} - record={dicts} - setOpen={setCreateDialog} - /> - <PageDrawer - title='DictData Detail' - drawerVal={drawerVal} - setDrawerVal={setDrawerVal} - > - </PageDrawer> - </Box> - </> - - ) -} - -export default DictDataList; diff --git a/rsf-admin/src/page/system/dicts/dictData/index.jsx b/rsf-admin/src/page/system/dicts/dictData/index.jsx deleted file mode 100644 index 31b11ac..0000000 --- a/rsf-admin/src/page/system/dicts/dictData/index.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - ListGuesser, - EditGuesser, - ShowGuesser, -} from "react-admin"; - -import DictDataList from "./DictDataList"; -import DictDataEdit from "./DictDataEdit"; - -export default { - list: DictDataList, - edit: DictDataEdit, - show: ShowGuesser, - recordRepresentation: (record) => { - return `${record.id}` - } -}; diff --git a/rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx index d938890..c9905f0 100644 --- a/rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx +++ b/rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx @@ -28,12 +28,13 @@ import CustomerTopToolBar from "../../../components/EditTopToolBar"; import MemoInput from "../../../components/MemoInput"; import StatusSelectInput from "../../../components/StatusSelectInput"; -import DictDataList from "../dictData/DictDataList"; +import DictDataEdit from "./DictDataEdit"; +import DictDataList from "./DictDataList"; const FormToolbar = () => { const { getValues } = useFormContext(); return ( - <Toolbar sx={{ justifyContent: 'space-between' }}> + <Toolbar sx={{ justifyContent: 'end' }}> <SaveButton /> <DeleteButton mutationMode="optimistic" /> </Toolbar> @@ -42,7 +43,6 @@ const DictTypeEdit = () => { const translate = useTranslate(); - return ( <> <Edit diff --git a/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx index 41e773d..e5b7332 100644 --- a/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx +++ b/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx @@ -35,14 +35,10 @@ import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; import DictTypeCreate from "./DictTypeCreate"; -import DictTypePanel from "./DictTypePanel"; 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'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -62,11 +58,9 @@ <SearchInput source="condition" alwaysOn />, <DateInput label='common.time.after' source="timeStart" alwaysOn />, <DateInput label='common.time.before' source="timeEnd" alwaysOn />, - <TextInput source="code" label="table.field.dictType.code" />, <TextInput source="name" label="table.field.dictType.name" />, <TextInput source="description" label="table.field.dictType.description" />, - <TextInput label="common.field.memo" source="memo" />, <SelectInput label="common.field.status" @@ -111,15 +105,15 @@ <StyledDatagrid preferenceKey='dictType' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} + rowClick={'edit'} omit={['id', 'createTime', 'createBy', 'memo']} > <NumberField source="id" /> - <MyField source="code" label="table.field.dictType.code" - onClick={(event, record, val) => { - event.stopPropagation(); - assign(record); - }} + <TextField source="code" label="table.field.dictType.code" + // onClick={(event, record, val) => { + // event.stopPropagation(); + // assign(record); + // }} /> <TextField source="name" label="table.field.dictType.name" /> <TextField source="description" label="table.field.dictType.description" /> diff --git a/rsf-admin/src/page/system/dicts/dictType/index.jsx b/rsf-admin/src/page/system/dicts/dictType/index.jsx index 7dc7dcb..b0f025e 100644 --- a/rsf-admin/src/page/system/dicts/dictType/index.jsx +++ b/rsf-admin/src/page/system/dicts/dictType/index.jsx @@ -11,7 +11,7 @@ export default { list: DictTypeList, edit: DictTypeEdit, - show: ShowGuesser, + // show: ShowGuesser, recordRepresentation: (record) => { return `${record.name}` } diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx deleted file mode 100644 index c3d15cc..0000000 --- a/rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx +++ /dev/null @@ -1,90 +0,0 @@ -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 SerialRuleItem from "../serialRuleItem/index"; - -const SerialRuleDetail = (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 ( - <> - <Dialog - open={open} - onClose={handleClose} - aria-labelledby="form-dialog-title" - fullWidth - disableRestoreFocus - maxWidth="xl" // 'xs' | 'sm' | 'md' | 'lg' | 'xl' - > - <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 }}> - <SerialRuleItem.list /> - </DialogContent> - </Dialog> - </> - ); -}; - -export default SerialRuleDetail; diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx index c99a1bc..d21dae8 100644 --- a/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx +++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx @@ -38,6 +38,7 @@ AutocompleteInput, DeleteButton, useGetRecordId, + Button, } from "react-admin"; import { Box, Typography, Card, Stack } from "@mui/material"; import { styled } from "@mui/material/styles"; @@ -54,6 +55,7 @@ } from "@/config/setting"; import * as Common from "@/utils/common"; import CustomerTopToolBar from "../../components/EditTopToolBar"; +import SerialRuleItemEdit from "./SerialRuleItemEdit"; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ "& .css-1vooibu-MuiSvgIcon-root": { @@ -93,7 +95,9 @@ const SerialRuleItemList = () => { const translate = useTranslate(); const [createDialog, setCreateDialog] = useState(false); + const [editDialog, setEditDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); + const [select, setSelect] = useState({}); const ruleId = useGetRecordId(); return ( @@ -110,13 +114,7 @@ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, }} title={"menu.serialRuleItem"} - empty={ - <EmptyData - onClick={() => { - setCreateDialog(true); - }} - /> - } + empty={false} filters={filters} filter={{ ruleId: ruleId }} sort={{ field: "create_time", order: "desc" }} @@ -139,7 +137,10 @@ bulkActionButtons={() => ( <BulkDeleteButton mutationMode={OPERATE_MODE} /> )} - rowClick={false} + rowClick={(id, resource, record) => { + setSelect(record) + setEditDialog(true) + }} omit={["id", "createTime", "createBy", "memo"]} > <NumberField source="id" /> @@ -164,29 +165,19 @@ source="sort" label="table.field.serialRuleItem.sort" /> - <ReferenceField - source="updateBy" + <TextField + 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" + <TextField + source="createBy$" label="common.field.createBy" - reference="user" - link={false} - sortable={false} - > - <TextField source="nickname" /> - </ReferenceField> + /> <DateField source="createTime" label="common.field.createTime" @@ -203,15 +194,21 @@ sortable={false} /> <WrapperField cellClassName="opt" label="common.field.opt"> - <EditButton sx={{ padding: "1px", fontSize: ".75rem" }} /> + <Button onClick={() => { + setSelect(re) + setEditDialog(true) + }} label={'ra.action.edit'} + > </Button> <DeleteButton sx={{ padding: "1px", fontSize: ".75rem" }} mutationMode={OPERATE_MODE} + redirect={'/serialRule/' + ruleId} /> </WrapperField> </StyledDatagrid> </List> <SerialRuleItemCreate open={createDialog} setOpen={setCreateDialog} /> + <SerialRuleItemEdit open={editDialog} setOpen={setEditDialog} record={select} /> <PageDrawer title="SerialRuleItem Detail" drawerVal={drawerVal} diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx index 8b4c623..d7a19a9 100644 --- a/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx +++ b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx @@ -41,8 +41,6 @@ import { Box, Typography, Card, Stack } from "@mui/material"; import { styled } from "@mui/material/styles"; import SerialRuleCreate from "./SerialRuleCreate"; -import SerialRuleDetail from "./SerialRuleDetail"; -import SerialRulePanel from "./SerialRulePanel"; import EmptyData from "../../components/EmptyData"; import MyCreateButton from "../../components/MyCreateButton"; import MyExportButton from "../../components/MyExportButton"; @@ -79,7 +77,6 @@ <TextInput source="resetDep" label="table.field.serialRule.resetDep" />, <TextInput source="currValue" label="table.field.serialRule.currValue" />, <TextInput source="lastCode" label="table.field.serialRule.lastCode" />, - <TextInput label="common.field.memo" source="memo" />, <SelectInput label="common.field.status" @@ -165,29 +162,19 @@ label="table.field.serialRule.lastCode" /> - <ReferenceField - source="updateBy" + <TextField + 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" + <TextField + source="createBy$" label="common.field.createBy" - reference="user" - link={false} - sortable={false} - > - <TextField source="nickname" /> - </ReferenceField> + /> <DateField source="createTime" label="common.field.createTime" @@ -209,7 +196,7 @@ </StyledDatagrid> </List> <SerialRuleCreate open={createDialog} setOpen={setCreateDialog} /> - <SerialRuleDetail open={detailDialog} setOpen={setDetailDialog} /> + {/* <SerialRuleDetail open={detailDialog} setOpen={setDetailDialog} /> */} <PageDrawer title="SerialRule Detail" drawerVal={drawerVal} diff --git a/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemCreate.jsx b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemCreate.jsx deleted file mode 100644 index f51326e..0000000 --- a/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemCreate.jsx +++ /dev/null @@ -1,151 +0,0 @@ -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/serialRuleItem/SerialRuleItemEdit.jsx b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemEdit.jsx deleted file mode 100644 index ecd5ba0..0000000 --- a/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemEdit.jsx +++ /dev/null @@ -1,123 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - Edit, - SimpleForm, - FormDataConsumer, - useTranslate, - TextInput, - NumberInput, - BooleanInput, - DateInput, - SelectInput, - ReferenceInput, - ReferenceArrayInput, - AutocompleteInput, - SaveButton, - Toolbar, - Labeled, - NumberField, - required, - useRecordContext, - DeleteButton, -} from 'react-admin'; -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 "../../components/EditBaseAside"; -import CustomerTopToolBar from "../../components/EditTopToolBar"; -import MemoInput from "../../components/MemoInput"; -import StatusSelectInput from "../../components/StatusSelectInput"; - -const FormToolbar = () => { - const { getValues } = useFormContext(); - - return ( - <Toolbar sx={{ justifyContent: 'space-between' }}> - <SaveButton /> - <DeleteButton mutationMode="optimistic" /> - </Toolbar> - ) -} - -const SerialRuleItemEdit = () => { - const translate = useTranslate(); - - return ( - <Edit - redirect="list" - mutationMode={EDIT_MODE} - actions={<CustomerTopToolBar />} - aside={<EditBaseAside />} - > - <SimpleForm - shouldUnregister - warnWhenUnsavedChanges - toolbar={<FormToolbar />} - mode="onTouched" - defaultValues={{}} - // validate={(values) => { }} - > - <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}> - <NumberInput - label="table.field.serialRuleItem.ruleId" - source="ruleId" - autoFocus - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.serialRuleItem.wkType" - source="wkType" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.serialRuleItem.feildValue" - source="feildValue" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.serialRuleItem.len" - source="len" - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.serialRuleItem.lenStr" - source="lenStr" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.serialRuleItem.sort" - source="sort" - validate={required()} - /> - </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 > - ) -} - -export default SerialRuleItemEdit; diff --git a/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemList.jsx b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemList.jsx deleted file mode 100644 index 703190d..0000000 --- a/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemList.jsx +++ /dev/null @@ -1,234 +0,0 @@ -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, -} from "react-admin"; -import { Box, Typography, Card, Stack } from "@mui/material"; -import { styled } from "@mui/material/styles"; -import SerialRuleItemCreate from "./SerialRuleItemCreate"; -import SerialRuleItemPanel from "./SerialRuleItemPanel"; -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" alwaysOn />, - <DateInput label="common.time.before" source="timeEnd" alwaysOn />, - - <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 queryParams = new URLSearchParams(location.search); - const ruleId = queryParams.get("ruleId"); - - return ( - <> - {ruleId && <CustomerTopToolBar backPrevious={true} />} - <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.serialRuleItem"} - empty={ - <EmptyData - onClick={() => { - setCreateDialog(true); - }} - /> - } - filters={filters} - filter={ruleId ? { ruleId } : undefined} - 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={(id, resource, record) => 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; diff --git a/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemPanel.jsx b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemPanel.jsx deleted file mode 100644 index 47d94ce..0000000 --- a/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemPanel.jsx +++ /dev/null @@ -1,87 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { Box, Card, CardContent, Grid, Typography, Tooltip } from '@mui/material'; -import { - useTranslate, - useRecordContext, -} from 'react-admin'; -import PanelTypography from "../../components/PanelTypography"; -import * as Common from '@/utils/common' - -const SerialRuleItemPanel = () => { - const record = useRecordContext(); - if (!record) return null; - const translate = useTranslate(); - return ( - <> - <Card sx={{ width: { xs: 300, sm: 500, md: 600, lg: 800 }, margin: 'auto' }}> - <CardContent> - <Grid container spacing={2}> - <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'space-between' }}> - <Typography variant="h6" gutterBottom align="left" sx={{ - maxWidth: { xs: '100px', sm: '180px', md: '260px', lg: '360px' }, - whiteSpace: 'nowrap', - overflow: 'hidden', - textOverflow: 'ellipsis', - }}> - {Common.camelToPascalWithSpaces(translate('table.field.serialRuleItem.id'))}: {record.id} - </Typography> - {/* inherit, primary, secondary, textPrimary, textSecondary, error */} - <Typography variant="h6" gutterBottom align="right" > - ID: {record.id} - </Typography> - </Grid> - </Grid> - <Grid container spacing={2}> - <Grid item xs={12} container alignContent="flex-end"> - <Typography variant="caption" color="textSecondary" sx={{ wordWrap: 'break-word', wordBreak: 'break-all' }}> - {Common.camelToPascalWithSpaces(translate('common.field.memo'))}:{record.memo} - </Typography> - </Grid> - </Grid> - <Box height={20}> </Box> - <Grid container spacing={2}> - <Grid item xs={6}> - <PanelTypography - title="table.field.serialRuleItem.ruleId" - property={record.ruleId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.serialRuleItem.wkType" - property={record.wkType$} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.serialRuleItem.feildValue" - property={record.feildValue} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.serialRuleItem.len" - property={record.len} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.serialRuleItem.lenStr" - property={record.lenStr} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.serialRuleItem.sort" - property={record.sort} - /> - </Grid> - - </Grid> - </CardContent> - </Card > - </> - ); -}; - -export default SerialRuleItemPanel; diff --git a/rsf-admin/src/page/system/serialRuleItem/index.jsx b/rsf-admin/src/page/system/serialRuleItem/index.jsx deleted file mode 100644 index d7a3bde..0000000 --- a/rsf-admin/src/page/system/serialRuleItem/index.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - ListGuesser, - EditGuesser, - ShowGuesser, -} from "react-admin"; - -import SerialRuleItemList from "./SerialRuleItemList"; -import SerialRuleItemEdit from "./SerialRuleItemEdit"; - -export default { - list: SerialRuleItemList, - edit: SerialRuleItemEdit, - show: ShowGuesser, - recordRepresentation: (record) => { - return `${record.id}` - } -}; -- Gitblit v1.9.1