menuModel = new menuModel; } /** * @title: 获取菜单列表 * @return array * @Author: wangkewei * @Date: 2021/5/18 9:26 */ public function getList() { $data = $this->request->param(); $list = $this->menuModel->with(['menurequest'])->order('sort ASC')->select()->toArray(); $list = FieldConverList($list); foreach($list as &$row){ $row['is_root'] = $row['is_root'] ==1; $row['affix'] = $row['affix'] ==1; $row['hidden'] = $row['hidden'] ==1; $row['dot'] = $row['dot'] ==1; $row['noKeepAlive'] = $row['noKeepAlive'] ==1; $row['alwaysShow'] = $row['alwaysShow'] ==1; $row['isCustomSvgIcon'] = $row['isCustomSvgIcon'] ==1; $row['tabHidden'] = $row['tabHidden'] ==1; } $list = array2tree($list,'pid','menu_id'); return res(1,"获取成功",$list); } /** * @title: 编辑菜单 * @param array * @return array * @Author: wangkewei * @Date: 2021/5/18 9:27 */ public function doEdit() { $params = $this->request->param(); $meta = !empty($params['meta'])?$params['meta']:[]; unset($params['meta']); $params = array_merge($params,$meta); $check = $this->validate($params,MenuValidate::class); if(true!==$check){ return Result(0,$check); } $pid = !empty($params['pid'])?$params['pid']:0; $data = [ "name" => $params['name'], "title" => $params['title'], "path" => $params['path'], "component" => $params['component']??"", "is_root" => $params['name']=='Root'?1:2,//1是2不是 "is_parent" => $pid==0?1:2,//1是2不是 "pid" => $pid, "badge" => !empty($params['badge'])?$params['badge']:'', "icon" => !empty($params['icon'])?$params['icon']:"", "redirect" => !empty($params['redirect'])?$params['redirect']:"", "affix" => !empty($params['affix'])?1:2,//1是2不是 "hidden" => !empty($params['hidden'])?1:2,//1是2不是 "dot" => !empty($params['dot'])?1:2,//1是2不是 "noKeepAlive" => !empty($params['noKeepAlive'])?1:2,//1是2不是 "alwaysShow" => !empty($params['alwaysShow'])?1:2,//1是2不是 "isCustomSvgIcon" => !empty($params['isCustomSvgIcon'])?1:2,//1是2不是 "tabHidden" => !empty($params['tabHidden'])?1:2,//1是2不是 "sort" => !empty($params['sort'])?$params['sort']:0, "cascade" => !empty($params['cascade'])?$params['cascade']:"", "status" => !empty($params['status'])?:1 ]; if(!empty($params['menu_id'])){ $data['menu_id'] = $params['menu_id']; } $this->menuModel->replace()->save($data); $menu_id = $this->menuModel->menu_id; $parent_path = []; if(!empty($pid)){ $pInfo = $this->menuModel->where("menu_id",$pid)->find(); $parent_path = explode(',',$pInfo->parent_path); $this->menuModel->where('menu_id',$pid)->save(['is_parent'=>1]); } $parent_path[] = $menu_id; $this->menuModel->where("menu_id",$menu_id)->update(['parent_path'=>implode(',',$parent_path)]); slog(1,"编辑了菜单".$data['title']); return res(1,"保存成功",$menu_id); } /** * @title: 菜单删除 * @param {int} {id} {必填} {菜单id} * @return array * @Author: wangkewei * @Date: 2021/5/18 9:27 */ public function doDelete(int $id) { $ids = menuModel::where('menu_id',$id)->whereOr('parent_path','find in set',$id)->column('menu_id'); $where = []; if(!empty($ids)){ $where[] = ['menu_id','IN',$ids]; } // 所删除的菜单的请求 $requestIds = Menurequest::where('menu_id','IN',$ids)->column('menu_request_id'); try{ if(!empty($where)){ menuModel::startTrans(); $whereOr = []; foreach($ids as $menu_id){ $whereOr[] = ['menu_ids','FIND IN SET',$menu_id]; } // 删除企业类型相关的菜单和请求 $orgTypeList = OrgType::whereOr($whereOr)->select()->toArray(); $orgTypeSaveData = []; foreach($orgTypeList as $orgTypeItem){ $orgTypeItem['menu_ids'] = array_diff($orgTypeItem['menu_ids'],$ids); $orgTypeItem['request_ids'] = array_diff($orgTypeItem['request_ids'],$requestIds); $orgTypeSaveData[] = $orgTypeItem; } // 删除企业相关的菜单和请求 $orgList = Org::whereOr($whereOr)->select()->toArray(); $orgSaveData = []; foreach($orgList as $orgItem){ $orgItem['menu_ids'] = array_diff($orgItem['menu_ids'],$ids); $orgItem['request_ids'] = array_diff($orgItem['request_ids'],$requestIds); $orgSaveData[] = $orgItem; } // 删除企业角色相关的菜单和请求 $orgRoleList = OrgRole::whereOr($whereOr)->select()->toArray(); $orgRoleSaveData = []; foreach($orgRoleList as $orgRoleItem){ $orgRoleItem['menu_ids'] = array_diff($orgRoleItem['menu_ids'],$ids); $orgRoleItem['request_ids'] = array_diff($orgRoleItem['request_ids'],$requestIds); $orgRoleSaveData[] = $orgRoleItem; } // 保存修改 (new OrgType)->replace()->saveAll($orgTypeSaveData); (new Org)->replace()->saveAll($orgSaveData); (new OrgRole)->replace()->saveAll($orgRoleSaveData); // 删除菜单 menuModel::destroy(function($query)use($where){ $query->where($where); }); // 删除请求 Menurequest::destroy(function($query)use($where){ $query->where($where); }); menuModel::commit(); } }catch(\Exception $e){ menuModel::rollback(); return res(2,"删除失败",$e->getFile().'第'.$e->getLine().'行:'.$e->getMessage(),$e->getTrace()); } slog(1,"删除了菜单"); return res(1,"删除成功"); } }