From 610f8748ca4cb7ed8ea243c1457586b58341a73f Mon Sep 17 00:00:00 2001 From: wanghongjun <1445693971@qq.com> Date: Wed, 13 May 2026 17:02:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E9=80=89=E6=8B=A9=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8B=BE=E9=80=89=E8=8F=9C=E5=8D=95=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Models/AdminMenu.php | 20 +++++++++++++++++--- app/Services/AdminRolesService.php | 10 ++++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/app/Models/AdminMenu.php b/app/Models/AdminMenu.php index dd45b34..8d87cca 100644 --- a/app/Models/AdminMenu.php +++ b/app/Models/AdminMenu.php @@ -34,9 +34,8 @@ class AdminMenu extends Model if ($menu_ids) { $model->whereIn('id', $menu_ids); } - $list = $model->where('parent_id', $parent_id)->whereNull( - 'deleted_at' - )->select(['id', 'title'])->get()->toArray(); + $list = $model->where('parent_id', $parent_id)->select(['id', 'title']) + ->get()->toArray(); foreach ($list as &$item) { $item['title'] = empty($item['title']) ? '' @@ -111,4 +110,19 @@ class AdminMenu extends Model 'role_id' ); } + + public static function getParentIds(&$data, $menu_ids) + { + $parent_ids = self::query()->where('status', 1)->whereIn( + 'id', + $menu_ids + )->pluck('parent_id'); + if ($parent_ids) { + $parent_ids = $parent_ids->toArray(); + if (!in_array('0', $parent_ids)) { + $data = array_merge($data, $parent_ids); + self::getParentIds($data, $parent_ids); + } + } + } } diff --git a/app/Services/AdminRolesService.php b/app/Services/AdminRolesService.php index 9b736a8..14a0998 100644 --- a/app/Services/AdminRolesService.php +++ b/app/Services/AdminRolesService.php @@ -2,11 +2,10 @@ namespace App\Services; +use App\Models\AdminMenu; use App\Models\AdminRoleMenu; use App\Models\AdminRoles; use Exception; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; final class AdminRolesService @@ -115,6 +114,13 @@ final class AdminRolesService */ private function addAdminRoleMenu(int $role_id, array $menu_ids): void { + $parent_ids = []; + AdminMenu::getParentIds($parent_ids, $menu_ids); + if ($parent_ids) { + $parent_ids = array_unique($parent_ids); + $menu_ids = array_merge($menu_ids,$parent_ids); + $menu_ids = array_unique($menu_ids); + } AdminRoleMenu::createModel($menu_ids, $role_id); $AdminRoleMenuData = AdminRoleMenu::getMenuData($role_id); $this->logService->logCreatedData(