From 401e85bb3749bb9107f65ddaa15868a0a9ba852e Mon Sep 17 00:00:00 2001 From: verou <857149855@qq.com> Date: 星期五, 11 四月 2025 14:18:46 +0800 Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop --- rsf-admin/src/page/purchase/PurchaseItemList.jsx | 25 rsf-admin/src/page/system/dicts/dictType/DictDataList.jsx | 173 ++++++++ rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx | 98 ++-- rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx | 13 rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java | 3 rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx | 2 rsf-admin/src/page/system/dicts/dictType/DictDataCreate.jsx | 12 rsf-admin/src/page/system/serialRule/SerialRuleItemEdit.jsx | 158 +++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java | 14 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java | 43 ++ rsf-admin/src/page/purchase/PurchaseItemCreate.jsx | 0 rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx | 23 rsf-admin/src/i18n/zh.js | 11 rsf-admin/src/page/purchase/PurchaseItemEdit.jsx | 0 rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx | 2 rsf-admin/src/i18n/en.js | 3 rsf-admin/src/page/ResourceContent.js | 18 rsf-admin/.env | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java | 9 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Purchase.java | 20 rsf-admin/src/page/system/dicts/dictType/DictDataEdit.jsx | 163 +++++++ rsf-admin/src/page/system/serialRule/SerialRuleList.jsx | 27 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java | 15 rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx | 18 rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx | 47 +- rsf-admin/src/page/taskLog/TaskItemLogList.jsx | 1 rsf-server/src/main/resources/mapper/manager/AsnOrderItemMapper.xml | 1 rsf-admin/src/page/purchase/PurchaseEdit.jsx | 201 ++++----- rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx | 42 - /dev/null | 18 rsf-admin/src/page/system/dicts/dictType/index.jsx | 2 rsf-admin/src/page/purchase/PurchaseList.jsx | 24 rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx | 34 - 33 files changed, 837 insertions(+), 385 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/en.js b/rsf-admin/src/i18n/en.js index daf2177..c18734e 100644 --- a/rsf-admin/src/i18n/en.js +++ b/rsf-admin/src/i18n/en.js @@ -9,6 +9,9 @@ fail: "Fail", dataError: "Submit data was error, Please check", }, + button: { + edit: "Edit", + }, field: { id: 'ID', uuid: 'uuid', diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index 7a43338..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: '缂栧彿', @@ -507,14 +510,14 @@ code: "ASN鍗曞彿", poCode: "PO缂栫爜", poId: "PO鏍囪瘑", - type: "鍗曟嵁绫诲瀷", + type: "绫诲瀷", wkType: "涓氬姟绫诲瀷", anfme: "鏁伴噺", - qty: "宸插畬鎴愭暟閲�", + qty: "瀹屾垚鏁伴噺", logisNo: "鐗╂祦鍗曞彿", arrTime: "棰勮鍒拌揪鏃堕棿", - rleStatus: "閲婃斁鐘舵��", - ntyStatus: "璐ㄦ涓婃姤鐘舵��", + rleStatus: "鐘舵��", + ntyStatus: "涓婃姤鐘舵��", }, asnOrderItem: { asnId: "涓诲崟鏍囪瘑", diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js index 2ead1d2..82f7ee1 100644 --- a/rsf-admin/src/page/ResourceContent.js +++ b/rsf-admin/src/page/ResourceContent.js @@ -23,18 +23,18 @@ 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'; import asnOrderItem from './asnOrderItem'; -import purchaseItem from './purchaseItem'; +// import purchaseItem from './purchaseItem'; import purchase from './purchase'; import fields from './fields'; import fieldsItem from './fieldsItem'; @@ -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': @@ -105,8 +105,8 @@ return asnOrderItem; case 'asnOrderLog': return asnOrderLog; - case 'purchaseItem': - return purchaseItem; + // case 'purchaseItem': + // return purchaseItem; case 'purchase': return purchase; case 'fields': diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogCreate.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogCreate.jsx deleted file mode 100644 index e1c793e..0000000 --- a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogCreate.jsx +++ /dev/null @@ -1,265 +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 AsnOrderItemLogCreate = (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.asnOrderItemLog.asnId" - source="asnId" - autoFocus - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.asnCode" - source="asnCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.platItemId" - source="platItemId" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.asnOrderItemLog.poDetlId" - source="poDetlId" - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.poCode" - source="poCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.fieldsIndex" - source="fieldsIndex" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.matnrId" - source="matnrId" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.matnrCode" - source="matnrCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.maktx" - source="maktx" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.asnOrderItemLog.anfme" - source="anfme" - validate={required()} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.stockUnit" - source="stockUnit" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.asnOrderItemLog.purQty" - source="purQty" - validate={required()} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.purUnit" - source="purUnit" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.asnOrderItemLog.qty" - source="qty" - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.splrCode" - source="splrCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.splrBatch" - source="splrBatch" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.splrName" - source="splrName" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.qrcode" - source="qrcode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.trackCode" - source="trackCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.barcode" - source="barcode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.packName" - source="packName" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <SelectInput - label="table.field.asnOrderItemLog.ntyStatus" - source="ntyStatus" - choices={[ - { id: 0, name: ' 鏈笂鎶�' }, - { id: 1, name: ' 宸蹭笂鎶�' }, - ]} - /> - </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 AsnOrderItemLogCreate; diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogEdit.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogEdit.jsx deleted file mode 100644 index dab571c..0000000 --- a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogEdit.jsx +++ /dev/null @@ -1,238 +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 AsnOrderItemLogEdit = () => { - 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.asnOrderItemLog.asnId" - source="asnId" - autoFocus - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.asnCode" - source="asnCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.platItemId" - source="platItemId" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.asnOrderItemLog.poDetlId" - source="poDetlId" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.poCode" - source="poCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.fieldsIndex" - source="fieldsIndex" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.matnrId" - source="matnrId" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.matnrCode" - source="matnrCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.maktx" - source="maktx" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.asnOrderItemLog.anfme" - source="anfme" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.stockUnit" - source="stockUnit" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.asnOrderItemLog.purQty" - source="purQty" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.purUnit" - source="purUnit" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.asnOrderItemLog.qty" - source="qty" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.splrCode" - source="splrCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.splrBatch" - source="splrBatch" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.splrName" - source="splrName" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.qrcode" - source="qrcode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.trackCode" - source="trackCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.barcode" - source="barcode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.packName" - source="packName" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <SelectInput - label="table.field.asnOrderItemLog.ntyStatus" - source="ntyStatus" - choices={[ - { id: 0, name: ' 鏈笂鎶�' }, - { id: 1, name: ' 宸蹭笂鎶�' }, - ]} - 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 AsnOrderItemLogEdit; diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogList.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogList.jsx deleted file mode 100644 index 6161f34..0000000 --- a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogList.jsx +++ /dev/null @@ -1,193 +0,0 @@ -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 AsnOrderItemLogCreate from "./AsnOrderItemLogCreate"; -import AsnOrderItemLogPanel from "./AsnOrderItemLogPanel"; -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': { - height: '.9em' - }, - '& .RaDatagrid-row': { - cursor: 'auto' - }, - '& .column-name': { - }, - '& .opt': { - width: 200 - }, -})); - -const filters = [ - <SearchInput source="condition" alwaysOn />, - - <NumberInput source="asnId" label="table.field.asnOrderItemLog.asnId" />, - <TextInput source="asnCode" label="table.field.asnOrderItemLog.asnCode" />, - <TextInput source="platItemId" label="table.field.asnOrderItemLog.platItemId" />, - <NumberInput source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" />, - <TextInput source="poCode" label="table.field.asnOrderItemLog.poCode" />, - <TextInput source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" />, - <TextInput source="matnrId" label="table.field.asnOrderItemLog.matnrId" />, - <TextInput source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" />, - <TextInput source="maktx" label="table.field.asnOrderItemLog.maktx" />, - <NumberInput source="anfme" label="table.field.asnOrderItemLog.anfme" />, - <TextInput source="stockUnit" label="table.field.asnOrderItemLog.stockUnit" />, - <NumberInput source="purQty" label="table.field.asnOrderItemLog.purQty" />, - <TextInput source="purUnit" label="table.field.asnOrderItemLog.purUnit" />, - <NumberInput source="qty" label="table.field.asnOrderItemLog.qty" />, - <TextInput source="splrCode" label="table.field.asnOrderItemLog.splrCode" />, - <TextInput source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" />, - <TextInput source="splrName" label="table.field.asnOrderItemLog.splrName" />, - <TextInput source="qrcode" label="table.field.asnOrderItemLog.qrcode" />, - <TextInput source="trackCode" label="table.field.asnOrderItemLog.trackCode" />, - <TextInput source="barcode" label="table.field.asnOrderItemLog.barcode" />, - <TextInput source="packName" label="table.field.asnOrderItemLog.packName" />, - <SelectInput source="ntyStatus" label="table.field.asnOrderItemLog.ntyStatus" - choices={[ - { id: 0, name: ' 鏈笂鎶�' }, - { id: 1, name: ' 宸蹭笂鎶�' }, - ]} - />, - - <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 AsnOrderItemLogList = () => { - 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.asnOrderItemLog"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} - filters={filters} - sort={{ field: "create_time", order: "desc" }} - actions={( - <TopToolbar> - <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> - <SelectColumnsButton preferenceKey='asnOrderItemLog' /> - <MyExportButton /> - </TopToolbar> - )} - perPage={DEFAULT_PAGE_SIZE} - > - <StyledDatagrid - preferenceKey='asnOrderItemLog' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} - omit={['id', 'createTime', 'createBy', 'memo']} - > - <NumberField source="id" /> - <NumberField source="asnId" label="table.field.asnOrderItemLog.asnId" /> - <TextField source="asnCode" label="table.field.asnOrderItemLog.asnCode" /> - <TextField source="platItemId" label="table.field.asnOrderItemLog.platItemId" /> - <NumberField source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" /> - <TextField source="poCode" label="table.field.asnOrderItemLog.poCode" /> - <TextField source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" /> - <TextField source="matnrId" label="table.field.asnOrderItemLog.matnrId" /> - <TextField source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" /> - <TextField source="maktx" label="table.field.asnOrderItemLog.maktx" /> - <NumberField source="anfme" label="table.field.asnOrderItemLog.anfme" /> - <NumberField source="purQty" label="table.field.asnOrderItemLog.purQty" /> - <TextField source="purUnit" label="table.field.asnOrderItemLog.purUnit" /> - <NumberField source="qty" label="table.field.asnOrderItemLog.qty" /> - <TextField source="splrCode" label="table.field.asnOrderItemLog.splrCode" /> - <TextField source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" /> - <TextField source="splrName" label="table.field.asnOrderItemLog.splrName" /> - <TextField source="qrcode" label="table.field.asnOrderItemLog.qrcode" /> - <TextField source="trackCode" label="table.field.asnOrderItemLog.trackCode" /> - <TextField source="packName" label="table.field.asnOrderItemLog.packName" /> - <TextField source="ntyStatus$" label="table.field.asnOrderItemLog.ntyStatus" sortable={false} /> - - <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> - <AsnOrderItemLogCreate - open={createDialog} - setOpen={setCreateDialog} - /> - <PageDrawer - title='AsnOrderItemLog Detail' - drawerVal={drawerVal} - setDrawerVal={setDrawerVal} - > - </PageDrawer> - </Box> - ) -} - -export default AsnOrderItemLogList; diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogPanel.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogPanel.jsx deleted file mode 100644 index 8fb6c06..0000000 --- a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogPanel.jsx +++ /dev/null @@ -1,183 +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 AsnOrderItemLogPanel = () => { - 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.asnOrderItemLog.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.asnOrderItemLog.asnId" - property={record.asnId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.asnCode" - property={record.asnCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.platItemId" - property={record.platItemId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.poDetlId" - property={record.poDetlId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.poCode" - property={record.poCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.fieldsIndex" - property={record.fieldsIndex} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.matnrId" - property={record.matnrId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.matnrCode" - property={record.matnrCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.maktx" - property={record.maktx} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.anfme" - property={record.anfme} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.stockUnit" - property={record.stockUnit} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.purQty" - property={record.purQty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.purUnit" - property={record.purUnit} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.qty" - property={record.qty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.splrCode" - property={record.splrCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.splrBatch" - property={record.splrBatch} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.splrName" - property={record.splrName} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.qrcode" - property={record.qrcode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.trackCode" - property={record.trackCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.barcode" - property={record.barcode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.packName" - property={record.packName} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.ntyStatus" - property={record.ntyStatus$} - /> - </Grid> - - </Grid> - </CardContent> - </Card > - </> - ); -}; - -export default AsnOrderItemLogPanel; diff --git a/rsf-admin/src/page/asnOrderItemLog/index.jsx b/rsf-admin/src/page/asnOrderItemLog/index.jsx deleted file mode 100644 index 555b583..0000000 --- a/rsf-admin/src/page/asnOrderItemLog/index.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - ListGuesser, - EditGuesser, - ShowGuesser, -} from "react-admin"; - -import AsnOrderItemLogList from "./AsnOrderItemLogList"; -import AsnOrderItemLogEdit from "./AsnOrderItemLogEdit"; - -export default { - list: AsnOrderItemLogList, - edit: AsnOrderItemLogEdit, - show: ShowGuesser, - recordRepresentation: (record) => { - return `${record.id}` - } -}; diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx index f3701ff..3160580 100644 --- a/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx +++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx @@ -141,7 +141,7 @@ {translate('common.edit.title.common')} </Typography> </Grid> - <AsnOrderItemLogList /> + {/* <AsnOrderItemLogList /> */} </> ) } diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx index 29c4a09..ceb24f6 100644 --- a/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx +++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx @@ -60,7 +60,6 @@ const filters = [ <SearchInput source="condition" alwaysOn />, - <TextInput source="code" label="table.field.asnOrderLog.code" />, <TextInput source="poCode" label="table.field.asnOrderLog.poCode" />, <NumberInput source="poId" label="table.field.asnOrderLog.poId" />, @@ -128,32 +127,27 @@ > <StyledDatagrid preferenceKey='asnOrderLog' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + bulkActionButtons={false} rowClick={'edit'} expand={false} expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo']} + omit={['id', 'createTime', 'createBy', 'memo', 'rleStatus']} > <NumberField source="id" /> <TextField source="code" label="table.field.asnOrderLog.code" /> <TextField source="poCode" label="table.field.asnOrderLog.poCode" /> <NumberField source="poId" label="table.field.asnOrderLog.poId" /> - <TextField source="type" label="table.field.asnOrderLog.type" /> - <TextField source="wkType" label="table.field.asnOrderLog.wkType" /> + <TextField source="type$" label="table.field.asnOrderLog.type" /> + <TextField source="wkType$" label="table.field.asnOrderLog.wkType" /> <NumberField source="anfme" label="table.field.asnOrderLog.anfme" /> <NumberField source="qty" label="table.field.asnOrderLog.qty" /> <TextField source="logisNo" label="table.field.asnOrderLog.logisNo" /> <DateField source="arrTime" label="table.field.asnOrderLog.arrTime" showTime /> <TextField source="rleStatus$" label="table.field.asnOrderLog.rleStatus" sortable={false} /> <TextField source="ntyStatus$" label="table.field.asnOrderLog.ntyStatus" sortable={false} /> - - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> + <TextField source="updateBy$" label="common.field.updateBy" /> <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> + <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} /> diff --git a/rsf-admin/src/page/batchRegular/BatchRegularCreate.jsx b/rsf-admin/src/page/batchRegular/BatchRegularCreate.jsx deleted file mode 100644 index 74b73e1..0000000 --- a/rsf-admin/src/page/batchRegular/BatchRegularCreate.jsx +++ /dev/null @@ -1,132 +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 BatchRegularCreate = (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}> - <TextInput - label="table.field.batchRegular.name" - source="name" - parse={v => v} - autoFocus - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.batchRegular.code" - source="code" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.batchRegular.property" - source="property" - 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 BatchRegularCreate; diff --git a/rsf-admin/src/page/batchRegular/BatchRegularEdit.jsx b/rsf-admin/src/page/batchRegular/BatchRegularEdit.jsx deleted file mode 100644 index 36629d5..0000000 --- a/rsf-admin/src/page/batchRegular/BatchRegularEdit.jsx +++ /dev/null @@ -1,104 +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 BatchRegularEdit = () => { - 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}> - <TextInput - label="table.field.batchRegular.name" - source="name" - parse={v => v} - autoFocus - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.batchRegular.code" - source="code" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.batchRegular.property" - source="property" - 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 BatchRegularEdit; diff --git a/rsf-admin/src/page/batchRegular/BatchRegularList.jsx b/rsf-admin/src/page/batchRegular/BatchRegularList.jsx deleted file mode 100644 index 5a19e66..0000000 --- a/rsf-admin/src/page/batchRegular/BatchRegularList.jsx +++ /dev/null @@ -1,156 +0,0 @@ -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 BatchRegularCreate from "./BatchRegularCreate"; -import BatchRegularPanel from "./BatchRegularPanel"; -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': { - 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.batchRegular.name" />, - <TextInput source="code" label="table.field.batchRegular.code" />, - <TextInput source="property" label="table.field.batchRegular.property" />, - - <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 BatchRegularList = () => { - 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.batchRegular"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} - filters={filters} - sort={{ field: "create_time", order: "desc" }} - actions={( - <TopToolbar> - <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> - <SelectColumnsButton preferenceKey='batchRegular' /> - <MyExportButton /> - </TopToolbar> - )} - perPage={DEFAULT_PAGE_SIZE} - > - <StyledDatagrid - preferenceKey='batchRegular' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} - expand={() => <BatchRegularPanel />} - expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo']} - > - <NumberField source="id" /> - <TextField source="name" label="table.field.batchRegular.name" /> - <TextField source="code" label="table.field.batchRegular.code" /> - <TextField source="property" label="table.field.batchRegular.property" /> - - <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> - <BatchRegularCreate - open={createDialog} - setOpen={setCreateDialog} - /> - <PageDrawer - title='BatchRegular Detail' - drawerVal={drawerVal} - setDrawerVal={setDrawerVal} - > - </PageDrawer> - </Box> - ) -} - -export default BatchRegularList; diff --git a/rsf-admin/src/page/batchRegular/BatchRegularPanel.jsx b/rsf-admin/src/page/batchRegular/BatchRegularPanel.jsx deleted file mode 100644 index d1c80be..0000000 --- a/rsf-admin/src/page/batchRegular/BatchRegularPanel.jsx +++ /dev/null @@ -1,69 +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 BatchRegularPanel = () => { - 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.batchRegular.name'))}: {record.name} - </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.batchRegular.name" - property={record.name} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.batchRegular.code" - property={record.code} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.batchRegular.property" - property={record.property} - /> - </Grid> - - </Grid> - </CardContent> - </Card > - </> - ); -}; - -export default BatchRegularPanel; diff --git a/rsf-admin/src/page/batchRegular/index.jsx b/rsf-admin/src/page/batchRegular/index.jsx deleted file mode 100644 index 5752ce6..0000000 --- a/rsf-admin/src/page/batchRegular/index.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - ListGuesser, - EditGuesser, - ShowGuesser, -} from "react-admin"; - -import BatchRegularList from "./BatchRegularList"; -import BatchRegularEdit from "./BatchRegularEdit"; - -export default { - list: BatchRegularList, - edit: BatchRegularEdit, - show: ShowGuesser, - recordRepresentation: (record) => { - return `${record.name}` - } -}; diff --git a/rsf-admin/src/page/purchase/PurchaseEdit.jsx b/rsf-admin/src/page/purchase/PurchaseEdit.jsx index b12726f..93bb094 100644 --- a/rsf-admin/src/page/purchase/PurchaseEdit.jsx +++ b/rsf-admin/src/page/purchase/PurchaseEdit.jsx @@ -28,12 +28,13 @@ import CustomerTopToolBar from "../components/EditTopToolBar"; import MemoInput from "../components/MemoInput"; import StatusSelectInput from "../components/StatusSelectInput"; +import PurchaseItemList from "./PurchaseItemList"; const FormToolbar = () => { const { getValues } = useFormContext(); return ( - <Toolbar sx={{ justifyContent: 'space-between' }}> + <Toolbar sx={{ justifyContent: 'end' }}> <SaveButton /> <DeleteButton mutationMode="optimistic" /> </Toolbar> @@ -44,26 +45,27 @@ const translate = useTranslate(); return ( - <Edit - redirect="list" - mutationMode={EDIT_MODE} - actions={<CustomerTopToolBar />} - aside={<EditBaseAside />} - > - <SimpleForm - shouldUnregister - warnWhenUnsavedChanges - toolbar={<FormToolbar />} - mode="onTouched" - defaultValues={{}} - // validate={(values) => { }} + <> + <Edit + redirect="list" + mutationMode={EDIT_MODE} + actions={<CustomerTopToolBar />} + aside={<EditBaseAside />} > - <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}> + <SimpleForm + shouldUnregister + warnWhenUnsavedChanges + toolbar={<FormToolbar />} + mode="onTouched" + defaultValues={{}} + // validate={(values) => { }} + > + <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}> + <Grid item xs={18} md={10}> + <Typography variant="h6" gutterBottom> + {translate('common.edit.title.main')} + </Typography> + {/* <Stack direction='row' gap={2}> <TextInput label="table.field.purchase.code" source="code" @@ -71,95 +73,80 @@ autoFocus /> </Stack> */} - <Stack direction='row' gap={2}> - <TextInput - label="table.field.purchase.type" - source="type" - parse={v => v} - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.purchase.source" - source="source" - parse={v => v} - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.purchase.type" + source="type$" + parse={v => v} + validate={required()} + /> + <TextInput + label="table.field.purchase.source" + source="source" + parse={v => v} + validate={required()} + /> + <DateInput + label="table.field.purchase.preArr" + source="preArr" + /> + <NumberInput + label="table.field.purchase.anfme" + source="anfme" + validate={required()} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.purchase.qty" + source="qty" + validate={required()} + /> + <NumberInput + label="table.field.purchase.workQty" + source="workQty" + validate={required()} + /> + <TextInput + label="table.field.purchase.channel" + source="channel" + parse={v => v} + /> + <TextInput + label="table.field.purchase.platCode" + source="platCode" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> <DateInput - label="table.field.purchase.preArr" - source="preArr" - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.purchase.anfme" - source="anfme" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.purchase.qty" - source="qty" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.purchase.workQty" - source="workQty" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.purchase.channel" - source="channel" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.purchase.platCode" - source="platCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <DateInput - label="table.field.purchase.startTime" - source="startTime" - /> - </Stack> - <Stack direction='row' gap={2}> - <DateInput - label="table.field.purchase.endTime" - source="endTime" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.purchase.project" - source="project" - parse={v => v} - /> - </Stack> - + label="table.field.purchase.startTime" + source="startTime" + /> + <DateInput + label="table.field.purchase.endTime" + source="endTime" + /> + <TextInput + label="table.field.purchase.project" + source="project" + parse={v => v} + /> + </Stack> + </Grid> + <Grid item xs={6} md={2}> + <Typography variant="h6" gutterBottom> + {translate('common.edit.title.common')} + </Typography> + <StatusSelectInput /> + <Box mt="2em" /> + <MemoInput /> + </Grid> </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 > + </SimpleForm> + </Edit > + <PurchaseItemList /> + </> ) } diff --git a/rsf-admin/src/page/purchaseItem/PurchaseItemCreate.jsx b/rsf-admin/src/page/purchase/PurchaseItemCreate.jsx similarity index 100% rename from rsf-admin/src/page/purchaseItem/PurchaseItemCreate.jsx rename to rsf-admin/src/page/purchase/PurchaseItemCreate.jsx diff --git a/rsf-admin/src/page/purchaseItem/PurchaseItemEdit.jsx b/rsf-admin/src/page/purchase/PurchaseItemEdit.jsx similarity index 100% rename from rsf-admin/src/page/purchaseItem/PurchaseItemEdit.jsx rename to rsf-admin/src/page/purchase/PurchaseItemEdit.jsx diff --git a/rsf-admin/src/page/purchaseItem/PurchaseItemList.jsx b/rsf-admin/src/page/purchase/PurchaseItemList.jsx similarity index 87% rename from rsf-admin/src/page/purchaseItem/PurchaseItemList.jsx rename to rsf-admin/src/page/purchase/PurchaseItemList.jsx index ce3083d..970263d 100644 --- a/rsf-admin/src/page/purchaseItem/PurchaseItemList.jsx +++ b/rsf-admin/src/page/purchase/PurchaseItemList.jsx @@ -31,19 +31,16 @@ ReferenceArrayInput, AutocompleteInput, DeleteButton, + useGetRecordId, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; import PurchaseItemCreate from "./PurchaseItemCreate"; -import PurchaseItemPanel from "./PurchaseItemPanel"; 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': { @@ -90,19 +87,15 @@ const PurchaseItemList = () => { const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); - - const location = useLocation(); - const queryParams = new URLSearchParams(location.search); - const poId = queryParams.get("poId"); + const poId = useGetRecordId(); return ( <> - {poId && <CustomerTopToolBar backPrevious={true} />} <Box display="flex"> <List + resource="purchaseItem" sx={{ flexGrow: 1, transition: (theme) => @@ -114,6 +107,7 @@ title={"menu.purchaseItem"} empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} filters={filters} + filter={{ purchaseId: poId }} sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> @@ -129,7 +123,7 @@ preferenceKey='purchaseItem' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} rowClick={(id, resource, record) => false} - omit={['id', 'createTime', 'createBy', 'memo']} + omit={['id', 'createTime','purchaseId', 'platItemId', 'createBy', 'memo']} > <NumberField source="id" /> <NumberField source="purchaseId" label="table.field.purchaseItem.purchaseId" /> @@ -145,14 +139,9 @@ <TextField source="splrName" label="table.field.purchaseItem.splrName" /> <TextField source="splrCode" label="table.field.purchaseItem.splrCode" /> <TextField source="splrBatch" label="table.field.purchaseItem.splrBatch" /> - - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> + <TextField source="updateBy$" label="common.field.updateBy" reference="user" /> <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> + <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} /> diff --git a/rsf-admin/src/page/purchase/PurchaseList.jsx b/rsf-admin/src/page/purchase/PurchaseList.jsx index ffdb648..0a45197 100644 --- a/rsf-admin/src/page/purchase/PurchaseList.jsx +++ b/rsf-admin/src/page/purchase/PurchaseList.jsx @@ -124,20 +124,13 @@ preferenceKey='purchase' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} rowClick={'edit'} - expand={() => <PurchasePanel />} + expand={false} expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo']} + omit={['id', 'createTime', 'createBy', 'memo', 'preArr', 'channel','startTime','workQty', 'endTime']} > <NumberField source="id" /> - <MyField - source="code" - label="table.field.purchase.code" - onClick={(event, record, val) => { - event.stopPropagation(); - assign(record); - }} - /> - <TextField source="type" label="table.field.purchase.type" /> + <TextField source="code" label="table.field.purchase.code" /> + <TextField source="type$" label="table.field.purchase.type" /> <TextField source="source" label="table.field.purchase.source" /> <DateField source="preArr" label="table.field.purchase.preArr" showTime /> <NumberField source="anfme" label="table.field.purchase.anfme" /> @@ -148,14 +141,9 @@ <DateField source="startTime" label="table.field.purchase.startTime" showTime /> <DateField source="endTime" label="table.field.purchase.endTime" showTime /> <TextField source="project" label="table.field.purchase.project" /> - - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> + <TextField source="updateBy$" label="common.field.updateBy" /> <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> + <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} /> diff --git a/rsf-admin/src/page/purchaseItem/PurchaseItemPanel.jsx b/rsf-admin/src/page/purchaseItem/PurchaseItemPanel.jsx deleted file mode 100644 index 0662e94..0000000 --- a/rsf-admin/src/page/purchaseItem/PurchaseItemPanel.jsx +++ /dev/null @@ -1,129 +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 PurchaseItemPanel = () => { - 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.purchaseItem.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.purchaseItem.purchaseId" - property={record.purchaseId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.platItemId" - property={record.platItemId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.matnrCode" - property={record.matnrCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.matnrName" - property={record.matnrName} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.unit" - property={record.unit} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.anfme" - property={record.anfme} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.qty" - property={record.qty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.nromQty" - property={record.nromQty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.asnQty" - property={record.asnQty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.printQty" - property={record.printQty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.splrName" - property={record.splrName} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.splrCode" - property={record.splrCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.purchaseItem.splrBatch" - property={record.splrBatch} - /> - </Grid> - - </Grid> - </CardContent> - </Card > - </> - ); -}; - -export default PurchaseItemPanel; diff --git a/rsf-admin/src/page/purchaseItem/index.jsx b/rsf-admin/src/page/purchaseItem/index.jsx deleted file mode 100644 index 022b7ea..0000000 --- a/rsf-admin/src/page/purchaseItem/index.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - ListGuesser, - EditGuesser, - ShowGuesser, -} from "react-admin"; - -import PurchaseItemList from "./PurchaseItemList"; -import PurchaseItemEdit from "./PurchaseItemEdit"; - -export default { - list: PurchaseItemList, - edit: PurchaseItemEdit, - show: ShowGuesser, - recordRepresentation: (record) => { - return `${record.id}` - } -}; diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx index d04c3e1..55f78a6 100644 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx +++ b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx @@ -21,10 +21,10 @@ 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"; @@ -33,17 +33,13 @@ const FormToolbar = () => { const form = useFormContext(); + const { record, isPending } = useEditContext(); const redirect = useRedirect(); - const notify = useNotify(); - const onSuccess = (data) => { - const { dictTypeId, dictTypeCode } = data - notify(`淇敼鎴愬姛!`); - redirect(`/dictData?dictTypeId=${dictTypeId}&code=${dictTypeCode}`); - } - return ( - <Toolbar sx={{ justifyContent: 'space-between' }}> - <SaveButton type="button" mutationOptions={{ onSuccess }} /> + <Toolbar sx={{ justifyContent: 'end' }}> + <SaveButton type="button" mutationOptions={{onSuccess:() => { + redirect('/dictType/' + record?.dictTypeId) + } }}/> <DeleteButton mutationMode="optimistic" /> </Toolbar> ) @@ -52,17 +48,15 @@ const DictDataEdit = () => { const translate = useTranslate(); - return ( <Edit redirect="list" + resource="dictData" mutationMode={EDIT_MODE} actions={<CustomerTopToolBar backPrevious={true} />} aside={<EditBaseAside />} > <SimpleForm - shouldUnregister - warnWhenUnsavedChanges toolbar={<FormToolbar />} mode="onTouched" defaultValues={{}} @@ -77,8 +71,8 @@ <TextInput label="table.field.dictData.dictTypeId" source="dictTypeId" + readOnly parse={v => v} - autoFocus validate={required()} /> </Stack> @@ -86,6 +80,7 @@ <TextInput label="table.field.dictData.dictTypeCode" source="dictTypeCode" + readOnly parse={v => v} validate={required()} /> diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx index 5506184..2b0b618 100644 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx +++ b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx @@ -31,19 +31,18 @@ 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 DictDataPanel from "./DictDataPanel"; 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 }) => ({ @@ -62,14 +61,12 @@ 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" @@ -84,21 +81,16 @@ const DictDataList = () => { const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); - const [fit, setFilters] = useState(filters); - const location = useLocation(); - const queryParams = new URLSearchParams(location.search); - const dictTypeId = queryParams.get('dictTypeId'); - const dictTypeCode = queryParams.get('code'); - + const dictId = useGetRecordId(); + const {data: dicts, isPending, error} = useGetOne('dictType', {id: dictId}); + return ( <> - {dictTypeId && <CustomerTopToolBar backPrevious={true} />} <Box display="flex" > - <List + resource="dictData" sx={{ flexGrow: 1, transition: (theme) => @@ -110,7 +102,7 @@ title={"menu.dictData"} empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} filters={filters} - filter={dictTypeId ? { dictTypeId } : undefined} + filter={{ dictTypeId: dictId }} sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> @@ -125,7 +117,7 @@ <StyledDatagrid preferenceKey='dictData' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} + rowClick="edit" omit={['id', 'createTime', 'createBy', 'memo']} > <NumberField source="id" /> @@ -134,28 +126,22 @@ <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="color" label="table.field.dictData.color" /> */} - - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> + <TextField source="updateBy$" label="common.field.updateBy" /> <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> + <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' }} /> - <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} redirect={"/dictType/" + dictId} /> </WrapperField> </StyledDatagrid> </List> <DictDataCreate open={createDialog} + record={dicts} setOpen={setCreateDialog} - row={{ dictTypeId, dictTypeCode }} /> <PageDrawer title='DictData Detail' diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataPanel.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataPanel.jsx deleted file mode 100644 index 1f38976..0000000 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataPanel.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 DictDataPanel = () => { - 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.dictData.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.dictData.dictTypeId" - property={record.dictTypeId$} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.dictData.dictTypeCode" - property={record.dictTypeCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.dictData.value" - property={record.value} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.dictData.label" - property={record.label} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.dictData.sort" - property={record.sort} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.dictData.color" - property={record.color} - /> - </Grid> - - </Grid> - </CardContent> - </Card > - </> - ); -}; - -export default DictDataPanel; 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/dictData/DictDataCreate.jsx b/rsf-admin/src/page/system/dicts/dictType/DictDataCreate.jsx similarity index 94% rename from rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx rename to rsf-admin/src/page/system/dicts/dictType/DictDataCreate.jsx index afc4ea0..058996b 100644 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx +++ b/rsf-admin/src/page/system/dicts/dictType/DictDataCreate.jsx @@ -32,8 +32,7 @@ import MemoInput from "../../../components/MemoInput"; const DictDataCreate = (props) => { - const { open, setOpen, row } = props; - + const { open, setOpen, record } = props; const translate = useTranslate(); const notify = useNotify(); @@ -55,6 +54,7 @@ return ( <> <CreateBase + resource="dictData" record={{}} transform={(data) => { return data; @@ -88,10 +88,10 @@ <TextInput label="table.field.dictData.dictTypeId" source="dictTypeId" + defaultValue={record?.id} parse={v => v} - autoFocus + readOnly validate={required()} - defaultValue={row.dictTypeId} /> </Grid> <Grid item xs={6} display="flex" gap={1}> @@ -99,8 +99,9 @@ label="table.field.dictData.dictTypeCode" source="dictTypeCode" parse={v => v} + readOnly + defaultValue={record?.code} validate={required()} - defaultValue={row.dictTypeCode} /> </Grid> <Grid item xs={6} display="flex" gap={1}> @@ -115,6 +116,7 @@ <TextInput label="table.field.dictData.label" validate={required()} + autoFocus source="label" parse={v => v} /> diff --git a/rsf-admin/src/page/system/dicts/dictType/DictDataEdit.jsx b/rsf-admin/src/page/system/dicts/dictType/DictDataEdit.jsx new file mode 100644 index 0000000..c80fbfc --- /dev/null +++ b/rsf-admin/src/page/system/dicts/dictType/DictDataEdit.jsx @@ -0,0 +1,163 @@ +import React, { useState, useRef, useEffect, useMemo } from "react"; +import { + Edit, + SimpleForm, + Form, + FormDataConsumer, + useTranslate, + TextInput, + NumberInput, + BooleanInput, + DateInput, + SelectInput, + ReferenceInput, + ReferenceArrayInput, + AutocompleteInput, + SaveButton, + Toolbar, + Labeled, + NumberField, + required, + useRecordContext, + DeleteButton, + useNotify, + useRedirect, + useEditContext, + EditBase, +} from 'react-admin'; +import { useWatch, useFormContext } from "react-hook-form"; +import { Stack, Grid, Box, Typography, Dialog, DialogActions, DialogContent, DialogTitle } from '@mui/material'; +import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting'; +import DialogCloseButton from "../../../components/DialogCloseButton"; +import EditBaseAside from "../../../components/EditBaseAside"; +import MemoInput from "../../../components/MemoInput"; +import StatusSelectInput from "../../../components/StatusSelectInput"; + +const EditToolbar = () => { + 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 = (props) => { + const { open, setOpen, record } = props; + const translate = useTranslate(); + const handleClose = (event, reason) => { + if (reason !== "backdropClick") { + setOpen(false); + } + }; + return ( + <> + <Edit + id={record?.id} + resource="dictData" + mutationMode={EDIT_MODE} + > + <Dialog + open={open} + onClose={handleClose} + aria-labelledby="form-dialog-title" + fullWidth + disableRestoreFocus + maxWidth="md" + > + <Form> + <DialogTitle id="form-dialog-title" sx={{ + position: 'sticky', + top: 0, + backgroundColor: 'background.paper', + zIndex: 1000 + }} + > + {translate('update.title')} + <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}> + <DialogCloseButton onClose={handleClose} /> + </Box> + </DialogTitle> + <DialogContent sx={{ mt: 2 }}> + <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 + defaultValue={record?.id} + parse={v => v} + validate={required()} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.dictData.dictTypeCode" + source="dictTypeCode" + defaultValue={record?.code} + 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> + </Grid> + <Grid item xs={12} md={4}> + <Typography variant="h6" gutterBottom> + {translate('common.edit.title.common')} + </Typography> + <StatusSelectInput /> + <Box mt="2em" /> + <MemoInput /> + </Grid> + </Grid> + </DialogContent> + <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}> + <Toolbar sx={{ width: '100%', justifyContent: 'end' }} > + <SaveButton type="button" mutationOptions={{ + onSuccess: () => { + setOpen(false) + } + }} /> + </Toolbar> + </DialogActions> + </Form> + </Dialog> + </Edit > + </> + ) +} + +export default DictDataEdit; diff --git a/rsf-admin/src/page/system/dicts/dictType/DictDataList.jsx b/rsf-admin/src/page/system/dicts/dictType/DictDataList.jsx new file mode 100644 index 0000000..c039b96 --- /dev/null +++ b/rsf-admin/src/page/system/dicts/dictType/DictDataList.jsx @@ -0,0 +1,173 @@ +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, + Button, +} 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'; +import DictDataEdit from "./DictDataEdit"; +import { use } from "react"; + + +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 [editDialog, setEditDialog] = useState(false); + const [drawerVal, setDrawerVal] = useState(false); + const [select, setSelect] = useState({}); + 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 + bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + rowClick={(id, resource ,record)=> { + setSelect(record) + setEditDialog(true) + }} + 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' }} type="button" redirect={"/dictType/" + dictId} onClick={()=> { + setEditDialog(true) + }} /> */} + <Button onClick={()=>{setEditDialog(true)}}>缂栬緫</Button> + <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode='pessimistic' redirect={"/dictType/" + dictId} /> + </WrapperField> + </StyledDatagrid> + </List> + <DictDataEdit + open={editDialog} + record={select} + setOpen={setEditDialog} + /> + <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/dictType/DictTypeCreate.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx index 8acd215..0a31d6f 100644 --- a/rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx +++ b/rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx @@ -33,10 +33,8 @@ const DictTypeCreate = (props) => { const { open, setOpen } = props; - const translate = useTranslate(); const notify = useNotify(); - const handleClose = (event, reason) => { if (reason !== "backdropClick") { setOpen(false); diff --git a/rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx index 6155c7b..c9905f0 100644 --- a/rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx +++ b/rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx @@ -28,11 +28,13 @@ import CustomerTopToolBar from "../../../components/EditTopToolBar"; import MemoInput from "../../../components/MemoInput"; import StatusSelectInput from "../../../components/StatusSelectInput"; +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> @@ -41,61 +43,51 @@ const DictTypeEdit = () => { const translate = useTranslate(); - return ( - <Edit - redirect="list" - mutationMode={EDIT_MODE} - actions={<CustomerTopToolBar />} - aside={<EditBaseAside />} - > - <SimpleForm - shouldUnregister - warnWhenUnsavedChanges - toolbar={<FormToolbar />} - mode="onTouched" - defaultValues={{}} - // validate={(values) => { }} + <> + <Edit + redirect="list" + mutationMode={EDIT_MODE} + actions={<CustomerTopToolBar />} + aside={<EditBaseAside />} > - <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.dictType.code" - source="code" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.dictType.name" - source="name" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.dictType.description" - source="description" - parse={v => v} - /> - </Stack> - + <SimpleForm + shouldUnregister + warnWhenUnsavedChanges + toolbar={<FormToolbar />} + mode="onTouched" + defaultValues={{}} + // validate={(values) => { }} + > + <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}> + <Grid item xs={14} md={10}> + <Typography variant="h6" gutterBottom> + {translate('common.edit.title.main')} + </Typography> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.dictType.code" + readOnly + source="code" + parse={v => v} + /> + <TextInput + label="table.field.dictType.name" + source="name" + parse={v => v} + /> + <TextInput + label="table.field.dictType.description" + source="description" + parse={v => v} + /> + </Stack> + </Grid> </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 > + </SimpleForm> + </Edit > + <DictDataList /> + </> ) } diff --git a/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx index e7d18bd..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" @@ -81,15 +75,8 @@ const DictTypeList = () => { const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); - - const navigate = useNavigate(); - const assign = (record) => { - navigate(`/dictData?dictTypeId=${record.id}&code=${record.code}`); - } - return ( <Box display="flex"> <List @@ -118,26 +105,21 @@ <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" /> - - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> + <TextField source="updateBy$" label="common.field.updateBy" /> <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> + <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} /> 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/SerialRuleItemEdit.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemEdit.jsx new file mode 100644 index 0000000..ca3b86c --- /dev/null +++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemEdit.jsx @@ -0,0 +1,158 @@ +import React, { useState, useRef, useEffect, useMemo } from "react"; +import { + Edit, + Form, + 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, Dialog, DialogContent, DialogTitle, DialogActions } from '@mui/material'; +import * as Common from '@/utils/common'; +import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting'; +import EditBaseAside from "../../components/EditBaseAside"; +import DialogCloseButton from "../../components/DialogCloseButton"; +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 = (props) => { + const { open, setOpen, record } = props; + const translate = useTranslate(); + const handleClose = (event, reason) => { + if (reason !== "backdropClick") { + setOpen(false); + } + }; + return ( + <Edit + id={record.id} + redirect="list" + resource="serialRuleItem" + mutationMode={EDIT_MODE} + > + <Dialog + open={open} + onClose={handleClose} + aria-labelledby="form-dialog-title" + fullWidth + disableRestoreFocus + maxWidth="md" + > + <Form + shouldUnregister + warnWhenUnsavedChanges + toolbar={<FormToolbar />} + mode="onTouched" + defaultValues={{}} + > + <DialogTitle id="form-dialog-title" sx={{ + position: 'sticky', + top: 0, + backgroundColor: 'background.paper', + zIndex: 1000 + }} + > + {translate('update.title')} + <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}> + <DialogCloseButton onClose={handleClose} /> + </Box> + </DialogTitle> + <DialogContent> + <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" + readOnly + autoFocus + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.serialRuleItem.wkType" + source="wkType$" + readOnly + 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> + </DialogContent> + <DialogActions> + + </DialogActions> + </Form> + + </Dialog> + </Edit > + ) +} + +export default SerialRuleItemEdit; 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}` - } -}; diff --git a/rsf-admin/src/page/taskLog/TaskItemLogList.jsx b/rsf-admin/src/page/taskLog/TaskItemLogList.jsx index acf1ae7..8659c06 100644 --- a/rsf-admin/src/page/taskLog/TaskItemLogList.jsx +++ b/rsf-admin/src/page/taskLog/TaskItemLogList.jsx @@ -57,7 +57,6 @@ <SearchInput source="condition" alwaysOn />, <DateInput label='common.time.after' source="timeStart" alwaysOn />, <DateInput label='common.time.before' source="timeEnd" alwaysOn />, - <NumberInput source="taskItemId" label="table.field.taskItemLog.taskItemId" />, <NumberInput source="taskId" label="table.field.taskItemLog.taskId" />, <NumberInput source="orderId" label="table.field.taskItemLog.orderId" />, diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx index 21bc154..b1a0a68 100644 --- a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx +++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx @@ -127,13 +127,13 @@ preferenceKey='warehouseAreasItem' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} rowClick={(id, resource, record) => false} - omit={['id', 'createTime', 'createBy', 'memo', 'areaId', 'matnrId']} + omit={['id', 'createTime', 'createBy', 'memo', 'areaId', 'matnrId', 'batch', 'shipperId', 'splrId']} > <NumberField source="id" /> <NumberField source="areaId" label="table.field.warehouseAreasItem.areaId" /> <TextField source="areaName" label="table.field.warehouseAreasItem.areaName" /> <NumberField source="matnrId" label="table.field.warehouseAreasItem.matnrId" /> - <TextField source="matnrName" label="table.field.warehouseAreasItem.matnrName" /> + <TextField source="maktx" label="table.field.warehouseAreasItem.matnrName" /> <TextField source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" /> <TextField source="trackCode" label="table.field.warehouseAreasItem.barcode" /> <NumberField source="anfme" label="table.field.warehouseAreasItem.anfme" /> @@ -148,14 +148,9 @@ <NumberField source="weight" label="table.field.warehouseAreasItem.weight" /> <TextField source="prodTime" label="table.field.warehouseAreasItem.prodTime" /> <TextField source="splrBtch" label="table.field.warehouseAreasItem.splrBtch" /> - - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> + <TextField source="updateBy$" label="common.field.updateBy" /> <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> + <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} /> diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java index 43131e0..5f6e0c4 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java @@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -44,7 +45,7 @@ } public static <T> Workbook create(List<T> list, Class<T> clz, boolean flagTemplate) { - HSSFWorkbook workbook = new HSSFWorkbook(); + XSSFWorkbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(clz.getSimpleName()); Row header = sheet.createRow(0); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java index 2e9e296..b6458c5 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java @@ -13,6 +13,7 @@ import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; import com.vincent.rsf.server.manager.controller.params.BatchUpdateParam; import com.vincent.rsf.server.manager.entity.AsnOrder; +import com.vincent.rsf.server.manager.entity.Matnr; import com.vincent.rsf.server.manager.service.AsnOrderService; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.controller.BaseController; @@ -121,7 +122,13 @@ @PostMapping("/asnOrder/export") @ApiOperation("瀵煎嚭") public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { - ExcelUtil.build(ExcelUtil.create(asnOrderService.list(), AsnOrder.class), response); + List<AsnOrder> orders = new ArrayList<>(); + if (!Objects.isNull(map.get("ids"))) { + orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, map.get("ids")).eq(AsnOrder::getStatus, 1)); + } else { + orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().last("limit 1")); + } + ExcelUtil.build(ExcelUtil.create(orders, AsnOrder.class), response); } /** diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java index c04887e..267ca22 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java @@ -118,10 +118,17 @@ @PostMapping("/asnOrderItem/export") @ApiOperation("瀵煎嚭鏀惰揣閫氱煡鍗曟槑缁�") public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { - AsnOrderTemplate template = ExcelUtil.mockData(AsnOrderTemplate.class); - List<AsnOrderTemplate> list = new ArrayList<>(); - list.add(template); - ExcelUtil.build(ExcelUtil.create(list, AsnOrderTemplate.class, true), response); +// AsnOrderTemplate template = ExcelUtil.mockData(AsnOrderTemplate.class); +// List<AsnOrderTemplate> list = new ArrayList<>(); +// list.add(template); + List<AsnOrderItem> orderItems = new ArrayList<>(); + if (!Objects.isNull(map.get("ids"))) { + orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getId, map.get("ids")).eq(AsnOrderItem::getStatus, 1)); + } else { + orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().last("limit 1")); + } + + ExcelUtil.build(ExcelUtil.create(orderItems, AsnOrderItem.class, true), response); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java index 346f37e..38b863f 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java @@ -1,7 +1,12 @@ package com.vincent.rsf.server.manager.entity; import java.text.SimpleDateFormat; -import java.util.Date; +import java.util.*; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.vincent.rsf.server.system.constant.DictTypeCode; +import com.vincent.rsf.server.system.entity.DictData; +import com.vincent.rsf.server.system.service.DictDataService; import org.springframework.format.annotation.DateTimeFormat; import com.baomidou.mybatisplus.annotation.TableLogic; import java.text.SimpleDateFormat; @@ -206,6 +211,42 @@ // null // 澶囨敞 // ); + public String getExceStatus$() { + if (Cools.isEmpty(this.exceStatus)){ + return ""; + } + DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); + DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_ASN_EXCE_STATUS).eq(DictData::getValue, this.exceStatus)); + if (Objects.isNull(dictData)) { + return null; + } + return dictData.getLabel(); + } + + public String getType$(){ + if (Cools.isEmpty(this.type)){ + return ""; + } + DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); + DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_ORDER_TYPE).eq(DictData::getValue, this.type)); + if (Objects.isNull(dictData)) { + return null; + } + return dictData.getLabel(); + } + + public String getWkType$(){ + if (Cools.isEmpty(this.wkType)){ + return ""; + } + DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); + DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_BUSINESS_TYPE).eq(DictData::getValue, this.wkType)); + if (Objects.isNull(dictData)) { + return null; + } + return dictData.getLabel(); + } + public String getArrTime$(){ if (Cools.isEmpty(this.arrTime)){ return ""; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Purchase.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Purchase.java index b348367..ec26c9b 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Purchase.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Purchase.java @@ -1,8 +1,12 @@ package com.vincent.rsf.server.manager.entity; import java.text.SimpleDateFormat; -import java.util.Date; +import java.util.*; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.vincent.rsf.server.system.constant.DictTypeCode; +import com.vincent.rsf.server.system.entity.DictData; +import com.vincent.rsf.server.system.service.DictDataService; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; @@ -222,6 +226,20 @@ // null // 澶囨敞 // ); + public String getType$() { + if (Cools.isEmpty(this.type)) { + return ""; + } + DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); + DictData dictDatas = dictDataService.getOne(new LambdaQueryWrapper<DictData>() + .eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_ORDER_TYPE) + .eq(DictData::getValue, this.type)); + if (Objects.isNull(dictDatas) || Objects.isNull(dictDatas.getLabel())) { + return null; + } + return dictDatas.getLabel(); + } + public String getPreArr$(){ if (Cools.isEmpty(this.preArr)){ return ""; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java index b2ee5fa..6c91462 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java @@ -238,11 +238,6 @@ if (Objects.isNull(order)) { throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); } - order.setExceStatus(Short.parseShort(AsnExceStatus.ASN_EXCE_STATUS_TASK_CLOSE.val)); - - if (!this.updateById(order)) { - throw new CoolException("鍗曟嵁鍏抽棴澶辫触锛侊紒"); - } try { operateOrderLogs(order); } catch (Exception e) { @@ -263,6 +258,15 @@ if (Objects.isNull(asrder) || Objects.isNull(asrder.getId())) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } + asrder.setExceStatus(Short.parseShort(AsnExceStatus.ASN_EXCE_STATUS_TASK_CLOSE.val)); + + if (!this.updateById(asrder)) { + throw new CoolException("鍗曟嵁鍏抽棴澶辫触锛侊紒"); + } + List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, asrder.getId())); + if (orderItems.isEmpty()) { + throw new CoolException("鏀惰揣鏄庣粏涓虹┖锛侊紒"); + } if (Objects.isNull(asrder.getAnfme()) || asrder.getAnfme().compareTo(0.00) == 0) { throw new CoolException("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒"); } diff --git a/rsf-server/src/main/resources/mapper/manager/AsnOrderItemMapper.xml b/rsf-server/src/main/resources/mapper/manager/AsnOrderItemMapper.xml index 15f722f..aa6bbcf 100644 --- a/rsf-server/src/main/resources/mapper/manager/AsnOrderItemMapper.xml +++ b/rsf-server/src/main/resources/mapper/manager/AsnOrderItemMapper.xml @@ -18,6 +18,7 @@ stock_unit, pur_qty, pur_unit, + prod_time, qty, splr_code, splr_batch, -- Gitblit v1.9.1