From 40be148bf5668d33595f3275f22d55714ff4dd54 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期三, 21 五月 2025 13:06:25 +0800
Subject: [PATCH] 任务添加拣货按钮

---
 rsf-admin/src/page/basicInfo/whMat/WhMatList.jsx |  479 ++++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 273 insertions(+), 206 deletions(-)

diff --git a/rsf-admin/src/page/basicInfo/whMat/WhMatList.jsx b/rsf-admin/src/page/basicInfo/whMat/WhMatList.jsx
index 1085ed2..d0b4c7c 100644
--- a/rsf-admin/src/page/basicInfo/whMat/WhMatList.jsx
+++ b/rsf-admin/src/page/basicInfo/whMat/WhMatList.jsx
@@ -1,237 +1,304 @@
 import React, { useState, useRef, useEffect, useMemo } from "react";
-import { Box, Card, CardContent, LinearProgress, TextField, Button, Typography } from "@mui/material";
-import * as Icons from '@mui/icons-material';
-import { List, useTranslate, useListContext, Title, } from "react-admin";
+import {
+  Box,
+  Card,
+  CardContent,
+  LinearProgress,
+  TextField,
+  Button,
+  Typography,
+} from "@mui/material";
+import * as Icons from "@mui/icons-material";
+import {
+  List,
+  useTranslate,
+  useListContext,
+  Title,
+  useGetList,
+  useNotify,
+} from "react-admin";
 import WhMatListAside from "./WhMatListAside";
 import { RichTreeView } from "@mui/x-tree-view/RichTreeView";
 import { TreeItem2 } from "@mui/x-tree-view/TreeItem2";
-import request from '@/utils/request';
-import { Add, Edit, Delete, Padding, Save } from '@mui/icons-material';
-import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
-import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';
-import RefreshIcon from '@mui/icons-material/Refresh';
-import { useTreeItem2Utils } from '@mui/x-tree-view/hooks';
+import request from "@/utils/request";
+import { Add, Edit, Delete, Padding, Save } from "@mui/icons-material";
+import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown";
+import KeyboardArrowRightIcon from "@mui/icons-material/KeyboardArrowRight";
+import RefreshIcon from "@mui/icons-material/Refresh";
+import { useTreeItem2Utils } from "@mui/x-tree-view/hooks";
 import WhMatCreate from "./whMatCreate";
 
 // const RESOURCE = 'dept';
