103 lines
2.9 KiB
PHP
103 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace app\admin\model;
|
|
|
|
use ba\Exception;
|
|
use think\facade\Db;
|
|
use think\model;
|
|
|
|
/**
|
|
* 菜单模型
|
|
*/
|
|
class SysMenu extends model
|
|
{
|
|
// 菜单类型常量
|
|
const MENU_TYPE_CATALOG = 0; // 目录
|
|
const MENU_TYPE_MENU = 1; // 菜单
|
|
const MENU_TYPE_BUTTON = 2; // 按钮
|
|
|
|
public static function getMenuList($menu):array
|
|
{
|
|
$one_menu = [];
|
|
$t_menu = [];
|
|
$p_list = [];
|
|
foreach ($menu as $k => $v) {
|
|
if(in_array($v['type'], [0, 1])) {
|
|
if($v['parent_id'] == 0) {
|
|
$one_menu[] = $v;
|
|
}else {
|
|
$t_menu[] = $v;
|
|
}
|
|
}
|
|
// 权限处理
|
|
if($v['perms'] ) {
|
|
if(strpos($v['perms'], ',') !== false) {
|
|
foreach (explode(',', $v['perms']) as $item) {
|
|
$p_list[] = $item;
|
|
}
|
|
}else {
|
|
$p_list[] = $v['perms'];
|
|
}
|
|
}
|
|
}
|
|
foreach ($one_menu as $k => &$one_value) {
|
|
foreach ($t_menu as $two_k => $two_value) {
|
|
if($two_value['parent_id'] == $one_value['menu_id']) {
|
|
$one_value['list'][] = convertToCamelCase($two_value);
|
|
}
|
|
}
|
|
}
|
|
$return['menuList'] = convertToCamelCase($one_menu);
|
|
$return['permissions'] = $p_list;
|
|
return $return;
|
|
}
|
|
|
|
|
|
|
|
public static function verifyForm($menu)
|
|
{
|
|
// 验证菜单名称
|
|
if (empty($menu['name'])) {
|
|
throw new Exception("菜单名称不能为空");
|
|
}
|
|
|
|
// 验证上级菜单
|
|
if (!isset($menu['parentId'])) {
|
|
throw new Exception("上级菜单不能为空");
|
|
}
|
|
|
|
// 菜单类型为菜单时,验证 URL
|
|
if ($menu['type'] == self::MENU_TYPE_MENU) {
|
|
if (empty($menu['url'])) {
|
|
throw new Exception("菜单URL不能为空");
|
|
}
|
|
}
|
|
|
|
// 获取上级菜单类型
|
|
$parentType = self::MENU_TYPE_CATALOG;
|
|
if ($menu['parentId'] != 0) {
|
|
$parentMenu = Db::name('sys_menu')->where(['menu_id' => $menu['parentId']])->find();
|
|
if (!$parentMenu) {
|
|
throw new Exception("上级菜单不存在");
|
|
}
|
|
$parentType = $parentMenu['type'];
|
|
}
|
|
|
|
// 目录、菜单类型验证
|
|
if ($menu['type'] == self::MENU_TYPE_CATALOG || $menu['type'] == self::MENU_TYPE_MENU) {
|
|
if ($parentType != self::MENU_TYPE_CATALOG) {
|
|
throw new Exception("上级菜单只能为目录类型");
|
|
}
|
|
return;
|
|
}
|
|
|
|
// 按钮类型验证
|
|
if ($menu['type'] == self::MENU_TYPE_BUTTON) {
|
|
if ($parentType != self::MENU_TYPE_MENU) {
|
|
throw new Exception("上级菜单只能为菜单类型");
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
} |