From f25d75ffb9b015e88e5eb816d397e0fbae10bff8 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期六, 29 三月 2025 13:45:15 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop
---
rsf-admin/src/page/waitPakinItem/WaitPakinItemList.jsx | 10
rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogList.jsx | 193 +++
rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx | 2
rsf-admin/src/page/waitPakinLog/WaitPakinLogCreate.jsx | 147 ++
rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx | 120 ++
rsf-admin/src/i18n/zh.js | 102 +
rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx | 169 +++
rsf-admin/src/i18n/en.js | 64 +
rsf-admin/src/page/ResourceContent.js | 13
rsf-admin/src/page/waitPakin/WaitPakinPanel.jsx | 171 +-
rsf-admin/src/page/asnOrder/AsnOrderList.jsx | 4
rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx | 32
rsf-admin/src/page/waitPakinLog/WaitPakinLogPanel.jsx | 112 ++
rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogEdit.jsx | 238 ++++
rsf-admin/src/page/waitPakinLog/index.jsx | 18
rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx | 181 +++
rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogEdit.jsx | 194 +++
rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogPanel.jsx | 141 ++
rsf-admin/src/page/asnOrderItemLog/index.jsx | 18
rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogCreate.jsx | 220 +++
rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx | 163 ++
rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogPanel.jsx | 183 +++
rsf-admin/src/page/waitPakin/WaitPakinList.jsx | 12
rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogCreate.jsx | 265 ++++
rsf-admin/src/page/asnOrderLog/AsnOrderLogPanel.jsx | 143 ++
rsf-admin/src/page/asnOrderLog/AsnOrderLogCreate.jsx | 195 +++
rsf-admin/src/page/waitPakinItemLog/index.jsx | 18
rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogList.jsx | 184 +++
rsf-admin/src/page/asnOrderLog/index.jsx | 18
rsf-admin/src/page/asnOrder/AsnOrderModal.jsx | 16
30 files changed, 3,214 insertions(+), 132 deletions(-)
diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index 955d2bc..a9f29d4 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -141,6 +141,8 @@
serialRule: 'SerialRule',
asnOrder: 'AsnOrder',
asnOrderItem: 'AsnOrderItem',
+ asnOrderLog: 'asnOrderLog',
+ asnOrderItemLog: 'asnOrderItemLog',
purchase: 'Purchase',
purchaseItem: 'PurchaseItem',
whMat: 'Warehouse Mat',
@@ -514,6 +516,44 @@
packName: "packName",
ntyStatus: "ntyStatus",
},
+ asnOrderLog: {
+ code: "code",
+ poCode: "poCode",
+ poId: "poId",
+ type: "type",
+ wkType: "wkType",
+ anfme: "anfme",
+ qty: "qty",
+ logisNo: "logisNo",
+ arrTime: "arrTime",
+ rleStatus: "rleStatus",
+ ntyStatus: "ntyStatus",
+ },
+ asnOrderItemLog: {
+ asnId: "asnId",
+ asnCode: "asnCode",
+ platItemId: "platItemId",
+ poDetlId: "poDetlId",
+ poCode: "poCode",
+ fieldsIndex: "fieldsIndex",
+ matnrId: "matnrId",
+ matnrCode: "matnrCode",
+ maktx: "maktx",
+ anfme: "anfme",
+ stockUnit: "stockUnit",
+ purQty: "purQty",
+ purUnit: "purUnit",
+ qty: "qty",
+ splrCode: "splrCode",
+ splrBatch: "splrBatch",
+ splrName: "splrName",
+ qrcode: "qrcode",
+ trackCode: "trackCode",
+ barcode: "barcode",
+ packName: "packName",
+ ntyStatus: "ntyStatus",
+ prodTime: "prodTime",
+ },
purchase: {
code: "code",
platId: "PlatId",
@@ -590,6 +630,30 @@
qty: "qty",
batch: "batch",
},
+ waitPakinLog: {
+ pakinId: "pakinId",
+ code: "code",
+ barcode: "barcode",
+ anfme: "anfme",
+ ioStatus: "ioStatus",
+ },
+ waitPakinItemLog: {
+ pakinId: "pakinId",
+ pakinItemId: "pakinItemId",
+ asnId: "asnId",
+ asnCode: "asnCode",
+ asnItemId: "asnItemId",
+ trackCode: "trackCode",
+ maktx: "maktx",
+ matnrId: "matnrId",
+ matnrCode: "matnrCode",
+ anfme: "anfme",
+ workQty: "workQty",
+ unit: "unit",
+ fieldsIndex: "fieldsIndex",
+ qty: "qty",
+ batch: "batch",
+ },
}
},
page: {
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index bbe448c..1a7617c 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -141,6 +141,8 @@
serialRule: '缂栫爜瑙勫垯',
asnOrder: '鏀惰揣閫氱煡鍗�',
asnOrderItem: '鏀惰揣鏄庣粏',
+ asnOrderLog: '鏀惰揣鍘嗗彶鍗�',
+ asnOrderItemLog: '鏀惰揣鍘嗗彶鏄庣粏',
purchase: 'PO鍗�',
purchaseItem: 'PO鍗曟槑缁�',
whMat: '搴撳尯鐗╂枡鍏崇郴',
@@ -148,8 +150,10 @@
fieldsItem: '鎵╁睍瀛楁鏄庣粏',
warehouseAreasItem: '搴撳尯搴撳瓨淇℃伅',
deviceSite: '绔欑偣绠$悊',
- waitPakin: 'WaitPakin',
- waitPakinItem: 'WaitPakinItem',
+ waitPakin: '缁勬嫋閫氱煡妗�',
+ waitPakinItem: '缁勬嫋妗f槑缁�',
+ waitPakinLog: '缁勬嫋鍘嗗彶妗�',
+ waitPakinItemLog: '缁勬嫋鍘嗗彶妗f槑缁�',
},
table: {
field: {
@@ -510,12 +514,50 @@
maktx: "鐗╂枡鍚嶇О",
anfme: "鏁伴噺",
stockUnit: "搴撳瓨鍗曚綅",
+ purQty: "璁″垝鏀惰揣鏁伴噺",
+ purUnit: "閲囪喘鍗曚綅",
+ qty: "宸插畬鎴愭暟閲�",
+ splrBatch: "渚涘簲鍟嗘壒娆�",
+ splrCode: "渚涘簲鍟嗙紪鐮�",
+ splrName: "渚涘簲鍟嗗悕绉�",
+ qrcode: "浜岀淮鐮�",
+ barcode: "鏉″舰鐮�",
+ packName: "鍖呰鍚嶇О",
+ ntyStatus: "鎶ユ鐘舵��",
+ prodTime: "鐢熶骇鏃ユ湡",
+ },
+ asnOrderLog: {
+ code: "缂栫爜",
+ poCode: "PO缂栫爜",
+ poId: "PO鏍囪瘑",
+ type: "鍗曟嵁绫诲瀷",
+ wkType: "涓氬姟绫诲瀷",
+ anfme: "鏁伴噺",
+ qty: "宸插畬鎴愭暟閲�",
+ logisNo: "鐗╂祦鍗曞彿",
+ arrTime: "棰勮鍒拌揪鏃堕棿",
+ rleStatus: "閲婃斁鐘舵��",
+ ntyStatus: "璐ㄦ涓婃姤鐘舵��",
+ },
+ asnOrderItemLog: {
+ asnId: "涓诲崟鏍囪瘑",
+ asnCode: "涓诲崟缂栫爜",
+ platItemId: "erp鏍囪瘑",
+ poDetlId: "PO鍗曟爣璇�",
+ poCode: "PO鍗曠紪鐮�",
+ fieldsIndex: "瀛楁绱㈠紩",
+ matnrId: "鐗╂枡鏍囪瘑",
+ matnrCode: "鐗╂枡缂栫爜",
+ maktx: "鐗╂枡",
+ anfme: "鏁伴噺",
purQty: "閲囪喘鏁伴噺",
purUnit: "閲囪喘鍗曚綅",
qty: "宸插畬鎴愭暟閲�",
splrCode: "渚涘簲鍟嗙紪鐮�",
+ splrBatch: "渚涘簲鍟嗘壒娆�",
splrName: "渚涘簲鍟嗗悕绉�",
qrcode: "浜岀淮鐮�",
+ trackCode: "鏉″舰鐮�",
barcode: "鏉″舰鐮�",
packName: "鍖呰鍚嶇О",
ntyStatus: "鎶ユ鐘舵��",
@@ -577,24 +619,48 @@
sites: "浣滀笟绔欑偣",
},
waitPakin: {
- code: "code",
- ansId: "ansId",
- asnCode: "asnCode",
- barcode: "barcode",
- anfme: "anfme",
- ioStatus: "ioStatus",
+ code: "缂栫爜",
+ ansId: "鏀惰揣閫氱煡鍗曞彿",
+ asnCode: "鏀惰揣閫氱煡鍗曠紪鐮�",
+ barcode: "鏉″舰鐮�",
+ anfme: "鏁伴噺",
+ ioStatus: "鐘舵��",
},
waitPakinItem: {
- pakinId: "pakinId",
- maktx: "maktx",
- matnrId: "matnrId",
- matnrCode: "matnrCode",
- anfme: "anfme",
- workQty: "workQty",
- unit: "unit",
- fieldsIndex: "fieldsIndex",
- qty: "qty",
- batch: "batch",
+ pakinId: "缁勬墭Id",
+ maktx: "鐗╂枡",
+ matnrId: "鐗╂枡id",
+ matnrCode: "鐗╂枡缂栫爜",
+ anfme: "鏁伴噺",
+ workQty: "鎵ц涓暟閲�",
+ unit: "鍗曚綅",
+ fieldsIndex: "鎵╁睍瀛楁鍞竴鏍囪瘑",
+ qty: "宸插畬鎴�",
+ batch: "鎵规",
+ },
+ waitPakinLog: {
+ pakinId: "缁勬墭Id",
+ code: "缂栫爜",
+ barcode: "鏉″舰鐮�",
+ anfme: "鏁伴噺",
+ ioStatus: "鐘舵��",
+ },
+ waitPakinItemLog: {
+ pakinId: "缁勬墭Id",
+ pakinItemId: "缁勬墭鏄庣粏Id",
+ ansId: "鏀惰揣閫氱煡鍗曞彿",
+ asnCode: "鏀惰揣閫氱煡鍗曠紪鐮�",
+ asnItemId: "鏀惰揣閫氱煡鍗曟槑缁唅d",
+ trackCode: "鏉″舰鐮�",
+ maktx: "鐗╂枡",
+ matnrId: "鐗╂枡id",
+ matnrCode: "鐗╂枡缂栫爜",
+ anfme: "鏁伴噺",
+ workQty: "鎵ц涓暟閲�",
+ unit: "鍗曚綅",
+ fieldsIndex: "鎵╁睍瀛楁鍞竴鏍囪瘑",
+ qty: "宸插畬鎴�",
+ batch: "鎵规",
},
}
},
diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js
index 8214420..1b3287b 100644
--- a/rsf-admin/src/page/ResourceContent.js
+++ b/rsf-admin/src/page/ResourceContent.js
@@ -42,6 +42,10 @@
import deviceSite from './basicInfo//deviceSite';
import waitPakin from './waitPakin';
import waitPakinItem from './waitPakinItem';
+import waitPakinLog from './waitPakinLog';
+import waitPakinItemLog from './waitPakinItemLog';
+import asnOrderLog from './asnOrderLog';
+import asnOrderItemLog from './asnOrderItemLog';
const ResourceContent = (node) => {
switch (node.component) {
@@ -99,6 +103,10 @@
return asnOrder;
case 'asnOrderItem':
return asnOrderItem;
+ case 'asnOrderLog':
+ return asnOrderLog;
+ case 'asnOrderItemLog':
+ return asnOrderItemLog;
case 'purchaseItem':
return purchaseItem;
case 'purchase':
@@ -121,6 +129,11 @@
return waitPakin;
case 'waitPakinItem':
return waitPakinItem;
+ case 'waitPakinLog':
+ return waitPakinLog;
+ case 'waitPakinItemLog':
+ return waitPakinItemLog;
+
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
index 31aaee8..3fa1990 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
@@ -147,8 +147,8 @@
<TextField source="code" label="table.field.asnOrder.code" />
<TextField source="poCode" label="table.field.asnOrder.poCode" />
<NumberField source="poId" label="table.field.asnOrder.poId" />
- <TextField source="type" label="table.field.asnOrder.type" />
- <TextField source="wkType" label="table.field.asnOrder.wkType" />
+ <TextField source="type$" label="table.field.asnOrder.type" />
+ <TextField source="wkType$" label="table.field.asnOrder.wkType" />
<NumberField source="anfme" label="table.field.asnOrder.anfme" />
<NumberField source="qty" label="table.field.asnOrder.qty" />
<TextField source="logisNo" label="table.field.asnOrder.logisNo" />
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
index 8846b3d..94bbfef 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
@@ -288,7 +288,7 @@
},
{
field: 'anfme',
- headerName: translate('table.field.asnOrderItem.anfme'),
+ headerName: translate('table.field.asnOrderItem.purQty'),
minWidth: 100,
flex: 1,
editable: true,
@@ -300,13 +300,13 @@
flex: 1,
editable: false,
},
- {
- field: 'purQty',
- headerName: translate('table.field.asnOrderItem.purQty'),
- minWidth: 100,
- flex: 1,
- editable: true,
- },
+ // {
+ // field: 'purQty',
+ // headerName: translate('table.field.asnOrderItem.purQty'),
+ // minWidth: 100,
+ // flex: 1,
+ // editable: true,
+ // },
{
field: 'purUnit',
headerName: translate('table.field.asnOrderItem.purUnit'),
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
index a4e6655..3153ccb 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
@@ -39,21 +39,7 @@
const debouncedHttp = useMemo(() => debounce(http, 300), []);
- const StyledTableRow = styled(TableRow)(({ theme }) => ({
- "& .MuiButtonBase-root.": {
- padding: "0px 0px",
- },
- }));
- const StyledTableCell = styled(TableCell)(({ theme }) => ({
- "& .MuiButtonBase-root": {
- padding: "0px 0px",
- },
- overflow: "hidden",
- textOverflow: "ellipsis",
- whiteSpace: "nowrap",
- maxWidth: 600,
- }));
const columns = [
{
@@ -82,16 +68,16 @@
},
{
field: 'anfme',
- headerName: translate('table.field.asnOrderItem.anfme')
+ headerName: translate('table.field.asnOrderItem.purQty')
},
{
field: 'stockUnit',
headerName: translate('table.field.asnOrderItem.stockUnit')
},
- {
- field: 'purQty',
- headerName: translate('table.field.asnOrderItem.purQty')
- },
+ // {
+ // field: 'purQty',
+ // headerName: translate('table.field.asnOrderItem.purQty')
+ // },
{
field: 'purUnit',
headerName: translate('table.field.asnOrderItem.purUnit')
@@ -99,6 +85,10 @@
{
field: 'qty',
headerName: translate('table.field.asnOrderItem.qty')
+ },
+ {
+ field: 'splrBatch',
+ headerName: translate('table.field.asnOrderItem.splrBatch')
},
{
field: 'splrCode',
@@ -113,6 +103,10 @@
headerName: translate('table.field.asnOrderItem.barcode')
},
{
+ field: 'prodTime',
+ headerName: translate('table.field.asnOrderItem.prodTime')
+ },
+ {
field: 'packName',
headerName: translate('table.field.asnOrderItem.packName')
},
diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogCreate.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogCreate.jsx
new file mode 100644
index 0000000..e1c793e
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogCreate.jsx
@@ -0,0 +1,265 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+ CreateBase,
+ useTranslate,
+ TextInput,
+ NumberInput,
+ BooleanInput,
+ DateInput,
+ SaveButton,
+ SelectInput,
+ ReferenceInput,
+ ReferenceArrayInput,
+ AutocompleteInput,
+ Toolbar,
+ required,
+ useDataProvider,
+ useNotify,
+ Form,
+ useCreateController,
+} from 'react-admin';
+import {
+ Dialog,
+ DialogActions,
+ DialogContent,
+ DialogTitle,
+ Stack,
+ Grid,
+ Box,
+} from '@mui/material';
+import DialogCloseButton from "../components/DialogCloseButton";
+import StatusSelectInput from "../components/StatusSelectInput";
+import MemoInput from "../components/MemoInput";
+
+const AsnOrderItemLogCreate = (props) => {
+ const { open, setOpen } = props;
+
+ const translate = useTranslate();
+ const notify = useNotify();
+
+ const handleClose = (event, reason) => {
+ if (reason !== "backdropClick") {
+ setOpen(false);
+ }
+ };
+
+ const handleSuccess = async (data) => {
+ setOpen(false);
+ notify('common.response.success');
+ };
+
+ const handleError = async (error) => {
+ notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
+ };
+
+ return (
+ <>
+ <CreateBase
+ record={{}}
+ transform={(data) => {
+ return data;
+ }}
+ mutationOptions={{ onSuccess: handleSuccess, onError: handleError }}
+ >
+ <Dialog
+ open={open}
+ onClose={handleClose}
+ aria-labelledby="form-dialog-title"
+ fullWidth
+ disableRestoreFocus
+ maxWidth="md" // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
+ >
+ <Form>
+ <DialogTitle id="form-dialog-title" sx={{
+ position: 'sticky',
+ top: 0,
+ backgroundColor: 'background.paper',
+ zIndex: 1000
+ }}
+ >
+ {translate('create.title')}
+ <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
+ <DialogCloseButton onClose={handleClose} />
+ </Box>
+ </DialogTitle>
+ <DialogContent sx={{ mt: 2 }}>
+ <Grid container rowSpacing={2} columnSpacing={2}>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.asnOrderItemLog.asnId"
+ source="asnId"
+ autoFocus
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.asnCode"
+ source="asnCode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.platItemId"
+ source="platItemId"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.asnOrderItemLog.poDetlId"
+ source="poDetlId"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.poCode"
+ source="poCode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.fieldsIndex"
+ source="fieldsIndex"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.matnrId"
+ source="matnrId"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.matnrCode"
+ source="matnrCode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.maktx"
+ source="maktx"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.asnOrderItemLog.anfme"
+ source="anfme"
+ validate={required()}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.stockUnit"
+ source="stockUnit"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.asnOrderItemLog.purQty"
+ source="purQty"
+ validate={required()}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.purUnit"
+ source="purUnit"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.asnOrderItemLog.qty"
+ source="qty"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.splrCode"
+ source="splrCode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.splrBatch"
+ source="splrBatch"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.splrName"
+ source="splrName"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.qrcode"
+ source="qrcode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.trackCode"
+ source="trackCode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.barcode"
+ source="barcode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderItemLog.packName"
+ source="packName"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <SelectInput
+ label="table.field.asnOrderItemLog.ntyStatus"
+ source="ntyStatus"
+ choices={[
+ { id: 0, name: ' 鏈笂鎶�' },
+ { id: 1, name: ' 宸蹭笂鎶�' },
+ ]}
+ />
+ </Grid>
+
+ <Grid item xs={6} display="flex" gap={1}>
+ <StatusSelectInput />
+ </Grid>
+ <Grid item xs={12} display="flex" gap={1}>
+ <Stack direction="column" spacing={1} width={'100%'}>
+ <MemoInput />
+ </Stack>
+ </Grid>
+ </Grid>
+ </DialogContent>
+ <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
+ <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }} >
+ <SaveButton />
+ </Toolbar>
+ </DialogActions>
+ </Form>
+ </Dialog>
+ </CreateBase>
+ </>
+ )
+}
+
+export default AsnOrderItemLogCreate;
diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogEdit.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogEdit.jsx
new file mode 100644
index 0000000..dab571c
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogEdit.jsx
@@ -0,0 +1,238 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+ Edit,
+ SimpleForm,
+ FormDataConsumer,
+ useTranslate,
+ TextInput,
+ NumberInput,
+ BooleanInput,
+ DateInput,
+ SelectInput,
+ ReferenceInput,
+ ReferenceArrayInput,
+ AutocompleteInput,
+ SaveButton,
+ Toolbar,
+ Labeled,
+ NumberField,
+ required,
+ useRecordContext,
+ DeleteButton,
+} from 'react-admin';
+import { useWatch, useFormContext } from "react-hook-form";
+import { Stack, Grid, Box, Typography } from '@mui/material';
+import * as Common from '@/utils/common';
+import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
+import EditBaseAside from "../components/EditBaseAside";
+import CustomerTopToolBar from "../components/EditTopToolBar";
+import MemoInput from "../components/MemoInput";
+import StatusSelectInput from "../components/StatusSelectInput";
+
+const FormToolbar = () => {
+ const { getValues } = useFormContext();
+
+ return (
+ <Toolbar sx={{ justifyContent: 'space-between' }}>
+ <SaveButton />
+ <DeleteButton mutationMode="optimistic" />
+ </Toolbar>
+ )
+}
+
+const AsnOrderItemLogEdit = () => {
+ const translate = useTranslate();
+
+ return (
+ <Edit
+ redirect="list"
+ mutationMode={EDIT_MODE}
+ actions={<CustomerTopToolBar />}
+ aside={<EditBaseAside />}
+ >
+ <SimpleForm
+ shouldUnregister
+ warnWhenUnsavedChanges
+ toolbar={<FormToolbar />}
+ mode="onTouched"
+ defaultValues={{}}
+ // validate={(values) => { }}
+ >
+ <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+ <Grid item xs={12} md={8}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.main')}
+ </Typography>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.asnOrderItemLog.asnId"
+ source="asnId"
+ autoFocus
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.asnCode"
+ source="asnCode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.platItemId"
+ source="platItemId"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.asnOrderItemLog.poDetlId"
+ source="poDetlId"
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.poCode"
+ source="poCode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.fieldsIndex"
+ source="fieldsIndex"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.matnrId"
+ source="matnrId"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.matnrCode"
+ source="matnrCode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.maktx"
+ source="maktx"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.asnOrderItemLog.anfme"
+ source="anfme"
+ validate={required()}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.stockUnit"
+ source="stockUnit"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.asnOrderItemLog.purQty"
+ source="purQty"
+ validate={required()}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.purUnit"
+ source="purUnit"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.asnOrderItemLog.qty"
+ source="qty"
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.splrCode"
+ source="splrCode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.splrBatch"
+ source="splrBatch"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.splrName"
+ source="splrName"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.qrcode"
+ source="qrcode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.trackCode"
+ source="trackCode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.barcode"
+ source="barcode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.asnOrderItemLog.packName"
+ source="packName"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <SelectInput
+ label="table.field.asnOrderItemLog.ntyStatus"
+ source="ntyStatus"
+ choices={[
+ { id: 0, name: ' 鏈笂鎶�' },
+ { id: 1, name: ' 宸蹭笂鎶�' },
+ ]}
+ validate={required()}
+ />
+ </Stack>
+
+ </Grid>
+ <Grid item xs={12} md={4}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.common')}
+ </Typography>
+ <StatusSelectInput />
+ <Box mt="2em" />
+ <MemoInput />
+ </Grid>
+ </Grid>
+ </SimpleForm>
+ </Edit >
+ )
+}
+
+export default AsnOrderItemLogEdit;
diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogList.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogList.jsx
new file mode 100644
index 0000000..6161f34
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogList.jsx
@@ -0,0 +1,193 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useNavigate } from 'react-router-dom';
+import {
+ List,
+ DatagridConfigurable,
+ SearchInput,
+ TopToolbar,
+ SelectColumnsButton,
+ EditButton,
+ FilterButton,
+ CreateButton,
+ ExportButton,
+ BulkDeleteButton,
+ WrapperField,
+ useRecordContext,
+ useTranslate,
+ useNotify,
+ useListContext,
+ FunctionField,
+ TextField,
+ NumberField,
+ DateField,
+ BooleanField,
+ ReferenceField,
+ TextInput,
+ DateTimeInput,
+ DateInput,
+ SelectInput,
+ NumberInput,
+ ReferenceInput,
+ ReferenceArrayInput,
+ AutocompleteInput,
+ DeleteButton,
+} from 'react-admin';
+import { Box, Typography, Card, Stack } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import AsnOrderItemLogCreate from "./AsnOrderItemLogCreate";
+import AsnOrderItemLogPanel from "./AsnOrderItemLogPanel";
+import EmptyData from "../components/EmptyData";
+import MyCreateButton from "../components/MyCreateButton";
+import MyExportButton from '../components/MyExportButton';
+import PageDrawer from "../components/PageDrawer";
+import MyField from "../components/MyField";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import * as Common from '@/utils/common';
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+ '& .css-1vooibu-MuiSvgIcon-root': {
+ height: '.9em'
+ },
+ '& .RaDatagrid-row': {
+ cursor: 'auto'
+ },
+ '& .column-name': {
+ },
+ '& .opt': {
+ width: 200
+ },
+}));
+
+const filters = [
+ <SearchInput source="condition" alwaysOn />,
+
+ <NumberInput source="asnId" label="table.field.asnOrderItemLog.asnId" />,
+ <TextInput source="asnCode" label="table.field.asnOrderItemLog.asnCode" />,
+ <TextInput source="platItemId" label="table.field.asnOrderItemLog.platItemId" />,
+ <NumberInput source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" />,
+ <TextInput source="poCode" label="table.field.asnOrderItemLog.poCode" />,
+ <TextInput source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" />,
+ <TextInput source="matnrId" label="table.field.asnOrderItemLog.matnrId" />,
+ <TextInput source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" />,
+ <TextInput source="maktx" label="table.field.asnOrderItemLog.maktx" />,
+ <NumberInput source="anfme" label="table.field.asnOrderItemLog.anfme" />,
+ <TextInput source="stockUnit" label="table.field.asnOrderItemLog.stockUnit" />,
+ <NumberInput source="purQty" label="table.field.asnOrderItemLog.purQty" />,
+ <TextInput source="purUnit" label="table.field.asnOrderItemLog.purUnit" />,
+ <NumberInput source="qty" label="table.field.asnOrderItemLog.qty" />,
+ <TextInput source="splrCode" label="table.field.asnOrderItemLog.splrCode" />,
+ <TextInput source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" />,
+ <TextInput source="splrName" label="table.field.asnOrderItemLog.splrName" />,
+ <TextInput source="qrcode" label="table.field.asnOrderItemLog.qrcode" />,
+ <TextInput source="trackCode" label="table.field.asnOrderItemLog.trackCode" />,
+ <TextInput source="barcode" label="table.field.asnOrderItemLog.barcode" />,
+ <TextInput source="packName" label="table.field.asnOrderItemLog.packName" />,
+ <SelectInput source="ntyStatus" label="table.field.asnOrderItemLog.ntyStatus"
+ choices={[
+ { id: 0, name: ' 鏈笂鎶�' },
+ { id: 1, name: ' 宸蹭笂鎶�' },
+ ]}
+ />,
+
+ <TextInput label="common.field.memo" source="memo" />,
+ <SelectInput
+ label="common.field.status"
+ source="status"
+ choices={[
+ { id: '1', name: 'common.enums.statusTrue' },
+ { id: '0', name: 'common.enums.statusFalse' },
+ ]}
+ resettable
+ />,
+]
+
+const AsnOrderItemLogList = () => {
+ const translate = useTranslate();
+
+ const [createDialog, setCreateDialog] = useState(false);
+ const [drawerVal, setDrawerVal] = useState(false);
+
+ return (
+ <Box display="flex">
+ <List
+ sx={{
+ flexGrow: 1,
+ transition: (theme) =>
+ theme.transitions.create(['all'], {
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+ }}
+ title={"menu.asnOrderItemLog"}
+ empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+ filters={filters}
+ sort={{ field: "create_time", order: "desc" }}
+ actions={(
+ <TopToolbar>
+ <FilterButton />
+ <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+ <SelectColumnsButton preferenceKey='asnOrderItemLog' />
+ <MyExportButton />
+ </TopToolbar>
+ )}
+ perPage={DEFAULT_PAGE_SIZE}
+ >
+ <StyledDatagrid
+ preferenceKey='asnOrderItemLog'
+ bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+ rowClick={(id, resource, record) => false}
+ omit={['id', 'createTime', 'createBy', 'memo']}
+ >
+ <NumberField source="id" />
+ <NumberField source="asnId" label="table.field.asnOrderItemLog.asnId" />
+ <TextField source="asnCode" label="table.field.asnOrderItemLog.asnCode" />
+ <TextField source="platItemId" label="table.field.asnOrderItemLog.platItemId" />
+ <NumberField source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" />
+ <TextField source="poCode" label="table.field.asnOrderItemLog.poCode" />
+ <TextField source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" />
+ <TextField source="matnrId" label="table.field.asnOrderItemLog.matnrId" />
+ <TextField source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" />
+ <TextField source="maktx" label="table.field.asnOrderItemLog.maktx" />
+ <NumberField source="anfme" label="table.field.asnOrderItemLog.anfme" />
+ <NumberField source="purQty" label="table.field.asnOrderItemLog.purQty" />
+ <TextField source="purUnit" label="table.field.asnOrderItemLog.purUnit" />
+ <NumberField source="qty" label="table.field.asnOrderItemLog.qty" />
+ <TextField source="splrCode" label="table.field.asnOrderItemLog.splrCode" />
+ <TextField source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" />
+ <TextField source="splrName" label="table.field.asnOrderItemLog.splrName" />
+ <TextField source="qrcode" label="table.field.asnOrderItemLog.qrcode" />
+ <TextField source="trackCode" label="table.field.asnOrderItemLog.trackCode" />
+ <TextField source="packName" label="table.field.asnOrderItemLog.packName" />
+ <TextField source="ntyStatus$" label="table.field.asnOrderItemLog.ntyStatus" sortable={false} />
+
+ <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
+ <TextField source="nickname" />
+ </ReferenceField>
+ <DateField source="updateTime" label="common.field.updateTime" showTime />
+ <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
+ <TextField source="nickname" />
+ </ReferenceField>
+ <DateField source="createTime" label="common.field.createTime" showTime />
+ <BooleanField source="statusBool" label="common.field.status" sortable={false} />
+ <TextField source="memo" label="common.field.memo" sortable={false} />
+ <WrapperField cellClassName="opt" label="common.field.opt">
+ <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
+ <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
+ </WrapperField>
+ </StyledDatagrid>
+ </List>
+ <AsnOrderItemLogCreate
+ open={createDialog}
+ setOpen={setCreateDialog}
+ />
+ <PageDrawer
+ title='AsnOrderItemLog Detail'
+ drawerVal={drawerVal}
+ setDrawerVal={setDrawerVal}
+ >
+ </PageDrawer>
+ </Box>
+ )
+}
+
+export default AsnOrderItemLogList;
diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogPanel.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogPanel.jsx
new file mode 100644
index 0000000..8fb6c06
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogPanel.jsx
@@ -0,0 +1,183 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import { Box, Card, CardContent, Grid, Typography, Tooltip } from '@mui/material';
+import {
+ useTranslate,
+ useRecordContext,
+} from 'react-admin';
+import PanelTypography from "../components/PanelTypography";
+import * as Common from '@/utils/common'
+
+const AsnOrderItemLogPanel = () => {
+ const record = useRecordContext();
+ if (!record) return null;
+ const translate = useTranslate();
+ return (
+ <>
+ <Card sx={{ width: { xs: 300, sm: 500, md: 600, lg: 800 }, margin: 'auto' }}>
+ <CardContent>
+ <Grid container spacing={2}>
+ <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'space-between' }}>
+ <Typography variant="h6" gutterBottom align="left" sx={{
+ maxWidth: { xs: '100px', sm: '180px', md: '260px', lg: '360px' },
+ whiteSpace: 'nowrap',
+ overflow: 'hidden',
+ textOverflow: 'ellipsis',
+ }}>
+ {Common.camelToPascalWithSpaces(translate('table.field.asnOrderItemLog.id'))}: {record.id}
+ </Typography>
+ {/* inherit, primary, secondary, textPrimary, textSecondary, error */}
+ <Typography variant="h6" gutterBottom align="right" >
+ ID: {record.id}
+ </Typography>
+ </Grid>
+ </Grid>
+ <Grid container spacing={2}>
+ <Grid item xs={12} container alignContent="flex-end">
+ <Typography variant="caption" color="textSecondary" sx={{ wordWrap: 'break-word', wordBreak: 'break-all' }}>
+ {Common.camelToPascalWithSpaces(translate('common.field.memo'))}:{record.memo}
+ </Typography>
+ </Grid>
+ </Grid>
+ <Box height={20}> </Box>
+ <Grid container spacing={2}>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.asnId"
+ property={record.asnId}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.asnCode"
+ property={record.asnCode}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.platItemId"
+ property={record.platItemId}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.poDetlId"
+ property={record.poDetlId}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.poCode"
+ property={record.poCode}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.fieldsIndex"
+ property={record.fieldsIndex}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.matnrId"
+ property={record.matnrId}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.matnrCode"
+ property={record.matnrCode}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.maktx"
+ property={record.maktx}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.anfme"
+ property={record.anfme}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.stockUnit"
+ property={record.stockUnit}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.purQty"
+ property={record.purQty}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.purUnit"
+ property={record.purUnit}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.qty"
+ property={record.qty}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.splrCode"
+ property={record.splrCode}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.splrBatch"
+ property={record.splrBatch}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.splrName"
+ property={record.splrName}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.qrcode"
+ property={record.qrcode}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.trackCode"
+ property={record.trackCode}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.barcode"
+ property={record.barcode}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.packName"
+ property={record.packName}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.asnOrderItemLog.ntyStatus"
+ property={record.ntyStatus$}
+ />
+ </Grid>
+
+ </Grid>
+ </CardContent>
+ </Card >
+ </>
+ );
+};
+
+export default AsnOrderItemLogPanel;
diff --git a/rsf-admin/src/page/asnOrderItemLog/index.jsx b/rsf-admin/src/page/asnOrderItemLog/index.jsx
new file mode 100644
index 0000000..555b583
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderItemLog/index.jsx
@@ -0,0 +1,18 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+ ListGuesser,
+ EditGuesser,
+ ShowGuesser,
+} from "react-admin";
+
+import AsnOrderItemLogList from "./AsnOrderItemLogList";
+import AsnOrderItemLogEdit from "./AsnOrderItemLogEdit";
+
+export default {
+ list: AsnOrderItemLogList,
+ edit: AsnOrderItemLogEdit,
+ show: ShowGuesser,
+ recordRepresentation: (record) => {
+ return `${record.id}`
+ }
+};
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogCreate.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogCreate.jsx
new file mode 100644
index 0000000..cedf651
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogCreate.jsx
@@ -0,0 +1,195 @@
+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 AsnOrderLogCreate = (props) => {
+ const { open, setOpen } = props;
+
+ const translate = useTranslate();
+ const notify = useNotify();
+
+ const handleClose = (event, reason) => {
+ if (reason !== "backdropClick") {
+ setOpen(false);
+ }
+ };
+
+ const handleSuccess = async (data) => {
+ setOpen(false);
+ notify('common.response.success');
+ };
+
+ const handleError = async (error) => {
+ notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
+ };
+
+ return (
+ <>
+ <CreateBase
+ record={{}}
+ transform={(data) => {
+ return data;
+ }}
+ mutationOptions={{ onSuccess: handleSuccess, onError: handleError }}
+ >
+ <Dialog
+ open={open}
+ onClose={handleClose}
+ aria-labelledby="form-dialog-title"
+ fullWidth
+ disableRestoreFocus
+ maxWidth="md" // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
+ >
+ <Form>
+ <DialogTitle id="form-dialog-title" sx={{
+ position: 'sticky',
+ top: 0,
+ backgroundColor: 'background.paper',
+ zIndex: 1000
+ }}
+ >
+ {translate('create.title')}
+ <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
+ <DialogCloseButton onClose={handleClose} />
+ </Box>
+ </DialogTitle>
+ <DialogContent sx={{ mt: 2 }}>
+ <Grid container rowSpacing={2} columnSpacing={2}>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderLog.code"
+ source="code"
+ parse={v => v}
+ autoFocus
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderLog.poCode"
+ source="poCode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.asnOrderLog.poId"
+ source="poId"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderLog.type"
+ source="type"
+ parse={v => v}
+ validate={required()}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderLog.wkType"
+ source="wkType"
+ parse={v => v}
+ validate={required()}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.asnOrderLog.anfme"
+ source="anfme"
+ validate={required()}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.asnOrderLog.qty"
+ source="qty"
+ validate={required()}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.asnOrderLog.logisNo"
+ source="logisNo"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <DateInput
+ label="table.field.asnOrderLog.arrTime"
+ source="arrTime"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <SelectInput
+ label="table.field.asnOrderLog.rleStatus"
+ source="rleStatus"
+ choices={[
+ { id: 0, name: ' 姝e父' },
+ { id: 1, name: ' 宸查噴鏀�' },
+ ]}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <SelectInput
+ label="table.field.asnOrderLog.ntyStatus"
+ source="ntyStatus"
+ choices={[
+ { id: 0, name: ' 鏈笂鎶�' },
+ { id: 1, name: ' 宸蹭笂鎶�' },
+ { id: 2, name: ' 閮ㄥ垎涓婃姤' },
+ ]}
+ />
+ </Grid>
+
+ <Grid item xs={6} display="flex" gap={1}>
+ <StatusSelectInput />
+ </Grid>
+ <Grid item xs={12} display="flex" gap={1}>
+ <Stack direction="column" spacing={1} width={'100%'}>
+ <MemoInput />
+ </Stack>
+ </Grid>
+ </Grid>
+ </DialogContent>
+ <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
+ <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }} >
+ <SaveButton />
+ </Toolbar>
+ </DialogActions>
+ </Form>
+ </Dialog>
+ </CreateBase>
+ </>
+ )
+}
+
+export default AsnOrderLogCreate;
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx
new file mode 100644
index 0000000..2e044bd
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx
@@ -0,0 +1,169 @@
+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 AsnOrderLogEdit = () => {
+ const translate = useTranslate();
+
+ return (
+ <Edit
+ redirect="list"
+ mutationMode={EDIT_MODE}
+ actions={<CustomerTopToolBar />}
+ aside={<EditBaseAside />}
+ >
+ <SimpleForm
+ shouldUnregister
+ warnWhenUnsavedChanges
+ toolbar={<FormToolbar />}
+ mode="onTouched"
+ defaultValues={{}}
+ // validate={(values) => { }}
+ >
+ <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+ <Grid item xs={12} md={8}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.main')}
+ </Typography>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.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>
+
+ </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 AsnOrderLogEdit;
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx
new file mode 100644
index 0000000..a4e8f60
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx
@@ -0,0 +1,181 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useNavigate } from 'react-router-dom';
+import {
+ List,
+ DatagridConfigurable,
+ SearchInput,
+ TopToolbar,
+ SelectColumnsButton,
+ EditButton,
+ FilterButton,
+ CreateButton,
+ ExportButton,
+ BulkDeleteButton,
+ WrapperField,
+ useRecordContext,
+ useTranslate,
+ useNotify,
+ useListContext,
+ FunctionField,
+ TextField,
+ NumberField,
+ DateField,
+ BooleanField,
+ ReferenceField,
+ TextInput,
+ DateTimeInput,
+ DateInput,
+ SelectInput,
+ NumberInput,
+ ReferenceInput,
+ ReferenceArrayInput,
+ AutocompleteInput,
+ DeleteButton,
+} from 'react-admin';
+import { Box, Typography, Card, Stack } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import AsnOrderLogCreate from "./AsnOrderLogCreate";
+import AsnOrderLogPanel from "./AsnOrderLogPanel";
+import EmptyData from "../components/EmptyData";
+import MyCreateButton from "../components/MyCreateButton";
+import MyExportButton from '../components/MyExportButton';
+import PageDrawer from "../components/PageDrawer";
+import MyField from "../components/MyField";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import * as Common from '@/utils/common';
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+ '& .css-1vooibu-MuiSvgIcon-root': {
+ height: '.9em'
+ },
+ '& .RaDatagrid-row': {
+ cursor: 'auto'
+ },
+ '& .column-name': {
+ },
+ '& .opt': {
+ width: 200
+ },
+}));
+
+const filters = [
+ <SearchInput source="condition" alwaysOn />,
+
+ <TextInput source="code" label="table.field.asnOrderLog.code" />,
+ <TextInput source="poCode" label="table.field.asnOrderLog.poCode" />,
+ <NumberInput source="poId" label="table.field.asnOrderLog.poId" />,
+ <TextInput source="type" label="table.field.asnOrderLog.type" />,
+ <TextInput source="wkType" label="table.field.asnOrderLog.wkType" />,
+ <NumberInput source="anfme" label="table.field.asnOrderLog.anfme" />,
+ <NumberInput source="qty" label="table.field.asnOrderLog.qty" />,
+ <TextInput source="logisNo" label="table.field.asnOrderLog.logisNo" />,
+ <DateInput source="arrTime" label="table.field.asnOrderLog.arrTime" />,
+ <SelectInput source="rleStatus" label="table.field.asnOrderLog.rleStatus"
+ choices={[
+ { id: 0, name: ' 姝e父' },
+ { id: 1, name: ' 宸查噴鏀�' },
+ ]}
+ />,
+ <SelectInput source="ntyStatus" label="table.field.asnOrderLog.ntyStatus"
+ choices={[
+ { id: 0, name: ' 鏈笂鎶�' },
+ { id: 1, name: ' 宸蹭笂鎶�' },
+ { id: 2, 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 AsnOrderLogList = () => {
+ const translate = useTranslate();
+
+ const [createDialog, setCreateDialog] = useState(false);
+ const [drawerVal, setDrawerVal] = useState(false);
+
+ return (
+ <Box display="flex">
+ <List
+ sx={{
+ flexGrow: 1,
+ transition: (theme) =>
+ theme.transitions.create(['all'], {
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+ }}
+ title={"menu.asnOrderLog"}
+ empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+ filters={filters}
+ sort={{ field: "create_time", order: "desc" }}
+ actions={(
+ <TopToolbar>
+ <FilterButton />
+ <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+ <SelectColumnsButton preferenceKey='asnOrderLog' />
+ <MyExportButton />
+ </TopToolbar>
+ )}
+ perPage={DEFAULT_PAGE_SIZE}
+ >
+ <StyledDatagrid
+ preferenceKey='asnOrderLog'
+ bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+ rowClick={(id, resource, record) => false}
+ expand={() => <AsnOrderLogPanel />}
+ expandSingle={true}
+ omit={['id', 'createTime', 'createBy', 'memo']}
+ >
+ <NumberField source="id" />
+ <TextField source="code" label="table.field.asnOrderLog.code" />
+ <TextField source="poCode" label="table.field.asnOrderLog.poCode" />
+ <NumberField source="poId" label="table.field.asnOrderLog.poId" />
+ <TextField source="type" label="table.field.asnOrderLog.type" />
+ <TextField source="wkType" label="table.field.asnOrderLog.wkType" />
+ <NumberField source="anfme" label="table.field.asnOrderLog.anfme" />
+ <NumberField source="qty" label="table.field.asnOrderLog.qty" />
+ <TextField source="logisNo" label="table.field.asnOrderLog.logisNo" />
+ <DateField source="arrTime" label="table.field.asnOrderLog.arrTime" showTime />
+ <TextField source="rleStatus$" label="table.field.asnOrderLog.rleStatus" sortable={false} />
+ <TextField source="ntyStatus$" label="table.field.asnOrderLog.ntyStatus" sortable={false} />
+
+ <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
+ <TextField source="nickname" />
+ </ReferenceField>
+ <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>
+ <AsnOrderLogCreate
+ open={createDialog}
+ setOpen={setCreateDialog}
+ />
+ <PageDrawer
+ title='AsnOrderLog Detail'
+ drawerVal={drawerVal}
+ setDrawerVal={setDrawerVal}
+ >
+ </PageDrawer>
+ </Box>
+ )
+}
+
+export default AsnOrderLogList;
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogPanel.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogPanel.jsx
new file mode 100644
index 0000000..49a6832
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogPanel.jsx
@@ -0,0 +1,143 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import { Box, Card, CardContent, Grid, Typography, Button, TextField, Tooltip, Paper, TableContainer, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material';
+import {
+ useTranslate,
+ useRecordContext,
+ useNotify,
+ useRefresh,
+ useListContext,
+} from 'react-admin';
+import PanelTypography from "../components/PanelTypography";
+import * as Common from '@/utils/common'
+import { styled } from "@mui/material/styles";
+import request from '@/utils/request';
+import debounce from 'lodash/debounce';
+import { DataGrid } from '@mui/x-data-grid';
+
+const AsnOrderLogPanel = () => {
+ const record = useRecordContext();
+ if (!record) return null;
+ const translate = useTranslate();
+ const notify = useNotify();
+ const [rows, setRows] = useState([]);
+ const [maktx, setMaktx] = useState('');
+ const asnId = record.id;
+
+ useEffect(() => {
+ debouncedHttp({ maktx });
+ }, [asnId, maktx]);
+
+
+ const http = async (parmas) => {
+ const res = await request.post('/asnOrderItemLog/page', { ...parmas, asnId });
+ if (res?.data?.code === 200) {
+ setRows(res.data.data.records)
+ } else {
+ notify(res.data.msg);
+ }
+ }
+
+ const debouncedHttp = useMemo(() => debounce(http, 300), []);
+
+ const columns = [
+ {
+ field: 'asnId',
+ headerName: translate('table.field.asnOrderItemLog.asnId')
+ },
+ {
+ field: 'asnCode',
+ headerName: translate('table.field.asnOrderItemLog.asnCode')
+ },
+ {
+ field: 'poDetlId',
+ headerName: translate('table.field.asnOrderItemLog.poDetlId')
+ },
+ {
+ field: 'poCode',
+ headerName: translate('table.field.asnOrderItemLog.poDetlCode')
+ },
+ {
+ field: 'matnrId',
+ headerName: translate('table.field.asnOrderItemLog.matnrId')
+ },
+ {
+ field: 'matnrCode',
+ headerName: translate('table.field.asnOrderItemLog.matnrCode')
+ },
+ {
+ field: 'maktx',
+ headerName: translate('table.field.asnOrderItemLog.maktx')
+ },
+ {
+ field: 'anfme',
+ headerName: translate('table.field.asnOrderItemLog.purQty')
+ },
+ {
+ field: 'purUnit',
+ headerName: translate('table.field.asnOrderItemLog.purUnit')
+ },
+ {
+ field: 'qty',
+ headerName: translate('table.field.asnOrderItemLog.qty')
+ },
+ {
+ field: 'splrBatch',
+ headerName: translate('table.field.asnOrderItem.splrBatch')
+ },
+ {
+ field: 'splrCode',
+ headerName: translate('table.field.asnOrderItemLog.splrCode')
+ },
+ {
+ field: 'splrName',
+ headerName: translate('table.field.asnOrderItemLog.splrName')
+ },
+ {
+ field: 'trackCode',
+ headerName: translate('table.field.asnOrderItemLog.barcode')
+ },
+ {
+ field: 'prodTime',
+ headerName: translate('table.field.asnOrderItem.prodTime')
+ },
+ {
+ field: 'packName',
+ headerName: translate('table.field.asnOrderItemLog.packName')
+ },
+ {
+ field: 'ntyStatus$',
+ headerName: translate('table.field.asnOrderItemLog.ntyStatus')
+ }]
+
+ const maktxChange = (value) => {
+ setMaktx(value)
+ }
+
+ 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' }} />
+
+ <div style={{ display: 'flex', gap: '10px' }}>
+ </div>
+ </div>
+
+
+ <DataGrid
+ size="small"
+ rows={rows}
+ columns={columns}
+ disableRowSelectionOnClick
+ disableColumnMenu={true}
+ disableColumnSorting
+ disableMultipleColumnsSorting
+ />
+ </Box >
+ );
+};
+
+export default AsnOrderLogPanel;
diff --git a/rsf-admin/src/page/asnOrderLog/index.jsx b/rsf-admin/src/page/asnOrderLog/index.jsx
new file mode 100644
index 0000000..e292c57
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderLog/index.jsx
@@ -0,0 +1,18 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+ ListGuesser,
+ EditGuesser,
+ ShowGuesser,
+} from "react-admin";
+
+import AsnOrderLogList from "./AsnOrderLogList";
+import AsnOrderLogEdit from "./AsnOrderLogEdit";
+
+export default {
+ list: AsnOrderLogList,
+ edit: AsnOrderLogEdit,
+ show: ShowGuesser,
+ recordRepresentation: (record) => {
+ return `${record.id}`
+ }
+};
diff --git a/rsf-admin/src/page/waitPakin/WaitPakinList.jsx b/rsf-admin/src/page/waitPakin/WaitPakinList.jsx
index d25f626..eb097b3 100644
--- a/rsf-admin/src/page/waitPakin/WaitPakinList.jsx
+++ b/rsf-admin/src/page/waitPakin/WaitPakinList.jsx
@@ -60,8 +60,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="code" label="table.field.waitPakin.code" />,
<NumberInput source="ansId" label="table.field.waitPakin.ansId" />,
@@ -71,7 +69,7 @@
<SelectInput source="ioStatus" label="table.field.waitPakin.ioStatus"
choices={[
{ id: 0, name: '寰呭叆搴�' },
- { id: 1, name: ' 鍏ュ簱涓�' },
+ { id: 1, name: ' 鍏ュ簱涓�' },
]}
/>,
@@ -102,7 +100,7 @@
theme.transitions.create(['all'], {
duration: theme.transitions.duration.enteringScreen,
}),
- marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
}}
title={"menu.waitPakin"}
empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
@@ -111,7 +109,7 @@
actions={(
<TopToolbar>
<FilterButton />
- <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+ {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
<SelectColumnsButton preferenceKey='waitPakin' />
<MyExportButton />
</TopToolbar>
@@ -128,7 +126,7 @@
>
<NumberField source="id" />
<TextField source="code" label="table.field.waitPakin.code" />
- <NumberField source="ansId" label="table.field.waitPakin.ansId" />
+ {/* <NumberField source="ansId" label="table.field.waitPakin.ansId" /> */}
<TextField source="asnCode" label="table.field.waitPakin.asnCode" />
<TextField source="barcode" label="table.field.waitPakin.barcode" />
<NumberField source="anfme" label="table.field.waitPakin.anfme" />
@@ -145,7 +143,7 @@
<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' }} />
+ {/* <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> */}
<DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
</WrapperField>
</StyledDatagrid>
diff --git a/rsf-admin/src/page/waitPakin/WaitPakinPanel.jsx b/rsf-admin/src/page/waitPakin/WaitPakinPanel.jsx
index e8d6108..e00ce74 100644
--- a/rsf-admin/src/page/waitPakin/WaitPakinPanel.jsx
+++ b/rsf-admin/src/page/waitPakin/WaitPakinPanel.jsx
@@ -1,86 +1,117 @@
import React, { useState, useRef, useEffect, useMemo } from "react";
-import { Box, Card, CardContent, Grid, Typography, Tooltip } from '@mui/material';
+import { Box, Card, CardContent, Grid, Typography, Button, TextField, Tooltip, Paper, TableContainer, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material';
import {
useTranslate,
useRecordContext,
+ useNotify,
+ useRefresh,
+ useListContext,
} from 'react-admin';
import PanelTypography from "../components/PanelTypography";
import * as Common from '@/utils/common'
+import { styled } from "@mui/material/styles";
+import request from '@/utils/request';
+import debounce from 'lodash/debounce';
+import { DataGrid } from '@mui/x-data-grid';
const WaitPakinPanel = () => {
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.waitPakin.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.waitPakin.code"
- property={record.code}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakin.ansId"
- property={record.ansId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakin.asnCode"
- property={record.asnCode}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakin.barcode"
- property={record.barcode}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakin.anfme"
- property={record.anfme}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakin.ioStatus"
- property={record.ioStatus$}
- />
- </Grid>
+ const notify = useNotify();
+ const [rows, setRows] = useState([]);
+ const [maktx, setMaktx] = useState('');
+ const pakinId = record.id;
- </Grid>
- </CardContent>
- </Card >
- </>
+ useEffect(() => {
+ debouncedHttp({ maktx });
+ }, [pakinId, maktx]);
+
+
+ const http = async (parmas) => {
+ const res = await request.post('/waitPakinItem/page', { ...parmas, pakinId });
+ if (res?.data?.code === 200) {
+ setRows(res.data.data.records)
+ } else {
+ notify(res.data.msg);
+ }
+ }
+
+ const debouncedHttp = useMemo(() => debounce(http, 300), []);
+
+ const columns = [
+ {
+ field: 'pakinId',
+ headerName: translate('table.field.waitPakinItem.pakinId')
+ },
+ {
+ field: 'maktx',
+ headerName: translate('table.field.waitPakinItem.maktx'),
+ width: 300
+ },
+ {
+ field: 'matnrId',
+ headerName: translate('table.field.waitPakinItem.matnrId')
+ },
+ {
+ field: 'matnrCode',
+ headerName: translate('table.field.waitPakinItem.matnrCode')
+ },
+ {
+ field: 'anfme',
+ headerName: translate('table.field.waitPakinItem.anfme')
+ },
+ {
+ field: 'workQty',
+ headerName: translate('table.field.waitPakinItem.workQty')
+ },
+ {
+ field: 'unit',
+ headerName: translate('table.field.waitPakinItem.unit')
+ },
+ {
+ field: 'fieldsIndex',
+ headerName: translate('table.field.waitPakinItem.fieldsIndex')
+ },
+ {
+ field: 'qty',
+ headerName: translate('table.field.waitPakinItem.qty')
+ },
+ {
+ field: 'batch',
+ headerName: translate('table.field.waitPakinItem.batch')
+ },
+ ]
+
+ const maktxChange = (value) => {
+ setMaktx(value)
+ }
+
+
+ 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' }} />
+
+ <div style={{ display: 'flex', gap: '10px' }}>
+ </div>
+ </div>
+
+
+ <DataGrid
+ size="small"
+ rows={rows}
+ columns={columns}
+ disableRowSelectionOnClick
+ disableColumnMenu={true}
+ disableColumnSorting
+ disableMultipleColumnsSorting
+ />
+ </Box >
);
};
diff --git a/rsf-admin/src/page/waitPakinItem/WaitPakinItemList.jsx b/rsf-admin/src/page/waitPakinItem/WaitPakinItemList.jsx
index 7d051ac..6cbc531 100644
--- a/rsf-admin/src/page/waitPakinItem/WaitPakinItemList.jsx
+++ b/rsf-admin/src/page/waitPakinItem/WaitPakinItemList.jsx
@@ -60,8 +60,6 @@
const filters = [
<SearchInput source="condition" alwaysOn />,
- <DateInput label='common.time.after' source="timeStart" alwaysOn />,
- <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
<NumberInput source="pakinId" label="table.field.waitPakinItem.pakinId" />,
<TextInput source="maktx" label="table.field.waitPakinItem.maktx" />,
@@ -101,7 +99,7 @@
theme.transitions.create(['all'], {
duration: theme.transitions.duration.enteringScreen,
}),
- marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
}}
title={"menu.waitPakinItem"}
empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
@@ -110,7 +108,7 @@
actions={(
<TopToolbar>
<FilterButton />
- <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+ {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
<SelectColumnsButton preferenceKey='waitPakinItem' />
<MyExportButton />
</TopToolbar>
@@ -121,8 +119,6 @@
preferenceKey='waitPakinItem'
bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
rowClick={(id, resource, record) => false}
- expand={() => <WaitPakinItemPanel />}
- expandSingle={true}
omit={['id', 'createTime', 'createBy', 'memo']}
>
<NumberField source="id" />
@@ -148,7 +144,7 @@
<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' }} />
+ {/* <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> */}
<DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
</WrapperField>
</StyledDatagrid>
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogCreate.jsx b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogCreate.jsx
new file mode 100644
index 0000000..0ee7ce6
--- /dev/null
+++ b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogCreate.jsx
@@ -0,0 +1,220 @@
+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 WaitPakinItemLogCreate = (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}>
+ <ReferenceInput
+ source="pakinId"
+ reference="waitPakin"
+ autoFocus
+ >
+ <AutocompleteInput
+ label="table.field.waitPakinItemLog.pakinId"
+ optionText="id"
+ filterToQuery={(val) => ({ id: val })}
+ />
+ </ReferenceInput>
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.pakinItemId"
+ source="pakinItemId"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.asnId"
+ source="asnId"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.waitPakinItemLog.asnCode"
+ source="asnCode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.asnItemId"
+ source="asnItemId"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.waitPakinItemLog.trackCode"
+ source="trackCode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.waitPakinItemLog.maktx"
+ source="maktx"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <ReferenceInput
+ source="matnrId"
+ reference="matnr"
+ >
+ <AutocompleteInput
+ label="table.field.waitPakinItemLog.matnrId"
+ optionText="unit"
+ filterToQuery={(val) => ({ unit: val })}
+ />
+ </ReferenceInput>
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.waitPakinItemLog.matnrCode"
+ source="matnrCode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.anfme"
+ source="anfme"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.workQty"
+ source="workQty"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.waitPakinItemLog.unit"
+ source="unit"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.waitPakinItemLog.fieldsIndex"
+ source="fieldsIndex"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.qty"
+ source="qty"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.waitPakinItemLog.batch"
+ source="batch"
+ 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 WaitPakinItemLogCreate;
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogEdit.jsx b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogEdit.jsx
new file mode 100644
index 0000000..80599c0
--- /dev/null
+++ b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogEdit.jsx
@@ -0,0 +1,194 @@
+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 WaitPakinItemLogEdit = () => {
+ 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}>
+ <ReferenceInput
+ source="pakinId"
+ reference="waitPakin"
+ perPage={REFERENCE_INPUT_PAGESIZE}
+ autoFocus
+ >
+ <AutocompleteInput
+ label="table.field.waitPakinItemLog.pakinId"
+ optionText="id"
+ filterToQuery={(val) => ({ id: val })}
+ />
+ </ReferenceInput>
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.pakinItemId"
+ source="pakinItemId"
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.asnId"
+ source="asnId"
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.waitPakinItemLog.asnCode"
+ source="asnCode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.asnItemId"
+ source="asnItemId"
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.waitPakinItemLog.trackCode"
+ source="trackCode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.waitPakinItemLog.maktx"
+ source="maktx"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <ReferenceInput
+ source="matnrId"
+ reference="matnr"
+ perPage={REFERENCE_INPUT_PAGESIZE}
+ >
+ <AutocompleteInput
+ label="table.field.waitPakinItemLog.matnrId"
+ optionText="unit"
+ filterToQuery={(val) => ({ unit: val })}
+ />
+ </ReferenceInput>
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.waitPakinItemLog.matnrCode"
+ source="matnrCode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.anfme"
+ source="anfme"
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.workQty"
+ source="workQty"
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.waitPakinItemLog.unit"
+ source="unit"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.waitPakinItemLog.fieldsIndex"
+ source="fieldsIndex"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.waitPakinItemLog.qty"
+ source="qty"
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.waitPakinItemLog.batch"
+ source="batch"
+ 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 WaitPakinItemLogEdit;
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogList.jsx b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogList.jsx
new file mode 100644
index 0000000..767197a
--- /dev/null
+++ b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogList.jsx
@@ -0,0 +1,184 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useNavigate } from 'react-router-dom';
+import {
+ List,
+ DatagridConfigurable,
+ SearchInput,
+ TopToolbar,
+ SelectColumnsButton,
+ EditButton,
+ FilterButton,
+ CreateButton,
+ ExportButton,
+ BulkDeleteButton,
+ WrapperField,
+ useRecordContext,
+ useTranslate,
+ useNotify,
+ useListContext,
+ FunctionField,
+ TextField,
+ NumberField,
+ DateField,
+ BooleanField,
+ ReferenceField,
+ TextInput,
+ DateTimeInput,
+ DateInput,
+ SelectInput,
+ NumberInput,
+ ReferenceInput,
+ ReferenceArrayInput,
+ AutocompleteInput,
+ DeleteButton,
+} from 'react-admin';
+import { Box, Typography, Card, Stack } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import WaitPakinItemLogCreate from "./WaitPakinItemLogCreate";
+import WaitPakinItemLogPanel from "./WaitPakinItemLogPanel";
+import EmptyData from "../components/EmptyData";
+import MyCreateButton from "../components/MyCreateButton";
+import MyExportButton from '../components/MyExportButton';
+import PageDrawer from "../components/PageDrawer";
+import MyField from "../components/MyField";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import * as Common from '@/utils/common';
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+ '& .css-1vooibu-MuiSvgIcon-root': {
+ height: '.9em'
+ },
+ '& .RaDatagrid-row': {
+ cursor: 'auto'
+ },
+ '& .column-name': {
+ },
+ '& .opt': {
+ width: 200
+ },
+}));
+
+const filters = [
+ <SearchInput source="condition" alwaysOn />,
+
+ <ReferenceInput source="pakinId" label="table.field.waitPakinItemLog.pakinId" reference="waitPakin">
+ <AutocompleteInput label="table.field.waitPakinItemLog.pakinId" optionText="id" filterToQuery={(val) => ({ id: val })} />
+ </ReferenceInput>,
+ <NumberInput source="pakinItemId" label="table.field.waitPakinItemLog.pakinItemId" />,
+ <NumberInput source="asnId" label="table.field.waitPakinItemLog.asnId" />,
+ <TextInput source="asnCode" label="table.field.waitPakinItemLog.asnCode" />,
+ <NumberInput source="asnItemId" label="table.field.waitPakinItemLog.asnItemId" />,
+ <TextInput source="trackCode" label="table.field.waitPakinItemLog.trackCode" />,
+ <TextInput source="maktx" label="table.field.waitPakinItemLog.maktx" />,
+ <ReferenceInput source="matnrId" label="table.field.waitPakinItemLog.matnrId" reference="matnr">
+ <AutocompleteInput label="table.field.waitPakinItemLog.matnrId" optionText="unit" filterToQuery={(val) => ({ unit: val })} />
+ </ReferenceInput>,
+ <TextInput source="matnrCode" label="table.field.waitPakinItemLog.matnrCode" />,
+ <NumberInput source="anfme" label="table.field.waitPakinItemLog.anfme" />,
+ <NumberInput source="workQty" label="table.field.waitPakinItemLog.workQty" />,
+ <TextInput source="unit" label="table.field.waitPakinItemLog.unit" />,
+ <TextInput source="fieldsIndex" label="table.field.waitPakinItemLog.fieldsIndex" />,
+ <NumberInput source="qty" label="table.field.waitPakinItemLog.qty" />,
+ <TextInput source="batch" label="table.field.waitPakinItemLog.batch" />,
+
+ <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 WaitPakinItemLogList = () => {
+ const translate = useTranslate();
+
+ const [createDialog, setCreateDialog] = useState(false);
+ const [drawerVal, setDrawerVal] = useState(false);
+
+ return (
+ <Box display="flex">
+ <List
+ sx={{
+ flexGrow: 1,
+ transition: (theme) =>
+ theme.transitions.create(['all'], {
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+ }}
+ title={"menu.waitPakinItemLog"}
+ empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+ filters={filters}
+ sort={{ field: "create_time", order: "desc" }}
+ actions={(
+ <TopToolbar>
+ <FilterButton />
+ <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+ <SelectColumnsButton preferenceKey='waitPakinItemLog' />
+ <MyExportButton />
+ </TopToolbar>
+ )}
+ perPage={DEFAULT_PAGE_SIZE}
+ >
+ <StyledDatagrid
+ preferenceKey='waitPakinItemLog'
+ bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+ rowClick={(id, resource, record) => false}
+ omit={['id', 'createTime', 'createBy', 'memo']}
+ >
+ <NumberField source="id" />
+ <ReferenceField source="pakinId" label="table.field.waitPakinItemLog.pakinId" reference="waitPakin" link={false} sortable={false}>
+ <TextField source="id" />
+ </ReferenceField>
+ <NumberField source="pakinItemId" label="table.field.waitPakinItemLog.pakinItemId" />
+ <NumberField source="asnId" label="table.field.waitPakinItemLog.asnId" />
+ <TextField source="asnCode" label="table.field.waitPakinItemLog.asnCode" />
+ <NumberField source="asnItemId" label="table.field.waitPakinItemLog.asnItemId" />
+ <TextField source="trackCode" label="table.field.waitPakinItemLog.trackCode" />
+ <TextField source="maktx" label="table.field.waitPakinItemLog.maktx" />
+ <ReferenceField source="matnrId" label="table.field.waitPakinItemLog.matnrId" reference="matnr" link={false} sortable={false}>
+ <TextField source="unit" />
+ </ReferenceField>
+ <TextField source="matnrCode" label="table.field.waitPakinItemLog.matnrCode" />
+ <NumberField source="anfme" label="table.field.waitPakinItemLog.anfme" />
+ <NumberField source="workQty" label="table.field.waitPakinItemLog.workQty" />
+ <TextField source="unit" label="table.field.waitPakinItemLog.unit" />
+ <TextField source="fieldsIndex" label="table.field.waitPakinItemLog.fieldsIndex" />
+ <NumberField source="qty" label="table.field.waitPakinItemLog.qty" />
+ <TextField source="batch" label="table.field.waitPakinItemLog.batch" />
+
+ <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>
+ <WaitPakinItemLogCreate
+ open={createDialog}
+ setOpen={setCreateDialog}
+ />
+ <PageDrawer
+ title='WaitPakinItemLog Detail'
+ drawerVal={drawerVal}
+ setDrawerVal={setDrawerVal}
+ >
+ </PageDrawer>
+ </Box>
+ )
+}
+
+export default WaitPakinItemLogList;
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogPanel.jsx b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogPanel.jsx
new file mode 100644
index 0000000..8bb4f7e
--- /dev/null
+++ b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogPanel.jsx
@@ -0,0 +1,141 @@
+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 WaitPakinItemLogPanel = () => {
+ 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.waitPakinItemLog.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.waitPakinItemLog.pakinId"
+ property={record.pakinId$}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.pakinItemId"
+ property={record.pakinItemId}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.asnId"
+ property={record.asnId}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.asnCode"
+ property={record.asnCode}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.asnItemId"
+ property={record.asnItemId}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.trackCode"
+ property={record.trackCode}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.maktx"
+ property={record.maktx}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.matnrId"
+ property={record.matnrId$}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.matnrCode"
+ property={record.matnrCode}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.anfme"
+ property={record.anfme}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.workQty"
+ property={record.workQty}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.unit"
+ property={record.unit}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.fieldsIndex"
+ property={record.fieldsIndex}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.qty"
+ property={record.qty}
+ />
+ </Grid>
+ <Grid item xs={6}>
+ <PanelTypography
+ title="table.field.waitPakinItemLog.batch"
+ property={record.batch}
+ />
+ </Grid>
+
+ </Grid>
+ </CardContent>
+ </Card >
+ </>
+ );
+};
+
+export default WaitPakinItemLogPanel;
diff --git a/rsf-admin/src/page/waitPakinItemLog/index.jsx b/rsf-admin/src/page/waitPakinItemLog/index.jsx
new file mode 100644
index 0000000..52cacba
--- /dev/null
+++ b/rsf-admin/src/page/waitPakinItemLog/index.jsx
@@ -0,0 +1,18 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+ ListGuesser,
+ EditGuesser,
+ ShowGuesser,
+} from "react-admin";
+
+import WaitPakinItemLogList from "./WaitPakinItemLogList";
+import WaitPakinItemLogEdit from "./WaitPakinItemLogEdit";
+
+export default {
+ list: WaitPakinItemLogList,
+ edit: WaitPakinItemLogEdit,
+ show: ShowGuesser,
+ recordRepresentation: (record) => {
+ return `${record.id}`
+ }
+};
diff --git a/rsf-admin/src/page/waitPakinLog/WaitPakinLogCreate.jsx b/rsf-admin/src/page/waitPakinLog/WaitPakinLogCreate.jsx
new file mode 100644
index 0000000..a3f7f0a
--- /dev/null
+++ b/rsf-admin/src/page/waitPakinLog/WaitPakinLogCreate.jsx
@@ -0,0 +1,147 @@
+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 WaitPakinLogCreate = (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.waitPakinLog.pakinId"
+ source="pakinId"
+ autoFocus
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.waitPakinLog.code"
+ source="code"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.waitPakinLog.barcode"
+ source="barcode"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.waitPakinLog.anfme"
+ source="anfme"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <SelectInput
+ label="table.field.waitPakinLog.ioStatus"
+ source="ioStatus"
+ choices={[
+ { id: 0, name: '寰呭叆搴�' },
+ { id: 1, name: ' 鍏ュ簱涓�' },
+ ]}
+ />
+ </Grid>
+
+ <Grid item xs={6} display="flex" gap={1}>
+ <StatusSelectInput />
+ </Grid>
+ <Grid item xs={12} display="flex" gap={1}>
+ <Stack direction="column" spacing={1} width={'100%'}>
+ <MemoInput />
+ </Stack>
+ </Grid>
+ </Grid>
+ </DialogContent>
+ <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
+ <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }} >
+ <SaveButton />
+ </Toolbar>
+ </DialogActions>
+ </Form>
+ </Dialog>
+ </CreateBase>
+ </>
+ )
+}
+
+export default WaitPakinLogCreate;
diff --git a/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx b/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx
new file mode 100644
index 0000000..3570c73
--- /dev/null
+++ b/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx
@@ -0,0 +1,120 @@
+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 WaitPakinLogEdit = () => {
+ 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.waitPakinLog.pakinId"
+ source="pakinId"
+ autoFocus
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.waitPakinLog.code"
+ source="code"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.waitPakinLog.barcode"
+ source="barcode"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.waitPakinLog.anfme"
+ source="anfme"
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <SelectInput
+ label="table.field.waitPakinLog.ioStatus"
+ source="ioStatus"
+ choices={[
+ { id: 0, name: '寰呭叆搴�' },
+ { id: 1, name: ' 鍏ュ簱涓�' },
+ ]}
+ validate={required()}
+ />
+ </Stack>
+
+ </Grid>
+ <Grid item xs={12} md={4}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.common')}
+ </Typography>
+ <StatusSelectInput />
+ <Box mt="2em" />
+ <MemoInput />
+ </Grid>
+ </Grid>
+ </SimpleForm>
+ </Edit >
+ )
+}
+
+export default WaitPakinLogEdit;
diff --git a/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx b/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx
new file mode 100644
index 0000000..e9cb3f8
--- /dev/null
+++ b/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx
@@ -0,0 +1,163 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useNavigate } from 'react-router-dom';
+import {
+ List,
+ DatagridConfigurable,
+ SearchInput,
+ TopToolbar,
+ SelectColumnsButton,
+ EditButton,
+ FilterButton,
+ CreateButton,
+ ExportButton,
+ BulkDeleteButton,
+ WrapperField,
+ useRecordContext,
+ useTranslate,
+ useNotify,
+ useListContext,
+ FunctionField,
+ TextField,
+ NumberField,
+ DateField,
+ BooleanField,
+ ReferenceField,
+ TextInput,
+ DateTimeInput,
+ DateInput,
+ SelectInput,
+ NumberInput,
+ ReferenceInput,
+ ReferenceArrayInput,
+ AutocompleteInput,
+ DeleteButton,
+} from 'react-admin';
+import { Box, Typography, Card, Stack } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import WaitPakinLogCreate from "./WaitPakinLogCreate";
+import WaitPakinLogPanel from "./WaitPakinLogPanel";
+import EmptyData from "../components/EmptyData";
+import MyCreateButton from "../components/MyCreateButton";
+import MyExportButton from '../components/MyExportButton';
+import PageDrawer from "../components/PageDrawer";
+import MyField from "../components/MyField";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import * as Common from '@/utils/common';
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+ '& .css-1vooibu-MuiSvgIcon-root': {
+ height: '.9em'
+ },
+ '& .RaDatagrid-row': {
+ cursor: 'auto'
+ },
+ '& .column-name': {
+ },
+ '& .opt': {
+ width: 200
+ },
+}));
+
+const filters = [
+ <SearchInput source="condition" alwaysOn />,
+
+ <NumberInput source="pakinId" label="table.field.waitPakinLog.pakinId" />,
+ <TextInput source="code" label="table.field.waitPakinLog.code" />,
+ <TextInput source="barcode" label="table.field.waitPakinLog.barcode" />,
+ <NumberInput source="anfme" label="table.field.waitPakinLog.anfme" />,
+ <SelectInput source="ioStatus" label="table.field.waitPakinLog.ioStatus"
+ 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 WaitPakinLogList = () => {
+ const translate = useTranslate();
+
+ const [createDialog, setCreateDialog] = useState(false);
+ const [drawerVal, setDrawerVal] = useState(false);
+
+ return (
+ <Box display="flex">
+ <List
+ sx={{
+ flexGrow: 1,
+ transition: (theme) =>
+ theme.transitions.create(['all'], {
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+ }}
+ title={"menu.waitPakinLog"}
+ empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+ filters={filters}
+ sort={{ field: "create_time", order: "desc" }}
+ actions={(
+ <TopToolbar>
+ <FilterButton />
+ {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
+ <SelectColumnsButton preferenceKey='waitPakinLog' />
+ <MyExportButton />
+ </TopToolbar>
+ )}
+ perPage={DEFAULT_PAGE_SIZE}
+ >
+ <StyledDatagrid
+ preferenceKey='waitPakinLog'
+ bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+ rowClick={(id, resource, record) => false}
+ expand={() => <WaitPakinLogPanel />}
+ expandSingle={true}
+ omit={['id', 'createTime', 'createBy', 'memo']}
+ >
+ <NumberField source="id" />
+ <NumberField source="pakinId" label="table.field.waitPakinLog.pakinId" />
+ <TextField source="code" label="table.field.waitPakinLog.code" />
+ <TextField source="barcode" label="table.field.waitPakinLog.barcode" />
+ <NumberField source="anfme" label="table.field.waitPakinLog.anfme" />
+ <TextField source="ioStatus$" label="table.field.waitPakinLog.ioStatus" sortable={false} />
+
+ <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
+ <TextField source="nickname" />
+ </ReferenceField>
+ <DateField source="updateTime" label="common.field.updateTime" showTime />
+ <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
+ <TextField source="nickname" />
+ </ReferenceField>
+ <DateField source="createTime" label="common.field.createTime" showTime />
+ <BooleanField source="statusBool" label="common.field.status" sortable={false} />
+ <TextField source="memo" label="common.field.memo" sortable={false} />
+ <WrapperField cellClassName="opt" label="common.field.opt">
+ {/* <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> */}
+ <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
+ </WrapperField>
+ </StyledDatagrid>
+ </List>
+ <WaitPakinLogCreate
+ open={createDialog}
+ setOpen={setCreateDialog}
+ />
+ <PageDrawer
+ title='WaitPakinLog Detail'
+ drawerVal={drawerVal}
+ setDrawerVal={setDrawerVal}
+ >
+ </PageDrawer>
+ </Box>
+ )
+}
+
+export default WaitPakinLogList;
diff --git a/rsf-admin/src/page/waitPakinLog/WaitPakinLogPanel.jsx b/rsf-admin/src/page/waitPakinLog/WaitPakinLogPanel.jsx
new file mode 100644
index 0000000..d2935c3
--- /dev/null
+++ b/rsf-admin/src/page/waitPakinLog/WaitPakinLogPanel.jsx
@@ -0,0 +1,112 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import { Box, Card, CardContent, Grid, Typography, Button, TextField, Tooltip, Paper, TableContainer, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material';
+import {
+ useTranslate,
+ useRecordContext,
+ useNotify,
+ useRefresh,
+ useListContext,
+} from 'react-admin';
+import PanelTypography from "../components/PanelTypography";
+import * as Common from '@/utils/common'
+import { styled } from "@mui/material/styles";
+import request from '@/utils/request';
+import debounce from 'lodash/debounce';
+import { DataGrid } from '@mui/x-data-grid';
+
+const WaitPakinLogPanel = () => {
+ const record = useRecordContext();
+ if (!record) return null;
+ const translate = useTranslate();
+ const notify = useNotify();
+ const [rows, setRows] = useState([]);
+ const [maktx, setMaktx] = useState('');
+ const pakinId = record.id;
+
+ const http = async (parmas) => {
+ const res = await request.post('/WaitPakinLog/page', { ...parmas, pakinId });
+ if (res?.data?.code === 200) {
+ setRows(res.data.data.records)
+ } else {
+ notify(res.data.msg);
+ }
+ }
+
+ const debouncedHttp = useMemo(() => debounce(http, 300), []);
+
+ const columns = [
+ {
+ field: 'pakinId',
+ headerName: translate('table.field.waitPakinItem.pakinId')
+ },
+ {
+ field: 'maktx',
+ headerName: translate('table.field.waitPakinItem.maktx'),
+ width: 300
+ },
+ {
+ field: 'matnrId',
+ headerName: translate('table.field.waitPakinItem.matnrId')
+ },
+ {
+ field: 'matnrCode',
+ headerName: translate('table.field.waitPakinItem.matnrCode')
+ },
+ {
+ field: 'anfme',
+ headerName: translate('table.field.waitPakinItem.anfme')
+ },
+ {
+ field: 'workQty',
+ headerName: translate('table.field.waitPakinItem.workQty')
+ },
+ {
+ field: 'unit',
+ headerName: translate('table.field.waitPakinItem.unit')
+ },
+ {
+ field: 'fieldsIndex',
+ headerName: translate('table.field.waitPakinItem.fieldsIndex')
+ },
+ {
+ field: 'qty',
+ headerName: translate('table.field.waitPakinItem.qty')
+ },
+ {
+ field: 'batch',
+ headerName: translate('table.field.waitPakinItem.batch')
+ },
+ ]
+
+ const maktxChange = (value) => {
+ setMaktx(value)
+ }
+
+ 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' }} />
+
+ <div style={{ display: 'flex', gap: '10px' }}>
+ </div>
+ </div>
+
+
+ <DataGrid
+ size="small"
+ rows={rows}
+ columns={columns}
+ disableRowSelectionOnClick
+ disableColumnMenu={true}
+ disableColumnSorting
+ disableMultipleColumnsSorting
+ />
+ </Box >
+ );
+};
+
+export default WaitPakinLogPanel;
diff --git a/rsf-admin/src/page/waitPakinLog/index.jsx b/rsf-admin/src/page/waitPakinLog/index.jsx
new file mode 100644
index 0000000..6e89a94
--- /dev/null
+++ b/rsf-admin/src/page/waitPakinLog/index.jsx
@@ -0,0 +1,18 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+ ListGuesser,
+ EditGuesser,
+ ShowGuesser,
+} from "react-admin";
+
+import WaitPakinLogList from "./WaitPakinLogList";
+import WaitPakinLogEdit from "./WaitPakinLogEdit";
+
+export default {
+ list: WaitPakinLogList,
+ edit: WaitPakinLogEdit,
+ show: ShowGuesser,
+ recordRepresentation: (record) => {
+ return `${record.id}`
+ }
+};
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
index 999b8d4..566972b 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" />
--
Gitblit v1.9.1