Skip to content

Commit fb51058

Browse files
committed
fix menu
1 parent 332d752 commit fb51058

File tree

4 files changed

+68
-42
lines changed

4 files changed

+68
-42
lines changed

antd-pro/src/pages/components/menu/index.tsx

+54-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { list, save, del } from '@/services/api/menu';
1+
import { list, save, del, tree } from '@/services/api/menu';
22
import { PlusOutlined } from '@ant-design/icons';
33
import type { ActionType, ProColumns } from '@ant-design/pro-components';
4-
import { ModalForm, PageContainer, ProCard, ProFormDigit, ProFormText } from '@ant-design/pro-components';
4+
import { ModalForm, PageContainer, ProCard, ProFormDigit, ProFormText, ProFormTreeSelect } from '@ant-design/pro-components';
55
import { Button, Form, message, Popconfirm } from 'antd';
66
import { MyTable } from 'coding-components';
77
import React, { useRef, useState, useEffect } from 'react';
@@ -13,20 +13,13 @@ const MenuPage: React.FC = () => {
1313
const [form] = Form.useForm();
1414
const [parentId, setParentId] = useState<number>(1);
1515
const [createModalOpen, handleModalOpen] = useState<boolean>(false);
16+
const [treeData, setTreeData] = useState<any[]>([]);
17+
const treeRef = useRef();
1618

1719
const handleAdd = async (fields: any) => {
1820
const hide = message.loading('正在添加');
1921
try {
20-
const parentId = fields.parentId;
21-
delete fields.parentId;
22-
const request = {
23-
...fields,
24-
parent: {
25-
id: parentId
26-
}
27-
}
28-
console.log(request);
29-
await save(request);
22+
await save(fields);
3023
hide();
3124
message.success('保存成功');
3225
return true;
@@ -46,6 +39,8 @@ const MenuPage: React.FC = () => {
4639
message.success('删除成功');
4740
if (actionRef.current) {
4841
actionRef.current.reload();
42+
//@ts-ignore
43+
treeRef.current?.refresh();
4944
}
5045
return true;
5146
} catch (error) {
@@ -115,6 +110,16 @@ const MenuPage: React.FC = () => {
115110
},
116111
];
117112

113+
const reloadTree = () => {
114+
tree().then(res => {
115+
setTreeData([res.data]);
116+
})
117+
}
118+
119+
useEffect(() => {
120+
reloadTree();
121+
}, []);
122+
118123
useEffect(() => {
119124
if (actionRef.current) {
120125
actionRef.current.reload();
@@ -126,6 +131,7 @@ const MenuPage: React.FC = () => {
126131
<ProCard gutter={8}>
127132
<ProCard colSpan="20%">
128133
<MenuTree
134+
ref={treeRef}
129135
onSelect={(selectedKeys) => {
130136
setParentId(Number(selectedKeys[0]));
131137
}}
@@ -186,8 +192,11 @@ const MenuPage: React.FC = () => {
186192
if (actionRef.current) {
187193
actionRef.current.reload();
188194
}
195+
//@ts-ignore
196+
treeRef.current?.refresh();
189197
}
190-
}}
198+
}
199+
}
191200
>
192201
<ProFormText
193202
hidden={true}
@@ -199,6 +208,38 @@ const MenuPage: React.FC = () => {
199208
name="parentId"
200209
/>
201210

211+
<ProFormTreeSelect
212+
name="parentId"
213+
label="父级菜单"
214+
request={() => {
215+
const id = form.getFieldValue('id');
216+
const fetchTree = (root: any, list: any) => {
217+
return list.map((item: any) => {
218+
const disable = root ? root : item.id === id;
219+
return {
220+
label: item.name,
221+
value: item.id,
222+
disabled: disable,
223+
children: item.children ? fetchTree(disable, item.children) : []
224+
}
225+
});
226+
}
227+
return fetchTree(null, treeData);
228+
}}
229+
fieldProps={
230+
{
231+
onChange: (value) => {
232+
form.setFieldValue('typeId', value);
233+
},
234+
showArrow: false,
235+
filterTreeNode: true,
236+
showSearch: true,
237+
multiple: false,
238+
treeDefaultExpandAll: true,
239+
}
240+
}
241+
/>
242+
202243
<ProFormText
203244
placeholder="请输入菜单名称"
204245
label="菜单名称"

antd-pro/src/pages/components/menu/tree.tsx

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { Tree } from 'antd';
2-
import React, { useEffect, useState } from 'react';
2+
import React, { useEffect, useImperativeHandle, useState, forwardRef } from 'react';
33
import { DownOutlined, HomeOutlined, TeamOutlined } from '@ant-design/icons';
44
import { DataNode } from 'antd/es/tree';
55
import { tree } from '@/services/api/menu';
66

7-
interface MenuPageProps{
7+
interface MenuPageProps {
88
onSelect?: (selectedKeys: React.Key[], info?: any) => void;
99
}
1010

11-
const MenuTree: React.FC<MenuPageProps> = (props) => {
11+
const MenuTree = forwardRef((props: MenuPageProps, ref) => {
1212

1313
const [treeData, setTreeData] = useState<DataNode[]>([]);
1414
const [defaultKeys, setSelectedKeys] = useState<React.Key[]>([1]);
@@ -38,6 +38,10 @@ const MenuTree: React.FC<MenuPageProps> = (props) => {
3838
}, []);
3939

4040

41+
useImperativeHandle(ref, () => ({
42+
refresh: refreshTree,
43+
}));
44+
4145
const onSelect = (selectedKeys: React.Key[]) => {
4246
setSelectedKeys(selectedKeys);
4347
if (props.onSelect) {
@@ -64,7 +68,7 @@ const MenuTree: React.FC<MenuPageProps> = (props) => {
6468
</>
6569
)
6670

67-
}
71+
});
6872

6973

7074
export default MenuTree

components-server/components/menu/menu-domain/src/main/java/com/codingapi/components/menu/domain/Menu.java

+6
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ public static Menu root() {
4040
public int parentId() {
4141
return parent == null ? 0 : parent.getId();
4242
}
43+
44+
public void setParentId(int id){
45+
Menu parent = new Menu();
46+
parent.setId(id);
47+
this.parent = parent;
48+
}
4349

4450
@Transient
4551
protected List<Menu> children;

components-server/components/menu/menu-domain/src/main/java/com/codingapi/components/menu/domain/Tree.java

-25
This file was deleted.

0 commit comments

Comments
 (0)