fix(config): add individual menu CRUD endpoints and fix frontend menu data handling
- Add POST /config/menus (create single menu)
- Add PUT /config/menus/{id} (update single menu)
- Add DELETE /config/menus/{id} (soft delete single menu)
- Frontend MenuConfig was calling individual CRUD routes that didn't exist,
causing 404 errors on all create/update/delete operations
- Fix frontend to correctly handle nested tree response from backend
This commit is contained in:
@@ -35,6 +35,20 @@ interface MenuItem {
|
||||
|
||||
// --- Helpers ---
|
||||
|
||||
/** Convert nested menu tree back to flat list */
|
||||
function flattenMenuTree(tree: MenuItem[]): MenuItem[] {
|
||||
const result: MenuItem[] = [];
|
||||
const walk = (items: MenuItem[]) => {
|
||||
for (const item of items) {
|
||||
const { children, ...rest } = item;
|
||||
result.push(rest as MenuItem);
|
||||
if (children?.length) walk(children);
|
||||
}
|
||||
};
|
||||
walk(tree);
|
||||
return result;
|
||||
}
|
||||
|
||||
/** Convert flat menu list to tree structure for Table children prop */
|
||||
function buildMenuTree(items: MenuItem[]): MenuItem[] {
|
||||
const map = new Map<string, MenuItem>();
|
||||
@@ -92,9 +106,10 @@ export default function MenuConfig() {
|
||||
setLoading(true);
|
||||
try {
|
||||
const { data: resp } = await client.get('/config/menus');
|
||||
const list: MenuItem[] = resp.data ?? resp;
|
||||
setMenus(list);
|
||||
setMenuTree(buildMenuTree(list));
|
||||
// 后端返回嵌套树结构,直接使用
|
||||
const tree: MenuItem[] = resp.data ?? resp;
|
||||
setMenus(flattenMenuTree(tree));
|
||||
setMenuTree(tree);
|
||||
} catch {
|
||||
message.error('加载菜单失败');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user