From b6f3ff15c1222ee1d54cc7b65a83c8d577f29e1b Mon Sep 17 00:00:00 2001
From: verou <857149855@qq.com>
Date: 星期一, 17 三月 2025 14:09:05 +0800
Subject: [PATCH] feat:TooltipField组件

---
 rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx |   90 ++++++++++++++++++++++++++++++++------------
 1 files changed, 65 insertions(+), 25 deletions(-)

diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx
index d61f6a8..e20ce92 100644
--- a/rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx
+++ b/rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx
@@ -11,20 +11,58 @@
 import { RichTreeView } from "@mui/x-tree-view/RichTreeView";
 import { TreeItem2 } from "@mui/x-tree-view/TreeItem2";
 
-
 const MatListAside = () => {
     const theme = useTheme();
     const notify = useNotify();
     const { setFilters } = useListContext(); // 鑾峰彇鍒楄〃涓婁笅鏂�
     const [selectedOption, setSelectedOption] = useState(null);
     const [treeData, setTreeData] = useState([]);
+    // 鐢ㄤ簬绠$悊灞曞紑椤圭殑鐘舵��
+    const [expandedItems, setExpandedItems] = useState([]);
+
+    // 閫掑綊鏀堕泦鎵�鏈夎妭鐐圭殑 id
+    const collectAllNodeIds = (nodes) => {
+        let allIds = [];
+        nodes.forEach((node) => {
+            allIds.push(node.id.toString());
+            if (node.children && Array.isArray(node.children)) {
+                allIds = allIds.concat(collectAllNodeIds(node.children));
+            }
+        });
+        return allIds;
+    };
+
+    const haveChildren = (item) => {
+        // 濡傛灉 item 鏄竴涓暟缁勶紝閬嶅巻鏁扮粍涓殑姣忎釜鍏冪礌
+        if (Array.isArray(item)) {
+            return item.map((k) => haveChildren(k));
+        }
+
+        // 濡傛灉 item 鏄竴涓璞�
+        if (item && typeof item === 'object') {
+            // 灏� id 杞崲涓哄瓧绗︿覆
+            if (item.id !== undefined) {
+                item.id = item.id.toString();
+            }
+
+            // 濡傛灉瀛樺湪 children锛岄�掑綊澶勭悊 children
+            if (item.children && Array.isArray(item.children)) {
+                item.children = haveChildren(item.children);
+            }
+        }
+
+        return item;
+    };
 
     useEffect(() => {
         request.post('/matnrGroup/tree')
             .then(res => {
-                console.log('Tree Data:', res);
                 if (res?.data?.code === 200) {
-                    setTreeData(res.data.data);
+                    let data = res.data.data;
+                    let items = haveChildren(data);
+                    setTreeData(items);
+                    // 褰撴爲鏁版嵁鏇存柊鏃讹紝鏇存柊灞曞紑椤圭姸鎬�
+                    setExpandedItems(collectAllNodeIds(items));
                 } else {
                     notify(res.data.msg);
                 }
@@ -32,12 +70,7 @@
             .catch(error => {
                 notify('Error fetching tree data');
             });
-        
-        
-        
-    },[]);
-
-
+    }, []);
 
     const treeData1 = [
         {
@@ -46,8 +79,12 @@
             editable: true,
             children: [
                 {
-                    id: 'grid-community', label: '@mui/x-data-grid', editable: true, children: [
-                        { id: 'grid-community22', label: '@mui/x-data-grid', editable: true },]
+                    id: 'grid-community',
+                    label: '@mui/x-data-grid',
+                    editable: true,
+                    children: [
+                        { id: 'grid-community22', label: '@mui/x-data-grid', editable: true },
+                    ],
                 },
                 { id: 'grid-pro', label: '@mui/x-data-grid-pro', editable: true },
                 { id: 'grid-premium', label: '@mui/x-data-grid-premium', editable: true },
@@ -73,15 +110,16 @@
             children: [{ id: 'tree-view-community1', label: '@mui/x-tree-view' }],
         },
     ];
+
     const handleNodeSelect = (event, nodeId) => {
         console.log('Selected Node ID:', nodeId);
         setFilters({ groupId: nodeId });
         // 鍦ㄨ繖閲屽彲浠ユ牴鎹� nodeId 鏇存柊涓诲唴瀹瑰尯鍩�
     };
-    const handleSearch = () => {
-            console.log('Search Input:', selectedOption);
-    };
 
+    const handleSearch = () => {
+        console.log('Search Input:', selectedOption);
+    };
 
     const CustomCheckbox = React.forwardRef(function CustomCheckbox(props, ref) {
         return <input type="checkbox" ref={ref} {...props} />;
@@ -99,33 +137,35 @@
         );
     });
 
-
     return (
         <Card
             sx={{
-                display: { xs: 'none', md: 'block', },
                 order: -1,
                 mr: 2,
                 mt: 8,
                 alignSelf: 'flex-start',
                 border: theme.palette.mode === 'light' && '1px solid #e0e0e3',
-                width: 250
+                width: 250,
+                minWidth: 150,
+                height: `calc(100% - 120px)`,
             }}
         >
             <CardContent>
                 <SavedQueriesList icon={<BookmarkIcon />} />
-                <FilterLiveSearch source="condition"  />
+                <FilterLiveSearch source="condition" />
                 <RichTreeView
-                    defaultExpandedItems={['grid', 'pickers']}
+                    // 浣跨敤 expandedItems 鎺у埗灞曞紑鐘舵��
+                    expandedItems={expandedItems}
+                    // 澶勭悊灞曞紑椤圭姸鎬佺殑鍙樺寲
+                    onExpandedItemsChange={(newExpandedItems) => setExpandedItems(newExpandedItems)}
                     expansionTrigger="iconContainer"
-                    items={ treeData }
-                    slots={ CustomTreeItem }
+                    items={treeData}
+                    slots={CustomTreeItem}
                     onItemClick={handleNodeSelect} // 鐩戝惉鑺傜偣鐐瑰嚮浜嬩欢
-
                 />
             </CardContent>
         </Card>
-    )
-}
+    );
+};
 
-export default MatListAside;
+export default MatListAside;
\ No newline at end of file

--
Gitblit v1.9.1