From 0a961cda12ec39dc0e33fc9148f902a7bed7bd76 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期五, 23 五月 2025 09:41:15 +0800
Subject: [PATCH] #
---
rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx | 359 +++++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 284 insertions(+), 75 deletions(-)
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx
index 7302abe..1fdb77c 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx
@@ -39,8 +39,9 @@
TableCell,
Tooltip,
IconButton,
- styled
-
+ styled,
+ Select,
+ MenuItem
} from '@mui/material';
import DialogCloseButton from "../../components/DialogCloseButton";
@@ -52,9 +53,15 @@
import request from '@/utils/request';
import { Add, Edit, Delete } from '@mui/icons-material';
import _, { set } from 'lodash';
-import { DataGrid, useGridApiRef } from '@mui/x-data-grid';
+import { DataGrid, useGridApiRef, GRID_DATE_COL_DEF, GRID_DATETIME_COL_DEF, getGridDateOperators, useGridApiContext } from '@mui/x-data-grid';
+import { LocalizationProvider, DatePicker, DateTimePicker } from '@mui/x-date-pickers';
+import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import DictionarySelect from "../../components/DictionarySelect";
import DictSelect from "../../components/DictSelect";
+import "./asnOrder.css";
+import { 'zhCN' as locale } from 'date-fns/locale';
+import { format, } from 'date-fns';
+import { DemoContainer } from '@mui/x-date-pickers/internals/demo';
const AsnOrderModal = (props) => {
const { open, setOpen, asnId, billReload } = props;
@@ -63,9 +70,7 @@
const notify = useNotify();
const refresh = useRefresh();
const [disabled, setDisabled] = useState(false)
-
const [createDialog, setCreateDialog] = useState(false);
-
const tableRef = useRef();
useEffect(() => {
@@ -101,6 +106,7 @@
...prevData,
[name]: value
}));
+ console.log(formData);
};
const resetData = () => {
@@ -117,7 +123,7 @@
const setFinally = () => {
const rows = tableRef.current.state.editRows;
for (const key in rows) {
- const find = tabelData.find(item => item.matnrId === +key);
+ const find = tabelData.find(item => item.id === +key);
find.anfme = rows[key].anfme.value;
}
setTableData([...tabelData]);
@@ -195,7 +201,7 @@
const handleDeleteItem = () => {
- const newTableData = _.filter(tabelData, (item) => !selectedRows.includes(item.matnrId));
+ const newTableData = _.filter(tabelData, (item) => !selectedRows.includes(item.id));
setTableData(newTableData);
}
@@ -208,7 +214,7 @@
aria-hidden
fullWidth
disableRestoreFocus
- maxWidth="lg" // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
+ maxWidth="xl" // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
>
<DialogTitle id="form-dialog-title" sx={{
position: 'sticky',
@@ -223,7 +229,7 @@
</DialogTitle>
<DialogContent sx={{ mt: 2 }}>
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
- <Form>
+ <Form defaultValues={formData}>
<Grid container spacing={2}>
<Grid item md={3}>
<DictSelect
@@ -231,6 +237,7 @@
value={formData.type}
onChange={(e) => handleChange(e.target.value, 'type')}
dictTypeCode="sys_order_type"
+ group='1'
required
/>
</Grid>
@@ -238,39 +245,35 @@
<DictSelect
label={translate("table.field.asnOrder.wkType")}
value={formData.wkType}
+ group='1'
onChange={(e) => handleChange(e.target.value, 'wkType')}
dictTypeCode="sys_business_type"
required
/>
</Grid>
- <Grid item md={3}>
+ <Grid item md={2}>
<TextField
label={translate("table.field.asnOrder.poCode")}
value={formData.poCode}
+ variant="filled"
onChange={(e) => handleChange(e.target.value, 'poCode')}
/>
</Grid>
- <Grid item md={3}>
+ <Grid item md={2}>
<TextField
label={translate("table.field.asnOrder.logisNo")}
value={formData.logisNo}
+ variant="filled"
onChange={(e) => handleChange(e.target.value, 'logisNo')}
/>
</Grid>
-
<Grid item md={3}>
- {/* <TextField
- label={translate("table.field.asnOrder.arrTime")}
- value={formData.arrTime}
- onChange={(e) => handleChange(e.target.value, 'arrTime')}
- /> */}
<DateInput
source="arrTime"
label="table.field.asnOrder.arrTime"
value={formData.arrTime}
onChange={(e) => handleChange(e.target.value, 'arrTime')}
/>
-
</Grid>
</Grid>
</Form>
@@ -280,11 +283,9 @@
<Stack direction="row" spacing={2}>
<Button variant="contained" onClick={() => setCreateDialog(true)}>鏂板鐗╂枡</Button>
{/* {asnId !== '' && <ConfirmButton label={'鍒犻櫎'} variant="outlined" color="error" onConfirm={handleDelete} />} */}
- <ConfirmButton label={'鍒犻櫎'} variant="outlined" color="error" onConfirm={handleDeleteItem} />
+ <ConfirmButton label={'ra.action.delete'} variant="outlined" color="error" onConfirm={handleDeleteItem} />
</Stack>
-
</Box>
-
<Box sx={{ mt: 2 }}>
<AsnOrderModalTable tabelData={tabelData} setTableData={setTableData} asnId={asnId} selectedRows={selectedRows} setSelectedRows={setSelectedRows} tableRef={tableRef}></AsnOrderModalTable>
</Box>
@@ -296,9 +297,7 @@
</Button>
</Toolbar>
</DialogActions>
-
</Dialog>
-
<AsnWareModal
open={createDialog}
setOpen={setCreateDialog}
@@ -311,18 +310,193 @@
export default AsnOrderModal;
+
+const dateColumnType = {
+ ...GRID_DATE_COL_DEF,
+ resizable: false,
+ renderEditCell: (params) => {
+ return <GridEditDateCell {...params} />;
+ },
+ // filterOperators: getGridDateOperators(false).map((item) => ({
+ // ...item,
+ // InputComponent: GridFilterDateInput,
+ // InputComponentProps: { showTime: false },
+ // })),
+ // valueFormatter: (value) => {
+ // if (value) {
+ // return format(value, 'yyyy-MM-dd', { locale });
+ // }
+ // return '';
+ // },
+}
+
+const SelectInputSplrNameEditCell = (params) => {
+ const [formData, setFormData] = useState([{}])
+ useEffect(() => {
+ getOptions();
+ }, []);
+ const getOptions = async () => {
+ const parmas = {
+ "type": "supplier"
+ }
+ const {
+ data: { code, data, msg },
+ } = await request.post("companys/page", parmas);
+ if (code === 200) {
+ setFormData(data.records)
+ console.log(data.records)
+ } else {
+ notify(msg);
+ }
+ }
+
+ return (
+ <Select
+ value={params.value}
+ onChange={(e) => {
+ params.api.setEditCellValue({
+ id: params.id,
+ field: params.field,
+ value: e.target.value,
+ })
+ // 鎵惧埌閫変腑鐨勪緵搴斿晢璁板綍
+ const selectedSupplier = formData.find(supplier => supplier.name === e.target.value);
+
+ // 濡傛灉鎵惧埌瀵瑰簲鐨勪緵搴斿晢璁板綍锛屽悓鏃舵洿鏂皊plrCode瀛楁
+ if (selectedSupplier) {
+ params.api.setEditCellValue({
+ id: params.id,
+ field: 'splrCode',
+ value: selectedSupplier.id,
+ });
+ }
+ }
+
+ }
+ fullWidth
+
+ >
+ {formData.map(e => {
+ return (
+ <MenuItem value={e.name} children={e.name} key={e.id} />
+ );
+
+ })}
+
+ </Select>
+ );
+};
+
+
+const GridEditDateCell = ({ id, field, value, colDef, hasFocus }) => {
+ const apiRef = useGridApiContext();
+ const inputRef = React.useRef(null);
+ const Component = colDef.type === 'dateTime' ? DateTimePicker : DatePicker;
+
+ const handleChange = (newValue) => {
+ apiRef.current.setEditCellValue({ id, field, value: newValue });
+ };
+
+ // useEnhancedEffect(() => {
+ // if (hasFocus) {
+ // inputRef.current.focus();
+ // }
+ // }, [hasFocus]);
+
+ return (
+ <LocalizationProvider dateAdapter={AdapterDayjs}>
+ <DemoContainer components={['DatePicker']}>
+ <DatePicker label="Basic date picker" />
+ </DemoContainer>
+ </LocalizationProvider>
+ // <Component
+ // value={value}
+ // autoFocus
+ // onChange={handleChange}
+ // slotProps={{
+ // textField: {
+ // inputRef,
+ // variant: 'standard',
+ // fullWidth: true,
+ // sx: {
+ // padding: '0 9px',
+ // justifyContent: 'center',
+ // },
+ // InputProps: {
+ // disableUnderline: true,
+ // sx: { fontSize: 'inherit' },
+ // },
+ // },
+ // }}
+ // />
+ );
+}
+
+
+const SelectInputSplrCodeEditCell = (params) => {
+ const [formData, setFormData] = useState([{}])
+ useEffect(() => {
+ getOptions();
+ }, []);
+ const getOptions = async () => {
+ const parmas = {
+ "type": "supplier"
+ }
+ const {
+ data: { code, data, msg },
+ } = await request.post("companys/page", parmas);
+ if (code === 200) {
+ setFormData(data.records)
+ console.log(data.records)
+ } else {
+ notify(msg);
+ }
+ }
+
+ return (
+ <Select
+ value={params.value}
+ onChange={(e) => {
+ params.api.setEditCellValue({
+ id: params.id,
+ field: params.field,
+ value: e.target.value,
+ })
+ const selectedSupplier = formData.find(supplier => supplier.id === e.target.value);
+
+ // 濡傛灉鎵惧埌瀵瑰簲鐨勪緵搴斿晢璁板綍锛屽悓鏃舵洿鏂皊plrCode瀛楁
+ if (selectedSupplier) {
+ params.api.setEditCellValue({
+ id: params.id,
+ field: 'splrName',
+ value: selectedSupplier.name,
+ });
+ }
+ }
+
+ }
+ fullWidth
+
+ >
+ {formData.map(e => {
+ return (
+ <MenuItem value={e.id} children={e.name} key={e.id} />
+ );
+
+ })}
+
+ </Select>
+ );
+};
+
+
+
+
const AsnOrderModalTable = ({ tabelData, setTableData, asnId, selectedRows, setSelectedRows, tableRef }) => {
const translate = useTranslate();
const notify = useNotify();
const [columns, setColumns] = useState([
-
- {
- field: 'maktx',
- headerName: translate('table.field.asnOrderItem.maktx'),
- width: 250,
- editable: false,
- },
{
field: 'matnrCode',
headerName: translate('table.field.asnOrderItem.matnrCode'),
@@ -330,48 +504,69 @@
editable: false,
},
{
+ field: 'maktx',
+ headerName: translate('table.field.asnOrderItem.maktx'),
+ width: 250,
+ editable: false,
+ },
+ {
field: 'anfme',
- headerName: translate('table.field.asnOrderItem.purQty'),
+ headerName: translate('table.field.asnOrderItem.anfme') + "*",
type: 'number',
minWidth: 100,
flex: 1,
editable: true,
- valueFormatter: (val) => val < 0 ? 0 : val
- },
- {
- field: 'splrCode',
- headerName: translate('table.field.asnOrderItem.splrCode'),
- minWidth: 100,
- flex: 1,
- editable: true,
- },
- {
- field: 'splrName',
- headerName: translate('table.field.asnOrderItem.splrName'),
- minWidth: 100,
- flex: 1,
- editable: true,
+ valueFormatter: (val) => val < 0 ? 0 : val,
+ headerClassName: "custom",
},
// {
- // field: 'packName',
- // headerName: translate('table.field.asnOrderItem.packName'),
+ // field: 'splrCode',
+ // headerName: translate('table.field.asnOrderItem.splrCode') + "*",
// minWidth: 100,
// flex: 1,
// editable: true,
- // },
- // {
- // field: 'poDetlId',
- // headerName: translate('table.field.asnOrderItem.poDetlId'),
- // minWidth: 100,
- // flex: 1,
+ // renderEditCell: (params) => (
+ // <SelectInputSplrCodeEditCell {...params} />
+ // ),
+ // headerClassName: "custom",
// },
{
- field: 'poCode',
- headerName: translate('table.field.asnOrderItem.poDetlCode'),
+ field: 'splrName',
+ headerName: translate('table.field.asnOrderItem.splrName') + "*",
minWidth: 100,
flex: 1,
editable: true,
+ renderEditCell: (params) => (
+ <SelectInputSplrNameEditCell {...params} />
+ ),
+ headerClassName: "custom",
},
+ {
+ field: 'platItemId',
+ headerName: translate('table.field.asnOrderItem.platItemId') + "*",
+ minWidth: 100,
+ flex: 1,
+ editable: true,
+ headerClassName: "custom",
+ },
+ {
+ field: 'splrBatch',
+ headerName: translate('table.field.asnOrderItem.splrBatch'),
+ minWidth: 100,
+ flex: 1,
+ editable: true,
+ headerClassName: "custom",
+
+ },
+
+ // {
+ // field: 'poCode',
+ // headerName: translate('table.field.asnOrderItem.poDetlCode') + "*",
+ // minWidth: 100,
+ // flex: 1,
+ // editable: true,
+ // headerClassName: "custom",
+ // },
{
field: 'stockUnit',
@@ -381,22 +576,28 @@
editable: false,
},
// {
+ // field: 'prodTime',
+ // headerName: translate('table.field.asnOrderItem.prodTime'),
+ // minWidth: 200,
+ // flex: 1,
+ // ...dateColumnType,
+ // editable: true,
+ // headerClassName: "custom",
+ // },
+ // {
// field: 'purQty',
// headerName: translate('table.field.asnOrderItem.purQty'),
// minWidth: 100,
// flex: 1,
// editable: true,
// },
- {
- field: 'purUnit',
- headerName: translate('table.field.asnOrderItem.purUnit'),
- minWidth: 100,
- flex: 1,
- editable: false,
- },
-
-
-
+ // {
+ // field: 'purUnit',
+ // headerName: translate('table.field.asnOrderItem.purUnit'),
+ // minWidth: 100,
+ // flex: 1,
+ // editable: false,
+ // },
])
const action = {
@@ -411,7 +612,6 @@
</IconButton>
</Tooltip>
),
-
}
let cdata = useRef([]);
@@ -432,11 +632,21 @@
} = await request.get("/fields/enable/list");
if (code === 200) {
const cols = data.map(el => ({
- field: el.fields,
+ field: el.fields,
+ valueGetter: (value, row) => {
+ if (value != null && value != undefined) {
+ return value;
+ }
+ if (row.extendFields == null ||row.extendFields[el.fields] == null) {
+ return ''
+ } else {
+ return `${row.extendFields[el.fields] == null ? '' : row.extendFields[el.fields]}`;
+ }
+ },
headerName: el.fieldsAlise,
minWidth: 100,
flex: 1,
- editable: false
+ editable: true
}))
setColumns([...columns, ...cols, action])
} else {
@@ -444,17 +654,15 @@
}
}
-
-
const handleDelete = (row) => {
- const newData = _.filter(cdata.current, (item) => item.matnrId !== row.matnrId);
+ const newData = _.filter(cdata.current, (item) => item.id !== row.id);
setTableData(newData);
};
const processRowUpdate = (newRow, oldRow) => {
const rows = tabelData.map((r) =>
- r.matnrId === newRow.matnrId ? { ...newRow } : r
+ r.id === newRow.id ? { ...newRow } : r
)
setTableData(rows)
// setTableData((prevData) =>
@@ -468,8 +676,9 @@
};
-
const handleSelectionChange = (ids) => {
+ console.log(ids);
+
setSelectedRows(ids)
};
@@ -484,7 +693,7 @@
rows={tabelData}
columns={columns}
disableRowSelectionOnClick
- getRowId={(row) => row.matnrId}
+ getRowId={(row) => row.id}
disableColumnFilter
disableColumnSelector
disableColumnSorting
--
Gitblit v1.9.1