From e5d2c6f2eb8cc33675308d7d33fd4029d5fd2e34 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 20 五月 2025 18:42:11 +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