123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- namespace app\admin\controller\base\menu;
- /**
- * @title: 菜单
- */
- use app\admin\controller\Base;
- use app\admin\validate\base\menu\Menu as MenuValidate;
- use app\common\model\base\menu\Menu as menuModel;
- use app\common\model\base\org\OrgType;
- use app\common\model\base\org\Org;
- use app\common\model\base\org\OrgRole;
- use app\common\model\base\menu\Menurequest;
- class Menu extends Base
- {
- protected $menuModel = null;
- public function initialize()
- {
- parent::initialize();
- $this->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,"删除成功");
- }
- }
|