From b5e8045d5f5b5401b696db12f62fdbcc86dc5c5d Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 10 四月 2025 11:40:02 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop
---
rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx | 156 ++--
rsf-admin/src/page/taskLog/TaskLogEdit.jsx | 249 ++----
rsf-admin/src/page/task/TaskItemCreate.jsx | 0
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java | 3
rsf-admin/src/page/fields/FieldsList.jsx | 6
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java | 4
rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx | 177 +++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java | 98 +-
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 103 ++
rsf-admin/src/page/system/role/AssignPermissions.jsx | 5
rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx | 2
rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java | 5
rsf-admin/src/page/fields/FieldsCreate.jsx | 10
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java | 4
rsf-admin/src/page/qlyInspect/AsnSelModal.jsx | 12
rsf-admin/src/page/task/TaskEdit.jsx | 238 ++----
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java | 2
rsf-admin/src/i18n/zh.js | 5
rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx | 222 ++---
rsf-admin/src/i18n/en.js | 1
rsf-admin/src/page/ResourceContent.js | 18
rsf-admin/src/config/setting.js | 2
rsf-server/src/main/resources/application-dev.yml | 8
rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx | 14
rsf-admin/src/page/fields/FieldsEdit.jsx | 8
rsf-admin/src/page/taskLog/TaskLogList.jsx | 50
rsf-admin/src/page/system/serialRule/SerialRuleList.jsx | 28
rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java | 4
rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx | 11
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java | 17
rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx | 233 ++++++
rsf-admin/src/page/taskLog/TaskItemLogList.jsx | 23
rsf-admin/src/page/system/user/UserList.jsx | 4
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskLog.java | 34
rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx | 151 ++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java | 3
rsf-admin/src/page/task/TaskItemList.jsx | 44
/dev/null | 18
rsf-admin/src/page/task/TaskList.jsx | 14
rsf-admin/src/page/system/role/RoleList.jsx | 4
rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java | 1
rsf-admin/src/page/purchase/PurchaseList.jsx | 2
rsf-admin/src/page/asnOrder/AsnOrderModal.jsx | 38
43 files changed, 1,266 insertions(+), 765 deletions(-)
diff --git a/rsf-admin/src/config/setting.js b/rsf-admin/src/config/setting.js
index 18ec5ad..9fe0af1 100644
--- a/rsf-admin/src/config/setting.js
+++ b/rsf-admin/src/config/setting.js
@@ -15,7 +15,7 @@
export const DEFAULT_THEME_NAME = 'rsf';
-export const DEFAULT_THEME_MODE = 'dark';
+export const DEFAULT_THEME_MODE = 'light';
export const TOKEN_HEADER_NAME = 'Authorization';
diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index 2e67cf6..daf2177 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -840,6 +840,7 @@
close: "close",
asnCreate: "asnCreate",
createTask: "createTask",
+ recover: "recover",
},
};
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 8b0c4ab..7a43338 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -537,7 +537,7 @@
packName: "鍖呰鍚嶇О",
ntyStatus: "鎶ユ鐘舵��",
prodTime: "鐢熶骇鏃ユ湡",
- platItemId: 'PO琛屽彿'
+ platItemId: 'PO鍗曞彿'
},
asnOrderLog: {
code: "缂栫爜",
@@ -609,7 +609,7 @@
fields: {
fields: "瀛楁",
fieldsAlise: "瀛楁鍒悕",
- unique: "绱㈠紩瀛楁",
+ unique: "鏄惁蹇呭~",
flagEnable: "鍚敤",
},
fieldsItem: {
@@ -854,6 +854,7 @@
close: "鍏抽棴",
asnCreate: "閫氳繃ASN鍒涘缓",
createTask: "鐢熸垚浠诲姟",
+ recover: "缁х画鏀惰揣",
},
};
diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js
index daf5821..ed01cd9 100644
--- a/rsf-admin/src/page/ResourceContent.js
+++ b/rsf-admin/src/page/ResourceContent.js
@@ -45,11 +45,11 @@
import waitPakinLog from './waitPakinLog';
import waitPakinItemLog from './waitPakinItemLog';
import asnOrderLog from './asnOrderLog';
-import asnOrderItemLog from './asnOrderItemLog';
+// import asnOrderItemLog from './asnOrderItemLog';
import task from './task';
-import taskItem from './taskItem';
+// import taskItem from './taskItem';
import taskLog from './taskLog';
-import taskItemLog from './taskItemLog';
+// import taskItemLog from './taskItemLog';
const ResourceContent = (node) => {
@@ -110,8 +110,8 @@
return asnOrderItem;
case 'asnOrderLog':
return asnOrderLog;
- case 'asnOrderItemLog':
- return asnOrderItemLog;
+ // case 'asnOrderItemLog':
+ // return asnOrderItemLog;
case 'purchaseItem':
return purchaseItem;
case 'purchase':
@@ -140,12 +140,12 @@
return waitPakinItemLog;
case 'task':
return task;
- case 'taskItem':
- return taskItem;
+ // case 'taskItem':
+ // return taskItem;
case 'taskLog':
return taskLog;
- case 'taskItemLog':
- return taskItemLog;
+ // case 'taskItemLog':
+ // return taskItemLog;
default:
return {
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
index e8fa4ac..1791f4d 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
@@ -88,6 +88,8 @@
const [formData, setFormData] = useState({
type: '',
wkType: '',
+ poCode: '',
+ logisNo: ''
});
const [tabelData, setTableData] = useState([]);
@@ -104,6 +106,8 @@
setFormData({
type: '',
wkType: '',
+ poCode: '',
+ logisNo: ''
})
setTableData([])
}
@@ -222,7 +226,7 @@
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
<Form>
<Grid container spacing={2}>
- <Grid item md={4}>
+ <Grid item md={3}>
<DictSelect
label={translate("table.field.asnOrder.type")}
value={formData.type}
@@ -234,13 +238,29 @@
</Grid>
- <Grid item md={4}>
+ <Grid item md={3}>
<DictSelect
label={translate("table.field.asnOrder.wkType")}
value={formData.wkType}
onChange={(e) => handleChange(e.target.value, 'wkType')}
dictTypeCode="sys_business_type"
required
+ />
+ </Grid>
+
+ <Grid item md={3}>
+ <TextField
+ label={translate("table.field.asnOrder.poCode")}
+ value={formData.poCode}
+ onChange={(e) => handleChange(e.target.value, 'poCode')}
+ />
+ </Grid>
+
+ <Grid item md={3}>
+ <TextField
+ label={translate("table.field.asnOrder.logisNo")}
+ value={formData.logisNo}
+ onChange={(e) => handleChange(e.target.value, 'logisNo')}
/>
</Grid>
</Grid>
@@ -307,10 +327,7 @@
minWidth: 100,
flex: 1,
editable: true,
- // preProcessEditCellProps: (params) => {
- // const hasError = params.props.value.length !== '';
- // return { ...params.props, error: hasError };
- // },
+ valueFormatter: (val) => val < 0 ? 0 : val
},
{
field: 'splrCode',
@@ -463,7 +480,14 @@
disableColumnSorting
disableMultipleColumnsSorting
processRowUpdate={processRowUpdate}
- autoPageSize
+ initialState={{
+ pagination: {
+ paginationModel: {
+ pageSize: 25,
+ },
+ },
+ }}
+ pageSizeOptions={[10, 25, 50, 100]}
editMode="row"
checkboxSelection
onRowSelectionModelChange={handleSelectionChange}
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
index 00c0a89..3a6c137 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
@@ -140,15 +140,13 @@
}
-
return (
<Box sx={{
position: 'relative',
padding: '5px 10px'
}}>
-
<div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '4px', alignItems: 'center' }}>
- <TextField value={maktx} onChange={(e) => maktxChange(e.target.value)} label="鎼滅储鐗╂枡" variant="outlined" sx={{ width: '300px' }} size="small" />
+ <TextField value={maktx} onChange={(e) => maktxChange(e.target.value)} label="鎼滅储鐗╂枡" sx={{ width: '300px' }} size="small" />
<div style={{ display: 'flex', gap: '10px' }}>
<PrintsButton rows={selectedRows} />
@@ -168,6 +166,16 @@
disableColumnMenu={true}
disableColumnSorting
disableMultipleColumnsSorting
+ columnHeaderHeight={40}
+ rowHeight={42}
+ initialState={{
+ pagination: {
+ paginationModel: {
+ pageSize: 10,
+ },
+ },
+ }}
+ pageSizeOptions={[10, 25, 50]}
/>
</Box >
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx
new file mode 100644
index 0000000..643d4ca
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx
@@ -0,0 +1,177 @@
+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,
+ useGetRecordId,
+} from 'react-admin';
+import { Box, Typography, Card, Stack } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import EmptyData from "../components/EmptyData";
+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);
+ const recodeId = useGetRecordId();
+
+ return (
+ <Box display="flex">
+ <List
+ resource="asnOrderItemLog"
+ 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={false}
+ filters={filters}
+ filter={{ logId: recodeId }}
+ sort={{ field: "create_time", order: "desc" }}
+ actions={(
+ <TopToolbar>
+ <FilterButton />
+ <SelectColumnsButton preferenceKey='asnOrderItemLog' />
+ <MyExportButton />
+ </TopToolbar>
+ )}
+ perPage={DEFAULT_PAGE_SIZE}
+ >
+ <StyledDatagrid
+ preferenceKey='asnOrderItemLog'
+ bulkActionButtons={false}
+ rowClick={(id, resource, record) => false}
+ omit={['id', 'asnId', 'poDetlId', 'poCode', 'qrcode', 'packName', 'createTime', 'memo', 'fieldsIndex', 'matnrId', 'splrCode', 'status', 'createBy$']}
+ >
+ <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} />
+ <TextField source="updateBy$" label="common.field.updateBy" />
+ <TextField source="createBy$" label="common.field.createBy" />
+ <DateField source="createTime" label="common.field.createTime" showTime />
+ <TextField source="memo" label="common.field.memo" sortable={false} />
+ </StyledDatagrid>
+ </List>
+ <PageDrawer
+ title='AsnOrderItemLog Detail'
+ drawerVal={drawerVal}
+ setDrawerVal={setDrawerVal}
+ >
+ </PageDrawer>
+ </Box>
+ )
+}
+
+export default AsnOrderItemLogList;
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx
index 2e044bd..a1c2e7c 100644
--- a/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx
@@ -21,21 +21,20 @@
DeleteButton,
} from 'react-admin';
import { useWatch, useFormContext } from "react-hook-form";
-import { Stack, Grid, Box, Typography } from '@mui/material';
+import { Stack, Grid, Box, Typography, Card } 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";
-
+import AsnOrderItemLogList from "./AsnOrderItemLogList"
const FormToolbar = () => {
const { getValues } = useFormContext();
return (
- <Toolbar sx={{ justifyContent: 'space-between' }}>
+ <Toolbar sx={{ justifyContent: 'end' }}>
<SaveButton />
- <DeleteButton mutationMode="optimistic" />
</Toolbar>
)
}
@@ -44,125 +43,106 @@
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.asnOrderLog.code"
- source="code"
- parse={v => v}
- autoFocus
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.asnOrderLog.poCode"
- source="poCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.asnOrderLog.poId"
- source="poId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.asnOrderLog.type"
- source="type"
- parse={v => v}
- validate={required()}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.asnOrderLog.wkType"
- source="wkType"
- parse={v => v}
- validate={required()}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.asnOrderLog.anfme"
- source="anfme"
- validate={required()}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.asnOrderLog.qty"
- source="qty"
- validate={required()}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.asnOrderLog.logisNo"
- source="logisNo"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <DateInput
- label="table.field.asnOrderLog.arrTime"
- source="arrTime"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <SelectInput
- label="table.field.asnOrderLog.rleStatus"
- source="rleStatus"
- choices={[
- { id: 0, name: ' 姝e父' },
- { id: 1, name: ' 宸查噴鏀�' },
- ]}
- validate={required()}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <SelectInput
- label="table.field.asnOrderLog.ntyStatus"
- source="ntyStatus"
- choices={[
- { id: 0, name: ' 鏈笂鎶�' },
- { id: 1, name: ' 宸蹭笂鎶�' },
- { id: 2, name: ' 閮ㄥ垎涓婃姤' },
- ]}
- validate={required()}
- />
- </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={24} md={12}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.main')}
+ </Typography>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderLog.code"
+ source="code"
+ parse={v => v}
+ readOnly
+ />
+ <TextInput
+ label="table.field.asnOrderLog.poCode"
+ source="poCode"
+ readOnly
+ parse={v => v}
+ />
+ <NumberInput
+ label="table.field.asnOrderLog.poId"
+ readOnly
+ source="poId"
+ />
+ <TextInput
+ label="table.field.asnOrderLog.type"
+ source="type"
+ readOnly
+ parse={v => v}
+ validate={required()}
+ />
+ <TextInput
+ label="table.field.asnOrderLog.wkType"
+ source="wkType"
+ readOnly
+ parse={v => v}
+ validate={required()}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.asnOrderLog.anfme"
+ source="anfme"
+ readOnly
+ validate={required()}
+ />
+ <NumberInput
+ label="table.field.asnOrderLog.qty"
+ source="qty"
+ readOnly
+ validate={required()}
+ />
+ <TextInput
+ label="table.field.asnOrderLog.logisNo"
+ source="logisNo"
+ readOnly
+ parse={v => v}
+ />
+ <DateInput
+ label="table.field.asnOrderLog.arrTime"
+ readOnly
+ source="arrTime"
+ />
+ <SelectInput
+ label="table.field.asnOrderLog.ntyStatus"
+ source="ntyStatus"
+ readOnly
+ choices={[
+ { id: 0, name: ' 鏈笂鎶�' },
+ { id: 1, name: ' 宸蹭笂鎶�' },
+ { id: 2, name: ' 閮ㄥ垎涓婃姤' },
+ ]}
+ validate={required()}
+ />
+ </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 >
+ <Grid item xs={24} md={16} sx={{ marginTop: '1em' }}>
+ <Typography variant="h6" gutterBottom >
+ {translate('common.edit.title.common')}
+ </Typography>
+ </Grid>
+ <AsnOrderItemLogList />
+ </>
)
}
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx
index a4e8f60..29c4a09 100644
--- a/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx
@@ -98,7 +98,6 @@
const AsnOrderLogList = () => {
const translate = useTranslate();
-
const [createDialog, setCreateDialog] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
@@ -120,7 +119,7 @@
actions={(
<TopToolbar>
<FilterButton />
- <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+ {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
<SelectColumnsButton preferenceKey='asnOrderLog' />
<MyExportButton />
</TopToolbar>
@@ -130,8 +129,8 @@
<StyledDatagrid
preferenceKey='asnOrderLog'
bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
- rowClick={(id, resource, record) => false}
- expand={() => <AsnOrderLogPanel />}
+ rowClick={'edit'}
+ expand={false}
expandSingle={true}
omit={['id', 'createTime', 'createBy', 'memo']}
>
@@ -158,10 +157,6 @@
<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>
<AsnOrderLogCreate
diff --git a/rsf-admin/src/page/fields/FieldsCreate.jsx b/rsf-admin/src/page/fields/FieldsCreate.jsx
index cd84b28..87afbb0 100644
--- a/rsf-admin/src/page/fields/FieldsCreate.jsx
+++ b/rsf-admin/src/page/fields/FieldsCreate.jsx
@@ -89,6 +89,7 @@
label="table.field.fields.fields"
source="fields"
parse={v => v}
+ validate={required()}
autoFocus
/>
</Grid>
@@ -96,6 +97,7 @@
<TextInput
label="table.field.fields.fieldsAlise"
source="fieldsAlise"
+ validate={required()}
parse={v => v}
/>
</Grid>
@@ -104,9 +106,10 @@
label="table.field.fields.unique"
source="unique"
choices={[
- { id: 0, name: ' 闈炲敮涓�' },
- { id: 1, name: ' 鍞竴' },
+ { id: 0, name: ' 闈炲繀濉�' },
+ { id: 1, name: ' 蹇呭~' },
]}
+ validate={required()}
/>
</Grid>
<Grid item xs={6} display="flex" gap={1}>
@@ -115,8 +118,9 @@
source="flagEnable"
choices={[
{ id: 0, name: ' 涓嶅惎鐢�' },
- { id: 1, name: ' 鍚敤' },
+ { id: 1, name: ' 鍚敤' },
]}
+ validate={required()}
/>
</Grid>
diff --git a/rsf-admin/src/page/fields/FieldsEdit.jsx b/rsf-admin/src/page/fields/FieldsEdit.jsx
index de6bcea..b474bd2 100644
--- a/rsf-admin/src/page/fields/FieldsEdit.jsx
+++ b/rsf-admin/src/page/fields/FieldsEdit.jsx
@@ -69,6 +69,7 @@
source="fields"
parse={v => v}
autoFocus
+ validate={required()}
/>
</Stack>
<Stack direction='row' gap={2}>
@@ -76,6 +77,7 @@
label="table.field.fields.fieldsAlise"
source="fieldsAlise"
parse={v => v}
+ validate={required()}
/>
</Stack>
<Stack direction='row' gap={2}>
@@ -83,8 +85,8 @@
label="table.field.fields.unique"
source="unique"
choices={[
- { id: 0, name: ' 闈炲敮涓�' },
- { id: 1, name: ' 鍞竴' },
+ { id: 0, name: ' 闈炲繀濉�' },
+ { id: 1, name: ' 蹇呭~' },
]}
validate={required()}
/>
@@ -95,7 +97,7 @@
source="flagEnable"
choices={[
{ id: 0, name: ' 涓嶅惎鐢�' },
- { id: 1, name: ' 鍚敤' },
+ { id: 1, name: ' 鍚敤' },
]}
validate={required()}
/>
diff --git a/rsf-admin/src/page/fields/FieldsList.jsx b/rsf-admin/src/page/fields/FieldsList.jsx
index 78970d9..795c931 100644
--- a/rsf-admin/src/page/fields/FieldsList.jsx
+++ b/rsf-admin/src/page/fields/FieldsList.jsx
@@ -60,15 +60,13 @@
const filters = [
<SearchInput source="condition" alwaysOn />,
- <DateInput label='common.time.after' source="timeStart" alwaysOn />,
- <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
<TextInput source="fields" label="table.field.fields.fields" />,
<TextInput source="fieldsAlise" label="table.field.fields.fieldsAlise" />,
<SelectInput source="unique" label="table.field.fields.unique"
choices={[
- { id: 0, name: ' 闈炲敮涓�' },
- { id: 1, name: ' 鍞竴' },
+ { id: 0, name: ' 闈炲繀濉�' },
+ { id: 1, name: ' 蹇呭~' },
]}
/>,
<SelectInput source="flagEnable" label="table.field.fields.flagEnable"
diff --git a/rsf-admin/src/page/purchase/PurchaseList.jsx b/rsf-admin/src/page/purchase/PurchaseList.jsx
index adc1921..ffdb648 100644
--- a/rsf-admin/src/page/purchase/PurchaseList.jsx
+++ b/rsf-admin/src/page/purchase/PurchaseList.jsx
@@ -123,7 +123,7 @@
<StyledDatagrid
preferenceKey='purchase'
bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
- rowClick={(id, resource, record) => false}
+ rowClick={'edit'}
expand={() => <PurchasePanel />}
expandSingle={true}
omit={['id', 'createTime', 'createBy', 'memo']}
diff --git a/rsf-admin/src/page/qlyInspect/AsnSelModal.jsx b/rsf-admin/src/page/qlyInspect/AsnSelModal.jsx
index 7e3f206..f51a761 100644
--- a/rsf-admin/src/page/qlyInspect/AsnSelModal.jsx
+++ b/rsf-admin/src/page/qlyInspect/AsnSelModal.jsx
@@ -38,7 +38,7 @@
};
const [formData, setFormData] = useState({
- code: ''
+ asnCode: ''
});
const [tableData, setTableData] = useState([]);
@@ -54,7 +54,7 @@
const reset = () => {
setFormData({
- code: ''
+ asnCode: ''
})
}
@@ -72,9 +72,7 @@
};
const getData = async () => {
- const res = await request.post(`/qlyInspect/asn/list`, {
- ...formData,
- });
+ const res = await request.post(`/qlyInspect/asn/list`, { asnCode: formData.asnCode });
if (res?.data?.code === 200) {
setTableData(res.data.data);
} else {
@@ -116,8 +114,8 @@
<Grid item md={4}>
<TextField
label={translate('table.field.asnOrder.code')}
- name="code"
- value={formData.code}
+ name="asnCode"
+ value={formData.asnCode}
onChange={handleChange}
size="small"
/>
diff --git a/rsf-admin/src/page/system/role/AssignPermissions.jsx b/rsf-admin/src/page/system/role/AssignPermissions.jsx
index d9fd08b..7be80ae 100644
--- a/rsf-admin/src/page/system/role/AssignPermissions.jsx
+++ b/rsf-admin/src/page/system/role/AssignPermissions.jsx
@@ -177,11 +177,11 @@
<Card sx={{
ml: 1,
mr: 1,
- height: '620px'
+ height: 'calc(100vh - 140px)',
+ overflowY: 'auto'
}}>
<CardContent sx={{
overflow: 'auto',
- height: '100%',
display: 'flex',
flexDirection: 'column',
justifyContent: 'space-between'
@@ -218,7 +218,6 @@
</Box>
<Box sx={{
- height: 480,
minWidth: 290,
overflow: 'auto',
marginTop: '10px',
diff --git a/rsf-admin/src/page/system/role/RoleList.jsx b/rsf-admin/src/page/system/role/RoleList.jsx
index f02ac2d..cdecd51 100644
--- a/rsf-admin/src/page/system/role/RoleList.jsx
+++ b/rsf-admin/src/page/system/role/RoleList.jsx
@@ -61,8 +61,6 @@
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.role.name" />,
<TextInput source="code" label="table.field.role.code" />,
@@ -132,8 +130,6 @@
preferenceKey='role'
bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
rowClick={(id, resource, record) => false}
- expand={() => <RolePanel />}
- expandSingle={true}
omit={['id', 'createTime', 'memo']}
>
<NumberField source="id" />
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
index 4440c43..53cf77d 100644
--- a/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
@@ -28,12 +28,13 @@
import CustomerTopToolBar from "../../components/EditTopToolBar";
import MemoInput from "../../components/MemoInput";
import StatusSelectInput from "../../components/StatusSelectInput";
+import SerialRuleItemList from "./SerialRuleItemList";
const FormToolbar = () => {
const { getValues } = useFormContext();
return (
- <Toolbar sx={{ justifyContent: 'space-between' }}>
+ <Toolbar sx={{ justifyContent: 'end' }}>
<SaveButton />
<DeleteButton mutationMode="optimistic" />
</Toolbar>
@@ -44,89 +45,82 @@
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.serialRule.code"
- source="code"
- parse={v => v}
- autoFocus
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.name"
- source="name"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.delimit"
- source="delimit"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.reset"
- source="reset"
- parse={v => v}
- validate={required()}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.resetDep"
- source="resetDep"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.currValue"
- source="currValue"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.lastCode"
- source="lastCode"
- 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={12} md={8}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.main')}
+ </Typography>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.serialRule.code"
+ source="code"
+ parse={v => v}
+ readOnly
+ />
+ <TextInput
+ label="table.field.serialRule.name"
+ source="name"
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.serialRule.delimit"
+ source="delimit"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.serialRule.reset"
+ source="reset"
+ parse={v => v}
+ validate={required()}
+ />
+ <TextInput
+ label="table.field.serialRule.resetDep"
+ source="resetDep"
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.serialRule.currValue"
+ source="currValue"
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.serialRule.lastCode"
+ source="lastCode"
+ 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>
- <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 >
+ <SerialRuleItemList></SerialRuleItemList>
+ </>
)
}
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx
new file mode 100644
index 0000000..f51326e
--- /dev/null
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx
@@ -0,0 +1,151 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+ CreateBase,
+ useTranslate,
+ TextInput,
+ NumberInput,
+ BooleanInput,
+ DateInput,
+ SaveButton,
+ SelectInput,
+ ReferenceInput,
+ ReferenceArrayInput,
+ AutocompleteInput,
+ Toolbar,
+ required,
+ useDataProvider,
+ useNotify,
+ Form,
+ useCreateController,
+} from 'react-admin';
+import {
+ Dialog,
+ DialogActions,
+ DialogContent,
+ DialogTitle,
+ Stack,
+ Grid,
+ Box,
+} from '@mui/material';
+import DialogCloseButton from "../../components/DialogCloseButton";
+import StatusSelectInput from "../../components/StatusSelectInput";
+import MemoInput from "../../components/MemoInput";
+
+const SerialRuleItemCreate = (props) => {
+ const { open, setOpen } = props;
+
+ const translate = useTranslate();
+ const notify = useNotify();
+
+ const handleClose = (event, reason) => {
+ if (reason !== "backdropClick") {
+ setOpen(false);
+ }
+ };
+
+ const handleSuccess = async (data) => {
+ setOpen(false);
+ notify('common.response.success');
+ };
+
+ const handleError = async (error) => {
+ notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
+ };
+
+ return (
+ <>
+ <CreateBase
+ record={{}}
+ transform={(data) => {
+ return data;
+ }}
+ mutationOptions={{ onSuccess: handleSuccess, onError: handleError }}
+ >
+ <Dialog
+ open={open}
+ onClose={handleClose}
+ aria-labelledby="form-dialog-title"
+ fullWidth
+ disableRestoreFocus
+ maxWidth="md" // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
+ >
+ <Form>
+ <DialogTitle id="form-dialog-title" sx={{
+ position: 'sticky',
+ top: 0,
+ backgroundColor: 'background.paper',
+ zIndex: 1000
+ }}
+ >
+ {translate('create.title')}
+ <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
+ <DialogCloseButton onClose={handleClose} />
+ </Box>
+ </DialogTitle>
+ <DialogContent sx={{ mt: 2 }}>
+ <Grid container rowSpacing={2} columnSpacing={2}>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.serialRuleItem.ruleId"
+ source="ruleId"
+ autoFocus
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.serialRuleItem.wkType"
+ source="wkType"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.serialRuleItem.feildValue"
+ source="feildValue"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.serialRuleItem.len"
+ source="len"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.serialRuleItem.lenStr"
+ source="lenStr"
+ validate={required()}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.serialRuleItem.sort"
+ source="sort"
+ validate={required()}
+ />
+ </Grid>
+
+ <Grid item xs={6} display="flex" gap={1}>
+ <StatusSelectInput />
+ </Grid>
+ <Grid item xs={12} display="flex" gap={1}>
+ <Stack direction="column" spacing={1} width={'100%'}>
+ <MemoInput />
+ </Stack>
+ </Grid>
+ </Grid>
+ </DialogContent>
+ <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
+ <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }} >
+ <SaveButton />
+ </Toolbar>
+ </DialogActions>
+ </Form>
+ </Dialog>
+ </CreateBase>
+ </>
+ )
+}
+
+export default SerialRuleItemCreate;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx
new file mode 100644
index 0000000..709c9f4
--- /dev/null
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx
@@ -0,0 +1,233 @@
+import React, {
+ useState,
+ useRef,
+ useEffect,
+ useMemo,
+ useCallback,
+} from "react";
+import { useNavigate, useLocation } from "react-router-dom";
+import {
+ List,
+ DatagridConfigurable,
+ SearchInput,
+ TopToolbar,
+ SelectColumnsButton,
+ EditButton,
+ FilterButton,
+ CreateButton,
+ ExportButton,
+ BulkDeleteButton,
+ WrapperField,
+ useRecordContext,
+ useTranslate,
+ useNotify,
+ useListContext,
+ FunctionField,
+ TextField,
+ NumberField,
+ DateField,
+ BooleanField,
+ ReferenceField,
+ TextInput,
+ DateTimeInput,
+ DateInput,
+ SelectInput,
+ NumberInput,
+ ReferenceInput,
+ ReferenceArrayInput,
+ AutocompleteInput,
+ DeleteButton,
+ useGetRecordId,
+} from "react-admin";
+import { Box, Typography, Card, Stack } from "@mui/material";
+import { styled } from "@mui/material/styles";
+import SerialRuleItemCreate from "./SerialRuleItemCreate";
+import EmptyData from "../../components/EmptyData";
+import MyCreateButton from "../../components/MyCreateButton";
+import MyExportButton from "../../components/MyExportButton";
+import PageDrawer from "../../components/PageDrawer";
+import MyField from "../../components/MyField";
+import {
+ PAGE_DRAWER_WIDTH,
+ OPERATE_MODE,
+ DEFAULT_PAGE_SIZE,
+} from "@/config/setting";
+import * as Common from "@/utils/common";
+import CustomerTopToolBar from "../../components/EditTopToolBar";
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+ "& .css-1vooibu-MuiSvgIcon-root": {
+ height: ".9em",
+ },
+ "& .RaDatagrid-row": {
+ cursor: "auto",
+ },
+ "& .column-name": {},
+ "& .opt": {
+ width: 200,
+ },
+}));
+
+const filters = [
+ <SearchInput source="condition" alwaysOn />,
+ <DateInput label="common.time.after" source="timeStart" />,
+ <DateInput label="common.time.before" source="timeEnd" />,
+
+ <NumberInput source="ruleId" label="table.field.serialRuleItem.ruleId" />,
+ <TextInput source="wkType" label="table.field.serialRuleItem.wkType" />,
+ <TextInput
+ source="feildValue"
+ label="table.field.serialRuleItem.feildValue"
+ />,
+ <NumberInput source="len" label="table.field.serialRuleItem.len" />,
+ <NumberInput source="lenStr" label="table.field.serialRuleItem.lenStr" />,
+ <NumberInput source="sort" label="table.field.serialRuleItem.sort" />,
+
+ <TextInput label="common.field.memo" source="memo" />,
+ <SelectInput
+ label="common.field.status"
+ source="status"
+ choices={[
+ { id: "1", name: "common.enums.statusTrue" },
+ { id: "0", name: "common.enums.statusFalse" },
+ ]}
+ resettable
+ />,
+];
+
+const SerialRuleItemList = () => {
+ const translate = useTranslate();
+ const [createDialog, setCreateDialog] = useState(false);
+ const [drawerVal, setDrawerVal] = useState(false);
+ const location = useLocation();
+ const ruleId = useGetRecordId();
+
+ return (
+ <>
+ {ruleId && <CustomerTopToolBar backPrevious={true} />}
+ <Box display="flex">
+ <List
+ resource="serialRuleItem"
+ sx={{
+ flexGrow: 1,
+ transition: (theme) =>
+ theme.transitions.create(["all"], {
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+ }}
+ title={"menu.serialRuleItem"}
+ empty={
+ <EmptyData
+ onClick={() => {
+ setCreateDialog(true);
+ }}
+ />
+ }
+ filters={filters}
+ filter={{ ruleId: ruleId }}
+ sort={{ field: "create_time", order: "desc" }}
+ actions={
+ <TopToolbar>
+ <FilterButton />
+ <MyCreateButton
+ onClick={() => {
+ setCreateDialog(true);
+ }}
+ />
+ <SelectColumnsButton preferenceKey="serialRuleItem" />
+ <MyExportButton />
+ </TopToolbar>
+ }
+ perPage={DEFAULT_PAGE_SIZE}
+ >
+ <StyledDatagrid
+ preferenceKey="serialRuleItem"
+ bulkActionButtons={() => (
+ <BulkDeleteButton mutationMode={OPERATE_MODE} />
+ )}
+ rowClick={false}
+ omit={["id", "createTime", "createBy", "memo"]}
+ >
+ <NumberField source="id" />
+ <NumberField
+ source="ruleId"
+ label="table.field.serialRuleItem.ruleId"
+ />
+ <TextField
+ source="wkType$"
+ label="table.field.serialRuleItem.wkType"
+ />
+ <TextField
+ source="feildValue"
+ label="table.field.serialRuleItem.feildValue"
+ />
+ <NumberField source="len" label="table.field.serialRuleItem.len" />
+ <NumberField
+ source="lenStr"
+ label="table.field.serialRuleItem.lenStr"
+ />
+ <NumberField
+ source="sort"
+ label="table.field.serialRuleItem.sort"
+ />
+
+ <ReferenceField
+ source="updateBy"
+ label="common.field.updateBy"
+ reference="user"
+ link={false}
+ sortable={false}
+ >
+ <TextField source="nickname" />
+ </ReferenceField>
+ <DateField
+ source="updateTime"
+ label="common.field.updateTime"
+ showTime
+ />
+ <ReferenceField
+ source="createBy"
+ label="common.field.createBy"
+ reference="user"
+ link={false}
+ sortable={false}
+ >
+ <TextField source="nickname" />
+ </ReferenceField>
+ <DateField
+ source="createTime"
+ label="common.field.createTime"
+ showTime
+ />
+ <BooleanField
+ source="statusBool"
+ label="common.field.status"
+ sortable={false}
+ />
+ <TextField
+ source="memo"
+ label="common.field.memo"
+ sortable={false}
+ />
+ <WrapperField cellClassName="opt" label="common.field.opt">
+ <EditButton sx={{ padding: "1px", fontSize: ".75rem" }} />
+ <DeleteButton
+ sx={{ padding: "1px", fontSize: ".75rem" }}
+ mutationMode={OPERATE_MODE}
+ />
+ </WrapperField>
+ </StyledDatagrid>
+ </List>
+ <SerialRuleItemCreate open={createDialog} setOpen={setCreateDialog} />
+ <PageDrawer
+ title="SerialRuleItem Detail"
+ drawerVal={drawerVal}
+ setDrawerVal={setDrawerVal}
+ ></PageDrawer>
+ </Box>
+ </>
+ );
+};
+
+export default SerialRuleItemList;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
index 6008fab..8b4c623 100644
--- a/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
@@ -72,7 +72,6 @@
<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.serialRule.code" />,
<TextInput source="name" label="table.field.serialRule.name" />,
<TextInput source="delimit" label="table.field.serialRule.delimit" />,
@@ -100,10 +99,10 @@
const [drawerVal, setDrawerVal] = useState(false);
const [detailDialog, setDetailDialog] = useState(false);
- const navigate = useNavigate();
- const assign = (record) => {
- navigate(`/serialRuleItem?ruleId=${record.id}`);
- };
+ // const navigate = useNavigate();
+ // const assign = (record) => {
+ // navigate(`/serialRuleItem?ruleId=${record.id}`);
+ // };
return (
<Box display="flex">
@@ -145,26 +144,11 @@
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.serialRule.code"
- onClick={(event, record, val) => {
- event.stopPropagation();
- assign(record);
- }}
- />
- {/* <MyField
- source="code"
- label="table.field.serialRule.code"
- onClick={() => {
- setDetailDialog(true);
- }}
- /> */}
-
+ <TextField source="code" label="table.field.serialRule.code" />
<TextField source="name" label="table.field.serialRule.name" />
<TextField source="delimit" label="table.field.serialRule.delimit" />
<TextField source="reset" label="table.field.serialRule.reset" />
diff --git a/rsf-admin/src/page/system/user/UserList.jsx b/rsf-admin/src/page/system/user/UserList.jsx
index 7906b2f..12e20c8 100644
--- a/rsf-admin/src/page/system/user/UserList.jsx
+++ b/rsf-admin/src/page/system/user/UserList.jsx
@@ -91,8 +91,6 @@
const filters = [
// <SearchInput source="condition" alwaysOn />,
- <DateInput label="common.time.after" source="timeStart" alwaysOn />,
- <DateInput label="common.time.before" source="timeEnd" alwaysOn />,
<TextInput source="username" label="table.field.user.username" />,
<TextInput source="nickname" label="table.field.user.nickname" />,
@@ -148,8 +146,6 @@
<BulkDeleteButton mutationMode={OPERATE_MODE} />
)}
rowClick={(id, resource, record) => false}
- expand={() => <UserPanel />}
- expandSingle={true}
omit={[
"id",
"email",
diff --git a/rsf-admin/src/page/task/TaskEdit.jsx b/rsf-admin/src/page/task/TaskEdit.jsx
index ab88ff1..166b846 100644
--- a/rsf-admin/src/page/task/TaskEdit.jsx
+++ b/rsf-admin/src/page/task/TaskEdit.jsx
@@ -2,180 +2,118 @@
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 { useWatch, useFormContext, useForm } from "react-hook-form";
+import { Stack, Grid, Box, Typography, Card } 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";
+import TaskItemList from "./TaskItemList";
const FormToolbar = () => {
const { getValues } = useFormContext();
-
return (
- <Toolbar sx={{ justifyContent: 'space-between' }}>
+ <Toolbar sx={{ justifyContent: 'end' }}>
<SaveButton />
- <DeleteButton mutationMode="optimistic" />
+ {/* <DeleteButton mutationMode="optimistic" /> */}
</Toolbar>
)
}
const TaskEdit = () => {
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.task.taskCode"
- source="taskCode"
- parse={v => v}
- autoFocus
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.task.taskStatus"
- source="taskStatus"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.task.taskType"
- source="taskType"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.task.orgLoc"
- source="orgLoc"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.task.orgSite"
- source="orgSite"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.task.targLoc"
- source="targLoc"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.task.targSite"
- source="targSite"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.task.barcode"
- source="barcode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.task.robotCode"
- source="robotCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.task.exceStatus"
- source="exceStatus"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.task.expDesc"
- source="expDesc"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.task.sort"
- source="sort"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.task.expCode"
- source="expCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <DateInput
- label="table.field.task.startTime"
- source="startTime"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <DateInput
- label="table.field.task.endTime"
- source="endTime"
- />
- </Stack>
-
+ <SimpleForm
+ shouldUnregister
+ warnWhenUnsavedChanges
+ toolbar={<FormToolbar />}
+ mode="onTouched"
+ defaultValues={{}}
+ >
+ <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+ <Grid item xs={24} md={16}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.main')}
+ </Typography>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.task.taskCode"
+ source="taskCode"
+ readOnly
+ parse={v => v}
+ autoFocus
+ />
+ <TextInput
+ label="table.field.task.taskStatus"
+ readOnly
+ source="taskStatus$"
+ />
+ <TextInput
+ label="table.field.task.taskType"
+ source="taskType$"
+ readOnly
+ />
+ <TextInput
+ label="table.field.task.orgLoc"
+ source="orgLoc"
+ readOnly
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.task.targLoc"
+ source="targLoc"
+ readOnly
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.task.orgSite"
+ source="orgSite"
+ readOnly
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.task.targSite"
+ source="targSite"
+ readOnly
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.task.barcode"
+ source="barcode"
+ readOnly
+ parse={v => v}
+ />
+ <NumberInput
+ label="table.field.task.sort"
+ source="sort"
+ />
+ </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 >
+ <Grid item xs={24} md={16} sx={{ margin: '1em', height: 'auto' }}>
+ <Typography variant="h6" gutterBottom >
+ {translate('common.edit.title.common')}
+ </Typography>
+ </Grid>
+ <TaskItemList />
+ </>
)
}
diff --git a/rsf-admin/src/page/taskItem/TaskItemCreate.jsx b/rsf-admin/src/page/task/TaskItemCreate.jsx
similarity index 100%
rename from rsf-admin/src/page/taskItem/TaskItemCreate.jsx
rename to rsf-admin/src/page/task/TaskItemCreate.jsx
diff --git a/rsf-admin/src/page/taskItem/TaskItemList.jsx b/rsf-admin/src/page/task/TaskItemList.jsx
similarity index 87%
rename from rsf-admin/src/page/taskItem/TaskItemList.jsx
rename to rsf-admin/src/page/task/TaskItemList.jsx
index d146e6d..67ae0ab 100644
--- a/rsf-admin/src/page/taskItem/TaskItemList.jsx
+++ b/rsf-admin/src/page/task/TaskItemList.jsx
@@ -1,62 +1,50 @@
import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
-import { useNavigate } from 'react-router-dom';
+import { useFetcher, 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,
+ useGetRecordId,
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
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 MyCreateButton from "../components/MyCreateButton";
+import TaskItemCreate from "./TaskItemCreate";
+
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
'& .css-1vooibu-MuiSvgIcon-root': {
height: '.9em'
},
'& .RaDatagrid-row': {
- cursor: 'auto'
+ cursor: 'auto',
+ maring: '1em'
},
'& .column-name': {
},
'& .opt': {
- width: 200
+ width: 220
},
}));
const filters = [
<SearchInput source="condition" alwaysOn />,
- <DateInput label='common.time.after' source="timeStart" alwaysOn />,
- <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
+ <DateInput label='common.time.after' source="timeStart" />,
+ <DateInput label='common.time.before' source="timeEnd" />,
<NumberInput source="taskId" label="table.field.taskItem.taskId" />,
<NumberInput source="orderId" label="table.field.taskItem.orderId" />,
<NumberInput source="orderType" label="table.field.taskItem.orderType" />,
@@ -85,10 +73,12 @@
const translate = useTranslate();
const [createDialog, setCreateDialog] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
+ const recordId = useGetRecordId();
return (
<Box display="flex">
<List
+ resource="taskItem"
sx={{
flexGrow: 1,
transition: (theme) =>
@@ -99,12 +89,14 @@
}}
title={"menu.taskItem"}
empty={false}
+ pagination={false}
filters={filters}
+ filter={{taskId: recordId}}
sort={{ field: "create_time", order: "desc" }}
actions={(
<TopToolbar>
<FilterButton />
- {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
+ <MyCreateButton onClick={() => { setCreateDialog(true) }} />
<SelectColumnsButton preferenceKey='taskItem' />
{/* <MyExportButton /> */}
</TopToolbar>
@@ -113,7 +105,7 @@
>
<StyledDatagrid
preferenceKey='taskItem'
- // bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+ bulkActionButtons={false}
rowClick={(id, resource, record) => false}
// expand={() => <TaskItemPanel />}
expandSingle={true}
@@ -132,7 +124,6 @@
<TextField source="batch" label="table.field.taskItem.batch" />
<TextField source="spec" label="table.field.taskItem.spec" />
<TextField source="model" label="table.field.taskItem.model" />
-
<ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
<TextField source="nickname" />
</ReferenceField>
@@ -145,6 +136,9 @@
<TextField source="memo" label="common.field.memo" sortable={false} />
</StyledDatagrid>
</List>
+ <TaskItemCreate
+ open={createDialog}
+ setOpen={setCreateDialog} />
<PageDrawer
title='TaskItem Detail'
drawerVal={drawerVal}
diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx
index 7528252..7f6cce0 100644
--- a/rsf-admin/src/page/task/TaskList.jsx
+++ b/rsf-admin/src/page/task/TaskList.jsx
@@ -26,7 +26,7 @@
Button,
} from 'react-admin';
-import { Box, Typography, Card, Stack } from '@mui/material';
+import { Box, Typography, Card, Stack, Drawer } from '@mui/material';
import { styled } from '@mui/material/styles';
import TaskCreate from "./TaskCreate";
import TaskPanel from "./TaskPanel";
@@ -52,7 +52,7 @@
'& .column-name': {
},
'& .opt': {
- width: 200
+ width: 248
},
}));
@@ -122,10 +122,10 @@
<BulkDeleteButton mutationMode={OPERATE_MODE} />
</>
}
- rowClick={false}
- expand={() => <TaskPanel/>}
+ rowClick={'edit'}
+ expand={false}
expandSingle={true}
- omit={['id', 'createTime', 'createBy', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'sort']}
+ omit={['id', 'createTime', 'createBy', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'status', 'sort']}
>
<NumberField source="id" />
<TextField source="taskCode" label="table.field.task.taskCode" />
@@ -145,7 +145,7 @@
<TextField source="createBy$" label="common.field.createBy"/>
<DateField source="updateTime" label="common.field.updateTime" showTime />
<DateField source="createTime" label="common.field.createTime" showTime />
- <BooleanField source="statusBool" label="common.field.status" sortable={false} />
+ {/* <BooleanField source="statusBool" label="common.field.status" sortable={false} /> */}
<TextField source="memo" label="common.field.memo" sortable={false} />
<WrapperField cellClassName="opt" label="common.field.opt">
<DoneButton sx={{ padding: '1px', fontSize: '.75rem' }} ></DoneButton>
@@ -165,6 +165,8 @@
}
export default TaskList;
+
+
/**
* 瀹屾垚鎿嶄綔
* @returns
diff --git a/rsf-admin/src/page/taskItem/TaskItemEdit.jsx b/rsf-admin/src/page/taskItem/TaskItemEdit.jsx
deleted file mode 100644
index df2b7b6..0000000
--- a/rsf-admin/src/page/taskItem/TaskItemEdit.jsx
+++ /dev/null
@@ -1,161 +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 TaskItemEdit = () => {
- 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.taskItem.taskId"
- source="taskId"
- autoFocus
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItem.orderId"
- source="orderId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItem.orderType"
- source="orderType"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItem.orderItemId"
- source="orderItemId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItem.matnrId"
- source="matnrId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItem.maktx"
- source="maktx"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItem.matnrCode"
- source="matnrCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItem.unit"
- source="unit"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItem.anfme"
- source="anfme"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItem.batch"
- source="batch"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItem.spec"
- source="spec"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItem.model"
- source="model"
- 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 TaskItemEdit;
diff --git a/rsf-admin/src/page/taskItem/TaskItemPanel.jsx b/rsf-admin/src/page/taskItem/TaskItemPanel.jsx
deleted file mode 100644
index 9bc1f7a..0000000
--- a/rsf-admin/src/page/taskItem/TaskItemPanel.jsx
+++ /dev/null
@@ -1,123 +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 TaskItemPanel = () => {
- 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.taskItem.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.taskItem.taskId"
- property={record.taskId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.orderId"
- property={record.orderId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.orderType"
- property={record.orderType}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.orderItemId"
- property={record.orderItemId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.matnrId"
- property={record.matnrId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.maktx"
- property={record.maktx}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.matnrCode"
- property={record.matnrCode}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.unit"
- property={record.unit}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.anfme"
- property={record.anfme}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.batch"
- property={record.batch}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.spec"
- property={record.spec}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItem.model"
- property={record.model}
- />
- </Grid>
-
- </Grid>
- </CardContent>
- </Card >
- </>
- );
-};
-
-export default TaskItemPanel;
diff --git a/rsf-admin/src/page/taskItem/index.jsx b/rsf-admin/src/page/taskItem/index.jsx
deleted file mode 100644
index da6cff0..0000000
--- a/rsf-admin/src/page/taskItem/index.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
- ListGuesser,
- EditGuesser,
- ShowGuesser,
-} from "react-admin";
-
-import TaskItemList from "./TaskItemList";
-import TaskItemEdit from "./TaskItemEdit";
-
-export default {
- list: TaskItemList,
- edit: TaskItemEdit,
- show: ShowGuesser,
- recordRepresentation: (record) => {
- return `${record.id}`
- }
-};
diff --git a/rsf-admin/src/page/taskItemLog/TaskItemLogCreate.jsx b/rsf-admin/src/page/taskItemLog/TaskItemLogCreate.jsx
deleted file mode 100644
index 29f89f7..0000000
--- a/rsf-admin/src/page/taskItemLog/TaskItemLogCreate.jsx
+++ /dev/null
@@ -1,216 +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 TaskItemLogCreate = (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.taskItemLog.taskItemId"
- source="taskItemId"
- autoFocus
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.taskItemLog.taskId"
- source="taskId"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.taskItemLog.orderId"
- source="orderId"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.taskItemLog.orderType"
- source="orderType"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.taskItemLog.orderItemId"
- source="orderItemId"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.taskItemLog.source"
- source="source"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.taskItemLog.matnrId"
- source="matnrId"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.taskItemLog.maktx"
- source="maktx"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.taskItemLog.matnrCode"
- source="matnrCode"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.taskItemLog.trackCode"
- source="trackCode"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.taskItemLog.unit"
- source="unit"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.taskItemLog.anfme"
- source="anfme"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.taskItemLog.batch"
- source="batch"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.taskItemLog.spec"
- source="spec"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.taskItemLog.model"
- source="model"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.taskItemLog.fieldsIndex"
- source="fieldsIndex"
- 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 TaskItemLogCreate;
diff --git a/rsf-admin/src/page/taskItemLog/TaskItemLogEdit.jsx b/rsf-admin/src/page/taskItemLog/TaskItemLogEdit.jsx
deleted file mode 100644
index 229ce32..0000000
--- a/rsf-admin/src/page/taskItemLog/TaskItemLogEdit.jsx
+++ /dev/null
@@ -1,188 +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 TaskItemLogEdit = () => {
- 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.taskItemLog.taskItemId"
- source="taskItemId"
- autoFocus
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItemLog.taskId"
- source="taskId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItemLog.orderId"
- source="orderId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItemLog.orderType"
- source="orderType"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItemLog.orderItemId"
- source="orderItemId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItemLog.source"
- source="source"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItemLog.matnrId"
- source="matnrId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItemLog.maktx"
- source="maktx"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItemLog.matnrCode"
- source="matnrCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItemLog.trackCode"
- source="trackCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItemLog.unit"
- source="unit"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskItemLog.anfme"
- source="anfme"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItemLog.batch"
- source="batch"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItemLog.spec"
- source="spec"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItemLog.model"
- source="model"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskItemLog.fieldsIndex"
- source="fieldsIndex"
- 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 TaskItemLogEdit;
diff --git a/rsf-admin/src/page/taskItemLog/TaskItemLogPanel.jsx b/rsf-admin/src/page/taskItemLog/TaskItemLogPanel.jsx
deleted file mode 100644
index 6f863f8..0000000
--- a/rsf-admin/src/page/taskItemLog/TaskItemLogPanel.jsx
+++ /dev/null
@@ -1,147 +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 TaskItemLogPanel = () => {
- 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.taskItemLog.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.taskItemLog.taskItemId"
- property={record.taskItemId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.taskId"
- property={record.taskId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.orderId"
- property={record.orderId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.orderType"
- property={record.orderType}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.orderItemId"
- property={record.orderItemId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.source"
- property={record.source}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.matnrId"
- property={record.matnrId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.maktx"
- property={record.maktx}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.matnrCode"
- property={record.matnrCode}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.trackCode"
- property={record.trackCode}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.unit"
- property={record.unit}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.anfme"
- property={record.anfme}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.batch"
- property={record.batch}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.spec"
- property={record.spec}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.model"
- property={record.model}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.taskItemLog.fieldsIndex"
- property={record.fieldsIndex}
- />
- </Grid>
-
- </Grid>
- </CardContent>
- </Card >
- </>
- );
-};
-
-export default TaskItemLogPanel;
diff --git a/rsf-admin/src/page/taskItemLog/index.jsx b/rsf-admin/src/page/taskItemLog/index.jsx
deleted file mode 100644
index 0208e30..0000000
--- a/rsf-admin/src/page/taskItemLog/index.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
- ListGuesser,
- EditGuesser,
- ShowGuesser,
-} from "react-admin";
-
-import TaskItemLogList from "./TaskItemLogList";
-import TaskItemLogEdit from "./TaskItemLogEdit";
-
-export default {
- list: TaskItemLogList,
- edit: TaskItemLogEdit,
- show: ShowGuesser,
- recordRepresentation: (record) => {
- return `${record.id}`
- }
-};
diff --git a/rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx b/rsf-admin/src/page/taskLog/TaskItemLogList.jsx
similarity index 87%
rename from rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx
rename to rsf-admin/src/page/taskLog/TaskItemLogList.jsx
index 58c7f4f..acf1ae7 100644
--- a/rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx
+++ b/rsf-admin/src/page/taskLog/TaskItemLogList.jsx
@@ -31,18 +31,13 @@
ReferenceArrayInput,
AutocompleteInput,
DeleteButton,
+ useGetRecordId,
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
-import TaskItemLogCreate from "./TaskItemLogCreate";
-import TaskItemLogPanel from "./TaskItemLogPanel";
-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': {
@@ -94,13 +89,15 @@
const TaskItemLogList = () => {
const translate = useTranslate();
-
const [createDialog, setCreateDialog] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
+ const recodeId = useGetRecordId();
+
return (
<Box display="flex">
<List
+ resource="taskItemLog"
sx={{
flexGrow: 1,
transition: (theme) =>
@@ -112,6 +109,7 @@
title={"menu.taskItemLog"}
filters={filters}
empty={false}
+ filter={{logId: Number(recodeId) }}
sort={{ field: "create_time", order: "desc" }}
actions={(
<TopToolbar>
@@ -130,7 +128,6 @@
omit={['id', 'createTime', 'createBy', 'memo', 'taskId', 'orderId', 'orderItemId', 'matnrId']}
>
<NumberField source="id" />
- <NumberField source="taskItemId" label="table.field.taskItemLog.taskItemId" />
<NumberField source="taskId" label="table.field.taskItemLog.taskId" />
<NumberField source="orderId" label="table.field.taskItemLog.orderId" />
<TextField source="orderType" label="table.field.taskItemLog.orderType" />
@@ -145,15 +142,9 @@
<TextField source="batch" label="table.field.taskItemLog.batch" />
<TextField source="spec" label="table.field.taskItemLog.spec" />
<TextField source="model" label="table.field.taskItemLog.model" />
- <TextField source="fieldsIndex" label="table.field.taskItemLog.fieldsIndex" />
-
- <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
- <TextField source="nickname" />
- </ReferenceField>
+ <TextField source="updateBy$" label="common.field.updateBy" />
+ <TextField source="createBy$" label="common.field.createBy" />
<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} />
diff --git a/rsf-admin/src/page/taskLog/TaskLogEdit.jsx b/rsf-admin/src/page/taskLog/TaskLogEdit.jsx
index ec5c658..6c366fc 100644
--- a/rsf-admin/src/page/taskLog/TaskLogEdit.jsx
+++ b/rsf-admin/src/page/taskLog/TaskLogEdit.jsx
@@ -2,187 +2,122 @@
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 { useWatch, useFormContext, useForm } from "react-hook-form";
+import { Stack, Grid, Box, Typography, Card } 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";
+import TaskItemLogList from "./TaskItemLogList";
const FormToolbar = () => {
const { getValues } = useFormContext();
-
return (
- <Toolbar sx={{ justifyContent: 'space-between' }}>
+ <Toolbar sx={{ justifyContent: 'end' }}>
<SaveButton />
- <DeleteButton mutationMode="optimistic" />
+ {/* <DeleteButton mutationMode="optimistic" /> */}
</Toolbar>
)
}
-const TaskLogEdit = () => {
+const TaskItemLog = () => {
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}>
- <NumberInput
- label="table.field.taskLog.taskId"
- source="taskId"
- autoFocus
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskLog.taskCode"
- source="taskCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskLog.taskStatus"
- source="taskStatus"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskLog.taskType"
- source="taskType"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskLog.orgLoc"
- source="orgLoc"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskLog.orgSite"
- source="orgSite"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskLog.targLoc"
- source="targLoc"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskLog.targSite"
- source="targSite"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskLog.barcode"
- source="barcode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskLog.robotCode"
- source="robotCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskLog.exceStatus"
- source="exceStatus"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskLog.expDesc"
- source="expDesc"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.taskLog.sort"
- source="sort"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.taskLog.expCode"
- source="expCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <DateInput
- label="table.field.taskLog.startTime"
- source="startTime"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <DateInput
- label="table.field.taskLog.endTime"
- source="endTime"
- />
- </Stack>
-
+ <SimpleForm
+ shouldUnregister
+ warnWhenUnsavedChanges
+ toolbar={<FormToolbar />}
+ mode="onTouched"
+ defaultValues={{}}
+ >
+ <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+ <Grid item xs={24} md={16}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.main')}
+ </Typography>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.task.taskCode"
+ source="taskCode"
+ readOnly
+ parse={v => v}
+ autoFocus
+ />
+ <TextInput
+ label="table.field.task.taskStatus"
+ readOnly
+ source="taskStatus$"
+ />
+ <TextInput
+ label="table.field.task.taskType"
+ source="taskType$"
+ readOnly
+ />
+ <TextInput
+ label="table.field.task.orgLoc"
+ source="orgLoc"
+ readOnly
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.task.targLoc"
+ source="targLoc"
+ readOnly
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.task.orgSite"
+ source="orgSite"
+ readOnly
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.task.targSite"
+ source="targSite"
+ readOnly
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.task.barcode"
+ source="barcode"
+ readOnly
+ parse={v => v}
+ />
+ <NumberInput
+ label="table.field.task.sort"
+ readOnly
+ source="sort"
+ />
+ </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>
+ </SimpleForm>
+ </Edit >
+ <Card sx={{ marginTop: '1em', }}>
+ <Grid item xs={24} md={16} sx={{ margin: '1em' }}>
+ <Typography variant="h6" gutterBottom >
+ {translate('common.edit.title.common')}
+ </Typography>
+ <TaskItemLogList />
</Grid>
- </SimpleForm>
- </Edit >
+ </Card>
+ </>
)
}
-export default TaskLogEdit;
+export default TaskItemLog;
diff --git a/rsf-admin/src/page/taskLog/TaskLogList.jsx b/rsf-admin/src/page/taskLog/TaskLogList.jsx
index 5ffad18..fd93f6e 100644
--- a/rsf-admin/src/page/taskLog/TaskLogList.jsx
+++ b/rsf-admin/src/page/taskLog/TaskLogList.jsx
@@ -54,7 +54,7 @@
'& .column-name': {
},
'& .opt': {
- width: 200
+ width: 250
},
}));
@@ -125,43 +125,31 @@
<StyledDatagrid
preferenceKey='taskLog'
bulkActionButtons={false}
- rowClick={(id, resource, record) => false}
- expand={() => <TaskLogPanel />}
+ rowClick={'edit'}
+ expand={false}
expandSingle={true}
omit={['id', 'createTime', 'createBy', 'memo', 'taskId', 'robotCode', 'exceStatus', 'sort', 'expCode']}
>
<NumberField source="id" />
- <NumberField source="taskId" label="table.field.taskLog.taskId" />
- <TextField source="taskCode" label="table.field.taskLog.taskCode" />
- <NumberField source="taskStatus" label="table.field.taskLog.taskStatus" />
- <NumberField source="taskType" label="table.field.taskLog.taskType" />
- <TextField source="orgLoc" label="table.field.taskLog.orgLoc" />
- <TextField source="orgSite" label="table.field.taskLog.orgSite" />
- <TextField source="targLoc" label="table.field.taskLog.targLoc" />
- <TextField source="targSite" label="table.field.taskLog.targSite" />
- <TextField source="barcode" label="table.field.taskLog.barcode" />
- <TextField source="robotCode" label="table.field.taskLog.robotCode" />
- <NumberField source="exceStatus" label="table.field.taskLog.exceStatus" />
- <TextField source="expDesc" label="table.field.taskLog.expDesc" />
- <NumberField source="sort" label="table.field.taskLog.sort" />
- <TextField source="expCode" label="table.field.taskLog.expCode" />
- <DateField source="startTime" label="table.field.taskLog.startTime" showTime />
- <DateField source="endTime" label="table.field.taskLog.endTime" showTime />
-
- <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
- <TextField source="nickname" />
- </ReferenceField>
+ <TextField source="taskCode" label="table.field.task.taskCode" />
+ <NumberField source="taskStatus$" label="table.field.task.taskStatus" />
+ <NumberField source="taskType$" label="table.field.task.taskType" />
+ <TextField source="orgLoc" label="table.field.task.orgLoc" />
+ <TextField source="orgSite" label="table.field.task.orgSite" />
+ <TextField source="targLoc" label="table.field.task.targLoc" />
+ <TextField source="targSite" label="table.field.task.targSite" />
+ <TextField source="barcode" label="table.field.task.barcode" />
+ <TextField source="robotCode" label="table.field.task.robotCode" />
+ <NumberField source="exceStatus" label="table.field.task.exceStatus" />
+ <TextField source="expDesc" label="table.field.task.expDesc" />
+ <NumberField source="sort" label="table.field.task.sort" />
+ <TextField source="expCode" label="table.field.task.expCode" />
+ <TextField source="updateBy$" label="common.field.updateBy" />
+ <TextField source="createBy$" label="common.field.createBy" />
<DateField source="updateTime" label="common.field.updateTime" showTime />
- <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
- <TextField source="nickname" />
- </ReferenceField>
<DateField source="createTime" label="common.field.createTime" showTime />
- <BooleanField source="statusBool" label="common.field.status" sortable={false} />
+ {/* <BooleanField source="statusBool" label="common.field.status" sortable={false} /> */}
<TextField source="memo" label="common.field.memo" sortable={false} />
- <WrapperField cellClassName="opt" label="common.field.opt">
- <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
- <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
- </WrapperField>
</StyledDatagrid>
</List>
{/* <TaskLogCreate
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
index 37aa8a0..21bc154 100644
--- a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
@@ -135,7 +135,7 @@
<NumberField source="matnrId" label="table.field.warehouseAreasItem.matnrId" />
<TextField source="matnrName" label="table.field.warehouseAreasItem.matnrName" />
<TextField source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" />
- <TextField source="barcode" label="table.field.warehouseAreasItem.barcode" />
+ <TextField source="trackCode" label="table.field.warehouseAreasItem.barcode" />
<NumberField source="anfme" label="table.field.warehouseAreasItem.anfme" />
<TextField source="batch" label="table.field.warehouseAreasItem.batch" />
<TextField source="unit" label="table.field.warehouseAreasItem.unit" />
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
index 72da8c5..aaffe4f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -16,6 +16,7 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
+import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -130,6 +131,16 @@
return mobileService.getDeltByCode(code);
}
+ @PreAuthorize("hasAuthority('manager:asnOrderItem:list')")
+ @ApiOperation("鑾峰彇鎷栫洏鏄庣粏")
+ @PostMapping("/asnOrderItem/container")
+ public R getItemByContainer(@RequestBody Map<String, Object> params) {
+ if (Objects.isNull(params)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ return mobileService.getItemByContainer(params);
+ }
+
@PreAuthorize("hasAuthority('manager:waitPakin:update')")
@ApiOperation("缁勬嫋")
@PostMapping("/waitPakin/merge")
@@ -193,11 +204,11 @@
}
- @ApiOperation("蹇甫璐ㄦ")
+ @ApiOperation("蹇�熻川妫�")
@PreAuthorize("hasAuthority('manager:qlyInspect:update')")
@PostMapping("/inspect/check/update")
- public R checkUpdate(@RequestBody QlyIsptItem params) {
- if (Objects.isNull(params)) {
+ public R checkUpdate(@RequestBody List<QlyIsptItem> params) {
+ if (Objects.isNull(params) || params.isEmpty()) {
return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
}
return mobileService.checkUpdate(params);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
index a1c2e6f..b63ead2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -48,7 +48,7 @@
R checkObjs(CheckObjParams params);
- R checkUpdate(QlyIsptItem params);
+ R checkUpdate(List<QlyIsptItem> params);
R operateToStock(OpStockParams params);
@@ -59,4 +59,6 @@
R taskGetLocs(String code) throws Exception;
R completeOrder(Long id, Long loginUserId);
+
+ R getItemByContainer(Map<String, Object> params);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
index 92838b8..0229436 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -22,6 +22,7 @@
import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.AsnExceStatus;
+import com.vincent.rsf.server.manager.enums.PakinIOStatus;
import com.vincent.rsf.server.manager.mapper.*;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.system.constant.CodeRes;
@@ -34,8 +35,10 @@
import com.vincent.rsf.server.system.mapper.UserMapper;
import com.vincent.rsf.server.system.service.FieldsItemService;
import com.vincent.rsf.server.system.service.UserLoginService;
+import com.vincent.rsf.server.system.service.UserService;
import com.vincent.rsf.server.system.utils.ExtendFieldsUtils;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
+import net.sf.jsqlparser.statement.select.Wait;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -66,7 +69,7 @@
@Autowired
private TenantMapper tenantService;
@Autowired
- private UserMapper userService;
+ private UserService userService;
@Autowired
private UserLoginService userLoginService;
@Autowired
@@ -147,7 +150,7 @@
if (user.getStatus() != 1) {
return R.parse(CodeRes.USER_10002);
}
- if (!user.getPassword().equals(param.getPassword())) {
+ if (!userService.comparePassword(user.getPassword(), param.getPassword())) {
return R.parse(CodeRes.USER_10003);
}
@@ -245,7 +248,7 @@
throw new CoolException("閫氱煡鍗曟槑缁嗕笉瀛樺湪锛侊紒");
}
if (Objects.isNull(dto.getReceiptQty()) || Double.compare(dto.getReceiptQty(), 0.0) == 0) {
- throw new CoolException("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
+ throw new CoolException("鐗╂枡:" + dto.getMaktx() + "鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
}
Double itemRcptQty = dto.getReceiptQty() + orderItem.getQty();
orderItem.setQty(itemRcptQty)
@@ -494,36 +497,36 @@
if (Objects.isNull(params.getIsptCode())) {
throw new CoolException("璐ㄦ鍗曚笉鑳戒负绌�");
}
- if (Objects.isNull(params.getMatnrCode())) {
- throw new CoolException("鐗╂枡缂栫爜涓嶈兘涓虹┖锛�");
- }
QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>().eq(QlyInspect::getCode, params.getIsptCode()));
if (Objects.isNull(inspect)) {
throw new CoolException("璐ㄦ鍗曟嵁涓嶅瓨鍦紒!");
}
- QlyIsptItem isptItem = qlyIsptItemService.getOne(new LambdaQueryWrapper<QlyIsptItem>()
- .eq(QlyIsptItem::getMatnrCode, params.getMatnrCode())
+ List<QlyIsptItem> isptItems = qlyIsptItemService.list(new LambdaQueryWrapper<QlyIsptItem>()
+ .eq(StringUtils.isNotBlank(params.getMatnrCode()), QlyIsptItem::getMatnrCode, StringUtils.isNotBlank(params.getMatnrCode()) ? params.getMatnrCode() : null)
.eq(QlyIsptItem::getIspectId, inspect.getId()));
- if (Objects.isNull(isptItem)) {
+ if (Objects.isNull(isptItems)) {
throw new CoolException("璐ㄦ鍗曟槑缁嗕笉瀛樺湪锛侊紒");
}
-
- CheckObjDto objDto = new CheckObjDto();
- objDto.setIsptCode(inspect.getCode())
- .setAsnCode(inspect.getAsnCode())
- .setId(isptItem.getId())
- .setMatnrCode(isptItem.getMatnrCode())
- .setMaktx(isptItem.getMaktx())
- .setDisQty(isptItem.getDisQty())
- .setDlyQty(isptItem.getDlyQty())
- .setRcptQty(isptItem.getRcptQty())
- .setIsptResult(isptItem.getIsptResult())
- .setSplrBatch(isptItem.getSplrBatch())
- .setSplrName(isptItem.getSplrName())
- .setPicPath(isptItem.getPicPath())
- .setMemo(isptItem.getMemo())
- .setSafeQty(isptItem.getSafeQty());
- return R.ok(objDto);
+ List<CheckObjDto> dtos = new ArrayList<>();
+ isptItems.forEach(isptItem -> {
+ CheckObjDto objDto = new CheckObjDto();
+ objDto.setIsptCode(inspect.getCode())
+ .setAsnCode(inspect.getAsnCode())
+ .setId(isptItem.getId())
+ .setMatnrCode(isptItem.getMatnrCode())
+ .setMaktx(isptItem.getMaktx())
+ .setDisQty(isptItem.getDisQty())
+ .setDlyQty(isptItem.getDlyQty())
+ .setRcptQty(isptItem.getRcptQty())
+ .setIsptResult(isptItem.getIsptResult())
+ .setSplrBatch(isptItem.getSplrBatch())
+ .setSplrName(isptItem.getSplrName())
+ .setPicPath(isptItem.getPicPath())
+ .setMemo(isptItem.getMemo())
+ .setSafeQty(isptItem.getSafeQty());
+ dtos.add(objDto);
+ });
+ return R.ok(dtos);
}
/**
@@ -532,14 +535,12 @@
* @return
*/
@Override
- public R checkUpdate(QlyIsptItem params) {
- if (Objects.isNull(params.getId())) {
+ public R checkUpdate(List<QlyIsptItem> params) {
+ if (Objects.isNull(params) || params.isEmpty()) {
throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
}
IsptItemsParams itemsParams = new IsptItemsParams();
- List<QlyIsptItem> items = new ArrayList<>();
- items.add(params);
- itemsParams.setIsptItem(items).setType("0");
+ itemsParams.setIsptItem(params).setType("0");
if (qlyIsptItemService.batchUpdate(itemsParams)) {
return R.ok();
} else {
@@ -729,6 +730,46 @@
}
/**
+ * @author Ryan
+ * @description 閫氳繃瀹瑰櫒鑾峰彇缁勬嫋鐗╂枡
+ * @param
+ * @return
+ * @time 2025/4/9 16:57
+ */
+ @Override
+ public R getItemByContainer(Map<String, Object> params) {
+ //鑾峰彇缁勬嫋鏈敓鎴愪换鍔$殑缁勬嫋妗�
+ List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
+ WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+ .eq(WaitPakin::getBarcode, params.get("barcode").toString())
+ .in(WaitPakin::getIoStatus, asList));
+ if (Objects.isNull(waitPakin)) {
+ return R.ok(new ArrayList<>());
+ }
+ List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
+ .eq(WaitPakinItem::getPakinId, waitPakin.getId()));
+ if (pakinItems.isEmpty()) {
+ return R.ok(new ArrayList<>());
+ }
+ List<String> list = pakinItems.stream().map(WaitPakinItem::getTrackCode).collect(Collectors.toList());
+ LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>()
+ .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx")
+ .lambda()
+ .in(WarehouseAreasItem::getTrackCode, list)
+ .groupBy(WarehouseAreasItem::getSplrBatch,
+ WarehouseAreasItem::getTrackCode);
+ List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper);
+ for (int i = 0; i < warehouseAreasItems.size(); i++) {
+ for (WaitPakinItem pakinItem : pakinItems) {
+ if (warehouseAreasItems.get(i).getTrackCode().equals(pakinItem.getTrackCode())) {
+ warehouseAreasItems.get(i).setAnfme(pakinItem.getAnfme());
+ }
+ }
+ }
+ return R.ok(warehouseAreasItems);
+ }
+
+ /**
* 鑾峰彇ReceiptDetlsDtos
*/
private R getAsnOrderItem(List<AsnOrderItem> items) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java
index 6522439..767d42d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java
@@ -37,6 +37,8 @@
@TableId(value = "id", type = IdType.AUTO)
private Long id;
+ @ApiModelProperty("涓诲崟ID")
+ private Long logId;
@ApiModelProperty("Item ID")
private Long asnItemId;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java
index 498f156..18dc247 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java
@@ -37,6 +37,9 @@
@TableId(value = "id", type = IdType.AUTO)
private Long id;
+ @ApiModelProperty("涓诲崟ID")
+ private Long logId;
+
/**
* 涓诲崟ID
*/
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskLog.java
index 22db504..606c1b7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskLog.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskLog.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;
@@ -230,6 +234,34 @@
// null // 澶囨敞
// );
+ public String getTaskStatus$(){
+ if (Cools.isEmpty(this.taskStatus)) {
+ return null;
+ }
+ DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
+ DictData dictDatas = dictDataService.getOne(new LambdaQueryWrapper<DictData>()
+ .eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_TASK_STATUS)
+ .eq(DictData::getValue, this.taskStatus));
+ if (Objects.isNull(dictDatas) || Objects.isNull(dictDatas.getLabel())) {
+ return null;
+ }
+ return dictDatas.getLabel();
+ }
+
+ public String getTaskType$() {
+ if (Cools.isEmpty(this.taskType)) {
+ return null;
+ }
+ DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
+ DictData dictDatas = dictDataService.getOne(new LambdaQueryWrapper<DictData>()
+ .eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_TASK_TYPE)
+ .eq(DictData::getValue, this.taskType));
+ if (Objects.isNull(dictDatas) || Objects.isNull(dictDatas.getLabel())) {
+ return null;
+ }
+ return dictDatas.getLabel();
+ }
+
public String getStartTime$(){
if (Cools.isEmpty(this.startTime)){
return "";
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
index d5ae471..d4b1461 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
@@ -152,6 +152,10 @@
return "寰呭叆搴�";
case 1:
return " 鍏ュ簱涓�";
+ case 2:
+ return "浠诲姟鎵ц涓�";
+ case 3:
+ return "浠诲姟瀹屾垚";
default:
return String.valueOf(this.ioStatus);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
index 3018867..6870db3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
@@ -1,12 +1,14 @@
package com.vincent.rsf.server.manager.service;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
-import java.util.Map;
public interface WarehouseAreasItemService extends IService<WarehouseAreasItem> {
List<WarehouseAreasItem> getList();
+
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
index e826e7f..e4330bc 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
@@ -106,8 +106,7 @@
public List<AsnOrder> getUnInspect(Map<String, Object> params) {
List<AsnOrder> asnOrders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>()
.eq(AsnOrder::getStatus, 1)
- .eq(!Objects.isNull(params.get("asnCode")), AsnOrder::getCode, !Objects.isNull(params.get("asnCode")) ? params.get("asnCode").toString() : "")
- .eq(AsnOrder::getNtyStatus, 0));
+ .eq(!Objects.isNull(params.get("asnCode")) && StringUtils.isNotBlank(params.get("asnCode").toString()), AsnOrder::getCode, StringUtils.isNotBlank(params.get("asnCode").toString()) ? params.get("asnCode").toString() : null));
return asnOrders;
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
index b50c28e..75bdb0e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -1,6 +1,7 @@
package com.vincent.rsf.server.manager.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.manager.controller.params.PakinItem;
@@ -13,15 +14,13 @@
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
@Service("waitPakinService")
@@ -36,6 +35,8 @@
private WaitPakinService waitPakinService;
@Autowired
private WaitPakinItemService waitPakinItemService;
+ @Autowired
+ private WarehouseAreasItemService warehouseAreasItemService;
@Autowired
private LocService locService;
@@ -55,52 +56,73 @@
if (StringUtils.isBlank(waitPakin.getBarcode())) {
throw new CoolException("鍙傛暟閿欒锛氭墭鐩樼爜涓虹┖锛侊紒");
}
-
- List<WaitPakin> list = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
- if (!list.isEmpty()) {
- List<String> stringList = list.stream().map(WaitPakin::getCode).collect(Collectors.toList());
- String join = StringUtils.join(stringList, ",");
- throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶缁勬嫋鍗曪細" + join + "浣跨敤锛侊紒");
+ List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
+ WaitPakin list = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+ .notIn(WaitPakin::getIoStatus, asList)
+ .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
+ if (!Objects.isNull(list)) {
+ throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶缁勬嫋鍗曪細" + list.getCode() + "浣跨敤锛侊紒");
}
-
List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, waitPakin.getBarcode()));
if (!locs.isEmpty()) {
List<String> locCodes = locs.stream().map(Loc::getCode).collect(Collectors.toList());
String join = StringUtils.join(locCodes, ",");
throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶搴撲綅锛�" + join + "浣跨敤锛侊紒");
}
-
double sum = waitPakin.getItems().stream().mapToDouble(PakinItem::getReceiptQty).sum();
- WaitPakin pakin = new WaitPakin();
-
- String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
- if (StringUtils.isBlank(ruleCode)) {
- throw new CoolException("缂栫爜瑙勫垯閿欒锛� 缂栫爜瑙勫垯銆孲YS_WAIT_PAKIN_CODE銆嶈鍒欐槸涓嶅瓨鍦�");
+ WaitPakin waitPakin1 = new WaitPakin();
+ WaitPakin pakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+ .in(WaitPakin::getIoStatus, asList)
+ .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
+ if (Objects.isNull(pakin)) {
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
+ if (StringUtils.isBlank(ruleCode)) {
+ throw new CoolException("缂栫爜瑙勫垯閿欒锛� 缂栫爜瑙勫垯銆孲YS_WAIT_PAKIN_CODE銆嶈鍒欐槸涓嶅瓨鍦�");
+ }
+ waitPakin1.setCode(ruleCode)
+ //鐘舵�佷慨鏀逛负鍏ュ簱涓�
+ .setIoStatus(Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))
+ .setAnfme(sum)
+ .setBarcode(waitPakin.getBarcode());
+ if (!this.save(waitPakin1)) {
+ throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
+ }
+ } else {
+ BeanUtils.copyProperties(pakin, waitPakin1);
+ waitPakin1.setAnfme(sum);
+ if (!this.saveOrUpdate(waitPakin1)) {
+ throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
+ }
}
- pakin.setCode(ruleCode)
- //鐘舵�佷慨鏀逛负鍏ュ簱涓�
- .setIoStatus(Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))
- .setAnfme(sum)
- .setBarcode(waitPakin.getBarcode());
- if (!this.save(pakin)) {
- throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
- }
-
/**鐗╂枡璺熻釜鐮�*/
List<String> tracks = waitPakin.getItems().stream().map(PakinItem::getTrackCode).collect(Collectors.toList());
-
- List<AsnOrderItem> asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>()
- .in(AsnOrderItem::getTrackCode, tracks));
- if (Objects.isNull(asnOrderItems) || asnOrderItems.isEmpty()) {
- throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+ List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
+ .eq(WaitPakinItem::getPakinId, waitPakin1.getId())
+ .in(WaitPakinItem::getTrackCode, tracks));
+ if (!pakinItems.isEmpty()) {
+ if (!waitPakinItemService.remove(new LambdaQueryWrapper<WaitPakinItem>()
+ .eq(WaitPakinItem::getPakinId, waitPakin1.getId())
+ .in(WaitPakinItem::getTrackCode, tracks))) {
+ throw new CoolException("鍘熷崟鎹竻闄ゅけ璐ワ紒锛�");
+ }
}
+ LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>()
+ .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx")
+ .lambda()
+ .in(WarehouseAreasItem::getTrackCode, tracks)
+ .groupBy(WarehouseAreasItem::getSplrBatch,
+ WarehouseAreasItem::getTrackCode);
+ List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper);
+ if (Objects.isNull(warehouseAreasItems) || warehouseAreasItems.isEmpty()) {
+ throw new CoolException("鐗╂枡鏈�佽嚦鏀惰揣鍖猴紒锛�");
+ }
List<WaitPakinItem> items = new ArrayList<>();
- for (AsnOrderItem item : asnOrderItems) {
+ for (WarehouseAreasItem item : warehouseAreasItems) {
WaitPakinItem pakinItem = new WaitPakinItem();
pakinItem.setAnfme(item.getAnfme())
- .setPakinId(pakin.getId())
+ .setPakinId(waitPakin1.getId())
.setAsnId(item.getAsnId())
.setAsnCode(item.getAsnCode())
.setAsnItemId(item.getId())
@@ -112,9 +134,10 @@
.setMatnrCode(item.getMatnrCode());
for (PakinItem waitPakinItem : waitPakin.getItems()) {
if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) {
-// Double v = item.getWorkQty() + waitPakinItem.getReceiptQty();
+ if (waitPakinItem.getReceiptQty() > item.getAnfme()) {
+ throw new CoolException("缁勬嫋鏁伴噺涓嶈兘澶т簬鏀惰揣鏁伴噺锛侊紒");
+ }
pakinItem
- .setWorkQty(waitPakinItem.getReceiptQty())
.setAnfme(waitPakinItem.getReceiptQty())
.setTrackCode(waitPakinItem.getTrackCode());
/**鏇存柊鍗曟嵁鎵ц涓簱瀛�*/
@@ -127,9 +150,14 @@
}
items.add(pakinItem);
}
+ double sum1 = items.stream().mapToDouble(WaitPakinItem::getAnfme).sum();
if (!waitPakinItemService.saveBatch(items)) {
throw new CoolException("缁勬嫋鏄庣粏淇濆瓨澶辫触锛侊紒");
}
+ waitPakin1.setAnfme(sum1);
+ if (!this.updateById(waitPakin1)) {
+ throw new CoolException("缁勬嫋鏁伴噺淇敼澶辫触锛侊紒");
+ }
return pakin;
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java
index 1687006..9981a93 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java
@@ -21,4 +21,5 @@
String encodePassword(String password);
+ User selectByUsernameWithoutTenant(String username, Long tenantId);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java
index a08797c..dea12b4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java
@@ -65,4 +65,9 @@
return password == null ? null : bCryptPasswordEncoder.encode(password);
}
+ @Override
+ public User selectByUsernameWithoutTenant(String username, Long tenantId) {
+ return baseMapper.selectByUsernameWithoutTenant(username,tenantId);
+ }
+
}
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index 2fa0bcc..93d6e25 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -12,10 +12,10 @@
matching-strategy: ANT_PATH_MATCHER
datasource:
driver-class-name: com.mysql.jdbc.Driver
- url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
-# username: root
-# url: jdbc:mysql://192.168.4.24:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
- username: rsf
+# url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+ username: root
+ url: jdbc:mysql://192.168.4.24:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+# username: rsf
password: 34821015
type: com.alibaba.druid.pool.DruidDataSource
druid:
--
Gitblit v1.9.1