setName('admin:menu:update') ->addOption('id', null, Option::VALUE_REQUIRED, '菜单ID(必填)') ->addOption('title', null, Option::VALUE_OPTIONAL, '菜单标题') ->addOption('path', null, Option::VALUE_OPTIONAL, '菜单路径') ->addOption('icon', null, Option::VALUE_OPTIONAL, '菜单图标') ->addOption('parent-id', null, Option::VALUE_OPTIONAL, '父级菜单ID') ->addOption('sort', null, Option::VALUE_OPTIONAL, '排序') ->setDescription('编辑菜单'); } protected function execute(Input $input, Output $output) { // 获取参数 $id = (int)($input->getOption('id') ?? 0); $title = $input->getOption('title'); $path = $input->getOption('path'); $icon = $input->getOption('icon'); $parentId = $input->getOption('parent-id'); $sort = $input->getOption('sort'); // 验证参数:id 是必填的 if (empty($id)) { $output->error('菜单ID不能为空'); return false; } try { // 1. 验证菜单是否存在 $menu = SystemMenu::find($id); if (empty($menu)) { $output->writeln('菜单ID ' . $id . ' 不存在'); return false; } // 2. 准备更新数据 $updateData = []; if ($title !== null) { $updateData['title'] = $title; } if ($path !== null) { $updateData['path'] = $path; } if ($icon !== null) { $updateData['icon'] = $icon; } if ($parentId !== null) { $updateData['parent_id'] = (int)$parentId; } if ($sort !== null) { $updateData['sort'] = (int)$sort; } // 检查是否有需要更新的字段 if (empty($updateData)) { $output->error('没有提供需要更新的字段'); return false; } // 3. 调用 MenuService 更新菜单 $menuService = new MenuService(0); $success = $menuService->update($id, $updateData); if (!$success) { $output->writeln('菜单更新失败'); return false; } // 4. 重新查询菜单数据 $updatedMenu = SystemMenu::find($id); if (empty($updatedMenu)) { $output->writeln('菜单更新后查询失败'); return false; } $outputData = [ 'id' => (int)$updatedMenu->id, 'title' => $updatedMenu->title ?? '', 'path' => $updatedMenu->href ?? '', 'icon' => $updatedMenu->icon ?? '', 'parent_id' => (int)($updatedMenu->pid ?? 0), 'sort' => (int)($updatedMenu->sort ?? 0), 'node' => $updatedMenu->auth_node ?? '', ]; // 5. 输出结果 $output->writeln('菜单编辑成功'); $output->writeln('菜单ID: ' . $outputData['id'] . ''); $output->writeln('菜单标题: ' . $outputData['title'] . ''); $output->writeln('菜单路径: ' . $outputData['path'] . ''); $output->writeln('菜单图标: ' . $outputData['icon'] . ''); $output->writeln('父级菜单ID: ' . $outputData['parent_id'] . ''); $output->writeln('排序: ' . $outputData['sort'] . ''); } catch (\Throwable $e) { $output->error('编辑菜单失败: ' . $e->getMessage()); return false; } return true; } }