webman_duanju/app/admin/controller/sys/Menu.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('操作失败');
}
}