-const TITLE = 'menu.whMat';
+const TITLE = "menu.whMat";
 
 const WhMatListContent = () => {
-    const translate = useTranslate();
-    const [searchVal, setSearchVal] = useState('');
-    const [createDialog, setCreateDialog] = React.useState(false);
-    const [editRecord, setEditRecord] = React.useState(null);
-    const treeData = [
+  const translate = useTranslate();
+  const [searchVal, setSearchVal] = useState("");
+  const [createDialog, setCreateDialog] = React.useState(false);
+  const [editRecord, setEditRecord] = React.useState(null);
+  const treeData = [
+    {
+      id: "19",
+      label: "鍗婃垚鍝�",
+      secondaryLabel: "RM001",
+      editable: true,
+      children: [
         {
-            id: '19',
-            label: '鍗婃垚鍝�',
-            secondaryLabel: 'RM001',
-            editable: true,
-            children: [
-                {
-                    id: 'grid-community', primaryText: '鍗婃垚鍝�',
-                    secondaryText: 'RM001', label: '@mui/x-data-grid', editable: true, children: [
-                        {
-                            id: 'grid-community22', primaryText: '鍗婃垚鍝�',
-                            secondaryText: 'RM001', label: '@mui/x-data-grid', editable: true
-                        },]
-                },
-                {
-                    id: 'grid-pro', primaryText: '鍗婃垚鍝�',
-                    secondaryText: 'RM001', label: '@mui/x-data-grid-pro', editable: true
-                },
-                {
-                    id: 'grid-premium', primaryText: '鍗婃垚鍝�',
-                    secondaryText: 'RM001', label: '@mui/x-data-grid-premium', editable: true
-                },
-            ],
+          id: "grid-community",
+          primaryText: "鍗婃垚鍝�",
+          secondaryText: "RM001",
+          label: "@mui/x-data-grid",
+          editable: true,
+          children: [
+            {
+              id: "grid-community22",
+              primaryText: "鍗婃垚鍝�",
+              secondaryText: "RM001",
+              label: "@mui/x-data-grid",
+              editable: true,
+            },
+          ],
         },
         {
-            id: '18',
-            label: '鍘熸潗鏂�',
-            primaryText: '鍗婃垚鍝�',
-            secondaryText: 'RM001',
+          id: "grid-pro",
+          primaryText: "鍗婃垚鍝�",
+          secondaryText: "RM001",
+          label: "@mui/x-data-grid-pro",
+          editable: true,
         },
         {
-            id: 'charts',
-            label: 'Charts',
-            primaryText: '鍗婃垚鍝�',
-            secondaryText: 'RM001',
-            children: [{
-                id: 'charts-community', primaryText: '鍗婃垚鍝�',
-                secondaryText: 'RM001', label: '@mui/x-charts'
-            }],
+          id: "grid-premium",
+          primaryText: "鍗婃垚鍝�",
+          secondaryText: "RM001",
+          label: "@mui/x-data-grid-premium",
+          editable: true,
         },
+      ],
+    },
+    {
+      id: "18",
+      label: "鍘熸潗鏂�",
+      primaryText: "鍗婃垚鍝�",
+      secondaryText: "RM001",
+    },
+    {
+      id: "charts",
+      label: "Charts",
+      primaryText: "鍗婃垚鍝�",
+      secondaryText: "RM001",
+      children: [
         {
-            id: 'tree-view',
-            label: 'Tree View',
-            primaryText: '鍗婃垚鍝�',
-            secondaryLabel: 'RM001',
-            children: [{
-                id: 'tree-view-community', primaryText: '鍗婃垚鍝�',
-                secondaryText: 'RM001', label: '@mui/x-tree-view'
-            }],
+          id: "charts-community",
+          primaryText: "鍗婃垚鍝�",
+          secondaryText: "RM001",
+          label: "@mui/x-charts",
         },
+      ],
+    },
+    {
+      id: "tree-view",
+      label: "Tree View",
+      primaryText: "鍗婃垚鍝�",
+      secondaryLabel: "RM001",
+      children: [
         {
-            id: 'tree-view2',
-            label: 'Tree View3',
-            primaryText: '鍗婃垚鍝�',
-            secondaryText: 'RM001',
-            children: [{
-                id: 'tree-view-community1', primaryText: '鍗婃垚鍝�',
-                secondaryText: 'RM001', label: '@mui/x-tree-view'
-            }],
+          id: "tree-view-community",
+          primaryText: "鍗婃垚鍝�",
+          secondaryText: "RM001",
+          label: "@mui/x-tree-view",
         },
-    ];
-    const handleNodeSelect = (event, nodeId) => {
-        console.log('Selected Node ID:', nodeId);
-        // 鍦ㄨ繖閲屽彲浠ユ牴鎹� nodeId 鏇存柊涓诲唴瀹瑰尯鍩�
-    };
-    const handleSearch = () => {
-        console.log('Search Input:', selectedOption);
-    };
+      ],
+    },
+    {
+      id: "tree-view2",
+      label: "Tree View3",
+      primaryText: "鍗婃垚鍝�",
+      secondaryText: "RM001",
+      children: [
+        {
+          id: "tree-view-community1",
+          primaryText: "鍗婃垚鍝�",
+          secondaryText: "RM001",
+          label: "@mui/x-tree-view",
+        },
+      ],
+    },
+  ];
 
+  const notify = useNotify();
+  const handleNodeSelect = (event, nodeId) => {
+    console.log("Selected Node ID:", nodeId);
+    // 鍦ㄨ繖閲屽彲浠ユ牴鎹� nodeId 鏇存柊涓诲唴瀹瑰尯鍩�
+  };
+  const handleSearch = () => {
+    console.log("Search Input:", selectedOption);
+  };
 
-    const CustomCheckbox = React.forwardRef(function CustomCheckbox(props, ref) {
-        return <input type="checkbox" ref={ref} {...props} />;
-    });
-    function CustomLabel({ children, className, secondaryLabel }) {
-        return (
-            <Box display={"flex"} alignItems={"end"}>
-                <Typography fontWeight={500}>{children}</Typography>
-                <Box width={10}></Box>
-                {secondaryLabel && (
-                    <Typography variant="caption" color="secondary">
-                        {secondaryLabel}
-                    </Typography>
-                )}
-            </Box>
-        );
+  const handleInput = (value) => {
+    setSearchVal(value);
+  };
+
+  const CustomCheckbox = React.forwardRef(function CustomCheckbox(props, ref) {
+    return <input type="checkbox" ref={ref} {...props} />;
+  });
+
+  const getMatnrList = async () => {
+    const {
+      data: { code, data, msg },
+    } = await request.post("/matnr/list", {});
+    if (code === 200) {
+      console.log(data);
+    } else {
+      notify(msg);
     }
-    const CustomTreeItem = React.forwardRef(function CustomTreeItem(props, ref) {
-        const { publicAPI } = useTreeItem2Utils({
-            itemId: props.itemId,
-            children: props.children,
-        });
+  };
 
-        const item = publicAPI.getItem(props.itemId);
+  React.useEffect(() => {
+    getMatnrList();
+  }, []);
 
-        return (
-            <TreeItem2
-                {...props}
-                ref={ref}
-                slots={{
-                    label: CustomLabel,
-                }}
-                slotProps={{
-                    label: { secondaryLabel: item?.secondaryLabel || '' },
-                }}
-
-            />
-        );
+  function CustomLabel({ children, className, secondaryLabel }) {
+    return (
+      <Box display={"flex"} alignItems={"end"}>
+        <Typography fontWeight={500}>{children}</Typography>
+        <Box width={10}></Box>
+        {secondaryLabel && (
+          <Typography variant="caption" color="secondary">
+            {secondaryLabel}
+          </Typography>
+        )}
+      </Box>
+    );
+  }
+  const CustomTreeItem = React.forwardRef(function CustomTreeItem(props, ref) {
+    const { publicAPI } = useTreeItem2Utils({
+      itemId: props.itemId,
+      children: props.children,
     });
 
-    const isLoading = false;
-
-    React.useEffect(() => {
-        request.post('/matnrGroup/tree', {})
-            .then(res => {
-                if (res?.data?.code === 200) {
-                    let data = res.data.data;
-                    console.log(data);
-
-                } else {
-                    notify(res.data.msg);
-                }
-            })
-            .catch(error => {
-                notify('Error fetching tree data');
-            });
-    }, [searchVal])
-
-    const handleAdd = () => {
-        setCreateDialog(true);
-    };
+    const item = publicAPI.getItem(props.itemId);
 
     return (
-        <>
-            <Box sx={{ mt: 1, mr: 3, display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
-                <WhMatCreate
-                    editRecord={editRecord}
-                    open={createDialog}
-                    setOpen={setCreateDialog}
-                />
-                <Box
-                    width={300}
-                    mb={1}
-                >
-                    <TextField
-                        label={translate('ra.action.search')}
-                        value={searchVal}
-                        onChange={(e) => handleInput(e.target.value)}
-                    />
-                </Box>
-                <Box>
-                    <Button
-                        variant="outlined"
-                        color="primary"
-                        startIcon={<Add />}
-                        onClick={handleAdd}
-                    >
-                        {translate('ra.action.add')}
-                    </Button>
-                    <Button
-                        variant="outlined"
-                        color="error"
-                        startIcon={<Delete />}
-                        sx={{ ml: 1 }}
-                    >
-                        {translate('ra.action.delete')}
-                    </Button>
-                    <Button
-                        variant="outlined"
-                        color="primary"
-                        sx={{ ml: 1 }}
-                        startIcon={<Save />}
-                    >
-                        {translate('ra.action.save')}
-                    </Button>
-                </Box>
-            </Box>
+      <TreeItem2
+        {...props}
+        ref={ref}
+        slots={{
+          label: CustomLabel,
+        }}
+        slotProps={{
+          label: { secondaryLabel: item?.secondaryLabel || "" },
+        }}
+      />
+    );
+  });
 
-            <Card>
-                <CardContent>
-                    <RichTreeView
-                        defaultExpandedItems={['grid', 'pickers']}
-                        checkboxSelection
-                        items={treeData}
-                        slots={{ item: CustomTreeItem }}
-                        onItemClick={handleNodeSelect} // 鐩戝惉鑺傜偣鐐瑰嚮浜嬩欢
-                    />
-                </CardContent>
-            </Card>
-        </>
-    )
-}
+  const isLoading = false;
+
+  React.useEffect(() => {
+    request
+      .post("/matnrGroup/tree", {})
+      .then((res) => {
+        if (res?.data?.code === 200) {
+          let data = res.data.data;
+          console.log(data);
+        } else {
+          notify(res.data.msg);
+        }
+      })
+      .catch((error) => {
+        notify("Error fetching tree data");
+      });
+  }, [searchVal]);
+
+  const handleAdd = () => {
+    setCreateDialog(true);
+  };
+
+  return (
+    <>
+      <Box
+        sx={{
+          mt: 1,
+          mr: 3,
+          display: "flex",
+          alignItems: "center",
+          justifyContent: "space-between",
+        }}
+      >
+        <WhMatCreate
+          editRecord={editRecord}
+          open={createDialog}
+          setOpen={setCreateDialog}
+        />
+        <Box width={300} mb={1}>
+          <TextField
+            label={translate("ra.action.search")}
+            value={searchVal}
+            onChange={(e) => handleInput(e.target.value)}
+          />
+        </Box>
+        <Box>
+          <Button
+            variant="outlined"
+            color="primary"
+            startIcon={<Add />}
+            onClick={handleAdd}
+          >
+            {translate("ra.action.add")}
+          </Button>
+          <Button
+            variant="outlined"
+            color="error"
+            startIcon={<Delete />}
+            sx={{ ml: 1 }}
+          >
+            {translate("ra.action.delete")}
+          </Button>
+          <Button
+            variant="outlined"
+            color="primary"
+            sx={{ ml: 1 }}
+            startIcon={<Save />}
+          >
+            {translate("ra.action.save")}
+          </Button>
+        </Box>
+      </Box>
+
+      <Card>
+        <CardContent>
+          <RichTreeView
+            defaultExpandedItems={["grid", "pickers"]}
+            checkboxSelection
+            items={treeData}
+            slots={{ item: CustomTreeItem }}
+            onItemClick={handleNodeSelect} // 鐩戝惉鑺傜偣鐐瑰嚮浜嬩欢
+          />
+        </CardContent>
+      </Card>
+    </>
+  );
+};
 
 const WhMatList = () => {
-    const translate = useTranslate();
-    return (
-        <>
-            <Box sx={{
-                display: 'flex',
-                marginBottom: 24
-            }}>
-                <Title title={TITLE} />
-                <Box>
-                    <WhMatListAside />
-                </Box>
-                <Box sx={{ flexGrow: 1 }}>
-                    <WhMatListContent />
-                </Box>
-            </Box>
-        </>
-
-    )
-}
-export default WhMatList;
\ No newline at end of file
+  const translate = useTranslate();
+  return (
+    <>
+      <Box
+        sx={{
+          display: "flex",
+          marginBottom: 24,
+        }}
+      >
+        <Title title={TITLE} />
+        <Box>
+          <WhMatListAside />
+        </Box>
+        <Box sx={{ flexGrow: 1 }}>
+          <WhMatListContent />
+        </Box>
+      </Box>
+    </>
+  );
+};
+export default WhMatList;

--
Gitblit v1.9.1