修复若干bug
This commit is contained in:
@@ -8,6 +8,8 @@ use app\admin\BaseController;
|
||||
use think\response\Json;
|
||||
use app\model\AdminModules;
|
||||
use app\model\System\AdminUserGroup;
|
||||
use app\model\SystemMenu;
|
||||
use Symfony\Component\VarDumper\VarDumper;
|
||||
|
||||
class ModulesController extends BaseController
|
||||
{
|
||||
@@ -52,10 +54,9 @@ class ModulesController extends BaseController
|
||||
{
|
||||
try {
|
||||
$userInfo = $this->getAdminUserInfo();
|
||||
|
||||
$groupId = $userInfo['group_id'] ?? null;
|
||||
$menuIds = [];
|
||||
|
||||
|
||||
if ($groupId) {
|
||||
$userGroup = AdminUserGroup::where('id', $groupId)->find();
|
||||
if ($userGroup && $userGroup->rights) {
|
||||
@@ -64,7 +65,7 @@ class ModulesController extends BaseController
|
||||
$menuIds = is_array($decoded) ? $decoded : [];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (empty($menuIds)) {
|
||||
return json([
|
||||
'code' => 200,
|
||||
@@ -75,9 +76,14 @@ class ModulesController extends BaseController
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
// 根据子菜单ID查询所有父级模块ID
|
||||
$moduleIds = $this->getModuleIdsByMenuIds($menuIds);
|
||||
|
||||
$modules = AdminModules::where('delete_time', null)
|
||||
->whereIn('mid', $menuIds)
|
||||
->whereIn('id', $moduleIds)
|
||||
->where('status', 1)
|
||||
->where('is_show', 1)
|
||||
->order('sort', 'asc')
|
||||
->order('id', 'asc')
|
||||
->select()
|
||||
@@ -386,6 +392,64 @@ class ModulesController extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据菜单ID列表获取对应的模块ID列表(包括父级模块)
|
||||
* @param array $menuIds 菜单ID列表(子菜单)
|
||||
* @return array 模块ID列表
|
||||
*/
|
||||
private function getModuleIdsByMenuIds(array $menuIds): array
|
||||
{
|
||||
if (empty($menuIds)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// 1. 获取所有子菜单及其父级菜单ID
|
||||
$allMenuIds = $this->getMenuIdsWithParents($menuIds);
|
||||
|
||||
// 2. 获取所有匹配的模块(mid在allMenuIds中)
|
||||
$moduleIds = AdminModules::where('delete_time', null)
|
||||
->whereIn('mid', $allMenuIds)
|
||||
->column('id');
|
||||
|
||||
// 去重并返回
|
||||
return array_unique($moduleIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取菜单ID及其所有父级菜单ID
|
||||
* @param array $menuIds 菜单ID数组
|
||||
* @return array 包含所有父级菜单的ID数组
|
||||
*/
|
||||
private function getMenuIdsWithParents(array $menuIds): array
|
||||
{
|
||||
if (empty($menuIds)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$allIds = $menuIds;
|
||||
$toCheck = $menuIds;
|
||||
|
||||
while (!empty($toCheck)) {
|
||||
// 查询这些菜单的父级
|
||||
$parents = SystemMenu::whereIn('id', $toCheck)
|
||||
->where('delete_time', null)
|
||||
->column('pid');
|
||||
|
||||
// 过滤掉已经存在的和为0的父ID
|
||||
$newParents = [];
|
||||
foreach ($parents as $pid) {
|
||||
if ($pid > 0 && !in_array($pid, $allIds)) {
|
||||
$newParents[] = $pid;
|
||||
$allIds[] = $pid;
|
||||
}
|
||||
}
|
||||
|
||||
$toCheck = $newParents;
|
||||
}
|
||||
|
||||
return $allIds;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取模块选择列表
|
||||
* @return Json
|
||||
|
||||
Reference in New Issue
Block a user