128 lines
3.6 KiB
PHP
128 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace app\admin\controller\sys;
|
|
|
|
use app\admin\model\SysMenu;
|
|
use app\common\controller\Backend;
|
|
use think\facade\Db;
|
|
|
|
class Menu extends Backend
|
|
{
|
|
protected array $noNeedLogin = ['*'];
|
|
|
|
// 菜单列表
|
|
public function nav()
|
|
{
|
|
$admin = $this->auth->getAdmin();
|
|
$return = SysMenu::getMenuList($this->auth->getUserMenus($admin['user_id']));
|
|
|
|
$this->n_success([
|
|
'menuList' => convertToCamelCase($return['menuList']),
|
|
'permissions' => $return['permissions'],
|
|
]);
|
|
}
|
|
|
|
public function list()
|
|
{
|
|
$menuList = Db::name('sys_menu')->order('order_num', 'asc')->select()->toArray();
|
|
|
|
// 收集所有 parent_id
|
|
$parentIds = array_column($menuList, 'parent_id');
|
|
$parentIds = array_unique(array_filter($parentIds));
|
|
|
|
// 批量查询父级菜单
|
|
$parentMap = [];
|
|
if (!empty($parentIds)) {
|
|
$parents = Db::name('sys_menu')->whereIn('menu_id', $parentIds)->column('name', 'menu_id');
|
|
$parentMap = $parents;
|
|
}
|
|
|
|
// 设置 parentName
|
|
foreach ($menuList as &$menu) {
|
|
$menu['menu_id'] = (string) $menu['menu_id'];
|
|
$menu['parent_id'] = (string) $menu['parent_id'];
|
|
|
|
$menu['parent_name'] = $parentMap[$menu['parent_id']] ?? '';
|
|
}
|
|
unset($menu);
|
|
|
|
return $this->ApiDataReturn(convertToCamelCase($menuList));
|
|
}
|
|
|
|
public function info()
|
|
{
|
|
$data = Db::name('sys_menu')->where([
|
|
'menu_id' => $this->request->param('id')
|
|
])->find();
|
|
$data['menu_id'] = (string) $data['menu_id'];
|
|
$data['parent_id'] = (string) $data['parent_id'];
|
|
$data = convertToCamelCase($data);
|
|
$this->n_success(['menu' => $data]);
|
|
}
|
|
|
|
|
|
|
|
public function save()
|
|
{
|
|
$menu = $this->request->post();
|
|
SysMenu::verifyForm($menu);
|
|
$menu = convertKeysCamelToSnakeRecursive($menu);
|
|
Db::connect(get_master_connect_name())->name('sys_menu')->insert($menu);
|
|
$this->success();
|
|
}
|
|
|
|
|
|
|
|
public function selectInfo()
|
|
{
|
|
$list = Db::name('sys_menu')->where([
|
|
'type' => ['!=', 2]
|
|
])->order('order_num')->select()->toArray();
|
|
|
|
$list[] = [
|
|
'menu_id' => 0,
|
|
'name' => '一级菜单',
|
|
'parent_id' => -1,
|
|
'open' => true,
|
|
];
|
|
$list = convertToCamelCase($list);
|
|
$this->n_success(['menuList' => $list]);
|
|
// $this->successWithData([
|
|
// 'menuList' => $list
|
|
// ]);
|
|
}
|
|
|
|
public function update()
|
|
{
|
|
$params = $this->request->post();
|
|
$params = convertKeysCamelToSnakeRecursive($params);
|
|
Db::name('sys_menu')->where([
|
|
'menu_id' => $params['menu_id']
|
|
])->update($params);
|
|
$this->success();
|
|
}
|
|
|
|
public function delete()
|
|
{
|
|
$post = $this->request->post();
|
|
if(empty($post['menuId'])) {
|
|
$this->error('参数错误');
|
|
}
|
|
$menuId = $post['menuId'];
|
|
if($menuId <= 31) {
|
|
$this->error('系统菜单,不能删除');
|
|
}
|
|
|
|
// 判断是否有子菜单或按钮
|
|
$menuList = Db::connect(get_slave_connect_name())->name('sys_menu')->where(['parent_id' => $menuId])->order('order_num', 'asc')->select()->toArray();
|
|
if($menuList) {
|
|
$this->error('请先删除子菜单或按钮');
|
|
}
|
|
|
|
if(Db::name('sys_menu')->where(['menu_id' => $menuId])->delete()) {
|
|
$this->success('删除成功');
|
|
}
|
|
$this->error('操作失败');
|
|
}
|
|
|
|
} |